diff -pruN 1.31.0-5/.github/workflows/tests.yml 1.33.0-2/.github/workflows/tests.yml
--- 1.31.0-5/.github/workflows/tests.yml	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/.github/workflows/tests.yml	2025-08-19 12:13:28.000000000 +0000
@@ -12,7 +12,6 @@ jobs:
 
         env:
             COMPOSER_ROOT_VERSION: 1.x-dev
-            SYMFONY_PHPUNIT_VERSION: 8.5
 
         strategy:
             matrix:
@@ -25,6 +24,7 @@ jobs:
                     - php: '8.2'
                     - php: '8.3'
                     - php: '8.4'
+                    - php: '8.5'
             fail-fast: false
 
         steps:
@@ -35,16 +35,18 @@ jobs:
                 uses: shivammathur/setup-php@v2
                 with:
                     coverage: "none"
-                    extensions: "apcu, intl, mbstring, odbc, uuid"
+                    extensions: "apcu, intl-73.2, mbstring, odbc, uuid"
                     ini-values: "memory_limit=-1, session.gc_probability=0, apc.enable_cli=1"
                     php-version: "${{ matrix.php }}"
                     tools: "composer:v2"
 
             -   name: Install dependencies
-                run: composer --prefer-source --no-progress --ansi install
+                run: |
+                    composer --prefer-source --no-progress --ansi install
+                    ./phpunit install
 
             -   name: Run tests
                 run: |
                     ok=0
-                    ./vendor/bin/simple-phpunit || ok=1
+                    ./phpunit || ok=1
                     [[ "${{ matrix.mode }}" = experimental ]] || (exit $ok)
diff -pruN 1.31.0-5/.gitignore 1.33.0-2/.gitignore
--- 1.31.0-5/.gitignore	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/.gitignore	2025-08-19 12:13:28.000000000 +0000
@@ -3,5 +3,6 @@
 .phpunit.result.cache
 composer.lock
 phpunit.xml
+.phpunit
 vendor/
 /tests/unicode
diff -pruN 1.31.0-5/CHANGELOG.md 1.33.0-2/CHANGELOG.md
--- 1.31.0-5/CHANGELOG.md	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/CHANGELOG.md	2025-08-19 12:13:28.000000000 +0000
@@ -1,3 +1,20 @@
+# 1.33.0
+
+  * Add polyfill for `ReflectionConstant`
+  * Add polyfill for `bcdivmod()`
+  * Add polyfill for `grapheme_str_split()`
+  * Add polyfills for `array_first()` and `array_last()`
+  * Fix `json_validate()` with properties containing a NUL byte
+
+# 1.32.0
+
+  * Remove the PHP 7.2 polyfill
+  * Polyfill `#[\NoDiscard]`
+  * Polyfill `fpow`
+  * Polyfill `get_error_handler()` and `get_exception_handler()`
+  * Fix `mb_rtrim` for UTF-8 text
+  * Fix Curl constants being redefined in PHP 8.4 polyfill
+
 # 1.31.0
 
   * Bump minimum PHP version to 7.2
diff -pruN 1.31.0-5/README.md 1.33.0-2/README.md
--- 1.31.0-5/README.md	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/README.md	2025-08-19 12:13:28.000000000 +0000
@@ -71,7 +71,13 @@ Polyfills are provided for:
 - the `array_find`, `array_find_key`, `array_any` and `array_all` functions introduced in PHP 8.4;
 - the `Deprecated` attribute introduced in PHP 8.4;
 - the `mb_trim`, `mb_ltrim` and `mb_rtrim` functions introduced in PHP 8.4;
+- the `ReflectionConstant` class introduced in PHP 8.4
 - the `CURL_HTTP_VERSION_3` and `CURL_HTTP_VERSION_3ONLY` constants introduced in PHP 8.4;
+- the `grapheme_str_split` function introduced in PHP 8.4;
+- the `bcdivmod` function introduced in PHP 8.4;
+- the `get_error_handler` and `get_exception_handler` functions introduced in PHP 8.5;
+- the `NoDiscard` attribute introduced in PHP 8.5;
+- the `array_first` and `array_last` functions introduced in PHP 8.5;
 
 It is strongly recommended to upgrade your PHP version and/or install the missing
 extensions whenever possible. This polyfill should be used only when there is no
@@ -105,6 +111,7 @@ should **not** `require` the `symfony/po
 - `symfony/polyfill-php82` for using the PHP 8.2 functions,
 - `symfony/polyfill-php83` for using the PHP 8.3 functions,
 - `symfony/polyfill-php84` for using the PHP 8.4 functions,
+- `symfony/polyfill-php85` for using the PHP 8.5 functions,
 - `symfony/polyfill-iconv` for using the iconv functions,
 - `symfony/polyfill-intl-grapheme` for using the `grapheme_*` functions,
 - `symfony/polyfill-intl-idn` for using the `idn_to_ascii` and `idn_to_utf8` functions,
diff -pruN 1.31.0-5/appveyor.yml 1.33.0-2/appveyor.yml
--- 1.31.0-5/appveyor.yml	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/appveyor.yml	2025-08-19 12:13:28.000000000 +0000
@@ -10,8 +10,8 @@ cache:
 init:
     - SET PATH=c:\php;%PATH%
     - SET COMPOSER_NO_INTERACTION=1
+    - SET COMPOSER_ROOT_VERSION=1.x-dev
     - SET PHP=1
-    - SET SYMFONY_PHPUNIT_VERSION=8.5
 
 install:
     - cinst wget
@@ -41,8 +41,8 @@ install:
     - appveyor DownloadFile https://github.com/composer/composer/releases/download/2.7.9/composer.phar
     - cd c:\projects\polyfill
     - mkdir %APPDATA%\Composer && copy /Y .github\composer-config.json %APPDATA%\Composer\config.json
-    - SET COMPOSER_ROOT_VERSION=1.x-dev
     - composer update --prefer-source --no-progress --ansi
+    - php -d allow_url_fopen=0 ./phpunit install
 
 test_script:
-    - php -d allow_url_fopen=0 ./vendor/symfony/phpunit-bridge/bin/simple-phpunit
+    - php -d allow_url_fopen=0 ./phpunit
diff -pruN 1.31.0-5/composer.json 1.33.0-2/composer.json
--- 1.31.0-5/composer.json	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/composer.json	2025-08-19 12:13:28.000000000 +0000
@@ -33,6 +33,7 @@
         "symfony/polyfill-php82": "self.version",
         "symfony/polyfill-php83": "self.version",
         "symfony/polyfill-php84": "self.version",
+        "symfony/polyfill-php85": "self.version",
         "symfony/polyfill-iconv": "self.version",
         "symfony/polyfill-intl-grapheme": "self.version",
         "symfony/polyfill-intl-icu": "self.version",
@@ -62,6 +63,7 @@
             "src/Intl/Icu/Resources/stubs",
             "src/Intl/MessageFormatter/Resources/stubs",
             "src/Intl/Normalizer/Resources/stubs",
+            "src/Php85/Resources/stubs",
             "src/Php84/Resources/stubs",
             "src/Php83/Resources/stubs",
             "src/Php82/Resources/stubs",
diff -pruN 1.31.0-5/debian/autoload-tests.php 1.33.0-2/debian/autoload-tests.php
--- 1.31.0-5/debian/autoload-tests.php	2024-05-19 12:18:39.000000000 +0000
+++ 1.33.0-2/debian/autoload-tests.php	1970-01-01 00:00:00.000000000 +0000
@@ -1,4 +0,0 @@
-<?php
-
-require_once 'Symfony/Component/VarDumper/autoload.php';
-require_once 'Symfony/Polyfill/autoload.php';
diff -pruN 1.31.0-5/debian/autoload.php 1.33.0-2/debian/autoload.php
--- 1.31.0-5/debian/autoload.php	2025-02-24 20:07:53.000000000 +0000
+++ 1.33.0-2/debian/autoload.php	2025-05-04 12:06:57.000000000 +0000
@@ -16,6 +16,7 @@ require_once __DIR__ . '/Php81/autoload.
 require_once __DIR__ . '/Php82/autoload.php';
 require_once __DIR__ . '/Php83/autoload.php';
 require_once __DIR__ . '/Php84/autoload.php';
+require_once __DIR__ . '/Php85/autoload.php';
 require_once __DIR__ . '/Util/autoload.php';
 require_once __DIR__ . '/Uuid/autoload.php';
 
diff -pruN 1.31.0-5/debian/changelog 1.33.0-2/debian/changelog
--- 1.31.0-5/debian/changelog	2025-02-24 20:19:16.000000000 +0000
+++ 1.33.0-2/debian/changelog	2025-08-24 21:30:04.000000000 +0000
@@ -1,3 +1,77 @@
+php-symfony-polyfill (1.33.0-2) unstable; urgency=medium
+
+  * Drop tests failing on 32-bit architectures
+
+ -- David Prévot <taffit@debian.org>  Sun, 24 Aug 2025 23:30:04 +0200
+
+php-symfony-polyfill (1.33.0-1) unstable; urgency=medium
+
+  * Upload to unstable now that Trixie has been released
+
+  [ Ayesh Karunaratne ]
+  * [PHP 8.5] Add `array_first` and `array_last`
+  * [PHP 8.4][Intl] Add `grapheme_str_split`
+
+  [ Alexandre Daubois ]
+  * [PHP 8.4] Add `bcdivmod`
+
+  [ Daniel Scherzer ]
+  * [8.4] Add polyfill for `ReflectionConstant`
+
+  [ Nicolas Grekas ]
+  * Update CHANGELOG
+
+  [ Ion Bazan ]
+  * Fix json_validate edge case
+
+  [ David Prévot ]
+  * Update descriptions
+  * Remove Rules-Requires-Root
+  * Use autoloader in autopkgtest too
+  * Use php-bcmath for tests
+
+ -- David Prévot <taffit@debian.org>  Thu, 21 Aug 2025 08:12:48 +0200
+
+php-symfony-polyfill (1.32.0-1) experimental; urgency=medium
+
+  * Upload to experimental during the freeze
+
+  [ Nicolas Grekas ]
+  * Remove src/Php72
+  * Update CHANGELOG
+
+  [ Christian Flothmann ]
+  * add Caribbean guilder to the list of currencies
+
+  [ nsfisis ]
+  * mbstring: Fix mb_rtrim() for UTF-8 text
+
+  [ Christophe Coevoet ]
+  * Polyfill `fpow`
+  * Add Zimbabwean Gold to the list of currencies
+
+  [ Jorrit Schippers ]
+  * Php84/README.md: add mb_trim, mb_ltrim and mb_rtrim
+
+  [ Chris Smith ]
+  * Fix constants being redefined in PHP 8.4 polyfill
+
+  [ Pierre Ambroise ]
+  * Add `get_*_handler` polyfills
+
+  [ Andrew Menino-Barlow ]
+  * Add #[NoDiscard] to the PHP 8.5 polyfill
+
+  [ David Prévot ]
+  * Drop php-symfony-polyfill-php72
+  * Update php-symfony-polyfill-php84 description
+  * New php-symfony-polyfill-php85 package
+  * Update Standards-Version to 4.7.2
+  * Use an autoloader for tests
+  * Comment away currently failing data
+
+ -- David Prévot <taffit@debian.org>  Sun, 04 May 2025 15:48:19 +0200
+
 php-symfony-polyfill (1.31.0-5) unstable; urgency=medium
 
   * Use php-apcu and php-curl for tests
diff -pruN 1.31.0-5/debian/clean 1.33.0-2/debian/clean
--- 1.31.0-5/debian/clean	2025-02-24 20:19:08.000000000 +0000
+++ 1.33.0-2/debian/clean	2025-08-21 05:48:51.000000000 +0000
@@ -6,3 +6,4 @@ src/*/autoload.php
 src/*/*/autoload.php
 vendor/
 .phpunit.result.cache
+debian/autoload.tests.php.tpl
diff -pruN 1.31.0-5/debian/control 1.33.0-2/debian/control
--- 1.31.0-5/debian/control	2025-02-24 20:19:08.000000000 +0000
+++ 1.33.0-2/debian/control	2025-08-24 21:29:49.000000000 +0000
@@ -7,6 +7,7 @@ Build-Depends: debhelper-compat (= 13),
                dh-sequence-phpcomposer,
                jq,
                php-apcu,
+               php-bcmath,
                php-curl,
                php-intl,
                php-ldap,
@@ -19,11 +20,10 @@ Build-Depends: debhelper-compat (= 13),
                phpab,
                phpunit
 Build-Conflicts: php-apcu-bc
-Standards-Version: 4.7.1
+Standards-Version: 4.7.2
 Homepage: https://symfony.com
 Vcs-Git: https://salsa.debian.org/php-team/pear/php-symfony-polyfill.git
 Vcs-Browser: https://salsa.debian.org/php-team/pear/php-symfony-polyfill
-Rules-Requires-Root: no
 
 Package: php-symfony-polyfill
 Architecture: all
@@ -129,6 +129,8 @@ Description: ${phpcomposer:description}
   * grapheme_strstr: Returns part of haystack string from the first
     occurrence of needle to the end of haystack
   * grapheme_substr: Return part of a string
+  * grapheme_str_split: Splits a string into an array of individual
+    or chunks of graphemes
  .
  The Symfony Polyfill project backports features found in the latest PHP
  versions and provides compatibility layers for some extensions and functions.
@@ -245,33 +247,6 @@ Description: ${phpcomposer:description}
  .
  Symfony is a PHP framework, a set of tools and a development methodology.
 
-Package: php-symfony-polyfill-php72
-Multi-Arch: foreign
-Architecture: all
-Depends: ${misc:Depends}, ${phpcomposer:Debian-require}
-Suggests: ${phpcomposer:Debian-suggest}
-Recommends: ${phpcomposer:Debian-recommend}
-Replaces: ${phpcomposer:Debian-replace}
-Breaks: ${phpcomposer:Debian-conflict}, ${phpcomposer:Debian-replace}
-Provides: ${phpcomposer:Debian-provide}
-Description: ${phpcomposer:description}
- This component provides functions unavailable in releases prior to PHP 7.2:
- .
-  * is_iterable
-  * stream_isatty
-  * utf8_encode
-  * utf8_decode
-  * mb_ord
-  * mb_chr
-  * mb_scrub
- .
- The Symfony Polyfill project backports features found in the latest PHP
- versions and provides compatibility layers for some extensions and functions.
- It is intended to be used when portability across PHP versions and extensions
- is desired.
- .
- Symfony is a PHP framework, a set of tools and a development methodology.
-
 Package: php-symfony-polyfill-php73
 Multi-Arch: foreign
 Architecture: all
@@ -369,6 +344,13 @@ Description: ${phpcomposer:description}
   * MYSQLI_REFRESH_REPLICA constant
   * ReturnTypeWillChange attribute
   * CURLStringFile
+ .
+ The Symfony Polyfill project backports features found in the latest PHP
+ versions and provides compatibility layers for some extensions and functions.
+ It is intended to be used when portability across PHP versions and extensions
+ is desired.
+ .
+ Symfony is a PHP framework, a set of tools and a development methodology.
 
 Package: php-symfony-polyfill-php82
 Multi-Arch: foreign
@@ -392,6 +374,13 @@ Description: ${phpcomposer:description}
   * odbc_connection_string_should_quote()
   * odbc_connection_string_quote()
   * ini_parse_quantity()
+ .
+ The Symfony Polyfill project backports features found in the latest PHP
+ versions and provides compatibility layers for some extensions and functions.
+ It is intended to be used when portability across PHP versions and extensions
+ is desired.
+ .
+ Symfony is a PHP framework, a set of tools and a development methodology.
 
 Package: php-symfony-polyfill-php83
 Multi-Arch: foreign
@@ -414,6 +403,13 @@ Description: ${phpcomposer:description}
   * str_increment and str_decrement
   * Date*Exception/Error classes
   * SQLite3Exception
+ .
+ The Symfony Polyfill project backports features found in the latest PHP
+ versions and provides compatibility layers for some extensions and functions.
+ It is intended to be used when portability across PHP versions and extensions
+ is desired.
+ .
+ Symfony is a PHP framework, a set of tools and a development methodology.
 
 Package: php-symfony-polyfill-php84
 Multi-Arch: foreign
@@ -427,11 +423,46 @@ Provides: ${phpcomposer:Debian-provide}
 Description: ${phpcomposer:description}
  This component provides features added to PHP 8.4 core:
  .
-  * mb_ucfirst and mb_lcfirst
   * array_find, array_find_key, array_any and array_all
+  * bcdivmod
   * Deprecated
   * mb_trim, mb_ltrim and mb_rtrim
   * CURL_HTTP_VERSION_3 and CURL_HTTP_VERSION_3ONLY
+  * fpow
+  * grapheme_str_split
+  * mb_trim, mb_ltrim and mb_rtrim
+  * mb_ucfirst and mb_lcfirst
+  * ReflectionConstant
+ .
+ The Symfony Polyfill project backports features found in the latest PHP
+ versions and provides compatibility layers for some extensions and functions.
+ It is intended to be used when portability across PHP versions and extensions
+ is desired.
+ .
+ Symfony is a PHP framework, a set of tools and a development methodology.
+
+Package: php-symfony-polyfill-php85
+Multi-Arch: foreign
+Architecture: all
+Depends: ${misc:Depends}, ${phpcomposer:Debian-require}
+Suggests: ${phpcomposer:Debian-suggest}
+Recommends: ${phpcomposer:Debian-recommend}
+Replaces: ${phpcomposer:Debian-replace}
+Breaks: ${phpcomposer:Debian-conflict}, ${phpcomposer:Debian-replace}
+Provides: ${phpcomposer:Debian-provide}
+Description: ${phpcomposer:description}
+ This component provides features added to PHP 8.5 core:
+ .
+  * get_error_handler and get_exception_handler
+  * NoDiscard
+  * array_first and array_last
+ .
+ The Symfony Polyfill project backports features found in the latest PHP
+ versions and provides compatibility layers for some extensions and functions.
+ It is intended to be used when portability across PHP versions and extensions
+ is desired.
+ .
+ Symfony is a PHP framework, a set of tools and a development methodology.
 
 Package: php-symfony-polyfill-util
 Multi-Arch: foreign
diff -pruN 1.31.0-5/debian/patches/0002-Rename-Abstract-Test-into-Abstract-TestCase.patch 1.33.0-2/debian/patches/0002-Rename-Abstract-Test-into-Abstract-TestCase.patch
--- 1.31.0-5/debian/patches/0002-Rename-Abstract-Test-into-Abstract-TestCase.patch	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/debian/patches/0002-Rename-Abstract-Test-into-Abstract-TestCase.patch	2025-08-24 21:29:49.000000000 +0000
@@ -0,0 +1,4416 @@
+From: =?utf-8?q?David_Pr=C3=A9vot?= <taffit@debian.org>
+Date: Sun, 4 May 2025 10:57:53 +0200
+Subject: =?utf-8?q?Rename_Abstract=E2=80=A6Test_into_Abstract=E2=80=A6TestC?=
+ =?utf-8?q?ase?=
+
+---
+ tests/Intl/Icu/AbstractCollatorTest.php            |   60 --
+ tests/Intl/Icu/AbstractCollatorTestCase.php        |   60 ++
+ tests/Intl/Icu/AbstractIcuTest.php                 |   43 -
+ tests/Intl/Icu/AbstractIcuTestCase.php             |   43 +
+ tests/Intl/Icu/AbstractIntlDateFormatterTest.php   | 1032 --------------------
+ .../Intl/Icu/AbstractIntlDateFormatterTestCase.php | 1032 ++++++++++++++++++++
+ tests/Intl/Icu/AbstractLocaleTest.php              |   31 -
+ tests/Intl/Icu/AbstractLocaleTestCase.php          |   31 +
+ tests/Intl/Icu/AbstractNumberFormatterTest.php     |  899 -----------------
+ tests/Intl/Icu/AbstractNumberFormatterTestCase.php |  899 +++++++++++++++++
+ tests/Intl/Icu/CollatorTest.php                    |    3 +-
+ tests/Intl/Icu/IcuTest.php                         |    3 +-
+ tests/Intl/Icu/IntlDateFormatterTest.php           |    3 +-
+ tests/Intl/Icu/LocaleTest.php                      |    2 +-
+ tests/Intl/Icu/NumberFormatterTest.php             |    2 +-
+ tests/Intl/Icu/Verification/CollatorTest.php       |    4 +-
+ tests/Intl/Icu/Verification/IcuTest.php            |    4 +-
+ .../Icu/Verification/IntlDateFormatterTest.php     |    4 +-
+ tests/Intl/Icu/Verification/LocaleTest.php         |    4 +-
+ .../Intl/Icu/Verification/NumberFormatterTest.php  |    4 +-
+ 20 files changed, 2083 insertions(+), 2080 deletions(-)
+ delete mode 100644 tests/Intl/Icu/AbstractCollatorTest.php
+ create mode 100644 tests/Intl/Icu/AbstractCollatorTestCase.php
+ delete mode 100644 tests/Intl/Icu/AbstractIcuTest.php
+ create mode 100644 tests/Intl/Icu/AbstractIcuTestCase.php
+ delete mode 100644 tests/Intl/Icu/AbstractIntlDateFormatterTest.php
+ create mode 100644 tests/Intl/Icu/AbstractIntlDateFormatterTestCase.php
+ delete mode 100644 tests/Intl/Icu/AbstractLocaleTest.php
+ create mode 100644 tests/Intl/Icu/AbstractLocaleTestCase.php
+ delete mode 100644 tests/Intl/Icu/AbstractNumberFormatterTest.php
+ create mode 100644 tests/Intl/Icu/AbstractNumberFormatterTestCase.php
+
+diff --git a/tests/Intl/Icu/AbstractCollatorTest.php b/tests/Intl/Icu/AbstractCollatorTest.php
+deleted file mode 100644
+index 166741b..0000000
+--- a/tests/Intl/Icu/AbstractCollatorTest.php
++++ /dev/null
+@@ -1,60 +0,0 @@
+-<?php
+-
+-/*
+- * This file is part of the Symfony package.
+- *
+- * (c) Fabien Potencier <fabien@symfony.com>
+- *
+- * For the full copyright and license information, please view the LICENSE
+- * file that was distributed with this source code.
+- */
+-
+-namespace Symfony\Polyfill\Tests\Intl\Icu;
+-
+-use PHPUnit\Framework\TestCase;
+-use Symfony\Polyfill\Intl\Icu\Collator;
+-
+-/**
+- * Test case for Collator implementations.
+- *
+- * @author Bernhard Schussek <bschussek@gmail.com>
+- */
+-abstract class AbstractCollatorTest extends TestCase
+-{
+-    /**
+-     * @dataProvider asortProvider
+-     */
+-    public function testAsort($array, $sortFlag, $expected)
+-    {
+-        $collator = $this->getCollator('en');
+-        $collator->asort($array, $sortFlag);
+-        $this->assertSame($expected, $array);
+-    }
+-
+-    public static function asortProvider()
+-    {
+-        return [
+-            /* array, sortFlag, expected */
+-            [
+-                ['a', 'b', 'c'],
+-                Collator::SORT_REGULAR,
+-                ['a', 'b', 'c'],
+-            ],
+-            [
+-                ['c', 'b', 'a'],
+-                Collator::SORT_REGULAR,
+-                [2 => 'a', 1 => 'b',  0 => 'c'],
+-            ],
+-            [
+-                ['b', 'c', 'a'],
+-                Collator::SORT_REGULAR,
+-                [2 => 'a', 0 => 'b', 1 => 'c'],
+-            ],
+-        ];
+-    }
+-
+-    /**
+-     * @return Collator|\Collator
+-     */
+-    abstract protected function getCollator(string $locale);
+-}
+diff --git a/tests/Intl/Icu/AbstractCollatorTestCase.php b/tests/Intl/Icu/AbstractCollatorTestCase.php
+new file mode 100644
+index 0000000..d8bbfa9
+--- /dev/null
++++ b/tests/Intl/Icu/AbstractCollatorTestCase.php
+@@ -0,0 +1,60 @@
++<?php
++
++/*
++ * This file is part of the Symfony package.
++ *
++ * (c) Fabien Potencier <fabien@symfony.com>
++ *
++ * For the full copyright and license information, please view the LICENSE
++ * file that was distributed with this source code.
++ */
++
++namespace Symfony\Polyfill\Tests\Intl\Icu;
++
++use PHPUnit\Framework\TestCase;
++use Symfony\Polyfill\Intl\Icu\Collator;
++
++/**
++ * Test case for Collator implementations.
++ *
++ * @author Bernhard Schussek <bschussek@gmail.com>
++ */
++abstract class AbstractCollatorTestCase extends TestCase
++{
++    /**
++     * @dataProvider asortProvider
++     */
++    public function testAsort($array, $sortFlag, $expected)
++    {
++        $collator = $this->getCollator('en');
++        $collator->asort($array, $sortFlag);
++        $this->assertSame($expected, $array);
++    }
++
++    public static function asortProvider()
++    {
++        return [
++            /* array, sortFlag, expected */
++            [
++                ['a', 'b', 'c'],
++                Collator::SORT_REGULAR,
++                ['a', 'b', 'c'],
++            ],
++            [
++                ['c', 'b', 'a'],
++                Collator::SORT_REGULAR,
++                [2 => 'a', 1 => 'b',  0 => 'c'],
++            ],
++            [
++                ['b', 'c', 'a'],
++                Collator::SORT_REGULAR,
++                [2 => 'a', 0 => 'b', 1 => 'c'],
++            ],
++        ];
++    }
++
++    /**
++     * @return Collator|\Collator
++     */
++    abstract protected function getCollator(string $locale);
++}
+diff --git a/tests/Intl/Icu/AbstractIcuTest.php b/tests/Intl/Icu/AbstractIcuTest.php
+deleted file mode 100644
+index b676ca0..0000000
+--- a/tests/Intl/Icu/AbstractIcuTest.php
++++ /dev/null
+@@ -1,43 +0,0 @@
+-<?php
+-
+-/*
+- * This file is part of the Symfony package.
+- *
+- * (c) Fabien Potencier <fabien@symfony.com>
+- *
+- * For the full copyright and license information, please view the LICENSE
+- * file that was distributed with this source code.
+- */
+-
+-namespace Symfony\Polyfill\Tests\Intl\Icu;
+-
+-use PHPUnit\Framework\TestCase;
+-
+-/**
+- * Test case for intl function implementations.
+- *
+- * @author Bernhard Schussek <bschussek@gmail.com>
+- */
+-abstract class AbstractIcuTest extends TestCase
+-{
+-    public static function errorNameProvider()
+-    {
+-        return [
+-            [-129, '[BOGUS UErrorCode]'],
+-            [0, 'U_ZERO_ERROR'],
+-            [1, 'U_ILLEGAL_ARGUMENT_ERROR'],
+-            [9, 'U_PARSE_ERROR'],
+-            [129, '[BOGUS UErrorCode]'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider errorNameProvider
+-     */
+-    public function testGetErrorName($errorCode, $errorName)
+-    {
+-        $this->assertSame($errorName, $this->getIntlErrorName($errorCode));
+-    }
+-
+-    abstract protected function getIntlErrorName($errorCode);
+-}
+diff --git a/tests/Intl/Icu/AbstractIcuTestCase.php b/tests/Intl/Icu/AbstractIcuTestCase.php
+new file mode 100644
+index 0000000..eee2c50
+--- /dev/null
++++ b/tests/Intl/Icu/AbstractIcuTestCase.php
+@@ -0,0 +1,43 @@
++<?php
++
++/*
++ * This file is part of the Symfony package.
++ *
++ * (c) Fabien Potencier <fabien@symfony.com>
++ *
++ * For the full copyright and license information, please view the LICENSE
++ * file that was distributed with this source code.
++ */
++
++namespace Symfony\Polyfill\Tests\Intl\Icu;
++
++use PHPUnit\Framework\TestCase;
++
++/**
++ * Test case for intl function implementations.
++ *
++ * @author Bernhard Schussek <bschussek@gmail.com>
++ */
++abstract class AbstractIcuTestCase extends TestCase
++{
++    public static function errorNameProvider()
++    {
++        return [
++            [-129, '[BOGUS UErrorCode]'],
++            [0, 'U_ZERO_ERROR'],
++            [1, 'U_ILLEGAL_ARGUMENT_ERROR'],
++            [9, 'U_PARSE_ERROR'],
++            [129, '[BOGUS UErrorCode]'],
++        ];
++    }
++
++    /**
++     * @dataProvider errorNameProvider
++     */
++    public function testGetErrorName($errorCode, $errorName)
++    {
++        $this->assertSame($errorName, $this->getIntlErrorName($errorCode));
++    }
++
++    abstract protected function getIntlErrorName($errorCode);
++}
+diff --git a/tests/Intl/Icu/AbstractIntlDateFormatterTest.php b/tests/Intl/Icu/AbstractIntlDateFormatterTest.php
+deleted file mode 100644
+index 7761353..0000000
+--- a/tests/Intl/Icu/AbstractIntlDateFormatterTest.php
++++ /dev/null
+@@ -1,1032 +0,0 @@
+-<?php
+-
+-/*
+- * This file is part of the Symfony package.
+- *
+- * (c) Fabien Potencier <fabien@symfony.com>
+- *
+- * For the full copyright and license information, please view the LICENSE
+- * file that was distributed with this source code.
+- */
+-
+-namespace Symfony\Polyfill\Tests\Intl\Icu;
+-
+-use PHPUnit\Framework\TestCase;
+-use Symfony\Polyfill\Intl\Icu\Icu;
+-use Symfony\Polyfill\Intl\Icu\Intl;
+-use Symfony\Polyfill\Intl\Icu\IntlDateFormatter;
+-
+-/**
+- * Test case for IntlDateFormatter implementations.
+- *
+- * @author Bernhard Schussek <bschussek@gmail.com>
+- */
+-abstract class AbstractIntlDateFormatterTest extends TestCase
+-{
+-    protected function setUp(): void
+-    {
+-        \Locale::setDefault('en');
+-    }
+-
+-    /**
+-     * When a time zone is not specified, it uses the system default however it returns null in the getter method.
+-     */
+-    public function testConstructorDefaultTimeZone()
+-    {
+-        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT);
+-
+-        $this->assertSame(date_default_timezone_get(), $formatter->getTimeZoneId());
+-
+-        $this->assertSame(
+-            $this->getDateTime(0, $formatter->getTimeZoneId())->format('M j, Y, g:i A'),
+-            str_replace("\u{202F}", ' ', $formatter->format(0))
+-        );
+-    }
+-
+-    /**
+-     * @group legacy
+-     */
+-    public function testConstructorWithoutDateType()
+-    {
+-        $formatter = $this->getDateFormatter('en', null, IntlDateFormatter::SHORT, 'UTC', IntlDateFormatter::GREGORIAN);
+-
+-        $this->assertSame('EEEE, MMMM d, y \'at\' h:mm a', str_replace("\u{202F}", ' ', $formatter->getPattern()));
+-    }
+-
+-    /**
+-     * @group legacy
+-     */
+-    public function testConstructorWithoutTimeType()
+-    {
+-        $formatter = $this->getDateFormatter('en', IntlDateFormatter::SHORT, null, 'UTC', IntlDateFormatter::GREGORIAN);
+-
+-        $this->assertSame('M/d/yy, h:mm:ss a zzzz', str_replace("\u{202F}", ' ', $formatter->getPattern()));
+-    }
+-
+-    /**
+-     * @dataProvider formatProvider
+-     */
+-    public function testFormat($pattern, $timestamp, $expected)
+-    {
+-        $errorCode = Icu::U_ZERO_ERROR;
+-        $errorMessage = 'U_ZERO_ERROR';
+-
+-        $formatter = $this->getDefaultDateFormatter($pattern);
+-        $this->assertSame($expected, $formatter->format($timestamp));
+-        $this->assertIsIntlSuccess($formatter, $errorMessage, $errorCode);
+-    }
+-
+-    public static function formatProvider()
+-    {
+-        $dateTime = new \DateTime('@0');
+-        $dateTimeImmutable = new \DateTimeImmutable('@0');
+-
+-        /* https://unicode-org.atlassian.net/browse/ICU-21647 */
+-        $expectedQuarterX5 = '1';
+-        if (\defined('INTL_ICU_VERSION') && version_compare(\INTL_ICU_VERSION, '70.1', '<')) {
+-            $expectedQuarterX5 = '1st quarter';
+-        }
+-
+-        $formatData = [
+-            /* general */
+-            ['y-M-d', 0, '1970-1-1'],
+-            ["EEE, MMM d, ''yy", 0, "Thu, Jan 1, '70"],
+-            ['h:mm a', 0, '12:00 AM'],
+-            ['yyyyy.MMMM.dd hh:mm aaa', 0, '01970.January.01 12:00 AM'],
+-
+-            /* escaping */
+-            ["'M'", 0, 'M'],
+-            ["'yy'", 0, 'yy'],
+-            ["'''yy'", 0, "'yy"],
+-            ["''y", 0, "'1970"],
+-            ["''yy", 0, "'70"],
+-            ["H 'o'' clock'", 0, "0 o' clock"],
+-
+-            /* month */
+-            ['M', 0, '1'],
+-            ['MM', 0, '01'],
+-            ['MMM', 0, 'Jan'],
+-            ['MMMM', 0, 'January'],
+-            ['MMMMM', 0, 'J'],
+-            ['MMMMMM', 0, '000001'],
+-
+-            ['L', 0, '1'],
+-            ['LL', 0, '01'],
+-            ['LLL', 0, 'Jan'],
+-            ['LLLL', 0, 'January'],
+-            ['LLLLL', 0, 'J'],
+-            ['LLLLLL', 0, '000001'],
+-
+-            /* year */
+-            ['y', 0, '1970'],
+-            ['yy', 0, '70'],
+-            ['yyy', 0, '1970'],
+-            ['yyyy', 0, '1970'],
+-            ['yyyyy', 0, '01970'],
+-            ['yyyyyy', 0, '001970'],
+-
+-            /* day */
+-            ['d', 0, '1'],
+-            ['dd', 0, '01'],
+-            ['ddd', 0, '001'],
+-
+-            /* quarter */
+-            ['Q', 0, '1'],
+-            ['QQ', 0, '01'],
+-            ['QQQ', 0, 'Q1'],
+-            ['QQQQ', 0, '1st quarter'],
+-            ['QQQQQ', 0, $expectedQuarterX5],
+-
+-            ['q', 0, '1'],
+-            ['qq', 0, '01'],
+-            ['qqq', 0, 'Q1'],
+-            ['qqqq', 0, '1st quarter'],
+-            ['qqqqq', 0, $expectedQuarterX5],
+-
+-            // 4 months
+-            ['Q', 7776000, '2'],
+-            ['QQ', 7776000, '02'],
+-            ['QQQ', 7776000, 'Q2'],
+-            ['QQQQ', 7776000, '2nd quarter'],
+-
+-            // 7 months
+-            ['QQQQ', 15638400, '3rd quarter'],
+-
+-            // 10 months
+-            ['QQQQ', 23587200, '4th quarter'],
+-
+-            /* 12-hour (1-12) */
+-            ['h', 0, '12'],
+-            ['hh', 0, '12'],
+-            ['hhh', 0, '012'],
+-
+-            ['h', 1, '12'],
+-            ['h', 3600, '1'],
+-            ['h', 43200, '12'], // 12 hours
+-
+-            /* day of year */
+-            ['D', 0, '1'],
+-            ['D', 86400, '2'], // 1 day
+-            ['D', 31536000, '1'], // 1 year
+-            ['D', 31622400, '2'], // 1 year + 1 day
+-
+-            /* day of week */
+-            ['E', 0, 'Thu'],
+-            ['EE', 0, 'Thu'],
+-            ['EEE', 0, 'Thu'],
+-            ['EEEE', 0, 'Thursday'],
+-            ['EEEEE', 0, 'T'],
+-            ['EEEEEE', 0, 'Th'],
+-
+-            ['E', 1296540000, 'Tue'], // 2011-02-01
+-            ['E', 1296950400, 'Sun'], // 2011-02-06
+-
+-            /* am/pm marker */
+-            ['a', 0, 'AM'],
+-            ['aa', 0, 'AM'],
+-            ['aaa', 0, 'AM'],
+-            ['aaaa', 0, 'AM'],
+-
+-            // 12 hours
+-            ['a', 43200, 'PM'],
+-            ['aa', 43200, 'PM'],
+-            ['aaa', 43200, 'PM'],
+-            ['aaaa', 43200, 'PM'],
+-
+-            /* 24-hour (0-23) */
+-            ['H', 0, '0'],
+-            ['HH', 0, '00'],
+-            ['HHH', 0, '000'],
+-
+-            ['H', 1, '0'],
+-            ['H', 3600, '1'],
+-            ['H', 43200, '12'],
+-            ['H', 46800, '13'],
+-
+-            /* 24-hour (1-24) */
+-            ['k', 0, '24'],
+-            ['kk', 0, '24'],
+-            ['kkk', 0, '024'],
+-
+-            ['k', 1, '24'],
+-            ['k', 3600, '1'],
+-            ['k', 43200, '12'],
+-            ['k', 46800, '13'],
+-
+-            /* 12-hour (0-11) */
+-            ['K', 0, '0'],
+-            ['KK', 0, '00'],
+-            ['KKK', 0, '000'],
+-
+-            ['K', 1, '0'],
+-            ['K', 3600, '1'],
+-            ['K', 43200, '0'], // 12 hours
+-
+-            /* minute */
+-            ['m', 0, '0'],
+-            ['mm', 0, '00'],
+-            ['mmm', 0, '000'],
+-
+-            ['m', 1, '0'],
+-            ['m', 60, '1'],
+-            ['m', 120, '2'],
+-            ['m', 180, '3'],
+-            ['m', 3600, '0'],
+-            ['m', 3660, '1'],
+-            ['m', 43200, '0'], // 12 hours
+-
+-            /* second */
+-            ['s', 0, '0'],
+-            ['ss', 0, '00'],
+-            ['sss', 0, '000'],
+-
+-            ['s', 1, '1'],
+-            ['s', 2, '2'],
+-            ['s', 5, '5'],
+-            ['s', 30, '30'],
+-            ['s', 59, '59'],
+-            ['s', 60, '0'],
+-            ['s', 120, '0'],
+-            ['s', 180, '0'],
+-            ['s', 3600, '0'],
+-            ['s', 3601, '1'],
+-            ['s', 3630, '30'],
+-            ['s', 43200, '0'], // 12 hours
+-        ];
+-
+-        /* general, DateTime */
+-        $formatData[] = ['y-M-d', $dateTime, '1970-1-1'];
+-        $formatData[] = ["EEE, MMM d, ''yy", $dateTime, "Thu, Jan 1, '70"];
+-        $formatData[] = ['h:mm a', $dateTime, '12:00 AM'];
+-        $formatData[] = ['yyyyy.MMMM.dd hh:mm aaa', $dateTime, '01970.January.01 12:00 AM'];
+-
+-        /* general, DateTimeImmutable */
+-        $formatData[] = ['y-M-d', $dateTimeImmutable, '1970-1-1'];
+-        $formatData[] = ["EEE, MMM d, ''yy", $dateTimeImmutable, "Thu, Jan 1, '70"];
+-        $formatData[] = ['h:mm a', $dateTimeImmutable, '12:00 AM'];
+-        $formatData[] = ['yyyyy.MMMM.dd hh:mm aaa', $dateTimeImmutable, '01970.January.01 12:00 AM'];
+-
+-        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '59.1', '>=')) {
+-            // Before ICU 59.1 GMT was used instead of UTC
+-            $formatData[] = ["yyyy.MM.dd 'at' HH:mm:ss zzz", 0, '1970.01.01 at 00:00:00 UTC'];
+-            $formatData[] = ['K:mm a, z', 0, '0:00 AM, UTC'];
+-            $formatData[] = ["yyyy.MM.dd 'at' HH:mm:ss zzz", $dateTime, '1970.01.01 at 00:00:00 UTC'];
+-            $formatData[] = ['K:mm a, z', $dateTime, '0:00 AM, UTC'];
+-        }
+-
+-        return $formatData;
+-    }
+-
+-    public function testFormatUtcAndGmtAreSplit()
+-    {
+-        $pattern = "yyyy.MM.dd 'at' HH:mm:ss zzz";
+-        $gmtFormatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'GMT', IntlDateFormatter::GREGORIAN, $pattern);
+-        $utcFormatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'UTC', IntlDateFormatter::GREGORIAN, $pattern);
+-
+-        $this->assertSame('1970.01.01 at 00:00:00 GMT', $gmtFormatter->format(new \DateTime('@0')));
+-        $this->assertSame('1970.01.01 at 00:00:00 UTC', $utcFormatter->format(new \DateTime('@0')));
+-        $this->assertSame('1970.01.01 at 00:00:00 GMT', $gmtFormatter->format(new \DateTimeImmutable('@0')));
+-        $this->assertSame('1970.01.01 at 00:00:00 UTC', $utcFormatter->format(new \DateTimeImmutable('@0')));
+-    }
+-
+-    /**
+-     * @dataProvider formatErrorProvider
+-     */
+-    public function testFormatIllegalArgumentError($pattern, $timestamp, $errorMessage)
+-    {
+-        $errorCode = Icu::U_ILLEGAL_ARGUMENT_ERROR;
+-
+-        $formatter = $this->getDefaultDateFormatter($pattern);
+-        $this->assertFalse($formatter->format($timestamp));
+-        $this->assertIsIntlFailure($formatter, $errorMessage, $errorCode);
+-    }
+-
+-    public static function formatErrorProvider()
+-    {
+-        return [
+-            ['y-M-d', 'foobar', 'datefmt_format: string \'foobar\' is not numeric, which would be required for it to be a valid date: U_ILLEGAL_ARGUMENT_ERROR'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatWithTimezoneProvider
+-     */
+-    public function testFormatWithTimezone($timestamp, $timezone, $expected)
+-    {
+-        $pattern = 'yyyy-MM-dd HH:mm:ss';
+-        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, $timezone, IntlDateFormatter::GREGORIAN, $pattern);
+-        $this->assertSame($expected, $formatter->format($timestamp));
+-    }
+-
+-    public static function formatWithTimezoneProvider()
+-    {
+-        $data = [
+-            [0, 'UTC', '1970-01-01 00:00:00'],
+-            [0, 'GMT', '1970-01-01 00:00:00'],
+-            [0, 'GMT-03:00', '1969-12-31 21:00:00'],
+-            [0, 'GMT+03:00', '1970-01-01 03:00:00'],
+-            [0, 'Europe/Zurich', '1970-01-01 01:00:00'],
+-            [0, 'Europe/Paris', '1970-01-01 01:00:00'],
+-            [0, 'Africa/Cairo', '1970-01-01 02:00:00'],
+-            [0, 'Africa/Casablanca', '1970-01-01 00:00:00'],
+-            [0, 'Africa/Djibouti', '1970-01-01 03:00:00'],
+-            [0, 'Africa/Johannesburg', '1970-01-01 02:00:00'],
+-            [0, 'America/Antigua', '1969-12-31 20:00:00'],
+-            [0, 'America/Toronto', '1969-12-31 19:00:00'],
+-            [0, 'America/Vancouver', '1969-12-31 16:00:00'],
+-            [0, 'Asia/Aqtau', '1970-01-01 05:00:00'],
+-            [0, 'Asia/Bangkok', '1970-01-01 07:00:00'],
+-            [0, 'Asia/Dubai', '1970-01-01 04:00:00'],
+-            [0, 'Australia/Brisbane', '1970-01-01 10:00:00'],
+-            [0, 'Australia/Eucla', '1970-01-01 08:45:00'],
+-            [0, 'Australia/Melbourne', '1970-01-01 10:00:00'],
+-            [0, 'Europe/Berlin', '1970-01-01 01:00:00'],
+-            [0, 'Europe/Dublin', '1970-01-01 01:00:00'],
+-            [0, 'Europe/Warsaw', '1970-01-01 01:00:00'],
+-            [0, 'Pacific/Fiji', '1970-01-01 12:00:00'],
+-        ];
+-
+-        return $data;
+-    }
+-
+-    /**
+-     * @dataProvider formatTimezoneProvider
+-     */
+-    public function testFormatTimezone($pattern, $timezone, $expected)
+-    {
+-        $formatter = $this->getDefaultDateFormatter($pattern);
+-        $formatter->setTimeZone(new \DateTimeZone($timezone));
+-
+-        $this->assertEquals($expected, $formatter->format(0));
+-    }
+-
+-    public static function formatTimezoneProvider()
+-    {
+-        return [
+-            ['z', 'GMT', 'GMT'],
+-            ['zz', 'GMT', 'GMT'],
+-            ['zzz', 'GMT', 'GMT'],
+-            ['zzzz', 'GMT', 'Greenwich Mean Time'],
+-            ['zzzzz', 'GMT', 'Greenwich Mean Time'],
+-
+-            ['z', 'Etc/GMT', 'GMT'],
+-            ['zz', 'Etc/GMT', 'GMT'],
+-            ['zzz', 'Etc/GMT', 'GMT'],
+-            ['zzzz', 'Etc/GMT', 'Greenwich Mean Time'],
+-            ['zzzzz', 'Etc/GMT', 'Greenwich Mean Time'],
+-
+-            ['z', 'Etc/GMT+3', 'GMT-3'],
+-            ['zz', 'Etc/GMT+3', 'GMT-3'],
+-            ['zzz', 'Etc/GMT+3', 'GMT-3'],
+-            ['zzzz', 'Etc/GMT+3', 'GMT-03:00'],
+-            ['zzzzz', 'Etc/GMT+3', 'GMT-03:00'],
+-
+-            ['z', 'UTC', 'UTC'],
+-            ['zz', 'UTC', 'UTC'],
+-            ['zzz', 'UTC', 'UTC'],
+-            ['zzzz', 'UTC', 'Coordinated Universal Time'],
+-            ['zzzzz', 'UTC', 'Coordinated Universal Time'],
+-
+-            ['z', 'Etc/UTC', 'UTC'],
+-            ['zz', 'Etc/UTC', 'UTC'],
+-            ['zzz', 'Etc/UTC', 'UTC'],
+-            ['zzzz', 'Etc/UTC', 'Coordinated Universal Time'],
+-            ['zzzzz', 'Etc/UTC', 'Coordinated Universal Time'],
+-
+-            ['z', 'Etc/Universal', 'UTC'],
+-            ['z', 'Etc/Zulu', 'UTC'],
+-            ['z', 'Etc/UCT', 'UTC'],
+-            ['z', 'Etc/Greenwich', 'GMT'],
+-            ['zzzzz', 'Etc/Universal', 'Coordinated Universal Time'],
+-            ['zzzzz', 'Etc/Zulu', 'Coordinated Universal Time'],
+-            ['zzzzz', 'Etc/UCT', 'Coordinated Universal Time'],
+-            ['zzzzz', 'Etc/Greenwich', 'Greenwich Mean Time'],
+-
+-            ['z', 'GMT+03:00', 'GMT+3'],
+-            ['zz', 'GMT+03:00', 'GMT+3'],
+-            ['zzz', 'GMT+03:00', 'GMT+3'],
+-            ['zzzz', 'GMT+03:00', 'GMT+03:00'],
+-            ['zzzzz', 'GMT+03:00', 'GMT+03:00'],
+-        ];
+-    }
+-
+-    public function testFormatWithGmtTimezone()
+-    {
+-        $formatter = $this->getDefaultDateFormatter('zzzz');
+-
+-        $formatter->setTimeZone('GMT+03:00');
+-
+-        $this->assertEquals('GMT+03:00', $formatter->format(0));
+-    }
+-
+-    public function testFormatWithGmtTimeZoneAndMinutesOffset()
+-    {
+-        $formatter = $this->getDefaultDateFormatter('zzzz');
+-
+-        $formatter->setTimeZone('GMT+00:30');
+-
+-        $this->assertEquals('GMT+00:30', $formatter->format(0));
+-    }
+-
+-    public function testFormatWithNonStandardTimezone()
+-    {
+-        $formatter = $this->getDefaultDateFormatter('zzzz');
+-
+-        $formatter->setTimeZone('Pacific/Fiji');
+-
+-        $this->assertEquals('Fiji Standard Time', $formatter->format(0));
+-    }
+-
+-    public function testFormatWithConstructorTimezone()
+-    {
+-        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'UTC');
+-        $formatter->setPattern('yyyy-MM-dd HH:mm:ss');
+-
+-        $this->assertEquals(
+-            $this->getDateTime(0, 'UTC')->format('Y-m-d H:i:s'),
+-            $formatter->format(0)
+-        );
+-    }
+-
+-    public function testFormatWithDateTimeZoneGmt()
+-    {
+-        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, new \DateTimeZone('GMT'), IntlDateFormatter::GREGORIAN, 'zzz');
+-
+-        $this->assertEquals('GMT', $formatter->format(0));
+-    }
+-
+-    public function testFormatWithDateTimeZoneGmtOffset()
+-    {
+-        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, new \DateTimeZone('GMT+03:00'), IntlDateFormatter::GREGORIAN, 'zzzz');
+-
+-        $this->assertEquals('GMT+03:00', $formatter->format(0));
+-    }
+-
+-    /**
+-     * @requires extension intl
+-     */
+-    public function testFormatWithIntlTimeZone()
+-    {
+-        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, \IntlTimeZone::createTimeZone('GMT+03:00'), IntlDateFormatter::GREGORIAN, 'zzzz');
+-
+-        $this->assertEquals('GMT+03:00', $formatter->format(0));
+-    }
+-
+-    public function testFormatWithTimezoneFromPhp()
+-    {
+-        $tz = date_default_timezone_get();
+-        date_default_timezone_set('Europe/London');
+-
+-        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT);
+-        $formatter->setPattern('yyyy-MM-dd HH:mm:ss');
+-
+-        $this->assertEquals(
+-            $this->getDateTime(0, 'Europe/London')->format('Y-m-d H:i:s'),
+-            $formatter->format(0)
+-        );
+-
+-        $this->assertEquals('Europe/London', date_default_timezone_get());
+-
+-        // Restores TZ.
+-        date_default_timezone_set($tz);
+-    }
+-
+-    public function testFormatIgnoresPatternForRelativeDateType()
+-    {
+-        $formatter = $this->getDateFormatter('en', IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::FULL, new \DateTimeZone('GMT'), IntlDateFormatter::GREGORIAN, 'zzzz');
+-
+-        $datetime = \DateTime::createFromFormat('U', time(), new \DateTimeZone('GMT'));
+-        $datetime->setTime(0, 0, 0);
+-
+-        $formatted = $formatter->format($datetime);
+-        $formatted = str_replace(' at ', ', ', $formatted);
+-        $formatted = str_replace("\u{202F}", ' ', $formatted);
+-
+-        $this->assertSame('today, 12:00:00 AM Greenwich Mean Time', $formatted);
+-    }
+-
+-    /**
+-     * @dataProvider dateAndTimeTypeProvider
+-     */
+-    public function testDateAndTimeType($timestamp, $datetype, $timetype, $expected)
+-    {
+-        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
+-        $this->assertSame($expected, str_replace("\u{202F}", ' ', $formatter->format($timestamp)));
+-    }
+-
+-    public static function dateAndTimeTypeProvider()
+-    {
+-        return [
+-            [0, IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'Thursday, January 1, 1970'],
+-            [0, IntlDateFormatter::LONG, IntlDateFormatter::NONE, 'January 1, 1970'],
+-            [0, IntlDateFormatter::MEDIUM, IntlDateFormatter::NONE, 'Jan 1, 1970'],
+-            [0, IntlDateFormatter::SHORT, IntlDateFormatter::NONE, '1/1/70'],
+-            [0, IntlDateFormatter::NONE, IntlDateFormatter::FULL, '12:00:00 AM Coordinated Universal Time'],
+-            [0, IntlDateFormatter::NONE, IntlDateFormatter::LONG, '12:00:00 AM UTC'],
+-            [0, IntlDateFormatter::NONE, IntlDateFormatter::MEDIUM, '12:00:00 AM'],
+-            [0, IntlDateFormatter::NONE, IntlDateFormatter::SHORT, '12:00 AM'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider relativeDateTypeProvider
+-     */
+-    public function testRelativeDateType($timestamp, $datetype, $timetype, $expected)
+-    {
+-        $datetime = \DateTime::createFromFormat('U', $timestamp, new \DateTimeZone('UTC'));
+-        $datetime->setTime(0, 0, 0);
+-
+-        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
+-
+-        $formatted = $formatter->format($datetime);
+-
+-        // Ignore differences that vary by version of PHP or ICU
+-        $formatted = str_replace(' at ', ', ', $formatted);
+-        $formatted = str_replace("\u{202F}", ' ', $formatted);
+-
+-        $this->assertSame($expected, $formatted);
+-    }
+-
+-    public static function relativeDateTypeProvider()
+-    {
+-        return [
+-            [0, IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'Thursday, January 1, 1970'],
+-            [0, IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::NONE, 'January 1, 1970'],
+-            [0, IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::NONE, 'Jan 1, 1970'],
+-            [0, IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::NONE, '1/1/70'],
+-
+-            [time(), IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'today'],
+-            [time(), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'today, 12:00:00 AM Coordinated Universal Time'],
+-            [time(), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'today, 12:00:00 AM UTC'],
+-            [time(), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'today, 12:00 AM'],
+-
+-            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'yesterday'],
+-            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'yesterday, 12:00:00 AM Coordinated Universal Time'],
+-            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'yesterday, 12:00:00 AM UTC'],
+-            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'yesterday, 12:00 AM'],
+-
+-            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'tomorrow'],
+-            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'tomorrow, 12:00:00 AM Coordinated Universal Time'],
+-            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'tomorrow, 12:00:00 AM UTC'],
+-            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'tomorrow, 12:00 AM'],
+-        ];
+-    }
+-
+-    public function testGetCalendar()
+-    {
+-        $formatter = $this->getDefaultDateFormatter();
+-        $this->assertEquals(IntlDateFormatter::GREGORIAN, $formatter->getCalendar());
+-    }
+-
+-    public function testGetDateType()
+-    {
+-        $formatter = $this->getDateFormatter('en', IntlDateFormatter::FULL, IntlDateFormatter::NONE);
+-        $this->assertEquals(IntlDateFormatter::FULL, $formatter->getDateType());
+-    }
+-
+-    public function testGetLocale()
+-    {
+-        $formatter = $this->getDefaultDateFormatter();
+-        $this->assertEquals('en', $formatter->getLocale());
+-    }
+-
+-    public function testGetPattern()
+-    {
+-        $formatter = $this->getDateFormatter('en', IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'UTC', IntlDateFormatter::GREGORIAN, 'yyyy-MM-dd');
+-        $this->assertEquals('yyyy-MM-dd', $formatter->getPattern());
+-    }
+-
+-    public function testGetTimeType()
+-    {
+-        $formatter = $this->getDateFormatter('en', IntlDateFormatter::NONE, IntlDateFormatter::FULL);
+-        $this->assertEquals(IntlDateFormatter::FULL, $formatter->getTimeType());
+-    }
+-
+-    /**
+-     * @dataProvider parseProvider
+-     */
+-    public function testParse($pattern, $value, $expected)
+-    {
+-        $errorCode = Icu::U_ZERO_ERROR;
+-        $errorMessage = 'U_ZERO_ERROR';
+-
+-        $formatter = $this->getDefaultDateFormatter($pattern);
+-        $this->assertSame($expected, $formatter->parse($value));
+-        $this->assertIsIntlSuccess($formatter, $errorMessage, $errorCode);
+-    }
+-
+-    public static function parseProvider()
+-    {
+-        return array_merge(
+-            static::parseYearProvider(),
+-            static::parseQuarterProvider(),
+-            static::parseMonthProvider(),
+-            static::parseStandaloneMonthProvider(),
+-            static::parseDayProvider(),
+-            static::parseDayOfWeekProvider(),
+-            static::parseDayOfYearProvider(),
+-            static::parseHour12ClockOneBasedProvider(),
+-            static::parseHour12ClockZeroBasedProvider(),
+-            static::parseHour24ClockOneBasedProvider(),
+-            static::parseHour24ClockZeroBasedProvider(),
+-            static::parseMinuteProvider(),
+-            static::parseSecondProvider(),
+-            static::parseTimezoneProvider(),
+-            static::parseAmPmProvider(),
+-            static::parseStandaloneAmPmProvider(),
+-            static::parseRegexMetaCharsProvider(),
+-            static::parseQuoteCharsProvider(),
+-            static::parseDashSlashProvider()
+-        );
+-    }
+-
+-    public static function parseYearProvider()
+-    {
+-        return [
+-            ['y-M-d', '1970-1-1', 0],
+-            ['yy-M-d', '70-1-1', 0],
+-        ];
+-    }
+-
+-    public static function parseQuarterProvider()
+-    {
+-        return [
+-            ['Q', '1', 0],
+-            ['QQ', '01', 0],
+-            ['QQQ', 'Q1', 0],
+-            ['QQQQ', '1st quarter', 0],
+-            ['QQQQQ', '1st quarter', 0],
+-
+-            ['Q', '2', 7776000],
+-            ['QQ', '02', 7776000],
+-            ['QQQ', 'Q2', 7776000],
+-            ['QQQQ', '2nd quarter', 7776000],
+-            ['QQQQQ', '2nd quarter', 7776000],
+-
+-            ['q', '1', 0],
+-            ['qq', '01', 0],
+-            ['qqq', 'Q1', 0],
+-            ['qqqq', '1st quarter', 0],
+-            ['qqqqq', '1st quarter', 0],
+-        ];
+-    }
+-
+-    public static function parseMonthProvider()
+-    {
+-        return [
+-            ['y-M-d', '1970-1-1', 0],
+-            ['y-MM-d', '1970-1-1', 0],
+-            ['y-MMM-d', '1970-Jan-1', 0],
+-            ['y-MMMM-d', '1970-January-1', 0],
+-        ];
+-    }
+-
+-    public static function parseStandaloneMonthProvider()
+-    {
+-        return [
+-            ['y-L-d', '1970-1-1', 0],
+-            ['y-LLL-d', '1970-Jan-1', 0],
+-            ['y-LLLL-d', '1970-January-1', 0],
+-        ];
+-    }
+-
+-    public static function parseDayProvider()
+-    {
+-        return [
+-            ['y-M-d', '1970-1-1', 0],
+-            ['y-M-dd', '1970-1-1', 0],
+-            ['y-M-dd', '1970-1-01', 0],
+-            ['y-M-ddd', '1970-1-001', 0],
+-        ];
+-    }
+-
+-    public static function parseDayOfWeekProvider()
+-    {
+-        return [
+-            ['E', 'Thu', 0],
+-            ['EE', 'Thu', 0],
+-            ['EEE', 'Thu', 0],
+-            ['EEEE', 'Thursday', 0],
+-            ['EEEEE', 'T', 432000],
+-            ['EEEEEE', 'Th', 0],
+-        ];
+-    }
+-
+-    public static function parseDayOfYearProvider()
+-    {
+-        return [
+-            ['D', '1', 0],
+-            ['D', '2', 86400],
+-        ];
+-    }
+-
+-    public static function parseHour12ClockOneBasedProvider()
+-    {
+-        return [
+-            // 12 hours (1-12)
+-            ['y-M-d h', '1970-1-1 1', 3600],
+-            ['y-M-d h', '1970-1-1 10', 36000],
+-            ['y-M-d hh', '1970-1-1 11', 39600],
+-            ['y-M-d hh', '1970-1-1 12', 0],
+-            ['y-M-d hh a', '1970-1-1 0 AM', 0],
+-            ['y-M-d hh a', '1970-1-1 1 AM', 3600],
+-            ['y-M-d hh a', '1970-1-1 10 AM', 36000],
+-            ['y-M-d hh a', '1970-1-1 11 AM', 39600],
+-            ['y-M-d hh a', '1970-1-1 12 AM', 0],
+-            ['y-M-d hh a', '1970-1-1 23 AM', 82800],
+-            ['y-M-d hh a', '1970-1-1 24 AM', 86400],
+-            ['y-M-d hh a', '1970-1-1 0 PM', 43200],
+-            ['y-M-d hh a', '1970-1-1 1 PM', 46800],
+-            ['y-M-d hh a', '1970-1-1 10 PM', 79200],
+-            ['y-M-d hh a', '1970-1-1 11 PM', 82800],
+-            ['y-M-d hh a', '1970-1-1 12 PM', 43200],
+-            ['y-M-d hh a', '1970-1-1 23 PM', 126000],
+-            ['y-M-d hh a', '1970-1-1 24 PM', 129600],
+-        ];
+-    }
+-
+-    public static function parseHour12ClockZeroBasedProvider()
+-    {
+-        return [
+-            // 12 hours (0-11)
+-            ['y-M-d K', '1970-1-1 1', 3600],
+-            ['y-M-d K', '1970-1-1 10', 36000],
+-            ['y-M-d KK', '1970-1-1 11', 39600],
+-            ['y-M-d KK', '1970-1-1 12', 43200],
+-            ['y-M-d KK a', '1970-1-1 0 AM', 0],
+-            ['y-M-d KK a', '1970-1-1 1 AM', 3600],
+-            ['y-M-d KK a', '1970-1-1 10 AM', 36000],
+-            ['y-M-d KK a', '1970-1-1 11 AM', 39600],
+-            ['y-M-d KK a', '1970-1-1 12 AM', 43200],
+-            ['y-M-d KK a', '1970-1-1 23 AM', 82800],
+-            ['y-M-d KK a', '1970-1-1 24 AM', 86400],
+-            ['y-M-d KK a', '1970-1-1 0 PM', 43200],
+-            ['y-M-d KK a', '1970-1-1 1 PM', 46800],
+-            ['y-M-d KK a', '1970-1-1 10 PM', 79200],
+-            ['y-M-d KK a', '1970-1-1 11 PM', 82800],
+-            ['y-M-d KK a', '1970-1-1 12 PM', 86400],
+-            ['y-M-d KK a', '1970-1-1 23 PM', 126000],
+-            ['y-M-d KK a', '1970-1-1 24 PM', 129600],
+-        ];
+-    }
+-
+-    public static function parseHour24ClockOneBasedProvider()
+-    {
+-        return [
+-            // 24 hours (1-24)
+-            ['y-M-d k', '1970-1-1 1', 3600],
+-            ['y-M-d k', '1970-1-1 10', 36000],
+-            ['y-M-d kk', '1970-1-1 11', 39600],
+-            ['y-M-d kk', '1970-1-1 12', 43200],
+-            ['y-M-d kk', '1970-1-1 23', 82800],
+-            ['y-M-d kk', '1970-1-1 24', 0],
+-            ['y-M-d kk a', '1970-1-1 0 AM', 0],
+-            ['y-M-d kk a', '1970-1-1 1 AM', 0],
+-            ['y-M-d kk a', '1970-1-1 10 AM', 0],
+-            ['y-M-d kk a', '1970-1-1 11 AM', 0],
+-            ['y-M-d kk a', '1970-1-1 12 AM', 0],
+-            ['y-M-d kk a', '1970-1-1 23 AM', 0],
+-            ['y-M-d kk a', '1970-1-1 24 AM', 0],
+-            ['y-M-d kk a', '1970-1-1 0 PM', 43200],
+-            ['y-M-d kk a', '1970-1-1 1 PM', 43200],
+-            ['y-M-d kk a', '1970-1-1 10 PM', 43200],
+-            ['y-M-d kk a', '1970-1-1 11 PM', 43200],
+-            ['y-M-d kk a', '1970-1-1 12 PM', 43200],
+-            ['y-M-d kk a', '1970-1-1 23 PM', 43200],
+-            ['y-M-d kk a', '1970-1-1 24 PM', 43200],
+-        ];
+-    }
+-
+-    public static function parseHour24ClockZeroBasedProvider()
+-    {
+-        return [
+-            // 24 hours (0-23)
+-            ['y-M-d H', '1970-1-1 0', 0],
+-            ['y-M-d H', '1970-1-1 1', 3600],
+-            ['y-M-d H', '1970-1-1 10', 36000],
+-            ['y-M-d HH', '1970-1-1 11', 39600],
+-            ['y-M-d HH', '1970-1-1 12', 43200],
+-            ['y-M-d HH', '1970-1-1 23', 82800],
+-            ['y-M-d HH a', '1970-1-1 0 AM', 0],
+-            ['y-M-d HH a', '1970-1-1 1 AM', 0],
+-            ['y-M-d HH a', '1970-1-1 10 AM', 0],
+-            ['y-M-d HH a', '1970-1-1 11 AM', 0],
+-            ['y-M-d HH a', '1970-1-1 12 AM', 0],
+-            ['y-M-d HH a', '1970-1-1 23 AM', 0],
+-            ['y-M-d HH a', '1970-1-1 24 AM', 0],
+-            ['y-M-d HH a', '1970-1-1 0 PM', 43200],
+-            ['y-M-d HH a', '1970-1-1 1 PM', 43200],
+-            ['y-M-d HH a', '1970-1-1 10 PM', 43200],
+-            ['y-M-d HH a', '1970-1-1 11 PM', 43200],
+-            ['y-M-d HH a', '1970-1-1 12 PM', 43200],
+-            ['y-M-d HH a', '1970-1-1 23 PM', 43200],
+-            ['y-M-d HH a', '1970-1-1 24 PM', 43200],
+-        ];
+-    }
+-
+-    public static function parseMinuteProvider()
+-    {
+-        return [
+-            ['y-M-d HH:m', '1970-1-1 0:1', 60],
+-            ['y-M-d HH:mm', '1970-1-1 0:10', 600],
+-        ];
+-    }
+-
+-    public static function parseSecondProvider()
+-    {
+-        return [
+-            ['y-M-d HH:mm:s', '1970-1-1 00:01:1', 61],
+-            ['y-M-d HH:mm:ss', '1970-1-1 00:01:10', 70],
+-        ];
+-    }
+-
+-    public static function parseTimezoneProvider()
+-    {
+-        return [
+-            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT-03:00', 10800],
+-            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT-04:00', 14400],
+-            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT-00:00', 0],
+-            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT+03:00', -10800],
+-            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT+04:00', -14400],
+-            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT-0300', 10800],
+-            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT+0300', -10800],
+-
+-            // a previous timezone parsing should not change the timezone for the next parsing
+-            ['y-M-d HH:mm:ss', '1970-1-1 00:00:00', 0],
+-        ];
+-    }
+-
+-    public static function parseAmPmProvider()
+-    {
+-        return [
+-            // AM/PM (already covered by hours tests)
+-            ['y-M-d HH:mm:ss a', '1970-1-1 00:00:00 AM', 0],
+-            ['y-M-d HH:mm:ss a', '1970-1-1 00:00:00 PM', 43200],
+-        ];
+-    }
+-
+-    public static function parseStandaloneAmPmProvider()
+-    {
+-        return [
+-            ['a', 'AM', 0],
+-            ['a', 'PM', 43200],
+-        ];
+-    }
+-
+-    public static function parseRegexMetaCharsProvider()
+-    {
+-        return [
+-            // regexp meta chars in the pattern string
+-            ['y[M-d', '1970[1-1', 0],
+-            ['y[M/d', '1970[1/1', 0],
+-        ];
+-    }
+-
+-    public static function parseQuoteCharsProvider()
+-    {
+-        return [
+-            ["'M'", 'M', 0],
+-            ["'yy'", 'yy', 0],
+-            ["'''yy'", "'yy", 0],
+-            ["''y", "'1970", 0],
+-            ["H 'o'' clock'", "0 o' clock", 0],
+-        ];
+-    }
+-
+-    public static function parseDashSlashProvider()
+-    {
+-        return [
+-            ['y-M-d', '1970/1/1', 0],
+-            ['yy-M-d', '70/1/1', 0],
+-            ['y/M/d', '1970-1-1', 0],
+-            ['yy/M/d', '70-1-1', 0],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider parseErrorProvider
+-     */
+-    public function testParseError($pattern, $value)
+-    {
+-        $errorCode = Icu::U_PARSE_ERROR;
+-        $errorMessage = 'Date parsing failed: U_PARSE_ERROR';
+-
+-        $formatter = $this->getDefaultDateFormatter($pattern);
+-        $this->assertFalse($formatter->parse($value));
+-        $this->assertIsIntlFailure($formatter, $errorMessage, $errorCode);
+-    }
+-
+-    public static function parseErrorProvider()
+-    {
+-        return [
+-            // 1 char month
+-            ['y-MMMMM-d', '1970-J-1'],
+-            ['y-MMMMM-d', '1970-S-1'],
+-
+-            // standalone 1 char month
+-            ['y-LLLLL-d', '1970-J-1'],
+-            ['y-LLLLL-d', '1970-S-1'],
+-        ];
+-    }
+-
+-    /*
+-     * https://github.com/symfony/symfony/issues/4242
+-     */
+-    public function testParseAfterError()
+-    {
+-        $this->testParseError('y-MMMMM-d', '1970-J-1');
+-        $this->testParse('y-M-d', '1970-1-1', 0);
+-    }
+-
+-    public function testParseWithNullPositionValue()
+-    {
+-        $position = null;
+-        $formatter = $this->getDefaultDateFormatter('y');
+-        $this->assertSame(0, $formatter->parse('1970', $position));
+-        // Since $position is not supported by the Symfony implementation, the following won't work.
+-        // The intl implementation works this way since 60.2.
+-        // $this->assertSame(4, $position);
+-    }
+-
+-    public function testSetPattern()
+-    {
+-        $formatter = $this->getDefaultDateFormatter();
+-        $formatter->setPattern('yyyy-MM-dd');
+-        $this->assertEquals('yyyy-MM-dd', $formatter->getPattern());
+-    }
+-
+-    /**
+-     * @dataProvider setTimeZoneProvider
+-     */
+-    public function testSetTimeZone($timeZoneId, $expectedTimeZoneId)
+-    {
+-        $formatter = $this->getDefaultDateFormatter();
+-
+-        $formatter->setTimeZone($timeZoneId);
+-
+-        $this->assertEquals($expectedTimeZoneId, $formatter->getTimeZoneId());
+-    }
+-
+-    public static function setTimeZoneProvider()
+-    {
+-        return [
+-            ['UTC', 'UTC'],
+-            ['GMT', 'GMT'],
+-            ['GMT-03:00', 'GMT-03:00'],
+-            ['Europe/Zurich', 'Europe/Zurich'],
+-            [null, date_default_timezone_get()],
+-            ['Foo/Bar', 'UTC'],
+-            ['GMT+00:AA', 'UTC'],
+-            ['GMT+00AA', 'UTC'],
+-        ];
+-    }
+-
+-    protected function getDefaultDateFormatter($pattern = null)
+-    {
+-        return $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'UTC', IntlDateFormatter::GREGORIAN, $pattern);
+-    }
+-
+-    protected function getDateTime($timestamp, $timeZone)
+-    {
+-        $dateTime = new \DateTime();
+-        $dateTime->setTimestamp(null === $timestamp ? time() : $timestamp);
+-        $dateTime->setTimezone(new \DateTimeZone($timeZone ?: getenv('TZ') ?: 'UTC'));
+-
+-        return $dateTime;
+-    }
+-
+-    protected function assertIsIntlFailure($formatter, $errorMessage, $errorCode)
+-    {
+-        $this->assertSame($errorMessage, $this->getIntlErrorMessage());
+-        $this->assertSame($errorCode, $this->getIntlErrorCode());
+-        $this->assertTrue($this->isIntlFailure($this->getIntlErrorCode()));
+-        $this->assertSame($errorMessage, $formatter->getErrorMessage());
+-        $this->assertSame($errorCode, $formatter->getErrorCode());
+-        $this->assertTrue($this->isIntlFailure($formatter->getErrorCode()));
+-    }
+-
+-    protected function assertIsIntlSuccess($formatter, $errorMessage, $errorCode)
+-    {
+-        /* @var IntlDateFormatter $formatter */
+-        $this->assertSame($errorMessage, $this->getIntlErrorMessage());
+-        $this->assertSame($errorCode, $this->getIntlErrorCode());
+-        $this->assertFalse($this->isIntlFailure($this->getIntlErrorCode()));
+-        $this->assertSame($errorMessage, $formatter->getErrorMessage());
+-        $this->assertSame($errorCode, $formatter->getErrorCode());
+-        $this->assertFalse($this->isIntlFailure($formatter->getErrorCode()));
+-    }
+-
+-    /**
+-     * @return IntlDateFormatter|\IntlDateFormatter
+-     */
+-    abstract protected function getDateFormatter($locale, $datetype, $timetype, $timezone = null, $calendar = IntlDateFormatter::GREGORIAN, $pattern = null);
+-
+-    abstract protected function getIntlErrorMessage(): string;
+-
+-    abstract protected function getIntlErrorCode(): int;
+-
+-    /**
+-     * @param int $errorCode
+-     */
+-    abstract protected function isIntlFailure($errorCode): bool;
+-}
+diff --git a/tests/Intl/Icu/AbstractIntlDateFormatterTestCase.php b/tests/Intl/Icu/AbstractIntlDateFormatterTestCase.php
+new file mode 100644
+index 0000000..bf3249b
+--- /dev/null
++++ b/tests/Intl/Icu/AbstractIntlDateFormatterTestCase.php
+@@ -0,0 +1,1032 @@
++<?php
++
++/*
++ * This file is part of the Symfony package.
++ *
++ * (c) Fabien Potencier <fabien@symfony.com>
++ *
++ * For the full copyright and license information, please view the LICENSE
++ * file that was distributed with this source code.
++ */
++
++namespace Symfony\Polyfill\Tests\Intl\Icu;
++
++use PHPUnit\Framework\TestCase;
++use Symfony\Polyfill\Intl\Icu\Icu;
++use Symfony\Polyfill\Intl\Icu\Intl;
++use Symfony\Polyfill\Intl\Icu\IntlDateFormatter;
++
++/**
++ * Test case for IntlDateFormatter implementations.
++ *
++ * @author Bernhard Schussek <bschussek@gmail.com>
++ */
++abstract class AbstractIntlDateFormatterTestCase extends TestCase
++{
++    protected function setUp(): void
++    {
++        \Locale::setDefault('en');
++    }
++
++    /**
++     * When a time zone is not specified, it uses the system default however it returns null in the getter method.
++     */
++    public function testConstructorDefaultTimeZone()
++    {
++        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT);
++
++        $this->assertSame(date_default_timezone_get(), $formatter->getTimeZoneId());
++
++        $this->assertSame(
++            $this->getDateTime(0, $formatter->getTimeZoneId())->format('M j, Y, g:i A'),
++            str_replace("\u{202F}", ' ', $formatter->format(0))
++        );
++    }
++
++    /**
++     * @group legacy
++     */
++    public function testConstructorWithoutDateType()
++    {
++        $formatter = $this->getDateFormatter('en', null, IntlDateFormatter::SHORT, 'UTC', IntlDateFormatter::GREGORIAN);
++
++        $this->assertSame('EEEE, MMMM d, y \'at\' h:mm a', str_replace("\u{202F}", ' ', $formatter->getPattern()));
++    }
++
++    /**
++     * @group legacy
++     */
++    public function testConstructorWithoutTimeType()
++    {
++        $formatter = $this->getDateFormatter('en', IntlDateFormatter::SHORT, null, 'UTC', IntlDateFormatter::GREGORIAN);
++
++        $this->assertSame('M/d/yy, h:mm:ss a zzzz', str_replace("\u{202F}", ' ', $formatter->getPattern()));
++    }
++
++    /**
++     * @dataProvider formatProvider
++     */
++    public function testFormat($pattern, $timestamp, $expected)
++    {
++        $errorCode = Icu::U_ZERO_ERROR;
++        $errorMessage = 'U_ZERO_ERROR';
++
++        $formatter = $this->getDefaultDateFormatter($pattern);
++        $this->assertSame($expected, $formatter->format($timestamp));
++        $this->assertIsIntlSuccess($formatter, $errorMessage, $errorCode);
++    }
++
++    public static function formatProvider()
++    {
++        $dateTime = new \DateTime('@0');
++        $dateTimeImmutable = new \DateTimeImmutable('@0');
++
++        /* https://unicode-org.atlassian.net/browse/ICU-21647 */
++        $expectedQuarterX5 = '1';
++        if (\defined('INTL_ICU_VERSION') && version_compare(\INTL_ICU_VERSION, '70.1', '<')) {
++            $expectedQuarterX5 = '1st quarter';
++        }
++
++        $formatData = [
++            /* general */
++            ['y-M-d', 0, '1970-1-1'],
++            ["EEE, MMM d, ''yy", 0, "Thu, Jan 1, '70"],
++            ['h:mm a', 0, '12:00 AM'],
++            ['yyyyy.MMMM.dd hh:mm aaa', 0, '01970.January.01 12:00 AM'],
++
++            /* escaping */
++            ["'M'", 0, 'M'],
++            ["'yy'", 0, 'yy'],
++            ["'''yy'", 0, "'yy"],
++            ["''y", 0, "'1970"],
++            ["''yy", 0, "'70"],
++            ["H 'o'' clock'", 0, "0 o' clock"],
++
++            /* month */
++            ['M', 0, '1'],
++            ['MM', 0, '01'],
++            ['MMM', 0, 'Jan'],
++            ['MMMM', 0, 'January'],
++            ['MMMMM', 0, 'J'],
++            ['MMMMMM', 0, '000001'],
++
++            ['L', 0, '1'],
++            ['LL', 0, '01'],
++            ['LLL', 0, 'Jan'],
++            ['LLLL', 0, 'January'],
++            ['LLLLL', 0, 'J'],
++            ['LLLLLL', 0, '000001'],
++
++            /* year */
++            ['y', 0, '1970'],
++            ['yy', 0, '70'],
++            ['yyy', 0, '1970'],
++            ['yyyy', 0, '1970'],
++            ['yyyyy', 0, '01970'],
++            ['yyyyyy', 0, '001970'],
++
++            /* day */
++            ['d', 0, '1'],
++            ['dd', 0, '01'],
++            ['ddd', 0, '001'],
++
++            /* quarter */
++            ['Q', 0, '1'],
++            ['QQ', 0, '01'],
++            ['QQQ', 0, 'Q1'],
++            ['QQQQ', 0, '1st quarter'],
++            ['QQQQQ', 0, $expectedQuarterX5],
++
++            ['q', 0, '1'],
++            ['qq', 0, '01'],
++            ['qqq', 0, 'Q1'],
++            ['qqqq', 0, '1st quarter'],
++            ['qqqqq', 0, $expectedQuarterX5],
++
++            // 4 months
++            ['Q', 7776000, '2'],
++            ['QQ', 7776000, '02'],
++            ['QQQ', 7776000, 'Q2'],
++            ['QQQQ', 7776000, '2nd quarter'],
++
++            // 7 months
++            ['QQQQ', 15638400, '3rd quarter'],
++
++            // 10 months
++            ['QQQQ', 23587200, '4th quarter'],
++
++            /* 12-hour (1-12) */
++            ['h', 0, '12'],
++            ['hh', 0, '12'],
++            ['hhh', 0, '012'],
++
++            ['h', 1, '12'],
++            ['h', 3600, '1'],
++            ['h', 43200, '12'], // 12 hours
++
++            /* day of year */
++            ['D', 0, '1'],
++            ['D', 86400, '2'], // 1 day
++            ['D', 31536000, '1'], // 1 year
++            ['D', 31622400, '2'], // 1 year + 1 day
++
++            /* day of week */
++            ['E', 0, 'Thu'],
++            ['EE', 0, 'Thu'],
++            ['EEE', 0, 'Thu'],
++            ['EEEE', 0, 'Thursday'],
++            ['EEEEE', 0, 'T'],
++            ['EEEEEE', 0, 'Th'],
++
++            ['E', 1296540000, 'Tue'], // 2011-02-01
++            ['E', 1296950400, 'Sun'], // 2011-02-06
++
++            /* am/pm marker */
++            ['a', 0, 'AM'],
++            ['aa', 0, 'AM'],
++            ['aaa', 0, 'AM'],
++            ['aaaa', 0, 'AM'],
++
++            // 12 hours
++            ['a', 43200, 'PM'],
++            ['aa', 43200, 'PM'],
++            ['aaa', 43200, 'PM'],
++            ['aaaa', 43200, 'PM'],
++
++            /* 24-hour (0-23) */
++            ['H', 0, '0'],
++            ['HH', 0, '00'],
++            ['HHH', 0, '000'],
++
++            ['H', 1, '0'],
++            ['H', 3600, '1'],
++            ['H', 43200, '12'],
++            ['H', 46800, '13'],
++
++            /* 24-hour (1-24) */
++            ['k', 0, '24'],
++            ['kk', 0, '24'],
++            ['kkk', 0, '024'],
++
++            ['k', 1, '24'],
++            ['k', 3600, '1'],
++            ['k', 43200, '12'],
++            ['k', 46800, '13'],
++
++            /* 12-hour (0-11) */
++            ['K', 0, '0'],
++            ['KK', 0, '00'],
++            ['KKK', 0, '000'],
++
++            ['K', 1, '0'],
++            ['K', 3600, '1'],
++            ['K', 43200, '0'], // 12 hours
++
++            /* minute */
++            ['m', 0, '0'],
++            ['mm', 0, '00'],
++            ['mmm', 0, '000'],
++
++            ['m', 1, '0'],
++            ['m', 60, '1'],
++            ['m', 120, '2'],
++            ['m', 180, '3'],
++            ['m', 3600, '0'],
++            ['m', 3660, '1'],
++            ['m', 43200, '0'], // 12 hours
++
++            /* second */
++            ['s', 0, '0'],
++            ['ss', 0, '00'],
++            ['sss', 0, '000'],
++
++            ['s', 1, '1'],
++            ['s', 2, '2'],
++            ['s', 5, '5'],
++            ['s', 30, '30'],
++            ['s', 59, '59'],
++            ['s', 60, '0'],
++            ['s', 120, '0'],
++            ['s', 180, '0'],
++            ['s', 3600, '0'],
++            ['s', 3601, '1'],
++            ['s', 3630, '30'],
++            ['s', 43200, '0'], // 12 hours
++        ];
++
++        /* general, DateTime */
++        $formatData[] = ['y-M-d', $dateTime, '1970-1-1'];
++        $formatData[] = ["EEE, MMM d, ''yy", $dateTime, "Thu, Jan 1, '70"];
++        $formatData[] = ['h:mm a', $dateTime, '12:00 AM'];
++        $formatData[] = ['yyyyy.MMMM.dd hh:mm aaa', $dateTime, '01970.January.01 12:00 AM'];
++
++        /* general, DateTimeImmutable */
++        $formatData[] = ['y-M-d', $dateTimeImmutable, '1970-1-1'];
++        $formatData[] = ["EEE, MMM d, ''yy", $dateTimeImmutable, "Thu, Jan 1, '70"];
++        $formatData[] = ['h:mm a', $dateTimeImmutable, '12:00 AM'];
++        $formatData[] = ['yyyyy.MMMM.dd hh:mm aaa', $dateTimeImmutable, '01970.January.01 12:00 AM'];
++
++        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '59.1', '>=')) {
++            // Before ICU 59.1 GMT was used instead of UTC
++            $formatData[] = ["yyyy.MM.dd 'at' HH:mm:ss zzz", 0, '1970.01.01 at 00:00:00 UTC'];
++            $formatData[] = ['K:mm a, z', 0, '0:00 AM, UTC'];
++            $formatData[] = ["yyyy.MM.dd 'at' HH:mm:ss zzz", $dateTime, '1970.01.01 at 00:00:00 UTC'];
++            $formatData[] = ['K:mm a, z', $dateTime, '0:00 AM, UTC'];
++        }
++
++        return $formatData;
++    }
++
++    public function testFormatUtcAndGmtAreSplit()
++    {
++        $pattern = "yyyy.MM.dd 'at' HH:mm:ss zzz";
++        $gmtFormatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'GMT', IntlDateFormatter::GREGORIAN, $pattern);
++        $utcFormatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'UTC', IntlDateFormatter::GREGORIAN, $pattern);
++
++        $this->assertSame('1970.01.01 at 00:00:00 GMT', $gmtFormatter->format(new \DateTime('@0')));
++        $this->assertSame('1970.01.01 at 00:00:00 UTC', $utcFormatter->format(new \DateTime('@0')));
++        $this->assertSame('1970.01.01 at 00:00:00 GMT', $gmtFormatter->format(new \DateTimeImmutable('@0')));
++        $this->assertSame('1970.01.01 at 00:00:00 UTC', $utcFormatter->format(new \DateTimeImmutable('@0')));
++    }
++
++    /**
++     * @dataProvider formatErrorProvider
++     */
++    public function testFormatIllegalArgumentError($pattern, $timestamp, $errorMessage)
++    {
++        $errorCode = Icu::U_ILLEGAL_ARGUMENT_ERROR;
++
++        $formatter = $this->getDefaultDateFormatter($pattern);
++        $this->assertFalse($formatter->format($timestamp));
++        $this->assertIsIntlFailure($formatter, $errorMessage, $errorCode);
++    }
++
++    public static function formatErrorProvider()
++    {
++        return [
++            ['y-M-d', 'foobar', 'datefmt_format: string \'foobar\' is not numeric, which would be required for it to be a valid date: U_ILLEGAL_ARGUMENT_ERROR'],
++        ];
++    }
++
++    /**
++     * @dataProvider formatWithTimezoneProvider
++     */
++    public function testFormatWithTimezone($timestamp, $timezone, $expected)
++    {
++        $pattern = 'yyyy-MM-dd HH:mm:ss';
++        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, $timezone, IntlDateFormatter::GREGORIAN, $pattern);
++        $this->assertSame($expected, $formatter->format($timestamp));
++    }
++
++    public static function formatWithTimezoneProvider()
++    {
++        $data = [
++            [0, 'UTC', '1970-01-01 00:00:00'],
++            [0, 'GMT', '1970-01-01 00:00:00'],
++            [0, 'GMT-03:00', '1969-12-31 21:00:00'],
++            [0, 'GMT+03:00', '1970-01-01 03:00:00'],
++            [0, 'Europe/Zurich', '1970-01-01 01:00:00'],
++            [0, 'Europe/Paris', '1970-01-01 01:00:00'],
++            [0, 'Africa/Cairo', '1970-01-01 02:00:00'],
++            [0, 'Africa/Casablanca', '1970-01-01 00:00:00'],
++            [0, 'Africa/Djibouti', '1970-01-01 03:00:00'],
++            [0, 'Africa/Johannesburg', '1970-01-01 02:00:00'],
++            [0, 'America/Antigua', '1969-12-31 20:00:00'],
++            [0, 'America/Toronto', '1969-12-31 19:00:00'],
++            [0, 'America/Vancouver', '1969-12-31 16:00:00'],
++            [0, 'Asia/Aqtau', '1970-01-01 05:00:00'],
++            [0, 'Asia/Bangkok', '1970-01-01 07:00:00'],
++            [0, 'Asia/Dubai', '1970-01-01 04:00:00'],
++            [0, 'Australia/Brisbane', '1970-01-01 10:00:00'],
++            [0, 'Australia/Eucla', '1970-01-01 08:45:00'],
++            [0, 'Australia/Melbourne', '1970-01-01 10:00:00'],
++            [0, 'Europe/Berlin', '1970-01-01 01:00:00'],
++            [0, 'Europe/Dublin', '1970-01-01 01:00:00'],
++            [0, 'Europe/Warsaw', '1970-01-01 01:00:00'],
++            [0, 'Pacific/Fiji', '1970-01-01 12:00:00'],
++        ];
++
++        return $data;
++    }
++
++    /**
++     * @dataProvider formatTimezoneProvider
++     */
++    public function testFormatTimezone($pattern, $timezone, $expected)
++    {
++        $formatter = $this->getDefaultDateFormatter($pattern);
++        $formatter->setTimeZone(new \DateTimeZone($timezone));
++
++        $this->assertEquals($expected, $formatter->format(0));
++    }
++
++    public static function formatTimezoneProvider()
++    {
++        return [
++            ['z', 'GMT', 'GMT'],
++            ['zz', 'GMT', 'GMT'],
++            ['zzz', 'GMT', 'GMT'],
++            ['zzzz', 'GMT', 'Greenwich Mean Time'],
++            ['zzzzz', 'GMT', 'Greenwich Mean Time'],
++
++            ['z', 'Etc/GMT', 'GMT'],
++            ['zz', 'Etc/GMT', 'GMT'],
++            ['zzz', 'Etc/GMT', 'GMT'],
++            ['zzzz', 'Etc/GMT', 'Greenwich Mean Time'],
++            ['zzzzz', 'Etc/GMT', 'Greenwich Mean Time'],
++
++            ['z', 'Etc/GMT+3', 'GMT-3'],
++            ['zz', 'Etc/GMT+3', 'GMT-3'],
++            ['zzz', 'Etc/GMT+3', 'GMT-3'],
++            ['zzzz', 'Etc/GMT+3', 'GMT-03:00'],
++            ['zzzzz', 'Etc/GMT+3', 'GMT-03:00'],
++
++            ['z', 'UTC', 'UTC'],
++            ['zz', 'UTC', 'UTC'],
++            ['zzz', 'UTC', 'UTC'],
++            ['zzzz', 'UTC', 'Coordinated Universal Time'],
++            ['zzzzz', 'UTC', 'Coordinated Universal Time'],
++
++            ['z', 'Etc/UTC', 'UTC'],
++            ['zz', 'Etc/UTC', 'UTC'],
++            ['zzz', 'Etc/UTC', 'UTC'],
++            ['zzzz', 'Etc/UTC', 'Coordinated Universal Time'],
++            ['zzzzz', 'Etc/UTC', 'Coordinated Universal Time'],
++
++            ['z', 'Etc/Universal', 'UTC'],
++            ['z', 'Etc/Zulu', 'UTC'],
++            ['z', 'Etc/UCT', 'UTC'],
++            ['z', 'Etc/Greenwich', 'GMT'],
++            ['zzzzz', 'Etc/Universal', 'Coordinated Universal Time'],
++            ['zzzzz', 'Etc/Zulu', 'Coordinated Universal Time'],
++            ['zzzzz', 'Etc/UCT', 'Coordinated Universal Time'],
++            ['zzzzz', 'Etc/Greenwich', 'Greenwich Mean Time'],
++
++            ['z', 'GMT+03:00', 'GMT+3'],
++            ['zz', 'GMT+03:00', 'GMT+3'],
++            ['zzz', 'GMT+03:00', 'GMT+3'],
++            ['zzzz', 'GMT+03:00', 'GMT+03:00'],
++            ['zzzzz', 'GMT+03:00', 'GMT+03:00'],
++        ];
++    }
++
++    public function testFormatWithGmtTimezone()
++    {
++        $formatter = $this->getDefaultDateFormatter('zzzz');
++
++        $formatter->setTimeZone('GMT+03:00');
++
++        $this->assertEquals('GMT+03:00', $formatter->format(0));
++    }
++
++    public function testFormatWithGmtTimeZoneAndMinutesOffset()
++    {
++        $formatter = $this->getDefaultDateFormatter('zzzz');
++
++        $formatter->setTimeZone('GMT+00:30');
++
++        $this->assertEquals('GMT+00:30', $formatter->format(0));
++    }
++
++    public function testFormatWithNonStandardTimezone()
++    {
++        $formatter = $this->getDefaultDateFormatter('zzzz');
++
++        $formatter->setTimeZone('Pacific/Fiji');
++
++        $this->assertEquals('Fiji Standard Time', $formatter->format(0));
++    }
++
++    public function testFormatWithConstructorTimezone()
++    {
++        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'UTC');
++        $formatter->setPattern('yyyy-MM-dd HH:mm:ss');
++
++        $this->assertEquals(
++            $this->getDateTime(0, 'UTC')->format('Y-m-d H:i:s'),
++            $formatter->format(0)
++        );
++    }
++
++    public function testFormatWithDateTimeZoneGmt()
++    {
++        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, new \DateTimeZone('GMT'), IntlDateFormatter::GREGORIAN, 'zzz');
++
++        $this->assertEquals('GMT', $formatter->format(0));
++    }
++
++    public function testFormatWithDateTimeZoneGmtOffset()
++    {
++        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, new \DateTimeZone('GMT+03:00'), IntlDateFormatter::GREGORIAN, 'zzzz');
++
++        $this->assertEquals('GMT+03:00', $formatter->format(0));
++    }
++
++    /**
++     * @requires extension intl
++     */
++    public function testFormatWithIntlTimeZone()
++    {
++        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, \IntlTimeZone::createTimeZone('GMT+03:00'), IntlDateFormatter::GREGORIAN, 'zzzz');
++
++        $this->assertEquals('GMT+03:00', $formatter->format(0));
++    }
++
++    public function testFormatWithTimezoneFromPhp()
++    {
++        $tz = date_default_timezone_get();
++        date_default_timezone_set('Europe/London');
++
++        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT);
++        $formatter->setPattern('yyyy-MM-dd HH:mm:ss');
++
++        $this->assertEquals(
++            $this->getDateTime(0, 'Europe/London')->format('Y-m-d H:i:s'),
++            $formatter->format(0)
++        );
++
++        $this->assertEquals('Europe/London', date_default_timezone_get());
++
++        // Restores TZ.
++        date_default_timezone_set($tz);
++    }
++
++    public function testFormatIgnoresPatternForRelativeDateType()
++    {
++        $formatter = $this->getDateFormatter('en', IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::FULL, new \DateTimeZone('GMT'), IntlDateFormatter::GREGORIAN, 'zzzz');
++
++        $datetime = \DateTime::createFromFormat('U', time(), new \DateTimeZone('GMT'));
++        $datetime->setTime(0, 0, 0);
++
++        $formatted = $formatter->format($datetime);
++        $formatted = str_replace(' at ', ', ', $formatted);
++        $formatted = str_replace("\u{202F}", ' ', $formatted);
++
++        $this->assertSame('today, 12:00:00 AM Greenwich Mean Time', $formatted);
++    }
++
++    /**
++     * @dataProvider dateAndTimeTypeProvider
++     */
++    public function testDateAndTimeType($timestamp, $datetype, $timetype, $expected)
++    {
++        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
++        $this->assertSame($expected, str_replace("\u{202F}", ' ', $formatter->format($timestamp)));
++    }
++
++    public static function dateAndTimeTypeProvider()
++    {
++        return [
++            [0, IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'Thursday, January 1, 1970'],
++            [0, IntlDateFormatter::LONG, IntlDateFormatter::NONE, 'January 1, 1970'],
++            [0, IntlDateFormatter::MEDIUM, IntlDateFormatter::NONE, 'Jan 1, 1970'],
++            [0, IntlDateFormatter::SHORT, IntlDateFormatter::NONE, '1/1/70'],
++            [0, IntlDateFormatter::NONE, IntlDateFormatter::FULL, '12:00:00 AM Coordinated Universal Time'],
++            [0, IntlDateFormatter::NONE, IntlDateFormatter::LONG, '12:00:00 AM UTC'],
++            [0, IntlDateFormatter::NONE, IntlDateFormatter::MEDIUM, '12:00:00 AM'],
++            [0, IntlDateFormatter::NONE, IntlDateFormatter::SHORT, '12:00 AM'],
++        ];
++    }
++
++    /**
++     * @dataProvider relativeDateTypeProvider
++     */
++    public function testRelativeDateType($timestamp, $datetype, $timetype, $expected)
++    {
++        $datetime = \DateTime::createFromFormat('U', $timestamp, new \DateTimeZone('UTC'));
++        $datetime->setTime(0, 0, 0);
++
++        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
++
++        $formatted = $formatter->format($datetime);
++
++        // Ignore differences that vary by version of PHP or ICU
++        $formatted = str_replace(' at ', ', ', $formatted);
++        $formatted = str_replace("\u{202F}", ' ', $formatted);
++
++        $this->assertSame($expected, $formatted);
++    }
++
++    public static function relativeDateTypeProvider()
++    {
++        return [
++            [0, IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'Thursday, January 1, 1970'],
++            [0, IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::NONE, 'January 1, 1970'],
++            [0, IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::NONE, 'Jan 1, 1970'],
++            [0, IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::NONE, '1/1/70'],
++
++            [time(), IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'today'],
++            [time(), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'today, 12:00:00 AM Coordinated Universal Time'],
++            [time(), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'today, 12:00:00 AM UTC'],
++            [time(), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'today, 12:00 AM'],
++
++            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'yesterday'],
++            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'yesterday, 12:00:00 AM Coordinated Universal Time'],
++            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'yesterday, 12:00:00 AM UTC'],
++            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'yesterday, 12:00 AM'],
++
++            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'tomorrow'],
++            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'tomorrow, 12:00:00 AM Coordinated Universal Time'],
++            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'tomorrow, 12:00:00 AM UTC'],
++            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'tomorrow, 12:00 AM'],
++        ];
++    }
++
++    public function testGetCalendar()
++    {
++        $formatter = $this->getDefaultDateFormatter();
++        $this->assertEquals(IntlDateFormatter::GREGORIAN, $formatter->getCalendar());
++    }
++
++    public function testGetDateType()
++    {
++        $formatter = $this->getDateFormatter('en', IntlDateFormatter::FULL, IntlDateFormatter::NONE);
++        $this->assertEquals(IntlDateFormatter::FULL, $formatter->getDateType());
++    }
++
++    public function testGetLocale()
++    {
++        $formatter = $this->getDefaultDateFormatter();
++        $this->assertEquals('en', $formatter->getLocale());
++    }
++
++    public function testGetPattern()
++    {
++        $formatter = $this->getDateFormatter('en', IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'UTC', IntlDateFormatter::GREGORIAN, 'yyyy-MM-dd');
++        $this->assertEquals('yyyy-MM-dd', $formatter->getPattern());
++    }
++
++    public function testGetTimeType()
++    {
++        $formatter = $this->getDateFormatter('en', IntlDateFormatter::NONE, IntlDateFormatter::FULL);
++        $this->assertEquals(IntlDateFormatter::FULL, $formatter->getTimeType());
++    }
++
++    /**
++     * @dataProvider parseProvider
++     */
++    public function testParse($pattern, $value, $expected)
++    {
++        $errorCode = Icu::U_ZERO_ERROR;
++        $errorMessage = 'U_ZERO_ERROR';
++
++        $formatter = $this->getDefaultDateFormatter($pattern);
++        $this->assertSame($expected, $formatter->parse($value));
++        $this->assertIsIntlSuccess($formatter, $errorMessage, $errorCode);
++    }
++
++    public static function parseProvider()
++    {
++        return array_merge(
++            static::parseYearProvider(),
++            static::parseQuarterProvider(),
++            static::parseMonthProvider(),
++            static::parseStandaloneMonthProvider(),
++            static::parseDayProvider(),
++            static::parseDayOfWeekProvider(),
++            static::parseDayOfYearProvider(),
++            static::parseHour12ClockOneBasedProvider(),
++            static::parseHour12ClockZeroBasedProvider(),
++            static::parseHour24ClockOneBasedProvider(),
++            static::parseHour24ClockZeroBasedProvider(),
++            static::parseMinuteProvider(),
++            static::parseSecondProvider(),
++            static::parseTimezoneProvider(),
++            static::parseAmPmProvider(),
++            static::parseStandaloneAmPmProvider(),
++            static::parseRegexMetaCharsProvider(),
++            static::parseQuoteCharsProvider(),
++            static::parseDashSlashProvider()
++        );
++    }
++
++    public static function parseYearProvider()
++    {
++        return [
++            ['y-M-d', '1970-1-1', 0],
++            ['yy-M-d', '70-1-1', 0],
++        ];
++    }
++
++    public static function parseQuarterProvider()
++    {
++        return [
++            ['Q', '1', 0],
++            ['QQ', '01', 0],
++            ['QQQ', 'Q1', 0],
++            ['QQQQ', '1st quarter', 0],
++            ['QQQQQ', '1st quarter', 0],
++
++            ['Q', '2', 7776000],
++            ['QQ', '02', 7776000],
++            ['QQQ', 'Q2', 7776000],
++            ['QQQQ', '2nd quarter', 7776000],
++            ['QQQQQ', '2nd quarter', 7776000],
++
++            ['q', '1', 0],
++            ['qq', '01', 0],
++            ['qqq', 'Q1', 0],
++            ['qqqq', '1st quarter', 0],
++            ['qqqqq', '1st quarter', 0],
++        ];
++    }
++
++    public static function parseMonthProvider()
++    {
++        return [
++            ['y-M-d', '1970-1-1', 0],
++            ['y-MM-d', '1970-1-1', 0],
++            ['y-MMM-d', '1970-Jan-1', 0],
++            ['y-MMMM-d', '1970-January-1', 0],
++        ];
++    }
++
++    public static function parseStandaloneMonthProvider()
++    {
++        return [
++            ['y-L-d', '1970-1-1', 0],
++            ['y-LLL-d', '1970-Jan-1', 0],
++            ['y-LLLL-d', '1970-January-1', 0],
++        ];
++    }
++
++    public static function parseDayProvider()
++    {
++        return [
++            ['y-M-d', '1970-1-1', 0],
++            ['y-M-dd', '1970-1-1', 0],
++            ['y-M-dd', '1970-1-01', 0],
++            ['y-M-ddd', '1970-1-001', 0],
++        ];
++    }
++
++    public static function parseDayOfWeekProvider()
++    {
++        return [
++            ['E', 'Thu', 0],
++            ['EE', 'Thu', 0],
++            ['EEE', 'Thu', 0],
++            ['EEEE', 'Thursday', 0],
++            ['EEEEE', 'T', 432000],
++            ['EEEEEE', 'Th', 0],
++        ];
++    }
++
++    public static function parseDayOfYearProvider()
++    {
++        return [
++            ['D', '1', 0],
++            ['D', '2', 86400],
++        ];
++    }
++
++    public static function parseHour12ClockOneBasedProvider()
++    {
++        return [
++            // 12 hours (1-12)
++            ['y-M-d h', '1970-1-1 1', 3600],
++            ['y-M-d h', '1970-1-1 10', 36000],
++            ['y-M-d hh', '1970-1-1 11', 39600],
++            ['y-M-d hh', '1970-1-1 12', 0],
++            ['y-M-d hh a', '1970-1-1 0 AM', 0],
++            ['y-M-d hh a', '1970-1-1 1 AM', 3600],
++            ['y-M-d hh a', '1970-1-1 10 AM', 36000],
++            ['y-M-d hh a', '1970-1-1 11 AM', 39600],
++            ['y-M-d hh a', '1970-1-1 12 AM', 0],
++            ['y-M-d hh a', '1970-1-1 23 AM', 82800],
++            ['y-M-d hh a', '1970-1-1 24 AM', 86400],
++            ['y-M-d hh a', '1970-1-1 0 PM', 43200],
++            ['y-M-d hh a', '1970-1-1 1 PM', 46800],
++            ['y-M-d hh a', '1970-1-1 10 PM', 79200],
++            ['y-M-d hh a', '1970-1-1 11 PM', 82800],
++            ['y-M-d hh a', '1970-1-1 12 PM', 43200],
++            ['y-M-d hh a', '1970-1-1 23 PM', 126000],
++            ['y-M-d hh a', '1970-1-1 24 PM', 129600],
++        ];
++    }
++
++    public static function parseHour12ClockZeroBasedProvider()
++    {
++        return [
++            // 12 hours (0-11)
++            ['y-M-d K', '1970-1-1 1', 3600],
++            ['y-M-d K', '1970-1-1 10', 36000],
++            ['y-M-d KK', '1970-1-1 11', 39600],
++            ['y-M-d KK', '1970-1-1 12', 43200],
++            ['y-M-d KK a', '1970-1-1 0 AM', 0],
++            ['y-M-d KK a', '1970-1-1 1 AM', 3600],
++            ['y-M-d KK a', '1970-1-1 10 AM', 36000],
++            ['y-M-d KK a', '1970-1-1 11 AM', 39600],
++            ['y-M-d KK a', '1970-1-1 12 AM', 43200],
++            ['y-M-d KK a', '1970-1-1 23 AM', 82800],
++            ['y-M-d KK a', '1970-1-1 24 AM', 86400],
++            ['y-M-d KK a', '1970-1-1 0 PM', 43200],
++            ['y-M-d KK a', '1970-1-1 1 PM', 46800],
++            ['y-M-d KK a', '1970-1-1 10 PM', 79200],
++            ['y-M-d KK a', '1970-1-1 11 PM', 82800],
++            ['y-M-d KK a', '1970-1-1 12 PM', 86400],
++            ['y-M-d KK a', '1970-1-1 23 PM', 126000],
++            ['y-M-d KK a', '1970-1-1 24 PM', 129600],
++        ];
++    }
++
++    public static function parseHour24ClockOneBasedProvider()
++    {
++        return [
++            // 24 hours (1-24)
++            ['y-M-d k', '1970-1-1 1', 3600],
++            ['y-M-d k', '1970-1-1 10', 36000],
++            ['y-M-d kk', '1970-1-1 11', 39600],
++            ['y-M-d kk', '1970-1-1 12', 43200],
++            ['y-M-d kk', '1970-1-1 23', 82800],
++            ['y-M-d kk', '1970-1-1 24', 0],
++            ['y-M-d kk a', '1970-1-1 0 AM', 0],
++            ['y-M-d kk a', '1970-1-1 1 AM', 0],
++            ['y-M-d kk a', '1970-1-1 10 AM', 0],
++            ['y-M-d kk a', '1970-1-1 11 AM', 0],
++            ['y-M-d kk a', '1970-1-1 12 AM', 0],
++            ['y-M-d kk a', '1970-1-1 23 AM', 0],
++            ['y-M-d kk a', '1970-1-1 24 AM', 0],
++            ['y-M-d kk a', '1970-1-1 0 PM', 43200],
++            ['y-M-d kk a', '1970-1-1 1 PM', 43200],
++            ['y-M-d kk a', '1970-1-1 10 PM', 43200],
++            ['y-M-d kk a', '1970-1-1 11 PM', 43200],
++            ['y-M-d kk a', '1970-1-1 12 PM', 43200],
++            ['y-M-d kk a', '1970-1-1 23 PM', 43200],
++            ['y-M-d kk a', '1970-1-1 24 PM', 43200],
++        ];
++    }
++
++    public static function parseHour24ClockZeroBasedProvider()
++    {
++        return [
++            // 24 hours (0-23)
++            ['y-M-d H', '1970-1-1 0', 0],
++            ['y-M-d H', '1970-1-1 1', 3600],
++            ['y-M-d H', '1970-1-1 10', 36000],
++            ['y-M-d HH', '1970-1-1 11', 39600],
++            ['y-M-d HH', '1970-1-1 12', 43200],
++            ['y-M-d HH', '1970-1-1 23', 82800],
++            ['y-M-d HH a', '1970-1-1 0 AM', 0],
++            ['y-M-d HH a', '1970-1-1 1 AM', 0],
++            ['y-M-d HH a', '1970-1-1 10 AM', 0],
++            ['y-M-d HH a', '1970-1-1 11 AM', 0],
++            ['y-M-d HH a', '1970-1-1 12 AM', 0],
++            ['y-M-d HH a', '1970-1-1 23 AM', 0],
++            ['y-M-d HH a', '1970-1-1 24 AM', 0],
++            ['y-M-d HH a', '1970-1-1 0 PM', 43200],
++            ['y-M-d HH a', '1970-1-1 1 PM', 43200],
++            ['y-M-d HH a', '1970-1-1 10 PM', 43200],
++            ['y-M-d HH a', '1970-1-1 11 PM', 43200],
++            ['y-M-d HH a', '1970-1-1 12 PM', 43200],
++            ['y-M-d HH a', '1970-1-1 23 PM', 43200],
++            ['y-M-d HH a', '1970-1-1 24 PM', 43200],
++        ];
++    }
++
++    public static function parseMinuteProvider()
++    {
++        return [
++            ['y-M-d HH:m', '1970-1-1 0:1', 60],
++            ['y-M-d HH:mm', '1970-1-1 0:10', 600],
++        ];
++    }
++
++    public static function parseSecondProvider()
++    {
++        return [
++            ['y-M-d HH:mm:s', '1970-1-1 00:01:1', 61],
++            ['y-M-d HH:mm:ss', '1970-1-1 00:01:10', 70],
++        ];
++    }
++
++    public static function parseTimezoneProvider()
++    {
++        return [
++            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT-03:00', 10800],
++            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT-04:00', 14400],
++            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT-00:00', 0],
++            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT+03:00', -10800],
++            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT+04:00', -14400],
++            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT-0300', 10800],
++            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT+0300', -10800],
++
++            // a previous timezone parsing should not change the timezone for the next parsing
++            ['y-M-d HH:mm:ss', '1970-1-1 00:00:00', 0],
++        ];
++    }
++
++    public static function parseAmPmProvider()
++    {
++        return [
++            // AM/PM (already covered by hours tests)
++            ['y-M-d HH:mm:ss a', '1970-1-1 00:00:00 AM', 0],
++            ['y-M-d HH:mm:ss a', '1970-1-1 00:00:00 PM', 43200],
++        ];
++    }
++
++    public static function parseStandaloneAmPmProvider()
++    {
++        return [
++            ['a', 'AM', 0],
++            ['a', 'PM', 43200],
++        ];
++    }
++
++    public static function parseRegexMetaCharsProvider()
++    {
++        return [
++            // regexp meta chars in the pattern string
++            ['y[M-d', '1970[1-1', 0],
++            ['y[M/d', '1970[1/1', 0],
++        ];
++    }
++
++    public static function parseQuoteCharsProvider()
++    {
++        return [
++            ["'M'", 'M', 0],
++            ["'yy'", 'yy', 0],
++            ["'''yy'", "'yy", 0],
++            ["''y", "'1970", 0],
++            ["H 'o'' clock'", "0 o' clock", 0],
++        ];
++    }
++
++    public static function parseDashSlashProvider()
++    {
++        return [
++            ['y-M-d', '1970/1/1', 0],
++            ['yy-M-d', '70/1/1', 0],
++            ['y/M/d', '1970-1-1', 0],
++            ['yy/M/d', '70-1-1', 0],
++        ];
++    }
++
++    /**
++     * @dataProvider parseErrorProvider
++     */
++    public function testParseError($pattern, $value)
++    {
++        $errorCode = Icu::U_PARSE_ERROR;
++        $errorMessage = 'Date parsing failed: U_PARSE_ERROR';
++
++        $formatter = $this->getDefaultDateFormatter($pattern);
++        $this->assertFalse($formatter->parse($value));
++        $this->assertIsIntlFailure($formatter, $errorMessage, $errorCode);
++    }
++
++    public static function parseErrorProvider()
++    {
++        return [
++            // 1 char month
++            ['y-MMMMM-d', '1970-J-1'],
++            ['y-MMMMM-d', '1970-S-1'],
++
++            // standalone 1 char month
++            ['y-LLLLL-d', '1970-J-1'],
++            ['y-LLLLL-d', '1970-S-1'],
++        ];
++    }
++
++    /*
++     * https://github.com/symfony/symfony/issues/4242
++     */
++    public function testParseAfterError()
++    {
++        $this->testParseError('y-MMMMM-d', '1970-J-1');
++        $this->testParse('y-M-d', '1970-1-1', 0);
++    }
++
++    public function testParseWithNullPositionValue()
++    {
++        $position = null;
++        $formatter = $this->getDefaultDateFormatter('y');
++        $this->assertSame(0, $formatter->parse('1970', $position));
++        // Since $position is not supported by the Symfony implementation, the following won't work.
++        // The intl implementation works this way since 60.2.
++        // $this->assertSame(4, $position);
++    }
++
++    public function testSetPattern()
++    {
++        $formatter = $this->getDefaultDateFormatter();
++        $formatter->setPattern('yyyy-MM-dd');
++        $this->assertEquals('yyyy-MM-dd', $formatter->getPattern());
++    }
++
++    /**
++     * @dataProvider setTimeZoneProvider
++     */
++    public function testSetTimeZone($timeZoneId, $expectedTimeZoneId)
++    {
++        $formatter = $this->getDefaultDateFormatter();
++
++        $formatter->setTimeZone($timeZoneId);
++
++        $this->assertEquals($expectedTimeZoneId, $formatter->getTimeZoneId());
++    }
++
++    public static function setTimeZoneProvider()
++    {
++        return [
++            ['UTC', 'UTC'],
++            ['GMT', 'GMT'],
++            ['GMT-03:00', 'GMT-03:00'],
++            ['Europe/Zurich', 'Europe/Zurich'],
++            [null, date_default_timezone_get()],
++            ['Foo/Bar', 'UTC'],
++            ['GMT+00:AA', 'UTC'],
++            ['GMT+00AA', 'UTC'],
++        ];
++    }
++
++    protected function getDefaultDateFormatter($pattern = null)
++    {
++        return $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'UTC', IntlDateFormatter::GREGORIAN, $pattern);
++    }
++
++    protected function getDateTime($timestamp, $timeZone)
++    {
++        $dateTime = new \DateTime();
++        $dateTime->setTimestamp(null === $timestamp ? time() : $timestamp);
++        $dateTime->setTimezone(new \DateTimeZone($timeZone ?: getenv('TZ') ?: 'UTC'));
++
++        return $dateTime;
++    }
++
++    protected function assertIsIntlFailure($formatter, $errorMessage, $errorCode)
++    {
++        $this->assertSame($errorMessage, $this->getIntlErrorMessage());
++        $this->assertSame($errorCode, $this->getIntlErrorCode());
++        $this->assertTrue($this->isIntlFailure($this->getIntlErrorCode()));
++        $this->assertSame($errorMessage, $formatter->getErrorMessage());
++        $this->assertSame($errorCode, $formatter->getErrorCode());
++        $this->assertTrue($this->isIntlFailure($formatter->getErrorCode()));
++    }
++
++    protected function assertIsIntlSuccess($formatter, $errorMessage, $errorCode)
++    {
++        /* @var IntlDateFormatter $formatter */
++        $this->assertSame($errorMessage, $this->getIntlErrorMessage());
++        $this->assertSame($errorCode, $this->getIntlErrorCode());
++        $this->assertFalse($this->isIntlFailure($this->getIntlErrorCode()));
++        $this->assertSame($errorMessage, $formatter->getErrorMessage());
++        $this->assertSame($errorCode, $formatter->getErrorCode());
++        $this->assertFalse($this->isIntlFailure($formatter->getErrorCode()));
++    }
++
++    /**
++     * @return IntlDateFormatter|\IntlDateFormatter
++     */
++    abstract protected function getDateFormatter($locale, $datetype, $timetype, $timezone = null, $calendar = IntlDateFormatter::GREGORIAN, $pattern = null);
++
++    abstract protected function getIntlErrorMessage(): string;
++
++    abstract protected function getIntlErrorCode(): int;
++
++    /**
++     * @param int $errorCode
++     */
++    abstract protected function isIntlFailure($errorCode): bool;
++}
+diff --git a/tests/Intl/Icu/AbstractLocaleTest.php b/tests/Intl/Icu/AbstractLocaleTest.php
+deleted file mode 100644
+index 20dde71..0000000
+--- a/tests/Intl/Icu/AbstractLocaleTest.php
++++ /dev/null
+@@ -1,31 +0,0 @@
+-<?php
+-
+-/*
+- * This file is part of the Symfony package.
+- *
+- * (c) Fabien Potencier <fabien@symfony.com>
+- *
+- * For the full copyright and license information, please view the LICENSE
+- * file that was distributed with this source code.
+- */
+-
+-namespace Symfony\Polyfill\Tests\Intl\Icu;
+-
+-use PHPUnit\Framework\TestCase;
+-
+-/**
+- * Test case for Locale implementations.
+- *
+- * @author Bernhard Schussek <bschussek@gmail.com>
+- */
+-abstract class AbstractLocaleTest extends TestCase
+-{
+-    public function testSetDefault()
+-    {
+-        $this->call('setDefault', 'en_GB');
+-
+-        $this->assertSame('en_GB', $this->call('getDefault'));
+-    }
+-
+-    abstract protected function call($methodName);
+-}
+diff --git a/tests/Intl/Icu/AbstractLocaleTestCase.php b/tests/Intl/Icu/AbstractLocaleTestCase.php
+new file mode 100644
+index 0000000..4ec15e2
+--- /dev/null
++++ b/tests/Intl/Icu/AbstractLocaleTestCase.php
+@@ -0,0 +1,31 @@
++<?php
++
++/*
++ * This file is part of the Symfony package.
++ *
++ * (c) Fabien Potencier <fabien@symfony.com>
++ *
++ * For the full copyright and license information, please view the LICENSE
++ * file that was distributed with this source code.
++ */
++
++namespace Symfony\Polyfill\Tests\Intl\Icu;
++
++use PHPUnit\Framework\TestCase;
++
++/**
++ * Test case for Locale implementations.
++ *
++ * @author Bernhard Schussek <bschussek@gmail.com>
++ */
++abstract class AbstractLocaleTestCase extends TestCase
++{
++    public function testSetDefault()
++    {
++        $this->call('setDefault', 'en_GB');
++
++        $this->assertSame('en_GB', $this->call('getDefault'));
++    }
++
++    abstract protected function call($methodName);
++}
+diff --git a/tests/Intl/Icu/AbstractNumberFormatterTest.php b/tests/Intl/Icu/AbstractNumberFormatterTest.php
+deleted file mode 100644
+index e5f4707..0000000
+--- a/tests/Intl/Icu/AbstractNumberFormatterTest.php
++++ /dev/null
+@@ -1,899 +0,0 @@
+-<?php
+-
+-/*
+- * This file is part of the Symfony package.
+- *
+- * (c) Fabien Potencier <fabien@symfony.com>
+- *
+- * For the full copyright and license information, please view the LICENSE
+- * file that was distributed with this source code.
+- */
+-
+-namespace Symfony\Polyfill\Tests\Intl\Icu;
+-
+-use PHPUnit\Framework\Error\Warning;
+-use PHPUnit\Framework\TestCase;
+-use Symfony\Polyfill\Intl\Icu\Icu;
+-use Symfony\Polyfill\Intl\Icu\NumberFormatter;
+-
+-/**
+- * Note that there are some values written like -2147483647 - 1. This is the lower 32bit int max and is a known
+- * behavior of PHP.
+- */
+-abstract class AbstractNumberFormatterTest extends TestCase
+-{
+-    protected function setUp(): void
+-    {
+-        \Locale::setDefault('en');
+-    }
+-
+-    /**
+-     * @dataProvider formatCurrencyWithDecimalStyleProvider
+-     */
+-    public function testFormatCurrencyWithDecimalStyle($value, $currency, $expected)
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $this->assertEquals($expected, $formatter->formatCurrency($value, $currency));
+-    }
+-
+-    public static function formatCurrencyWithDecimalStyleProvider()
+-    {
+-        return [
+-            [100, 'ALL', '100'],
+-            [100, 'BRL', '100'],
+-            [100, 'CRC', '100'],
+-            [100, 'JPY', '100'],
+-            [100, 'CHF', '100'],
+-            [-100, 'ALL', '-100'],
+-            [-100, 'BRL', '-100'],
+-            [-100, 'CRC', '-100'],
+-            [-100, 'JPY', '-100'],
+-            [-100, 'CHF', '-100'],
+-            [1000.12, 'ALL', '1,000.12'],
+-            [1000.12, 'BRL', '1,000.12'],
+-            [1000.12, 'CRC', '1,000.12'],
+-            [1000.12, 'JPY', '1,000.12'],
+-            [1000.12, 'CHF', '1,000.12'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatCurrencyWithCurrencyStyleProvider
+-     */
+-    public function testFormatCurrencyWithCurrencyStyle($value, $currency, $expected)
+-    {
+-        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
+-            $this->markTestSkipped('ICU version 63.1 is required.');
+-        }
+-
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
+-        $this->assertEquals($expected, $formatter->formatCurrency($value, $currency));
+-    }
+-
+-    public static function formatCurrencyWithCurrencyStyleProvider()
+-    {
+-        return [
+-            [100, 'ALL', "ALL\xc2\xa0100"],
+-            [-100, 'ALL', "-ALL\xc2\xa0100"],
+-            [1000.12, 'ALL', "ALL\xc2\xa01,000"],
+-
+-            [100, 'JPY', '¥100'],
+-            [-100, 'JPY', '-¥100'],
+-            [1000.12, 'JPY', '¥1,000'],
+-
+-            [100, 'EUR', '€100.00'],
+-            [-100, 'EUR', '-€100.00'],
+-            [1000.12, 'EUR', '€1,000.12'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatCurrencyWithCurrencyStyleCostaRicanColonsRoundingProvider
+-     */
+-    public function testFormatCurrencyWithCurrencyStyleCostaRicanColonsRounding($value, $currency, $symbol, $expected)
+-    {
+-        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
+-            $this->markTestSkipped('ICU version 63.1 is required.');
+-        }
+-
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
+-        $this->assertEquals(sprintf($expected, $symbol), $formatter->formatCurrency($value, $currency));
+-    }
+-
+-    public static function formatCurrencyWithCurrencyStyleCostaRicanColonsRoundingProvider()
+-    {
+-        return [
+-            [100, 'CRC', 'CRC', "%s\xc2\xa0100.00"],
+-            [-100, 'CRC', 'CRC', "-%s\xc2\xa0100.00"],
+-            [1000.12, 'CRC', 'CRC', "%s\xc2\xa01,000.12"],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatCurrencyWithCurrencyStyleBrazilianRealRoundingProvider
+-     */
+-    public function testFormatCurrencyWithCurrencyStyleBrazilianRealRounding($value, $currency, $symbol, $expected)
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
+-        $this->assertEquals(sprintf($expected, $symbol), $formatter->formatCurrency($value, $currency));
+-    }
+-
+-    public static function formatCurrencyWithCurrencyStyleBrazilianRealRoundingProvider()
+-    {
+-        return [
+-            [100, 'BRL', 'R', '%s$100.00'],
+-            [-100, 'BRL', 'R', '-%s$100.00'],
+-            [1000.12, 'BRL', 'R', '%s$1,000.12'],
+-
+-            // Rounding checks
+-            [1000.121, 'BRL', 'R', '%s$1,000.12'],
+-            [1000.123, 'BRL', 'R', '%s$1,000.12'],
+-            [1000.125, 'BRL', 'R', '%s$1,000.12'],
+-            [1000.127, 'BRL', 'R', '%s$1,000.13'],
+-            [1000.129, 'BRL', 'R', '%s$1,000.13'],
+-            [11.50999, 'BRL', 'R', '%s$11.51'],
+-            [11.9999464, 'BRL', 'R', '%s$12.00'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatCurrencyWithCurrencyStyleSwissRoundingProvider
+-     */
+-    public function testFormatCurrencyWithCurrencyStyleSwissRounding($value, $currency, $symbol, $expected)
+-    {
+-        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '62.1', '<')) {
+-            $this->markTestSkipped('ICU version 62.1 is required.');
+-        }
+-
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
+-        $this->assertEquals(sprintf($expected, $symbol), $formatter->formatCurrency($value, $currency));
+-    }
+-
+-    public static function formatCurrencyWithCurrencyStyleSwissRoundingProvider()
+-    {
+-        return [
+-            [100, 'CHF', 'CHF', "%s\xc2\xa0100.00"],
+-            [-100, 'CHF', 'CHF', "-%s\xc2\xa0100.00"],
+-            [1000.12, 'CHF', 'CHF', "%s\xc2\xa01,000.12"],
+-            ['1000.12', 'CHF', 'CHF', "%s\xc2\xa01,000.12"],
+-
+-            // Rounding checks
+-            [1000.121, 'CHF', 'CHF', "%s\xc2\xa01,000.12"],
+-            [1000.123, 'CHF', 'CHF', "%s\xc2\xa01,000.12"],
+-            [1000.125, 'CHF', 'CHF', "%s\xc2\xa01,000.12"],
+-            [1000.127, 'CHF', 'CHF', "%s\xc2\xa01,000.13"],
+-            [1000.129, 'CHF', 'CHF', "%s\xc2\xa01,000.13"],
+-
+-            [1200000.00, 'CHF', 'CHF', "%s\xc2\xa01,200,000.00"],
+-            [1200000.1, 'CHF', 'CHF', "%s\xc2\xa01,200,000.10"],
+-            [1200000.10, 'CHF', 'CHF', "%s\xc2\xa01,200,000.10"],
+-            [1200000.101, 'CHF', 'CHF', "%s\xc2\xa01,200,000.10"],
+-        ];
+-    }
+-
+-    public function testFormat()
+-    {
+-        $errorCode = Icu::U_ZERO_ERROR;
+-        $errorMessage = 'U_ZERO_ERROR';
+-
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $this->assertSame('9.555', $formatter->format(9.555));
+-
+-        $this->assertSame($errorMessage, static::getIntlErrorMessage());
+-        $this->assertSame($errorCode, static::getIntlErrorCode());
+-        $this->assertFalse(static::isIntlFailure(static::getIntlErrorCode()));
+-        $this->assertSame($errorMessage, $formatter->getErrorMessage());
+-        $this->assertSame($errorCode, $formatter->getErrorCode());
+-        $this->assertFalse(static::isIntlFailure($formatter->getErrorCode()));
+-    }
+-
+-    public function testFormatWithCurrencyStyle()
+-    {
+-        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
+-            $this->markTestSkipped('ICU version 63.1 is required.');
+-        }
+-
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
+-        $this->assertEquals('¤1.00', $formatter->format(1));
+-    }
+-
+-    /**
+-     * @dataProvider formatTypeInt32Provider
+-     */
+-    public function testFormatTypeInt32($formatter, $value, $expected, $message = '')
+-    {
+-        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_INT32);
+-        $this->assertEquals($expected, $formattedValue, $message);
+-    }
+-
+-    public static function formatTypeInt32Provider()
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-
+-        $message = '->format() TYPE_INT32 formats inconsistently an integer if out of the 32 bit range.';
+-
+-        return [
+-            [$formatter, 1, '1'],
+-            [$formatter, 1.1, '1'],
+-            [$formatter, 2147483648, '-2,147,483,648', $message],
+-            [$formatter, -2147483649, '2,147,483,647', $message],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatTypeInt32WithCurrencyStyleProvider
+-     */
+-    public function testFormatTypeInt32WithCurrencyStyle($formatter, $value, $expected, $message = '')
+-    {
+-        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
+-            $this->markTestSkipped('ICU version 63.1 is required.');
+-        }
+-
+-        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_INT32);
+-        $this->assertEquals($expected, $formattedValue, $message);
+-    }
+-
+-    public static function formatTypeInt32WithCurrencyStyleProvider()
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
+-
+-        $message = '->format() TYPE_INT32 formats inconsistently an integer if out of the 32 bit range.';
+-
+-        return [
+-            [$formatter, 1, '¤1.00'],
+-            [$formatter, 1.1, '¤1.00'],
+-            [$formatter, 2147483648, '-¤2,147,483,648.00', $message],
+-            [$formatter, -2147483649, '¤2,147,483,647.00', $message],
+-        ];
+-    }
+-
+-    /**
+-     * The parse() method works differently with integer out of the 32 bit range. format() works fine.
+-     *
+-     * @dataProvider formatTypeInt64Provider
+-     */
+-    public function testFormatTypeInt64($formatter, $value, $expected)
+-    {
+-        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_INT64);
+-        $this->assertEquals($expected, $formattedValue);
+-    }
+-
+-    public static function formatTypeInt64Provider()
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-
+-        return [
+-            [$formatter, 1, '1'],
+-            [$formatter, 1.1, '1'],
+-            [$formatter, 2147483648, '2,147,483,648'],
+-            [$formatter, -2147483649, '-2,147,483,649'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatTypeInt64WithCurrencyStyleProvider
+-     */
+-    public function testFormatTypeInt64WithCurrencyStyle($formatter, $value, $expected)
+-    {
+-        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
+-            $this->markTestSkipped('ICU version 63.1 is required.');
+-        }
+-
+-        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_INT64);
+-        $this->assertEquals($expected, $formattedValue);
+-    }
+-
+-    public static function formatTypeInt64WithCurrencyStyleProvider()
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
+-
+-        return [
+-            [$formatter, 1, '¤1.00'],
+-            [$formatter, 1.1, '¤1.00'],
+-            [$formatter, 2147483648, '¤2,147,483,648.00'],
+-            [$formatter, -2147483649, '-¤2,147,483,649.00'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatTypeDoubleProvider
+-     */
+-    public function testFormatTypeDouble($formatter, $value, $expected)
+-    {
+-        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_DOUBLE);
+-        $this->assertEquals($expected, $formattedValue);
+-    }
+-
+-    public static function formatTypeDoubleProvider()
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-
+-        return [
+-            [$formatter, 1, '1'],
+-            [$formatter, 1.1, '1.1'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatTypeDoubleWithCurrencyStyleProvider
+-     */
+-    public function testFormatTypeDoubleWithCurrencyStyle($formatter, $value, $expected)
+-    {
+-        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
+-            $this->markTestSkipped('ICU version 63.1 is required.');
+-        }
+-
+-        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_DOUBLE);
+-        $this->assertEquals($expected, $formattedValue);
+-    }
+-
+-    public static function formatTypeDoubleWithCurrencyStyleProvider()
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
+-
+-        return [
+-            [$formatter, 1, '¤1.00'],
+-            [$formatter, 1.1, '¤1.10'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatTypeCurrencyProvider
+-     */
+-    public function testFormatTypeCurrency($formatter, $value)
+-    {
+-        if (\PHP_VERSION_ID >= 80000) {
+-            $this->expectException(\ValueError::class);
+-        } elseif (method_exists($this, 'expectWarning')) {
+-            $this->expectWarning();
+-        } else {
+-            $this->expectException(Warning::class);
+-        }
+-
+-        $formatter->format($value, NumberFormatter::TYPE_CURRENCY);
+-    }
+-
+-    /**
+-     * @dataProvider formatTypeCurrencyProvider
+-     */
+-    public function testFormatTypeCurrencyReturn($formatter, $value)
+-    {
+-        if (\PHP_VERSION_ID >= 80000) {
+-            $this->expectException(\ValueError::class);
+-        }
+-
+-        $this->assertFalse(@$formatter->format($value, NumberFormatter::TYPE_CURRENCY));
+-    }
+-
+-    public static function formatTypeCurrencyProvider()
+-    {
+-        $df = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $cf = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
+-
+-        return [
+-            [$df, 1],
+-            [$cf, 1],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatFractionDigitsProvider
+-     */
+-    public function testFormatFractionDigits($value, $expected, $fractionDigits = null, $expectedFractionDigits = 1)
+-    {
+-        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '62.1', '<')) {
+-            $this->markTestSkipped('ICU version 62.1 is required.');
+-        }
+-
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-
+-        $attributeRet = null;
+-        if (null !== $fractionDigits) {
+-            $attributeRet = $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, $fractionDigits);
+-        }
+-
+-        $formattedValue = $formatter->format($value);
+-        $this->assertSame($expected, $formattedValue);
+-        $this->assertSame($expectedFractionDigits, $formatter->getAttribute(NumberFormatter::FRACTION_DIGITS));
+-
+-        if (null !== $attributeRet) {
+-            $this->assertTrue($attributeRet);
+-        }
+-    }
+-
+-    public static function formatFractionDigitsProvider()
+-    {
+-        yield [1.123, '1.123', null, 0];
+-        yield [1.123, '1', 0, 0];
+-        yield [1.123, '1.1', 1, 1];
+-        yield [1.123, '1.12', 2, 2];
+-        yield [1.123, '1.123', -1, 0];
+-    }
+-
+-    /**
+-     * @dataProvider formatGroupingUsedProvider
+-     */
+-    public function testFormatGroupingUsed($value, $expected, $groupingUsed = null, $expectedGroupingUsed = 1)
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-
+-        $attributeRet = null;
+-        if (null !== $groupingUsed) {
+-            $attributeRet = $formatter->setAttribute(NumberFormatter::GROUPING_USED, $groupingUsed);
+-        }
+-
+-        $formattedValue = $formatter->format($value);
+-        $this->assertSame($expected, $formattedValue);
+-        $this->assertSame($expectedGroupingUsed, $formatter->getAttribute(NumberFormatter::GROUPING_USED));
+-
+-        if (null !== $attributeRet) {
+-            $this->assertTrue($attributeRet);
+-        }
+-    }
+-
+-    public static function formatGroupingUsedProvider()
+-    {
+-        yield [1000, '1,000', null, 1];
+-        yield [1000, '1000', 0, 0];
+-        yield [1000, '1,000', 1, 1];
+-        yield [1000, '1,000', 2, 1];
+-        yield [1000, '1,000', -1, 1];
+-    }
+-
+-    /**
+-     * @dataProvider formatRoundingModeRoundHalfUpProvider
+-     */
+-    public function testFormatRoundingModeHalfUp($value, $expected)
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
+-
+-        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_HALFUP);
+-        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_HALFUP rounding mode.');
+-    }
+-
+-    public static function formatRoundingModeRoundHalfUpProvider()
+-    {
+-        // The commented value is differently rounded by intl's NumberFormatter in 32 and 64 bit architectures
+-        return [
+-            [1.121, '1.12'],
+-            [1.123, '1.12'],
+-            // [1.125, '1.13'],
+-            [1.127, '1.13'],
+-            [1.129, '1.13'],
+-            [1020 / 100, '10.20'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatRoundingModeRoundHalfDownProvider
+-     */
+-    public function testFormatRoundingModeHalfDown($value, $expected)
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
+-
+-        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_HALFDOWN);
+-        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_HALFDOWN rounding mode.');
+-    }
+-
+-    public static function formatRoundingModeRoundHalfDownProvider()
+-    {
+-        return [
+-            [1.121, '1.12'],
+-            [1.123, '1.12'],
+-            [1.125, '1.12'],
+-            [1.127, '1.13'],
+-            [1.129, '1.13'],
+-            [1020 / 100, '10.20'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatRoundingModeRoundHalfEvenProvider
+-     */
+-    public function testFormatRoundingModeHalfEven($value, $expected)
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
+-
+-        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_HALFEVEN);
+-        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_HALFEVEN rounding mode.');
+-    }
+-
+-    public static function formatRoundingModeRoundHalfEvenProvider()
+-    {
+-        return [
+-            [1.121, '1.12'],
+-            [1.123, '1.12'],
+-            [1.125, '1.12'],
+-            [1.127, '1.13'],
+-            [1.129, '1.13'],
+-            [1020 / 100, '10.20'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatRoundingModeRoundCeilingProvider
+-     */
+-    public function testFormatRoundingModeCeiling($value, $expected)
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
+-
+-        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_CEILING);
+-        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_CEILING rounding mode.');
+-    }
+-
+-    public static function formatRoundingModeRoundCeilingProvider()
+-    {
+-        return [
+-            [1.123, '1.13'],
+-            [1.125, '1.13'],
+-            [1.127, '1.13'],
+-            [-1.123, '-1.12'],
+-            [-1.125, '-1.12'],
+-            [-1.127, '-1.12'],
+-            [1020 / 100, '10.20'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatRoundingModeRoundFloorProvider
+-     */
+-    public function testFormatRoundingModeFloor($value, $expected)
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
+-
+-        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_FLOOR);
+-        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_FLOOR rounding mode.');
+-    }
+-
+-    public static function formatRoundingModeRoundFloorProvider()
+-    {
+-        return [
+-            [1.123, '1.12'],
+-            [1.125, '1.12'],
+-            [1.127, '1.12'],
+-            [-1.123, '-1.13'],
+-            [-1.125, '-1.13'],
+-            [-1.127, '-1.13'],
+-            [1020 / 100, '10.20'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatRoundingModeRoundDownProvider
+-     */
+-    public function testFormatRoundingModeDown($value, $expected)
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
+-
+-        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_DOWN);
+-        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_DOWN rounding mode.');
+-    }
+-
+-    public static function formatRoundingModeRoundDownProvider()
+-    {
+-        return [
+-            [1.123, '1.12'],
+-            [1.125, '1.12'],
+-            [1.127, '1.12'],
+-            [-1.123, '-1.12'],
+-            [-1.125, '-1.12'],
+-            [-1.127, '-1.12'],
+-            [1020 / 100, '10.20'],
+-        ];
+-    }
+-
+-    /**
+-     * @dataProvider formatRoundingModeRoundUpProvider
+-     */
+-    public function testFormatRoundingModeUp($value, $expected)
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
+-
+-        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_UP);
+-        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_UP rounding mode.');
+-    }
+-
+-    public static function formatRoundingModeRoundUpProvider()
+-    {
+-        return [
+-            [1.123, '1.13'],
+-            [1.125, '1.13'],
+-            [1.127, '1.13'],
+-            [-1.123, '-1.13'],
+-            [-1.125, '-1.13'],
+-            [-1.127, '-1.13'],
+-            [1020 / 100, '10.20'],
+-        ];
+-    }
+-
+-    public function testGetLocale()
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $this->assertEquals('en', $formatter->getLocale());
+-    }
+-
+-    public function testGetSymbol()
+-    {
+-        $decimalFormatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $currencyFormatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
+-
+-        $r = new \ReflectionProperty('Symfony\Polyfill\Intl\Icu\NumberFormatter', 'enSymbols');
+-        $r->setAccessible(true);
+-        $expected = $r->getValue();
+-
+-        for ($i = 0; $i <= 17; ++$i) {
+-            $this->assertSame($expected[1][$i], $decimalFormatter->getSymbol($i));
+-            $this->assertSame($expected[2][$i], $currencyFormatter->getSymbol($i));
+-        }
+-    }
+-
+-    public function testGetTextAttribute()
+-    {
+-        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
+-            $this->markTestSkipped('ICU version 63.1 is required.');
+-        }
+-
+-        $decimalFormatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $currencyFormatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
+-
+-        $r = new \ReflectionProperty('Symfony\Polyfill\Intl\Icu\NumberFormatter', 'enTextAttributes');
+-        $r->setAccessible(true);
+-        $expected = $r->getValue();
+-
+-        for ($i = 0; $i <= 5; ++$i) {
+-            $this->assertSame($expected[1][$i], $decimalFormatter->getTextAttribute($i));
+-            $this->assertSame($expected[2][$i], $currencyFormatter->getTextAttribute($i));
+-        }
+-    }
+-
+-    /**
+-     * @dataProvider parseProvider
+-     */
+-    public function testParse($value, $expected, $message, $expectedPosition, $groupingUsed = true)
+-    {
+-        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '62.1', '<')) {
+-            $this->markTestSkipped('ICU version 62.1 is required.');
+-        }
+-
+-        $position = 0;
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $formatter->setAttribute(NumberFormatter::GROUPING_USED, $groupingUsed);
+-        $parsedValue = $formatter->parse($value, NumberFormatter::TYPE_DOUBLE, $position);
+-        $this->assertSame($expected, $parsedValue, $message);
+-        $this->assertSame($expectedPosition, $position, $message);
+-
+-        if (false === $expected) {
+-            $errorCode = Icu::U_PARSE_ERROR;
+-            $errorMessage = 'Number parsing failed: U_PARSE_ERROR';
+-        } else {
+-            $errorCode = Icu::U_ZERO_ERROR;
+-            $errorMessage = 'U_ZERO_ERROR';
+-        }
+-
+-        $this->assertSame($errorMessage, static::getIntlErrorMessage());
+-        $this->assertSame($errorCode, static::getIntlErrorCode());
+-        $this->assertSame(0 !== $errorCode, static::isIntlFailure(static::getIntlErrorCode()));
+-        $this->assertSame($errorMessage, $formatter->getErrorMessage());
+-        $this->assertSame($errorCode, $formatter->getErrorCode());
+-        $this->assertSame(0 !== $errorCode, static::isIntlFailure($formatter->getErrorCode()));
+-    }
+-
+-    public static function parseProvider()
+-    {
+-        return [
+-            ['prefix1', false, '->parse() does not parse a number with a string prefix.', 0],
+-            ['prefix1', false, '->parse() does not parse a number with a string prefix.', 0, false],
+-            ['1.4suffix', (float) 1.4, '->parse() parses a number with a string suffix.', 3],
+-            ['1.4suffix', (float) 1.4, '->parse() parses a number with a string suffix.', 3, false],
+-            ['1,234.4suffix', 1234.4, '->parse() parses a number with a string suffix.', 7],
+-            ['1,234.4suffix', 1.0, '->parse() parses a number with a string suffix.', 1, false],
+-            ['-.4suffix', (float) -0.4, '->parse() parses a negative dot float with suffix.', 3],
+-            ['-.4suffix', (float) -0.4, '->parse() parses a negative dot float with suffix.', 3, false],
+-            [',4', false, '->parse() does not parse when invalid grouping used.', 0],
+-            [',4', false, '->parse() does not parse when invalid grouping used.', 0, false],
+-            ['123,4', false, '->parse() does not parse when invalid grouping used.', 0],
+-            ['123,4', 123.0, '->parse() truncates invalid grouping when grouping is disabled.', 3, false],
+-            ['123,a4', 123.0, '->parse() truncates a string suffix.', 3],
+-            ['123,a4', 123.0, '->parse() truncates a string suffix.', 3, false],
+-            ['-123,4', false, '->parse() does not parse when invalid grouping used.', 1],
+-            ['-123,4', -123.0, '->parse() truncates invalid grouping when grouping is disabled.', 4, false],
+-            ['-123,4567', false, '->parse() does not parse when invalid grouping used.', 1],
+-            ['-123,4567', -123.0, '->parse() truncates invalid grouping when grouping is disabled.', 4, false],
+-            ['-123,456,789', -123456789.0, '->parse() parses a number with grouping.', 12],
+-            ['-123,456,789', -123.0, '->parse() truncates a group if grouping is disabled.', 4, false],
+-            ['-123,456,789.66', -123456789.66, '->parse() parses a number with grouping.', 15],
+-            ['-123,456,789.66', -123.00, '->parse() truncates a group if grouping is disabled.', 4, false],
+-            ['-123,456789.66', false, '->parse() does not parse when invalid grouping used.', 1],
+-            ['-123,456789.66', -123.00, '->parse() truncates a group if grouping is disabled.', 4, false],
+-            ['-123456,789.66', false, '->parse() does not parse when invalid grouping used.', 1],
+-            ['-123456,789.66', -123456.00, '->parse() truncates a group if grouping is disabled.', 7, false],
+-            ['-123,456,78', false, '->parse() does not parse when invalid grouping used.', 1],
+-            ['-123,456,78', -123.0, '->parse() truncates a group if grouping is disabled.', 4, false],
+-            ['-123,45,789', false, '->parse() does not parse when invalid grouping used.', 1],
+-            ['-123,45,789', -123.0, '->parse() truncates a group if grouping is disabled.', 4, false],
+-            ['-123,,456', -123.0, '->parse() parses when grouping is duplicated.', 4],
+-            ['-123,,456', -123.0, '->parse() parses when grouping is disabled.', 4, false],
+-            ['-123,,4', -123.0, '->parse() parses when grouping is duplicated.', 4],
+-            ['-123,,4', -123.0, '->parse() parses when grouping is duplicated.', 4, false],
+-            ['239.', 239.0, '->parse() parses when string ends with decimal separator.', 4],
+-            ['239.', 239.0, '->parse() parses when string ends with decimal separator.', 4, false],
+-        ];
+-    }
+-
+-    public function testParseTypeDefault()
+-    {
+-        if (\PHP_VERSION_ID >= 80000) {
+-            $this->expectException(\ValueError::class);
+-        } elseif (method_exists($this, 'expectWarning')) {
+-            $this->expectWarning();
+-        } else {
+-            $this->expectException(Warning::class);
+-        }
+-
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $formatter->parse('1', NumberFormatter::TYPE_DEFAULT);
+-    }
+-
+-    /**
+-     * @dataProvider parseTypeInt32Provider
+-     */
+-    public function testParseTypeInt32($value, $expected, $message = '')
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $parsedValue = $formatter->parse($value, NumberFormatter::TYPE_INT32);
+-        $this->assertSame($expected, $parsedValue, $message);
+-    }
+-
+-    public static function parseTypeInt32Provider()
+-    {
+-        return [
+-            ['1', 1],
+-            ['1.1', 1],
+-            ['.1', 0],
+-            ['2,147,483,647', 2147483647],
+-            ['-2,147,483,648', -2147483647 - 1],
+-            ['2,147,483,648', false, '->parse() TYPE_INT32 returns false when the number is greater than the integer positive range.'],
+-            ['-2,147,483,649', false, '->parse() TYPE_INT32 returns false when the number is greater than the integer negative range.'],
+-        ];
+-    }
+-
+-    public function testParseTypeInt64With32BitIntegerInPhp32Bit()
+-    {
+-        if (4 !== \PHP_INT_SIZE) {
+-            $this->markTestSkipped('PHP 32 bit is required.');
+-        }
+-
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-
+-        $parsedValue = $formatter->parse('2,147,483,647', NumberFormatter::TYPE_INT64);
+-        $this->assertIsInt($parsedValue);
+-        $this->assertEquals(2147483647, $parsedValue);
+-
+-        $parsedValue = $formatter->parse('-2,147,483,648', NumberFormatter::TYPE_INT64);
+-        $this->assertIsInt($parsedValue);
+-        $this->assertEquals(-2147483648, $parsedValue);
+-    }
+-
+-    public function testParseTypeInt64With32BitIntegerInPhp64Bit()
+-    {
+-        if (8 !== \PHP_INT_SIZE) {
+-            $this->markTestSkipped('PHP 64 bit is required.');
+-        }
+-
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-
+-        $parsedValue = $formatter->parse('2,147,483,647', NumberFormatter::TYPE_INT64);
+-        $this->assertIsInt($parsedValue);
+-        $this->assertEquals(2147483647, $parsedValue);
+-
+-        $parsedValue = $formatter->parse('-2,147,483,648', NumberFormatter::TYPE_INT64);
+-        $this->assertIsInt($parsedValue);
+-        $this->assertEquals(-2147483647 - 1, $parsedValue);
+-    }
+-
+-    /**
+-     * If PHP is compiled in 32bit mode, the returned value for a 64bit integer are float numbers.
+-     */
+-    public function testParseTypeInt64With64BitIntegerInPhp32Bit()
+-    {
+-        if (4 !== \PHP_INT_SIZE) {
+-            $this->markTestSkipped('PHP 32 bit is required.');
+-        }
+-
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-
+-        // int 64 using only 32 bit range strangeness
+-        $parsedValue = $formatter->parse('2,147,483,648', NumberFormatter::TYPE_INT64);
+-        $this->assertIsFloat($parsedValue);
+-        $this->assertEquals(2147483648, $parsedValue, '->parse() TYPE_INT64 does not use true 64 bit integers, using only the 32 bit range.');
+-
+-        $parsedValue = $formatter->parse('-2,147,483,649', NumberFormatter::TYPE_INT64);
+-        $this->assertIsFloat($parsedValue);
+-        $this->assertEquals(-2147483649, $parsedValue, '->parse() TYPE_INT64 does not use true 64 bit integers, using only the 32 bit range.');
+-    }
+-
+-    /**
+-     * If PHP is compiled in 64bit mode, the returned value for a 64bit integer are 32bit integer numbers.
+-     */
+-    public function testParseTypeInt64With64BitIntegerInPhp64Bit()
+-    {
+-        if (8 !== \PHP_INT_SIZE) {
+-            $this->markTestSkipped('PHP 64 bit is required.');
+-        }
+-
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-
+-        $parsedValue = $formatter->parse('2,147,483,648', NumberFormatter::TYPE_INT64);
+-        $this->assertIsInt($parsedValue);
+-
+-        $this->assertEquals(2147483648, $parsedValue, '->parse() TYPE_INT64 uses true 64 bit integers (PHP >= 5.3.14 and PHP >= 5.4.4).');
+-
+-        $parsedValue = $formatter->parse('-2,147,483,649', NumberFormatter::TYPE_INT64);
+-        $this->assertIsInt($parsedValue);
+-
+-        $this->assertEquals(-2147483649, $parsedValue, '->parse() TYPE_INT64 uses true 64 bit integers (PHP >= 5.3.14 and PHP >= 5.4.4).');
+-    }
+-
+-    /**
+-     * @dataProvider parseTypeDoubleProvider
+-     */
+-    public function testParseTypeDouble($value, $expectedValue)
+-    {
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $parsedValue = $formatter->parse($value, NumberFormatter::TYPE_DOUBLE);
+-        $this->assertEqualsWithDelta($expectedValue, $parsedValue, 0.001);
+-    }
+-
+-    public static function parseTypeDoubleProvider()
+-    {
+-        return [
+-            ['1', (float) 1],
+-            ['1.1', 1.1],
+-            ['9,223,372,036,854,775,808', 9223372036854775808],
+-            ['-9,223,372,036,854,775,809', -9223372036854775809],
+-        ];
+-    }
+-
+-    public function testParseTypeCurrency()
+-    {
+-        if (\PHP_VERSION_ID >= 80000) {
+-            $this->expectException(\ValueError::class);
+-        } elseif (method_exists($this, 'expectWarning')) {
+-            $this->expectWarning();
+-        } else {
+-            $this->expectException(Warning::class);
+-        }
+-
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $formatter->parse('1', NumberFormatter::TYPE_CURRENCY);
+-    }
+-
+-    public function testParseWithNotNullPositionValue()
+-    {
+-        $position = 1;
+-        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+-        $formatter->parse('123', NumberFormatter::TYPE_DOUBLE, $position);
+-        $this->assertEquals(3, $position);
+-    }
+-
+-    /**
+-     * @return NumberFormatter|\NumberFormatter
+-     */
+-    abstract protected static function getNumberFormatter(string $locale = 'en', ?string $style = null, ?string $pattern = null);
+-
+-    abstract protected static function getIntlErrorMessage(): string;
+-
+-    abstract protected static function getIntlErrorCode(): int;
+-
+-    /**
+-     * @param int $errorCode
+-     */
+-    abstract protected static function isIntlFailure($errorCode): bool;
+-}
+diff --git a/tests/Intl/Icu/AbstractNumberFormatterTestCase.php b/tests/Intl/Icu/AbstractNumberFormatterTestCase.php
+new file mode 100644
+index 0000000..8dbc41c
+--- /dev/null
++++ b/tests/Intl/Icu/AbstractNumberFormatterTestCase.php
+@@ -0,0 +1,899 @@
++<?php
++
++/*
++ * This file is part of the Symfony package.
++ *
++ * (c) Fabien Potencier <fabien@symfony.com>
++ *
++ * For the full copyright and license information, please view the LICENSE
++ * file that was distributed with this source code.
++ */
++
++namespace Symfony\Polyfill\Tests\Intl\Icu;
++
++use PHPUnit\Framework\Error\Warning;
++use PHPUnit\Framework\TestCase;
++use Symfony\Polyfill\Intl\Icu\Icu;
++use Symfony\Polyfill\Intl\Icu\NumberFormatter;
++
++/**
++ * Note that there are some values written like -2147483647 - 1. This is the lower 32bit int max and is a known
++ * behavior of PHP.
++ */
++abstract class AbstractNumberFormatterTestCase extends TestCase
++{
++    protected function setUp(): void
++    {
++        \Locale::setDefault('en');
++    }
++
++    /**
++     * @dataProvider formatCurrencyWithDecimalStyleProvider
++     */
++    public function testFormatCurrencyWithDecimalStyle($value, $currency, $expected)
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $this->assertEquals($expected, $formatter->formatCurrency($value, $currency));
++    }
++
++    public static function formatCurrencyWithDecimalStyleProvider()
++    {
++        return [
++            [100, 'ALL', '100'],
++            [100, 'BRL', '100'],
++            [100, 'CRC', '100'],
++            [100, 'JPY', '100'],
++            [100, 'CHF', '100'],
++            [-100, 'ALL', '-100'],
++            [-100, 'BRL', '-100'],
++            [-100, 'CRC', '-100'],
++            [-100, 'JPY', '-100'],
++            [-100, 'CHF', '-100'],
++            [1000.12, 'ALL', '1,000.12'],
++            [1000.12, 'BRL', '1,000.12'],
++            [1000.12, 'CRC', '1,000.12'],
++            [1000.12, 'JPY', '1,000.12'],
++            [1000.12, 'CHF', '1,000.12'],
++        ];
++    }
++
++    /**
++     * @dataProvider formatCurrencyWithCurrencyStyleProvider
++     */
++    public function testFormatCurrencyWithCurrencyStyle($value, $currency, $expected)
++    {
++        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
++            $this->markTestSkipped('ICU version 63.1 is required.');
++        }
++
++        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
++        $this->assertEquals($expected, $formatter->formatCurrency($value, $currency));
++    }
++
++    public static function formatCurrencyWithCurrencyStyleProvider()
++    {
++        return [
++            [100, 'ALL', "ALL\xc2\xa0100"],
++            [-100, 'ALL', "-ALL\xc2\xa0100"],
++            [1000.12, 'ALL', "ALL\xc2\xa01,000"],
++
++            [100, 'JPY', '¥100'],
++            [-100, 'JPY', '-¥100'],
++            [1000.12, 'JPY', '¥1,000'],
++
++            [100, 'EUR', '€100.00'],
++            [-100, 'EUR', '-€100.00'],
++            [1000.12, 'EUR', '€1,000.12'],
++        ];
++    }
++
++    /**
++     * @dataProvider formatCurrencyWithCurrencyStyleCostaRicanColonsRoundingProvider
++     */
++    public function testFormatCurrencyWithCurrencyStyleCostaRicanColonsRounding($value, $currency, $symbol, $expected)
++    {
++        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
++            $this->markTestSkipped('ICU version 63.1 is required.');
++        }
++
++        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
++        $this->assertEquals(sprintf($expected, $symbol), $formatter->formatCurrency($value, $currency));
++    }
++
++    public static function formatCurrencyWithCurrencyStyleCostaRicanColonsRoundingProvider()
++    {
++        return [
++            [100, 'CRC', 'CRC', "%s\xc2\xa0100.00"],
++            [-100, 'CRC', 'CRC', "-%s\xc2\xa0100.00"],
++            [1000.12, 'CRC', 'CRC', "%s\xc2\xa01,000.12"],
++        ];
++    }
++
++    /**
++     * @dataProvider formatCurrencyWithCurrencyStyleBrazilianRealRoundingProvider
++     */
++    public function testFormatCurrencyWithCurrencyStyleBrazilianRealRounding($value, $currency, $symbol, $expected)
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
++        $this->assertEquals(sprintf($expected, $symbol), $formatter->formatCurrency($value, $currency));
++    }
++
++    public static function formatCurrencyWithCurrencyStyleBrazilianRealRoundingProvider()
++    {
++        return [
++            [100, 'BRL', 'R', '%s$100.00'],
++            [-100, 'BRL', 'R', '-%s$100.00'],
++            [1000.12, 'BRL', 'R', '%s$1,000.12'],
++
++            // Rounding checks
++            [1000.121, 'BRL', 'R', '%s$1,000.12'],
++            [1000.123, 'BRL', 'R', '%s$1,000.12'],
++            [1000.125, 'BRL', 'R', '%s$1,000.12'],
++            [1000.127, 'BRL', 'R', '%s$1,000.13'],
++            [1000.129, 'BRL', 'R', '%s$1,000.13'],
++            [11.50999, 'BRL', 'R', '%s$11.51'],
++            [11.9999464, 'BRL', 'R', '%s$12.00'],
++        ];
++    }
++
++    /**
++     * @dataProvider formatCurrencyWithCurrencyStyleSwissRoundingProvider
++     */
++    public function testFormatCurrencyWithCurrencyStyleSwissRounding($value, $currency, $symbol, $expected)
++    {
++        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '62.1', '<')) {
++            $this->markTestSkipped('ICU version 62.1 is required.');
++        }
++
++        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
++        $this->assertEquals(sprintf($expected, $symbol), $formatter->formatCurrency($value, $currency));
++    }
++
++    public static function formatCurrencyWithCurrencyStyleSwissRoundingProvider()
++    {
++        return [
++            [100, 'CHF', 'CHF', "%s\xc2\xa0100.00"],
++            [-100, 'CHF', 'CHF', "-%s\xc2\xa0100.00"],
++            [1000.12, 'CHF', 'CHF', "%s\xc2\xa01,000.12"],
++            ['1000.12', 'CHF', 'CHF', "%s\xc2\xa01,000.12"],
++
++            // Rounding checks
++            [1000.121, 'CHF', 'CHF', "%s\xc2\xa01,000.12"],
++            [1000.123, 'CHF', 'CHF', "%s\xc2\xa01,000.12"],
++            [1000.125, 'CHF', 'CHF', "%s\xc2\xa01,000.12"],
++            [1000.127, 'CHF', 'CHF', "%s\xc2\xa01,000.13"],
++            [1000.129, 'CHF', 'CHF', "%s\xc2\xa01,000.13"],
++
++            [1200000.00, 'CHF', 'CHF', "%s\xc2\xa01,200,000.00"],
++            [1200000.1, 'CHF', 'CHF', "%s\xc2\xa01,200,000.10"],
++            [1200000.10, 'CHF', 'CHF', "%s\xc2\xa01,200,000.10"],
++            [1200000.101, 'CHF', 'CHF', "%s\xc2\xa01,200,000.10"],
++        ];
++    }
++
++    public function testFormat()
++    {
++        $errorCode = Icu::U_ZERO_ERROR;
++        $errorMessage = 'U_ZERO_ERROR';
++
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $this->assertSame('9.555', $formatter->format(9.555));
++
++        $this->assertSame($errorMessage, static::getIntlErrorMessage());
++        $this->assertSame($errorCode, static::getIntlErrorCode());
++        $this->assertFalse(static::isIntlFailure(static::getIntlErrorCode()));
++        $this->assertSame($errorMessage, $formatter->getErrorMessage());
++        $this->assertSame($errorCode, $formatter->getErrorCode());
++        $this->assertFalse(static::isIntlFailure($formatter->getErrorCode()));
++    }
++
++    public function testFormatWithCurrencyStyle()
++    {
++        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
++            $this->markTestSkipped('ICU version 63.1 is required.');
++        }
++
++        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
++        $this->assertEquals('¤1.00', $formatter->format(1));
++    }
++
++    /**
++     * @dataProvider formatTypeInt32Provider
++     */
++    public function testFormatTypeInt32($formatter, $value, $expected, $message = '')
++    {
++        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_INT32);
++        $this->assertEquals($expected, $formattedValue, $message);
++    }
++
++    public static function formatTypeInt32Provider()
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++
++        $message = '->format() TYPE_INT32 formats inconsistently an integer if out of the 32 bit range.';
++
++        return [
++            [$formatter, 1, '1'],
++            [$formatter, 1.1, '1'],
++            [$formatter, 2147483648, '-2,147,483,648', $message],
++            [$formatter, -2147483649, '2,147,483,647', $message],
++        ];
++    }
++
++    /**
++     * @dataProvider formatTypeInt32WithCurrencyStyleProvider
++     */
++    public function testFormatTypeInt32WithCurrencyStyle($formatter, $value, $expected, $message = '')
++    {
++        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
++            $this->markTestSkipped('ICU version 63.1 is required.');
++        }
++
++        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_INT32);
++        $this->assertEquals($expected, $formattedValue, $message);
++    }
++
++    public static function formatTypeInt32WithCurrencyStyleProvider()
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
++
++        $message = '->format() TYPE_INT32 formats inconsistently an integer if out of the 32 bit range.';
++
++        return [
++            [$formatter, 1, '¤1.00'],
++            [$formatter, 1.1, '¤1.00'],
++            [$formatter, 2147483648, '-¤2,147,483,648.00', $message],
++            [$formatter, -2147483649, '¤2,147,483,647.00', $message],
++        ];
++    }
++
++    /**
++     * The parse() method works differently with integer out of the 32 bit range. format() works fine.
++     *
++     * @dataProvider formatTypeInt64Provider
++     */
++    public function testFormatTypeInt64($formatter, $value, $expected)
++    {
++        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_INT64);
++        $this->assertEquals($expected, $formattedValue);
++    }
++
++    public static function formatTypeInt64Provider()
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++
++        return [
++            [$formatter, 1, '1'],
++            [$formatter, 1.1, '1'],
++            [$formatter, 2147483648, '2,147,483,648'],
++            [$formatter, -2147483649, '-2,147,483,649'],
++        ];
++    }
++
++    /**
++     * @dataProvider formatTypeInt64WithCurrencyStyleProvider
++     */
++    public function testFormatTypeInt64WithCurrencyStyle($formatter, $value, $expected)
++    {
++        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
++            $this->markTestSkipped('ICU version 63.1 is required.');
++        }
++
++        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_INT64);
++        $this->assertEquals($expected, $formattedValue);
++    }
++
++    public static function formatTypeInt64WithCurrencyStyleProvider()
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
++
++        return [
++            [$formatter, 1, '¤1.00'],
++            [$formatter, 1.1, '¤1.00'],
++            [$formatter, 2147483648, '¤2,147,483,648.00'],
++            [$formatter, -2147483649, '-¤2,147,483,649.00'],
++        ];
++    }
++
++    /**
++     * @dataProvider formatTypeDoubleProvider
++     */
++    public function testFormatTypeDouble($formatter, $value, $expected)
++    {
++        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_DOUBLE);
++        $this->assertEquals($expected, $formattedValue);
++    }
++
++    public static function formatTypeDoubleProvider()
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++
++        return [
++            [$formatter, 1, '1'],
++            [$formatter, 1.1, '1.1'],
++        ];
++    }
++
++    /**
++     * @dataProvider formatTypeDoubleWithCurrencyStyleProvider
++     */
++    public function testFormatTypeDoubleWithCurrencyStyle($formatter, $value, $expected)
++    {
++        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
++            $this->markTestSkipped('ICU version 63.1 is required.');
++        }
++
++        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_DOUBLE);
++        $this->assertEquals($expected, $formattedValue);
++    }
++
++    public static function formatTypeDoubleWithCurrencyStyleProvider()
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
++
++        return [
++            [$formatter, 1, '¤1.00'],
++            [$formatter, 1.1, '¤1.10'],
++        ];
++    }
++
++    /**
++     * @dataProvider formatTypeCurrencyProvider
++     */
++    public function testFormatTypeCurrency($formatter, $value)
++    {
++        if (\PHP_VERSION_ID >= 80000) {
++            $this->expectException(\ValueError::class);
++        } elseif (method_exists($this, 'expectWarning')) {
++            $this->expectWarning();
++        } else {
++            $this->expectException(Warning::class);
++        }
++
++        $formatter->format($value, NumberFormatter::TYPE_CURRENCY);
++    }
++
++    /**
++     * @dataProvider formatTypeCurrencyProvider
++     */
++    public function testFormatTypeCurrencyReturn($formatter, $value)
++    {
++        if (\PHP_VERSION_ID >= 80000) {
++            $this->expectException(\ValueError::class);
++        }
++
++        $this->assertFalse(@$formatter->format($value, NumberFormatter::TYPE_CURRENCY));
++    }
++
++    public static function formatTypeCurrencyProvider()
++    {
++        $df = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $cf = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
++
++        return [
++            [$df, 1],
++            [$cf, 1],
++        ];
++    }
++
++    /**
++     * @dataProvider formatFractionDigitsProvider
++     */
++    public function testFormatFractionDigits($value, $expected, $fractionDigits = null, $expectedFractionDigits = 1)
++    {
++        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '62.1', '<')) {
++            $this->markTestSkipped('ICU version 62.1 is required.');
++        }
++
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++
++        $attributeRet = null;
++        if (null !== $fractionDigits) {
++            $attributeRet = $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, $fractionDigits);
++        }
++
++        $formattedValue = $formatter->format($value);
++        $this->assertSame($expected, $formattedValue);
++        $this->assertSame($expectedFractionDigits, $formatter->getAttribute(NumberFormatter::FRACTION_DIGITS));
++
++        if (null !== $attributeRet) {
++            $this->assertTrue($attributeRet);
++        }
++    }
++
++    public static function formatFractionDigitsProvider()
++    {
++        yield [1.123, '1.123', null, 0];
++        yield [1.123, '1', 0, 0];
++        yield [1.123, '1.1', 1, 1];
++        yield [1.123, '1.12', 2, 2];
++        yield [1.123, '1.123', -1, 0];
++    }
++
++    /**
++     * @dataProvider formatGroupingUsedProvider
++     */
++    public function testFormatGroupingUsed($value, $expected, $groupingUsed = null, $expectedGroupingUsed = 1)
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++
++        $attributeRet = null;
++        if (null !== $groupingUsed) {
++            $attributeRet = $formatter->setAttribute(NumberFormatter::GROUPING_USED, $groupingUsed);
++        }
++
++        $formattedValue = $formatter->format($value);
++        $this->assertSame($expected, $formattedValue);
++        $this->assertSame($expectedGroupingUsed, $formatter->getAttribute(NumberFormatter::GROUPING_USED));
++
++        if (null !== $attributeRet) {
++            $this->assertTrue($attributeRet);
++        }
++    }
++
++    public static function formatGroupingUsedProvider()
++    {
++        yield [1000, '1,000', null, 1];
++        yield [1000, '1000', 0, 0];
++        yield [1000, '1,000', 1, 1];
++        yield [1000, '1,000', 2, 1];
++        yield [1000, '1,000', -1, 1];
++    }
++
++    /**
++     * @dataProvider formatRoundingModeRoundHalfUpProvider
++     */
++    public function testFormatRoundingModeHalfUp($value, $expected)
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
++
++        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_HALFUP);
++        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_HALFUP rounding mode.');
++    }
++
++    public static function formatRoundingModeRoundHalfUpProvider()
++    {
++        // The commented value is differently rounded by intl's NumberFormatter in 32 and 64 bit architectures
++        return [
++            [1.121, '1.12'],
++            [1.123, '1.12'],
++            // [1.125, '1.13'],
++            [1.127, '1.13'],
++            [1.129, '1.13'],
++            [1020 / 100, '10.20'],
++        ];
++    }
++
++    /**
++     * @dataProvider formatRoundingModeRoundHalfDownProvider
++     */
++    public function testFormatRoundingModeHalfDown($value, $expected)
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
++
++        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_HALFDOWN);
++        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_HALFDOWN rounding mode.');
++    }
++
++    public static function formatRoundingModeRoundHalfDownProvider()
++    {
++        return [
++            [1.121, '1.12'],
++            [1.123, '1.12'],
++            [1.125, '1.12'],
++            [1.127, '1.13'],
++            [1.129, '1.13'],
++            [1020 / 100, '10.20'],
++        ];
++    }
++
++    /**
++     * @dataProvider formatRoundingModeRoundHalfEvenProvider
++     */
++    public function testFormatRoundingModeHalfEven($value, $expected)
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
++
++        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_HALFEVEN);
++        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_HALFEVEN rounding mode.');
++    }
++
++    public static function formatRoundingModeRoundHalfEvenProvider()
++    {
++        return [
++            [1.121, '1.12'],
++            [1.123, '1.12'],
++            [1.125, '1.12'],
++            [1.127, '1.13'],
++            [1.129, '1.13'],
++            [1020 / 100, '10.20'],
++        ];
++    }
++
++    /**
++     * @dataProvider formatRoundingModeRoundCeilingProvider
++     */
++    public function testFormatRoundingModeCeiling($value, $expected)
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
++
++        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_CEILING);
++        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_CEILING rounding mode.');
++    }
++
++    public static function formatRoundingModeRoundCeilingProvider()
++    {
++        return [
++            [1.123, '1.13'],
++            [1.125, '1.13'],
++            [1.127, '1.13'],
++            [-1.123, '-1.12'],
++            [-1.125, '-1.12'],
++            [-1.127, '-1.12'],
++            [1020 / 100, '10.20'],
++        ];
++    }
++
++    /**
++     * @dataProvider formatRoundingModeRoundFloorProvider
++     */
++    public function testFormatRoundingModeFloor($value, $expected)
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
++
++        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_FLOOR);
++        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_FLOOR rounding mode.');
++    }
++
++    public static function formatRoundingModeRoundFloorProvider()
++    {
++        return [
++            [1.123, '1.12'],
++            [1.125, '1.12'],
++            [1.127, '1.12'],
++            [-1.123, '-1.13'],
++            [-1.125, '-1.13'],
++            [-1.127, '-1.13'],
++            [1020 / 100, '10.20'],
++        ];
++    }
++
++    /**
++     * @dataProvider formatRoundingModeRoundDownProvider
++     */
++    public function testFormatRoundingModeDown($value, $expected)
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
++
++        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_DOWN);
++        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_DOWN rounding mode.');
++    }
++
++    public static function formatRoundingModeRoundDownProvider()
++    {
++        return [
++            [1.123, '1.12'],
++            [1.125, '1.12'],
++            [1.127, '1.12'],
++            [-1.123, '-1.12'],
++            [-1.125, '-1.12'],
++            [-1.127, '-1.12'],
++            [1020 / 100, '10.20'],
++        ];
++    }
++
++    /**
++     * @dataProvider formatRoundingModeRoundUpProvider
++     */
++    public function testFormatRoundingModeUp($value, $expected)
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
++
++        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_UP);
++        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_UP rounding mode.');
++    }
++
++    public static function formatRoundingModeRoundUpProvider()
++    {
++        return [
++            [1.123, '1.13'],
++            [1.125, '1.13'],
++            [1.127, '1.13'],
++            [-1.123, '-1.13'],
++            [-1.125, '-1.13'],
++            [-1.127, '-1.13'],
++            [1020 / 100, '10.20'],
++        ];
++    }
++
++    public function testGetLocale()
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $this->assertEquals('en', $formatter->getLocale());
++    }
++
++    public function testGetSymbol()
++    {
++        $decimalFormatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $currencyFormatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
++
++        $r = new \ReflectionProperty('Symfony\Polyfill\Intl\Icu\NumberFormatter', 'enSymbols');
++        $r->setAccessible(true);
++        $expected = $r->getValue();
++
++        for ($i = 0; $i <= 17; ++$i) {
++            $this->assertSame($expected[1][$i], $decimalFormatter->getSymbol($i));
++            $this->assertSame($expected[2][$i], $currencyFormatter->getSymbol($i));
++        }
++    }
++
++    public function testGetTextAttribute()
++    {
++        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
++            $this->markTestSkipped('ICU version 63.1 is required.');
++        }
++
++        $decimalFormatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $currencyFormatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
++
++        $r = new \ReflectionProperty('Symfony\Polyfill\Intl\Icu\NumberFormatter', 'enTextAttributes');
++        $r->setAccessible(true);
++        $expected = $r->getValue();
++
++        for ($i = 0; $i <= 5; ++$i) {
++            $this->assertSame($expected[1][$i], $decimalFormatter->getTextAttribute($i));
++            $this->assertSame($expected[2][$i], $currencyFormatter->getTextAttribute($i));
++        }
++    }
++
++    /**
++     * @dataProvider parseProvider
++     */
++    public function testParse($value, $expected, $message, $expectedPosition, $groupingUsed = true)
++    {
++        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '62.1', '<')) {
++            $this->markTestSkipped('ICU version 62.1 is required.');
++        }
++
++        $position = 0;
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $formatter->setAttribute(NumberFormatter::GROUPING_USED, $groupingUsed);
++        $parsedValue = $formatter->parse($value, NumberFormatter::TYPE_DOUBLE, $position);
++        $this->assertSame($expected, $parsedValue, $message);
++        $this->assertSame($expectedPosition, $position, $message);
++
++        if (false === $expected) {
++            $errorCode = Icu::U_PARSE_ERROR;
++            $errorMessage = 'Number parsing failed: U_PARSE_ERROR';
++        } else {
++            $errorCode = Icu::U_ZERO_ERROR;
++            $errorMessage = 'U_ZERO_ERROR';
++        }
++
++        $this->assertSame($errorMessage, static::getIntlErrorMessage());
++        $this->assertSame($errorCode, static::getIntlErrorCode());
++        $this->assertSame(0 !== $errorCode, static::isIntlFailure(static::getIntlErrorCode()));
++        $this->assertSame($errorMessage, $formatter->getErrorMessage());
++        $this->assertSame($errorCode, $formatter->getErrorCode());
++        $this->assertSame(0 !== $errorCode, static::isIntlFailure($formatter->getErrorCode()));
++    }
++
++    public static function parseProvider()
++    {
++        return [
++            ['prefix1', false, '->parse() does not parse a number with a string prefix.', 0],
++            ['prefix1', false, '->parse() does not parse a number with a string prefix.', 0, false],
++            ['1.4suffix', (float) 1.4, '->parse() parses a number with a string suffix.', 3],
++            ['1.4suffix', (float) 1.4, '->parse() parses a number with a string suffix.', 3, false],
++            ['1,234.4suffix', 1234.4, '->parse() parses a number with a string suffix.', 7],
++            ['1,234.4suffix', 1.0, '->parse() parses a number with a string suffix.', 1, false],
++            ['-.4suffix', (float) -0.4, '->parse() parses a negative dot float with suffix.', 3],
++            ['-.4suffix', (float) -0.4, '->parse() parses a negative dot float with suffix.', 3, false],
++            [',4', false, '->parse() does not parse when invalid grouping used.', 0],
++            [',4', false, '->parse() does not parse when invalid grouping used.', 0, false],
++            ['123,4', false, '->parse() does not parse when invalid grouping used.', 0],
++            ['123,4', 123.0, '->parse() truncates invalid grouping when grouping is disabled.', 3, false],
++            ['123,a4', 123.0, '->parse() truncates a string suffix.', 3],
++            ['123,a4', 123.0, '->parse() truncates a string suffix.', 3, false],
++            ['-123,4', false, '->parse() does not parse when invalid grouping used.', 1],
++            ['-123,4', -123.0, '->parse() truncates invalid grouping when grouping is disabled.', 4, false],
++            ['-123,4567', false, '->parse() does not parse when invalid grouping used.', 1],
++            ['-123,4567', -123.0, '->parse() truncates invalid grouping when grouping is disabled.', 4, false],
++            ['-123,456,789', -123456789.0, '->parse() parses a number with grouping.', 12],
++            ['-123,456,789', -123.0, '->parse() truncates a group if grouping is disabled.', 4, false],
++            ['-123,456,789.66', -123456789.66, '->parse() parses a number with grouping.', 15],
++            ['-123,456,789.66', -123.00, '->parse() truncates a group if grouping is disabled.', 4, false],
++            ['-123,456789.66', false, '->parse() does not parse when invalid grouping used.', 1],
++            ['-123,456789.66', -123.00, '->parse() truncates a group if grouping is disabled.', 4, false],
++            ['-123456,789.66', false, '->parse() does not parse when invalid grouping used.', 1],
++            ['-123456,789.66', -123456.00, '->parse() truncates a group if grouping is disabled.', 7, false],
++            ['-123,456,78', false, '->parse() does not parse when invalid grouping used.', 1],
++            ['-123,456,78', -123.0, '->parse() truncates a group if grouping is disabled.', 4, false],
++            ['-123,45,789', false, '->parse() does not parse when invalid grouping used.', 1],
++            ['-123,45,789', -123.0, '->parse() truncates a group if grouping is disabled.', 4, false],
++            ['-123,,456', -123.0, '->parse() parses when grouping is duplicated.', 4],
++            ['-123,,456', -123.0, '->parse() parses when grouping is disabled.', 4, false],
++            ['-123,,4', -123.0, '->parse() parses when grouping is duplicated.', 4],
++            ['-123,,4', -123.0, '->parse() parses when grouping is duplicated.', 4, false],
++            ['239.', 239.0, '->parse() parses when string ends with decimal separator.', 4],
++            ['239.', 239.0, '->parse() parses when string ends with decimal separator.', 4, false],
++        ];
++    }
++
++    public function testParseTypeDefault()
++    {
++        if (\PHP_VERSION_ID >= 80000) {
++            $this->expectException(\ValueError::class);
++        } elseif (method_exists($this, 'expectWarning')) {
++            $this->expectWarning();
++        } else {
++            $this->expectException(Warning::class);
++        }
++
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $formatter->parse('1', NumberFormatter::TYPE_DEFAULT);
++    }
++
++    /**
++     * @dataProvider parseTypeInt32Provider
++     */
++    public function testParseTypeInt32($value, $expected, $message = '')
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $parsedValue = $formatter->parse($value, NumberFormatter::TYPE_INT32);
++        $this->assertSame($expected, $parsedValue, $message);
++    }
++
++    public static function parseTypeInt32Provider()
++    {
++        return [
++            ['1', 1],
++            ['1.1', 1],
++            ['.1', 0],
++            ['2,147,483,647', 2147483647],
++            ['-2,147,483,648', -2147483647 - 1],
++            ['2,147,483,648', false, '->parse() TYPE_INT32 returns false when the number is greater than the integer positive range.'],
++            ['-2,147,483,649', false, '->parse() TYPE_INT32 returns false when the number is greater than the integer negative range.'],
++        ];
++    }
++
++    public function testParseTypeInt64With32BitIntegerInPhp32Bit()
++    {
++        if (4 !== \PHP_INT_SIZE) {
++            $this->markTestSkipped('PHP 32 bit is required.');
++        }
++
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++
++        $parsedValue = $formatter->parse('2,147,483,647', NumberFormatter::TYPE_INT64);
++        $this->assertIsInt($parsedValue);
++        $this->assertEquals(2147483647, $parsedValue);
++
++        $parsedValue = $formatter->parse('-2,147,483,648', NumberFormatter::TYPE_INT64);
++        $this->assertIsInt($parsedValue);
++        $this->assertEquals(-2147483648, $parsedValue);
++    }
++
++    public function testParseTypeInt64With32BitIntegerInPhp64Bit()
++    {
++        if (8 !== \PHP_INT_SIZE) {
++            $this->markTestSkipped('PHP 64 bit is required.');
++        }
++
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++
++        $parsedValue = $formatter->parse('2,147,483,647', NumberFormatter::TYPE_INT64);
++        $this->assertIsInt($parsedValue);
++        $this->assertEquals(2147483647, $parsedValue);
++
++        $parsedValue = $formatter->parse('-2,147,483,648', NumberFormatter::TYPE_INT64);
++        $this->assertIsInt($parsedValue);
++        $this->assertEquals(-2147483647 - 1, $parsedValue);
++    }
++
++    /**
++     * If PHP is compiled in 32bit mode, the returned value for a 64bit integer are float numbers.
++     */
++    public function testParseTypeInt64With64BitIntegerInPhp32Bit()
++    {
++        if (4 !== \PHP_INT_SIZE) {
++            $this->markTestSkipped('PHP 32 bit is required.');
++        }
++
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++
++        // int 64 using only 32 bit range strangeness
++        $parsedValue = $formatter->parse('2,147,483,648', NumberFormatter::TYPE_INT64);
++        $this->assertIsFloat($parsedValue);
++        $this->assertEquals(2147483648, $parsedValue, '->parse() TYPE_INT64 does not use true 64 bit integers, using only the 32 bit range.');
++
++        $parsedValue = $formatter->parse('-2,147,483,649', NumberFormatter::TYPE_INT64);
++        $this->assertIsFloat($parsedValue);
++        $this->assertEquals(-2147483649, $parsedValue, '->parse() TYPE_INT64 does not use true 64 bit integers, using only the 32 bit range.');
++    }
++
++    /**
++     * If PHP is compiled in 64bit mode, the returned value for a 64bit integer are 32bit integer numbers.
++     */
++    public function testParseTypeInt64With64BitIntegerInPhp64Bit()
++    {
++        if (8 !== \PHP_INT_SIZE) {
++            $this->markTestSkipped('PHP 64 bit is required.');
++        }
++
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++
++        $parsedValue = $formatter->parse('2,147,483,648', NumberFormatter::TYPE_INT64);
++        $this->assertIsInt($parsedValue);
++
++        $this->assertEquals(2147483648, $parsedValue, '->parse() TYPE_INT64 uses true 64 bit integers (PHP >= 5.3.14 and PHP >= 5.4.4).');
++
++        $parsedValue = $formatter->parse('-2,147,483,649', NumberFormatter::TYPE_INT64);
++        $this->assertIsInt($parsedValue);
++
++        $this->assertEquals(-2147483649, $parsedValue, '->parse() TYPE_INT64 uses true 64 bit integers (PHP >= 5.3.14 and PHP >= 5.4.4).');
++    }
++
++    /**
++     * @dataProvider parseTypeDoubleProvider
++     */
++    public function testParseTypeDouble($value, $expectedValue)
++    {
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $parsedValue = $formatter->parse($value, NumberFormatter::TYPE_DOUBLE);
++        $this->assertEqualsWithDelta($expectedValue, $parsedValue, 0.001);
++    }
++
++    public static function parseTypeDoubleProvider()
++    {
++        return [
++            ['1', (float) 1],
++            ['1.1', 1.1],
++            ['9,223,372,036,854,775,808', 9223372036854775808],
++            ['-9,223,372,036,854,775,809', -9223372036854775809],
++        ];
++    }
++
++    public function testParseTypeCurrency()
++    {
++        if (\PHP_VERSION_ID >= 80000) {
++            $this->expectException(\ValueError::class);
++        } elseif (method_exists($this, 'expectWarning')) {
++            $this->expectWarning();
++        } else {
++            $this->expectException(Warning::class);
++        }
++
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $formatter->parse('1', NumberFormatter::TYPE_CURRENCY);
++    }
++
++    public function testParseWithNotNullPositionValue()
++    {
++        $position = 1;
++        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
++        $formatter->parse('123', NumberFormatter::TYPE_DOUBLE, $position);
++        $this->assertEquals(3, $position);
++    }
++
++    /**
++     * @return NumberFormatter|\NumberFormatter
++     */
++    abstract protected static function getNumberFormatter(string $locale = 'en', ?string $style = null, ?string $pattern = null);
++
++    abstract protected static function getIntlErrorMessage(): string;
++
++    abstract protected static function getIntlErrorCode(): int;
++
++    /**
++     * @param int $errorCode
++     */
++    abstract protected static function isIntlFailure($errorCode): bool;
++}
+diff --git a/tests/Intl/Icu/CollatorTest.php b/tests/Intl/Icu/CollatorTest.php
+index dcb6a87..aadb20e 100644
+--- a/tests/Intl/Icu/CollatorTest.php
++++ b/tests/Intl/Icu/CollatorTest.php
+@@ -15,11 +15,12 @@ use Symfony\Polyfill\Intl\Icu\Collator;
+ use Symfony\Polyfill\Intl\Icu\Exception\MethodArgumentValueNotImplementedException;
+ use Symfony\Polyfill\Intl\Icu\Exception\MethodNotImplementedException;
+ use Symfony\Polyfill\Intl\Icu\Icu;
++use Symfony\Polyfill\Tests\Intl\Icu\AbstractCollatorTestCase;
+ 
+ /**
+  * @group class-polyfill
+  */
+-class CollatorTest extends AbstractCollatorTest
++class CollatorTest extends AbstractCollatorTestCase
+ {
+     public function testConstructorWithUnsupportedLocale()
+     {
+diff --git a/tests/Intl/Icu/IcuTest.php b/tests/Intl/Icu/IcuTest.php
+index f1b4521..6195553 100644
+--- a/tests/Intl/Icu/IcuTest.php
++++ b/tests/Intl/Icu/IcuTest.php
+@@ -12,8 +12,9 @@
+ namespace Symfony\Polyfill\Tests\Intl\Icu;
+ 
+ use Symfony\Polyfill\Intl\Icu\Icu;
++use Symfony\Polyfill\Tests\Intl\Icu\AbstractIcuTestCase;
+ 
+-class IcuTest extends AbstractIcuTest
++class IcuTest extends AbstractIcuTestCase
+ {
+     protected function getIntlErrorName($errorCode)
+     {
+diff --git a/tests/Intl/Icu/IntlDateFormatterTest.php b/tests/Intl/Icu/IntlDateFormatterTest.php
+index 6adc5e7..f99d7c6 100644
+--- a/tests/Intl/Icu/IntlDateFormatterTest.php
++++ b/tests/Intl/Icu/IntlDateFormatterTest.php
+@@ -17,12 +17,13 @@ use Symfony\Polyfill\Intl\Icu\Exception\MethodNotImplementedException;
+ use Symfony\Polyfill\Intl\Icu\Exception\NotImplementedException;
+ use Symfony\Polyfill\Intl\Icu\Icu;
+ use Symfony\Polyfill\Intl\Icu\IntlDateFormatter;
++use Symfony\Polyfill\Tests\Intl\Icu\AbstractIntlDateFormatterTestCase;
+ 
+ /**
+  * @group class-polyfill
+  * @group time-sensitive
+  */
+-class IntlDateFormatterTest extends AbstractIntlDateFormatterTest
++class IntlDateFormatterTest extends AbstractIntlDateFormatterTestCase
+ {
+     public function testConstructor()
+     {
+diff --git a/tests/Intl/Icu/LocaleTest.php b/tests/Intl/Icu/LocaleTest.php
+index 85896db..edeac3a 100644
+--- a/tests/Intl/Icu/LocaleTest.php
++++ b/tests/Intl/Icu/LocaleTest.php
+@@ -17,7 +17,7 @@ use Symfony\Polyfill\Intl\Icu\Locale;
+ /**
+  * @group class-polyfill
+  */
+-class LocaleTest extends AbstractLocaleTest
++class LocaleTest extends AbstractLocaleTestCase
+ {
+     public function testAcceptFromHttp()
+     {
+diff --git a/tests/Intl/Icu/NumberFormatterTest.php b/tests/Intl/Icu/NumberFormatterTest.php
+index 8b6dd92..0e2f458 100644
+--- a/tests/Intl/Icu/NumberFormatterTest.php
++++ b/tests/Intl/Icu/NumberFormatterTest.php
+@@ -24,7 +24,7 @@ use Symfony\Polyfill\Intl\Icu\NumberFormatter;
+  *
+  * @group class-polyfill
+  */
+-class NumberFormatterTest extends AbstractNumberFormatterTest
++class NumberFormatterTest extends AbstractNumberFormatterTestCase
+ {
+     public function testConstructorWithUnsupportedLocale()
+     {
+diff --git a/tests/Intl/Icu/Verification/CollatorTest.php b/tests/Intl/Icu/Verification/CollatorTest.php
+index 834f133..7e38452 100644
+--- a/tests/Intl/Icu/Verification/CollatorTest.php
++++ b/tests/Intl/Icu/Verification/CollatorTest.php
+@@ -11,7 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Intl\Icu\Verification;
+ 
+-use Symfony\Polyfill\Tests\Intl\Icu\AbstractCollatorTest;
++use Symfony\Polyfill\Tests\Intl\Icu\AbstractCollatorTestCase;
+ 
+ /**
+  * Verifies that {@link AbstractCollatorTest} matches the behavior of the
+@@ -23,7 +23,7 @@ use Symfony\Polyfill\Tests\Intl\Icu\AbstractCollatorTest;
+  *
+  * @group class-polyfill
+  */
+-class CollatorTest extends AbstractCollatorTest
++class CollatorTest extends AbstractCollatorTestCase
+ {
+     protected function setUp(): void
+     {
+diff --git a/tests/Intl/Icu/Verification/IcuTest.php b/tests/Intl/Icu/Verification/IcuTest.php
+index 5474adc..b48925a 100644
+--- a/tests/Intl/Icu/Verification/IcuTest.php
++++ b/tests/Intl/Icu/Verification/IcuTest.php
+@@ -11,7 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Intl\Icu\Verification;
+ 
+-use Symfony\Polyfill\Tests\Intl\Icu\AbstractIcuTest;
++use Symfony\Polyfill\Tests\Intl\Icu\AbstractIcuTestCase;
+ 
+ /**
+  * Verifies that {@link AbstractIcuTest} matches the behavior of the
+@@ -23,7 +23,7 @@ use Symfony\Polyfill\Tests\Intl\Icu\AbstractIcuTest;
+  *
+  * @group class-polyfill
+  */
+-class IcuTest extends AbstractIcuTest
++class IcuTest extends AbstractIcuTestCase
+ {
+     protected function setUp(): void
+     {
+diff --git a/tests/Intl/Icu/Verification/IntlDateFormatterTest.php b/tests/Intl/Icu/Verification/IntlDateFormatterTest.php
+index da88e32..ff7cbc8 100644
+--- a/tests/Intl/Icu/Verification/IntlDateFormatterTest.php
++++ b/tests/Intl/Icu/Verification/IntlDateFormatterTest.php
+@@ -12,7 +12,7 @@
+ namespace Symfony\Polyfill\Tests\Intl\Icu\Verification;
+ 
+ use Symfony\Polyfill\Intl\Icu\IntlDateFormatter;
+-use Symfony\Polyfill\Tests\Intl\Icu\AbstractIntlDateFormatterTest;
++use Symfony\Polyfill\Tests\Intl\Icu\AbstractIntlDateFormatterTestCase;
+ 
+ /**
+  * Verifies that {@link AbstractIntlDateFormatterTest} matches the behavior of
+@@ -24,7 +24,7 @@ use Symfony\Polyfill\Tests\Intl\Icu\AbstractIntlDateFormatterTest;
+  *
+  * @group class-polyfill
+  */
+-class IntlDateFormatterTest extends AbstractIntlDateFormatterTest
++class IntlDateFormatterTest extends AbstractIntlDateFormatterTestCase
+ {
+     /**
+      * @dataProvider formatProvider
+diff --git a/tests/Intl/Icu/Verification/LocaleTest.php b/tests/Intl/Icu/Verification/LocaleTest.php
+index 6d9c35e..41059a2 100644
+--- a/tests/Intl/Icu/Verification/LocaleTest.php
++++ b/tests/Intl/Icu/Verification/LocaleTest.php
+@@ -11,7 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Intl\Icu\Verification;
+ 
+-use Symfony\Polyfill\Tests\Intl\Icu\AbstractLocaleTest;
++use Symfony\Polyfill\Tests\Intl\Icu\AbstractLocaleTestCase;
+ 
+ /**
+  * Verifies that {@link AbstractLocaleTest} matches the behavior of the
+@@ -23,7 +23,7 @@ use Symfony\Polyfill\Tests\Intl\Icu\AbstractLocaleTest;
+  *
+  * @group class-polyfill
+  */
+-class LocaleTest extends AbstractLocaleTest
++class LocaleTest extends AbstractLocaleTestCase
+ {
+     protected function setUp(): void
+     {
+diff --git a/tests/Intl/Icu/Verification/NumberFormatterTest.php b/tests/Intl/Icu/Verification/NumberFormatterTest.php
+index 38afae2..4d7e0d7 100644
+--- a/tests/Intl/Icu/Verification/NumberFormatterTest.php
++++ b/tests/Intl/Icu/Verification/NumberFormatterTest.php
+@@ -11,7 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Intl\Icu\Verification;
+ 
+-use Symfony\Polyfill\Tests\Intl\Icu\AbstractNumberFormatterTest;
++use Symfony\Polyfill\Tests\Intl\Icu\AbstractNumberFormatterTestCase;
+ 
+ /**
+  * Note that there are some values written like -2147483647 - 1. This is the lower 32bit int max and is a known
+@@ -21,7 +21,7 @@ use Symfony\Polyfill\Tests\Intl\Icu\AbstractNumberFormatterTest;
+  *
+  * @group class-polyfill
+  */
+-class NumberFormatterTest extends AbstractNumberFormatterTest
++class NumberFormatterTest extends AbstractNumberFormatterTestCase
+ {
+     protected function setUp(): void
+     {
diff -pruN 1.31.0-5/debian/patches/0002-Workaround-ICU-new-format.patch 1.33.0-2/debian/patches/0002-Workaround-ICU-new-format.patch
--- 1.31.0-5/debian/patches/0002-Workaround-ICU-new-format.patch	2025-02-24 20:03:32.000000000 +0000
+++ 1.33.0-2/debian/patches/0002-Workaround-ICU-new-format.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,228 +0,0 @@
-From: =?utf-8?q?David_Pr=C3=A9vot?= <dprevot+debian@evolix.fr>
-Date: Tue, 6 Dec 2022 15:23:33 +0100
-Subject: Workaround ICU new format
-
----
- tests/Intl/Icu/AbstractIntlDateFormatterTest.php | 156 ++++++++++++++++++++---
- 1 file changed, 138 insertions(+), 18 deletions(-)
-
-diff --git a/tests/Intl/Icu/AbstractIntlDateFormatterTest.php b/tests/Intl/Icu/AbstractIntlDateFormatterTest.php
-index 3e01dfa..5672b73 100644
---- a/tests/Intl/Icu/AbstractIntlDateFormatterTest.php
-+++ b/tests/Intl/Icu/AbstractIntlDateFormatterTest.php
-@@ -37,8 +37,12 @@ abstract class AbstractIntlDateFormatterTest extends TestCase
- 
-         $this->assertEquals(date_default_timezone_get(), $formatter->getTimeZoneId());
- 
--        $this->assertEquals(
--            $this->getDateTime(0, $formatter->getTimeZoneId())->format('M j, Y, g:i A'),
-+        $this->assertStringStartsWith(
-+            $this->getDateTime(0, $formatter->getTimeZoneId())->format('M j, Y, g:i'),
-+            $formatter->format(0)
-+        );
-+        $this->assertStringEndsWith(
-+            $this->getDateTime(0, $formatter->getTimeZoneId())->format('A'),
-             $formatter->format(0)
-         );
-     }
-@@ -50,7 +54,8 @@ abstract class AbstractIntlDateFormatterTest extends TestCase
-     {
-         $formatter = $this->getDateFormatter('en', null, IntlDateFormatter::SHORT, 'UTC', IntlDateFormatter::GREGORIAN);
- 
--        $this->assertSame('EEEE, MMMM d, y \'at\' h:mm a', $formatter->getPattern());
-+        $this->assertStringStartsWith('EEEE, MMMM d, y \'at\' h:mm', $formatter->getPattern());
-+        $this->assertStringEndsWith('a', $formatter->getPattern());
-     }
- 
-     /**
-@@ -60,7 +65,8 @@ abstract class AbstractIntlDateFormatterTest extends TestCase
-     {
-         $formatter = $this->getDateFormatter('en', IntlDateFormatter::SHORT, null, 'UTC', IntlDateFormatter::GREGORIAN);
- 
--        $this->assertSame('M/d/yy, h:mm:ss a zzzz', $formatter->getPattern());
-+        $this->assertStringStartsWith('M/d/yy, h:mm:ss', $formatter->getPattern());
-+        $this->assertStringEndsWith('a zzzz', $formatter->getPattern());
-     }
- 
-     /**
-@@ -498,7 +504,9 @@ abstract class AbstractIntlDateFormatterTest extends TestCase
-         $datetime = \DateTime::createFromFormat('U', time(), new \DateTimeZone('GMT'));
-         $datetime->setTime(0, 0, 0);
- 
--        $this->assertSame('today at 12:00:00 AM Greenwich Mean Time', $formatter->format($datetime));
-+        $this->assertStringStartsWith('today', $formatter->format($datetime));
-+        $this->assertStringContainsString(' 12:00:00', $formatter->format($datetime));
-+        $this->assertStringEndsWith('AM Greenwich Mean Time', $formatter->format($datetime));
-     }
- 
-     /**
-@@ -510,6 +518,24 @@ abstract class AbstractIntlDateFormatterTest extends TestCase
-         $this->assertSame($expected, $formatter->format($timestamp));
-     }
- 
-+    /**
-+     * @dataProvider dateAndTimeTypeStartsProvider
-+     */
-+    public function testDateAndTimeTypeStarts($timestamp, $datetype, $timetype, $expected)
-+    {
-+        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
-+        $this->assertStringStartsWith($expected, $formatter->format($timestamp));
-+    }
-+
-+    /**
-+     * @dataProvider dateAndTimeTypeEndsProvider
-+     */
-+    public function testDateAndTimeTypeEnds($timestamp, $datetype, $timetype, $expected)
-+    {
-+        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
-+        $this->assertStringEndsWith($expected, $formatter->format($timestamp));
-+    }
-+
-     public static function dateAndTimeTypeProvider()
-     {
-         return [
-@@ -517,10 +543,26 @@ abstract class AbstractIntlDateFormatterTest extends TestCase
-             [0, IntlDateFormatter::LONG, IntlDateFormatter::NONE, 'January 1, 1970'],
-             [0, IntlDateFormatter::MEDIUM, IntlDateFormatter::NONE, 'Jan 1, 1970'],
-             [0, IntlDateFormatter::SHORT, IntlDateFormatter::NONE, '1/1/70'],
--            [0, IntlDateFormatter::NONE, IntlDateFormatter::FULL, '12:00:00 AM Coordinated Universal Time'],
--            [0, IntlDateFormatter::NONE, IntlDateFormatter::LONG, '12:00:00 AM UTC'],
--            [0, IntlDateFormatter::NONE, IntlDateFormatter::MEDIUM, '12:00:00 AM'],
--            [0, IntlDateFormatter::NONE, IntlDateFormatter::SHORT, '12:00 AM'],
-+        ];
-+    }
-+
-+    public static function dateAndTimeTypeStartsProvider()
-+    {
-+        return [
-+            [0, IntlDateFormatter::NONE, IntlDateFormatter::FULL, '12:00:00'],
-+            [0, IntlDateFormatter::NONE, IntlDateFormatter::LONG, '12:00:00'],
-+            [0, IntlDateFormatter::NONE, IntlDateFormatter::MEDIUM, '12:00:00'],
-+            [0, IntlDateFormatter::NONE, IntlDateFormatter::SHORT, '12:00'],
-+        ];
-+    }
-+
-+    public static function dateAndTimeTypeEndsProvider()
-+    {
-+        return [
-+            [0, IntlDateFormatter::NONE, IntlDateFormatter::FULL, 'AM Coordinated Universal Time'],
-+            [0, IntlDateFormatter::NONE, IntlDateFormatter::LONG, 'AM UTC'],
-+            [0, IntlDateFormatter::NONE, IntlDateFormatter::MEDIUM, 'AM'],
-+            [0, IntlDateFormatter::NONE, IntlDateFormatter::SHORT, 'AM'],
-         ];
-     }
- 
-@@ -536,6 +578,42 @@ abstract class AbstractIntlDateFormatterTest extends TestCase
-         $this->assertSame($expected, $formatter->format($datetime));
-     }
- 
-+    /**
-+     * @dataProvider relativeDateTypeStartsProvider
-+     */
-+    public function testRelativeDateTypeStarts($timestamp, $datetype, $timetype, $expected)
-+    {
-+        $datetime = \DateTime::createFromFormat('U', $timestamp, new \DateTimeZone('UTC'));
-+        $datetime->setTime(0, 0, 0);
-+
-+        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
-+        $this->assertStringStartsWith($expected, $formatter->format($datetime));
-+    }
-+
-+    /**
-+     * @dataProvider relativeDateTypeContainsProvider
-+     */
-+    public function testRelativeDateTypeContains($timestamp, $datetype, $timetype, $expected)
-+    {
-+        $datetime = \DateTime::createFromFormat('U', $timestamp, new \DateTimeZone('UTC'));
-+        $datetime->setTime(0, 0, 0);
-+
-+        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
-+        $this->assertStringContainsString($expected, $formatter->format($datetime));
-+    }
-+
-+    /**
-+     * @dataProvider relativeDateTypeEndsProvider
-+     */
-+    public function testRelativeDateTypeEnds($timestamp, $datetype, $timetype, $expected)
-+    {
-+        $datetime = \DateTime::createFromFormat('U', $timestamp, new \DateTimeZone('UTC'));
-+        $datetime->setTime(0, 0, 0);
-+
-+        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
-+        $this->assertStringEndsWith($expected, $formatter->format($datetime));
-+    }
-+
-     public static function relativeDateTypeProvider()
-     {
-         return [
-@@ -545,19 +623,61 @@ abstract class AbstractIntlDateFormatterTest extends TestCase
-             [0, IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::NONE, '1/1/70'],
- 
-             [time(), IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'today'],
--            [time(), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'today at 12:00:00 AM Coordinated Universal Time'],
--            [time(), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'today, 12:00:00 AM UTC'],
--            [time(), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'today, 12:00 AM'],
- 
-             [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'yesterday'],
--            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'yesterday at 12:00:00 AM Coordinated Universal Time'],
--            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'yesterday, 12:00:00 AM UTC'],
--            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'yesterday, 12:00 AM'],
- 
-             [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'tomorrow'],
--            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'tomorrow at 12:00:00 AM Coordinated Universal Time'],
--            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'tomorrow, 12:00:00 AM UTC'],
--            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'tomorrow, 12:00 AM'],
-+        ];
-+    }
-+
-+    public static function relativeDateTypeStartsProvider()
-+    {
-+        return [
-+            [time(), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'today'],
-+            [time(), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'today'],
-+            [time(), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'today'],
-+
-+            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'yesterday'],
-+            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'yesterday'],
-+            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'yesterday'],
-+
-+            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'tomorrow'],
-+            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'tomorrow'],
-+            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'tomorrow'],
-+	];
-+    }
-+
-+    public static function relativeDateTypeContainsProvider()
-+    {
-+        return [
-+            [time(), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, '12:00:00'],
-+            [time(), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, '12:00:00'],
-+            [time(), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, '12:00'],
-+
-+            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, '12:00:00'],
-+            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, '12:00:00'],
-+            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, '12:00'],
-+
-+            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, '12:00:00'],
-+            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, '12:00:00'],
-+            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, '12:00'],
-+        ];
-+    }
-+
-+    public static function relativeDateTypeEndsProvider()
-+    {
-+        return [
-+            [time(), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'AM Coordinated Universal Time'],
-+            [time(), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'AM UTC'],
-+            [time(), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'AM'],
-+
-+            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'AM Coordinated Universal Time'],
-+            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'AM UTC'],
-+            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'AM'],
-+
-+            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'AM Coordinated Universal Time'],
-+            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'AM UTC'],
-+            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'AM'],
-         ];
-     }
- 
diff -pruN 1.31.0-5/debian/patches/0003-Drop-data-tests-failing-with-PHP-8.2.patch 1.33.0-2/debian/patches/0003-Drop-data-tests-failing-with-PHP-8.2.patch
--- 1.31.0-5/debian/patches/0003-Drop-data-tests-failing-with-PHP-8.2.patch	2025-02-24 20:03:32.000000000 +0000
+++ 1.33.0-2/debian/patches/0003-Drop-data-tests-failing-with-PHP-8.2.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,70 +0,0 @@
-From: =?utf-8?q?David_Pr=C3=A9vot?= <taffit@debian.org>
-Date: Sat, 14 Jan 2023 19:43:53 +0100
-Subject: Drop (data) tests failing with PHP 8.2
-
-Bug-Debian: https://bugs.debian.org/1028861
----
- tests/Intl/Icu/AbstractIntlDateFormatterTest.php | 11 -----------
- tests/Mbstring/MbstringTest.php                  |  3 ---
- 2 files changed, 14 deletions(-)
-
-diff --git a/tests/Intl/Icu/AbstractIntlDateFormatterTest.php b/tests/Intl/Icu/AbstractIntlDateFormatterTest.php
-index 5672b73..1536699 100644
---- a/tests/Intl/Icu/AbstractIntlDateFormatterTest.php
-+++ b/tests/Intl/Icu/AbstractIntlDateFormatterTest.php
-@@ -329,7 +329,6 @@ abstract class AbstractIntlDateFormatterTest extends TestCase
-         $data = [
-             [0, 'UTC', '1970-01-01 00:00:00'],
-             [0, 'GMT', '1970-01-01 00:00:00'],
--            [0, 'GMT-03:00', '1969-12-31 21:00:00'],
-             [0, 'GMT+03:00', '1970-01-01 03:00:00'],
-             [0, 'Europe/Zurich', '1970-01-01 01:00:00'],
-             [0, 'Europe/Paris', '1970-01-01 01:00:00'],
-@@ -381,12 +380,6 @@ abstract class AbstractIntlDateFormatterTest extends TestCase
-             ['zzzz', 'Etc/GMT', 'Greenwich Mean Time'],
-             ['zzzzz', 'Etc/GMT', 'Greenwich Mean Time'],
- 
--            ['z', 'Etc/GMT+3', 'GMT-3'],
--            ['zz', 'Etc/GMT+3', 'GMT-3'],
--            ['zzz', 'Etc/GMT+3', 'GMT-3'],
--            ['zzzz', 'Etc/GMT+3', 'GMT-03:00'],
--            ['zzzzz', 'Etc/GMT+3', 'GMT-03:00'],
--
-             ['z', 'UTC', 'UTC'],
-             ['zz', 'UTC', 'UTC'],
-             ['zzz', 'UTC', 'UTC'],
-@@ -952,12 +945,9 @@ abstract class AbstractIntlDateFormatterTest extends TestCase
-     public static function parseTimezoneProvider()
-     {
-         return [
--            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT-03:00', 10800],
--            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT-04:00', 14400],
-             ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT-00:00', 0],
-             ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT+03:00', -10800],
-             ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT+04:00', -14400],
--            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT-0300', 10800],
-             ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT+0300', -10800],
- 
-             // a previous timezone parsing should not change the timezone for the next parsing
-@@ -1081,7 +1071,6 @@ abstract class AbstractIntlDateFormatterTest extends TestCase
-         return [
-             ['UTC', 'UTC'],
-             ['GMT', 'GMT'],
--            ['GMT-03:00', 'GMT-03:00'],
-             ['Europe/Zurich', 'Europe/Zurich'],
-             [null, date_default_timezone_get()],
-             ['Foo/Bar', 'UTC'],
-diff --git a/tests/Mbstring/MbstringTest.php b/tests/Mbstring/MbstringTest.php
-index 75bb3be..0920ebf 100644
---- a/tests/Mbstring/MbstringTest.php
-+++ b/tests/Mbstring/MbstringTest.php
-@@ -112,9 +112,6 @@ class MbstringTest extends TestCase
-         --$convmap[2];
-         $this->assertSame('déjà &#0; â ã', mb_decode_numericentity('déjà &#0; &#225; &#226;', $convmap, 'UTF-8'));
- 
--        $bogusDecEntities = 'déjà &#0; &#225;&#225; &#&#225&#225 &#225 &#225t';
--        $this->assertSame('déjà &#0; ââ &#&#225â â ât', mb_decode_numericentity($bogusDecEntities, $convmap, 'UTF-8'));
--
-         $bogusHexEntities = 'déjà &#x0; &#xe1;&#xe1; &#xe1 &#xe1t &#xE1 &#xE1t';
-         $this->assertSame('déjà &#x0; ââ â ât â ât', mb_decode_numericentity($bogusHexEntities, $convmap, 'UTF-8'));
- 
diff -pruN 1.31.0-5/debian/patches/0003-Modernize-PHPUnit-syntax.patch 1.33.0-2/debian/patches/0003-Modernize-PHPUnit-syntax.patch
--- 1.31.0-5/debian/patches/0003-Modernize-PHPUnit-syntax.patch	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/debian/patches/0003-Modernize-PHPUnit-syntax.patch	2025-08-24 21:29:49.000000000 +0000
@@ -0,0 +1,1554 @@
+From: =?utf-8?q?David_Pr=C3=A9vot?= <taffit@debian.org>
+Date: Mon, 17 Feb 2025 12:55:14 +0100
+Subject: Modernize PHPUnit syntax
+
+---
+ tests/Ctype/CtypeTest.php                          | 25 ++++++++++++++++++++-
+ tests/Iconv/IconvTest.php                          |  5 +++++
+ tests/Intl/Grapheme/GraphemeTest.php               |  5 +++++
+ tests/Intl/Icu/AbstractCollatorTestCase.php        |  2 ++
+ tests/Intl/Icu/AbstractIcuTestCase.php             |  2 ++
+ .../Intl/Icu/AbstractIntlDateFormatterTestCase.php | 10 +++++++++
+ tests/Intl/Icu/AbstractNumberFormatterTestCase.php | 26 ++++++++++++++++++++++
+ tests/Intl/Icu/NumberFormatterTest.php             | 10 +++++++--
+ .../Icu/Verification/IntlDateFormatterTest.php     |  5 +++++
+ tests/Intl/Idn/IdnTest.php                         | 16 +++++++++++++
+ .../Intl/MessageFormatter/MessageFormatterTest.php |  2 ++
+ tests/Mbstring/MbstringTest.php                    | 17 +++++++++++++-
+ tests/Php73/Php73Test.php                          |  3 +++
+ tests/Php74/Php74Test.php                          |  3 +++
+ tests/Php80/Php80Test.php                          |  5 +++++
+ tests/Php82/Php82Test.php                          | 11 +++++++--
+ tests/Php82/RandomSecureEngineTest.php             |  7 +++++-
+ .../Php82/SensitiveParameterValuePolyfillTest.php  |  6 +++++
+ tests/Php83/Php83Test.php                          | 15 +++++++++++--
+ tests/Php84/Php84Test.php                          | 12 ++++++++++
+ tests/Php85/Php85Test.php                          |  3 +++
+ tests/Uuid/UuidTest.php                            | 14 ++++++++++++
+ 22 files changed, 195 insertions(+), 9 deletions(-)
+
+diff --git a/tests/Ctype/CtypeTest.php b/tests/Ctype/CtypeTest.php
+index de5f1f6..513a80c 100644
+--- a/tests/Ctype/CtypeTest.php
++++ b/tests/Ctype/CtypeTest.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Ctype;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use PHPUnit\Framework\TestCase;
+ 
+ /**
+@@ -21,6 +22,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideValidAlnums
+      */
++    #[DataProvider('provideValidAlnums')]
+     public function testValidCtypeAlnum($text)
+     {
+         $this->assertTrue(ctype_alnum($text));
+@@ -44,6 +46,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideInvalidAlnum
+      */
++    #[DataProvider('provideInvalidAlnum')]
+     public function testInvalidCtypeAlnum($text)
+     {
+         $this->assertFalse(ctype_alnum($text));
+@@ -76,6 +79,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideValidAlphas
+      */
++    #[DataProvider('provideValidAlphas')]
+     public function testValidCtypeAlpha($text)
+     {
+         $this->assertTrue(ctype_alpha($text));
+@@ -95,6 +99,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideInvalidAlpha
+      */
++    #[DataProvider('provideInvalidAlpha')]
+     public function testInvalidCtypeAlpha($text)
+     {
+         $this->assertFalse(ctype_alpha($text));
+@@ -127,6 +132,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideValidCntrls
+      */
++    #[DataProvider('provideValidCntrls')]
+     public function testValidCtypeCntrl($text)
+     {
+         $this->assertTrue(ctype_cntrl($text));
+@@ -146,6 +152,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideInvalidCntrl
+      */
++    #[DataProvider('provideInvalidCntrl')]
+     public function testInvalidCtypeCntrl($text)
+     {
+         $this->assertFalse(ctype_cntrl($text));
+@@ -180,6 +187,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideValidDigits
+      */
++    #[DataProvider('provideValidDigits')]
+     public function testValidCtypeDigit($text)
+     {
+         $this->assertTrue(ctype_digit($text));
+@@ -200,6 +208,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideInvalidDigit
+      */
++    #[DataProvider('provideInvalidDigit')]
+     public function testInvalidCtypeDigit($text)
+     {
+         $this->assertFalse(ctype_digit($text));
+@@ -228,13 +237,14 @@ class CtypeTest extends TestCase
+             ['1234B'],
+             ['13addfadsf2'],
+             ["\x00a"],
+-            [\chr(127), '-3', '3.5'],
++            [\chr(127)], # , '-3', '3.5'],
+         ];
+     }
+ 
+     /**
+      * @dataProvider provideValidGraphs
+      */
++    #[DataProvider('provideValidGraphs')]
+     public function testValidCtypeGraph($text)
+     {
+         $this->assertTrue(ctype_graph($text));
+@@ -262,6 +272,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideInvalidGraph
+      */
++    #[DataProvider('provideInvalidGraph')]
+     public function testInvalidCtypeGraph($text)
+     {
+         $this->assertFalse(ctype_graph($text));
+@@ -289,6 +300,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideValidLowers
+      */
++    #[DataProvider('provideValidLowers')]
+     public function testValidCtypeLower($text)
+     {
+         $this->assertTrue(ctype_lower($text));
+@@ -306,6 +318,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideInvalidLower
+      */
++    #[DataProvider('provideInvalidLower')]
+     public function testInvalidCtypeLower($text)
+     {
+         $this->assertFalse(ctype_lower($text));
+@@ -337,6 +350,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideValidPrints
+      */
++    #[DataProvider('provideValidPrints')]
+     public function testValidCtypePrint($text)
+     {
+         $this->assertTrue(ctype_print($text));
+@@ -363,6 +377,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideInvalidPrint
+      */
++    #[DataProvider('provideInvalidPrint')]
+     public function testInvalidCtypePrint($text)
+     {
+         $this->assertFalse(ctype_print($text));
+@@ -388,6 +403,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideValidPuncts
+      */
++    #[DataProvider('provideValidPuncts')]
+     public function testValidCtypePunct($text)
+     {
+         $this->assertTrue(ctype_punct($text));
+@@ -405,6 +421,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideInvalidPunct
+      */
++    #[DataProvider('provideInvalidPunct')]
+     public function testInvalidCtypePunct($text)
+     {
+         $this->assertFalse(ctype_punct($text));
+@@ -440,6 +457,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideValidSpaces
+      */
++    #[DataProvider('provideValidSpaces')]
+     public function testValidCtypeSpace($text)
+     {
+         $this->assertTrue(ctype_space($text));
+@@ -460,6 +478,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideInvalidSpace
+      */
++    #[DataProvider('provideInvalidSpace')]
+     public function testInvalidCtypeSpace($text)
+     {
+         $this->assertFalse(ctype_space($text));
+@@ -494,6 +513,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideValidUppers
+      */
++    #[DataProvider('provideValidUppers')]
+     public function testValidCtypeUpper($text)
+     {
+         $this->assertTrue(ctype_upper($text));
+@@ -512,6 +532,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideInvalidUpper
+      */
++    #[DataProvider('provideInvalidUpper')]
+     public function testInvalidCtypeUpper($text)
+     {
+         $this->assertFalse(ctype_upper($text));
+@@ -552,6 +573,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideValidXdigits
+      */
++    #[DataProvider('provideValidXdigits')]
+     public function testValidCtypeXdigit($text)
+     {
+         $this->assertTrue(ctype_xdigit($text));
+@@ -578,6 +600,7 @@ class CtypeTest extends TestCase
+     /**
+      * @dataProvider provideInvalidXdigit
+      */
++    #[DataProvider('provideInvalidXdigit')]
+     public function testInvalidCtypeXdigit($text)
+     {
+         $this->assertFalse(ctype_xdigit($text));
+diff --git a/tests/Iconv/IconvTest.php b/tests/Iconv/IconvTest.php
+index e72b71a..17f4bbf 100644
+--- a/tests/Iconv/IconvTest.php
++++ b/tests/Iconv/IconvTest.php
+@@ -11,6 +11,8 @@
+ 
+ namespace Symfony\Polyfill\Tests\Iconv;
+ 
++use PHPUnit\Framework\Attributes\RequiresPhpunit;
++use PHPUnit\Framework\Attributes\RequiresPhp;
+ use PHPUnit\Framework\TestCase;
+ use Symfony\Polyfill\Iconv\Iconv as p;
+ 
+@@ -70,6 +72,7 @@ class IconvTest extends TestCase
+      *
+      * @requires PHP < 8
+      */
++    #[RequiresPhp('< 8')]
+     public function testIconvSubstrReturnsFalsePrePHP8()
+     {
+         $c = 'déjà';
+@@ -83,6 +86,7 @@ class IconvTest extends TestCase
+      *
+      * @requires PHP 8
+      */
++    #[RequiresPhp('< 8')]
+     public function testIconvSubstrReturnsEmptyPostPHP8()
+     {
+         $c = 'déjà';
+@@ -128,6 +132,7 @@ class IconvTest extends TestCase
+     /**
+      * @covers \Symfony\Polyfill\Iconv\Iconv::iconv_mime_decode
+      */
++    #[RequiresPhpunit('< 10')]
+     public function testIconvMimeDecodeIllegal()
+     {
+         iconv_mime_decode('Legal encoded-word: =?utf-8?Q?*?= .');
+diff --git a/tests/Intl/Grapheme/GraphemeTest.php b/tests/Intl/Grapheme/GraphemeTest.php
+index a8703cc..b9d337a 100644
+--- a/tests/Intl/Grapheme/GraphemeTest.php
++++ b/tests/Intl/Grapheme/GraphemeTest.php
+@@ -11,6 +11,8 @@
+ 
+ namespace Symfony\Polyfill\Tests\Intl\Grapheme;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
++use PHPUnit\Framework\Attributes\RequiresPhp;
+ use PHPUnit\Framework\TestCase;
+ use Symfony\Polyfill\Intl\Grapheme\Grapheme as p;
+ 
+@@ -128,6 +130,7 @@ class GraphemeTest extends TestCase
+      *
+      * @requires PHP < 8
+      */
++    #[RequiresPhp('< 8')]
+     public function testGraphemeSubstrReturnsFalsePrePHP8()
+     {
+         $c = 'déjà';
+@@ -142,6 +145,7 @@ class GraphemeTest extends TestCase
+      *
+      * @requires PHP 8
+      */
++    #[RequiresPhp('< 8')]
+     public function testGraphemeSubstrReturnsEmptyPostPHP8()
+     {
+         $c = 'déjà';
+@@ -213,6 +217,7 @@ class GraphemeTest extends TestCase
+     /**
+      * @dataProvider graphemeStrSplitDataProvider
+      */
++    #[DataProvider('graphemeStrSplitDataProvider')]
+     public function testGraphemeStrSplit(string $string, int $length, array $expectedValues)
+     {
+         $this->assertSame($expectedValues, grapheme_str_split($string, $length));
+diff --git a/tests/Intl/Icu/AbstractCollatorTestCase.php b/tests/Intl/Icu/AbstractCollatorTestCase.php
+index d8bbfa9..fc2d80a 100644
+--- a/tests/Intl/Icu/AbstractCollatorTestCase.php
++++ b/tests/Intl/Icu/AbstractCollatorTestCase.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Intl\Icu;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use PHPUnit\Framework\TestCase;
+ use Symfony\Polyfill\Intl\Icu\Collator;
+ 
+@@ -24,6 +25,7 @@ abstract class AbstractCollatorTestCase extends TestCase
+     /**
+      * @dataProvider asortProvider
+      */
++    #[DataProvider('asortProvider')]
+     public function testAsort($array, $sortFlag, $expected)
+     {
+         $collator = $this->getCollator('en');
+diff --git a/tests/Intl/Icu/AbstractIcuTestCase.php b/tests/Intl/Icu/AbstractIcuTestCase.php
+index eee2c50..8aab977 100644
+--- a/tests/Intl/Icu/AbstractIcuTestCase.php
++++ b/tests/Intl/Icu/AbstractIcuTestCase.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Intl\Icu;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use PHPUnit\Framework\TestCase;
+ 
+ /**
+@@ -34,6 +35,7 @@ abstract class AbstractIcuTestCase extends TestCase
+     /**
+      * @dataProvider errorNameProvider
+      */
++    #[DataProvider('errorNameProvider')]
+     public function testGetErrorName($errorCode, $errorName)
+     {
+         $this->assertSame($errorName, $this->getIntlErrorName($errorCode));
+diff --git a/tests/Intl/Icu/AbstractIntlDateFormatterTestCase.php b/tests/Intl/Icu/AbstractIntlDateFormatterTestCase.php
+index bf3249b..dd9493a 100644
+--- a/tests/Intl/Icu/AbstractIntlDateFormatterTestCase.php
++++ b/tests/Intl/Icu/AbstractIntlDateFormatterTestCase.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Intl\Icu;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use PHPUnit\Framework\TestCase;
+ use Symfony\Polyfill\Intl\Icu\Icu;
+ use Symfony\Polyfill\Intl\Icu\Intl;
+@@ -66,6 +67,7 @@ abstract class AbstractIntlDateFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatProvider
+      */
++    #[DataProvider('formatProvider')]
+     public function testFormat($pattern, $timestamp, $expected)
+     {
+         $errorCode = Icu::U_ZERO_ERROR;
+@@ -292,6 +294,7 @@ abstract class AbstractIntlDateFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatErrorProvider
+      */
++    #[DataProvider('formatErrorProvider')]
+     public function testFormatIllegalArgumentError($pattern, $timestamp, $errorMessage)
+     {
+         $errorCode = Icu::U_ILLEGAL_ARGUMENT_ERROR;
+@@ -311,6 +314,7 @@ abstract class AbstractIntlDateFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatWithTimezoneProvider
+      */
++    #[DataProvider('formatWithTimezoneProvider')]
+     public function testFormatWithTimezone($timestamp, $timezone, $expected)
+     {
+         $pattern = 'yyyy-MM-dd HH:mm:ss';
+@@ -352,6 +356,7 @@ abstract class AbstractIntlDateFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatTimezoneProvider
+      */
++    #[DataProvider('formatTimezoneProvider')]
+     public function testFormatTimezone($pattern, $timezone, $expected)
+     {
+         $formatter = $this->getDefaultDateFormatter($pattern);
+@@ -508,6 +513,7 @@ abstract class AbstractIntlDateFormatterTestCase extends TestCase
+     /**
+      * @dataProvider dateAndTimeTypeProvider
+      */
++    #[DataProvider('dateAndTimeTypeProvider')]
+     public function testDateAndTimeType($timestamp, $datetype, $timetype, $expected)
+     {
+         $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
+@@ -531,6 +537,7 @@ abstract class AbstractIntlDateFormatterTestCase extends TestCase
+     /**
+      * @dataProvider relativeDateTypeProvider
+      */
++    #[DataProvider('relativeDateTypeProvider')]
+     public function testRelativeDateType($timestamp, $datetype, $timetype, $expected)
+     {
+         $datetime = \DateTime::createFromFormat('U', $timestamp, new \DateTimeZone('UTC'));
+@@ -605,6 +612,7 @@ abstract class AbstractIntlDateFormatterTestCase extends TestCase
+     /**
+      * @dataProvider parseProvider
+      */
++    #[DataProvider('parseProvider')]
+     public function testParse($pattern, $value, $expected)
+     {
+         $errorCode = Icu::U_ZERO_ERROR;
+@@ -906,6 +914,7 @@ abstract class AbstractIntlDateFormatterTestCase extends TestCase
+     /**
+      * @dataProvider parseErrorProvider
+      */
++    #[DataProvider('parseErrorProvider')]
+     public function testParseError($pattern, $value)
+     {
+         $errorCode = Icu::U_PARSE_ERROR;
+@@ -958,6 +967,7 @@ abstract class AbstractIntlDateFormatterTestCase extends TestCase
+     /**
+      * @dataProvider setTimeZoneProvider
+      */
++    #[DataProvider('setTimeZoneProvider')]
+     public function testSetTimeZone($timeZoneId, $expectedTimeZoneId)
+     {
+         $formatter = $this->getDefaultDateFormatter();
+diff --git a/tests/Intl/Icu/AbstractNumberFormatterTestCase.php b/tests/Intl/Icu/AbstractNumberFormatterTestCase.php
+index 8dbc41c..2b254e2 100644
+--- a/tests/Intl/Icu/AbstractNumberFormatterTestCase.php
++++ b/tests/Intl/Icu/AbstractNumberFormatterTestCase.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Intl\Icu;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use PHPUnit\Framework\Error\Warning;
+ use PHPUnit\Framework\TestCase;
+ use Symfony\Polyfill\Intl\Icu\Icu;
+@@ -30,6 +31,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatCurrencyWithDecimalStyleProvider
+      */
++    #[DataProvider('formatCurrencyWithDecimalStyleProvider')]
+     public function testFormatCurrencyWithDecimalStyle($value, $currency, $expected)
+     {
+         $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+@@ -60,6 +62,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatCurrencyWithCurrencyStyleProvider
+      */
++    #[DataProvider('formatCurrencyWithCurrencyStyleProvider')]
+     public function testFormatCurrencyWithCurrencyStyle($value, $currency, $expected)
+     {
+         if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
+@@ -90,6 +93,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatCurrencyWithCurrencyStyleCostaRicanColonsRoundingProvider
+      */
++    #[DataProvider('formatCurrencyWithCurrencyStyleCostaRicanColonsRoundingProvider')]
+     public function testFormatCurrencyWithCurrencyStyleCostaRicanColonsRounding($value, $currency, $symbol, $expected)
+     {
+         if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
+@@ -112,6 +116,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatCurrencyWithCurrencyStyleBrazilianRealRoundingProvider
+      */
++    #[DataProvider('formatCurrencyWithCurrencyStyleBrazilianRealRoundingProvider')]
+     public function testFormatCurrencyWithCurrencyStyleBrazilianRealRounding($value, $currency, $symbol, $expected)
+     {
+         $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
+@@ -139,6 +144,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatCurrencyWithCurrencyStyleSwissRoundingProvider
+      */
++    #[DataProvider('formatCurrencyWithCurrencyStyleSwissRoundingProvider')]
+     public function testFormatCurrencyWithCurrencyStyleSwissRounding($value, $currency, $symbol, $expected)
+     {
+         if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '62.1', '<')) {
+@@ -200,6 +206,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatTypeInt32Provider
+      */
++    #[DataProvider('formatTypeInt32Provider')]
+     public function testFormatTypeInt32($formatter, $value, $expected, $message = '')
+     {
+         $formattedValue = $formatter->format($value, NumberFormatter::TYPE_INT32);
+@@ -223,6 +230,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatTypeInt32WithCurrencyStyleProvider
+      */
++    #[DataProvider('formatTypeInt32WithCurrencyStyleProvider')]
+     public function testFormatTypeInt32WithCurrencyStyle($formatter, $value, $expected, $message = '')
+     {
+         if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
+@@ -252,6 +260,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+      *
+      * @dataProvider formatTypeInt64Provider
+      */
++    #[DataProvider('formatTypeInt64Provider')]
+     public function testFormatTypeInt64($formatter, $value, $expected)
+     {
+         $formattedValue = $formatter->format($value, NumberFormatter::TYPE_INT64);
+@@ -273,6 +282,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatTypeInt64WithCurrencyStyleProvider
+      */
++    #[DataProvider('formatTypeInt64WithCurrencyStyleProvider')]
+     public function testFormatTypeInt64WithCurrencyStyle($formatter, $value, $expected)
+     {
+         if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
+@@ -298,6 +308,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatTypeDoubleProvider
+      */
++    #[DataProvider('formatTypeDoubleProvider')]
+     public function testFormatTypeDouble($formatter, $value, $expected)
+     {
+         $formattedValue = $formatter->format($value, NumberFormatter::TYPE_DOUBLE);
+@@ -317,6 +328,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatTypeDoubleWithCurrencyStyleProvider
+      */
++    #[DataProvider('formatTypeDoubleWithCurrencyStyleProvider')]
+     public function testFormatTypeDoubleWithCurrencyStyle($formatter, $value, $expected)
+     {
+         if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
+@@ -340,6 +352,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatTypeCurrencyProvider
+      */
++    #[DataProvider('formatTypeCurrencyProvider')]
+     public function testFormatTypeCurrency($formatter, $value)
+     {
+         if (\PHP_VERSION_ID >= 80000) {
+@@ -356,6 +369,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatTypeCurrencyProvider
+      */
++    #[DataProvider('formatTypeCurrencyProvider')]
+     public function testFormatTypeCurrencyReturn($formatter, $value)
+     {
+         if (\PHP_VERSION_ID >= 80000) {
+@@ -379,6 +393,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatFractionDigitsProvider
+      */
++    #[DataProvider('formatFractionDigitsProvider')]
+     public function testFormatFractionDigits($value, $expected, $fractionDigits = null, $expectedFractionDigits = 1)
+     {
+         if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '62.1', '<')) {
+@@ -413,6 +428,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatGroupingUsedProvider
+      */
++    #[DataProvider('formatGroupingUsedProvider')]
+     public function testFormatGroupingUsed($value, $expected, $groupingUsed = null, $expectedGroupingUsed = 1)
+     {
+         $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+@@ -443,6 +459,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatRoundingModeRoundHalfUpProvider
+      */
++    #[DataProvider('formatRoundingModeRoundHalfUpProvider')]
+     public function testFormatRoundingModeHalfUp($value, $expected)
+     {
+         $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+@@ -468,6 +485,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatRoundingModeRoundHalfDownProvider
+      */
++    #[DataProvider('formatRoundingModeRoundHalfDownProvider')]
+     public function testFormatRoundingModeHalfDown($value, $expected)
+     {
+         $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+@@ -492,6 +510,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatRoundingModeRoundHalfEvenProvider
+      */
++    #[DataProvider('formatRoundingModeRoundHalfEvenProvider')]
+     public function testFormatRoundingModeHalfEven($value, $expected)
+     {
+         $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+@@ -516,6 +535,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatRoundingModeRoundCeilingProvider
+      */
++    #[DataProvider('formatRoundingModeRoundCeilingProvider')]
+     public function testFormatRoundingModeCeiling($value, $expected)
+     {
+         $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+@@ -541,6 +561,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatRoundingModeRoundFloorProvider
+      */
++    #[DataProvider('formatRoundingModeRoundFloorProvider')]
+     public function testFormatRoundingModeFloor($value, $expected)
+     {
+         $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+@@ -566,6 +587,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatRoundingModeRoundDownProvider
+      */
++    #[DataProvider('formatRoundingModeRoundDownProvider')]
+     public function testFormatRoundingModeDown($value, $expected)
+     {
+         $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+@@ -591,6 +613,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider formatRoundingModeRoundUpProvider
+      */
++    #[DataProvider('formatRoundingModeRoundUpProvider')]
+     public function testFormatRoundingModeUp($value, $expected)
+     {
+         $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+@@ -656,6 +679,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider parseProvider
+      */
++    #[DataProvider('parseProvider')]
+     public function testParse($value, $expected, $message, $expectedPosition, $groupingUsed = true)
+     {
+         if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '62.1', '<')) {
+@@ -744,6 +768,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider parseTypeInt32Provider
+      */
++    #[DataProvider('parseTypeInt32Provider')]
+     public function testParseTypeInt32($value, $expected, $message = '')
+     {
+         $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+@@ -844,6 +869,7 @@ abstract class AbstractNumberFormatterTestCase extends TestCase
+     /**
+      * @dataProvider parseTypeDoubleProvider
+      */
++    #[DataProvider('parseTypeDoubleProvider')]
+     public function testParseTypeDouble($value, $expectedValue)
+     {
+         $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
+diff --git a/tests/Intl/Icu/NumberFormatterTest.php b/tests/Intl/Icu/NumberFormatterTest.php
+index 0e2f458..c0ed019 100644
+--- a/tests/Intl/Icu/NumberFormatterTest.php
++++ b/tests/Intl/Icu/NumberFormatterTest.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Intl\Icu;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use Symfony\Polyfill\Intl\Icu\Exception\MethodArgumentNotImplementedException;
+ use Symfony\Polyfill\Intl\Icu\Exception\MethodArgumentValueNotImplementedException;
+ use Symfony\Polyfill\Intl\Icu\Exception\MethodNotImplementedException;
+@@ -76,8 +77,8 @@ class NumberFormatterTest extends AbstractNumberFormatterTestCase
+     }
+ 
+     /**
+-     * @dataProvider formatTypeInt32Provider
+-     */
++     * @dataProvider formatTypeInt32Provider */
++    #[DataProvider('formatTypeInt32Provider')]
+     public function testFormatTypeInt32($formatter, $value, $expected, $message = '')
+     {
+         $this->expectException(MethodArgumentValueNotImplementedException::class);
+@@ -87,6 +88,7 @@ class NumberFormatterTest extends AbstractNumberFormatterTestCase
+     /**
+      * @dataProvider formatTypeInt32WithCurrencyStyleProvider
+      */
++    #[DataProvider('formatTypeInt32WithCurrencyStyleProvider')]
+     public function testFormatTypeInt32WithCurrencyStyle($formatter, $value, $expected, $message = '')
+     {
+         $this->expectException(NotImplementedException::class);
+@@ -96,6 +98,7 @@ class NumberFormatterTest extends AbstractNumberFormatterTestCase
+     /**
+      * @dataProvider formatTypeInt64Provider
+      */
++    #[DataProvider('formatTypeInt64Provider')]
+     public function testFormatTypeInt64($formatter, $value, $expected)
+     {
+         $this->expectException(MethodArgumentValueNotImplementedException::class);
+@@ -105,6 +108,7 @@ class NumberFormatterTest extends AbstractNumberFormatterTestCase
+     /**
+      * @dataProvider formatTypeInt64WithCurrencyStyleProvider
+      */
++    #[DataProvider('formatTypeInt64WithCurrencyStyleProvider')]
+     public function testFormatTypeInt64WithCurrencyStyle($formatter, $value, $expected)
+     {
+         $this->expectException(NotImplementedException::class);
+@@ -114,6 +118,7 @@ class NumberFormatterTest extends AbstractNumberFormatterTestCase
+     /**
+      * @dataProvider formatTypeDoubleProvider
+      */
++    #[DataProvider('formatTypeDoubleProvider')]
+     public function testFormatTypeDouble($formatter, $value, $expected)
+     {
+         $this->expectException(MethodArgumentValueNotImplementedException::class);
+@@ -123,6 +128,7 @@ class NumberFormatterTest extends AbstractNumberFormatterTestCase
+     /**
+      * @dataProvider formatTypeDoubleWithCurrencyStyleProvider
+      */
++    #[DataProvider('formatTypeDoubleWithCurrencyStyleProvider')]
+     public function testFormatTypeDoubleWithCurrencyStyle($formatter, $value, $expected)
+     {
+         $this->expectException(NotImplementedException::class);
+diff --git a/tests/Intl/Icu/Verification/IntlDateFormatterTest.php b/tests/Intl/Icu/Verification/IntlDateFormatterTest.php
+index ff7cbc8..5d2dc8e 100644
+--- a/tests/Intl/Icu/Verification/IntlDateFormatterTest.php
++++ b/tests/Intl/Icu/Verification/IntlDateFormatterTest.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Intl\Icu\Verification;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use Symfony\Polyfill\Intl\Icu\IntlDateFormatter;
+ use Symfony\Polyfill\Tests\Intl\Icu\AbstractIntlDateFormatterTestCase;
+ 
+@@ -29,6 +30,7 @@ class IntlDateFormatterTest extends AbstractIntlDateFormatterTestCase
+     /**
+      * @dataProvider formatProvider
+      */
++    #[DataProvider('formatProvider')]
+     public function testFormat($pattern, $timestamp, $expected)
+     {
+         if (\PHP_VERSION_ID < 70105 && $timestamp instanceof \DateTimeImmutable) {
+@@ -41,6 +43,7 @@ class IntlDateFormatterTest extends AbstractIntlDateFormatterTestCase
+     /**
+      * @dataProvider formatTimezoneProvider
+      */
++    #[DataProvider('formatTimezoneProvider')]
+     public function testFormatTimezone($pattern, $timezone, $expected)
+     {
+         if (version_compare(\INTL_ICU_VERSION, '59.1', '<')) {
+@@ -62,6 +65,7 @@ class IntlDateFormatterTest extends AbstractIntlDateFormatterTestCase
+     /**
+      * @dataProvider dateAndTimeTypeProvider
+      */
++    #[DataProvider('dateAndTimeTypeProvider')]
+     public function testDateAndTimeType($timestamp, $datetype, $timetype, $expected)
+     {
+         if (version_compare(\INTL_ICU_VERSION, '59.1', '<')) {
+@@ -76,6 +80,7 @@ class IntlDateFormatterTest extends AbstractIntlDateFormatterTestCase
+      *
+      * @dataProvider relativeDateTypeProvider
+      */
++    #[DataProvider('relativeDateTypeProvider')]
+     public function testRelativeDateType($timestamp, $datetype, $timetype, $expected)
+     {
+         if (version_compare(\INTL_ICU_VERSION, '59.1', '<')) {
+diff --git a/tests/Intl/Idn/IdnTest.php b/tests/Intl/Idn/IdnTest.php
+index bf5b600..0a6e2c7 100644
+--- a/tests/Intl/Idn/IdnTest.php
++++ b/tests/Intl/Idn/IdnTest.php
+@@ -11,6 +11,8 @@
+ 
+ namespace Symfony\Polyfill\Tests\Intl\Idn;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
++use PHPUnit\Framework\Attributes\RequiresPhp;
+ use PHPUnit\Framework\TestCase;
+ use Symfony\Polyfill\Intl\Idn\Idn;
+ 
+@@ -120,6 +122,7 @@ class IdnTest extends TestCase
+      * @param string                          $toAsciiT
+      * @param array<int, int|array<int, int>> $toAsciiTStatus
+      */
++    #[DataProvider('getData')]
+     public function testToUnicode($source, $toUnicode, $toUnicodeStatus, $toAsciiN, $toAsciiNStatus, $toAsciiT, $toAsciiTStatus)
+     {
+         if (\PHP_VERSION_ID >= 80400 && '' === $source) {
+@@ -152,6 +155,7 @@ class IdnTest extends TestCase
+      * @param string                          $toAsciiT
+      * @param array<int, int|array<int, int>> $toAsciiTStatus
+      */
++    #[DataProvider('getData')]
+     public function testToAsciiNonTransitional($source, $toUnicode, $toUnicodeStatus, $toAsciiN, $toAsciiNStatus, $toAsciiT, $toAsciiTStatus)
+     {
+         if (\PHP_VERSION_ID >= 80400 && '' === $source) {
+@@ -184,6 +188,7 @@ class IdnTest extends TestCase
+      * @param string                          $toAsciiT
+      * @param array<int, int|array<int, int>> $toAsciiTStatus
+      */
++    #[DataProvider('getData')]
+     public function testToAsciiTransitional($source, $toUnicode, $toUnicodeStatus, $toAsciiN, $toAsciiNStatus, $toAsciiT, $toAsciiTStatus)
+     {
+         if (\PHP_VERSION_ID >= 80400 && '' === $source) {
+@@ -212,6 +217,8 @@ class IdnTest extends TestCase
+      *
+      * @dataProvider domainNamesProvider
+      */
++    #[RequiresPhp('< 8')]
++    #[DataProvider('domainNamesProvider')]
+     public function testEncode2003($decoded, $encoded)
+     {
+         $result = @idn_to_ascii($decoded, \IDNA_DEFAULT, \INTL_IDNA_VARIANT_2003);
+@@ -221,6 +228,7 @@ class IdnTest extends TestCase
+     /**
+      * @dataProvider invalidUtf8DomainNamesProvider
+      */
++    #[DataProvider('invalidUtf8DomainNamesProvider')]
+     public function testEncodeInvalid($decoded)
+     {
+         $result = idn_to_ascii($decoded, \IDNA_DEFAULT, \INTL_IDNA_VARIANT_UTS46);
+@@ -234,6 +242,8 @@ class IdnTest extends TestCase
+      *
+      * @dataProvider domainNamesProvider
+      */
++    #[RequiresPhp('< 8')]
++    #[DataProvider('domainNamesProvider')]
+     public function testDecode2003($decoded, $encoded)
+     {
+         $result = @idn_to_utf8($encoded, \IDNA_DEFAULT, \INTL_IDNA_VARIANT_2003);
+@@ -243,6 +253,7 @@ class IdnTest extends TestCase
+     /**
+      * @dataProvider domainNamesProvider
+      */
++    #[DataProvider('domainNamesProvider')]
+     public function testEncodeUTS46($decoded, $encoded)
+     {
+         $result = idn_to_ascii($decoded, \IDNA_DEFAULT, \INTL_IDNA_VARIANT_UTS46);
+@@ -252,6 +263,7 @@ class IdnTest extends TestCase
+     /**
+      * @dataProvider domainNamesProvider
+      */
++    #[DataProvider('domainNamesProvider')]
+     public function testDecodeUTS46($decoded, $encoded)
+     {
+         $result = idn_to_utf8($encoded, \IDNA_DEFAULT, \INTL_IDNA_VARIANT_UTS46);
+@@ -261,6 +273,7 @@ class IdnTest extends TestCase
+     /**
+      * @dataProvider domainNamesUppercaseUTS46Provider
+      */
++    #[DataProvider('domainNamesUppercaseUTS46Provider')]
+     public function testUppercaseUTS46($decoded, $ascii, $encoded)
+     {
+         $info = 123;
+@@ -293,6 +306,8 @@ class IdnTest extends TestCase
+      *
+      * @dataProvider domainNamesProvider
+      */
++    #[RequiresPhp('< 8')]
++    #[DataProvider('domainNamesProvider')]
+     public function testEncodePhp53($decoded, $encoded)
+     {
+         $result = @Idn::idn_to_ascii($decoded, \IDNA_DEFAULT, \INTL_IDNA_VARIANT_2003);
+@@ -307,6 +322,7 @@ class IdnTest extends TestCase
+      *
+      * @dataProvider captialSharpSProvider
+      */
++    #[DataProvider('captialSharpSProvider')]
+     public function testCapitalSharpSProcessing($input, $expected, $flags)
+     {
+         idn_to_utf8($input, $flags, \INTL_IDNA_VARIANT_UTS46, $info);
+diff --git a/tests/Intl/MessageFormatter/MessageFormatterTest.php b/tests/Intl/MessageFormatter/MessageFormatterTest.php
+index b14109f..ec9a9cf 100644
+--- a/tests/Intl/MessageFormatter/MessageFormatterTest.php
++++ b/tests/Intl/MessageFormatter/MessageFormatterTest.php
+@@ -37,6 +37,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Intl\MessageFormatter;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use PHPUnit\Framework\TestCase;
+ use Symfony\Polyfill\Intl\MessageFormatter\MessageFormatter;
+ 
+@@ -50,6 +51,7 @@ class MessageFormatterTest extends TestCase
+     /**
+      * @dataProvider patterns
+      */
++    #[DataProvider('patterns')]
+     public function testNamedArguments($pattern, $expected, array $args)
+     {
+         $formatter = new MessageFormatter('en_US', $pattern);
+diff --git a/tests/Mbstring/MbstringTest.php b/tests/Mbstring/MbstringTest.php
+index 49a9aff..a1c9471 100644
+--- a/tests/Mbstring/MbstringTest.php
++++ b/tests/Mbstring/MbstringTest.php
+@@ -11,6 +11,8 @@
+ 
+ namespace Symfony\Polyfill\Tests\Mbstring;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
++use PHPUnit\Framework\Attributes\RequiresPhp;
+ use PHPUnit\Framework\TestCase;
+ use Symfony\Polyfill\Mbstring\Mbstring as p;
+ 
+@@ -138,6 +140,7 @@ class MbstringTest extends TestCase
+      *
+      * @requires PHP < 8
+      */
++    #[RequiresPhp('< 8')]
+     public function testDecodeNumericEntityWithInvalidTypes()
+     {
+         $convmap = [0x80, 0x10FFFF, 0x1, 0x1FFFFF];
+@@ -216,6 +219,7 @@ class MbstringTest extends TestCase
+      *
+      * @requires PHP < 8
+      */
++    #[RequiresPhp('< 8')]
+     public function testEncodeNumericEntityWithInvalidTypes()
+     {
+         $convmap = [0x80, 0x10FFFF, 0x1, 0x1FFFFF];
+@@ -275,6 +279,7 @@ class MbstringTest extends TestCase
+      *
+      * @requires PHP 7.3
+      */
++    #[RequiresPhp('7.3')]
+     public function testStrCase()
+     {
+         $this->assertSame('i̇', mb_strtolower('İ'));
+@@ -390,6 +395,7 @@ class MbstringTest extends TestCase
+      *
+      * @requires PHP < 8
+      */
++    #[RequiresPhp('< 8')]
+     public function testStrposEmptyDelimiter()
+     {
+         mb_strpos('abc', 'a');
+@@ -635,6 +641,9 @@ class MbstringTest extends TestCase
+      * @dataProvider paddingEmojiProvider
+      * @dataProvider paddingEncodingProvider
+      */
++    #[DataProvider('paddingStringProvider')]
++    #[DataProvider('paddingEmojiProvider')]
++    #[DataProvider('paddingEncodingProvider')]
+     public function testMbStrPad(string $expectedResult, string $string, int $length, string $padString, int $padType, ?string $encoding = null)
+     {
+         if ('UTF-32' === $encoding && \PHP_VERSION_ID < 73000) {
+@@ -649,10 +658,11 @@ class MbstringTest extends TestCase
+      *
+      * @dataProvider mbStrPadInvalidArgumentsProvider
+      */
++    #[DataProvider('mbStrPadInvalidArgumentsProvider')]
+     public function testMbStrPadInvalidArguments(string $expectedError, string $string, int $length, string $padString, int $padType, ?string $encoding = null)
+     {
+         $this->expectException(\ValueError::class);
+-        $this->expectErrorMessage($expectedError);
++        $this->expectExceptionMessage($expectedError);
+ 
+         mb_str_pad($string, $length, $padString, $padType, $encoding);
+     }
+@@ -660,6 +670,7 @@ class MbstringTest extends TestCase
+     /**
+      * @dataProvider ucFirstDataProvider
+      */
++    #[DataProvider('ucFirstDataProvider')]
+     public function testMbUcFirst(string $string, string $expected)
+     {
+         $this->assertSame($expected, mb_ucfirst($string));
+@@ -668,6 +679,7 @@ class MbstringTest extends TestCase
+     /**
+      * @dataProvider lcFirstDataProvider
+      */
++    #[DataProvider('lcFirstDataProvider')]
+     public function testMbLcFirst(string $string, string $expected)
+     {
+         $this->assertSame($expected, mb_lcfirst($string));
+@@ -790,6 +802,7 @@ class MbstringTest extends TestCase
+      *
+      * @dataProvider mbTrimProvider
+      */
++    #[DataProvider('mbTrimProvider')]
+     public function testMbTrim(string $expected, string $string, ?string $characters = null, ?string $encoding = null)
+     {
+         $this->assertSame($expected, mb_trim($string, $characters, $encoding));
+@@ -800,6 +813,7 @@ class MbstringTest extends TestCase
+      *
+      * @dataProvider mbLTrimProvider
+      */
++    #[DataProvider('mbLTrimProvider')]
+     public function testMbLTrim(string $expected, string $string, ?string $characters = null, ?string $encoding = null)
+     {
+         $this->assertSame($expected, mb_ltrim($string, $characters, $encoding));
+@@ -810,6 +824,7 @@ class MbstringTest extends TestCase
+      *
+      * @dataProvider mbRTrimProvider
+      */
++    #[DataProvider('mbRTrimProvider')]
+     public function testMbRTrim(string $expected, string $string, ?string $characters = null, ?string $encoding = null)
+     {
+         $this->assertSame($expected, mb_rtrim($string, $characters, $encoding));
+diff --git a/tests/Php73/Php73Test.php b/tests/Php73/Php73Test.php
+index fb20aad..0dae957 100644
+--- a/tests/Php73/Php73Test.php
++++ b/tests/Php73/Php73Test.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Php73;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use PHPUnit\Framework\TestCase;
+ 
+ /**
+@@ -96,6 +97,7 @@ class Php73Test extends TestCase
+     /**
+      * @dataProvider arrayKeyFirstDataProvider
+      */
++    #[DataProvider('arrayKeyFirstDataProvider')]
+     public function testArrayKeyFirst($expected, array $array)
+     {
+         $this->assertSame($expected, array_key_first($array));
+@@ -114,6 +116,7 @@ class Php73Test extends TestCase
+     /**
+      * @dataProvider arrayKeyLastDataProvider
+      */
++    #[DataProvider('arrayKeyLastDataProvider')]
+     public function testArrayLastFirst($expected, array $array)
+     {
+         $this->assertSame($expected, array_key_last($array));
+diff --git a/tests/Php74/Php74Test.php b/tests/Php74/Php74Test.php
+index 44a17c9..ab3abcd 100644
+--- a/tests/Php74/Php74Test.php
++++ b/tests/Php74/Php74Test.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Php74;
+ 
++use PHPUnit\Framework\Attributes\RequiresPhp;
+ use PHPUnit\Framework\TestCase;
+ 
+ /**
+@@ -56,6 +57,7 @@ class Php74Test extends TestCase
+      *
+      * @requires PHP < 8
+      */
++    #[RequiresPhp('< 8')]
+     public function testGetMangledObjectVarsOnNonObject()
+     {
+         $this->assertNull(@get_mangled_object_vars(0));
+@@ -104,6 +106,7 @@ class Php74Test extends TestCase
+      *
+      * @requires PHP < 8
+      */
++    #[RequiresPhp('< 8')]
+     public function testStrSplitWithInvalidValues()
+     {
+         $this->assertSame([], mb_str_split('', 1, 'UTF-8'));
+diff --git a/tests/Php80/Php80Test.php b/tests/Php80/Php80Test.php
+index daa59c6..853e817 100644
+--- a/tests/Php80/Php80Test.php
++++ b/tests/Php80/Php80Test.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Php80;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use PHPUnit\Framework\TestCase;
+ 
+ /**
+@@ -26,6 +27,7 @@ class Php80Test extends TestCase
+      *
+      * @dataProvider fdivProvider
+      */
++    #[DataProvider('fdivProvider')]
+     public function testFdiv($expected, $divident, $divisor)
+     {
+         try {
+@@ -43,6 +45,7 @@ class Php80Test extends TestCase
+      *
+      * @dataProvider nanFdivProvider
+      */
++    #[DataProvider('nanFdivProvider')]
+     public function testFdivNan($divident, $divisor)
+     {
+         try {
+@@ -57,6 +60,7 @@ class Php80Test extends TestCase
+      *
+      * @dataProvider invalidFloatProvider
+      */
++    #[DataProvider('invalidFloatProvider')]
+     public function testFdivTypeError($divident, $divisor)
+     {
+         $this->expectException('TypeError');
+@@ -216,6 +220,7 @@ class Php80Test extends TestCase
+      *
+      * @dataProvider invalidResourceProvider
+      */
++    #[DataProvider('invalidResourceProvider')]
+     public function testGetResourceWithInvalidValue($value)
+     {
+         $this->expectException('TypeError');
+diff --git a/tests/Php82/Php82Test.php b/tests/Php82/Php82Test.php
+index f0104a2..e5ce7a7 100644
+--- a/tests/Php82/Php82Test.php
++++ b/tests/Php82/Php82Test.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Php82;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use PHPUnit\Framework\TestCase;
+ 
+ class Php82Test extends TestCase
+@@ -21,7 +22,9 @@ class Php82Test extends TestCase
+      *
+      * @requires extension odbc
+      */
+-    public function testConnectionStringIsQuoted(string $value, bool $isQuoted)
++    #[DataProvider('provideConnectionStringValuesFromUpstream')]
++    #[DataProvider('provideMoreConnectionStringValues')]
++    public function testConnectionStringIsQuoted(string $value, bool $isQuoted, bool $shouldQuote, string $quoted)
+     {
+         self::assertSame($isQuoted, odbc_connection_string_is_quoted($value));
+     }
+@@ -32,7 +35,9 @@ class Php82Test extends TestCase
+      *
+      * @requires extension odbc
+      */
+-    public function testConnectionStringShouldQuote(string $value, bool $isQuoted, bool $shouldQuote)
++    #[DataProvider('provideConnectionStringValuesFromUpstream')]
++    #[DataProvider('provideMoreConnectionStringValues')]
++    public function testConnectionStringShouldQuote(string $value, bool $isQuoted, bool $shouldQuote, string $quoted)
+     {
+         self::assertSame($shouldQuote, odbc_connection_string_should_quote($value));
+     }
+@@ -43,6 +48,8 @@ class Php82Test extends TestCase
+      *
+      * @requires extension odbc
+      */
++    #[DataProvider('provideConnectionStringValuesFromUpstream')]
++    #[DataProvider('provideMoreConnectionStringValues')]
+     public function testConnectionStringQuote(string $value, bool $isQuoted, bool $shouldQuote, string $quoted)
+     {
+         self::assertSame($quoted, odbc_connection_string_quote($value));
+diff --git a/tests/Php82/RandomSecureEngineTest.php b/tests/Php82/RandomSecureEngineTest.php
+index 7290be8..429ea43 100644
+--- a/tests/Php82/RandomSecureEngineTest.php
++++ b/tests/Php82/RandomSecureEngineTest.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Php82;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use PHPUnit\Framework\TestCase;
+ use Symfony\Polyfill\Php82\Random\Engine\Secure as SecureEnginePolyfill;
+ 
+@@ -19,7 +20,7 @@ use Symfony\Polyfill\Php82\Random\Engine\Secure as SecureEnginePolyfill;
+  */
+ class RandomSecureEngineTest extends TestCase
+ {
+-    public function secureEngineProvider()
++    public static function secureEngineProvider()
+     {
+         yield [new SecureEnginePolyfill()];
+         yield [new \Random\Engine\Secure()];
+@@ -28,6 +29,7 @@ class RandomSecureEngineTest extends TestCase
+     /**
+      * @dataProvider secureEngineProvider
+      */
++    #[DataProvider('secureEngineProvider')]
+     public function testGenerateLength($v)
+     {
+         $this->assertSame(\PHP_INT_SIZE, \strlen($v->generate()));
+@@ -36,6 +38,7 @@ class RandomSecureEngineTest extends TestCase
+     /**
+      * @dataProvider secureEngineProvider
+      */
++    #[DataProvider('secureEngineProvider')]
+     public function testCloneIsNotAllowed($v)
+     {
+         $this->expectException(\Error::class);
+@@ -47,6 +50,7 @@ class RandomSecureEngineTest extends TestCase
+     /**
+      * @dataProvider secureEngineProvider
+      */
++    #[DataProvider('secureEngineProvider')]
+     public function testSerializeIsNotAllowed($v)
+     {
+         $this->expectException(\Exception::class);
+@@ -58,6 +62,7 @@ class RandomSecureEngineTest extends TestCase
+     /**
+      * @dataProvider secureEngineProvider
+      */
++    #[DataProvider('secureEngineProvider')]
+     public function testUnserializeIsNotAllowed($v)
+     {
+         $this->expectException(\Exception::class);
+diff --git a/tests/Php82/SensitiveParameterValuePolyfillTest.php b/tests/Php82/SensitiveParameterValuePolyfillTest.php
+index 2fdc38c..ecc3758 100644
+--- a/tests/Php82/SensitiveParameterValuePolyfillTest.php
++++ b/tests/Php82/SensitiveParameterValuePolyfillTest.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Php82;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use PHPUnit\Framework\TestCase;
+ use Symfony\Polyfill\Php82\SensitiveParameterValue as SensitiveParameterValuePolyfill;
+ 
+@@ -28,6 +29,7 @@ class SensitiveParameterValuePolyfillTest extends TestCase
+     /**
+      * @dataProvider sensitiveParameterValueProvider
+      */
++    #[DataProvider('sensitiveParameterValueProvider')]
+     public function testGetValue($v)
+     {
+         $this->assertSame('secret', $v->getValue());
+@@ -36,6 +38,7 @@ class SensitiveParameterValuePolyfillTest extends TestCase
+     /**
+      * @dataProvider sensitiveParameterValueProvider
+      */
++    #[DataProvider('sensitiveParameterValueProvider')]
+     public function testSerializeIsNotAllowed($v)
+     {
+         $this->expectException(\Exception::class);
+@@ -47,6 +50,7 @@ class SensitiveParameterValuePolyfillTest extends TestCase
+     /**
+      * @dataProvider sensitiveParameterValueProvider
+      */
++    #[DataProvider('sensitiveParameterValueProvider')]
+     public function testVarDumpDoesNotLeak($v)
+     {
+         ob_start();
+@@ -59,6 +63,7 @@ class SensitiveParameterValuePolyfillTest extends TestCase
+     /**
+      * @dataProvider sensitiveParameterValueProvider
+      */
++    #[DataProvider('sensitiveParameterValueProvider')]
+     public function testDebugZvalDumpDoesNotLeak($v)
+     {
+         ob_start();
+@@ -71,6 +76,7 @@ class SensitiveParameterValuePolyfillTest extends TestCase
+     /**
+      * @dataProvider sensitiveParameterValueProvider
+      */
++    #[DataProvider('sensitiveParameterValueProvider')]
+     public function testClone($v)
+     {
+         $clone = clone $v;
+diff --git a/tests/Php83/Php83Test.php b/tests/Php83/Php83Test.php
+index 2c704e7..d485f2a 100644
+--- a/tests/Php83/Php83Test.php
++++ b/tests/Php83/Php83Test.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Php83;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use PHPUnit\Framework\TestCase;
+ 
+ class Php83Test extends TestCase
+@@ -20,6 +21,7 @@ class Php83Test extends TestCase
+      *
+      * @dataProvider jsonDataProvider
+      */
++    #[DataProvider('jsonDataProvider')]
+     public function testJsonValidate(bool $valid, string $json, string $errorMessage = 'No error', int $depth = 512, int $options = 0)
+     {
+         $this->assertSame($valid, json_validate($json, $depth, $options));
+@@ -33,6 +35,9 @@ class Php83Test extends TestCase
+      * @dataProvider paddingEmojiProvider
+      * @dataProvider paddingEncodingProvider
+      */
++    #[DataProvider('paddingStringProvider')]
++    #[DataProvider('paddingEmojiProvider')]
++    #[DataProvider('paddingEncodingProvider')]
+     public function testMbStrPad(string $expectedResult, string $string, int $length, string $padString, int $padType, ?string $encoding = null)
+     {
+         $this->assertSame($expectedResult, mb_convert_encoding(mb_str_pad($string, $length, $padString, $padType, $encoding), 'UTF-8', $encoding ?? mb_internal_encoding()));
+@@ -43,10 +48,11 @@ class Php83Test extends TestCase
+      *
+      * @dataProvider mbStrPadInvalidArgumentsProvider
+      */
++    #[DataProvider('mbStrPadInvalidArgumentsProvider')]
+     public function testMbStrPadInvalidArguments(string $expectedError, string $string, int $length, string $padString, int $padType, ?string $encoding = null)
+     {
+         $this->expectException(\ValueError::class);
+-        $this->expectErrorMessage($expectedError);
++        $this->expectExceptionMessage($expectedError);
+ 
+         mb_str_pad($string, $length, $padString, $padType, $encoding);
+     }
+@@ -159,10 +165,11 @@ class Php83Test extends TestCase
+      *
+      * @dataProvider jsonInvalidOptionsProvider
+      */
++    #[DataProvider('jsonInvalidOptionsProvider')]
+     public function testJsonValidateInvalidOptionsProvided(int $depth, int $flags, string $expectedError)
+     {
+         $this->expectException(\ValueError::class);
+-        $this->expectErrorMessage($expectedError);
++        $this->expectExceptionMessage($expectedError);
+         json_validate('{}', $depth, $flags);
+     }
+ 
+@@ -209,6 +216,7 @@ class Php83Test extends TestCase
+      *
+      * @dataProvider strIncrementProvider
+      */
++    #[DataProvider('strIncrementProvider')]
+     public function testStrIncrement(string $result, string $string)
+     {
+         $this->assertSame($result, str_increment($string));
+@@ -219,6 +227,7 @@ class Php83Test extends TestCase
+      *
+      * @dataProvider strDecrementProvider
+      */
++    #[DataProvider('strDecrementProvider')]
+     public function testStrDecrement(string $result, string $string)
+     {
+         $this->assertSame($result, str_decrement($string));
+@@ -271,6 +280,7 @@ class Php83Test extends TestCase
+      *
+      * @dataProvider strInvalidIncrementProvider
+      */
++    #[DataProvider('strInvalidIncrementProvider')]
+     public function testInvalidStrIncrement(string $errorMessage, string $string)
+     {
+         $this->expectException(\ValueError::class);
+@@ -302,6 +312,7 @@ class Php83Test extends TestCase
+      *
+      * @dataProvider strInvalidDecrementProvider
+      */
++    #[DataProvider('strInvalidDecrementProvider')]
+     public function testInvalidStrDecrement(string $errorMessage, string $string)
+     {
+         $this->expectException(\ValueError::class);
+diff --git a/tests/Php84/Php84Test.php b/tests/Php84/Php84Test.php
+index a52901d..2645f8c 100644
+--- a/tests/Php84/Php84Test.php
++++ b/tests/Php84/Php84Test.php
+@@ -19,6 +19,7 @@ class Php84Test extends TestCase
+     /**
+      * @dataProvider ucFirstDataProvider
+      */
++    #[DataProvider('ucFirstDataProvider')]
+     public function testMbUcFirst(string $string, string $expected)
+     {
+         $this->assertSame($expected, mb_ucfirst($string));
+@@ -27,6 +28,7 @@ class Php84Test extends TestCase
+     /**
+      * @dataProvider lcFirstDataProvider
+      */
++    #[DataProvider('lcFirstDataProvider')]
+     public function testMbLcFirst(string $string, string $expected)
+     {
+         $this->assertSame($expected, mb_lcfirst($string));
+@@ -35,6 +37,7 @@ class Php84Test extends TestCase
+     /**
+      * @dataProvider arrayFindDataProvider
+      */
++    #[DataProvider('arrayFindDataProvider')]
+     public function testArrayFind(array $array, callable $callback, $expected)
+     {
+         $this->assertSame($expected, array_find($array, $callback));
+@@ -43,6 +46,7 @@ class Php84Test extends TestCase
+     /**
+      * @dataProvider arrayFindKeyDataProvider
+      */
++    #[DataProvider('arrayFindKeyDataProvider')]
+     public function testArrayFindKey(array $array, callable $callback, $expected)
+     {
+         $this->assertSame($expected, array_find_key($array, $callback));
+@@ -51,6 +55,7 @@ class Php84Test extends TestCase
+     /**
+      * @dataProvider arrayAnyDataProvider
+      */
++    #[DataProvider('arrayAnyDataProvider')]
+     public function testArrayAny(array $array, callable $callback, bool $expected)
+     {
+         $this->assertSame($expected, array_any($array, $callback));
+@@ -59,6 +64,7 @@ class Php84Test extends TestCase
+     /**
+      * @dataProvider arrayAllDataProvider
+      */
++    #[DataProvider('arrayAllDataProvider')]
+     public function testArrayAll(array $array, callable $callback, bool $expected)
+     {
+         $this->assertSame($expected, array_all($array, $callback));
+@@ -202,6 +208,7 @@ class Php84Test extends TestCase
+      *
+      * @dataProvider mbTrimProvider
+      */
++    #[DataProvider('mbTrimProvider')]
+     public function testMbTrim(string $expected, string $string, ?string $characters = null, ?string $encoding = null)
+     {
+         $this->assertSame($expected, mb_trim($string, $characters, $encoding));
+@@ -212,6 +219,7 @@ class Php84Test extends TestCase
+      *
+      * @dataProvider mbLTrimProvider
+      */
++    #[DataProvider('mbLTrimProvider')]
+     public function testMbLTrim(string $expected, string $string, ?string $characters = null, ?string $encoding = null)
+     {
+         $this->assertSame($expected, mb_ltrim($string, $characters, $encoding));
+@@ -222,6 +230,7 @@ class Php84Test extends TestCase
+      *
+      * @dataProvider mbRTrimProvider
+      */
++    #[DataProvider('mbRTrimProvider')]
+     public function testMbRTrim(string $expected, string $string, ?string $characters = null, ?string $encoding = null)
+     {
+         $this->assertSame($expected, mb_rtrim($string, $characters, $encoding));
+@@ -323,6 +332,7 @@ class Php84Test extends TestCase
+     /**
+      * @dataProvider fpowProvider
+      */
++    #[DataProvider('fpowProvider')]
+     public function testFpow(float $num, float $exponent, float $expected)
+     {
+         $result = fpow($num, $exponent);
+@@ -667,6 +677,7 @@ class Php84Test extends TestCase
+     /**
+      * @dataProvider graphemeStrSplitDataProvider
+      */
++    #[DataProvider('graphemeStrSplitDataProvider')]
+     public function testGraphemeStrSplit(string $string, int $length, array $expectedValues)
+     {
+         $this->assertSame($expectedValues, grapheme_str_split($string, $length));
+@@ -701,6 +712,7 @@ class Php84Test extends TestCase
+      *
+      * @dataProvider bcDivModProvider
+      */
++    #[DataProvider('bcDivModProvider')]
+     public function testBcDivMod(string $num1, string $num2, ?int $scale, array $expected)
+     {
+         $this->assertSame($expected, bcdivmod($num1, $num2, $scale));
+diff --git a/tests/Php85/Php85Test.php b/tests/Php85/Php85Test.php
+index 727fc28..cd102e4 100644
+--- a/tests/Php85/Php85Test.php
++++ b/tests/Php85/Php85Test.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Php85;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use PHPUnit\Framework\TestCase;
+ 
+ class Php85Test extends TestCase
+@@ -18,6 +19,7 @@ class Php85Test extends TestCase
+     /**
+     * @dataProvider provideHandler
+     */
++    #[DataProvider('provideHandler')]
+     public function testGetErrorHandler($expected, $handler): void
+     {
+         set_error_handler($handler);
+@@ -38,6 +40,7 @@ class Php85Test extends TestCase
+     /**
+     * @dataProvider provideHandler
+     */
++    #[DataProvider('provideHandler')]
+     public function testGetExceptionHandler($expected, $handler): void
+     {
+         set_exception_handler($handler);
+diff --git a/tests/Uuid/UuidTest.php b/tests/Uuid/UuidTest.php
+index c84bef9..ed085a0 100644
+--- a/tests/Uuid/UuidTest.php
++++ b/tests/Uuid/UuidTest.php
+@@ -11,6 +11,7 @@
+ 
+ namespace Symfony\Polyfill\Tests\Uuid;
+ 
++use PHPUnit\Framework\Attributes\DataProvider;
+ use PHPUnit\Framework\TestCase;
+ use Symfony\Polyfill\Uuid\Uuid;
+ 
+@@ -85,6 +86,7 @@ class UuidTest extends TestCase
+     }
+ 
+     /** @dataProvider provideCreateNoOverlapTests */
++    #[DataProvider('provideCreateNoOverlapTests')]
+     public function testCreateNoOverlap(int $type)
+     {
+         $uuids = [];
+@@ -111,6 +113,7 @@ class UuidTest extends TestCase
+     }
+ 
+     /** @dataProvider provideIsValidTest */
++    #[DataProvider('provideIsValidTest')]
+     public function testIsValid(bool $expected, string $uuid)
+     {
+         $this->assertSame($expected, uuid_is_valid($uuid));
+@@ -126,6 +129,7 @@ class UuidTest extends TestCase
+     }
+ 
+     /** @dataProvider provideCompareTest */
++    #[DataProvider('provideCompareTest')]
+     public function testCompare(int $expected, string $uuid1, string $uuid2)
+     {
+         $result = @uuid_compare($uuid1, $uuid2);
+@@ -168,6 +172,7 @@ class UuidTest extends TestCase
+     }
+ 
+     /** @dataProvider provideIsNullTest */
++    #[DataProvider('provideIsNullTest')]
+     public function testIsNull(bool $expected, string $uuid)
+     {
+         $this->assertSame($expected, @uuid_is_null($uuid));
+@@ -194,6 +199,7 @@ class UuidTest extends TestCase
+     }
+ 
+     /** @dataProvider provideTypeTest */
++    #[DataProvider('provideTypeTest')]
+     public function testType(int $expected, string $uuid)
+     {
+         $this->assertSame($expected, @uuid_type($uuid));
+@@ -219,6 +225,7 @@ class UuidTest extends TestCase
+     }
+ 
+     /** @dataProvider provideVariantTest */
++    #[DataProvider('provideVariantTest')]
+     public function testVariant(int $expected, string $uuid)
+     {
+         $this->assertSame($expected, @uuid_variant($uuid));
+@@ -243,6 +250,7 @@ class UuidTest extends TestCase
+     }
+ 
+     /** @dataProvider provideTimeTest */
++    #[DataProvider('provideTimeTest')]
+     public function testTime(int $expected, string $uuid)
+     {
+         $this->assertSame($expected, @uuid_time($uuid));
+@@ -260,6 +268,7 @@ class UuidTest extends TestCase
+     /**
+      * @dataProvider provideInvalidTimeTest
+      */
++    #[DataProvider('provideInvalidTimeTest')]
+     public function testTimeWithInvalidUuid(string $uuid)
+     {
+         if (80000 <= \PHP_VERSION_ID) {
+@@ -279,6 +288,7 @@ class UuidTest extends TestCase
+     }
+ 
+     /** @dataProvider provideMacTest */
++    #[DataProvider('provideMacTest')]
+     public function testMac(string $expected, string $uuid)
+     {
+         $this->assertSame($expected, @uuid_mac($uuid));
+@@ -296,6 +306,7 @@ class UuidTest extends TestCase
+     /**
+      * @dataProvider provideInvalidMacTest
+      */
++    #[DataProvider('provideInvalidMacTest')]
+     public function testMacWithInvalidUuid(string $uuid)
+     {
+         if (80000 <= \PHP_VERSION_ID) {
+@@ -316,6 +327,7 @@ class UuidTest extends TestCase
+     }
+ 
+     /** @dataProvider provideParseTest */
++    #[DataProvider('provideParseTest')]
+     public function testParse(string $expected, string $uuid)
+     {
+         $out = bin2hex(@uuid_parse($uuid));
+@@ -343,6 +355,7 @@ class UuidTest extends TestCase
+     }
+ 
+     /** @dataProvider provideUnparseTest */
++    #[DataProvider('provideUnparseTest')]
+     public function testUnparse(string $expected, string $uuid)
+     {
+         $this->assertSame($expected, @uuid_unparse($uuid));
+@@ -359,6 +372,7 @@ class UuidTest extends TestCase
+     /**
+      * @dataProvider provideInvalidUnparseTest
+      */
++    #[DataProvider('provideInvalidUnparseTest')]
+     public function testUnparseWithInvalidUuid(string $uuid)
+     {
+         if (80000 <= \PHP_VERSION_ID) {
diff -pruN 1.31.0-5/debian/patches/0004-Comment-away-currently-failing-data-on-Debian.patch 1.33.0-2/debian/patches/0004-Comment-away-currently-failing-data-on-Debian.patch
--- 1.31.0-5/debian/patches/0004-Comment-away-currently-failing-data-on-Debian.patch	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/debian/patches/0004-Comment-away-currently-failing-data-on-Debian.patch	2025-08-24 21:29:49.000000000 +0000
@@ -0,0 +1,660 @@
+From: =?utf-8?q?David_Pr=C3=A9vot?= <taffit@debian.org>
+Date: Sun, 4 May 2025 14:03:21 +0200
+Subject: Comment away currently failing data on Debian
+
+Forwarded: not-needed
+---
+ tests/Intl/Idn/IdnTest.php      |   2 +-
+ tests/Intl/Idn/IdnaTestV2.txt   | 340 ++++++++++++++++++++--------------------
+ tests/Mbstring/MbstringTest.php |   2 +-
+ 3 files changed, 172 insertions(+), 172 deletions(-)
+
+diff --git a/tests/Intl/Idn/IdnTest.php b/tests/Intl/Idn/IdnTest.php
+index 0a6e2c7..b7be51c 100644
+--- a/tests/Intl/Idn/IdnTest.php
++++ b/tests/Intl/Idn/IdnTest.php
+@@ -358,7 +358,7 @@ class IdnTest extends TestCase
+     public static function captialSharpSProvider()
+     {
+         return [
+-            ['Faß.de', 'fass.de', \IDNA_DEFAULT],
++            //['Faß.de', 'fass.de', \IDNA_DEFAULT],
+             ['Faß.de', 'faß.de', \IDNA_NONTRANSITIONAL_TO_UNICODE],
+         ];
+     }
+diff --git a/tests/Intl/Idn/IdnaTestV2.txt b/tests/Intl/Idn/IdnaTestV2.txt
+index 28c5b64..9c8d29b 100644
+--- a/tests/Intl/Idn/IdnaTestV2.txt
++++ b/tests/Intl/Idn/IdnaTestV2.txt
+@@ -564,11 +564,11 @@ xn--6g3a1x434z.xn--3xa827dhpae6345i; 走𐹧谷.ᅟ󠗰ςႭ; [B5, V6]; xn--6g3a
+ ⾛𐹧⾕.ᅟ󠗰ΣႭ; 走𐹧谷.ᅟ󠗰σႭ; [B5, P1, V6]; xn--6g3a1x434z.xn--4xa627dhpae6345i; ; ;  # 走𐹧谷.σႭ
+ ⾛𐹧⾕.ᅟ󠗰σⴍ; 走𐹧谷.ᅟ󠗰σⴍ; [B5, P1, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ;  # 走𐹧谷.σⴍ
+ ⾛𐹧⾕.ᅟ󠗰Σⴍ; 走𐹧谷.ᅟ󠗰σⴍ; [B5, P1, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ;  # 走𐹧谷.σⴍ
+-‍≠ᢙ≯.솣-ᡴႠ; ; [C2, P1, V6]; xn--jbf929a90b0b.xn----6zg521d196p; ; xn--jbf911clb.xn----6zg521d196p; [P1, V6] # ≠ᢙ≯.솣-ᡴႠ
+-‍≠ᢙ≯.솣-ᡴႠ; ‍≠ᢙ≯.솣-ᡴႠ; [C2, P1, V6]; xn--jbf929a90b0b.xn----6zg521d196p; ; xn--jbf911clb.xn----6zg521d196p; [P1, V6] # ≠ᢙ≯.솣-ᡴႠ
+-‍≠ᢙ≯.솣-ᡴⴀ; ‍≠ᢙ≯.솣-ᡴⴀ; [C2, P1, V6]; xn--jbf929a90b0b.xn----p9j493ivi4l; ; xn--jbf911clb.xn----p9j493ivi4l; [P1, V6] # ≠ᢙ≯.솣-ᡴⴀ
+-‍≠ᢙ≯.솣-ᡴⴀ; ; [C2, P1, V6]; xn--jbf929a90b0b.xn----p9j493ivi4l; ; xn--jbf911clb.xn----p9j493ivi4l; [P1, V6] # ≠ᢙ≯.솣-ᡴⴀ
+-xn--jbf911clb.xn----p9j493ivi4l; ≠ᢙ≯.솣-ᡴⴀ; [V6]; xn--jbf911clb.xn----p9j493ivi4l; ; ;  # ≠ᢙ≯.솣-ᡴⴀ
++#‍≠ᢙ≯.솣-ᡴႠ; ; [C2, P1, V6]; xn--jbf929a90b0b.xn----6zg521d196p; ; xn--jbf911clb.xn----6zg521d196p; [P1, V6] # ≠ᢙ≯.솣-ᡴႠ
++#‍≠ᢙ≯.솣-ᡴႠ; ‍≠ᢙ≯.솣-ᡴႠ; [C2, P1, V6]; xn--jbf929a90b0b.xn----6zg521d196p; ; xn--jbf911clb.xn----6zg521d196p; [P1, V6] # ≠ᢙ≯.솣-ᡴႠ
++#‍≠ᢙ≯.솣-ᡴⴀ; ‍≠ᢙ≯.솣-ᡴⴀ; [C2, P1, V6]; xn--jbf929a90b0b.xn----p9j493ivi4l; ; xn--jbf911clb.xn----p9j493ivi4l; [P1, V6] # ≠ᢙ≯.솣-ᡴⴀ
++#‍≠ᢙ≯.솣-ᡴⴀ; ; [C2, P1, V6]; xn--jbf929a90b0b.xn----p9j493ivi4l; ; xn--jbf911clb.xn----p9j493ivi4l; [P1, V6] # ≠ᢙ≯.솣-ᡴⴀ
++#xn--jbf911clb.xn----p9j493ivi4l; ≠ᢙ≯.솣-ᡴⴀ; [V6]; xn--jbf911clb.xn----p9j493ivi4l; ; ;  # ≠ᢙ≯.솣-ᡴⴀ
+ xn--jbf929a90b0b.xn----p9j493ivi4l; ‍≠ᢙ≯.솣-ᡴⴀ; [C2, V6]; xn--jbf929a90b0b.xn----p9j493ivi4l; ; ;  # ≠ᢙ≯.솣-ᡴⴀ
+ xn--jbf911clb.xn----6zg521d196p; ≠ᢙ≯.솣-ᡴႠ; [V6]; xn--jbf911clb.xn----6zg521d196p; ; ;  # ≠ᢙ≯.솣-ᡴႠ
+ xn--jbf929a90b0b.xn----6zg521d196p; ‍≠ᢙ≯.솣-ᡴႠ; [C2, V6]; xn--jbf929a90b0b.xn----6zg521d196p; ; ;  # ≠ᢙ≯.솣-ᡴႠ
+@@ -857,20 +857,20 @@ xn--osd971cpx70btgt8b.-; ᭄ᅟ𞷿򃀍.-; [B1, B5, V3, V5, V6]; xn--osd971cpx70
+ ‌。͔; ‌.͔; [C1, V5]; xn--0ug.xn--yua; ; .xn--yua; [V5, A4_2] # .͔
+ .xn--yua; .͔; [V5, X4_2]; .xn--yua; [V5, A4_2]; ;  # .͔
+ xn--0ug.xn--yua; ‌.͔; [C1, V5]; xn--0ug.xn--yua; ; ;  # .͔
+-𞤥󠅮．ᡄႮ; 𞤥.ᡄႮ; [P1, V6]; xn--de6h.xn--mnd799a; ; ;  # 𞤥.ᡄႮ
+-𞤥󠅮.ᡄႮ; 𞤥.ᡄႮ; [P1, V6]; xn--de6h.xn--mnd799a; ; ;  # 𞤥.ᡄႮ
++#𞤥󠅮．ᡄႮ; 𞤥.ᡄႮ; [P1, V6]; xn--de6h.xn--mnd799a; ; ;  # 𞤥.ᡄႮ
++#𞤥󠅮.ᡄႮ; 𞤥.ᡄႮ; [P1, V6]; xn--de6h.xn--mnd799a; ; ;  # 𞤥.ᡄႮ
+ 𞤥󠅮.ᡄⴎ; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ;  # 𞤥.ᡄⴎ
+-𞤃󠅮.ᡄႮ; 𞤥.ᡄႮ; [P1, V6]; xn--de6h.xn--mnd799a; ; ;  # 𞤥.ᡄႮ
++#𞤃󠅮.ᡄႮ; 𞤥.ᡄႮ; [P1, V6]; xn--de6h.xn--mnd799a; ; ;  # 𞤥.ᡄႮ
+ 𞤃󠅮.ᡄⴎ; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ;  # 𞤥.ᡄⴎ
+ xn--de6h.xn--37e857h; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ;  # 𞤥.ᡄⴎ
+ 𞤥.ᡄⴎ; ; ; xn--de6h.xn--37e857h; ; ;  # 𞤥.ᡄⴎ
+-𞤃.ᡄႮ; 𞤥.ᡄႮ; [P1, V6]; xn--de6h.xn--mnd799a; ; ;  # 𞤥.ᡄႮ
++#𞤃.ᡄႮ; 𞤥.ᡄႮ; [P1, V6]; xn--de6h.xn--mnd799a; ; ;  # 𞤥.ᡄႮ
+ 𞤃.ᡄⴎ; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ;  # 𞤥.ᡄⴎ
+ xn--de6h.xn--mnd799a; 𞤥.ᡄႮ; [V6]; xn--de6h.xn--mnd799a; ; ;  # 𞤥.ᡄႮ
+ 𞤥󠅮．ᡄⴎ; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ;  # 𞤥.ᡄⴎ
+-𞤃󠅮．ᡄႮ; 𞤥.ᡄႮ; [P1, V6]; xn--de6h.xn--mnd799a; ; ;  # 𞤥.ᡄႮ
++#𞤃󠅮．ᡄႮ; 𞤥.ᡄႮ; [P1, V6]; xn--de6h.xn--mnd799a; ; ;  # 𞤥.ᡄႮ
+ 𞤃󠅮．ᡄⴎ; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ;  # 𞤥.ᡄⴎ
+-𞤥.ᡄႮ; ; [P1, V6]; xn--de6h.xn--mnd799a; ; ;  # 𞤥.ᡄႮ
++#𞤥.ᡄႮ; ; [P1, V6]; xn--de6h.xn--mnd799a; ; ;  # 𞤥.ᡄႮ
+ 𞤧𝨨Ξ．𪺏㛨❸; 𞤧𝨨ξ.𪺏㛨❸; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ;  # 𞤧𝨨ξ.𪺏㛨❸
+ 𞤧𝨨Ξ.𪺏㛨❸; 𞤧𝨨ξ.𪺏㛨❸; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ;  # 𞤧𝨨ξ.𪺏㛨❸
+ 𞤧𝨨ξ.𪺏㛨❸; ; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ;  # 𞤧𝨨ξ.𪺏㛨❸
+@@ -1140,15 +1140,15 @@ xn--cib675m.xn--1zf13512buy41d; ٣⒖.󱅉𽷛᯳; [B1, V6]; xn--cib675m.xn--1zf
+ xn--cib152kwgd.xn--1zf13512buy41d; ‌٣⒖.󱅉𽷛᯳; [B1, C1, V6]; xn--cib152kwgd.xn--1zf13512buy41d; ; ;  # ٣⒖.᯳
+ ᯳.-逋񳦭󙙮; ; [P1, V3, V5, V6]; xn--1zf.xn----483d46987byr50b; ; ;  # ᯳.-逋
+ xn--1zf.xn----483d46987byr50b; ᯳.-逋񳦭󙙮; [V3, V5, V6]; xn--1zf.xn----483d46987byr50b; ; ;  # ᯳.-逋
+-ݖ。ㅤ‍ς; ݖ.ㅤ‍ς; [C2, P1, V6]; xn--9ob.xn--3xa995lq2l; ; xn--9ob.xn--4xa574u; [P1, V6] # ݖ.ς
+-ݖ。ᅠ‍ς; ݖ.ᅠ‍ς; [C2, P1, V6]; xn--9ob.xn--3xa580ebol; ; xn--9ob.xn--4xa380e; [P1, V6] # ݖ.ς
+-ݖ。ᅠ‍Σ; ݖ.ᅠ‍σ; [C2, P1, V6]; xn--9ob.xn--4xa380ebol; ; xn--9ob.xn--4xa380e; [P1, V6] # ݖ.σ
+-ݖ。ᅠ‍σ; ݖ.ᅠ‍σ; [C2, P1, V6]; xn--9ob.xn--4xa380ebol; ; xn--9ob.xn--4xa380e; [P1, V6] # ݖ.σ
++#ݖ。ㅤ‍ς; ݖ.ㅤ‍ς; [C2, P1, V6]; xn--9ob.xn--3xa995lq2l; ; xn--9ob.xn--4xa574u; [P1, V6] # ݖ.ς
++#ݖ。ᅠ‍ς; ݖ.ᅠ‍ς; [C2, P1, V6]; xn--9ob.xn--3xa580ebol; ; xn--9ob.xn--4xa380e; [P1, V6] # ݖ.ς
++#ݖ。ᅠ‍Σ; ݖ.ᅠ‍σ; [C2, P1, V6]; xn--9ob.xn--4xa380ebol; ; xn--9ob.xn--4xa380e; [P1, V6] # ݖ.σ
++#ݖ。ᅠ‍σ; ݖ.ᅠ‍σ; [C2, P1, V6]; xn--9ob.xn--4xa380ebol; ; xn--9ob.xn--4xa380e; [P1, V6] # ݖ.σ
+ xn--9ob.xn--4xa380e; ݖ.ᅠσ; [V6]; xn--9ob.xn--4xa380e; ; ;  # ݖ.σ
+ xn--9ob.xn--4xa380ebol; ݖ.ᅠ‍σ; [C2, V6]; xn--9ob.xn--4xa380ebol; ; ;  # ݖ.σ
+ xn--9ob.xn--3xa580ebol; ݖ.ᅠ‍ς; [C2, V6]; xn--9ob.xn--3xa580ebol; ; ;  # ݖ.ς
+-ݖ。ㅤ‍Σ; ݖ.ㅤ‍σ; [C2, P1, V6]; xn--9ob.xn--4xa795lq2l; ; xn--9ob.xn--4xa574u; [P1, V6] # ݖ.σ
+-ݖ。ㅤ‍σ; ݖ.ㅤ‍σ; [C2, P1, V6]; xn--9ob.xn--4xa795lq2l; ; xn--9ob.xn--4xa574u; [P1, V6] # ݖ.σ
++#ݖ。ㅤ‍Σ; ݖ.ㅤ‍σ; [C2, P1, V6]; xn--9ob.xn--4xa795lq2l; ; xn--9ob.xn--4xa574u; [P1, V6] # ݖ.σ
++#ݖ。ㅤ‍σ; ݖ.ㅤ‍σ; [C2, P1, V6]; xn--9ob.xn--4xa795lq2l; ; xn--9ob.xn--4xa574u; [P1, V6] # ݖ.σ
+ xn--9ob.xn--4xa574u; ݖ.ㅤσ; [V6]; xn--9ob.xn--4xa574u; ; ;  # ݖ.σ
+ xn--9ob.xn--4xa795lq2l; ݖ.ㅤ‍σ; [C2, V6]; xn--9ob.xn--4xa795lq2l; ; ;  # ݖ.σ
+ xn--9ob.xn--3xa995lq2l; ݖ.ㅤ‍ς; [C2, V6]; xn--9ob.xn--3xa995lq2l; ; ;  # ݖ.ς
+@@ -1236,24 +1236,24 @@ xn--hdhx157g68o0g.xn--c0e65eu616c34o7a; ≯𑜫󠭇.᜴񒞤𑍬ᢧ; [V5, V6]; xn
+ ᷛ򎐙ⴗ쏔。ށ; ᷛ򎐙ⴗ쏔.ށ; [B1, P1, V5, V6]; xn--zegy26dw47iy6w2f.xn--iqb; ; ;  # ᷛⴗ쏔.ށ
+ xn--zegy26dw47iy6w2f.xn--iqb; ᷛ򎐙ⴗ쏔.ށ; [B1, V5, V6]; xn--zegy26dw47iy6w2f.xn--iqb; ; ;  # ᷛⴗ쏔.ށ
+ xn--vnd148d733ky6n9e.xn--iqb; ᷛ򎐙Ⴗ쏔.ށ; [B1, V5, V6]; xn--vnd148d733ky6n9e.xn--iqb; ; ;  # ᷛႷ쏔.ށ
+-ß｡𐋳Ⴌྸ; ß.𐋳Ⴌྸ; [P1, V6]; xn--zca.xn--lgd10cu829c; ; ss.xn--lgd10cu829c;  # ß.𐋳Ⴌྸ
+-ß。𐋳Ⴌྸ; ß.𐋳Ⴌྸ; [P1, V6]; xn--zca.xn--lgd10cu829c; ; ss.xn--lgd10cu829c;  # ß.𐋳Ⴌྸ
++#ß｡𐋳Ⴌྸ; ß.𐋳Ⴌྸ; [P1, V6]; xn--zca.xn--lgd10cu829c; ; ss.xn--lgd10cu829c;  # ß.𐋳Ⴌྸ
++#ß。𐋳Ⴌྸ; ß.𐋳Ⴌྸ; [P1, V6]; xn--zca.xn--lgd10cu829c; ; ss.xn--lgd10cu829c;  # ß.𐋳Ⴌྸ
+ ß。𐋳ⴌྸ; ß.𐋳ⴌྸ; ; xn--zca.xn--lgd921mvv0m; ; ss.xn--lgd921mvv0m;  # ß.𐋳ⴌྸ
+-SS。𐋳Ⴌྸ; ss.𐋳Ⴌྸ; [P1, V6]; ss.xn--lgd10cu829c; ; ;  # ss.𐋳Ⴌྸ
++#SS。𐋳Ⴌྸ; ss.𐋳Ⴌྸ; [P1, V6]; ss.xn--lgd10cu829c; ; ;  # ss.𐋳Ⴌྸ
+ ss。𐋳ⴌྸ; ss.𐋳ⴌྸ; ; ss.xn--lgd921mvv0m; ; ;  # ss.𐋳ⴌྸ
+-Ss。𐋳Ⴌྸ; ss.𐋳Ⴌྸ; [P1, V6]; ss.xn--lgd10cu829c; ; ;  # ss.𐋳Ⴌྸ
++#Ss。𐋳Ⴌྸ; ss.𐋳Ⴌྸ; [P1, V6]; ss.xn--lgd10cu829c; ; ;  # ss.𐋳Ⴌྸ
+ ss.xn--lgd10cu829c; ss.𐋳Ⴌྸ; [V6]; ss.xn--lgd10cu829c; ; ;  # ss.𐋳Ⴌྸ
+ ss.xn--lgd921mvv0m; ss.𐋳ⴌྸ; ; ss.xn--lgd921mvv0m; ; ;  # ss.𐋳ⴌྸ
+ ss.𐋳ⴌྸ; ; ; ss.xn--lgd921mvv0m; ; ;  # ss.𐋳ⴌྸ
+-SS.𐋳Ⴌྸ; ss.𐋳Ⴌྸ; [P1, V6]; ss.xn--lgd10cu829c; ; ;  # ss.𐋳Ⴌྸ
+-Ss.𐋳Ⴌྸ; ss.𐋳Ⴌྸ; [P1, V6]; ss.xn--lgd10cu829c; ; ;  # ss.𐋳Ⴌྸ
++#SS.𐋳Ⴌྸ; ss.𐋳Ⴌྸ; [P1, V6]; ss.xn--lgd10cu829c; ; ;  # ss.𐋳Ⴌྸ
++#Ss.𐋳Ⴌྸ; ss.𐋳Ⴌྸ; [P1, V6]; ss.xn--lgd10cu829c; ; ;  # ss.𐋳Ⴌྸ
+ xn--zca.xn--lgd921mvv0m; ß.𐋳ⴌྸ; ; xn--zca.xn--lgd921mvv0m; ; ;  # ß.𐋳ⴌྸ
+ ß.𐋳ⴌྸ; ; ; xn--zca.xn--lgd921mvv0m; ; ss.xn--lgd921mvv0m;  # ß.𐋳ⴌྸ
+ xn--zca.xn--lgd10cu829c; ß.𐋳Ⴌྸ; [V6]; xn--zca.xn--lgd10cu829c; ; ;  # ß.𐋳Ⴌྸ
+ ß｡𐋳ⴌྸ; ß.𐋳ⴌྸ; ; xn--zca.xn--lgd921mvv0m; ; ss.xn--lgd921mvv0m;  # ß.𐋳ⴌྸ
+-SS｡𐋳Ⴌྸ; ss.𐋳Ⴌྸ; [P1, V6]; ss.xn--lgd10cu829c; ; ;  # ss.𐋳Ⴌྸ
++#SS｡𐋳Ⴌྸ; ss.𐋳Ⴌྸ; [P1, V6]; ss.xn--lgd10cu829c; ; ;  # ss.𐋳Ⴌྸ
+ ss｡𐋳ⴌྸ; ss.𐋳ⴌྸ; ; ss.xn--lgd921mvv0m; ; ;  # ss.𐋳ⴌྸ
+-Ss｡𐋳Ⴌྸ; ss.𐋳Ⴌྸ; [P1, V6]; ss.xn--lgd10cu829c; ; ;  # ss.𐋳Ⴌྸ
++#Ss｡𐋳Ⴌྸ; ss.𐋳Ⴌྸ; [P1, V6]; ss.xn--lgd10cu829c; ; ;  # ss.𐋳Ⴌྸ
+ -ڞ𐶡.‌⾝্; -ڞ𐶡.‌身্; [B1, C1, P1, V3, V6]; xn----stc7013r.xn--b7b305imj2f; ; xn----stc7013r.xn--b7b1419d; [B1, P1, V3, V6] # -ڞ.身্
+ -ڞ𐶡.‌身্; ; [B1, C1, P1, V3, V6]; xn----stc7013r.xn--b7b305imj2f; ; xn----stc7013r.xn--b7b1419d; [B1, P1, V3, V6] # -ڞ.身্
+ xn----stc7013r.xn--b7b1419d; -ڞ𐶡.身্; [B1, V3, V6]; xn----stc7013r.xn--b7b1419d; ; ;  # -ڞ.身্
+@@ -1910,12 +1910,12 @@ xn--fuix729epewf.xn--xsh5029b6e77i; 𞤴⦉𐹺.꠆⒌󘤸; [B1, V5, V6]; xn--fu
+ 󠄸0。𑖿‌𐦂‍; 0.𑖿‌𐦂‍; [B1, C2, V5]; 0.xn--0ugc8040p9hk; ; 0.xn--mn9cz2s; [B1, V5] # 0.𑖿𐦂
+ 0.xn--mn9cz2s; 0.𑖿𐦂; [B1, V5]; 0.xn--mn9cz2s; ; ;  # 0.𑖿𐦂
+ 0.xn--0ugc8040p9hk; 0.𑖿‌𐦂‍; [B1, C2, V5]; 0.xn--0ugc8040p9hk; ; ;  # 0.𑖿𐦂
+-Ⴚ𐋸󠄄。𝟝ퟶ်; Ⴚ𐋸.5ퟶ်; [P1, V6]; xn--ynd2415j.xn--5-dug9054m; ; ;  # Ⴚ𐋸.5ퟶ်
+-Ⴚ𐋸󠄄。5ퟶ်; Ⴚ𐋸.5ퟶ်; [P1, V6]; xn--ynd2415j.xn--5-dug9054m; ; ;  # Ⴚ𐋸.5ퟶ်
++#Ⴚ𐋸󠄄。𝟝ퟶ်; Ⴚ𐋸.5ퟶ်; [P1, V6]; xn--ynd2415j.xn--5-dug9054m; ; ;  # Ⴚ𐋸.5ퟶ်
++#Ⴚ𐋸󠄄。5ퟶ်; Ⴚ𐋸.5ퟶ်; [P1, V6]; xn--ynd2415j.xn--5-dug9054m; ; ;  # Ⴚ𐋸.5ퟶ်
+ ⴚ𐋸󠄄。5ퟶ်; ⴚ𐋸.5ퟶ်; ; xn--ilj2659d.xn--5-dug9054m; ; ;  # ⴚ𐋸.5ퟶ်
+ xn--ilj2659d.xn--5-dug9054m; ⴚ𐋸.5ퟶ်; ; xn--ilj2659d.xn--5-dug9054m; ; ;  # ⴚ𐋸.5ퟶ်
+ ⴚ𐋸.5ퟶ်; ; ; xn--ilj2659d.xn--5-dug9054m; ; ;  # ⴚ𐋸.5ퟶ်
+-Ⴚ𐋸.5ퟶ်; ; [P1, V6]; xn--ynd2415j.xn--5-dug9054m; ; ;  # Ⴚ𐋸.5ퟶ်
++#Ⴚ𐋸.5ퟶ်; ; [P1, V6]; xn--ynd2415j.xn--5-dug9054m; ; ;  # Ⴚ𐋸.5ퟶ်
+ xn--ynd2415j.xn--5-dug9054m; Ⴚ𐋸.5ퟶ်; [V6]; xn--ynd2415j.xn--5-dug9054m; ; ;  # Ⴚ𐋸.5ퟶ်
+ ⴚ𐋸󠄄。𝟝ퟶ်; ⴚ𐋸.5ퟶ်; ; xn--ilj2659d.xn--5-dug9054m; ; ;  # ⴚ𐋸.5ퟶ်
+ ‍-ᠹ﹪.ᷡᤢ; ; [C2, P1, V5, V6]; xn----c6j614b1z4v.xn--gff52t; ; xn----c6jx047j.xn--gff52t; [P1, V3, V5, V6] # -ᠹ﹪.ᷡᤢ
+@@ -1924,9 +1924,9 @@ xn---%-u4o.xn--gff52t; -ᠹ%.ᷡᤢ; [P1, V3, V5, V6]; xn---%-u4o.xn--gff52t; ;
+ xn---%-u4oy48b.xn--gff52t; ‍-ᠹ%.ᷡᤢ; [C2, P1, V5, V6]; xn---%-u4oy48b.xn--gff52t; ; ;  # -ᠹ%.ᷡᤢ
+ xn----c6jx047j.xn--gff52t; -ᠹ﹪.ᷡᤢ; [V3, V5, V6]; xn----c6jx047j.xn--gff52t; ; ;  # -ᠹ﹪.ᷡᤢ
+ xn----c6j614b1z4v.xn--gff52t; ‍-ᠹ﹪.ᷡᤢ; [C2, V5, V6]; xn----c6j614b1z4v.xn--gff52t; ; ;  # -ᠹ﹪.ᷡᤢ
+-≠.ᠿ; ; [P1, V6]; xn--1ch.xn--y7e; ; ;  # ≠.ᠿ
+-≠.ᠿ; ≠.ᠿ; [P1, V6]; xn--1ch.xn--y7e; ; ;  # ≠.ᠿ
+-xn--1ch.xn--y7e; ≠.ᠿ; [V6]; xn--1ch.xn--y7e; ; ;  # ≠.ᠿ
++#≠.ᠿ; ; [P1, V6]; xn--1ch.xn--y7e; ; ;  # ≠.ᠿ
++#≠.ᠿ; ≠.ᠿ; [P1, V6]; xn--1ch.xn--y7e; ; ;  # ≠.ᠿ
++#xn--1ch.xn--y7e; ≠.ᠿ; [V6]; xn--1ch.xn--y7e; ; ;  # ≠.ᠿ
+ ܣ֣｡㌪; ܣ֣.ハイツ; ; xn--ucb18e.xn--eck4c5a; ; ;  # ܣ֣.ハイツ
+ ܣ֣。ハイツ; ܣ֣.ハイツ; ; xn--ucb18e.xn--eck4c5a; ; ;  # ܣ֣.ハイツ
+ xn--ucb18e.xn--eck4c5a; ܣ֣.ハイツ; ; xn--ucb18e.xn--eck4c5a; ; ;  # ܣ֣.ハイツ
+@@ -2317,11 +2317,11 @@ xn--u836e.xn----qfa750ve7b; 󠕏.-ß‌≠; [C1, V3, V6]; xn--u836e.xn----qfa750
+ 󠕏．-ss‌≠; 󠕏.-ss‌≠; [C1, P1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ss≠
+ 󠕏．-Ss‌≠; 󠕏.-ss‌≠; [C1, P1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ss≠
+ 󠕏．-Ss‌≠; 󠕏.-ss‌≠; [C1, P1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ss≠
+-ᡙ‌｡≯𐋲≠; ᡙ‌.≯𐋲≠; [C1, P1, V6]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [P1, V6] # ᡙ.≯𐋲≠
+-ᡙ‌｡≯𐋲≠; ᡙ‌.≯𐋲≠; [C1, P1, V6]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [P1, V6] # ᡙ.≯𐋲≠
+-ᡙ‌。≯𐋲≠; ᡙ‌.≯𐋲≠; [C1, P1, V6]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [P1, V6] # ᡙ.≯𐋲≠
+-ᡙ‌。≯𐋲≠; ᡙ‌.≯𐋲≠; [C1, P1, V6]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [P1, V6] # ᡙ.≯𐋲≠
+-xn--p8e.xn--1ch3a7084l; ᡙ.≯𐋲≠; [V6]; xn--p8e.xn--1ch3a7084l; ; ;  # ᡙ.≯𐋲≠
++#ᡙ‌｡≯𐋲≠; ᡙ‌.≯𐋲≠; [C1, P1, V6]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [P1, V6] # ᡙ.≯𐋲≠
++#ᡙ‌｡≯𐋲≠; ᡙ‌.≯𐋲≠; [C1, P1, V6]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [P1, V6] # ᡙ.≯𐋲≠
++#ᡙ‌。≯𐋲≠; ᡙ‌.≯𐋲≠; [C1, P1, V6]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [P1, V6] # ᡙ.≯𐋲≠
++#ᡙ‌。≯𐋲≠; ᡙ‌.≯𐋲≠; [C1, P1, V6]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [P1, V6] # ᡙ.≯𐋲≠
++#xn--p8e.xn--1ch3a7084l; ᡙ.≯𐋲≠; [V6]; xn--p8e.xn--1ch3a7084l; ; ;  # ᡙ.≯𐋲≠
+ xn--p8e650b.xn--1ch3a7084l; ᡙ‌.≯𐋲≠; [C1, V6]; xn--p8e650b.xn--1ch3a7084l; ; ;  # ᡙ.≯𐋲≠
+ 𐹧𞲄󠁭񆼩。͎🄀; 𐹧𞲄󠁭񆼩.͎🄀; [B1, P1, V5, V6]; xn--fo0dw409aq58qrn69d.xn--sua6883w; ; ;  # 𐹧𞲄.͎🄀
+ 𐹧𞲄󠁭񆼩。͎0.; 𐹧𞲄󠁭񆼩.͎0.; [B1, P1, V5, V6]; xn--fo0dw409aq58qrn69d.xn--0-bgb.; ; ;  # 𐹧𞲄.͎0.
+@@ -2455,18 +2455,18 @@ xn--4xa76659r.xn--ss-d64i8755h; 󾬨σ.𞶙녫ss; [B2, B3, V6]; xn--4xa76659r.xn
+ 󾬨σ.𞶙녫ß; 󾬨σ.𞶙녫ß; [B2, B3, P1, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h;  # σ.녫ß
+ xn--4xa76659r.xn--zca5051g4h4i; 󾬨σ.𞶙녫ß; [B2, B3, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; ;  # σ.녫ß
+ xn--3xa96659r.xn--zca5051g4h4i; 󾬨ς.𞶙녫ß; [B2, B3, V6]; xn--3xa96659r.xn--zca5051g4h4i; ; ;  # ς.녫ß
+-Ⅎ្‍｡≠‍‌; Ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [P1, V6] # Ⅎ្.≠
+-Ⅎ្‍｡≠‍‌; Ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [P1, V6] # Ⅎ្.≠
+-Ⅎ្‍。≠‍‌; Ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [P1, V6] # Ⅎ្.≠
+-Ⅎ្‍。≠‍‌; Ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [P1, V6] # Ⅎ្.≠
+-ⅎ្‍。≠‍‌; ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [P1, V6] # ⅎ្.≠
+-ⅎ្‍。≠‍‌; ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [P1, V6] # ⅎ្.≠
+-xn--u4e969b.xn--1ch; ⅎ្.≠; [V6]; xn--u4e969b.xn--1ch; ; ;  # ⅎ្.≠
++#Ⅎ្‍｡≠‍‌; Ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [P1, V6] # Ⅎ្.≠
++#Ⅎ្‍｡≠‍‌; Ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [P1, V6] # Ⅎ្.≠
++#Ⅎ្‍。≠‍‌; Ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [P1, V6] # Ⅎ្.≠
++#Ⅎ្‍。≠‍‌; Ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [P1, V6] # Ⅎ្.≠
++#ⅎ្‍。≠‍‌; ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [P1, V6] # ⅎ្.≠
++#ⅎ្‍。≠‍‌; ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [P1, V6] # ⅎ្.≠
++#xn--u4e969b.xn--1ch; ⅎ្.≠; [V6]; xn--u4e969b.xn--1ch; ; ;  # ⅎ្.≠
+ xn--u4e823bq1a.xn--0ugb89o; ⅎ្‍.≠‍‌; [C1, C2, V6]; xn--u4e823bq1a.xn--0ugb89o; ; ;  # ⅎ្.≠
+ xn--u4e319b.xn--1ch; Ⅎ្.≠; [V6]; xn--u4e319b.xn--1ch; ; ;  # Ⅎ្.≠
+ xn--u4e823bcza.xn--0ugb89o; Ⅎ្‍.≠‍‌; [C1, C2, V6]; xn--u4e823bcza.xn--0ugb89o; ; ;  # Ⅎ្.≠
+-ⅎ្‍｡≠‍‌; ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [P1, V6] # ⅎ្.≠
+-ⅎ្‍｡≠‍‌; ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [P1, V6] # ⅎ្.≠
++#ⅎ្‍｡≠‍‌; ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [P1, V6] # ⅎ្.≠
++#ⅎ្‍｡≠‍‌; ⅎ្‍.≠‍‌; [C1, C2, P1, V6]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [P1, V6] # ⅎ្.≠
+ 𐋺꫶꥓󧦉．‌᜔ڏ; 𐋺꫶꥓󧦉.‌᜔ڏ; [B1, C1, P1, V6]; xn--3j9a14ak27osbz2o.xn--ljb175f1wg; ; xn--3j9a14ak27osbz2o.xn--ljb175f; [B1, P1, V5, V6] # 𐋺꫶꥓.᜔ڏ
+ 𐋺꫶꥓󧦉.‌᜔ڏ; ; [B1, C1, P1, V6]; xn--3j9a14ak27osbz2o.xn--ljb175f1wg; ; xn--3j9a14ak27osbz2o.xn--ljb175f; [B1, P1, V5, V6] # 𐋺꫶꥓.᜔ڏ
+ xn--3j9a14ak27osbz2o.xn--ljb175f; 𐋺꫶꥓󧦉.᜔ڏ; [B1, V5, V6]; xn--3j9a14ak27osbz2o.xn--ljb175f; ; ;  # 𐋺꫶꥓.᜔ڏ
+@@ -2833,10 +2833,10 @@ xn----qfa550v.xn--bhb925glx3p; ‌-ß.ᢣ𐹭ؿ; [B1, B5, B6, C1]; xn----qfa550v
+ ‌-SS｡ᢣ𐹭ؿ; ‌-ss.ᢣ𐹭ؿ; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣ𐹭ؿ
+ ‌-ss｡ᢣ𐹭ؿ; ‌-ss.ᢣ𐹭ؿ; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣ𐹭ؿ
+ ‌-Ss｡ᢣ𐹭ؿ; ‌-ss.ᢣ𐹭ؿ; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣ𐹭ؿ
+-꧐Ӏ᮪ࣶ．눵; ꧐Ӏ᮪ࣶ.눵; [P1, V6]; xn--d5a07sn4u297k.xn--2e1b; ; ;  # ꧐Ӏ᮪ࣶ.눵
+-꧐Ӏ᮪ࣶ．눵; ꧐Ӏ᮪ࣶ.눵; [P1, V6]; xn--d5a07sn4u297k.xn--2e1b; ; ;  # ꧐Ӏ᮪ࣶ.눵
+-꧐Ӏ᮪ࣶ.눵; ; [P1, V6]; xn--d5a07sn4u297k.xn--2e1b; ; ;  # ꧐Ӏ᮪ࣶ.눵
+-꧐Ӏ᮪ࣶ.눵; ꧐Ӏ᮪ࣶ.눵; [P1, V6]; xn--d5a07sn4u297k.xn--2e1b; ; ;  # ꧐Ӏ᮪ࣶ.눵
++#꧐Ӏ᮪ࣶ．눵; ꧐Ӏ᮪ࣶ.눵; [P1, V6]; xn--d5a07sn4u297k.xn--2e1b; ; ;  # ꧐Ӏ᮪ࣶ.눵
++#꧐Ӏ᮪ࣶ．눵; ꧐Ӏ᮪ࣶ.눵; [P1, V6]; xn--d5a07sn4u297k.xn--2e1b; ; ;  # ꧐Ӏ᮪ࣶ.눵
++#꧐Ӏ᮪ࣶ.눵; ; [P1, V6]; xn--d5a07sn4u297k.xn--2e1b; ; ;  # ꧐Ӏ᮪ࣶ.눵
++#꧐Ӏ᮪ࣶ.눵; ꧐Ӏ᮪ࣶ.눵; [P1, V6]; xn--d5a07sn4u297k.xn--2e1b; ; ;  # ꧐Ӏ᮪ࣶ.눵
+ ꧐ӏ᮪ࣶ.눵; ꧐ӏ᮪ࣶ.눵; ; xn--s5a04sn4u297k.xn--2e1b; ; ;  # ꧐ӏ᮪ࣶ.눵
+ ꧐ӏ᮪ࣶ.눵; ; ; xn--s5a04sn4u297k.xn--2e1b; ; ;  # ꧐ӏ᮪ࣶ.눵
+ xn--s5a04sn4u297k.xn--2e1b; ꧐ӏ᮪ࣶ.눵; ; xn--s5a04sn4u297k.xn--2e1b; ; ;  # ꧐ӏ᮪ࣶ.눵
+@@ -3068,8 +3068,8 @@ xn----qmlv7tw180a.xn--x50zy803a; -᮫︒‍.񒶈񥹓; [C2, V3, V6]; xn----qmlv7t
+ xn--t546e.xn--hdh5166o; 󠦮.≯𞀆; [V6]; xn--t546e.xn--hdh5166o; ; ;  # .≯𞀆
+ -𑄳󠊗𐹩。𞮱; -𑄳󠊗𐹩.𞮱; [B1, P1, V3, V6]; xn----p26i72em2894c.xn--zw6h; ; ;  # -𑄳𐹩.
+ xn----p26i72em2894c.xn--zw6h; -𑄳󠊗𐹩.𞮱; [B1, V3, V6]; xn----p26i72em2894c.xn--zw6h; ; ;  # -𑄳𐹩.
+-ڹ．ᡳᅟ; ڹ.ᡳᅟ; [P1, V6]; xn--skb.xn--osd737a; ; ;  # ڹ.ᡳ
+-ڹ.ᡳᅟ; ; [P1, V6]; xn--skb.xn--osd737a; ; ;  # ڹ.ᡳ
++#ڹ．ᡳᅟ; ڹ.ᡳᅟ; [P1, V6]; xn--skb.xn--osd737a; ; ;  # ڹ.ᡳ
++#ڹ.ᡳᅟ; ; [P1, V6]; xn--skb.xn--osd737a; ; ;  # ڹ.ᡳ
+ xn--skb.xn--osd737a; ڹ.ᡳᅟ; [V6]; xn--skb.xn--osd737a; ; ;  # ڹ.ᡳ
+ 㨛𘱎.︒𝟕ഁ; 㨛𘱎.︒7ഁ; [P1, V6]; xn--mbm8237g.xn--7-7hf1526p; ; ;  # 㨛𘱎.︒7ഁ
+ 㨛𘱎.。7ഁ; 㨛𘱎..7ഁ; [P1, V6, X4_2]; xn--mbm8237g..xn--7-7hf; [P1, V6, A4_2]; ;  # 㨛𘱎..7ഁ
+@@ -3084,27 +3084,27 @@ xn--mbm8237g.xn--7-7hf1526p; 㨛𘱎.︒7ഁ; [V6]; xn--mbm8237g.xn--7-7hf1526p;
+ xn----dxc06304e.xn--gdh5020pk5c; ۝𻱧-.𞷁𞤣≮; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ;  # -.𞤣≮
+ ۝𻱧-｡𞷁⁤𞤁≮; ۝𻱧-.𞷁𞤣≮; [B1, B3, P1, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ;  # -.𞤣≮
+ ۝𻱧-｡𞷁⁤𞤁≮; ۝𻱧-.𞷁𞤣≮; [B1, B3, P1, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ;  # -.𞤣≮
+-ß‌꫶ᢥ．⊶ჁႶ; ß‌꫶ᢥ.⊶ჁႶ; [C1, P1, V6]; xn--zca682johfi89m.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [P1, V6] # ß꫶ᢥ.⊶ჁႶ
+-ß‌꫶ᢥ.⊶ჁႶ; ; [C1, P1, V6]; xn--zca682johfi89m.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [P1, V6] # ß꫶ᢥ.⊶ჁႶ
++#ß‌꫶ᢥ．⊶ჁႶ; ß‌꫶ᢥ.⊶ჁႶ; [C1, P1, V6]; xn--zca682johfi89m.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [P1, V6] # ß꫶ᢥ.⊶ჁႶ
++#ß‌꫶ᢥ.⊶ჁႶ; ; [C1, P1, V6]; xn--zca682johfi89m.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [P1, V6] # ß꫶ᢥ.⊶ჁႶ
+ ß‌꫶ᢥ.⊶ⴡⴖ; ; [C1]; xn--zca682johfi89m.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ß꫶ᢥ.⊶ⴡⴖ
+-SS‌꫶ᢥ.⊶ჁႶ; ss‌꫶ᢥ.⊶ჁႶ; [C1, P1, V6]; xn--ss-4ep585bkm5p.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [P1, V6] # ss꫶ᢥ.⊶ჁႶ
++#SS‌꫶ᢥ.⊶ჁႶ; ss‌꫶ᢥ.⊶ჁႶ; [C1, P1, V6]; xn--ss-4ep585bkm5p.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [P1, V6] # ss꫶ᢥ.⊶ჁႶ
+ ss‌꫶ᢥ.⊶ⴡⴖ; ; [C1]; xn--ss-4ep585bkm5p.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ss꫶ᢥ.⊶ⴡⴖ
+-Ss‌꫶ᢥ.⊶Ⴡⴖ; ss‌꫶ᢥ.⊶Ⴡⴖ; [C1, P1, V6]; xn--ss-4ep585bkm5p.xn--5nd703gyrh; ; xn--ss-4epx629f.xn--5nd703gyrh; [P1, V6] # ss꫶ᢥ.⊶Ⴡⴖ
++#Ss‌꫶ᢥ.⊶Ⴡⴖ; ss‌꫶ᢥ.⊶Ⴡⴖ; [C1, P1, V6]; xn--ss-4ep585bkm5p.xn--5nd703gyrh; ; xn--ss-4epx629f.xn--5nd703gyrh; [P1, V6] # ss꫶ᢥ.⊶Ⴡⴖ
+ xn--ss-4epx629f.xn--5nd703gyrh; ss꫶ᢥ.⊶Ⴡⴖ; [V6]; xn--ss-4epx629f.xn--5nd703gyrh; ; ;  # ss꫶ᢥ.⊶Ⴡⴖ
+ xn--ss-4ep585bkm5p.xn--5nd703gyrh; ss‌꫶ᢥ.⊶Ⴡⴖ; [C1, V6]; xn--ss-4ep585bkm5p.xn--5nd703gyrh; ; ;  # ss꫶ᢥ.⊶Ⴡⴖ
+ xn--ss-4epx629f.xn--ifh802b6a; ss꫶ᢥ.⊶ⴡⴖ; ; xn--ss-4epx629f.xn--ifh802b6a; ; ;  # ss꫶ᢥ.⊶ⴡⴖ
+ ss꫶ᢥ.⊶ⴡⴖ; ; ; xn--ss-4epx629f.xn--ifh802b6a; ; ;  # ss꫶ᢥ.⊶ⴡⴖ
+-SS꫶ᢥ.⊶ჁႶ; ss꫶ᢥ.⊶ჁႶ; [P1, V6]; xn--ss-4epx629f.xn--undv409k; ; ;  # ss꫶ᢥ.⊶ჁႶ
+-Ss꫶ᢥ.⊶Ⴡⴖ; ss꫶ᢥ.⊶Ⴡⴖ; [P1, V6]; xn--ss-4epx629f.xn--5nd703gyrh; ; ;  # ss꫶ᢥ.⊶Ⴡⴖ
++#SS꫶ᢥ.⊶ჁႶ; ss꫶ᢥ.⊶ჁႶ; [P1, V6]; xn--ss-4epx629f.xn--undv409k; ; ;  # ss꫶ᢥ.⊶ჁႶ
++#Ss꫶ᢥ.⊶Ⴡⴖ; ss꫶ᢥ.⊶Ⴡⴖ; [P1, V6]; xn--ss-4epx629f.xn--5nd703gyrh; ; ;  # ss꫶ᢥ.⊶Ⴡⴖ
+ xn--ss-4epx629f.xn--undv409k; ss꫶ᢥ.⊶ჁႶ; [V6]; xn--ss-4epx629f.xn--undv409k; ; ;  # ss꫶ᢥ.⊶ჁႶ
+ xn--ss-4ep585bkm5p.xn--ifh802b6a; ss‌꫶ᢥ.⊶ⴡⴖ; [C1]; xn--ss-4ep585bkm5p.xn--ifh802b6a; ; ;  # ss꫶ᢥ.⊶ⴡⴖ
+ xn--ss-4ep585bkm5p.xn--undv409k; ss‌꫶ᢥ.⊶ჁႶ; [C1, V6]; xn--ss-4ep585bkm5p.xn--undv409k; ; ;  # ss꫶ᢥ.⊶ჁႶ
+ xn--zca682johfi89m.xn--ifh802b6a; ß‌꫶ᢥ.⊶ⴡⴖ; [C1]; xn--zca682johfi89m.xn--ifh802b6a; ; ;  # ß꫶ᢥ.⊶ⴡⴖ
+ xn--zca682johfi89m.xn--undv409k; ß‌꫶ᢥ.⊶ჁႶ; [C1, V6]; xn--zca682johfi89m.xn--undv409k; ; ;  # ß꫶ᢥ.⊶ჁႶ
+ ß‌꫶ᢥ．⊶ⴡⴖ; ß‌꫶ᢥ.⊶ⴡⴖ; [C1]; xn--zca682johfi89m.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ß꫶ᢥ.⊶ⴡⴖ
+-SS‌꫶ᢥ．⊶ჁႶ; ss‌꫶ᢥ.⊶ჁႶ; [C1, P1, V6]; xn--ss-4ep585bkm5p.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [P1, V6] # ss꫶ᢥ.⊶ჁႶ
++#SS‌꫶ᢥ．⊶ჁႶ; ss‌꫶ᢥ.⊶ჁႶ; [C1, P1, V6]; xn--ss-4ep585bkm5p.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [P1, V6] # ss꫶ᢥ.⊶ჁႶ
+ ss‌꫶ᢥ．⊶ⴡⴖ; ss‌꫶ᢥ.⊶ⴡⴖ; [C1]; xn--ss-4ep585bkm5p.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ss꫶ᢥ.⊶ⴡⴖ
+-Ss‌꫶ᢥ．⊶Ⴡⴖ; ss‌꫶ᢥ.⊶Ⴡⴖ; [C1, P1, V6]; xn--ss-4ep585bkm5p.xn--5nd703gyrh; ; xn--ss-4epx629f.xn--5nd703gyrh; [P1, V6] # ss꫶ᢥ.⊶Ⴡⴖ
++#Ss‌꫶ᢥ．⊶Ⴡⴖ; ss‌꫶ᢥ.⊶Ⴡⴖ; [C1, P1, V6]; xn--ss-4ep585bkm5p.xn--5nd703gyrh; ; xn--ss-4epx629f.xn--5nd703gyrh; [P1, V6] # ss꫶ᢥ.⊶Ⴡⴖ
+ ‍。ς󠁉; ‍.ς󠁉; [C2, P1, V6]; xn--1ug.xn--3xa44344p; ; .xn--4xa24344p; [P1, V6, A4_2] # .ς
+ ‍。Σ󠁉; ‍.σ󠁉; [C2, P1, V6]; xn--1ug.xn--4xa24344p; ; .xn--4xa24344p; [P1, V6, A4_2] # .σ
+ ‍。σ󠁉; ‍.σ󠁉; [C2, P1, V6]; xn--1ug.xn--4xa24344p; ; .xn--4xa24344p; [P1, V6, A4_2] # .σ
+@@ -3186,11 +3186,11 @@ xn----zmb.xn--7nd64871a; σ-.Ⴣ𦟙; [V3, V6]; xn----zmb.xn--7nd64871a; ; ;  #
+ xn----zmb048s.xn--7nd64871a; σ‍-.Ⴣ𦟙; [C2, V3, V6]; xn----zmb048s.xn--7nd64871a; ; ;  # σ-.Ⴣ𦟙
+ xn----xmb348s.xn--rlj2573p; ς‍-.ⴣ𦟙; [C2, V3]; xn----xmb348s.xn--rlj2573p; ; ;  # ς-.ⴣ𦟙
+ xn----xmb348s.xn--7nd64871a; ς‍-.Ⴣ𦟙; [C2, V3, V6]; xn----xmb348s.xn--7nd64871a; ; ;  # ς-.Ⴣ𦟙
+-≠。🞳𝟲; ≠.🞳6; [P1, V6]; xn--1ch.xn--6-dl4s; ; ;  # ≠.🞳6
+-≠。🞳𝟲; ≠.🞳6; [P1, V6]; xn--1ch.xn--6-dl4s; ; ;  # ≠.🞳6
+-≠。🞳6; ≠.🞳6; [P1, V6]; xn--1ch.xn--6-dl4s; ; ;  # ≠.🞳6
+-≠。🞳6; ≠.🞳6; [P1, V6]; xn--1ch.xn--6-dl4s; ; ;  # ≠.🞳6
+-xn--1ch.xn--6-dl4s; ≠.🞳6; [V6]; xn--1ch.xn--6-dl4s; ; ;  # ≠.🞳6
++#≠。🞳𝟲; ≠.🞳6; [P1, V6]; xn--1ch.xn--6-dl4s; ; ;  # ≠.🞳6
++#≠。🞳𝟲; ≠.🞳6; [P1, V6]; xn--1ch.xn--6-dl4s; ; ;  # ≠.🞳6
++#≠。🞳6; ≠.🞳6; [P1, V6]; xn--1ch.xn--6-dl4s; ; ;  # ≠.🞳6
++#≠。🞳6; ≠.🞳6; [P1, V6]; xn--1ch.xn--6-dl4s; ; ;  # ≠.🞳6
++#xn--1ch.xn--6-dl4s; ≠.🞳6; [V6]; xn--1ch.xn--6-dl4s; ; ;  # ≠.🞳6
+ 󅬽.蠔; ; [P1, V6]; xn--g747d.xn--xl2a; ; ;  # .蠔
+ xn--g747d.xn--xl2a; 󅬽.蠔; [V6]; xn--g747d.xn--xl2a; ; ;  # .蠔
+ ࣦ‍．뼽; ࣦ‍.뼽; [C2, V5]; xn--p0b869i.xn--e43b; ; xn--p0b.xn--e43b; [V5] # ࣦ.뼽
+@@ -3387,24 +3387,24 @@ xn----0kc8501a5399e.xn--ss06b; ؅-𽤞ⴂ.򅤶; [B1, V6]; xn----0kc8501a5399e.xn
+ xn----0kc8501a5399e.xn--1ugy3204f; ؅-𽤞ⴂ.򅤶‍; [B1, B6, C2, V6]; xn----0kc8501a5399e.xn--1ugy3204f; ; ;  # -ⴂ.
+ xn----0kc662fc152h.xn--ss06b; ؅-𽤞Ⴂ.򅤶; [B1, V6]; xn----0kc662fc152h.xn--ss06b; ; ;  # -Ⴂ.
+ xn----0kc662fc152h.xn--1ugy3204f; ؅-𽤞Ⴂ.򅤶‍; [B1, B6, C2, V6]; xn----0kc662fc152h.xn--1ugy3204f; ; ;  # -Ⴂ.
+-⾆．ꡈ５≯ß; 舌.ꡈ5≯ß; [P1, V6]; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e;  # 舌.ꡈ5≯ß
+-⾆．ꡈ５≯ß; 舌.ꡈ5≯ß; [P1, V6]; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e;  # 舌.ꡈ5≯ß
+-舌.ꡈ5≯ß; ; [P1, V6]; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e;  # 舌.ꡈ5≯ß
+-舌.ꡈ5≯ß; 舌.ꡈ5≯ß; [P1, V6]; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e;  # 舌.ꡈ5≯ß
+-舌.ꡈ5≯SS; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
+-舌.ꡈ5≯SS; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
+-舌.ꡈ5≯ss; ; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
+-舌.ꡈ5≯ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
+-舌.ꡈ5≯Ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
+-舌.ꡈ5≯Ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
+-xn--tc1a.xn--5ss-3m2a5009e; 舌.ꡈ5≯ss; [V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
+-xn--tc1a.xn--5-qfa988w745i; 舌.ꡈ5≯ß; [V6]; xn--tc1a.xn--5-qfa988w745i; ; ;  # 舌.ꡈ5≯ß
+-⾆．ꡈ５≯SS; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
+-⾆．ꡈ５≯SS; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
+-⾆．ꡈ５≯ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
+-⾆．ꡈ５≯ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
+-⾆．ꡈ５≯Ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
+-⾆．ꡈ５≯Ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
++#⾆．ꡈ５≯ß; 舌.ꡈ5≯ß; [P1, V6]; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e;  # 舌.ꡈ5≯ß
++#⾆．ꡈ５≯ß; 舌.ꡈ5≯ß; [P1, V6]; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e;  # 舌.ꡈ5≯ß
++#舌.ꡈ5≯ß; ; [P1, V6]; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e;  # 舌.ꡈ5≯ß
++#舌.ꡈ5≯ß; 舌.ꡈ5≯ß; [P1, V6]; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e;  # 舌.ꡈ5≯ß
++#舌.ꡈ5≯SS; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
++#舌.ꡈ5≯SS; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
++#舌.ꡈ5≯ss; ; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
++#舌.ꡈ5≯ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
++#舌.ꡈ5≯Ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
++#舌.ꡈ5≯Ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
++#xn--tc1a.xn--5ss-3m2a5009e; 舌.ꡈ5≯ss; [V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
++#xn--tc1a.xn--5-qfa988w745i; 舌.ꡈ5≯ß; [V6]; xn--tc1a.xn--5-qfa988w745i; ; ;  # 舌.ꡈ5≯ß
++#⾆．ꡈ５≯SS; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
++#⾆．ꡈ５≯SS; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
++#⾆．ꡈ５≯ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
++#⾆．ꡈ５≯ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
++#⾆．ꡈ５≯Ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
++#⾆．ꡈ５≯Ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ;  # 舌.ꡈ5≯ss
+ ્8‍．򾂈ݜ; ્8‍.򾂈ݜ; [B1, B5, B6, C2, P1, V5, V6]; xn--8-yke534n.xn--gpb79046m; ; xn--8-yke.xn--gpb79046m; [B1, B5, B6, P1, V5, V6] # ્8.ݜ
+ ્8‍.򾂈ݜ; ; [B1, B5, B6, C2, P1, V5, V6]; xn--8-yke534n.xn--gpb79046m; ; xn--8-yke.xn--gpb79046m; [B1, B5, B6, P1, V5, V6] # ્8.ݜ
+ xn--8-yke.xn--gpb79046m; ્8.򾂈ݜ; [B1, B5, B6, V5, V6]; xn--8-yke.xn--gpb79046m; ; ;  # ્8.ݜ
+@@ -3422,26 +3422,26 @@ xn--ie6h.xn--4xa; 𞤪.σ; ; xn--ie6h.xn--4xa; ; ;  # 𞤪.σ
+ 𞤈.ς; 𞤪.ς; ; xn--ie6h.xn--3xa; ; xn--ie6h.xn--4xa;  # 𞤪.ς
+ xn--ie6h.xn--3xa; 𞤪.ς; ; xn--ie6h.xn--3xa; ; ;  # 𞤪.ς
+ 𞤪.Σ; 𞤪.σ; ; xn--ie6h.xn--4xa; ; ;  # 𞤪.σ
+-‌Ⴚ｡ς; ‌Ⴚ.ς; [C1, P1, V6]; xn--ynd759e.xn--3xa; ; xn--ynd.xn--4xa; [P1, V6] # Ⴚ.ς
+-‌Ⴚ。ς; ‌Ⴚ.ς; [C1, P1, V6]; xn--ynd759e.xn--3xa; ; xn--ynd.xn--4xa; [P1, V6] # Ⴚ.ς
++#‌Ⴚ｡ς; ‌Ⴚ.ς; [C1, P1, V6]; xn--ynd759e.xn--3xa; ; xn--ynd.xn--4xa; [P1, V6] # Ⴚ.ς
++#‌Ⴚ。ς; ‌Ⴚ.ς; [C1, P1, V6]; xn--ynd759e.xn--3xa; ; xn--ynd.xn--4xa; [P1, V6] # Ⴚ.ς
+ ‌ⴚ。ς; ‌ⴚ.ς; [C1]; xn--0ug262c.xn--3xa; ; xn--ilj.xn--4xa; [] # ⴚ.ς
+-‌Ⴚ。Σ; ‌Ⴚ.σ; [C1, P1, V6]; xn--ynd759e.xn--4xa; ; xn--ynd.xn--4xa; [P1, V6] # Ⴚ.σ
++#‌Ⴚ。Σ; ‌Ⴚ.σ; [C1, P1, V6]; xn--ynd759e.xn--4xa; ; xn--ynd.xn--4xa; [P1, V6] # Ⴚ.σ
+ ‌ⴚ。σ; ‌ⴚ.σ; [C1]; xn--0ug262c.xn--4xa; ; xn--ilj.xn--4xa; [] # ⴚ.σ
+ xn--ilj.xn--4xa; ⴚ.σ; ; xn--ilj.xn--4xa; ; ;  # ⴚ.σ
+ ⴚ.σ; ; ; xn--ilj.xn--4xa; ; ;  # ⴚ.σ
+-Ⴚ.Σ; Ⴚ.σ; [P1, V6]; xn--ynd.xn--4xa; ; ;  # Ⴚ.σ
++#Ⴚ.Σ; Ⴚ.σ; [P1, V6]; xn--ynd.xn--4xa; ; ;  # Ⴚ.σ
+ ⴚ.ς; ; ; xn--ilj.xn--3xa; ; xn--ilj.xn--4xa;  # ⴚ.ς
+-Ⴚ.ς; ; [P1, V6]; xn--ynd.xn--3xa; ; xn--ynd.xn--4xa;  # Ⴚ.ς
++#Ⴚ.ς; ; [P1, V6]; xn--ynd.xn--3xa; ; xn--ynd.xn--4xa;  # Ⴚ.ς
+ xn--ynd.xn--4xa; Ⴚ.σ; [V6]; xn--ynd.xn--4xa; ; ;  # Ⴚ.σ
+ xn--ynd.xn--3xa; Ⴚ.ς; [V6]; xn--ynd.xn--3xa; ; ;  # Ⴚ.ς
+ xn--ilj.xn--3xa; ⴚ.ς; ; xn--ilj.xn--3xa; ; ;  # ⴚ.ς
+-Ⴚ.σ; ; [P1, V6]; xn--ynd.xn--4xa; ; ;  # Ⴚ.σ
++#Ⴚ.σ; ; [P1, V6]; xn--ynd.xn--4xa; ; ;  # Ⴚ.σ
+ xn--0ug262c.xn--4xa; ‌ⴚ.σ; [C1]; xn--0ug262c.xn--4xa; ; ;  # ⴚ.σ
+ xn--ynd759e.xn--4xa; ‌Ⴚ.σ; [C1, V6]; xn--ynd759e.xn--4xa; ; ;  # Ⴚ.σ
+ xn--0ug262c.xn--3xa; ‌ⴚ.ς; [C1]; xn--0ug262c.xn--3xa; ; ;  # ⴚ.ς
+ xn--ynd759e.xn--3xa; ‌Ⴚ.ς; [C1, V6]; xn--ynd759e.xn--3xa; ; ;  # Ⴚ.ς
+ ‌ⴚ｡ς; ‌ⴚ.ς; [C1]; xn--0ug262c.xn--3xa; ; xn--ilj.xn--4xa; [] # ⴚ.ς
+-‌Ⴚ｡Σ; ‌Ⴚ.σ; [C1, P1, V6]; xn--ynd759e.xn--4xa; ; xn--ynd.xn--4xa; [P1, V6] # Ⴚ.σ
++#‌Ⴚ｡Σ; ‌Ⴚ.σ; [C1, P1, V6]; xn--ynd759e.xn--4xa; ; xn--ynd.xn--4xa; [P1, V6] # Ⴚ.σ
+ ‌ⴚ｡σ; ‌ⴚ.σ; [C1]; xn--0ug262c.xn--4xa; ; xn--ilj.xn--4xa; [] # ⴚ.σ
+ 𞤃．𐹦; 𞤥.𐹦; [B1]; xn--de6h.xn--eo0d; ; ;  # 𞤥.𐹦
+ 𞤃.𐹦; 𞤥.𐹦; [B1]; xn--de6h.xn--eo0d; ; ;  # 𞤥.𐹦
+@@ -3773,18 +3773,18 @@ xn--ko0d8295a.xn--zed3h; 𐹬𝩇.ྲྀ; [B1, B3, B6, V5]; xn--ko0d8295a.xn--ze
+ -𑈶8..7.𰛢󠎭; ; [P1, V3, V6, X4_2]; xn---8-bv5o..7.xn--c35nf1622b; [P1, V3, V6, A4_2]; ;  # -𑈶8..7.𰛢
+ xn---8-bv5o..7.xn--c35nf1622b; -𑈶8..7.𰛢󠎭; [V3, V6, X4_2]; xn---8-bv5o..7.xn--c35nf1622b; [V3, V6, A4_2]; ;  # -𑈶8..7.𰛢
+ xn----scp6252h.xn--zshy411yzpx2d; -𑈶⒏.⒎𰛢󠎭; [V3, V6]; xn----scp6252h.xn--zshy411yzpx2d; ; ;  # -𑈶⒏.⒎𰛢
+-‌Ⴁ畝‍．≮; ‌Ⴁ畝‍.≮; [C1, C2, P1, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [P1, V6] # Ⴁ畝.≮
+-‌Ⴁ畝‍．≮; ‌Ⴁ畝‍.≮; [C1, C2, P1, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [P1, V6] # Ⴁ畝.≮
+-‌Ⴁ畝‍.≮; ; [C1, C2, P1, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [P1, V6] # Ⴁ畝.≮
+-‌Ⴁ畝‍.≮; ‌Ⴁ畝‍.≮; [C1, C2, P1, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [P1, V6] # Ⴁ畝.≮
+-‌ⴁ畝‍.≮; ‌ⴁ畝‍.≮; [C1, C2, P1, V6]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [P1, V6] # ⴁ畝.≮
+-‌ⴁ畝‍.≮; ; [C1, C2, P1, V6]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [P1, V6] # ⴁ畝.≮
+-xn--skjy82u.xn--gdh; ⴁ畝.≮; [V6]; xn--skjy82u.xn--gdh; ; ;  # ⴁ畝.≮
++#‌Ⴁ畝‍．≮; ‌Ⴁ畝‍.≮; [C1, C2, P1, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [P1, V6] # Ⴁ畝.≮
++#‌Ⴁ畝‍．≮; ‌Ⴁ畝‍.≮; [C1, C2, P1, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [P1, V6] # Ⴁ畝.≮
++#‌Ⴁ畝‍.≮; ; [C1, C2, P1, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [P1, V6] # Ⴁ畝.≮
++#‌Ⴁ畝‍.≮; ‌Ⴁ畝‍.≮; [C1, C2, P1, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [P1, V6] # Ⴁ畝.≮
++#‌ⴁ畝‍.≮; ‌ⴁ畝‍.≮; [C1, C2, P1, V6]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [P1, V6] # ⴁ畝.≮
++#‌ⴁ畝‍.≮; ; [C1, C2, P1, V6]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [P1, V6] # ⴁ畝.≮
++#xn--skjy82u.xn--gdh; ⴁ畝.≮; [V6]; xn--skjy82u.xn--gdh; ; ;  # ⴁ畝.≮
+ xn--0ugc160hb36e.xn--gdh; ‌ⴁ畝‍.≮; [C1, C2, V6]; xn--0ugc160hb36e.xn--gdh; ; ;  # ⴁ畝.≮
+ xn--8md0962c.xn--gdh; Ⴁ畝.≮; [V6]; xn--8md0962c.xn--gdh; ; ;  # Ⴁ畝.≮
+ xn--8md700fea3748f.xn--gdh; ‌Ⴁ畝‍.≮; [C1, C2, V6]; xn--8md700fea3748f.xn--gdh; ; ;  # Ⴁ畝.≮
+-‌ⴁ畝‍．≮; ‌ⴁ畝‍.≮; [C1, C2, P1, V6]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [P1, V6] # ⴁ畝.≮
+-‌ⴁ畝‍．≮; ‌ⴁ畝‍.≮; [C1, C2, P1, V6]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [P1, V6] # ⴁ畝.≮
++#‌ⴁ畝‍．≮; ‌ⴁ畝‍.≮; [C1, C2, P1, V6]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [P1, V6] # ⴁ畝.≮
++#‌ⴁ畝‍．≮; ‌ⴁ畝‍.≮; [C1, C2, P1, V6]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [P1, V6] # ⴁ畝.≮
+ 歷｡𐹻≯󳛽‍; 歷.𐹻≯󳛽‍; [B1, C2, P1, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; xn--nmw.xn--hdh7804gdms2h; [B1, P1, V6] # 歷.𐹻≯
+ 歷｡𐹻≯󳛽‍; 歷.𐹻≯󳛽‍; [B1, C2, P1, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; xn--nmw.xn--hdh7804gdms2h; [B1, P1, V6] # 歷.𐹻≯
+ 歷。𐹻≯󳛽‍; 歷.𐹻≯󳛽‍; [B1, C2, P1, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; xn--nmw.xn--hdh7804gdms2h; [B1, P1, V6] # 歷.𐹻≯
+@@ -3873,8 +3873,8 @@ xn--zca870n.xn--0zf22107b; ß‍.᯲񄾼; [C2, V5, V6]; xn--zca870n.xn--0zf22107
+ 𑓂‌≮.≮; 𑓂‌≮.≮; [P1, V5, V6]; xn--0ugy6glz29a.xn--gdh; ; xn--gdhz656g.xn--gdh;  # 𑓂≮.≮
+ xn--gdhz656g.xn--gdh; 𑓂≮.≮; [V5, V6]; xn--gdhz656g.xn--gdh; ; ;  # 𑓂≮.≮
+ xn--0ugy6glz29a.xn--gdh; 𑓂‌≮.≮; [V5, V6]; xn--0ugy6glz29a.xn--gdh; ; ;  # 𑓂≮.≮
+-🕼．ﾠ; 🕼.ﾠ; [P1, V6]; xn--my8h.xn--cl7c; ; ;  # 🕼.
+-🕼.ᅠ; ; [P1, V6]; xn--my8h.xn--psd; ; ;  # 🕼.
++#🕼．ﾠ; 🕼.ﾠ; [P1, V6]; xn--my8h.xn--cl7c; ; ;  # 🕼.
++#🕼.ᅠ; ; [P1, V6]; xn--my8h.xn--psd; ; ;  # 🕼.
+ xn--my8h.xn--psd; 🕼.ᅠ; [V6]; xn--my8h.xn--psd; ; ;  # 🕼.
+ xn--my8h.xn--cl7c; 🕼.ﾠ; [V6]; xn--my8h.xn--cl7c; ; ;  # 🕼.
+ ᡔﶂ。񷘎; ᡔلحى.񷘎; [B5, B6, P1, V6]; xn--sgb9bq785p.xn--bc31b; ; ;  # ᡔلحى.
+@@ -3932,14 +3932,14 @@ xn--3sb7483hoyvbbe76g.xn--3xaa51q; 񻂵킃𑘶ߜ.ςؼς; [B5, B6, V6]; xn--3sb74
+ 񻂵킃𑘶ߜ｡σؼς; 񻂵킃𑘶ߜ.σؼς; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q;  # 킃𑘶ߜ.σؼς
+ 蔰。󠁹ࣝ-𑈵; 蔰.󠁹ࣝ-𑈵; [P1, V6]; xn--sz1a.xn----mrd9984r3dl0i; ; ;  # 蔰.ࣝ-𑈵
+ xn--sz1a.xn----mrd9984r3dl0i; 蔰.󠁹ࣝ-𑈵; [V6]; xn--sz1a.xn----mrd9984r3dl0i; ; ;  # 蔰.ࣝ-𑈵
+-ςჅ。ݚ; ςჅ.ݚ; [P1, V6]; xn--3xa677d.xn--epb; ; xn--4xa477d.xn--epb;  # ςჅ.ݚ
++#ςჅ。ݚ; ςჅ.ݚ; [P1, V6]; xn--3xa677d.xn--epb; ; xn--4xa477d.xn--epb;  # ςჅ.ݚ
+ ςⴥ。ݚ; ςⴥ.ݚ; ; xn--3xa403s.xn--epb; ; xn--4xa203s.xn--epb;  # ςⴥ.ݚ
+-ΣჅ。ݚ; σჅ.ݚ; [P1, V6]; xn--4xa477d.xn--epb; ; ;  # σჅ.ݚ
++#ΣჅ。ݚ; σჅ.ݚ; [P1, V6]; xn--4xa477d.xn--epb; ; ;  # σჅ.ݚ
+ σⴥ。ݚ; σⴥ.ݚ; ; xn--4xa203s.xn--epb; ; ;  # σⴥ.ݚ
+ Σⴥ。ݚ; σⴥ.ݚ; ; xn--4xa203s.xn--epb; ; ;  # σⴥ.ݚ
+ xn--4xa203s.xn--epb; σⴥ.ݚ; ; xn--4xa203s.xn--epb; ; ;  # σⴥ.ݚ
+ σⴥ.ݚ; ; ; xn--4xa203s.xn--epb; ; ;  # σⴥ.ݚ
+-ΣჅ.ݚ; σჅ.ݚ; [P1, V6]; xn--4xa477d.xn--epb; ; ;  # σჅ.ݚ
++#ΣჅ.ݚ; σჅ.ݚ; [P1, V6]; xn--4xa477d.xn--epb; ; ;  # σჅ.ݚ
+ Σⴥ.ݚ; σⴥ.ݚ; ; xn--4xa203s.xn--epb; ; ;  # σⴥ.ݚ
+ xn--4xa477d.xn--epb; σჅ.ݚ; [V6]; xn--4xa477d.xn--epb; ; ;  # σჅ.ݚ
+ xn--3xa403s.xn--epb; ςⴥ.ݚ; ; xn--3xa403s.xn--epb; ; ;  # ςⴥ.ݚ
+@@ -3978,7 +3978,7 @@ xn----ufo4749h.xn--mhb45a235sns3c; -≠𑈵.嵕ي۴꥓; [B1, B5, V3, V6]; xn----
+ ‌񍸰𐹶ݮ．ہ‍≯‍; ‌񍸰𐹶ݮ.ہ‍≯‍; [B1, B3, C1, C2, P1, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, P1, V6] # 𐹶ݮ.ہ≯
+ ‌񍸰𐹶ݮ．ہ‍≯‍; ‌񍸰𐹶ݮ.ہ‍≯‍; [B1, B3, C1, C2, P1, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, P1, V6] # 𐹶ݮ.ہ≯
+ ‌񍸰𐹶ݮ.ہ‍≯‍; ; [B1, B3, C1, C2, P1, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, P1, V6] # 𐹶ݮ.ہ≯
+-‌񍸰𐹶ݮ.ہ‍≯‍; ‌񍸰𐹶ݮ.ہ‍≯‍; [B1, B3, C1, C2, P1, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, P1, V6] # 𐹶ݮ.ہ≯
++u‌񍸰𐹶ݮ.ہ‍≯‍; ‌񍸰𐹶ݮ.ہ‍≯‍; [B1, B3, C1, C2, P1, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, P1, V6] # 𐹶ݮ.ہ≯
+ xn--ypb5875khz9y.xn--0kb682l; 񍸰𐹶ݮ.ہ≯; [B3, B5, B6, V6]; xn--ypb5875khz9y.xn--0kb682l; ; ;  # 𐹶ݮ.ہ≯
+ xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ‌񍸰𐹶ݮ.ہ‍≯‍; [B1, B3, C1, C2, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; ;  # 𐹶ݮ.ہ≯
+ ≮．឵ࡕ𐫔; ≮.឵ࡕ𐫔; [B1, P1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ;  # ≮.ࡕ𐫔
+@@ -3986,21 +3986,21 @@ xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ‌񍸰𐹶ݮ.ہ‍≯‍; [B1, B3, C1, C2
+ ≮.឵ࡕ𐫔; ; [B1, P1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ;  # ≮.ࡕ𐫔
+ ≮.឵ࡕ𐫔; ≮.឵ࡕ𐫔; [B1, P1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ;  # ≮.ࡕ𐫔
+ xn--gdh.xn--kwb589e217p; ≮.឵ࡕ𐫔; [B1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ;  # ≮.ࡕ𐫔
+-𐩗‍｡ႩႵ; 𐩗‍.ႩႵ; [B3, C2, P1, V6]; xn--1ug4933g.xn--hndy; ; xn--pt9c.xn--hndy; [P1, V6] # 𐩗.ႩႵ
+-𐩗‍。ႩႵ; 𐩗‍.ႩႵ; [B3, C2, P1, V6]; xn--1ug4933g.xn--hndy; ; xn--pt9c.xn--hndy; [P1, V6] # 𐩗.ႩႵ
++#𐩗‍｡ႩႵ; 𐩗‍.ႩႵ; [B3, C2, P1, V6]; xn--1ug4933g.xn--hndy; ; xn--pt9c.xn--hndy; [P1, V6] # 𐩗.ႩႵ
++#𐩗‍。ႩႵ; 𐩗‍.ႩႵ; [B3, C2, P1, V6]; xn--1ug4933g.xn--hndy; ; xn--pt9c.xn--hndy; [P1, V6] # 𐩗.ႩႵ
+ 𐩗‍。ⴉⴕ; 𐩗‍.ⴉⴕ; [B3, C2]; xn--1ug4933g.xn--0kjya; ; xn--pt9c.xn--0kjya; [] # 𐩗.ⴉⴕ
+-𐩗‍。Ⴉⴕ; 𐩗‍.Ⴉⴕ; [B3, C2, P1, V6]; xn--1ug4933g.xn--hnd666l; ; xn--pt9c.xn--hnd666l; [P1, V6] # 𐩗.Ⴉⴕ
++#𐩗‍。Ⴉⴕ; 𐩗‍.Ⴉⴕ; [B3, C2, P1, V6]; xn--1ug4933g.xn--hnd666l; ; xn--pt9c.xn--hnd666l; [P1, V6] # 𐩗.Ⴉⴕ
+ xn--pt9c.xn--hnd666l; 𐩗.Ⴉⴕ; [V6]; xn--pt9c.xn--hnd666l; ; ;  # 𐩗.Ⴉⴕ
+ xn--1ug4933g.xn--hnd666l; 𐩗‍.Ⴉⴕ; [B3, C2, V6]; xn--1ug4933g.xn--hnd666l; ; ;  # 𐩗.Ⴉⴕ
+ xn--pt9c.xn--0kjya; 𐩗.ⴉⴕ; ; xn--pt9c.xn--0kjya; ; ;  # 𐩗.ⴉⴕ
+ 𐩗.ⴉⴕ; ; ; xn--pt9c.xn--0kjya; ; ;  # 𐩗.ⴉⴕ
+-𐩗.ႩႵ; ; [P1, V6]; xn--pt9c.xn--hndy; ; ;  # 𐩗.ႩႵ
+-𐩗.Ⴉⴕ; ; [P1, V6]; xn--pt9c.xn--hnd666l; ; ;  # 𐩗.Ⴉⴕ
++#𐩗.ႩႵ; ; [P1, V6]; xn--pt9c.xn--hndy; ; ;  # 𐩗.ႩႵ
++#𐩗.Ⴉⴕ; ; [P1, V6]; xn--pt9c.xn--hnd666l; ; ;  # 𐩗.Ⴉⴕ
+ xn--pt9c.xn--hndy; 𐩗.ႩႵ; [V6]; xn--pt9c.xn--hndy; ; ;  # 𐩗.ႩႵ
+ xn--1ug4933g.xn--0kjya; 𐩗‍.ⴉⴕ; [B3, C2]; xn--1ug4933g.xn--0kjya; ; ;  # 𐩗.ⴉⴕ
+ xn--1ug4933g.xn--hndy; 𐩗‍.ႩႵ; [B3, C2, V6]; xn--1ug4933g.xn--hndy; ; ;  # 𐩗.ႩႵ
+ 𐩗‍｡ⴉⴕ; 𐩗‍.ⴉⴕ; [B3, C2]; xn--1ug4933g.xn--0kjya; ; xn--pt9c.xn--0kjya; [] # 𐩗.ⴉⴕ
+-𐩗‍｡Ⴉⴕ; 𐩗‍.Ⴉⴕ; [B3, C2, P1, V6]; xn--1ug4933g.xn--hnd666l; ; xn--pt9c.xn--hnd666l; [P1, V6] # 𐩗.Ⴉⴕ
++#𐩗‍｡Ⴉⴕ; 𐩗‍.Ⴉⴕ; [B3, C2, P1, V6]; xn--1ug4933g.xn--hnd666l; ; xn--pt9c.xn--hnd666l; [P1, V6] # 𐩗.Ⴉⴕ
+ ‌‌ㄤ．̮󕨑ূ; ‌‌ㄤ.̮󕨑ূ; [C1, P1, V5, V6]; xn--0uga242k.xn--vta284a9o563a; ; xn--1fk.xn--vta284a9o563a; [P1, V5, V6] # ㄤ.̮ূ
+ ‌‌ㄤ.̮󕨑ূ; ; [C1, P1, V5, V6]; xn--0uga242k.xn--vta284a9o563a; ; xn--1fk.xn--vta284a9o563a; [P1, V5, V6] # ㄤ.̮ূ
+ xn--1fk.xn--vta284a9o563a; ㄤ.̮󕨑ূ; [V5, V6]; xn--1fk.xn--vta284a9o563a; ; ;  # ㄤ.̮ূ
+@@ -4101,19 +4101,19 @@ xn--dth6033bzbvx.xn--tsh9439b; 𲤱⒛音.ꡦ⒈; [V6]; xn--dth6033bzbvx.xn--tsh
+ ߜ８񳦓-｡򞲙𑁿𐩥্; ߜ8񳦓-.򞲙𑁿𐩥্; [B2, B3, B5, B6, P1, V3, V6]; xn--8--rve13079p.xn--b7b9842k42df776x; ; ;  # ߜ8-.𑁿𐩥্
+ ߜ8񳦓-。򞲙𑁿𐩥্; ߜ8񳦓-.򞲙𑁿𐩥্; [B2, B3, B5, B6, P1, V3, V6]; xn--8--rve13079p.xn--b7b9842k42df776x; ; ;  # ߜ8-.𑁿𐩥্
+ xn--8--rve13079p.xn--b7b9842k42df776x; ߜ8񳦓-.򞲙𑁿𐩥্; [B2, B3, B5, B6, V3, V6]; xn--8--rve13079p.xn--b7b9842k42df776x; ; ;  # ߜ8-.𑁿𐩥্
+-Ⴕ。۰≮ß݅; Ⴕ.۰≮ß݅; [P1, V6]; xn--tnd.xn--zca912alh227g; ; xn--tnd.xn--ss-jbe65aw27i;  # Ⴕ.۰≮ß݅
+-Ⴕ。۰≮ß݅; Ⴕ.۰≮ß݅; [P1, V6]; xn--tnd.xn--zca912alh227g; ; xn--tnd.xn--ss-jbe65aw27i;  # Ⴕ.۰≮ß݅
+-ⴕ。۰≮ß݅; ⴕ.۰≮ß݅; [P1, V6]; xn--dlj.xn--zca912alh227g; ; xn--dlj.xn--ss-jbe65aw27i;  # ⴕ.۰≮ß݅
+-ⴕ。۰≮ß݅; ⴕ.۰≮ß݅; [P1, V6]; xn--dlj.xn--zca912alh227g; ; xn--dlj.xn--ss-jbe65aw27i;  # ⴕ.۰≮ß݅
+-Ⴕ。۰≮SS݅; Ⴕ.۰≮ss݅; [P1, V6]; xn--tnd.xn--ss-jbe65aw27i; ; ;  # Ⴕ.۰≮ss݅
+-Ⴕ。۰≮SS݅; Ⴕ.۰≮ss݅; [P1, V6]; xn--tnd.xn--ss-jbe65aw27i; ; ;  # Ⴕ.۰≮ss݅
+-ⴕ。۰≮ss݅; ⴕ.۰≮ss݅; [P1, V6]; xn--dlj.xn--ss-jbe65aw27i; ; ;  # ⴕ.۰≮ss݅
+-ⴕ。۰≮ss݅; ⴕ.۰≮ss݅; [P1, V6]; xn--dlj.xn--ss-jbe65aw27i; ; ;  # ⴕ.۰≮ss݅
+-Ⴕ。۰≮Ss݅; Ⴕ.۰≮ss݅; [P1, V6]; xn--tnd.xn--ss-jbe65aw27i; ; ;  # Ⴕ.۰≮ss݅
+-Ⴕ。۰≮Ss݅; Ⴕ.۰≮ss݅; [P1, V6]; xn--tnd.xn--ss-jbe65aw27i; ; ;  # Ⴕ.۰≮ss݅
++#Ⴕ。۰≮ß݅; Ⴕ.۰≮ß݅; [P1, V6]; xn--tnd.xn--zca912alh227g; ; xn--tnd.xn--ss-jbe65aw27i;  # Ⴕ.۰≮ß݅
++#Ⴕ。۰≮ß݅; Ⴕ.۰≮ß݅; [P1, V6]; xn--tnd.xn--zca912alh227g; ; xn--tnd.xn--ss-jbe65aw27i;  # Ⴕ.۰≮ß݅
++#ⴕ。۰≮ß݅; ⴕ.۰≮ß݅; [P1, V6]; xn--dlj.xn--zca912alh227g; ; xn--dlj.xn--ss-jbe65aw27i;  # ⴕ.۰≮ß݅
++#ⴕ。۰≮ß݅; ⴕ.۰≮ß݅; [P1, V6]; xn--dlj.xn--zca912alh227g; ; xn--dlj.xn--ss-jbe65aw27i;  # ⴕ.۰≮ß݅
++#Ⴕ。۰≮SS݅; Ⴕ.۰≮ss݅; [P1, V6]; xn--tnd.xn--ss-jbe65aw27i; ; ;  # Ⴕ.۰≮ss݅
++#Ⴕ。۰≮SS݅; Ⴕ.۰≮ss݅; [P1, V6]; xn--tnd.xn--ss-jbe65aw27i; ; ;  # Ⴕ.۰≮ss݅
++#ⴕ。۰≮ss݅; ⴕ.۰≮ss݅; [P1, V6]; xn--dlj.xn--ss-jbe65aw27i; ; ;  # ⴕ.۰≮ss݅
++#ⴕ。۰≮ss݅; ⴕ.۰≮ss݅; [P1, V6]; xn--dlj.xn--ss-jbe65aw27i; ; ;  # ⴕ.۰≮ss݅
++#Ⴕ。۰≮Ss݅; Ⴕ.۰≮ss݅; [P1, V6]; xn--tnd.xn--ss-jbe65aw27i; ; ;  # Ⴕ.۰≮ss݅
++#Ⴕ。۰≮Ss݅; Ⴕ.۰≮ss݅; [P1, V6]; xn--tnd.xn--ss-jbe65aw27i; ; ;  # Ⴕ.۰≮ss݅
+ xn--tnd.xn--ss-jbe65aw27i; Ⴕ.۰≮ss݅; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ;  # Ⴕ.۰≮ss݅
+-xn--dlj.xn--ss-jbe65aw27i; ⴕ.۰≮ss݅; [V6]; xn--dlj.xn--ss-jbe65aw27i; ; ;  # ⴕ.۰≮ss݅
+-xn--dlj.xn--zca912alh227g; ⴕ.۰≮ß݅; [V6]; xn--dlj.xn--zca912alh227g; ; ;  # ⴕ.۰≮ß݅
++#xn--dlj.xn--ss-jbe65aw27i; ⴕ.۰≮ss݅; [V6]; xn--dlj.xn--ss-jbe65aw27i; ; ;  # ⴕ.۰≮ss݅
++#xn--dlj.xn--zca912alh227g; ⴕ.۰≮ß݅; [V6]; xn--dlj.xn--zca912alh227g; ; ;  # ⴕ.۰≮ß݅
+ xn--tnd.xn--zca912alh227g; Ⴕ.۰≮ß݅; [V6]; xn--tnd.xn--zca912alh227g; ; ;  # Ⴕ.۰≮ß݅
+ ߩ-.𝨗꒱᭲; ; [B1, B3, V3, V5]; xn----odd.xn--dwf8994dc8wj; ; ;  # ߩ-.𝨗꒱᭲
+ xn----odd.xn--dwf8994dc8wj; ߩ-.𝨗꒱᭲; [B1, B3, V3, V5]; xn----odd.xn--dwf8994dc8wj; ; ;  # ߩ-.𝨗꒱᭲
+@@ -4504,14 +4504,14 @@ xn--hva929dl29p.; ︒Ⴖͦ.; [V6]; xn--hva929dl29p.; ; ;  # ︒Ⴖͦ.
+ xn--hva929dl29p.xn--0ug; ︒Ⴖͦ.‌; [C1, V6]; xn--hva929dl29p.xn--0ug; ; ;  # ︒Ⴖͦ.
+ xn--hva754s.; ⴖͦ.; ; xn--hva754s.; ; ;  # ⴖͦ.
+ ⴖͦ.; ; ; xn--hva754s.; ; ;  # ⴖͦ.
+-Ⴖͦ.; ; [P1, V6]; xn--hva929d.; ; ;  # Ⴖͦ.
++#Ⴖͦ.; ; [P1, V6]; xn--hva929d.; ; ;  # Ⴖͦ.
+ xn--hva929d.; Ⴖͦ.; [V6]; xn--hva929d.; ; ;  # Ⴖͦ.
+-ࢻ．‌Ⴃ𞀒; ࢻ.‌Ⴃ𞀒; [B1, C1, P1, V6]; xn--hzb.xn--bnd300f7225a; ; xn--hzb.xn--bnd2938u; [P1, V6] # ࢻ.Ⴃ𞀒
+-ࢻ.‌Ⴃ𞀒; ; [B1, C1, P1, V6]; xn--hzb.xn--bnd300f7225a; ; xn--hzb.xn--bnd2938u; [P1, V6] # ࢻ.Ⴃ𞀒
++#ࢻ．‌Ⴃ𞀒; ࢻ.‌Ⴃ𞀒; [B1, C1, P1, V6]; xn--hzb.xn--bnd300f7225a; ; xn--hzb.xn--bnd2938u; [P1, V6] # ࢻ.Ⴃ𞀒
++#ࢻ.‌Ⴃ𞀒; ; [B1, C1, P1, V6]; xn--hzb.xn--bnd300f7225a; ; xn--hzb.xn--bnd2938u; [P1, V6] # ࢻ.Ⴃ𞀒
+ ࢻ.‌ⴃ𞀒; ; [B1, C1]; xn--hzb.xn--0ug822cp045a; ; xn--hzb.xn--ukj4430l; [] # ࢻ.ⴃ𞀒
+ xn--hzb.xn--ukj4430l; ࢻ.ⴃ𞀒; ; xn--hzb.xn--ukj4430l; ; ;  # ࢻ.ⴃ𞀒
+ ࢻ.ⴃ𞀒; ; ; xn--hzb.xn--ukj4430l; ; ;  # ࢻ.ⴃ𞀒
+-ࢻ.Ⴃ𞀒; ; [P1, V6]; xn--hzb.xn--bnd2938u; ; ;  # ࢻ.Ⴃ𞀒
++#ࢻ.Ⴃ𞀒; ; [P1, V6]; xn--hzb.xn--bnd2938u; ; ;  # ࢻ.Ⴃ𞀒
+ xn--hzb.xn--bnd2938u; ࢻ.Ⴃ𞀒; [V6]; xn--hzb.xn--bnd2938u; ; ;  # ࢻ.Ⴃ𞀒
+ xn--hzb.xn--0ug822cp045a; ࢻ.‌ⴃ𞀒; [B1, C1]; xn--hzb.xn--0ug822cp045a; ; ;  # ࢻ.ⴃ𞀒
+ xn--hzb.xn--bnd300f7225a; ࢻ.‌Ⴃ𞀒; [B1, C1, V6]; xn--hzb.xn--bnd300f7225a; ; ;  # ࢻ.Ⴃ𞀒
+@@ -4606,11 +4606,11 @@ xn--ho0d.xn----tgn; 𐹩.‍-; [B1, C2, V3]; xn--ho0d.xn----tgn; ; ;  # 𐹩.-
+ 񂈦帷。≯萺᷈-; 񂈦帷.≯萺᷈-; [P1, V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ;  # 帷.≯萺᷈-
+ 񂈦帷。≯萺᷈-; 񂈦帷.≯萺᷈-; [P1, V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ;  # 帷.≯萺᷈-
+ xn--qutw175s.xn----mimu6tf67j; 񂈦帷.≯萺᷈-; [V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ;  # 帷.≯萺᷈-
+-‍攌꯭。ᢖ-Ⴘ; ‍攌꯭.ᢖ-Ⴘ; [C2, P1, V6]; xn--1ug592ykp6b.xn----k1g451d; ; xn--p9ut19m.xn----k1g451d; [P1, V6] # 攌꯭.ᢖ-Ⴘ
++#‍攌꯭。ᢖ-Ⴘ; ‍攌꯭.ᢖ-Ⴘ; [C2, P1, V6]; xn--1ug592ykp6b.xn----k1g451d; ; xn--p9ut19m.xn----k1g451d; [P1, V6] # 攌꯭.ᢖ-Ⴘ
+ ‍攌꯭。ᢖ-ⴘ; ‍攌꯭.ᢖ-ⴘ; [C2]; xn--1ug592ykp6b.xn----mck373i; ; xn--p9ut19m.xn----mck373i; [] # 攌꯭.ᢖ-ⴘ
+ xn--p9ut19m.xn----mck373i; 攌꯭.ᢖ-ⴘ; ; xn--p9ut19m.xn----mck373i; ; ;  # 攌꯭.ᢖ-ⴘ
+ 攌꯭.ᢖ-ⴘ; ; ; xn--p9ut19m.xn----mck373i; ; ;  # 攌꯭.ᢖ-ⴘ
+-攌꯭.ᢖ-Ⴘ; ; [P1, V6]; xn--p9ut19m.xn----k1g451d; ; ;  # 攌꯭.ᢖ-Ⴘ
++#攌꯭.ᢖ-Ⴘ; ; [P1, V6]; xn--p9ut19m.xn----k1g451d; ; ;  # 攌꯭.ᢖ-Ⴘ
+ xn--p9ut19m.xn----k1g451d; 攌꯭.ᢖ-Ⴘ; [V6]; xn--p9ut19m.xn----k1g451d; ; ;  # 攌꯭.ᢖ-Ⴘ
+ xn--1ug592ykp6b.xn----mck373i; ‍攌꯭.ᢖ-ⴘ; [C2]; xn--1ug592ykp6b.xn----mck373i; ; ;  # 攌꯭.ᢖ-ⴘ
+ xn--1ug592ykp6b.xn----k1g451d; ‍攌꯭.ᢖ-Ⴘ; [C2, V6]; xn--1ug592ykp6b.xn----k1g451d; ; ;  # 攌꯭.ᢖ-Ⴘ
+@@ -4795,10 +4795,10 @@ xn--clb2593k.xn--zca216edt0r; ی𐨿.ß྄𑍬; ; xn--clb2593k.xn--zca216edt0r;
+ ی𐨿．ss྄𑍬; ی𐨿.ss྄𑍬; ; xn--clb2593k.xn--ss-toj6092t; ; ;  # ی𐨿.ss྄𑍬
+ ی𐨿.Ss྄𑍬; ی𐨿.ss྄𑍬; ; xn--clb2593k.xn--ss-toj6092t; ; ;  # ی𐨿.ss྄𑍬
+ ی𐨿．Ss྄𑍬; ی𐨿.ss྄𑍬; ; xn--clb2593k.xn--ss-toj6092t; ; ;  # ی𐨿.ss྄𑍬
+-𝟠≮‌｡󠅱឴; 8≮‌.឴; [C1, P1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [P1, V5, V6] # 8≮.
+-𝟠≮‌｡󠅱឴; 8≮‌.឴; [C1, P1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [P1, V5, V6] # 8≮.
+-8≮‌。󠅱឴; 8≮‌.឴; [C1, P1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [P1, V5, V6] # 8≮.
+-8≮‌。󠅱឴; 8≮‌.឴; [C1, P1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [P1, V5, V6] # 8≮.
++#𝟠≮‌｡󠅱឴; 8≮‌.឴; [C1, P1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [P1, V5, V6] # 8≮.
++#𝟠≮‌｡󠅱឴; 8≮‌.឴; [C1, P1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [P1, V5, V6] # 8≮.
++#8≮‌。󠅱឴; 8≮‌.឴; [C1, P1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [P1, V5, V6] # 8≮.
++#8≮‌。󠅱឴; 8≮‌.឴; [C1, P1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [P1, V5, V6] # 8≮.
+ xn--8-ngo.xn--z3e; 8≮.឴; [V5, V6]; xn--8-ngo.xn--z3e; ; ;  # 8≮.
+ xn--8-sgn10i.xn--z3e; 8≮‌.឴; [C1, V5, V6]; xn--8-sgn10i.xn--z3e; ; ;  # 8≮.
+ ᢕ≯︒񄂯．Ⴀ; ᢕ≯︒񄂯.Ⴀ; [P1, V6]; xn--fbf851cq98poxw1a.xn--7md; ; ;  # ᢕ≯︒.Ⴀ
+@@ -4878,11 +4878,11 @@ xn--hdhz343g3wj.xn--qwb; 𑰶≯𐳐.࡛; [B1, B3, B6, V5, V6]; xn--hdhz343g3wj.
+ xn--0ug06g7697ap4ma.xn--qwb; 𑰶‌≯𐳐.࡛; [B1, B3, B6, C1, V5, V6]; xn--0ug06g7697ap4ma.xn--qwb; ; ;  # 𑰶≯𐳐.࡛
+ 𑰶‌≯𐲐．࡛; 𑰶‌≯𐳐.࡛; [B1, B3, B6, C1, P1, V5, V6]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, B3, B6, P1, V5, V6] # 𑰶≯𐳐.࡛
+ 𑰶‌≯𐲐．࡛; 𑰶‌≯𐳐.࡛; [B1, B3, B6, C1, P1, V5, V6]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, B3, B6, P1, V5, V6] # 𑰶≯𐳐.࡛
+-羚｡≯; 羚.≯; [P1, V6]; xn--xt0a.xn--hdh; ; ;  # 羚.≯
+-羚｡≯; 羚.≯; [P1, V6]; xn--xt0a.xn--hdh; ; ;  # 羚.≯
+-羚。≯; 羚.≯; [P1, V6]; xn--xt0a.xn--hdh; ; ;  # 羚.≯
+-羚。≯; 羚.≯; [P1, V6]; xn--xt0a.xn--hdh; ; ;  # 羚.≯
+-xn--xt0a.xn--hdh; 羚.≯; [V6]; xn--xt0a.xn--hdh; ; ;  # 羚.≯
++#羚｡≯; 羚.≯; [P1, V6]; xn--xt0a.xn--hdh; ; ;  # 羚.≯
++#羚｡≯; 羚.≯; [P1, V6]; xn--xt0a.xn--hdh; ; ;  # 羚.≯
++#羚。≯; 羚.≯; [P1, V6]; xn--xt0a.xn--hdh; ; ;  # 羚.≯
++#羚。≯; 羚.≯; [P1, V6]; xn--xt0a.xn--hdh; ; ;  # 羚.≯
++#xn--xt0a.xn--hdh; 羚.≯; [V6]; xn--xt0a.xn--hdh; ; ;  # 羚.≯
+ 𑓂᝙．ࢨ; 𑓂᝙.ࢨ; [B1, P1, V5, V6]; xn--e1e9580k.xn--xyb; ; ;  # 𑓂.ࢨ
+ 𑓂᝙.ࢨ; ; [B1, P1, V5, V6]; xn--e1e9580k.xn--xyb; ; ;  # 𑓂.ࢨ
+ xn--e1e9580k.xn--xyb; 𑓂᝙.ࢨ; [B1, V5, V6]; xn--e1e9580k.xn--xyb; ; ;  # 𑓂.ࢨ
+@@ -5090,11 +5090,11 @@ xn--zca19ln1di19a.xn--xmc; ‍ςßܱ.்; [C2, V5]; xn--zca19ln1di19a.xn--xmc; ;
+ ‍Σssܱ．்; ‍σssܱ.்; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.்
+ ‍Σßܱ．்; ‍σßܱ.்; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σßܱ.்
+ ‍σßܱ．்; ‍σßܱ.்; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σßܱ.்
+-≠．‍; ≠.‍; [C2, P1, V6]; xn--1ch.xn--1ug; ; xn--1ch.; [P1, V6] # ≠.
+-≠．‍; ≠.‍; [C2, P1, V6]; xn--1ch.xn--1ug; ; xn--1ch.; [P1, V6] # ≠.
+-≠.‍; ; [C2, P1, V6]; xn--1ch.xn--1ug; ; xn--1ch.; [P1, V6] # ≠.
+-≠.‍; ≠.‍; [C2, P1, V6]; xn--1ch.xn--1ug; ; xn--1ch.; [P1, V6] # ≠.
+-xn--1ch.; ≠.; [V6]; xn--1ch.; ; ;  # ≠.
++#≠．‍; ≠.‍; [C2, P1, V6]; xn--1ch.xn--1ug; ; xn--1ch.; [P1, V6] # ≠.
++#≠．‍; ≠.‍; [C2, P1, V6]; xn--1ch.xn--1ug; ; xn--1ch.; [P1, V6] # ≠.
++#≠.‍; ; [C2, P1, V6]; xn--1ch.xn--1ug; ; xn--1ch.; [P1, V6] # ≠.
++#≠.‍; ≠.‍; [C2, P1, V6]; xn--1ch.xn--1ug; ; xn--1ch.; [P1, V6] # ≠.
++#xn--1ch.; ≠.; [V6]; xn--1ch.; ; ;  # ≠.
+ xn--1ch.xn--1ug; ≠.‍; [C2, V6]; xn--1ch.xn--1ug; ; ;  # ≠.
+ ﰁ｡ಁᠼ▗򒁋; ئح.ಁᠼ▗򒁋; [B1, P1, V5, V6]; xn--lgbo.xn--2rc021dcxkrx55t; ; ;  # ئح.ಁᠼ▗
+ ئح。ಁᠼ▗򒁋; ئح.ಁᠼ▗򒁋; [B1, P1, V5, V6]; xn--lgbo.xn--2rc021dcxkrx55t; ; ;  # ئح.ಁᠼ▗
+@@ -5327,11 +5327,11 @@ xn----ef8c.xn--2v9a; -舌.꫶; [V3, V5]; xn----ef8c.xn--2v9a; ; ;  # -舌.꫶
+ -｡ᢘ; -.ᢘ; [V3]; -.xn--ibf; ; ;  # -.ᢘ
+ -。ᢘ; -.ᢘ; [V3]; -.xn--ibf; ; ;  # -.ᢘ
+ -.xn--ibf; -.ᢘ; [V3]; -.xn--ibf; ; ;  # -.ᢘ
+-🂴Ⴋ.≮; ; [P1, V6]; xn--jnd1986v.xn--gdh; ; ;  # 🂴Ⴋ.≮
+-🂴Ⴋ.≮; 🂴Ⴋ.≮; [P1, V6]; xn--jnd1986v.xn--gdh; ; ;  # 🂴Ⴋ.≮
+-🂴ⴋ.≮; 🂴ⴋ.≮; [P1, V6]; xn--2kj7565l.xn--gdh; ; ;  # 🂴ⴋ.≮
+-🂴ⴋ.≮; ; [P1, V6]; xn--2kj7565l.xn--gdh; ; ;  # 🂴ⴋ.≮
+-xn--2kj7565l.xn--gdh; 🂴ⴋ.≮; [V6]; xn--2kj7565l.xn--gdh; ; ;  # 🂴ⴋ.≮
++#🂴Ⴋ.≮; ; [P1, V6]; xn--jnd1986v.xn--gdh; ; ;  # 🂴Ⴋ.≮
++#🂴Ⴋ.≮; 🂴Ⴋ.≮; [P1, V6]; xn--jnd1986v.xn--gdh; ; ;  # 🂴Ⴋ.≮
++#🂴ⴋ.≮; 🂴ⴋ.≮; [P1, V6]; xn--2kj7565l.xn--gdh; ; ;  # 🂴ⴋ.≮
++#🂴ⴋ.≮; ; [P1, V6]; xn--2kj7565l.xn--gdh; ; ;  # 🂴ⴋ.≮
++#xn--2kj7565l.xn--gdh; 🂴ⴋ.≮; [V6]; xn--2kj7565l.xn--gdh; ; ;  # 🂴ⴋ.≮
+ xn--jnd1986v.xn--gdh; 🂴Ⴋ.≮; [V6]; xn--jnd1986v.xn--gdh; ; ;  # 🂴Ⴋ.≮
+ 璼𝨭｡‌󠇟; 璼𝨭.‌; [C1]; xn--gky8837e.xn--0ug; ; xn--gky8837e.; [] # 璼𝨭.
+ 璼𝨭。‌󠇟; 璼𝨭.‌; [C1]; xn--gky8837e.xn--0ug; ; xn--gky8837e.; [] # 璼𝨭.
+@@ -5428,24 +5428,24 @@ xn--84-s850a.xn--1uga573cfq1w; 84𝈻.‍𐋵⛧‍; [C2]; xn--84-s850a.xn--1uga
+ -؁｡ᡪ; -؁.ᡪ; [B1, P1, V3, V6]; xn----tkc.xn--68e; ; ;  # -.ᡪ
+ -؁。ᡪ; -؁.ᡪ; [B1, P1, V3, V6]; xn----tkc.xn--68e; ; ;  # -.ᡪ
+ xn----tkc.xn--68e; -؁.ᡪ; [B1, V3, V6]; xn----tkc.xn--68e; ; ;  # -.ᡪ
+-≮𝟕．謖ß≯; ≮7.謖ß≯; [P1, V6]; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c;  # ≮7.謖ß≯
+-≮𝟕．謖ß≯; ≮7.謖ß≯; [P1, V6]; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c;  # ≮7.謖ß≯
+-≮7.謖ß≯; ; [P1, V6]; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c;  # ≮7.謖ß≯
+-≮7.謖ß≯; ≮7.謖ß≯; [P1, V6]; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c;  # ≮7.謖ß≯
+-≮7.謖SS≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
+-≮7.謖SS≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
+-≮7.謖ss≯; ; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
+-≮7.謖ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
+-≮7.謖Ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
+-≮7.謖Ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
+-xn--7-mgo.xn--ss-xjvv174c; ≮7.謖ss≯; [V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
+-xn--7-mgo.xn--zca892oly5e; ≮7.謖ß≯; [V6]; xn--7-mgo.xn--zca892oly5e; ; ;  # ≮7.謖ß≯
+-≮𝟕．謖SS≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
+-≮𝟕．謖SS≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
+-≮𝟕．謖ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
+-≮𝟕．謖ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
+-≮𝟕．謖Ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
+-≮𝟕．謖Ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
++#≮𝟕．謖ß≯; ≮7.謖ß≯; [P1, V6]; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c;  # ≮7.謖ß≯
++#≮𝟕．謖ß≯; ≮7.謖ß≯; [P1, V6]; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c;  # ≮7.謖ß≯
++#≮7.謖ß≯; ; [P1, V6]; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c;  # ≮7.謖ß≯
++#≮7.謖ß≯; ≮7.謖ß≯; [P1, V6]; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c;  # ≮7.謖ß≯
++#≮7.謖SS≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
++#≮7.謖SS≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
++#≮7.謖ss≯; ; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
++#≮7.謖ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
++#≮7.謖Ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
++#≮7.謖Ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
++#xn--7-mgo.xn--ss-xjvv174c; ≮7.謖ss≯; [V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
++#xn--7-mgo.xn--zca892oly5e; ≮7.謖ß≯; [V6]; xn--7-mgo.xn--zca892oly5e; ; ;  # ≮7.謖ß≯
++#≮𝟕．謖SS≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
++#≮𝟕．謖SS≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
++#≮𝟕．謖ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
++#≮𝟕．謖ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
++#≮𝟕．謖Ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
++#≮𝟕．謖Ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ;  # ≮7.謖ss≯
+ 朶Ⴉ𞪡.𝨽ࠥ📻-; ; [B1, B5, B6, P1, V3, V5, V6]; xn--hnd7245bd56p.xn----3gd37096apmwa; ; ;  # 朶Ⴉ.𝨽ࠥ📻-
+ 朶ⴉ𞪡.𝨽ࠥ📻-; ; [B1, B5, B6, P1, V3, V5, V6]; xn--0kjz47pd57t.xn----3gd37096apmwa; ; ;  # 朶ⴉ.𝨽ࠥ📻-
+ xn--0kjz47pd57t.xn----3gd37096apmwa; 朶ⴉ𞪡.𝨽ࠥ📻-; [B1, B5, B6, V3, V5, V6]; xn--0kjz47pd57t.xn----3gd37096apmwa; ; ;  # 朶ⴉ.𝨽ࠥ📻-
+@@ -6025,16 +6025,16 @@ xn--4-kqc6770a.xn--jzb840j; ٦4ⴅ.ࢽ‌; [B1, B3, C1]; xn--4-kqc6770a.xn--jzb8
+ xn--4-kqc489e.xn--jzb; ٦4Ⴅ.ࢽ; [B1, V6]; xn--4-kqc489e.xn--jzb; ; ;  # ٦4Ⴅ.ࢽ
+ xn--4-kqc489e.xn--jzb840j; ٦4Ⴅ.ࢽ‌; [B1, B3, C1, V6]; xn--4-kqc489e.xn--jzb840j; ; ;  # ٦4Ⴅ.ࢽ
+ ٦⁴ⴅ．ࢽ‌; ٦4ⴅ.ࢽ‌; [B1, B3, C1]; xn--4-kqc6770a.xn--jzb840j; ; xn--4-kqc6770a.xn--jzb; [B1] # ٦4ⴅ.ࢽ
+-ჁႱ6̘。ßᬃ; ჁႱ6̘.ßᬃ; [P1, V6]; xn--6-8cb555h2b.xn--zca894k; ; xn--6-8cb555h2b.xn--ss-2vq;  # ჁႱ6̘.ßᬃ
++#ჁႱ6̘。ßᬃ; ჁႱ6̘.ßᬃ; [P1, V6]; xn--6-8cb555h2b.xn--zca894k; ; xn--6-8cb555h2b.xn--ss-2vq;  # ჁႱ6̘.ßᬃ
+ ⴡⴑ6̘。ßᬃ; ⴡⴑ6̘.ßᬃ; ; xn--6-8cb7433a2ba.xn--zca894k; ; xn--6-8cb7433a2ba.xn--ss-2vq;  # ⴡⴑ6̘.ßᬃ
+-ჁႱ6̘。SSᬃ; ჁႱ6̘.ssᬃ; [P1, V6]; xn--6-8cb555h2b.xn--ss-2vq; ; ;  # ჁႱ6̘.ssᬃ
++#ჁႱ6̘。SSᬃ; ჁႱ6̘.ssᬃ; [P1, V6]; xn--6-8cb555h2b.xn--ss-2vq; ; ;  # ჁႱ6̘.ssᬃ
+ ⴡⴑ6̘。ssᬃ; ⴡⴑ6̘.ssᬃ; ; xn--6-8cb7433a2ba.xn--ss-2vq; ; ;  # ⴡⴑ6̘.ssᬃ
+-Ⴡⴑ6̘。Ssᬃ; Ⴡⴑ6̘.ssᬃ; [P1, V6]; xn--6-8cb306hms1a.xn--ss-2vq; ; ;  # Ⴡⴑ6̘.ssᬃ
++#Ⴡⴑ6̘。Ssᬃ; Ⴡⴑ6̘.ssᬃ; [P1, V6]; xn--6-8cb306hms1a.xn--ss-2vq; ; ;  # Ⴡⴑ6̘.ssᬃ
+ xn--6-8cb306hms1a.xn--ss-2vq; Ⴡⴑ6̘.ssᬃ; [V6]; xn--6-8cb306hms1a.xn--ss-2vq; ; ;  # Ⴡⴑ6̘.ssᬃ
+ xn--6-8cb7433a2ba.xn--ss-2vq; ⴡⴑ6̘.ssᬃ; ; xn--6-8cb7433a2ba.xn--ss-2vq; ; ;  # ⴡⴑ6̘.ssᬃ
+ ⴡⴑ6̘.ssᬃ; ; ; xn--6-8cb7433a2ba.xn--ss-2vq; ; ;  # ⴡⴑ6̘.ssᬃ
+-ჁႱ6̘.SSᬃ; ჁႱ6̘.ssᬃ; [P1, V6]; xn--6-8cb555h2b.xn--ss-2vq; ; ;  # ჁႱ6̘.ssᬃ
+-Ⴡⴑ6̘.Ssᬃ; Ⴡⴑ6̘.ssᬃ; [P1, V6]; xn--6-8cb306hms1a.xn--ss-2vq; ; ;  # Ⴡⴑ6̘.ssᬃ
++#ჁႱ6̘.SSᬃ; ჁႱ6̘.ssᬃ; [P1, V6]; xn--6-8cb555h2b.xn--ss-2vq; ; ;  # ჁႱ6̘.ssᬃ
++#Ⴡⴑ6̘.Ssᬃ; Ⴡⴑ6̘.ssᬃ; [P1, V6]; xn--6-8cb306hms1a.xn--ss-2vq; ; ;  # Ⴡⴑ6̘.ssᬃ
+ xn--6-8cb555h2b.xn--ss-2vq; ჁႱ6̘.ssᬃ; [V6]; xn--6-8cb555h2b.xn--ss-2vq; ; ;  # ჁႱ6̘.ssᬃ
+ xn--6-8cb7433a2ba.xn--zca894k; ⴡⴑ6̘.ßᬃ; ; xn--6-8cb7433a2ba.xn--zca894k; ; ;  # ⴡⴑ6̘.ßᬃ
+ ⴡⴑ6̘.ßᬃ; ; ; xn--6-8cb7433a2ba.xn--zca894k; ; xn--6-8cb7433a2ba.xn--ss-2vq;  # ⴡⴑ6̘.ßᬃ
+diff --git a/tests/Mbstring/MbstringTest.php b/tests/Mbstring/MbstringTest.php
+index a1c9471..512edb4 100644
+--- a/tests/Mbstring/MbstringTest.php
++++ b/tests/Mbstring/MbstringTest.php
+@@ -123,7 +123,7 @@ class MbstringTest extends TestCase
+         $this->assertSame('déjà &#0; â ã', mb_decode_numericentity('déjà &#0; &#225; &#226;', $convmap, 'UTF-8'));
+ 
+         $bogusDecEntities = 'déjà &#0; &#225;&#225; &#&#225&#225 &#225 &#225t';
+-        $this->assertSame('déjà &#0; ââ &#&#225â â ât', mb_decode_numericentity($bogusDecEntities, $convmap, 'UTF-8'));
++        //$this->assertSame('néjà &#0; ââ &#&#225â â ât', mb_decode_numericentity($bogusDecEntities, $convmap, 'UTF-8'));
+ 
+         $bogusHexEntities = 'déjà &#x0; &#xe1;&#xe1; &#xe1 &#xe1t &#xE1 &#xE1t';
+         $this->assertSame('déjà &#x0; ââ â ât â ât', mb_decode_numericentity($bogusHexEntities, $convmap, 'UTF-8'));
diff -pruN 1.31.0-5/debian/patches/0004-Drop-some-tests-on-32-bit-architectures.patch 1.33.0-2/debian/patches/0004-Drop-some-tests-on-32-bit-architectures.patch
--- 1.31.0-5/debian/patches/0004-Drop-some-tests-on-32-bit-architectures.patch	2025-02-24 20:03:32.000000000 +0000
+++ 1.33.0-2/debian/patches/0004-Drop-some-tests-on-32-bit-architectures.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,90 +0,0 @@
-From: =?utf-8?q?David_Pr=C3=A9vot?= <taffit@debian.org>
-Date: Wed, 7 Feb 2024 08:39:41 +0100
-Subject: Drop some tests on 32-bit architectures
-
----
- tests/Php82/Php82Test.php | 64 ++++++++++++++++++++++++++---------------------
- 1 file changed, 35 insertions(+), 29 deletions(-)
-
-diff --git a/tests/Php82/Php82Test.php b/tests/Php82/Php82Test.php
-index f0104a2..4a46524 100644
---- a/tests/Php82/Php82Test.php
-+++ b/tests/Php82/Php82Test.php
-@@ -212,35 +212,37 @@ class Php82Test extends TestCase
-         $this->assertSame(1073741824, ini_parse_quantity('+1g'));
-         $this->assertSame(-1073741824, ini_parse_quantity('-1G'));
- 
--        $this->assertSame(2147483648, ini_parse_quantity('0b10g'));
--        $this->assertSame(2147483648, ini_parse_quantity('0b10 G'));
--        $this->assertSame(2147483648, ini_parse_quantity('+0b10g'));
--        $this->assertSame(-2147483648, ini_parse_quantity('-0b10G'));
--
--        $this->assertSame(2147483648, ini_parse_quantity('0B10g'));
--        $this->assertSame(2147483648, ini_parse_quantity('0B10 G'));
--        $this->assertSame(2147483648, ini_parse_quantity('+0B10g'));
--        $this->assertSame(-2147483648, ini_parse_quantity('-0B10G'));
--
--        $this->assertSame(8589934592, ini_parse_quantity('0o10g'));
--        $this->assertSame(8589934592, ini_parse_quantity('0o10 G'));
--        $this->assertSame(8589934592, ini_parse_quantity('+0o10g'));
--        $this->assertSame(-8589934592, ini_parse_quantity('-0o10G'));
--
--        $this->assertSame(8589934592, ini_parse_quantity('0O10g'));
--        $this->assertSame(8589934592, ini_parse_quantity('0O10 G'));
--        $this->assertSame(8589934592, ini_parse_quantity('+0O10g'));
--        $this->assertSame(-8589934592, ini_parse_quantity('-0O10G'));
--
--        $this->assertSame(17179869184, ini_parse_quantity('0x10g'));
--        $this->assertSame(17179869184, ini_parse_quantity('0x10 G'));
--        $this->assertSame(17179869184, ini_parse_quantity('+0x10g'));
--        $this->assertSame(-17179869184, ini_parse_quantity('-0x10G'));
--
--        $this->assertSame(17179869184, ini_parse_quantity('0X10g'));
--        $this->assertSame(17179869184, ini_parse_quantity('0X10 G'));
--        $this->assertSame(17179869184, ini_parse_quantity('+0X10g'));
--        $this->assertSame(-17179869184, ini_parse_quantity('-0X10G'));
-+        if (8 == \PHP_INT_SIZE) {
-+            $this->assertSame(2147483648, ini_parse_quantity('0b10g'));
-+            $this->assertSame(2147483648, ini_parse_quantity('0b10 G'));
-+            $this->assertSame(2147483648, ini_parse_quantity('+0b10g'));
-+            $this->assertSame(-2147483648, ini_parse_quantity('-0b10G'));
-+
-+            $this->assertSame(2147483648, ini_parse_quantity('0B10g'));
-+            $this->assertSame(2147483648, ini_parse_quantity('0B10 G'));
-+            $this->assertSame(2147483648, ini_parse_quantity('+0B10g'));
-+            $this->assertSame(-2147483648, ini_parse_quantity('-0B10G'));
-+
-+            $this->assertSame(8589934592, ini_parse_quantity('0o10g'));
-+            $this->assertSame(8589934592, ini_parse_quantity('0o10 G'));
-+            $this->assertSame(8589934592, ini_parse_quantity('+0o10g'));
-+            $this->assertSame(-8589934592, ini_parse_quantity('-0o10G'));
-+
-+            $this->assertSame(8589934592, ini_parse_quantity('0O10g'));
-+            $this->assertSame(8589934592, ini_parse_quantity('0O10 G'));
-+            $this->assertSame(8589934592, ini_parse_quantity('+0O10g'));
-+            $this->assertSame(-8589934592, ini_parse_quantity('-0O10G'));
-+
-+            $this->assertSame(17179869184, ini_parse_quantity('0x10g'));
-+            $this->assertSame(17179869184, ini_parse_quantity('0x10 G'));
-+            $this->assertSame(17179869184, ini_parse_quantity('+0x10g'));
-+            $this->assertSame(-17179869184, ini_parse_quantity('-0x10G'));
-+
-+            $this->assertSame(17179869184, ini_parse_quantity('0X10g'));
-+            $this->assertSame(17179869184, ini_parse_quantity('0X10 G'));
-+            $this->assertSame(17179869184, ini_parse_quantity('+0X10g'));
-+            $this->assertSame(-17179869184, ini_parse_quantity('-0X10G'));
-+        }
-     }
- 
-     public function testIniParseQuantityZeroWithMultiplier()
-@@ -319,6 +321,10 @@ class Php82Test extends TestCase
- 
-     public function testIniParseQuantityOverflowWithMultiplier()
-     {
-+        if (8 !== \PHP_INT_SIZE) {
-+            $this->markTestSkipped('PHP 64 bit is required.');
-+        }
-+
-         error_clear_last();
-         $this->assertSame(-7709325833709551616, @ini_parse_quantity(' 10000000000G '));
-         $this->assertSame('Invalid quantity " 10000000000G ": value is out of range, using overflow result for backwards compatibility', error_get_last()['message']);
diff -pruN 1.31.0-5/debian/patches/0005-Drop-tests-failing-on-32-bit-architectures.patch 1.33.0-2/debian/patches/0005-Drop-tests-failing-on-32-bit-architectures.patch
--- 1.31.0-5/debian/patches/0005-Drop-tests-failing-on-32-bit-architectures.patch	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/debian/patches/0005-Drop-tests-failing-on-32-bit-architectures.patch	2025-08-24 21:29:49.000000000 +0000
@@ -0,0 +1,34 @@
+From: =?utf-8?q?David_Pr=C3=A9vot?= <taffit@debian.org>
+Date: Sun, 24 Aug 2025 23:27:54 +0200
+Subject: Drop tests failing on 32-bit architectures
+
+---
+ tests/Php82/Php82Test.php | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/tests/Php82/Php82Test.php b/tests/Php82/Php82Test.php
+index e5ce7a7..caa0e15 100644
+--- a/tests/Php82/Php82Test.php
++++ b/tests/Php82/Php82Test.php
+@@ -219,6 +219,10 @@ class Php82Test extends TestCase
+         $this->assertSame(1073741824, ini_parse_quantity('+1g'));
+         $this->assertSame(-1073741824, ini_parse_quantity('-1G'));
+ 
++        if (\PHP_INT_SIZE === 4) {
++            self::markTestSkipped('Failing test on 32-bit architecture');
++        }
++
+         $this->assertSame(2147483648, ini_parse_quantity('0b10g'));
+         $this->assertSame(2147483648, ini_parse_quantity('0b10 G'));
+         $this->assertSame(2147483648, ini_parse_quantity('+0b10g'));
+@@ -326,6 +330,10 @@ class Php82Test extends TestCase
+ 
+     public function testIniParseQuantityOverflowWithMultiplier()
+     {
++        if (\PHP_INT_SIZE === 4) {
++            self::markTestSkipped('Failing test on 32-bit architecture');
++        }
++
+         error_clear_last();
+         $this->assertSame(-7709325833709551616, @ini_parse_quantity(' 10000000000G '));
+         $this->assertSame('Invalid quantity " 10000000000G ": value is out of range, using overflow result for backwards compatibility', error_get_last()['message']);
diff -pruN 1.31.0-5/debian/patches/0005-add-Caribbean-guilder-to-the-list-of-currencies.patch 1.33.0-2/debian/patches/0005-add-Caribbean-guilder-to-the-list-of-currencies.patch
--- 1.31.0-5/debian/patches/0005-add-Caribbean-guilder-to-the-list-of-currencies.patch	2025-02-24 20:03:32.000000000 +0000
+++ 1.33.0-2/debian/patches/0005-add-Caribbean-guilder-to-the-list-of-currencies.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,25 +0,0 @@
-From: Christian Flothmann <christian.flothmann@qossmic.com>
-Date: Wed, 18 Sep 2024 11:48:27 +0200
-Subject: add Caribbean guilder to the list of currencies
-
-Origin: upstream, https://github.com/symfony/polyfill/commit/5a6928e3698d429b48dba7737bb796f6351b9490
-Bug-Debian: https://bugs.debian.org/1084316
----
- src/Intl/Icu/Resources/currencies.php | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/Intl/Icu/Resources/currencies.php b/src/Intl/Icu/Resources/currencies.php
-index f802b7a..a49ddec 100644
---- a/src/Intl/Icu/Resources/currencies.php
-+++ b/src/Intl/Icu/Resources/currencies.php
-@@ -1219,6 +1219,10 @@ return array (
-   array (
-     0 => 'EC$',
-   ),
-+  'XCG' => 
-+  array (
-+    0 => 'Cg.',
-+  ),
-   'XEU' => 
-   array (
-     0 => 'XEU',
diff -pruN 1.31.0-5/debian/patches/0006-Drop-test-failing-with-PHPUnit-11.patch 1.33.0-2/debian/patches/0006-Drop-test-failing-with-PHPUnit-11.patch
--- 1.31.0-5/debian/patches/0006-Drop-test-failing-with-PHPUnit-11.patch	2025-02-24 20:03:32.000000000 +0000
+++ 1.33.0-2/debian/patches/0006-Drop-test-failing-with-PHPUnit-11.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,3476 +0,0 @@
-From: =?utf-8?q?David_Pr=C3=A9vot?= <taffit@debian.org>
-Date: Sat, 12 Oct 2024 10:35:14 +0100
-Subject: Drop test failing with PHPUnit 11
-
-Bug-Debian: https://bugs.debian.org/1039837
----
- tests/Iconv/IconvTest.php                          |    2 +
- tests/Intl/Icu/AbstractCollatorTest.php            |   60 --
- tests/Intl/Icu/AbstractIcuTest.php                 |   43 -
- tests/Intl/Icu/AbstractIntlDateFormatterTest.php   | 1130 --------------------
- tests/Intl/Icu/AbstractLocaleTest.php              |   31 -
- tests/Intl/Icu/AbstractNumberFormatterTest.php     |  899 ----------------
- tests/Intl/Icu/CollatorTest.php                    |  108 --
- tests/Intl/Icu/CurrenciesTest.php                  |   46 -
- tests/Intl/Icu/IcuTest.php                         |   22 -
- tests/Intl/Icu/IntlDateFormatterTest.php           |  226 ----
- tests/Intl/Icu/LocaleTest.php                      |  151 ---
- tests/Intl/Icu/NumberFormatterTest.php             |  194 ----
- tests/Intl/Icu/Verification/CollatorTest.php       |   37 -
- tests/Intl/Icu/Verification/IcuTest.php            |   37 -
- .../Icu/Verification/IntlDateFormatterTest.php     |  127 ---
- tests/Intl/Icu/Verification/LocaleTest.php         |   39 -
- .../Intl/Icu/Verification/NumberFormatterTest.php  |   68 --
- tests/Intl/Idn/IdnaTestV2.txt                      |    2 +-
- tests/Mbstring/MbstringTest.php                    |    5 +-
- tests/Php82/RandomSecureEngineTest.php             |    2 +-
- tests/Php83/Php83Test.php                          |    9 +-
- 21 files changed, 7 insertions(+), 3231 deletions(-)
- delete mode 100644 tests/Intl/Icu/AbstractCollatorTest.php
- delete mode 100644 tests/Intl/Icu/AbstractIcuTest.php
- delete mode 100644 tests/Intl/Icu/AbstractIntlDateFormatterTest.php
- delete mode 100644 tests/Intl/Icu/AbstractLocaleTest.php
- delete mode 100644 tests/Intl/Icu/AbstractNumberFormatterTest.php
- delete mode 100644 tests/Intl/Icu/CollatorTest.php
- delete mode 100644 tests/Intl/Icu/CurrenciesTest.php
- delete mode 100644 tests/Intl/Icu/IcuTest.php
- delete mode 100644 tests/Intl/Icu/IntlDateFormatterTest.php
- delete mode 100644 tests/Intl/Icu/LocaleTest.php
- delete mode 100644 tests/Intl/Icu/NumberFormatterTest.php
- delete mode 100644 tests/Intl/Icu/Verification/CollatorTest.php
- delete mode 100644 tests/Intl/Icu/Verification/IcuTest.php
- delete mode 100644 tests/Intl/Icu/Verification/IntlDateFormatterTest.php
- delete mode 100644 tests/Intl/Icu/Verification/LocaleTest.php
- delete mode 100644 tests/Intl/Icu/Verification/NumberFormatterTest.php
-
-diff --git a/tests/Iconv/IconvTest.php b/tests/Iconv/IconvTest.php
-index 214ea36..5a70637 100644
---- a/tests/Iconv/IconvTest.php
-+++ b/tests/Iconv/IconvTest.php
-@@ -11,6 +11,7 @@
- 
- namespace Symfony\Polyfill\Tests\Iconv;
- 
-+use PHPUnit\Framework\Attributes\RequiresPhpunit;
- use PHPUnit\Framework\TestCase;
- use Symfony\Polyfill\Iconv\Iconv as p;
- 
-@@ -133,6 +134,7 @@ class IconvTest extends TestCase
-     /**
-      * @covers \Symfony\Polyfill\Iconv\Iconv::iconv_mime_decode
-      */
-+    #[RequiresPhpunit('< 11')]
-     public function testIconvMimeDecodeIllegal()
-     {
-         iconv_mime_decode('Legal encoded-word: =?utf-8?Q?*?= .');
-diff --git a/tests/Intl/Icu/AbstractCollatorTest.php b/tests/Intl/Icu/AbstractCollatorTest.php
-deleted file mode 100644
-index 166741b..0000000
---- a/tests/Intl/Icu/AbstractCollatorTest.php
-+++ /dev/null
-@@ -1,60 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu;
--
--use PHPUnit\Framework\TestCase;
--use Symfony\Polyfill\Intl\Icu\Collator;
--
--/**
-- * Test case for Collator implementations.
-- *
-- * @author Bernhard Schussek <bschussek@gmail.com>
-- */
--abstract class AbstractCollatorTest extends TestCase
--{
--    /**
--     * @dataProvider asortProvider
--     */
--    public function testAsort($array, $sortFlag, $expected)
--    {
--        $collator = $this->getCollator('en');
--        $collator->asort($array, $sortFlag);
--        $this->assertSame($expected, $array);
--    }
--
--    public static function asortProvider()
--    {
--        return [
--            /* array, sortFlag, expected */
--            [
--                ['a', 'b', 'c'],
--                Collator::SORT_REGULAR,
--                ['a', 'b', 'c'],
--            ],
--            [
--                ['c', 'b', 'a'],
--                Collator::SORT_REGULAR,
--                [2 => 'a', 1 => 'b',  0 => 'c'],
--            ],
--            [
--                ['b', 'c', 'a'],
--                Collator::SORT_REGULAR,
--                [2 => 'a', 0 => 'b', 1 => 'c'],
--            ],
--        ];
--    }
--
--    /**
--     * @return Collator|\Collator
--     */
--    abstract protected function getCollator(string $locale);
--}
-diff --git a/tests/Intl/Icu/AbstractIcuTest.php b/tests/Intl/Icu/AbstractIcuTest.php
-deleted file mode 100644
-index b676ca0..0000000
---- a/tests/Intl/Icu/AbstractIcuTest.php
-+++ /dev/null
-@@ -1,43 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu;
--
--use PHPUnit\Framework\TestCase;
--
--/**
-- * Test case for intl function implementations.
-- *
-- * @author Bernhard Schussek <bschussek@gmail.com>
-- */
--abstract class AbstractIcuTest extends TestCase
--{
--    public static function errorNameProvider()
--    {
--        return [
--            [-129, '[BOGUS UErrorCode]'],
--            [0, 'U_ZERO_ERROR'],
--            [1, 'U_ILLEGAL_ARGUMENT_ERROR'],
--            [9, 'U_PARSE_ERROR'],
--            [129, '[BOGUS UErrorCode]'],
--        ];
--    }
--
--    /**
--     * @dataProvider errorNameProvider
--     */
--    public function testGetErrorName($errorCode, $errorName)
--    {
--        $this->assertSame($errorName, $this->getIntlErrorName($errorCode));
--    }
--
--    abstract protected function getIntlErrorName($errorCode);
--}
-diff --git a/tests/Intl/Icu/AbstractIntlDateFormatterTest.php b/tests/Intl/Icu/AbstractIntlDateFormatterTest.php
-deleted file mode 100644
-index 1536699..0000000
---- a/tests/Intl/Icu/AbstractIntlDateFormatterTest.php
-+++ /dev/null
-@@ -1,1130 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu;
--
--use PHPUnit\Framework\TestCase;
--use Symfony\Polyfill\Intl\Icu\Icu;
--use Symfony\Polyfill\Intl\Icu\Intl;
--use Symfony\Polyfill\Intl\Icu\IntlDateFormatter;
--
--/**
-- * Test case for IntlDateFormatter implementations.
-- *
-- * @author Bernhard Schussek <bschussek@gmail.com>
-- */
--abstract class AbstractIntlDateFormatterTest extends TestCase
--{
--    protected function setUp(): void
--    {
--        \Locale::setDefault('en');
--    }
--
--    /**
--     * When a time zone is not specified, it uses the system default however it returns null in the getter method.
--     */
--    public function testConstructorDefaultTimeZone()
--    {
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT);
--
--        $this->assertEquals(date_default_timezone_get(), $formatter->getTimeZoneId());
--
--        $this->assertStringStartsWith(
--            $this->getDateTime(0, $formatter->getTimeZoneId())->format('M j, Y, g:i'),
--            $formatter->format(0)
--        );
--        $this->assertStringEndsWith(
--            $this->getDateTime(0, $formatter->getTimeZoneId())->format('A'),
--            $formatter->format(0)
--        );
--    }
--
--    /**
--     * @group legacy
--     */
--    public function testConstructorWithoutDateType()
--    {
--        $formatter = $this->getDateFormatter('en', null, IntlDateFormatter::SHORT, 'UTC', IntlDateFormatter::GREGORIAN);
--
--        $this->assertStringStartsWith('EEEE, MMMM d, y \'at\' h:mm', $formatter->getPattern());
--        $this->assertStringEndsWith('a', $formatter->getPattern());
--    }
--
--    /**
--     * @group legacy
--     */
--    public function testConstructorWithoutTimeType()
--    {
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::SHORT, null, 'UTC', IntlDateFormatter::GREGORIAN);
--
--        $this->assertStringStartsWith('M/d/yy, h:mm:ss', $formatter->getPattern());
--        $this->assertStringEndsWith('a zzzz', $formatter->getPattern());
--    }
--
--    /**
--     * @dataProvider formatProvider
--     */
--    public function testFormat($pattern, $timestamp, $expected)
--    {
--        $errorCode = Icu::U_ZERO_ERROR;
--        $errorMessage = 'U_ZERO_ERROR';
--
--        $formatter = $this->getDefaultDateFormatter($pattern);
--        $this->assertSame($expected, $formatter->format($timestamp));
--        $this->assertIsIntlSuccess($formatter, $errorMessage, $errorCode);
--    }
--
--    public static function formatProvider()
--    {
--        $dateTime = new \DateTime('@0');
--        $dateTimeImmutable = new \DateTimeImmutable('@0');
--
--        /* https://unicode-org.atlassian.net/browse/ICU-21647 */
--        $expectedQuarterX5 = '1';
--        if (\defined('INTL_ICU_VERSION') && version_compare(\INTL_ICU_VERSION, '70.1', '<')) {
--            $expectedQuarterX5 = '1st quarter';
--        }
--
--        $formatData = [
--            /* general */
--            ['y-M-d', 0, '1970-1-1'],
--            ["EEE, MMM d, ''yy", 0, "Thu, Jan 1, '70"],
--            ['h:mm a', 0, '12:00 AM'],
--            ['yyyyy.MMMM.dd hh:mm aaa', 0, '01970.January.01 12:00 AM'],
--
--            /* escaping */
--            ["'M'", 0, 'M'],
--            ["'yy'", 0, 'yy'],
--            ["'''yy'", 0, "'yy"],
--            ["''y", 0, "'1970"],
--            ["''yy", 0, "'70"],
--            ["H 'o'' clock'", 0, "0 o' clock"],
--
--            /* month */
--            ['M', 0, '1'],
--            ['MM', 0, '01'],
--            ['MMM', 0, 'Jan'],
--            ['MMMM', 0, 'January'],
--            ['MMMMM', 0, 'J'],
--            ['MMMMMM', 0, '000001'],
--
--            ['L', 0, '1'],
--            ['LL', 0, '01'],
--            ['LLL', 0, 'Jan'],
--            ['LLLL', 0, 'January'],
--            ['LLLLL', 0, 'J'],
--            ['LLLLLL', 0, '000001'],
--
--            /* year */
--            ['y', 0, '1970'],
--            ['yy', 0, '70'],
--            ['yyy', 0, '1970'],
--            ['yyyy', 0, '1970'],
--            ['yyyyy', 0, '01970'],
--            ['yyyyyy', 0, '001970'],
--
--            /* day */
--            ['d', 0, '1'],
--            ['dd', 0, '01'],
--            ['ddd', 0, '001'],
--
--            /* quarter */
--            ['Q', 0, '1'],
--            ['QQ', 0, '01'],
--            ['QQQ', 0, 'Q1'],
--            ['QQQQ', 0, '1st quarter'],
--            ['QQQQQ', 0, $expectedQuarterX5],
--
--            ['q', 0, '1'],
--            ['qq', 0, '01'],
--            ['qqq', 0, 'Q1'],
--            ['qqqq', 0, '1st quarter'],
--            ['qqqqq', 0, $expectedQuarterX5],
--
--            // 4 months
--            ['Q', 7776000, '2'],
--            ['QQ', 7776000, '02'],
--            ['QQQ', 7776000, 'Q2'],
--            ['QQQQ', 7776000, '2nd quarter'],
--
--            // 7 months
--            ['QQQQ', 15638400, '3rd quarter'],
--
--            // 10 months
--            ['QQQQ', 23587200, '4th quarter'],
--
--            /* 12-hour (1-12) */
--            ['h', 0, '12'],
--            ['hh', 0, '12'],
--            ['hhh', 0, '012'],
--
--            ['h', 1, '12'],
--            ['h', 3600, '1'],
--            ['h', 43200, '12'], // 12 hours
--
--            /* day of year */
--            ['D', 0, '1'],
--            ['D', 86400, '2'], // 1 day
--            ['D', 31536000, '1'], // 1 year
--            ['D', 31622400, '2'], // 1 year + 1 day
--
--            /* day of week */
--            ['E', 0, 'Thu'],
--            ['EE', 0, 'Thu'],
--            ['EEE', 0, 'Thu'],
--            ['EEEE', 0, 'Thursday'],
--            ['EEEEE', 0, 'T'],
--            ['EEEEEE', 0, 'Th'],
--
--            ['E', 1296540000, 'Tue'], // 2011-02-01
--            ['E', 1296950400, 'Sun'], // 2011-02-06
--
--            /* am/pm marker */
--            ['a', 0, 'AM'],
--            ['aa', 0, 'AM'],
--            ['aaa', 0, 'AM'],
--            ['aaaa', 0, 'AM'],
--
--            // 12 hours
--            ['a', 43200, 'PM'],
--            ['aa', 43200, 'PM'],
--            ['aaa', 43200, 'PM'],
--            ['aaaa', 43200, 'PM'],
--
--            /* 24-hour (0-23) */
--            ['H', 0, '0'],
--            ['HH', 0, '00'],
--            ['HHH', 0, '000'],
--
--            ['H', 1, '0'],
--            ['H', 3600, '1'],
--            ['H', 43200, '12'],
--            ['H', 46800, '13'],
--
--            /* 24-hour (1-24) */
--            ['k', 0, '24'],
--            ['kk', 0, '24'],
--            ['kkk', 0, '024'],
--
--            ['k', 1, '24'],
--            ['k', 3600, '1'],
--            ['k', 43200, '12'],
--            ['k', 46800, '13'],
--
--            /* 12-hour (0-11) */
--            ['K', 0, '0'],
--            ['KK', 0, '00'],
--            ['KKK', 0, '000'],
--
--            ['K', 1, '0'],
--            ['K', 3600, '1'],
--            ['K', 43200, '0'], // 12 hours
--
--            /* minute */
--            ['m', 0, '0'],
--            ['mm', 0, '00'],
--            ['mmm', 0, '000'],
--
--            ['m', 1, '0'],
--            ['m', 60, '1'],
--            ['m', 120, '2'],
--            ['m', 180, '3'],
--            ['m', 3600, '0'],
--            ['m', 3660, '1'],
--            ['m', 43200, '0'], // 12 hours
--
--            /* second */
--            ['s', 0, '0'],
--            ['ss', 0, '00'],
--            ['sss', 0, '000'],
--
--            ['s', 1, '1'],
--            ['s', 2, '2'],
--            ['s', 5, '5'],
--            ['s', 30, '30'],
--            ['s', 59, '59'],
--            ['s', 60, '0'],
--            ['s', 120, '0'],
--            ['s', 180, '0'],
--            ['s', 3600, '0'],
--            ['s', 3601, '1'],
--            ['s', 3630, '30'],
--            ['s', 43200, '0'], // 12 hours
--        ];
--
--        /* general, DateTime */
--        $formatData[] = ['y-M-d', $dateTime, '1970-1-1'];
--        $formatData[] = ["EEE, MMM d, ''yy", $dateTime, "Thu, Jan 1, '70"];
--        $formatData[] = ['h:mm a', $dateTime, '12:00 AM'];
--        $formatData[] = ['yyyyy.MMMM.dd hh:mm aaa', $dateTime, '01970.January.01 12:00 AM'];
--
--        /* general, DateTimeImmutable */
--        $formatData[] = ['y-M-d', $dateTimeImmutable, '1970-1-1'];
--        $formatData[] = ["EEE, MMM d, ''yy", $dateTimeImmutable, "Thu, Jan 1, '70"];
--        $formatData[] = ['h:mm a', $dateTimeImmutable, '12:00 AM'];
--        $formatData[] = ['yyyyy.MMMM.dd hh:mm aaa', $dateTimeImmutable, '01970.January.01 12:00 AM'];
--
--        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '59.1', '>=')) {
--            // Before ICU 59.1 GMT was used instead of UTC
--            $formatData[] = ["yyyy.MM.dd 'at' HH:mm:ss zzz", 0, '1970.01.01 at 00:00:00 UTC'];
--            $formatData[] = ['K:mm a, z', 0, '0:00 AM, UTC'];
--            $formatData[] = ["yyyy.MM.dd 'at' HH:mm:ss zzz", $dateTime, '1970.01.01 at 00:00:00 UTC'];
--            $formatData[] = ['K:mm a, z', $dateTime, '0:00 AM, UTC'];
--        }
--
--        return $formatData;
--    }
--
--    public function testFormatUtcAndGmtAreSplit()
--    {
--        $pattern = "yyyy.MM.dd 'at' HH:mm:ss zzz";
--        $gmtFormatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'GMT', IntlDateFormatter::GREGORIAN, $pattern);
--        $utcFormatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'UTC', IntlDateFormatter::GREGORIAN, $pattern);
--
--        $this->assertSame('1970.01.01 at 00:00:00 GMT', $gmtFormatter->format(new \DateTime('@0')));
--        $this->assertSame('1970.01.01 at 00:00:00 UTC', $utcFormatter->format(new \DateTime('@0')));
--        $this->assertSame('1970.01.01 at 00:00:00 GMT', $gmtFormatter->format(new \DateTimeImmutable('@0')));
--        $this->assertSame('1970.01.01 at 00:00:00 UTC', $utcFormatter->format(new \DateTimeImmutable('@0')));
--    }
--
--    /**
--     * @dataProvider formatErrorProvider
--     */
--    public function testFormatIllegalArgumentError($pattern, $timestamp, $errorMessage)
--    {
--        $errorCode = Icu::U_ILLEGAL_ARGUMENT_ERROR;
--
--        $formatter = $this->getDefaultDateFormatter($pattern);
--        $this->assertFalse($formatter->format($timestamp));
--        $this->assertIsIntlFailure($formatter, $errorMessage, $errorCode);
--    }
--
--    public static function formatErrorProvider()
--    {
--        return [
--            ['y-M-d', 'foobar', 'datefmt_format: string \'foobar\' is not numeric, which would be required for it to be a valid date: U_ILLEGAL_ARGUMENT_ERROR'],
--        ];
--    }
--
--    /**
--     * @dataProvider formatWithTimezoneProvider
--     */
--    public function testFormatWithTimezone($timestamp, $timezone, $expected)
--    {
--        $pattern = 'yyyy-MM-dd HH:mm:ss';
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, $timezone, IntlDateFormatter::GREGORIAN, $pattern);
--        $this->assertSame($expected, $formatter->format($timestamp));
--    }
--
--    public static function formatWithTimezoneProvider()
--    {
--        $data = [
--            [0, 'UTC', '1970-01-01 00:00:00'],
--            [0, 'GMT', '1970-01-01 00:00:00'],
--            [0, 'GMT+03:00', '1970-01-01 03:00:00'],
--            [0, 'Europe/Zurich', '1970-01-01 01:00:00'],
--            [0, 'Europe/Paris', '1970-01-01 01:00:00'],
--            [0, 'Africa/Cairo', '1970-01-01 02:00:00'],
--            [0, 'Africa/Casablanca', '1970-01-01 00:00:00'],
--            [0, 'Africa/Djibouti', '1970-01-01 03:00:00'],
--            [0, 'Africa/Johannesburg', '1970-01-01 02:00:00'],
--            [0, 'America/Antigua', '1969-12-31 20:00:00'],
--            [0, 'America/Toronto', '1969-12-31 19:00:00'],
--            [0, 'America/Vancouver', '1969-12-31 16:00:00'],
--            [0, 'Asia/Aqtau', '1970-01-01 05:00:00'],
--            [0, 'Asia/Bangkok', '1970-01-01 07:00:00'],
--            [0, 'Asia/Dubai', '1970-01-01 04:00:00'],
--            [0, 'Australia/Brisbane', '1970-01-01 10:00:00'],
--            [0, 'Australia/Eucla', '1970-01-01 08:45:00'],
--            [0, 'Australia/Melbourne', '1970-01-01 10:00:00'],
--            [0, 'Europe/Berlin', '1970-01-01 01:00:00'],
--            [0, 'Europe/Dublin', '1970-01-01 01:00:00'],
--            [0, 'Europe/Warsaw', '1970-01-01 01:00:00'],
--            [0, 'Pacific/Fiji', '1970-01-01 12:00:00'],
--        ];
--
--        return $data;
--    }
--
--    /**
--     * @dataProvider formatTimezoneProvider
--     */
--    public function testFormatTimezone($pattern, $timezone, $expected)
--    {
--        $formatter = $this->getDefaultDateFormatter($pattern);
--        $formatter->setTimeZone(new \DateTimeZone($timezone));
--
--        $this->assertEquals($expected, $formatter->format(0));
--    }
--
--    public static function formatTimezoneProvider()
--    {
--        return [
--            ['z', 'GMT', 'GMT'],
--            ['zz', 'GMT', 'GMT'],
--            ['zzz', 'GMT', 'GMT'],
--            ['zzzz', 'GMT', 'Greenwich Mean Time'],
--            ['zzzzz', 'GMT', 'Greenwich Mean Time'],
--
--            ['z', 'Etc/GMT', 'GMT'],
--            ['zz', 'Etc/GMT', 'GMT'],
--            ['zzz', 'Etc/GMT', 'GMT'],
--            ['zzzz', 'Etc/GMT', 'Greenwich Mean Time'],
--            ['zzzzz', 'Etc/GMT', 'Greenwich Mean Time'],
--
--            ['z', 'UTC', 'UTC'],
--            ['zz', 'UTC', 'UTC'],
--            ['zzz', 'UTC', 'UTC'],
--            ['zzzz', 'UTC', 'Coordinated Universal Time'],
--            ['zzzzz', 'UTC', 'Coordinated Universal Time'],
--
--            ['z', 'Etc/UTC', 'UTC'],
--            ['zz', 'Etc/UTC', 'UTC'],
--            ['zzz', 'Etc/UTC', 'UTC'],
--            ['zzzz', 'Etc/UTC', 'Coordinated Universal Time'],
--            ['zzzzz', 'Etc/UTC', 'Coordinated Universal Time'],
--
--            ['z', 'Etc/Universal', 'UTC'],
--            ['z', 'Etc/Zulu', 'UTC'],
--            ['z', 'Etc/UCT', 'UTC'],
--            ['z', 'Etc/Greenwich', 'GMT'],
--            ['zzzzz', 'Etc/Universal', 'Coordinated Universal Time'],
--            ['zzzzz', 'Etc/Zulu', 'Coordinated Universal Time'],
--            ['zzzzz', 'Etc/UCT', 'Coordinated Universal Time'],
--            ['zzzzz', 'Etc/Greenwich', 'Greenwich Mean Time'],
--
--            ['z', 'GMT+03:00', 'GMT+3'],
--            ['zz', 'GMT+03:00', 'GMT+3'],
--            ['zzz', 'GMT+03:00', 'GMT+3'],
--            ['zzzz', 'GMT+03:00', 'GMT+03:00'],
--            ['zzzzz', 'GMT+03:00', 'GMT+03:00'],
--        ];
--    }
--
--    public function testFormatWithGmtTimezone()
--    {
--        $formatter = $this->getDefaultDateFormatter('zzzz');
--
--        $formatter->setTimeZone('GMT+03:00');
--
--        $this->assertEquals('GMT+03:00', $formatter->format(0));
--    }
--
--    public function testFormatWithGmtTimeZoneAndMinutesOffset()
--    {
--        $formatter = $this->getDefaultDateFormatter('zzzz');
--
--        $formatter->setTimeZone('GMT+00:30');
--
--        $this->assertEquals('GMT+00:30', $formatter->format(0));
--    }
--
--    public function testFormatWithNonStandardTimezone()
--    {
--        $formatter = $this->getDefaultDateFormatter('zzzz');
--
--        $formatter->setTimeZone('Pacific/Fiji');
--
--        $this->assertEquals('Fiji Standard Time', $formatter->format(0));
--    }
--
--    public function testFormatWithConstructorTimezone()
--    {
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'UTC');
--        $formatter->setPattern('yyyy-MM-dd HH:mm:ss');
--
--        $this->assertEquals(
--            $this->getDateTime(0, 'UTC')->format('Y-m-d H:i:s'),
--            $formatter->format(0)
--        );
--    }
--
--    public function testFormatWithDateTimeZoneGmt()
--    {
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, new \DateTimeZone('GMT'), IntlDateFormatter::GREGORIAN, 'zzz');
--
--        $this->assertEquals('GMT', $formatter->format(0));
--    }
--
--    public function testFormatWithDateTimeZoneGmtOffset()
--    {
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, new \DateTimeZone('GMT+03:00'), IntlDateFormatter::GREGORIAN, 'zzzz');
--
--        $this->assertEquals('GMT+03:00', $formatter->format(0));
--    }
--
--    /**
--     * @requires extension intl
--     */
--    public function testFormatWithIntlTimeZone()
--    {
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, \IntlTimeZone::createTimeZone('GMT+03:00'), IntlDateFormatter::GREGORIAN, 'zzzz');
--
--        $this->assertEquals('GMT+03:00', $formatter->format(0));
--    }
--
--    public function testFormatWithTimezoneFromPhp()
--    {
--        $tz = date_default_timezone_get();
--        date_default_timezone_set('Europe/London');
--
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT);
--        $formatter->setPattern('yyyy-MM-dd HH:mm:ss');
--
--        $this->assertEquals(
--            $this->getDateTime(0, 'Europe/London')->format('Y-m-d H:i:s'),
--            $formatter->format(0)
--        );
--
--        $this->assertEquals('Europe/London', date_default_timezone_get());
--
--        // Restores TZ.
--        date_default_timezone_set($tz);
--    }
--
--    public function testFormatIgnoresPatternForRelativeDateType()
--    {
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::FULL, new \DateTimeZone('GMT'), IntlDateFormatter::GREGORIAN, 'zzzz');
--
--        $datetime = \DateTime::createFromFormat('U', time(), new \DateTimeZone('GMT'));
--        $datetime->setTime(0, 0, 0);
--
--        $this->assertStringStartsWith('today', $formatter->format($datetime));
--        $this->assertStringContainsString(' 12:00:00', $formatter->format($datetime));
--        $this->assertStringEndsWith('AM Greenwich Mean Time', $formatter->format($datetime));
--    }
--
--    /**
--     * @dataProvider dateAndTimeTypeProvider
--     */
--    public function testDateAndTimeType($timestamp, $datetype, $timetype, $expected)
--    {
--        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
--        $this->assertSame($expected, $formatter->format($timestamp));
--    }
--
--    /**
--     * @dataProvider dateAndTimeTypeStartsProvider
--     */
--    public function testDateAndTimeTypeStarts($timestamp, $datetype, $timetype, $expected)
--    {
--        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
--        $this->assertStringStartsWith($expected, $formatter->format($timestamp));
--    }
--
--    /**
--     * @dataProvider dateAndTimeTypeEndsProvider
--     */
--    public function testDateAndTimeTypeEnds($timestamp, $datetype, $timetype, $expected)
--    {
--        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
--        $this->assertStringEndsWith($expected, $formatter->format($timestamp));
--    }
--
--    public static function dateAndTimeTypeProvider()
--    {
--        return [
--            [0, IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'Thursday, January 1, 1970'],
--            [0, IntlDateFormatter::LONG, IntlDateFormatter::NONE, 'January 1, 1970'],
--            [0, IntlDateFormatter::MEDIUM, IntlDateFormatter::NONE, 'Jan 1, 1970'],
--            [0, IntlDateFormatter::SHORT, IntlDateFormatter::NONE, '1/1/70'],
--        ];
--    }
--
--    public static function dateAndTimeTypeStartsProvider()
--    {
--        return [
--            [0, IntlDateFormatter::NONE, IntlDateFormatter::FULL, '12:00:00'],
--            [0, IntlDateFormatter::NONE, IntlDateFormatter::LONG, '12:00:00'],
--            [0, IntlDateFormatter::NONE, IntlDateFormatter::MEDIUM, '12:00:00'],
--            [0, IntlDateFormatter::NONE, IntlDateFormatter::SHORT, '12:00'],
--        ];
--    }
--
--    public static function dateAndTimeTypeEndsProvider()
--    {
--        return [
--            [0, IntlDateFormatter::NONE, IntlDateFormatter::FULL, 'AM Coordinated Universal Time'],
--            [0, IntlDateFormatter::NONE, IntlDateFormatter::LONG, 'AM UTC'],
--            [0, IntlDateFormatter::NONE, IntlDateFormatter::MEDIUM, 'AM'],
--            [0, IntlDateFormatter::NONE, IntlDateFormatter::SHORT, 'AM'],
--        ];
--    }
--
--    /**
--     * @dataProvider relativeDateTypeProvider
--     */
--    public function testRelativeDateType($timestamp, $datetype, $timetype, $expected)
--    {
--        $datetime = \DateTime::createFromFormat('U', $timestamp, new \DateTimeZone('UTC'));
--        $datetime->setTime(0, 0, 0);
--
--        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
--        $this->assertSame($expected, $formatter->format($datetime));
--    }
--
--    /**
--     * @dataProvider relativeDateTypeStartsProvider
--     */
--    public function testRelativeDateTypeStarts($timestamp, $datetype, $timetype, $expected)
--    {
--        $datetime = \DateTime::createFromFormat('U', $timestamp, new \DateTimeZone('UTC'));
--        $datetime->setTime(0, 0, 0);
--
--        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
--        $this->assertStringStartsWith($expected, $formatter->format($datetime));
--    }
--
--    /**
--     * @dataProvider relativeDateTypeContainsProvider
--     */
--    public function testRelativeDateTypeContains($timestamp, $datetype, $timetype, $expected)
--    {
--        $datetime = \DateTime::createFromFormat('U', $timestamp, new \DateTimeZone('UTC'));
--        $datetime->setTime(0, 0, 0);
--
--        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
--        $this->assertStringContainsString($expected, $formatter->format($datetime));
--    }
--
--    /**
--     * @dataProvider relativeDateTypeEndsProvider
--     */
--    public function testRelativeDateTypeEnds($timestamp, $datetype, $timetype, $expected)
--    {
--        $datetime = \DateTime::createFromFormat('U', $timestamp, new \DateTimeZone('UTC'));
--        $datetime->setTime(0, 0, 0);
--
--        $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
--        $this->assertStringEndsWith($expected, $formatter->format($datetime));
--    }
--
--    public static function relativeDateTypeProvider()
--    {
--        return [
--            [0, IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'Thursday, January 1, 1970'],
--            [0, IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::NONE, 'January 1, 1970'],
--            [0, IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::NONE, 'Jan 1, 1970'],
--            [0, IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::NONE, '1/1/70'],
--
--            [time(), IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'today'],
--
--            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'yesterday'],
--
--            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'tomorrow'],
--        ];
--    }
--
--    public static function relativeDateTypeStartsProvider()
--    {
--        return [
--            [time(), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'today'],
--            [time(), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'today'],
--            [time(), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'today'],
--
--            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'yesterday'],
--            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'yesterday'],
--            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'yesterday'],
--
--            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'tomorrow'],
--            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'tomorrow'],
--            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'tomorrow'],
--	];
--    }
--
--    public static function relativeDateTypeContainsProvider()
--    {
--        return [
--            [time(), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, '12:00:00'],
--            [time(), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, '12:00:00'],
--            [time(), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, '12:00'],
--
--            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, '12:00:00'],
--            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, '12:00:00'],
--            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, '12:00'],
--
--            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, '12:00:00'],
--            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, '12:00:00'],
--            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, '12:00'],
--        ];
--    }
--
--    public static function relativeDateTypeEndsProvider()
--    {
--        return [
--            [time(), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'AM Coordinated Universal Time'],
--            [time(), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'AM UTC'],
--            [time(), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'AM'],
--
--            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'AM Coordinated Universal Time'],
--            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'AM UTC'],
--            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'AM'],
--
--            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'AM Coordinated Universal Time'],
--            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'AM UTC'],
--            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'AM'],
--        ];
--    }
--
--    public function testGetCalendar()
--    {
--        $formatter = $this->getDefaultDateFormatter();
--        $this->assertEquals(IntlDateFormatter::GREGORIAN, $formatter->getCalendar());
--    }
--
--    public function testGetDateType()
--    {
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::FULL, IntlDateFormatter::NONE);
--        $this->assertEquals(IntlDateFormatter::FULL, $formatter->getDateType());
--    }
--
--    public function testGetLocale()
--    {
--        $formatter = $this->getDefaultDateFormatter();
--        $this->assertEquals('en', $formatter->getLocale());
--    }
--
--    public function testGetPattern()
--    {
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'UTC', IntlDateFormatter::GREGORIAN, 'yyyy-MM-dd');
--        $this->assertEquals('yyyy-MM-dd', $formatter->getPattern());
--    }
--
--    public function testGetTimeType()
--    {
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::NONE, IntlDateFormatter::FULL);
--        $this->assertEquals(IntlDateFormatter::FULL, $formatter->getTimeType());
--    }
--
--    /**
--     * @dataProvider parseProvider
--     */
--    public function testParse($pattern, $value, $expected)
--    {
--        $errorCode = Icu::U_ZERO_ERROR;
--        $errorMessage = 'U_ZERO_ERROR';
--
--        $formatter = $this->getDefaultDateFormatter($pattern);
--        $this->assertSame($expected, $formatter->parse($value));
--        $this->assertIsIntlSuccess($formatter, $errorMessage, $errorCode);
--    }
--
--    public static function parseProvider()
--    {
--        return array_merge(
--            static::parseYearProvider(),
--            static::parseQuarterProvider(),
--            static::parseMonthProvider(),
--            static::parseStandaloneMonthProvider(),
--            static::parseDayProvider(),
--            static::parseDayOfWeekProvider(),
--            static::parseDayOfYearProvider(),
--            static::parseHour12ClockOneBasedProvider(),
--            static::parseHour12ClockZeroBasedProvider(),
--            static::parseHour24ClockOneBasedProvider(),
--            static::parseHour24ClockZeroBasedProvider(),
--            static::parseMinuteProvider(),
--            static::parseSecondProvider(),
--            static::parseTimezoneProvider(),
--            static::parseAmPmProvider(),
--            static::parseStandaloneAmPmProvider(),
--            static::parseRegexMetaCharsProvider(),
--            static::parseQuoteCharsProvider(),
--            static::parseDashSlashProvider()
--        );
--    }
--
--    public static function parseYearProvider()
--    {
--        return [
--            ['y-M-d', '1970-1-1', 0],
--            ['yy-M-d', '70-1-1', 0],
--        ];
--    }
--
--    public static function parseQuarterProvider()
--    {
--        return [
--            ['Q', '1', 0],
--            ['QQ', '01', 0],
--            ['QQQ', 'Q1', 0],
--            ['QQQQ', '1st quarter', 0],
--            ['QQQQQ', '1st quarter', 0],
--
--            ['Q', '2', 7776000],
--            ['QQ', '02', 7776000],
--            ['QQQ', 'Q2', 7776000],
--            ['QQQQ', '2nd quarter', 7776000],
--            ['QQQQQ', '2nd quarter', 7776000],
--
--            ['q', '1', 0],
--            ['qq', '01', 0],
--            ['qqq', 'Q1', 0],
--            ['qqqq', '1st quarter', 0],
--            ['qqqqq', '1st quarter', 0],
--        ];
--    }
--
--    public static function parseMonthProvider()
--    {
--        return [
--            ['y-M-d', '1970-1-1', 0],
--            ['y-MM-d', '1970-1-1', 0],
--            ['y-MMM-d', '1970-Jan-1', 0],
--            ['y-MMMM-d', '1970-January-1', 0],
--        ];
--    }
--
--    public static function parseStandaloneMonthProvider()
--    {
--        return [
--            ['y-L-d', '1970-1-1', 0],
--            ['y-LLL-d', '1970-Jan-1', 0],
--            ['y-LLLL-d', '1970-January-1', 0],
--        ];
--    }
--
--    public static function parseDayProvider()
--    {
--        return [
--            ['y-M-d', '1970-1-1', 0],
--            ['y-M-dd', '1970-1-1', 0],
--            ['y-M-dd', '1970-1-01', 0],
--            ['y-M-ddd', '1970-1-001', 0],
--        ];
--    }
--
--    public static function parseDayOfWeekProvider()
--    {
--        return [
--            ['E', 'Thu', 0],
--            ['EE', 'Thu', 0],
--            ['EEE', 'Thu', 0],
--            ['EEEE', 'Thursday', 0],
--            ['EEEEE', 'T', 432000],
--            ['EEEEEE', 'Th', 0],
--        ];
--    }
--
--    public static function parseDayOfYearProvider()
--    {
--        return [
--            ['D', '1', 0],
--            ['D', '2', 86400],
--        ];
--    }
--
--    public static function parseHour12ClockOneBasedProvider()
--    {
--        return [
--            // 12 hours (1-12)
--            ['y-M-d h', '1970-1-1 1', 3600],
--            ['y-M-d h', '1970-1-1 10', 36000],
--            ['y-M-d hh', '1970-1-1 11', 39600],
--            ['y-M-d hh', '1970-1-1 12', 0],
--            ['y-M-d hh a', '1970-1-1 0 AM', 0],
--            ['y-M-d hh a', '1970-1-1 1 AM', 3600],
--            ['y-M-d hh a', '1970-1-1 10 AM', 36000],
--            ['y-M-d hh a', '1970-1-1 11 AM', 39600],
--            ['y-M-d hh a', '1970-1-1 12 AM', 0],
--            ['y-M-d hh a', '1970-1-1 23 AM', 82800],
--            ['y-M-d hh a', '1970-1-1 24 AM', 86400],
--            ['y-M-d hh a', '1970-1-1 0 PM', 43200],
--            ['y-M-d hh a', '1970-1-1 1 PM', 46800],
--            ['y-M-d hh a', '1970-1-1 10 PM', 79200],
--            ['y-M-d hh a', '1970-1-1 11 PM', 82800],
--            ['y-M-d hh a', '1970-1-1 12 PM', 43200],
--            ['y-M-d hh a', '1970-1-1 23 PM', 126000],
--            ['y-M-d hh a', '1970-1-1 24 PM', 129600],
--        ];
--    }
--
--    public static function parseHour12ClockZeroBasedProvider()
--    {
--        return [
--            // 12 hours (0-11)
--            ['y-M-d K', '1970-1-1 1', 3600],
--            ['y-M-d K', '1970-1-1 10', 36000],
--            ['y-M-d KK', '1970-1-1 11', 39600],
--            ['y-M-d KK', '1970-1-1 12', 43200],
--            ['y-M-d KK a', '1970-1-1 0 AM', 0],
--            ['y-M-d KK a', '1970-1-1 1 AM', 3600],
--            ['y-M-d KK a', '1970-1-1 10 AM', 36000],
--            ['y-M-d KK a', '1970-1-1 11 AM', 39600],
--            ['y-M-d KK a', '1970-1-1 12 AM', 43200],
--            ['y-M-d KK a', '1970-1-1 23 AM', 82800],
--            ['y-M-d KK a', '1970-1-1 24 AM', 86400],
--            ['y-M-d KK a', '1970-1-1 0 PM', 43200],
--            ['y-M-d KK a', '1970-1-1 1 PM', 46800],
--            ['y-M-d KK a', '1970-1-1 10 PM', 79200],
--            ['y-M-d KK a', '1970-1-1 11 PM', 82800],
--            ['y-M-d KK a', '1970-1-1 12 PM', 86400],
--            ['y-M-d KK a', '1970-1-1 23 PM', 126000],
--            ['y-M-d KK a', '1970-1-1 24 PM', 129600],
--        ];
--    }
--
--    public static function parseHour24ClockOneBasedProvider()
--    {
--        return [
--            // 24 hours (1-24)
--            ['y-M-d k', '1970-1-1 1', 3600],
--            ['y-M-d k', '1970-1-1 10', 36000],
--            ['y-M-d kk', '1970-1-1 11', 39600],
--            ['y-M-d kk', '1970-1-1 12', 43200],
--            ['y-M-d kk', '1970-1-1 23', 82800],
--            ['y-M-d kk', '1970-1-1 24', 0],
--            ['y-M-d kk a', '1970-1-1 0 AM', 0],
--            ['y-M-d kk a', '1970-1-1 1 AM', 0],
--            ['y-M-d kk a', '1970-1-1 10 AM', 0],
--            ['y-M-d kk a', '1970-1-1 11 AM', 0],
--            ['y-M-d kk a', '1970-1-1 12 AM', 0],
--            ['y-M-d kk a', '1970-1-1 23 AM', 0],
--            ['y-M-d kk a', '1970-1-1 24 AM', 0],
--            ['y-M-d kk a', '1970-1-1 0 PM', 43200],
--            ['y-M-d kk a', '1970-1-1 1 PM', 43200],
--            ['y-M-d kk a', '1970-1-1 10 PM', 43200],
--            ['y-M-d kk a', '1970-1-1 11 PM', 43200],
--            ['y-M-d kk a', '1970-1-1 12 PM', 43200],
--            ['y-M-d kk a', '1970-1-1 23 PM', 43200],
--            ['y-M-d kk a', '1970-1-1 24 PM', 43200],
--        ];
--    }
--
--    public static function parseHour24ClockZeroBasedProvider()
--    {
--        return [
--            // 24 hours (0-23)
--            ['y-M-d H', '1970-1-1 0', 0],
--            ['y-M-d H', '1970-1-1 1', 3600],
--            ['y-M-d H', '1970-1-1 10', 36000],
--            ['y-M-d HH', '1970-1-1 11', 39600],
--            ['y-M-d HH', '1970-1-1 12', 43200],
--            ['y-M-d HH', '1970-1-1 23', 82800],
--            ['y-M-d HH a', '1970-1-1 0 AM', 0],
--            ['y-M-d HH a', '1970-1-1 1 AM', 0],
--            ['y-M-d HH a', '1970-1-1 10 AM', 0],
--            ['y-M-d HH a', '1970-1-1 11 AM', 0],
--            ['y-M-d HH a', '1970-1-1 12 AM', 0],
--            ['y-M-d HH a', '1970-1-1 23 AM', 0],
--            ['y-M-d HH a', '1970-1-1 24 AM', 0],
--            ['y-M-d HH a', '1970-1-1 0 PM', 43200],
--            ['y-M-d HH a', '1970-1-1 1 PM', 43200],
--            ['y-M-d HH a', '1970-1-1 10 PM', 43200],
--            ['y-M-d HH a', '1970-1-1 11 PM', 43200],
--            ['y-M-d HH a', '1970-1-1 12 PM', 43200],
--            ['y-M-d HH a', '1970-1-1 23 PM', 43200],
--            ['y-M-d HH a', '1970-1-1 24 PM', 43200],
--        ];
--    }
--
--    public static function parseMinuteProvider()
--    {
--        return [
--            ['y-M-d HH:m', '1970-1-1 0:1', 60],
--            ['y-M-d HH:mm', '1970-1-1 0:10', 600],
--        ];
--    }
--
--    public static function parseSecondProvider()
--    {
--        return [
--            ['y-M-d HH:mm:s', '1970-1-1 00:01:1', 61],
--            ['y-M-d HH:mm:ss', '1970-1-1 00:01:10', 70],
--        ];
--    }
--
--    public static function parseTimezoneProvider()
--    {
--        return [
--            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT-00:00', 0],
--            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT+03:00', -10800],
--            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT+04:00', -14400],
--            ['y-M-d HH:mm:ss zzzz', '1970-1-1 00:00:00 GMT+0300', -10800],
--
--            // a previous timezone parsing should not change the timezone for the next parsing
--            ['y-M-d HH:mm:ss', '1970-1-1 00:00:00', 0],
--        ];
--    }
--
--    public static function parseAmPmProvider()
--    {
--        return [
--            // AM/PM (already covered by hours tests)
--            ['y-M-d HH:mm:ss a', '1970-1-1 00:00:00 AM', 0],
--            ['y-M-d HH:mm:ss a', '1970-1-1 00:00:00 PM', 43200],
--        ];
--    }
--
--    public static function parseStandaloneAmPmProvider()
--    {
--        return [
--            ['a', 'AM', 0],
--            ['a', 'PM', 43200],
--        ];
--    }
--
--    public static function parseRegexMetaCharsProvider()
--    {
--        return [
--            // regexp meta chars in the pattern string
--            ['y[M-d', '1970[1-1', 0],
--            ['y[M/d', '1970[1/1', 0],
--        ];
--    }
--
--    public static function parseQuoteCharsProvider()
--    {
--        return [
--            ["'M'", 'M', 0],
--            ["'yy'", 'yy', 0],
--            ["'''yy'", "'yy", 0],
--            ["''y", "'1970", 0],
--            ["H 'o'' clock'", "0 o' clock", 0],
--        ];
--    }
--
--    public static function parseDashSlashProvider()
--    {
--        return [
--            ['y-M-d', '1970/1/1', 0],
--            ['yy-M-d', '70/1/1', 0],
--            ['y/M/d', '1970-1-1', 0],
--            ['yy/M/d', '70-1-1', 0],
--        ];
--    }
--
--    /**
--     * @dataProvider parseErrorProvider
--     */
--    public function testParseError($pattern, $value)
--    {
--        $errorCode = Icu::U_PARSE_ERROR;
--        $errorMessage = 'Date parsing failed: U_PARSE_ERROR';
--
--        $formatter = $this->getDefaultDateFormatter($pattern);
--        $this->assertFalse($formatter->parse($value));
--        $this->assertIsIntlFailure($formatter, $errorMessage, $errorCode);
--    }
--
--    public static function parseErrorProvider()
--    {
--        return [
--            // 1 char month
--            ['y-MMMMM-d', '1970-J-1'],
--            ['y-MMMMM-d', '1970-S-1'],
--
--            // standalone 1 char month
--            ['y-LLLLL-d', '1970-J-1'],
--            ['y-LLLLL-d', '1970-S-1'],
--        ];
--    }
--
--    /*
--     * https://github.com/symfony/symfony/issues/4242
--     */
--    public function testParseAfterError()
--    {
--        $this->testParseError('y-MMMMM-d', '1970-J-1');
--        $this->testParse('y-M-d', '1970-1-1', 0);
--    }
--
--    public function testParseWithNullPositionValue()
--    {
--        $position = null;
--        $formatter = $this->getDefaultDateFormatter('y');
--        $this->assertSame(0, $formatter->parse('1970', $position));
--        // Since $position is not supported by the Symfony implementation, the following won't work.
--        // The intl implementation works this way since 60.2.
--        // $this->assertSame(4, $position);
--    }
--
--    public function testSetPattern()
--    {
--        $formatter = $this->getDefaultDateFormatter();
--        $formatter->setPattern('yyyy-MM-dd');
--        $this->assertEquals('yyyy-MM-dd', $formatter->getPattern());
--    }
--
--    /**
--     * @dataProvider setTimeZoneProvider
--     */
--    public function testSetTimeZone($timeZoneId, $expectedTimeZoneId)
--    {
--        $formatter = $this->getDefaultDateFormatter();
--
--        $formatter->setTimeZone($timeZoneId);
--
--        $this->assertEquals($expectedTimeZoneId, $formatter->getTimeZoneId());
--    }
--
--    public static function setTimeZoneProvider()
--    {
--        return [
--            ['UTC', 'UTC'],
--            ['GMT', 'GMT'],
--            ['Europe/Zurich', 'Europe/Zurich'],
--            [null, date_default_timezone_get()],
--            ['Foo/Bar', 'UTC'],
--            ['GMT+00:AA', 'UTC'],
--            ['GMT+00AA', 'UTC'],
--        ];
--    }
--
--    protected function getDefaultDateFormatter($pattern = null)
--    {
--        return $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'UTC', IntlDateFormatter::GREGORIAN, $pattern);
--    }
--
--    protected function getDateTime($timestamp, $timeZone)
--    {
--        $dateTime = new \DateTime();
--        $dateTime->setTimestamp(null === $timestamp ? time() : $timestamp);
--        $dateTime->setTimezone(new \DateTimeZone($timeZone ?: getenv('TZ') ?: 'UTC'));
--
--        return $dateTime;
--    }
--
--    protected function assertIsIntlFailure($formatter, $errorMessage, $errorCode)
--    {
--        $this->assertSame($errorMessage, $this->getIntlErrorMessage());
--        $this->assertSame($errorCode, $this->getIntlErrorCode());
--        $this->assertTrue($this->isIntlFailure($this->getIntlErrorCode()));
--        $this->assertSame($errorMessage, $formatter->getErrorMessage());
--        $this->assertSame($errorCode, $formatter->getErrorCode());
--        $this->assertTrue($this->isIntlFailure($formatter->getErrorCode()));
--    }
--
--    protected function assertIsIntlSuccess($formatter, $errorMessage, $errorCode)
--    {
--        /* @var IntlDateFormatter $formatter */
--        $this->assertSame($errorMessage, $this->getIntlErrorMessage());
--        $this->assertSame($errorCode, $this->getIntlErrorCode());
--        $this->assertFalse($this->isIntlFailure($this->getIntlErrorCode()));
--        $this->assertSame($errorMessage, $formatter->getErrorMessage());
--        $this->assertSame($errorCode, $formatter->getErrorCode());
--        $this->assertFalse($this->isIntlFailure($formatter->getErrorCode()));
--    }
--
--    /**
--     * @return IntlDateFormatter|\IntlDateFormatter
--     */
--    abstract protected function getDateFormatter($locale, $datetype, $timetype, $timezone = null, $calendar = IntlDateFormatter::GREGORIAN, $pattern = null);
--
--    abstract protected function getIntlErrorMessage(): string;
--
--    abstract protected function getIntlErrorCode(): int;
--
--    /**
--     * @param int $errorCode
--     */
--    abstract protected function isIntlFailure($errorCode): bool;
--}
-diff --git a/tests/Intl/Icu/AbstractLocaleTest.php b/tests/Intl/Icu/AbstractLocaleTest.php
-deleted file mode 100644
-index 20dde71..0000000
---- a/tests/Intl/Icu/AbstractLocaleTest.php
-+++ /dev/null
-@@ -1,31 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu;
--
--use PHPUnit\Framework\TestCase;
--
--/**
-- * Test case for Locale implementations.
-- *
-- * @author Bernhard Schussek <bschussek@gmail.com>
-- */
--abstract class AbstractLocaleTest extends TestCase
--{
--    public function testSetDefault()
--    {
--        $this->call('setDefault', 'en_GB');
--
--        $this->assertSame('en_GB', $this->call('getDefault'));
--    }
--
--    abstract protected function call($methodName);
--}
-diff --git a/tests/Intl/Icu/AbstractNumberFormatterTest.php b/tests/Intl/Icu/AbstractNumberFormatterTest.php
-deleted file mode 100644
-index e5f4707..0000000
---- a/tests/Intl/Icu/AbstractNumberFormatterTest.php
-+++ /dev/null
-@@ -1,899 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu;
--
--use PHPUnit\Framework\Error\Warning;
--use PHPUnit\Framework\TestCase;
--use Symfony\Polyfill\Intl\Icu\Icu;
--use Symfony\Polyfill\Intl\Icu\NumberFormatter;
--
--/**
-- * Note that there are some values written like -2147483647 - 1. This is the lower 32bit int max and is a known
-- * behavior of PHP.
-- */
--abstract class AbstractNumberFormatterTest extends TestCase
--{
--    protected function setUp(): void
--    {
--        \Locale::setDefault('en');
--    }
--
--    /**
--     * @dataProvider formatCurrencyWithDecimalStyleProvider
--     */
--    public function testFormatCurrencyWithDecimalStyle($value, $currency, $expected)
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $this->assertEquals($expected, $formatter->formatCurrency($value, $currency));
--    }
--
--    public static function formatCurrencyWithDecimalStyleProvider()
--    {
--        return [
--            [100, 'ALL', '100'],
--            [100, 'BRL', '100'],
--            [100, 'CRC', '100'],
--            [100, 'JPY', '100'],
--            [100, 'CHF', '100'],
--            [-100, 'ALL', '-100'],
--            [-100, 'BRL', '-100'],
--            [-100, 'CRC', '-100'],
--            [-100, 'JPY', '-100'],
--            [-100, 'CHF', '-100'],
--            [1000.12, 'ALL', '1,000.12'],
--            [1000.12, 'BRL', '1,000.12'],
--            [1000.12, 'CRC', '1,000.12'],
--            [1000.12, 'JPY', '1,000.12'],
--            [1000.12, 'CHF', '1,000.12'],
--        ];
--    }
--
--    /**
--     * @dataProvider formatCurrencyWithCurrencyStyleProvider
--     */
--    public function testFormatCurrencyWithCurrencyStyle($value, $currency, $expected)
--    {
--        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
--            $this->markTestSkipped('ICU version 63.1 is required.');
--        }
--
--        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
--        $this->assertEquals($expected, $formatter->formatCurrency($value, $currency));
--    }
--
--    public static function formatCurrencyWithCurrencyStyleProvider()
--    {
--        return [
--            [100, 'ALL', "ALL\xc2\xa0100"],
--            [-100, 'ALL', "-ALL\xc2\xa0100"],
--            [1000.12, 'ALL', "ALL\xc2\xa01,000"],
--
--            [100, 'JPY', '¥100'],
--            [-100, 'JPY', '-¥100'],
--            [1000.12, 'JPY', '¥1,000'],
--
--            [100, 'EUR', '€100.00'],
--            [-100, 'EUR', '-€100.00'],
--            [1000.12, 'EUR', '€1,000.12'],
--        ];
--    }
--
--    /**
--     * @dataProvider formatCurrencyWithCurrencyStyleCostaRicanColonsRoundingProvider
--     */
--    public function testFormatCurrencyWithCurrencyStyleCostaRicanColonsRounding($value, $currency, $symbol, $expected)
--    {
--        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
--            $this->markTestSkipped('ICU version 63.1 is required.');
--        }
--
--        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
--        $this->assertEquals(sprintf($expected, $symbol), $formatter->formatCurrency($value, $currency));
--    }
--
--    public static function formatCurrencyWithCurrencyStyleCostaRicanColonsRoundingProvider()
--    {
--        return [
--            [100, 'CRC', 'CRC', "%s\xc2\xa0100.00"],
--            [-100, 'CRC', 'CRC', "-%s\xc2\xa0100.00"],
--            [1000.12, 'CRC', 'CRC', "%s\xc2\xa01,000.12"],
--        ];
--    }
--
--    /**
--     * @dataProvider formatCurrencyWithCurrencyStyleBrazilianRealRoundingProvider
--     */
--    public function testFormatCurrencyWithCurrencyStyleBrazilianRealRounding($value, $currency, $symbol, $expected)
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
--        $this->assertEquals(sprintf($expected, $symbol), $formatter->formatCurrency($value, $currency));
--    }
--
--    public static function formatCurrencyWithCurrencyStyleBrazilianRealRoundingProvider()
--    {
--        return [
--            [100, 'BRL', 'R', '%s$100.00'],
--            [-100, 'BRL', 'R', '-%s$100.00'],
--            [1000.12, 'BRL', 'R', '%s$1,000.12'],
--
--            // Rounding checks
--            [1000.121, 'BRL', 'R', '%s$1,000.12'],
--            [1000.123, 'BRL', 'R', '%s$1,000.12'],
--            [1000.125, 'BRL', 'R', '%s$1,000.12'],
--            [1000.127, 'BRL', 'R', '%s$1,000.13'],
--            [1000.129, 'BRL', 'R', '%s$1,000.13'],
--            [11.50999, 'BRL', 'R', '%s$11.51'],
--            [11.9999464, 'BRL', 'R', '%s$12.00'],
--        ];
--    }
--
--    /**
--     * @dataProvider formatCurrencyWithCurrencyStyleSwissRoundingProvider
--     */
--    public function testFormatCurrencyWithCurrencyStyleSwissRounding($value, $currency, $symbol, $expected)
--    {
--        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '62.1', '<')) {
--            $this->markTestSkipped('ICU version 62.1 is required.');
--        }
--
--        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
--        $this->assertEquals(sprintf($expected, $symbol), $formatter->formatCurrency($value, $currency));
--    }
--
--    public static function formatCurrencyWithCurrencyStyleSwissRoundingProvider()
--    {
--        return [
--            [100, 'CHF', 'CHF', "%s\xc2\xa0100.00"],
--            [-100, 'CHF', 'CHF', "-%s\xc2\xa0100.00"],
--            [1000.12, 'CHF', 'CHF', "%s\xc2\xa01,000.12"],
--            ['1000.12', 'CHF', 'CHF', "%s\xc2\xa01,000.12"],
--
--            // Rounding checks
--            [1000.121, 'CHF', 'CHF', "%s\xc2\xa01,000.12"],
--            [1000.123, 'CHF', 'CHF', "%s\xc2\xa01,000.12"],
--            [1000.125, 'CHF', 'CHF', "%s\xc2\xa01,000.12"],
--            [1000.127, 'CHF', 'CHF', "%s\xc2\xa01,000.13"],
--            [1000.129, 'CHF', 'CHF', "%s\xc2\xa01,000.13"],
--
--            [1200000.00, 'CHF', 'CHF', "%s\xc2\xa01,200,000.00"],
--            [1200000.1, 'CHF', 'CHF', "%s\xc2\xa01,200,000.10"],
--            [1200000.10, 'CHF', 'CHF', "%s\xc2\xa01,200,000.10"],
--            [1200000.101, 'CHF', 'CHF', "%s\xc2\xa01,200,000.10"],
--        ];
--    }
--
--    public function testFormat()
--    {
--        $errorCode = Icu::U_ZERO_ERROR;
--        $errorMessage = 'U_ZERO_ERROR';
--
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $this->assertSame('9.555', $formatter->format(9.555));
--
--        $this->assertSame($errorMessage, static::getIntlErrorMessage());
--        $this->assertSame($errorCode, static::getIntlErrorCode());
--        $this->assertFalse(static::isIntlFailure(static::getIntlErrorCode()));
--        $this->assertSame($errorMessage, $formatter->getErrorMessage());
--        $this->assertSame($errorCode, $formatter->getErrorCode());
--        $this->assertFalse(static::isIntlFailure($formatter->getErrorCode()));
--    }
--
--    public function testFormatWithCurrencyStyle()
--    {
--        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
--            $this->markTestSkipped('ICU version 63.1 is required.');
--        }
--
--        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
--        $this->assertEquals('¤1.00', $formatter->format(1));
--    }
--
--    /**
--     * @dataProvider formatTypeInt32Provider
--     */
--    public function testFormatTypeInt32($formatter, $value, $expected, $message = '')
--    {
--        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_INT32);
--        $this->assertEquals($expected, $formattedValue, $message);
--    }
--
--    public static function formatTypeInt32Provider()
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--
--        $message = '->format() TYPE_INT32 formats inconsistently an integer if out of the 32 bit range.';
--
--        return [
--            [$formatter, 1, '1'],
--            [$formatter, 1.1, '1'],
--            [$formatter, 2147483648, '-2,147,483,648', $message],
--            [$formatter, -2147483649, '2,147,483,647', $message],
--        ];
--    }
--
--    /**
--     * @dataProvider formatTypeInt32WithCurrencyStyleProvider
--     */
--    public function testFormatTypeInt32WithCurrencyStyle($formatter, $value, $expected, $message = '')
--    {
--        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
--            $this->markTestSkipped('ICU version 63.1 is required.');
--        }
--
--        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_INT32);
--        $this->assertEquals($expected, $formattedValue, $message);
--    }
--
--    public static function formatTypeInt32WithCurrencyStyleProvider()
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
--
--        $message = '->format() TYPE_INT32 formats inconsistently an integer if out of the 32 bit range.';
--
--        return [
--            [$formatter, 1, '¤1.00'],
--            [$formatter, 1.1, '¤1.00'],
--            [$formatter, 2147483648, '-¤2,147,483,648.00', $message],
--            [$formatter, -2147483649, '¤2,147,483,647.00', $message],
--        ];
--    }
--
--    /**
--     * The parse() method works differently with integer out of the 32 bit range. format() works fine.
--     *
--     * @dataProvider formatTypeInt64Provider
--     */
--    public function testFormatTypeInt64($formatter, $value, $expected)
--    {
--        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_INT64);
--        $this->assertEquals($expected, $formattedValue);
--    }
--
--    public static function formatTypeInt64Provider()
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--
--        return [
--            [$formatter, 1, '1'],
--            [$formatter, 1.1, '1'],
--            [$formatter, 2147483648, '2,147,483,648'],
--            [$formatter, -2147483649, '-2,147,483,649'],
--        ];
--    }
--
--    /**
--     * @dataProvider formatTypeInt64WithCurrencyStyleProvider
--     */
--    public function testFormatTypeInt64WithCurrencyStyle($formatter, $value, $expected)
--    {
--        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
--            $this->markTestSkipped('ICU version 63.1 is required.');
--        }
--
--        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_INT64);
--        $this->assertEquals($expected, $formattedValue);
--    }
--
--    public static function formatTypeInt64WithCurrencyStyleProvider()
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
--
--        return [
--            [$formatter, 1, '¤1.00'],
--            [$formatter, 1.1, '¤1.00'],
--            [$formatter, 2147483648, '¤2,147,483,648.00'],
--            [$formatter, -2147483649, '-¤2,147,483,649.00'],
--        ];
--    }
--
--    /**
--     * @dataProvider formatTypeDoubleProvider
--     */
--    public function testFormatTypeDouble($formatter, $value, $expected)
--    {
--        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_DOUBLE);
--        $this->assertEquals($expected, $formattedValue);
--    }
--
--    public static function formatTypeDoubleProvider()
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--
--        return [
--            [$formatter, 1, '1'],
--            [$formatter, 1.1, '1.1'],
--        ];
--    }
--
--    /**
--     * @dataProvider formatTypeDoubleWithCurrencyStyleProvider
--     */
--    public function testFormatTypeDoubleWithCurrencyStyle($formatter, $value, $expected)
--    {
--        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
--            $this->markTestSkipped('ICU version 63.1 is required.');
--        }
--
--        $formattedValue = $formatter->format($value, NumberFormatter::TYPE_DOUBLE);
--        $this->assertEquals($expected, $formattedValue);
--    }
--
--    public static function formatTypeDoubleWithCurrencyStyleProvider()
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
--
--        return [
--            [$formatter, 1, '¤1.00'],
--            [$formatter, 1.1, '¤1.10'],
--        ];
--    }
--
--    /**
--     * @dataProvider formatTypeCurrencyProvider
--     */
--    public function testFormatTypeCurrency($formatter, $value)
--    {
--        if (\PHP_VERSION_ID >= 80000) {
--            $this->expectException(\ValueError::class);
--        } elseif (method_exists($this, 'expectWarning')) {
--            $this->expectWarning();
--        } else {
--            $this->expectException(Warning::class);
--        }
--
--        $formatter->format($value, NumberFormatter::TYPE_CURRENCY);
--    }
--
--    /**
--     * @dataProvider formatTypeCurrencyProvider
--     */
--    public function testFormatTypeCurrencyReturn($formatter, $value)
--    {
--        if (\PHP_VERSION_ID >= 80000) {
--            $this->expectException(\ValueError::class);
--        }
--
--        $this->assertFalse(@$formatter->format($value, NumberFormatter::TYPE_CURRENCY));
--    }
--
--    public static function formatTypeCurrencyProvider()
--    {
--        $df = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $cf = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
--
--        return [
--            [$df, 1],
--            [$cf, 1],
--        ];
--    }
--
--    /**
--     * @dataProvider formatFractionDigitsProvider
--     */
--    public function testFormatFractionDigits($value, $expected, $fractionDigits = null, $expectedFractionDigits = 1)
--    {
--        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '62.1', '<')) {
--            $this->markTestSkipped('ICU version 62.1 is required.');
--        }
--
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--
--        $attributeRet = null;
--        if (null !== $fractionDigits) {
--            $attributeRet = $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, $fractionDigits);
--        }
--
--        $formattedValue = $formatter->format($value);
--        $this->assertSame($expected, $formattedValue);
--        $this->assertSame($expectedFractionDigits, $formatter->getAttribute(NumberFormatter::FRACTION_DIGITS));
--
--        if (null !== $attributeRet) {
--            $this->assertTrue($attributeRet);
--        }
--    }
--
--    public static function formatFractionDigitsProvider()
--    {
--        yield [1.123, '1.123', null, 0];
--        yield [1.123, '1', 0, 0];
--        yield [1.123, '1.1', 1, 1];
--        yield [1.123, '1.12', 2, 2];
--        yield [1.123, '1.123', -1, 0];
--    }
--
--    /**
--     * @dataProvider formatGroupingUsedProvider
--     */
--    public function testFormatGroupingUsed($value, $expected, $groupingUsed = null, $expectedGroupingUsed = 1)
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--
--        $attributeRet = null;
--        if (null !== $groupingUsed) {
--            $attributeRet = $formatter->setAttribute(NumberFormatter::GROUPING_USED, $groupingUsed);
--        }
--
--        $formattedValue = $formatter->format($value);
--        $this->assertSame($expected, $formattedValue);
--        $this->assertSame($expectedGroupingUsed, $formatter->getAttribute(NumberFormatter::GROUPING_USED));
--
--        if (null !== $attributeRet) {
--            $this->assertTrue($attributeRet);
--        }
--    }
--
--    public static function formatGroupingUsedProvider()
--    {
--        yield [1000, '1,000', null, 1];
--        yield [1000, '1000', 0, 0];
--        yield [1000, '1,000', 1, 1];
--        yield [1000, '1,000', 2, 1];
--        yield [1000, '1,000', -1, 1];
--    }
--
--    /**
--     * @dataProvider formatRoundingModeRoundHalfUpProvider
--     */
--    public function testFormatRoundingModeHalfUp($value, $expected)
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
--
--        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_HALFUP);
--        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_HALFUP rounding mode.');
--    }
--
--    public static function formatRoundingModeRoundHalfUpProvider()
--    {
--        // The commented value is differently rounded by intl's NumberFormatter in 32 and 64 bit architectures
--        return [
--            [1.121, '1.12'],
--            [1.123, '1.12'],
--            // [1.125, '1.13'],
--            [1.127, '1.13'],
--            [1.129, '1.13'],
--            [1020 / 100, '10.20'],
--        ];
--    }
--
--    /**
--     * @dataProvider formatRoundingModeRoundHalfDownProvider
--     */
--    public function testFormatRoundingModeHalfDown($value, $expected)
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
--
--        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_HALFDOWN);
--        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_HALFDOWN rounding mode.');
--    }
--
--    public static function formatRoundingModeRoundHalfDownProvider()
--    {
--        return [
--            [1.121, '1.12'],
--            [1.123, '1.12'],
--            [1.125, '1.12'],
--            [1.127, '1.13'],
--            [1.129, '1.13'],
--            [1020 / 100, '10.20'],
--        ];
--    }
--
--    /**
--     * @dataProvider formatRoundingModeRoundHalfEvenProvider
--     */
--    public function testFormatRoundingModeHalfEven($value, $expected)
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
--
--        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_HALFEVEN);
--        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_HALFEVEN rounding mode.');
--    }
--
--    public static function formatRoundingModeRoundHalfEvenProvider()
--    {
--        return [
--            [1.121, '1.12'],
--            [1.123, '1.12'],
--            [1.125, '1.12'],
--            [1.127, '1.13'],
--            [1.129, '1.13'],
--            [1020 / 100, '10.20'],
--        ];
--    }
--
--    /**
--     * @dataProvider formatRoundingModeRoundCeilingProvider
--     */
--    public function testFormatRoundingModeCeiling($value, $expected)
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
--
--        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_CEILING);
--        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_CEILING rounding mode.');
--    }
--
--    public static function formatRoundingModeRoundCeilingProvider()
--    {
--        return [
--            [1.123, '1.13'],
--            [1.125, '1.13'],
--            [1.127, '1.13'],
--            [-1.123, '-1.12'],
--            [-1.125, '-1.12'],
--            [-1.127, '-1.12'],
--            [1020 / 100, '10.20'],
--        ];
--    }
--
--    /**
--     * @dataProvider formatRoundingModeRoundFloorProvider
--     */
--    public function testFormatRoundingModeFloor($value, $expected)
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
--
--        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_FLOOR);
--        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_FLOOR rounding mode.');
--    }
--
--    public static function formatRoundingModeRoundFloorProvider()
--    {
--        return [
--            [1.123, '1.12'],
--            [1.125, '1.12'],
--            [1.127, '1.12'],
--            [-1.123, '-1.13'],
--            [-1.125, '-1.13'],
--            [-1.127, '-1.13'],
--            [1020 / 100, '10.20'],
--        ];
--    }
--
--    /**
--     * @dataProvider formatRoundingModeRoundDownProvider
--     */
--    public function testFormatRoundingModeDown($value, $expected)
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
--
--        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_DOWN);
--        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_DOWN rounding mode.');
--    }
--
--    public static function formatRoundingModeRoundDownProvider()
--    {
--        return [
--            [1.123, '1.12'],
--            [1.125, '1.12'],
--            [1.127, '1.12'],
--            [-1.123, '-1.12'],
--            [-1.125, '-1.12'],
--            [-1.127, '-1.12'],
--            [1020 / 100, '10.20'],
--        ];
--    }
--
--    /**
--     * @dataProvider formatRoundingModeRoundUpProvider
--     */
--    public function testFormatRoundingModeUp($value, $expected)
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
--
--        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_UP);
--        $this->assertSame($expected, $formatter->format($value), '->format() with ROUND_UP rounding mode.');
--    }
--
--    public static function formatRoundingModeRoundUpProvider()
--    {
--        return [
--            [1.123, '1.13'],
--            [1.125, '1.13'],
--            [1.127, '1.13'],
--            [-1.123, '-1.13'],
--            [-1.125, '-1.13'],
--            [-1.127, '-1.13'],
--            [1020 / 100, '10.20'],
--        ];
--    }
--
--    public function testGetLocale()
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $this->assertEquals('en', $formatter->getLocale());
--    }
--
--    public function testGetSymbol()
--    {
--        $decimalFormatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $currencyFormatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
--
--        $r = new \ReflectionProperty('Symfony\Polyfill\Intl\Icu\NumberFormatter', 'enSymbols');
--        $r->setAccessible(true);
--        $expected = $r->getValue();
--
--        for ($i = 0; $i <= 17; ++$i) {
--            $this->assertSame($expected[1][$i], $decimalFormatter->getSymbol($i));
--            $this->assertSame($expected[2][$i], $currencyFormatter->getSymbol($i));
--        }
--    }
--
--    public function testGetTextAttribute()
--    {
--        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '63.1', '<')) {
--            $this->markTestSkipped('ICU version 63.1 is required.');
--        }
--
--        $decimalFormatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $currencyFormatter = static::getNumberFormatter('en', NumberFormatter::CURRENCY);
--
--        $r = new \ReflectionProperty('Symfony\Polyfill\Intl\Icu\NumberFormatter', 'enTextAttributes');
--        $r->setAccessible(true);
--        $expected = $r->getValue();
--
--        for ($i = 0; $i <= 5; ++$i) {
--            $this->assertSame($expected[1][$i], $decimalFormatter->getTextAttribute($i));
--            $this->assertSame($expected[2][$i], $currencyFormatter->getTextAttribute($i));
--        }
--    }
--
--    /**
--     * @dataProvider parseProvider
--     */
--    public function testParse($value, $expected, $message, $expectedPosition, $groupingUsed = true)
--    {
--        if (!\defined('INTL_ICU_VERSION') || version_compare(\INTL_ICU_VERSION, '62.1', '<')) {
--            $this->markTestSkipped('ICU version 62.1 is required.');
--        }
--
--        $position = 0;
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->setAttribute(NumberFormatter::GROUPING_USED, $groupingUsed);
--        $parsedValue = $formatter->parse($value, NumberFormatter::TYPE_DOUBLE, $position);
--        $this->assertSame($expected, $parsedValue, $message);
--        $this->assertSame($expectedPosition, $position, $message);
--
--        if (false === $expected) {
--            $errorCode = Icu::U_PARSE_ERROR;
--            $errorMessage = 'Number parsing failed: U_PARSE_ERROR';
--        } else {
--            $errorCode = Icu::U_ZERO_ERROR;
--            $errorMessage = 'U_ZERO_ERROR';
--        }
--
--        $this->assertSame($errorMessage, static::getIntlErrorMessage());
--        $this->assertSame($errorCode, static::getIntlErrorCode());
--        $this->assertSame(0 !== $errorCode, static::isIntlFailure(static::getIntlErrorCode()));
--        $this->assertSame($errorMessage, $formatter->getErrorMessage());
--        $this->assertSame($errorCode, $formatter->getErrorCode());
--        $this->assertSame(0 !== $errorCode, static::isIntlFailure($formatter->getErrorCode()));
--    }
--
--    public static function parseProvider()
--    {
--        return [
--            ['prefix1', false, '->parse() does not parse a number with a string prefix.', 0],
--            ['prefix1', false, '->parse() does not parse a number with a string prefix.', 0, false],
--            ['1.4suffix', (float) 1.4, '->parse() parses a number with a string suffix.', 3],
--            ['1.4suffix', (float) 1.4, '->parse() parses a number with a string suffix.', 3, false],
--            ['1,234.4suffix', 1234.4, '->parse() parses a number with a string suffix.', 7],
--            ['1,234.4suffix', 1.0, '->parse() parses a number with a string suffix.', 1, false],
--            ['-.4suffix', (float) -0.4, '->parse() parses a negative dot float with suffix.', 3],
--            ['-.4suffix', (float) -0.4, '->parse() parses a negative dot float with suffix.', 3, false],
--            [',4', false, '->parse() does not parse when invalid grouping used.', 0],
--            [',4', false, '->parse() does not parse when invalid grouping used.', 0, false],
--            ['123,4', false, '->parse() does not parse when invalid grouping used.', 0],
--            ['123,4', 123.0, '->parse() truncates invalid grouping when grouping is disabled.', 3, false],
--            ['123,a4', 123.0, '->parse() truncates a string suffix.', 3],
--            ['123,a4', 123.0, '->parse() truncates a string suffix.', 3, false],
--            ['-123,4', false, '->parse() does not parse when invalid grouping used.', 1],
--            ['-123,4', -123.0, '->parse() truncates invalid grouping when grouping is disabled.', 4, false],
--            ['-123,4567', false, '->parse() does not parse when invalid grouping used.', 1],
--            ['-123,4567', -123.0, '->parse() truncates invalid grouping when grouping is disabled.', 4, false],
--            ['-123,456,789', -123456789.0, '->parse() parses a number with grouping.', 12],
--            ['-123,456,789', -123.0, '->parse() truncates a group if grouping is disabled.', 4, false],
--            ['-123,456,789.66', -123456789.66, '->parse() parses a number with grouping.', 15],
--            ['-123,456,789.66', -123.00, '->parse() truncates a group if grouping is disabled.', 4, false],
--            ['-123,456789.66', false, '->parse() does not parse when invalid grouping used.', 1],
--            ['-123,456789.66', -123.00, '->parse() truncates a group if grouping is disabled.', 4, false],
--            ['-123456,789.66', false, '->parse() does not parse when invalid grouping used.', 1],
--            ['-123456,789.66', -123456.00, '->parse() truncates a group if grouping is disabled.', 7, false],
--            ['-123,456,78', false, '->parse() does not parse when invalid grouping used.', 1],
--            ['-123,456,78', -123.0, '->parse() truncates a group if grouping is disabled.', 4, false],
--            ['-123,45,789', false, '->parse() does not parse when invalid grouping used.', 1],
--            ['-123,45,789', -123.0, '->parse() truncates a group if grouping is disabled.', 4, false],
--            ['-123,,456', -123.0, '->parse() parses when grouping is duplicated.', 4],
--            ['-123,,456', -123.0, '->parse() parses when grouping is disabled.', 4, false],
--            ['-123,,4', -123.0, '->parse() parses when grouping is duplicated.', 4],
--            ['-123,,4', -123.0, '->parse() parses when grouping is duplicated.', 4, false],
--            ['239.', 239.0, '->parse() parses when string ends with decimal separator.', 4],
--            ['239.', 239.0, '->parse() parses when string ends with decimal separator.', 4, false],
--        ];
--    }
--
--    public function testParseTypeDefault()
--    {
--        if (\PHP_VERSION_ID >= 80000) {
--            $this->expectException(\ValueError::class);
--        } elseif (method_exists($this, 'expectWarning')) {
--            $this->expectWarning();
--        } else {
--            $this->expectException(Warning::class);
--        }
--
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->parse('1', NumberFormatter::TYPE_DEFAULT);
--    }
--
--    /**
--     * @dataProvider parseTypeInt32Provider
--     */
--    public function testParseTypeInt32($value, $expected, $message = '')
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $parsedValue = $formatter->parse($value, NumberFormatter::TYPE_INT32);
--        $this->assertSame($expected, $parsedValue, $message);
--    }
--
--    public static function parseTypeInt32Provider()
--    {
--        return [
--            ['1', 1],
--            ['1.1', 1],
--            ['.1', 0],
--            ['2,147,483,647', 2147483647],
--            ['-2,147,483,648', -2147483647 - 1],
--            ['2,147,483,648', false, '->parse() TYPE_INT32 returns false when the number is greater than the integer positive range.'],
--            ['-2,147,483,649', false, '->parse() TYPE_INT32 returns false when the number is greater than the integer negative range.'],
--        ];
--    }
--
--    public function testParseTypeInt64With32BitIntegerInPhp32Bit()
--    {
--        if (4 !== \PHP_INT_SIZE) {
--            $this->markTestSkipped('PHP 32 bit is required.');
--        }
--
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--
--        $parsedValue = $formatter->parse('2,147,483,647', NumberFormatter::TYPE_INT64);
--        $this->assertIsInt($parsedValue);
--        $this->assertEquals(2147483647, $parsedValue);
--
--        $parsedValue = $formatter->parse('-2,147,483,648', NumberFormatter::TYPE_INT64);
--        $this->assertIsInt($parsedValue);
--        $this->assertEquals(-2147483648, $parsedValue);
--    }
--
--    public function testParseTypeInt64With32BitIntegerInPhp64Bit()
--    {
--        if (8 !== \PHP_INT_SIZE) {
--            $this->markTestSkipped('PHP 64 bit is required.');
--        }
--
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--
--        $parsedValue = $formatter->parse('2,147,483,647', NumberFormatter::TYPE_INT64);
--        $this->assertIsInt($parsedValue);
--        $this->assertEquals(2147483647, $parsedValue);
--
--        $parsedValue = $formatter->parse('-2,147,483,648', NumberFormatter::TYPE_INT64);
--        $this->assertIsInt($parsedValue);
--        $this->assertEquals(-2147483647 - 1, $parsedValue);
--    }
--
--    /**
--     * If PHP is compiled in 32bit mode, the returned value for a 64bit integer are float numbers.
--     */
--    public function testParseTypeInt64With64BitIntegerInPhp32Bit()
--    {
--        if (4 !== \PHP_INT_SIZE) {
--            $this->markTestSkipped('PHP 32 bit is required.');
--        }
--
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--
--        // int 64 using only 32 bit range strangeness
--        $parsedValue = $formatter->parse('2,147,483,648', NumberFormatter::TYPE_INT64);
--        $this->assertIsFloat($parsedValue);
--        $this->assertEquals(2147483648, $parsedValue, '->parse() TYPE_INT64 does not use true 64 bit integers, using only the 32 bit range.');
--
--        $parsedValue = $formatter->parse('-2,147,483,649', NumberFormatter::TYPE_INT64);
--        $this->assertIsFloat($parsedValue);
--        $this->assertEquals(-2147483649, $parsedValue, '->parse() TYPE_INT64 does not use true 64 bit integers, using only the 32 bit range.');
--    }
--
--    /**
--     * If PHP is compiled in 64bit mode, the returned value for a 64bit integer are 32bit integer numbers.
--     */
--    public function testParseTypeInt64With64BitIntegerInPhp64Bit()
--    {
--        if (8 !== \PHP_INT_SIZE) {
--            $this->markTestSkipped('PHP 64 bit is required.');
--        }
--
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--
--        $parsedValue = $formatter->parse('2,147,483,648', NumberFormatter::TYPE_INT64);
--        $this->assertIsInt($parsedValue);
--
--        $this->assertEquals(2147483648, $parsedValue, '->parse() TYPE_INT64 uses true 64 bit integers (PHP >= 5.3.14 and PHP >= 5.4.4).');
--
--        $parsedValue = $formatter->parse('-2,147,483,649', NumberFormatter::TYPE_INT64);
--        $this->assertIsInt($parsedValue);
--
--        $this->assertEquals(-2147483649, $parsedValue, '->parse() TYPE_INT64 uses true 64 bit integers (PHP >= 5.3.14 and PHP >= 5.4.4).');
--    }
--
--    /**
--     * @dataProvider parseTypeDoubleProvider
--     */
--    public function testParseTypeDouble($value, $expectedValue)
--    {
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $parsedValue = $formatter->parse($value, NumberFormatter::TYPE_DOUBLE);
--        $this->assertEqualsWithDelta($expectedValue, $parsedValue, 0.001);
--    }
--
--    public static function parseTypeDoubleProvider()
--    {
--        return [
--            ['1', (float) 1],
--            ['1.1', 1.1],
--            ['9,223,372,036,854,775,808', 9223372036854775808],
--            ['-9,223,372,036,854,775,809', -9223372036854775809],
--        ];
--    }
--
--    public function testParseTypeCurrency()
--    {
--        if (\PHP_VERSION_ID >= 80000) {
--            $this->expectException(\ValueError::class);
--        } elseif (method_exists($this, 'expectWarning')) {
--            $this->expectWarning();
--        } else {
--            $this->expectException(Warning::class);
--        }
--
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->parse('1', NumberFormatter::TYPE_CURRENCY);
--    }
--
--    public function testParseWithNotNullPositionValue()
--    {
--        $position = 1;
--        $formatter = static::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->parse('123', NumberFormatter::TYPE_DOUBLE, $position);
--        $this->assertEquals(3, $position);
--    }
--
--    /**
--     * @return NumberFormatter|\NumberFormatter
--     */
--    abstract protected static function getNumberFormatter(string $locale = 'en', ?string $style = null, ?string $pattern = null);
--
--    abstract protected static function getIntlErrorMessage(): string;
--
--    abstract protected static function getIntlErrorCode(): int;
--
--    /**
--     * @param int $errorCode
--     */
--    abstract protected static function isIntlFailure($errorCode): bool;
--}
-diff --git a/tests/Intl/Icu/CollatorTest.php b/tests/Intl/Icu/CollatorTest.php
-deleted file mode 100644
-index dcb6a87..0000000
---- a/tests/Intl/Icu/CollatorTest.php
-+++ /dev/null
-@@ -1,108 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu;
--
--use Symfony\Polyfill\Intl\Icu\Collator;
--use Symfony\Polyfill\Intl\Icu\Exception\MethodArgumentValueNotImplementedException;
--use Symfony\Polyfill\Intl\Icu\Exception\MethodNotImplementedException;
--use Symfony\Polyfill\Intl\Icu\Icu;
--
--/**
-- * @group class-polyfill
-- */
--class CollatorTest extends AbstractCollatorTest
--{
--    public function testConstructorWithUnsupportedLocale()
--    {
--        $this->expectException(MethodArgumentValueNotImplementedException::class);
--        $this->getCollator('pt_BR');
--    }
--
--    public function testCompare()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $collator = $this->getCollator('en');
--        $collator->compare('a', 'b');
--    }
--
--    public function testGetAttribute()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $collator = $this->getCollator('en');
--        $collator->getAttribute(Collator::NUMERIC_COLLATION);
--    }
--
--    public function testGetErrorCode()
--    {
--        $collator = $this->getCollator('en');
--        $this->assertEquals(Icu::U_ZERO_ERROR, $collator->getErrorCode());
--    }
--
--    public function testGetErrorMessage()
--    {
--        $collator = $this->getCollator('en');
--        $this->assertEquals('U_ZERO_ERROR', $collator->getErrorMessage());
--    }
--
--    public function testGetLocale()
--    {
--        $collator = $this->getCollator('en');
--        $this->assertEquals('en', $collator->getLocale());
--    }
--
--    public function testConstructWithoutLocale()
--    {
--        $collator = $this->getCollator(null);
--        $this->assertInstanceOf(Collator::class, $collator);
--    }
--
--    public function testGetSortKey()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $collator = $this->getCollator('en');
--        $collator->getSortKey('Hello');
--    }
--
--    public function testGetStrength()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $collator = $this->getCollator('en');
--        $collator->getStrength();
--    }
--
--    public function testSetAttribute()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $collator = $this->getCollator('en');
--        $collator->setAttribute(Collator::NUMERIC_COLLATION, Collator::ON);
--    }
--
--    public function testSetStrength()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $collator = $this->getCollator('en');
--        $collator->setStrength(Collator::PRIMARY);
--    }
--
--    public function testStaticCreate()
--    {
--        $collator = $this->getCollator('en');
--        $collator = $collator::create('en');
--        $this->assertInstanceOf(Collator::class, $collator);
--    }
--
--    protected function getCollator(?string $locale): Collator
--    {
--        return new class($locale) extends Collator {
--        };
--    }
--}
-diff --git a/tests/Intl/Icu/CurrenciesTest.php b/tests/Intl/Icu/CurrenciesTest.php
-deleted file mode 100644
-index cbdf075..0000000
---- a/tests/Intl/Icu/CurrenciesTest.php
-+++ /dev/null
-@@ -1,46 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu;
--
--use PHPUnit\Framework\TestCase;
--
--/**
-- * @group class-polyfill
-- */
--class CurrenciesTest extends TestCase
--{
--    public function testMetadata()
--    {
--        $dataDir = '/usr/share/php/Symfony/Component/Intl/Resources/data/currencies/';
--
--        if (is_file($dataDir.'en.php')) {
--            $en = require $dataDir.'en.php';
--            $meta = require $dataDir.'meta.php';
--        } else {
--            $en = json_decode(file_get_contents($dataDir.'en.json'), true);
--            $meta = json_decode(file_get_contents($dataDir.'meta.json'), true);
--        }
--        $data = [];
--
--        foreach ($en['Names'] as $code => [$symbol, $name]) {
--            $data[$code] = [$symbol];
--        }
--
--        foreach ($meta['Meta'] as $code => [$fractionDigit, $roundingIncrement]) {
--            $data[$code] = ($data[$code] ?? []) + [1 => $fractionDigit, $roundingIncrement];
--        }
--
--        $data = "<?php\n\nreturn ".var_export($data, true).";\n";
--
--        $this->assertStringEqualsFile(\dirname(__DIR__, 3).'/src/Intl/Icu/Resources/currencies.php', $data);
--    }
--}
-diff --git a/tests/Intl/Icu/IcuTest.php b/tests/Intl/Icu/IcuTest.php
-deleted file mode 100644
-index f1b4521..0000000
---- a/tests/Intl/Icu/IcuTest.php
-+++ /dev/null
-@@ -1,22 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu;
--
--use Symfony\Polyfill\Intl\Icu\Icu;
--
--class IcuTest extends AbstractIcuTest
--{
--    protected function getIntlErrorName($errorCode)
--    {
--        return Icu::getErrorName($errorCode);
--    }
--}
-diff --git a/tests/Intl/Icu/IntlDateFormatterTest.php b/tests/Intl/Icu/IntlDateFormatterTest.php
-deleted file mode 100644
-index 6adc5e7..0000000
---- a/tests/Intl/Icu/IntlDateFormatterTest.php
-+++ /dev/null
-@@ -1,226 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu;
--
--use Symfony\Polyfill\Intl\Icu\Exception\MethodArgumentNotImplementedException;
--use Symfony\Polyfill\Intl\Icu\Exception\MethodArgumentValueNotImplementedException;
--use Symfony\Polyfill\Intl\Icu\Exception\MethodNotImplementedException;
--use Symfony\Polyfill\Intl\Icu\Exception\NotImplementedException;
--use Symfony\Polyfill\Intl\Icu\Icu;
--use Symfony\Polyfill\Intl\Icu\IntlDateFormatter;
--
--/**
-- * @group class-polyfill
-- * @group time-sensitive
-- */
--class IntlDateFormatterTest extends AbstractIntlDateFormatterTest
--{
--    public function testConstructor()
--    {
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'UTC', IntlDateFormatter::GREGORIAN, 'y-M-d');
--        $this->assertEquals('y-M-d', $formatter->getPattern());
--    }
--
--    public function testConstructorWithoutLocale()
--    {
--        $formatter = $this->getDateFormatter(null, IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'UTC', IntlDateFormatter::GREGORIAN, 'y-M-d');
--        $this->assertEquals('y-M-d', $formatter->getPattern());
--    }
--
--    public function testConstructorWithoutCalendar()
--    {
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'UTC', null, 'y-M-d');
--        $this->assertEquals('y-M-d', $formatter->getPattern());
--    }
--
--    public function testConstructorWithUnsupportedLocale()
--    {
--        $this->expectException(MethodArgumentValueNotImplementedException::class);
--        $this->getDateFormatter('pt_BR', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT);
--    }
--
--    public function testStaticCreate()
--    {
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT);
--        $formatter = $formatter::create('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT);
--        $this->assertInstanceOf(IntlDateFormatter::class, $formatter);
--    }
--
--    public function testFormatWithUnsupportedTimestampArgument()
--    {
--        $formatter = $this->getDefaultDateFormatter();
--
--        $localtime = [
--            'tm_sec' => 59,
--            'tm_min' => 3,
--            'tm_hour' => 15,
--            'tm_mday' => 15,
--            'tm_mon' => 3,
--            'tm_year' => 112,
--            'tm_wday' => 0,
--            'tm_yday' => 105,
--            'tm_isdst' => 0,
--        ];
--
--        try {
--            $formatter->format($localtime);
--        } catch (\Exception $e) {
--            $this->assertInstanceOf(MethodArgumentValueNotImplementedException::class, $e);
--            $this->assertStringEndsWith('Only Unix timestamps and DateTime objects are supported.  Please install the "intl" extension for full localization capabilities.', $e->getMessage());
--        }
--    }
--
--    public function testFormatWithUnimplementedChars()
--    {
--        $this->expectException(NotImplementedException::class);
--        $pattern = 'Y';
--        $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, 'UTC', IntlDateFormatter::GREGORIAN, $pattern);
--        $formatter->format(0);
--    }
--
--    public function testFormatWithNonIntegerTimestamp()
--    {
--        $this->expectException(NotImplementedException::class);
--        $formatter = $this->getDefaultDateFormatter();
--        $formatter->format([]);
--    }
--
--    public function testGetErrorCode()
--    {
--        $formatter = $this->getDefaultDateFormatter();
--        $this->assertEquals(Icu::getErrorCode(), $formatter->getErrorCode());
--    }
--
--    public function testGetErrorMessage()
--    {
--        $formatter = $this->getDefaultDateFormatter();
--        $this->assertEquals(Icu::getErrorMessage(), $formatter->getErrorMessage());
--    }
--
--    public function testIsLenient()
--    {
--        $formatter = $this->getDefaultDateFormatter();
--        $this->assertFalse($formatter->isLenient());
--    }
--
--    public function testLocaltime()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $formatter = $this->getDefaultDateFormatter();
--        $formatter->localtime('Wednesday, December 31, 1969 4:00:00 PM PT');
--    }
--
--    public function testParseWithNotNullPositionValue()
--    {
--        $this->expectException(MethodArgumentNotImplementedException::class);
--        $position = 0;
--        $formatter = $this->getDefaultDateFormatter('y');
--        $this->assertSame(0, $formatter->parse('1970', $position));
--    }
--
--    public function testSetCalendar()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $formatter = $this->getDefaultDateFormatter();
--        $formatter->setCalendar(IntlDateFormatter::GREGORIAN);
--    }
--
--    public function testSetLenient()
--    {
--        $this->expectException(MethodArgumentValueNotImplementedException::class);
--        $formatter = $this->getDefaultDateFormatter();
--        $formatter->setLenient(true);
--    }
--
--    public function testFormatWithGmtTimeZoneAndMinutesOffset()
--    {
--        $this->expectException(NotImplementedException::class);
--        parent::testFormatWithGmtTimeZoneAndMinutesOffset();
--    }
--
--    public function testFormatWithNonStandardTimezone()
--    {
--        $this->expectException(NotImplementedException::class);
--        parent::testFormatWithNonStandardTimezone();
--    }
--
--    public static function parseStandaloneAmPmProvider()
--    {
--        return self::notImplemented(parent::parseStandaloneAmPmProvider());
--    }
--
--    public static function parseDayOfWeekProvider()
--    {
--        return self::notImplemented(parent::parseDayOfWeekProvider());
--    }
--
--    public static function parseDayOfYearProvider()
--    {
--        return self::notImplemented(parent::parseDayOfYearProvider());
--    }
--
--    public static function parseQuarterProvider()
--    {
--        return self::notImplemented(parent::parseQuarterProvider());
--    }
--
--    public function testParseThreeDigitsYears()
--    {
--        if (\PHP_INT_SIZE < 8) {
--            $this->markTestSkipped('Parsing three digits years requires a 64bit PHP.');
--        }
--
--        $formatter = $this->getDefaultDateFormatter('yyyy-M-d');
--        $this->assertSame(-32157648000, $formatter->parse('950-12-19'));
--        $this->assertIsIntlSuccess($formatter, 'U_ZERO_ERROR', Icu::U_ZERO_ERROR);
--    }
--
--    protected function getDateFormatter($locale, $datetype, $timetype, $timezone = null, $calendar = IntlDateFormatter::GREGORIAN, $pattern = null)
--    {
--        return new class($locale, $datetype, $timetype, $timezone, $calendar, $pattern) extends IntlDateFormatter {
--        };
--    }
--
--    protected function getIntlErrorMessage(): string
--    {
--        return Icu::getErrorMessage();
--    }
--
--    protected function getIntlErrorCode(): int
--    {
--        return Icu::getErrorCode();
--    }
--
--    protected function isIntlFailure($errorCode): bool
--    {
--        return Icu::isFailure($errorCode);
--    }
--
--    /**
--     * Just to document the differences between the stub and the intl
--     * implementations. The intl can parse any of the tested formats alone. The
--     * stub does not implement them as it would be needed to add more
--     * abstraction, passing more context to the transformers objects. Any of the
--     * formats are ignored alone or with date/time data (years, months, days,
--     * hours, minutes and seconds).
--     *
--     * Also in intl, format like 'ss E' for '10 2' (2nd day of year
--     * + 10 seconds) are added, then we have 86,400 seconds (24h * 60min * 60s)
--     * + 10 seconds
--     */
--    private static function notImplemented(array $dataSets): array
--    {
--        return array_map(function (array $row) {
--            return [$row[0], $row[1], 0];
--        }, $dataSets);
--    }
--}
-diff --git a/tests/Intl/Icu/LocaleTest.php b/tests/Intl/Icu/LocaleTest.php
-deleted file mode 100644
-index 85896db..0000000
---- a/tests/Intl/Icu/LocaleTest.php
-+++ /dev/null
-@@ -1,151 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu;
--
--use Symfony\Polyfill\Intl\Icu\Exception\MethodNotImplementedException;
--use Symfony\Polyfill\Intl\Icu\Locale;
--
--/**
-- * @group class-polyfill
-- */
--class LocaleTest extends AbstractLocaleTest
--{
--    public function testAcceptFromHttp()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $this->call('acceptFromHttp', 'pt-br,en-us;q=0.7,en;q=0.5');
--    }
--
--    public function testCanonicalize()
--    {
--        $this->assertSame('en', $this->call('canonicalize', ''));
--        $this->assertSame('en', $this->call('canonicalize', '.utf8'));
--        $this->assertSame('fr_FR', $this->call('canonicalize', 'FR-fr'));
--        $this->assertSame('fr_FR', $this->call('canonicalize', 'FR-fr.utf8'));
--        $this->assertSame('uz_Latn', $this->call('canonicalize', 'UZ-lATN'));
--        $this->assertSame('uz_Cyrl_UZ', $this->call('canonicalize', 'UZ-cYRL-uz'));
--        $this->assertSame('123', $this->call('canonicalize', 123));
--    }
--
--    public function testComposeLocale()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $subtags = [
--            'language' => 'pt',
--            'script' => 'Latn',
--            'region' => 'BR',
--        ];
--        $this->call('composeLocale', $subtags);
--    }
--
--    public function testFilterMatches()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $this->call('filterMatches', 'pt-BR', 'pt-BR');
--    }
--
--    public function testGetAllVariants()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $this->call('getAllVariants', 'pt_BR_Latn');
--    }
--
--    public function testGetDisplayLanguage()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $this->call('getDisplayLanguage', 'pt-Latn-BR', 'en');
--    }
--
--    public function testGetDisplayName()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $this->call('getDisplayName', 'pt-Latn-BR', 'en');
--    }
--
--    public function testGetDisplayRegion()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $this->call('getDisplayRegion', 'pt-Latn-BR', 'en');
--    }
--
--    public function testGetDisplayScript()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $this->call('getDisplayScript', 'pt-Latn-BR', 'en');
--    }
--
--    public function testGetDisplayVariant()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $this->call('getDisplayVariant', 'pt-Latn-BR', 'en');
--    }
--
--    public function testGetKeywords()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $this->call('getKeywords', 'pt-BR@currency=BRL');
--    }
--
--    public function testGetPrimaryLanguage()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $this->call('getPrimaryLanguage', 'pt-Latn-BR');
--    }
--
--    public function testGetRegion()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $this->call('getRegion', 'pt-Latn-BR');
--    }
--
--    public function testGetScript()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $this->call('getScript', 'pt-Latn-BR');
--    }
--
--    public function testLookup()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $langtag = [
--            'pt-Latn-BR',
--            'pt-BR',
--        ];
--        $this->call('lookup', $langtag, 'pt-BR-x-priv1');
--    }
--
--    public function testParseLocale()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $this->call('parseLocale', 'pt-Latn-BR');
--    }
--
--    public function testSetDefault()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $this->call('setDefault', 'pt_BR');
--    }
--
--    public function testSetDefaultAcceptsEn()
--    {
--        $this->call('setDefault', 'en');
--
--        $this->assertSame('en', $this->call('getDefault'));
--    }
--
--    protected function call($methodName)
--    {
--        $args = \array_slice(\func_get_args(), 1);
--
--        return Locale::{$methodName}(...$args);
--    }
--}
-diff --git a/tests/Intl/Icu/NumberFormatterTest.php b/tests/Intl/Icu/NumberFormatterTest.php
-deleted file mode 100644
-index 8b6dd92..0000000
---- a/tests/Intl/Icu/NumberFormatterTest.php
-+++ /dev/null
-@@ -1,194 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu;
--
--use Symfony\Polyfill\Intl\Icu\Exception\MethodArgumentNotImplementedException;
--use Symfony\Polyfill\Intl\Icu\Exception\MethodArgumentValueNotImplementedException;
--use Symfony\Polyfill\Intl\Icu\Exception\MethodNotImplementedException;
--use Symfony\Polyfill\Intl\Icu\Exception\NotImplementedException;
--use Symfony\Polyfill\Intl\Icu\Icu;
--use Symfony\Polyfill\Intl\Icu\NumberFormatter;
--
--/**
-- * Note that there are some values written like -2147483647 - 1. This is the lower 32bit int max and is a known
-- * behavior of PHP.
-- *
-- * @group class-polyfill
-- */
--class NumberFormatterTest extends AbstractNumberFormatterTest
--{
--    public function testConstructorWithUnsupportedLocale()
--    {
--        $this->expectException(MethodArgumentValueNotImplementedException::class);
--        self::getNumberFormatter('pt_BR');
--    }
--
--    public function testConstructorWithUnsupportedStyle()
--    {
--        $this->expectException(MethodArgumentValueNotImplementedException::class);
--        self::getNumberFormatter('en', NumberFormatter::PATTERN_DECIMAL);
--    }
--
--    public function testConstructorWithPatternDifferentThanNull()
--    {
--        $this->expectException(MethodArgumentNotImplementedException::class);
--        self::getNumberFormatter('en', NumberFormatter::DECIMAL, '');
--    }
--
--    public function testSetAttributeWithUnsupportedAttribute()
--    {
--        $this->expectException(MethodArgumentValueNotImplementedException::class);
--        $formatter = self::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->setAttribute(NumberFormatter::LENIENT_PARSE, 100);
--    }
--
--    public function testSetAttributeInvalidRoundingMode()
--    {
--        $this->expectException(MethodArgumentValueNotImplementedException::class);
--        $formatter = self::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->setAttribute(NumberFormatter::ROUNDING_MODE, -1);
--    }
--
--    public function testConstructWithoutLocale()
--    {
--        $this->assertInstanceOf(NumberFormatter::class, self::getNumberFormatter(null, NumberFormatter::DECIMAL));
--    }
--
--    public function testCreate()
--    {
--        $formatter = self::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $this->assertInstanceOf(NumberFormatter::class, $formatter::create('en', NumberFormatter::DECIMAL));
--    }
--
--    public function testFormatWithCurrencyStyle()
--    {
--        $this->expectException('RuntimeException');
--        parent::testFormatWithCurrencyStyle();
--    }
--
--    /**
--     * @dataProvider formatTypeInt32Provider
--     */
--    public function testFormatTypeInt32($formatter, $value, $expected, $message = '')
--    {
--        $this->expectException(MethodArgumentValueNotImplementedException::class);
--        parent::testFormatTypeInt32($formatter, $value, $expected, $message);
--    }
--
--    /**
--     * @dataProvider formatTypeInt32WithCurrencyStyleProvider
--     */
--    public function testFormatTypeInt32WithCurrencyStyle($formatter, $value, $expected, $message = '')
--    {
--        $this->expectException(NotImplementedException::class);
--        parent::testFormatTypeInt32WithCurrencyStyle($formatter, $value, $expected, $message);
--    }
--
--    /**
--     * @dataProvider formatTypeInt64Provider
--     */
--    public function testFormatTypeInt64($formatter, $value, $expected)
--    {
--        $this->expectException(MethodArgumentValueNotImplementedException::class);
--        parent::testFormatTypeInt64($formatter, $value, $expected);
--    }
--
--    /**
--     * @dataProvider formatTypeInt64WithCurrencyStyleProvider
--     */
--    public function testFormatTypeInt64WithCurrencyStyle($formatter, $value, $expected)
--    {
--        $this->expectException(NotImplementedException::class);
--        parent::testFormatTypeInt64WithCurrencyStyle($formatter, $value, $expected);
--    }
--
--    /**
--     * @dataProvider formatTypeDoubleProvider
--     */
--    public function testFormatTypeDouble($formatter, $value, $expected)
--    {
--        $this->expectException(MethodArgumentValueNotImplementedException::class);
--        parent::testFormatTypeDouble($formatter, $value, $expected);
--    }
--
--    /**
--     * @dataProvider formatTypeDoubleWithCurrencyStyleProvider
--     */
--    public function testFormatTypeDoubleWithCurrencyStyle($formatter, $value, $expected)
--    {
--        $this->expectException(NotImplementedException::class);
--        parent::testFormatTypeDoubleWithCurrencyStyle($formatter, $value, $expected);
--    }
--
--    public function testGetPattern()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $formatter = self::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->getPattern();
--    }
--
--    public function testGetErrorCode()
--    {
--        $formatter = self::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $this->assertEquals(Icu::U_ZERO_ERROR, $formatter->getErrorCode());
--    }
--
--    public function testParseCurrency()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $formatter = self::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $currency = 'USD';
--        $formatter->parseCurrency(3, $currency);
--    }
--
--    public function testSetPattern()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $formatter = self::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->setPattern('#0');
--    }
--
--    public function testSetSymbol()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $formatter = self::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->setSymbol(NumberFormatter::GROUPING_SEPARATOR_SYMBOL, '*');
--    }
--
--    public function testSetTextAttribute()
--    {
--        $this->expectException(MethodNotImplementedException::class);
--        $formatter = self::getNumberFormatter('en', NumberFormatter::DECIMAL);
--        $formatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, '-');
--    }
--
--    protected static function getNumberFormatter(?string $locale = 'en', ?string $style = null, ?string $pattern = null): NumberFormatter
--    {
--        return new class($locale, $style, $pattern) extends NumberFormatter {
--        };
--    }
--
--    protected static function getIntlErrorMessage(): string
--    {
--        return Icu::getErrorMessage();
--    }
--
--    protected static function getIntlErrorCode(): int
--    {
--        return Icu::getErrorCode();
--    }
--
--    protected static function isIntlFailure($errorCode): bool
--    {
--        return Icu::isFailure($errorCode);
--    }
--}
-diff --git a/tests/Intl/Icu/Verification/CollatorTest.php b/tests/Intl/Icu/Verification/CollatorTest.php
-deleted file mode 100644
-index 834f133..0000000
---- a/tests/Intl/Icu/Verification/CollatorTest.php
-+++ /dev/null
-@@ -1,37 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu\Verification;
--
--use Symfony\Polyfill\Tests\Intl\Icu\AbstractCollatorTest;
--
--/**
-- * Verifies that {@link AbstractCollatorTest} matches the behavior of the
-- * {@link \Collator} class in a specific version of ICU.
-- *
-- * @author Bernhard Schussek <bschussek@gmail.com>
-- *
-- * @requires extension intl
-- *
-- * @group class-polyfill
-- */
--class CollatorTest extends AbstractCollatorTest
--{
--    protected function setUp(): void
--    {
--        \Locale::setDefault('en');
--    }
--
--    protected function getCollator(?string $locale): \Collator
--    {
--        return new \Collator($locale);
--    }
--}
-diff --git a/tests/Intl/Icu/Verification/IcuTest.php b/tests/Intl/Icu/Verification/IcuTest.php
-deleted file mode 100644
-index 5474adc..0000000
---- a/tests/Intl/Icu/Verification/IcuTest.php
-+++ /dev/null
-@@ -1,37 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu\Verification;
--
--use Symfony\Polyfill\Tests\Intl\Icu\AbstractIcuTest;
--
--/**
-- * Verifies that {@link AbstractIcuTest} matches the behavior of the
-- * intl functions with a specific version of ICU.
-- *
-- * @author Bernhard Schussek <bschussek@gmail.com>
-- *
-- * @requires extension intl
-- *
-- * @group class-polyfill
-- */
--class IcuTest extends AbstractIcuTest
--{
--    protected function setUp(): void
--    {
--        \Locale::setDefault('en');
--    }
--
--    protected function getIntlErrorName($errorCode)
--    {
--        return intl_error_name($errorCode);
--    }
--}
-diff --git a/tests/Intl/Icu/Verification/IntlDateFormatterTest.php b/tests/Intl/Icu/Verification/IntlDateFormatterTest.php
-deleted file mode 100644
-index da88e32..0000000
---- a/tests/Intl/Icu/Verification/IntlDateFormatterTest.php
-+++ /dev/null
-@@ -1,127 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu\Verification;
--
--use Symfony\Polyfill\Intl\Icu\IntlDateFormatter;
--use Symfony\Polyfill\Tests\Intl\Icu\AbstractIntlDateFormatterTest;
--
--/**
-- * Verifies that {@link AbstractIntlDateFormatterTest} matches the behavior of
-- * the {@link \IntlDateFormatter} class in a specific version of ICU.
-- *
-- * @author Bernhard Schussek <bschussek@gmail.com>
-- *
-- * @requires extension intl
-- *
-- * @group class-polyfill
-- */
--class IntlDateFormatterTest extends AbstractIntlDateFormatterTest
--{
--    /**
--     * @dataProvider formatProvider
--     */
--    public function testFormat($pattern, $timestamp, $expected)
--    {
--        if (\PHP_VERSION_ID < 70105 && $timestamp instanceof \DateTimeImmutable) {
--            $this->markTestSkipped('PHP >= 7.1.5 required for DateTimeImmutable.');
--        }
--
--        parent::testFormat($pattern, $timestamp, $expected);
--    }
--
--    /**
--     * @dataProvider formatTimezoneProvider
--     */
--    public function testFormatTimezone($pattern, $timezone, $expected)
--    {
--        if (version_compare(\INTL_ICU_VERSION, '59.1', '<')) {
--            $this->markTestSkipped('ICU version 59.1 is required.');
--        }
--
--        parent::testFormatTimezone($pattern, $timezone, $expected);
--    }
--
--    public function testFormatUtcAndGmtAreSplit()
--    {
--        if (version_compare(\INTL_ICU_VERSION, '59.1', '<')) {
--            $this->markTestSkipped('ICU version 59.1 is required.');
--        }
--
--        parent::testFormatUtcAndGmtAreSplit();
--    }
--
--    /**
--     * @dataProvider dateAndTimeTypeProvider
--     */
--    public function testDateAndTimeType($timestamp, $datetype, $timetype, $expected)
--    {
--        if (version_compare(\INTL_ICU_VERSION, '59.1', '<')) {
--            $this->markTestSkipped('ICU version 59.1 is required.');
--        }
--
--        parent::testDateAndTimeType($timestamp, $datetype, $timetype, $expected);
--    }
--
--    /**
--     * @requires PHP 8
--     *
--     * @dataProvider relativeDateTypeProvider
--     */
--    public function testRelativeDateType($timestamp, $datetype, $timetype, $expected)
--    {
--        if (version_compare(\INTL_ICU_VERSION, '59.1', '<')) {
--            $this->markTestSkipped('ICU version 59.1 is required.');
--        }
--
--        parent::testRelativeDateType($timestamp, $datetype, $timetype, $expected);
--    }
--
--    /**
--     * @requires PHP 8
--     */
--    public function testFormatIgnoresPatternForRelativeDateType()
--    {
--        if (version_compare(\INTL_ICU_VERSION, '59.1', '<')) {
--            $this->markTestSkipped('ICU version 59.1 is required.');
--        }
--
--        parent::testFormatIgnoresPatternForRelativeDateType();
--    }
--
--    protected function getDateFormatter($locale, $datetype, $timetype, $timezone = null, $calendar = IntlDateFormatter::GREGORIAN, $pattern = null)
--    {
--        if (version_compare(\INTL_ICU_VERSION, '55.1', '<')) {
--            $this->markTestSkipped('ICU version 55.1 is required.');
--        }
--
--        if (!$formatter = new \IntlDateFormatter($locale, $datetype, $timetype, $timezone, $calendar, $pattern)) {
--            throw new \InvalidArgumentException(intl_get_error_message());
--        }
--
--        return $formatter;
--    }
--
--    protected function getIntlErrorMessage(): string
--    {
--        return intl_get_error_message();
--    }
--
--    protected function getIntlErrorCode(): int
--    {
--        return intl_get_error_code();
--    }
--
--    protected function isIntlFailure($errorCode): bool
--    {
--        return intl_is_failure($errorCode);
--    }
--}
-diff --git a/tests/Intl/Icu/Verification/LocaleTest.php b/tests/Intl/Icu/Verification/LocaleTest.php
-deleted file mode 100644
-index 6d9c35e..0000000
---- a/tests/Intl/Icu/Verification/LocaleTest.php
-+++ /dev/null
-@@ -1,39 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu\Verification;
--
--use Symfony\Polyfill\Tests\Intl\Icu\AbstractLocaleTest;
--
--/**
-- * Verifies that {@link AbstractLocaleTest} matches the behavior of the
-- * {@link Locale} class with a specific version of ICU.
-- *
-- * @author Bernhard Schussek <bschussek@gmail.com>
-- *
-- * @requires extension intl
-- *
-- * @group class-polyfill
-- */
--class LocaleTest extends AbstractLocaleTest
--{
--    protected function setUp(): void
--    {
--        \Locale::setDefault('en');
--    }
--
--    protected function call($methodName)
--    {
--        $args = \array_slice(\func_get_args(), 1);
--
--        return \Locale::{$methodName}(...$args);
--    }
--}
-diff --git a/tests/Intl/Icu/Verification/NumberFormatterTest.php b/tests/Intl/Icu/Verification/NumberFormatterTest.php
-deleted file mode 100644
-index 38afae2..0000000
---- a/tests/Intl/Icu/Verification/NumberFormatterTest.php
-+++ /dev/null
-@@ -1,68 +0,0 @@
--<?php
--
--/*
-- * This file is part of the Symfony package.
-- *
-- * (c) Fabien Potencier <fabien@symfony.com>
-- *
-- * For the full copyright and license information, please view the LICENSE
-- * file that was distributed with this source code.
-- */
--
--namespace Symfony\Polyfill\Tests\Intl\Icu\Verification;
--
--use Symfony\Polyfill\Tests\Intl\Icu\AbstractNumberFormatterTest;
--
--/**
-- * Note that there are some values written like -2147483647 - 1. This is the lower 32bit int max and is a known
-- * behavior of PHP.
-- *
-- * @requires extension intl
-- *
-- * @group class-polyfill
-- */
--class NumberFormatterTest extends AbstractNumberFormatterTest
--{
--    protected function setUp(): void
--    {
--        \Locale::setDefault('en');
--
--        if (version_compare(\INTL_ICU_VERSION, '55.1', '<')) {
--            $this->markTestSkipped('ICU version 55.1 is required.');
--        }
--    }
--
--    public function testCreate()
--    {
--        $this->assertInstanceOf('\NumberFormatter', \NumberFormatter::create('en', \NumberFormatter::DECIMAL));
--    }
--
--    public function testGetTextAttribute()
--    {
--        if (version_compare(\INTL_ICU_VERSION, '57.1', '<')) {
--            $this->markTestSkipped('ICU version 57.1 is required.');
--        }
--
--        parent::testGetTextAttribute();
--    }
--
--    protected static function getNumberFormatter(?string $locale = 'en', ?string $style = null, ?string $pattern = null): \NumberFormatter
--    {
--        return new \NumberFormatter($locale, $style, $pattern);
--    }
--
--    protected static function getIntlErrorMessage(): string
--    {
--        return intl_get_error_message();
--    }
--
--    protected static function getIntlErrorCode(): int
--    {
--        return intl_get_error_code();
--    }
--
--    protected static function isIntlFailure($errorCode): bool
--    {
--        return intl_is_failure($errorCode);
--    }
--}
-diff --git a/tests/Intl/Idn/IdnaTestV2.txt b/tests/Intl/Idn/IdnaTestV2.txt
-index 28c5b64..25f96d3 100644
---- a/tests/Intl/Idn/IdnaTestV2.txt
-+++ b/tests/Intl/Idn/IdnaTestV2.txt
-@@ -485,7 +485,7 @@ xn--dmc; ஹ; ; xn--dmc; ; ;  # ஹ
- ஹ; ; ; xn--dmc; ; ;  # ஹ
- xn--dmc225h; ஹ‍; [C2]; xn--dmc225h; ; ;  # ஹ
- ‍; ; [C2]; xn--1ug; ; ; [A4_2] # 
--; ; [X4_2]; ; [A4_2]; ;  # 
-+#; ; [X4_2]; ; [A4_2]; ;  # 
- xn--1ug; ‍; [C2]; xn--1ug; ; ;  # 
- ஹ்‌; ; ; xn--dmc4by94h; ; xn--dmc4b;  # ஹ்
- xn--dmc4by94h; ஹ்‌; ; xn--dmc4by94h; ; ;  # ஹ்
-diff --git a/tests/Mbstring/MbstringTest.php b/tests/Mbstring/MbstringTest.php
-index 0920ebf..0e2a6cd 100644
---- a/tests/Mbstring/MbstringTest.php
-+++ b/tests/Mbstring/MbstringTest.php
-@@ -641,7 +641,7 @@ class MbstringTest extends TestCase
-     public function testMbStrPadInvalidArguments(string $expectedError, string $string, int $length, string $padString, int $padType, ?string $encoding = null)
-     {
-         $this->expectException(\ValueError::class);
--        $this->expectErrorMessage($expectedError);
-+        $this->expectExceptionMessage($expectedError);
- 
-         mb_str_pad($string, $length, $padString, $padType, $encoding);
-     }
-@@ -726,9 +726,6 @@ class MbstringTest extends TestCase
- 
-     public static function mbStrPadInvalidArgumentsProvider(): iterable
-     {
--        yield ['mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string', '▶▶', 6, '', \STR_PAD_RIGHT];
--        yield ['mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string', '▶▶', 6, '', \STR_PAD_LEFT];
--        yield ['mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string', '▶▶', 6, '', \STR_PAD_BOTH];
-         yield ['mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH', '▶▶', 6, ' ', 123456];
-         yield ['mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "unexisting" given', '▶▶', 6, ' ', \STR_PAD_BOTH, 'unexisting'];
-     }
-diff --git a/tests/Php82/RandomSecureEngineTest.php b/tests/Php82/RandomSecureEngineTest.php
-index 7290be8..aab4220 100644
---- a/tests/Php82/RandomSecureEngineTest.php
-+++ b/tests/Php82/RandomSecureEngineTest.php
-@@ -19,7 +19,7 @@ use Symfony\Polyfill\Php82\Random\Engine\Secure as SecureEnginePolyfill;
-  */
- class RandomSecureEngineTest extends TestCase
- {
--    public function secureEngineProvider()
-+    public static function secureEngineProvider()
-     {
-         yield [new SecureEnginePolyfill()];
-         yield [new \Random\Engine\Secure()];
-diff --git a/tests/Php83/Php83Test.php b/tests/Php83/Php83Test.php
-index 08416a9..fa4dff4 100644
---- a/tests/Php83/Php83Test.php
-+++ b/tests/Php83/Php83Test.php
-@@ -46,7 +46,7 @@ class Php83Test extends TestCase
-     public function testMbStrPadInvalidArguments(string $expectedError, string $string, int $length, string $padString, int $padType, ?string $encoding = null)
-     {
-         $this->expectException(\ValueError::class);
--        $this->expectErrorMessage($expectedError);
-+        $this->expectExceptionMessage($expectedError);
- 
-         mb_str_pad($string, $length, $padString, $padType, $encoding);
-     }
-@@ -115,9 +115,6 @@ class Php83Test extends TestCase
- 
-     public static function mbStrPadInvalidArgumentsProvider(): iterable
-     {
--        yield ['mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string', '▶▶', 6, '', \STR_PAD_RIGHT];
--        yield ['mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string', '▶▶', 6, '', \STR_PAD_LEFT];
--        yield ['mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string', '▶▶', 6, '', \STR_PAD_BOTH];
-         yield ['mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH', '▶▶', 6, ' ', 123456];
-         yield ['mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "unexisting" given', '▶▶', 6, ' ', \STR_PAD_BOTH, 'unexisting'];
-     }
-@@ -161,7 +158,7 @@ class Php83Test extends TestCase
-     public function testJsonValidateInvalidOptionsProvided(int $depth, int $flags, string $expectedError)
-     {
-         $this->expectException(\ValueError::class);
--        $this->expectErrorMessage($expectedError);
-+        $this->expectExceptionMessage($expectedError);
-         json_validate('{}', $depth, $flags);
-     }
- 
-@@ -280,7 +277,6 @@ class Php83Test extends TestCase
- 
-     public static function strInvalidIncrementProvider(): iterable
-     {
--        yield ['str_increment(): Argument #1 ($string) cannot be empty', ''];
-         yield ['str_increment(): Argument #1 ($string) must be composed only of alphanumeric ASCII characters', '-cc'];
-         yield ['str_increment(): Argument #1 ($string) must be composed only of alphanumeric ASCII characters', 'Z '];
-         yield ['str_increment(): Argument #1 ($string) must be composed only of alphanumeric ASCII characters', ' Z'];
-@@ -311,7 +307,6 @@ class Php83Test extends TestCase
- 
-     public static function strInvalidDecrementProvider(): iterable
-     {
--        yield ['str_decrement(): Argument #1 ($string) cannot be empty', ''];
-         yield ['str_decrement(): Argument #1 ($string) must be composed only of alphanumeric ASCII characters', '我喜歡雞肉'];
-         yield ['str_decrement(): Argument #1 ($string) "0" is out of decrement range', '0'];
-         yield ['str_decrement(): Argument #1 ($string) "a" is out of decrement range', 'a'];
diff -pruN 1.31.0-5/debian/patches/0007-Modernize-PHPUnit-syntax.patch 1.33.0-2/debian/patches/0007-Modernize-PHPUnit-syntax.patch
--- 1.31.0-5/debian/patches/0007-Modernize-PHPUnit-syntax.patch	2025-02-24 20:03:32.000000000 +0000
+++ 1.33.0-2/debian/patches/0007-Modernize-PHPUnit-syntax.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,998 +0,0 @@
-From: =?utf-8?q?David_Pr=C3=A9vot?= <taffit@debian.org>
-Date: Mon, 17 Feb 2025 12:55:14 +0100
-Subject: Modernize PHPUnit syntax
-
----
- tests/Ctype/CtypeTest.php                          | 23 ++++++++++++++++++++++
- tests/Iconv/IconvTest.php                          |  3 +++
- tests/Intl/Grapheme/GraphemeTest.php               |  3 +++
- tests/Intl/Idn/IdnTest.php                         | 16 +++++++++++++++
- .../Intl/MessageFormatter/MessageFormatterTest.php |  2 ++
- tests/Mbstring/MbstringTest.php                    | 15 ++++++++++++++
- tests/Php73/Php73Test.php                          |  3 +++
- tests/Php74/Php74Test.php                          |  3 +++
- tests/Php80/Php80Test.php                          |  5 +++++
- tests/Php82/Php82Test.php                          |  7 +++++++
- tests/Php82/RandomSecureEngineTest.php             |  5 +++++
- tests/Php82/SensitiveParameterValueTest.php        |  6 ++++++
- tests/Php83/Php83Test.php                          | 11 +++++++++++
- tests/Php84/Php84Test.php                          |  9 +++++++++
- tests/Uuid/UuidTest.php                            | 14 +++++++++++++
- 15 files changed, 125 insertions(+)
-
-diff --git a/tests/Ctype/CtypeTest.php b/tests/Ctype/CtypeTest.php
-index de5f1f6..48b873b 100644
---- a/tests/Ctype/CtypeTest.php
-+++ b/tests/Ctype/CtypeTest.php
-@@ -11,6 +11,7 @@
- 
- namespace Symfony\Polyfill\Tests\Ctype;
- 
-+use PHPUnit\Framework\Attributes\DataProvider;
- use PHPUnit\Framework\TestCase;
- 
- /**
-@@ -21,6 +22,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideValidAlnums
-      */
-+    #[DataProvider('provideValidAlnums')]
-     public function testValidCtypeAlnum($text)
-     {
-         $this->assertTrue(ctype_alnum($text));
-@@ -44,6 +46,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideInvalidAlnum
-      */
-+    #[DataProvider('provideInvalidAlnum')]
-     public function testInvalidCtypeAlnum($text)
-     {
-         $this->assertFalse(ctype_alnum($text));
-@@ -76,6 +79,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideValidAlphas
-      */
-+    #[DataProvider('provideValidAlphas')]
-     public function testValidCtypeAlpha($text)
-     {
-         $this->assertTrue(ctype_alpha($text));
-@@ -95,6 +99,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideInvalidAlpha
-      */
-+    #[DataProvider('provideInvalidAlpha')]
-     public function testInvalidCtypeAlpha($text)
-     {
-         $this->assertFalse(ctype_alpha($text));
-@@ -127,6 +132,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideValidCntrls
-      */
-+    #[DataProvider('provideValidCntrls')]
-     public function testValidCtypeCntrl($text)
-     {
-         $this->assertTrue(ctype_cntrl($text));
-@@ -146,6 +152,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideInvalidCntrl
-      */
-+    #[DataProvider('provideInvalidCntrl')]
-     public function testInvalidCtypeCntrl($text)
-     {
-         $this->assertFalse(ctype_cntrl($text));
-@@ -180,6 +187,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideValidDigits
-      */
-+    #[DataProvider('provideValidDigits')]
-     public function testValidCtypeDigit($text)
-     {
-         $this->assertTrue(ctype_digit($text));
-@@ -200,6 +208,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideInvalidDigit
-      */
-+    #[DataProvider('provideInvalidDigit')]
-     public function testInvalidCtypeDigit($text)
-     {
-         $this->assertFalse(ctype_digit($text));
-@@ -235,6 +244,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideValidGraphs
-      */
-+    #[DataProvider('provideValidGraphs')]
-     public function testValidCtypeGraph($text)
-     {
-         $this->assertTrue(ctype_graph($text));
-@@ -262,6 +272,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideInvalidGraph
-      */
-+    #[DataProvider('provideInvalidGraph')]
-     public function testInvalidCtypeGraph($text)
-     {
-         $this->assertFalse(ctype_graph($text));
-@@ -289,6 +300,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideValidLowers
-      */
-+    #[DataProvider('provideValidLowers')]
-     public function testValidCtypeLower($text)
-     {
-         $this->assertTrue(ctype_lower($text));
-@@ -306,6 +318,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideInvalidLower
-      */
-+    #[DataProvider('provideInvalidLower')]
-     public function testInvalidCtypeLower($text)
-     {
-         $this->assertFalse(ctype_lower($text));
-@@ -337,6 +350,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideValidPrints
-      */
-+    #[DataProvider('provideValidPrints')]
-     public function testValidCtypePrint($text)
-     {
-         $this->assertTrue(ctype_print($text));
-@@ -363,6 +377,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideInvalidPrint
-      */
-+    #[DataProvider('provideInvalidPrint')]
-     public function testInvalidCtypePrint($text)
-     {
-         $this->assertFalse(ctype_print($text));
-@@ -388,6 +403,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideValidPuncts
-      */
-+    #[DataProvider('provideValidPuncts')]
-     public function testValidCtypePunct($text)
-     {
-         $this->assertTrue(ctype_punct($text));
-@@ -405,6 +421,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideInvalidPunct
-      */
-+    #[DataProvider('provideInvalidPunct')]
-     public function testInvalidCtypePunct($text)
-     {
-         $this->assertFalse(ctype_punct($text));
-@@ -440,6 +457,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideValidSpaces
-      */
-+    #[DataProvider('provideValidSpaces')]
-     public function testValidCtypeSpace($text)
-     {
-         $this->assertTrue(ctype_space($text));
-@@ -460,6 +478,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideInvalidSpace
-      */
-+    #[DataProvider('provideInvalidSpace')]
-     public function testInvalidCtypeSpace($text)
-     {
-         $this->assertFalse(ctype_space($text));
-@@ -494,6 +513,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideValidUppers
-      */
-+    #[DataProvider('provideValidUppers')]
-     public function testValidCtypeUpper($text)
-     {
-         $this->assertTrue(ctype_upper($text));
-@@ -512,6 +532,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideInvalidUpper
-      */
-+    #[DataProvider('provideInvalidUpper')]
-     public function testInvalidCtypeUpper($text)
-     {
-         $this->assertFalse(ctype_upper($text));
-@@ -552,6 +573,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideValidXdigits
-      */
-+    #[DataProvider('provideValidXdigits')]
-     public function testValidCtypeXdigit($text)
-     {
-         $this->assertTrue(ctype_xdigit($text));
-@@ -578,6 +600,7 @@ class CtypeTest extends TestCase
-     /**
-      * @dataProvider provideInvalidXdigit
-      */
-+    #[DataProvider('provideInvalidXdigit')]
-     public function testInvalidCtypeXdigit($text)
-     {
-         $this->assertFalse(ctype_xdigit($text));
-diff --git a/tests/Iconv/IconvTest.php b/tests/Iconv/IconvTest.php
-index 5a70637..a08156d 100644
---- a/tests/Iconv/IconvTest.php
-+++ b/tests/Iconv/IconvTest.php
-@@ -11,6 +11,7 @@
- 
- namespace Symfony\Polyfill\Tests\Iconv;
- 
-+use PHPUnit\Framework\Attributes\RequiresPhp;
- use PHPUnit\Framework\Attributes\RequiresPhpunit;
- use PHPUnit\Framework\TestCase;
- use Symfony\Polyfill\Iconv\Iconv as p;
-@@ -76,6 +77,7 @@ class IconvTest extends TestCase
-      *
-      * @requires PHP < 8
-      */
-+    #[RequiresPhp('< 8')]
-     public function testIconvSubstrReturnsFalsePrePHP8()
-     {
-         $c = 'déjà';
-@@ -89,6 +91,7 @@ class IconvTest extends TestCase
-      *
-      * @requires PHP 8
-      */
-+    #[RequiresPhp('< 8')]
-     public function testIconvSubstrReturnsEmptyPostPHP8()
-     {
-         $c = 'déjà';
-diff --git a/tests/Intl/Grapheme/GraphemeTest.php b/tests/Intl/Grapheme/GraphemeTest.php
-index 7bd7724..899de02 100644
---- a/tests/Intl/Grapheme/GraphemeTest.php
-+++ b/tests/Intl/Grapheme/GraphemeTest.php
-@@ -12,6 +12,7 @@
- namespace Symfony\Polyfill\Tests\Intl\Grapheme;
- 
- use PHPUnit\Framework\TestCase;
-+use PHPUnit\Framework\Attributes\RequiresPhp;
- use Symfony\Polyfill\Intl\Grapheme\Grapheme as p;
- 
- /**
-@@ -128,6 +129,7 @@ class GraphemeTest extends TestCase
-      *
-      * @requires PHP < 8
-      */
-+    #[RequiresPhp('< 8')]
-     public function testGraphemeSubstrReturnsFalsePrePHP8()
-     {
-         $c = 'déjà';
-@@ -142,6 +144,7 @@ class GraphemeTest extends TestCase
-      *
-      * @requires PHP 8
-      */
-+    #[RequiresPhp('< 8')]
-     public function testGraphemeSubstrReturnsEmptyPostPHP8()
-     {
-         $c = 'déjà';
-diff --git a/tests/Intl/Idn/IdnTest.php b/tests/Intl/Idn/IdnTest.php
-index 1df8843..cc4e9d7 100644
---- a/tests/Intl/Idn/IdnTest.php
-+++ b/tests/Intl/Idn/IdnTest.php
-@@ -11,6 +11,8 @@
- 
- namespace Symfony\Polyfill\Tests\Intl\Idn;
- 
-+use PHPUnit\Framework\Attributes\DataProvider;
-+use PHPUnit\Framework\Attributes\RequiresPhp;
- use PHPUnit\Framework\TestCase;
- use Symfony\Polyfill\Intl\Idn\Idn;
- 
-@@ -120,6 +122,7 @@ class IdnTest extends TestCase
-      * @param string                          $toAsciiT
-      * @param array<int, int|array<int, int>> $toAsciiTStatus
-      */
-+    #[DataProvider('getData')]
-     public function testToUnicode($source, $toUnicode, $toUnicodeStatus, $toAsciiN, $toAsciiNStatus, $toAsciiT, $toAsciiTStatus)
-     {
-         $options = \IDNA_CHECK_BIDI | \IDNA_CHECK_CONTEXTJ | \IDNA_USE_STD3_RULES | \IDNA_NONTRANSITIONAL_TO_UNICODE;
-@@ -148,6 +151,7 @@ class IdnTest extends TestCase
-      * @param string                          $toAsciiT
-      * @param array<int, int|array<int, int>> $toAsciiTStatus
-      */
-+    #[DataProvider('getData')]
-     public function testToAsciiNonTransitional($source, $toUnicode, $toUnicodeStatus, $toAsciiN, $toAsciiNStatus, $toAsciiT, $toAsciiTStatus)
-     {
-         $options = \IDNA_CHECK_BIDI | \IDNA_CHECK_CONTEXTJ | \IDNA_USE_STD3_RULES | \IDNA_NONTRANSITIONAL_TO_ASCII;
-@@ -176,6 +180,7 @@ class IdnTest extends TestCase
-      * @param string                          $toAsciiT
-      * @param array<int, int|array<int, int>> $toAsciiTStatus
-      */
-+    #[DataProvider('getData')]
-     public function testToAsciiTransitional($source, $toUnicode, $toUnicodeStatus, $toAsciiN, $toAsciiNStatus, $toAsciiT, $toAsciiTStatus)
-     {
-         $options = \IDNA_CHECK_BIDI | \IDNA_CHECK_CONTEXTJ | \IDNA_USE_STD3_RULES;
-@@ -200,6 +205,8 @@ class IdnTest extends TestCase
-      *
-      * @dataProvider domainNamesProvider
-      */
-+    #[RequiresPhp('< 8')]
-+    #[DataProvider('domainNamesProvider')]
-     public function testEncode2003($decoded, $encoded)
-     {
-         $result = @idn_to_ascii($decoded, \IDNA_DEFAULT, \INTL_IDNA_VARIANT_2003);
-@@ -209,6 +216,7 @@ class IdnTest extends TestCase
-     /**
-      * @dataProvider invalidUtf8DomainNamesProvider
-      */
-+    #[DataProvider('invalidUtf8DomainNamesProvider')]
-     public function testEncodeInvalid($decoded)
-     {
-         $result = idn_to_ascii($decoded, \IDNA_DEFAULT, \INTL_IDNA_VARIANT_UTS46);
-@@ -222,6 +230,8 @@ class IdnTest extends TestCase
-      *
-      * @dataProvider domainNamesProvider
-      */
-+    #[RequiresPhp('< 8')]
-+    #[DataProvider('domainNamesProvider')]
-     public function testDecode2003($decoded, $encoded)
-     {
-         $result = @idn_to_utf8($encoded, \IDNA_DEFAULT, \INTL_IDNA_VARIANT_2003);
-@@ -231,6 +241,7 @@ class IdnTest extends TestCase
-     /**
-      * @dataProvider domainNamesProvider
-      */
-+    #[DataProvider('domainNamesProvider')]
-     public function testEncodeUTS46($decoded, $encoded)
-     {
-         $result = idn_to_ascii($decoded, \IDNA_DEFAULT, \INTL_IDNA_VARIANT_UTS46);
-@@ -240,6 +251,7 @@ class IdnTest extends TestCase
-     /**
-      * @dataProvider domainNamesProvider
-      */
-+    #[DataProvider('domainNamesProvider')]
-     public function testDecodeUTS46($decoded, $encoded)
-     {
-         $result = idn_to_utf8($encoded, \IDNA_DEFAULT, \INTL_IDNA_VARIANT_UTS46);
-@@ -249,6 +261,7 @@ class IdnTest extends TestCase
-     /**
-      * @dataProvider domainNamesUppercaseUTS46Provider
-      */
-+    #[DataProvider('domainNamesUppercaseUTS46Provider')]
-     public function testUppercaseUTS46($decoded, $ascii, $encoded)
-     {
-         $info = 123;
-@@ -281,6 +294,8 @@ class IdnTest extends TestCase
-      *
-      * @dataProvider domainNamesProvider
-      */
-+    #[RequiresPhp('< 8')]
-+    #[DataProvider('domainNamesProvider')]
-     public function testEncodePhp53($decoded, $encoded)
-     {
-         $result = @Idn::idn_to_ascii($decoded, \IDNA_DEFAULT, \INTL_IDNA_VARIANT_2003);
-@@ -295,6 +310,7 @@ class IdnTest extends TestCase
-      *
-      * @dataProvider captialSharpSProvider
-      */
-+    #[DataProvider('captialSharpSProvider')]
-     public function testCapitalSharpSProcessing($input, $expected, $flags)
-     {
-         idn_to_utf8($input, $flags, \INTL_IDNA_VARIANT_UTS46, $info);
-diff --git a/tests/Intl/MessageFormatter/MessageFormatterTest.php b/tests/Intl/MessageFormatter/MessageFormatterTest.php
-index b14109f..ec9a9cf 100644
---- a/tests/Intl/MessageFormatter/MessageFormatterTest.php
-+++ b/tests/Intl/MessageFormatter/MessageFormatterTest.php
-@@ -37,6 +37,7 @@
- 
- namespace Symfony\Polyfill\Tests\Intl\MessageFormatter;
- 
-+use PHPUnit\Framework\Attributes\DataProvider;
- use PHPUnit\Framework\TestCase;
- use Symfony\Polyfill\Intl\MessageFormatter\MessageFormatter;
- 
-@@ -50,6 +51,7 @@ class MessageFormatterTest extends TestCase
-     /**
-      * @dataProvider patterns
-      */
-+    #[DataProvider('patterns')]
-     public function testNamedArguments($pattern, $expected, array $args)
-     {
-         $formatter = new MessageFormatter('en_US', $pattern);
-diff --git a/tests/Mbstring/MbstringTest.php b/tests/Mbstring/MbstringTest.php
-index 0e2a6cd..abb1fb7 100644
---- a/tests/Mbstring/MbstringTest.php
-+++ b/tests/Mbstring/MbstringTest.php
-@@ -11,6 +11,8 @@
- 
- namespace Symfony\Polyfill\Tests\Mbstring;
- 
-+use PHPUnit\Framework\Attributes\DataProvider;
-+use PHPUnit\Framework\Attributes\RequiresPhp;
- use PHPUnit\Framework\TestCase;
- use Symfony\Polyfill\Mbstring\Mbstring as p;
- 
-@@ -127,6 +129,7 @@ class MbstringTest extends TestCase
-      *
-      * @requires PHP < 8
-      */
-+    #[RequiresPhp('< 8')]
-     public function testDecodeNumericEntityWithInvalidTypes()
-     {
-         $convmap = [0x80, 0x10FFFF, 0x1, 0x1FFFFF];
-@@ -205,6 +208,7 @@ class MbstringTest extends TestCase
-      *
-      * @requires PHP < 8
-      */
-+    #[RequiresPhp('< 8')]
-     public function testEncodeNumericEntityWithInvalidTypes()
-     {
-         $convmap = [0x80, 0x10FFFF, 0x1, 0x1FFFFF];
-@@ -264,6 +268,7 @@ class MbstringTest extends TestCase
-      *
-      * @requires PHP 7.3
-      */
-+    #[RequiresPhp('7.3')]
-     public function testStrCase()
-     {
-         $this->assertSame('i̇', mb_strtolower('İ'));
-@@ -379,6 +384,7 @@ class MbstringTest extends TestCase
-      *
-      * @requires PHP < 8
-      */
-+    #[RequiresPhp('< 8')]
-     public function testStrposEmptyDelimiter()
-     {
-         mb_strpos('abc', 'a');
-@@ -624,6 +630,9 @@ class MbstringTest extends TestCase
-      * @dataProvider paddingEmojiProvider
-      * @dataProvider paddingEncodingProvider
-      */
-+    #[DataProvider('paddingStringProvider')]
-+    #[DataProvider('paddingEmojiProvider')]
-+    #[DataProvider('paddingEncodingProvider')]
-     public function testMbStrPad(string $expectedResult, string $string, int $length, string $padString, int $padType, ?string $encoding = null)
-     {
-         if ('UTF-32' === $encoding && \PHP_VERSION_ID < 73000) {
-@@ -638,6 +647,7 @@ class MbstringTest extends TestCase
-      *
-      * @dataProvider mbStrPadInvalidArgumentsProvider
-      */
-+    #[DataProvider('mbStrPadInvalidArgumentsProvider')]
-     public function testMbStrPadInvalidArguments(string $expectedError, string $string, int $length, string $padString, int $padType, ?string $encoding = null)
-     {
-         $this->expectException(\ValueError::class);
-@@ -649,6 +659,7 @@ class MbstringTest extends TestCase
-     /**
-      * @dataProvider ucFirstDataProvider
-      */
-+    #[DataProvider('ucFirstDataProvider')]
-     public function testMbUcFirst(string $string, string $expected)
-     {
-         $this->assertSame($expected, mb_ucfirst($string));
-@@ -657,6 +668,7 @@ class MbstringTest extends TestCase
-     /**
-      * @dataProvider lcFirstDataProvider
-      */
-+    #[DataProvider('lcFirstDataProvider')]
-     public function testMbLcFirst(string $string, string $expected)
-     {
-         $this->assertSame($expected, mb_lcfirst($string));
-@@ -776,6 +788,7 @@ class MbstringTest extends TestCase
-      *
-      * @dataProvider mbTrimProvider
-      */
-+    #[DataProvider('mbTrimProvider')]
-     public function testMbTrim(string $expected, string $string, ?string $characters = null, ?string $encoding = null)
-     {
-         $this->assertSame($expected, mb_trim($string, $characters, $encoding));
-@@ -786,6 +799,7 @@ class MbstringTest extends TestCase
-      *
-      * @dataProvider mbLTrimProvider
-      */
-+    #[DataProvider('mbLTrimProvider')]
-     public function testMbLTrim(string $expected, string $string, ?string $characters = null, ?string $encoding = null)
-     {
-         $this->assertSame($expected, mb_ltrim($string, $characters, $encoding));
-@@ -796,6 +810,7 @@ class MbstringTest extends TestCase
-      *
-      * @dataProvider mbRTrimProvider
-      */
-+    #[DataProvider('mbRTrimProvider')]
-     public function testMbRTrim(string $expected, string $string, ?string $characters = null, ?string $encoding = null)
-     {
-         $this->assertSame($expected, mb_rtrim($string, $characters, $encoding));
-diff --git a/tests/Php73/Php73Test.php b/tests/Php73/Php73Test.php
-index fb20aad..0dae957 100644
---- a/tests/Php73/Php73Test.php
-+++ b/tests/Php73/Php73Test.php
-@@ -11,6 +11,7 @@
- 
- namespace Symfony\Polyfill\Tests\Php73;
- 
-+use PHPUnit\Framework\Attributes\DataProvider;
- use PHPUnit\Framework\TestCase;
- 
- /**
-@@ -96,6 +97,7 @@ class Php73Test extends TestCase
-     /**
-      * @dataProvider arrayKeyFirstDataProvider
-      */
-+    #[DataProvider('arrayKeyFirstDataProvider')]
-     public function testArrayKeyFirst($expected, array $array)
-     {
-         $this->assertSame($expected, array_key_first($array));
-@@ -114,6 +116,7 @@ class Php73Test extends TestCase
-     /**
-      * @dataProvider arrayKeyLastDataProvider
-      */
-+    #[DataProvider('arrayKeyLastDataProvider')]
-     public function testArrayLastFirst($expected, array $array)
-     {
-         $this->assertSame($expected, array_key_last($array));
-diff --git a/tests/Php74/Php74Test.php b/tests/Php74/Php74Test.php
-index 8a41234..28a1f16 100644
---- a/tests/Php74/Php74Test.php
-+++ b/tests/Php74/Php74Test.php
-@@ -11,6 +11,7 @@
- 
- namespace Symfony\Polyfill\Tests\Php74;
- 
-+use PHPUnit\Framework\Attributes\RequiresPhp;
- use PHPUnit\Framework\TestCase;
- 
- /**
-@@ -56,6 +57,7 @@ class Php74Test extends TestCase
-      *
-      * @requires PHP < 8
-      */
-+    #[RequiresPhp('< 8')]
-     public function testGetMangledObjectVarsOnNonObject()
-     {
-         $this->assertNull(@get_mangled_object_vars(0));
-@@ -104,6 +106,7 @@ class Php74Test extends TestCase
-      *
-      * @requires PHP < 8
-      */
-+    #[RequiresPhp('< 8')]
-     public function testStrSplitWithInvalidValues()
-     {
-         $this->assertSame([], mb_str_split('', 1, 'UTF-8'));
-diff --git a/tests/Php80/Php80Test.php b/tests/Php80/Php80Test.php
-index daa59c6..853e817 100644
---- a/tests/Php80/Php80Test.php
-+++ b/tests/Php80/Php80Test.php
-@@ -11,6 +11,7 @@
- 
- namespace Symfony\Polyfill\Tests\Php80;
- 
-+use PHPUnit\Framework\Attributes\DataProvider;
- use PHPUnit\Framework\TestCase;
- 
- /**
-@@ -26,6 +27,7 @@ class Php80Test extends TestCase
-      *
-      * @dataProvider fdivProvider
-      */
-+    #[DataProvider('fdivProvider')]
-     public function testFdiv($expected, $divident, $divisor)
-     {
-         try {
-@@ -43,6 +45,7 @@ class Php80Test extends TestCase
-      *
-      * @dataProvider nanFdivProvider
-      */
-+    #[DataProvider('nanFdivProvider')]
-     public function testFdivNan($divident, $divisor)
-     {
-         try {
-@@ -57,6 +60,7 @@ class Php80Test extends TestCase
-      *
-      * @dataProvider invalidFloatProvider
-      */
-+    #[DataProvider('invalidFloatProvider')]
-     public function testFdivTypeError($divident, $divisor)
-     {
-         $this->expectException('TypeError');
-@@ -216,6 +220,7 @@ class Php80Test extends TestCase
-      *
-      * @dataProvider invalidResourceProvider
-      */
-+    #[DataProvider('invalidResourceProvider')]
-     public function testGetResourceWithInvalidValue($value)
-     {
-         $this->expectException('TypeError');
-diff --git a/tests/Php82/Php82Test.php b/tests/Php82/Php82Test.php
-index 4a46524..a507f74 100644
---- a/tests/Php82/Php82Test.php
-+++ b/tests/Php82/Php82Test.php
-@@ -11,6 +11,7 @@
- 
- namespace Symfony\Polyfill\Tests\Php82;
- 
-+use PHPUnit\Framework\Attributes\DataProvider;
- use PHPUnit\Framework\TestCase;
- 
- class Php82Test extends TestCase
-@@ -21,6 +22,8 @@ class Php82Test extends TestCase
-      *
-      * @requires extension odbc
-      */
-+    #[DataProvider('provideConnectionStringValuesFromUpstream')]
-+    #[DataProvider('provideMoreConnectionStringValues')]
-     public function testConnectionStringIsQuoted(string $value, bool $isQuoted)
-     {
-         self::assertSame($isQuoted, odbc_connection_string_is_quoted($value));
-@@ -32,6 +35,8 @@ class Php82Test extends TestCase
-      *
-      * @requires extension odbc
-      */
-+    #[DataProvider('provideConnectionStringValuesFromUpstream')]
-+    #[DataProvider('provideMoreConnectionStringValues')]
-     public function testConnectionStringShouldQuote(string $value, bool $isQuoted, bool $shouldQuote)
-     {
-         self::assertSame($shouldQuote, odbc_connection_string_should_quote($value));
-@@ -43,6 +48,8 @@ class Php82Test extends TestCase
-      *
-      * @requires extension odbc
-      */
-+    #[DataProvider('provideConnectionStringValuesFromUpstream')]
-+    #[DataProvider('provideMoreConnectionStringValues')]
-     public function testConnectionStringQuote(string $value, bool $isQuoted, bool $shouldQuote, string $quoted)
-     {
-         self::assertSame($quoted, odbc_connection_string_quote($value));
-diff --git a/tests/Php82/RandomSecureEngineTest.php b/tests/Php82/RandomSecureEngineTest.php
-index aab4220..429ea43 100644
---- a/tests/Php82/RandomSecureEngineTest.php
-+++ b/tests/Php82/RandomSecureEngineTest.php
-@@ -11,6 +11,7 @@
- 
- namespace Symfony\Polyfill\Tests\Php82;
- 
-+use PHPUnit\Framework\Attributes\DataProvider;
- use PHPUnit\Framework\TestCase;
- use Symfony\Polyfill\Php82\Random\Engine\Secure as SecureEnginePolyfill;
- 
-@@ -28,6 +29,7 @@ class RandomSecureEngineTest extends TestCase
-     /**
-      * @dataProvider secureEngineProvider
-      */
-+    #[DataProvider('secureEngineProvider')]
-     public function testGenerateLength($v)
-     {
-         $this->assertSame(\PHP_INT_SIZE, \strlen($v->generate()));
-@@ -36,6 +38,7 @@ class RandomSecureEngineTest extends TestCase
-     /**
-      * @dataProvider secureEngineProvider
-      */
-+    #[DataProvider('secureEngineProvider')]
-     public function testCloneIsNotAllowed($v)
-     {
-         $this->expectException(\Error::class);
-@@ -47,6 +50,7 @@ class RandomSecureEngineTest extends TestCase
-     /**
-      * @dataProvider secureEngineProvider
-      */
-+    #[DataProvider('secureEngineProvider')]
-     public function testSerializeIsNotAllowed($v)
-     {
-         $this->expectException(\Exception::class);
-@@ -58,6 +62,7 @@ class RandomSecureEngineTest extends TestCase
-     /**
-      * @dataProvider secureEngineProvider
-      */
-+    #[DataProvider('secureEngineProvider')]
-     public function testUnserializeIsNotAllowed($v)
-     {
-         $this->expectException(\Exception::class);
-diff --git a/tests/Php82/SensitiveParameterValueTest.php b/tests/Php82/SensitiveParameterValueTest.php
-index 49586d0..14f80ee 100644
---- a/tests/Php82/SensitiveParameterValueTest.php
-+++ b/tests/Php82/SensitiveParameterValueTest.php
-@@ -11,6 +11,7 @@
- 
- namespace Symfony\Polyfill\Tests\Php82;
- 
-+use PHPUnit\Framework\Attributes\DataProvider;
- use PHPUnit\Framework\TestCase;
- use Symfony\Polyfill\Php82\SensitiveParameterValue as SensitiveParameterValuePolyfill;
- 
-@@ -28,6 +29,7 @@ class SensitiveParameterValueTest extends TestCase
-     /**
-      * @dataProvider sensitiveParameterValueProvider
-      */
-+    #[DataProvider('sensitiveParameterValueProvider')]
-     public function testGetValue($v)
-     {
-         $this->assertSame('secret', $v->getValue());
-@@ -36,6 +38,7 @@ class SensitiveParameterValueTest extends TestCase
-     /**
-      * @dataProvider sensitiveParameterValueProvider
-      */
-+    #[DataProvider('sensitiveParameterValueProvider')]
-     public function testSerializeIsNotAllowed($v)
-     {
-         $this->expectException(\Exception::class);
-@@ -47,6 +50,7 @@ class SensitiveParameterValueTest extends TestCase
-     /**
-      * @dataProvider sensitiveParameterValueProvider
-      */
-+    #[DataProvider('sensitiveParameterValueProvider')]
-     public function testVarDumpDoesNotLeak($v)
-     {
-         ob_start();
-@@ -59,6 +63,7 @@ class SensitiveParameterValueTest extends TestCase
-     /**
-      * @dataProvider sensitiveParameterValueProvider
-      */
-+    #[DataProvider('sensitiveParameterValueProvider')]
-     public function testDebugZvalDumpDoesNotLeak($v)
-     {
-         ob_start();
-@@ -71,6 +76,7 @@ class SensitiveParameterValueTest extends TestCase
-     /**
-      * @dataProvider sensitiveParameterValueProvider
-      */
-+    #[DataProvider('sensitiveParameterValueProvider')]
-     public function testClone($v)
-     {
-         $clone = clone $v;
-diff --git a/tests/Php83/Php83Test.php b/tests/Php83/Php83Test.php
-index fa4dff4..565a35e 100644
---- a/tests/Php83/Php83Test.php
-+++ b/tests/Php83/Php83Test.php
-@@ -11,6 +11,7 @@
- 
- namespace Symfony\Polyfill\Tests\Php83;
- 
-+use PHPUnit\Framework\Attributes\DataProvider;
- use PHPUnit\Framework\TestCase;
- 
- class Php83Test extends TestCase
-@@ -20,6 +21,7 @@ class Php83Test extends TestCase
-      *
-      * @dataProvider jsonDataProvider
-      */
-+    #[DataProvider('jsonDataProvider')]
-     public function testJsonValidate(bool $valid, string $json, string $errorMessage = 'No error', int $depth = 512, int $options = 0)
-     {
-         $this->assertSame($valid, json_validate($json, $depth, $options));
-@@ -33,6 +35,9 @@ class Php83Test extends TestCase
-      * @dataProvider paddingEmojiProvider
-      * @dataProvider paddingEncodingProvider
-      */
-+    #[DataProvider('paddingStringProvider')]
-+    #[DataProvider('paddingEmojiProvider')]
-+    #[DataProvider('paddingEncodingProvider')]
-     public function testMbStrPad(string $expectedResult, string $string, int $length, string $padString, int $padType, ?string $encoding = null)
-     {
-         $this->assertSame($expectedResult, mb_convert_encoding(mb_str_pad($string, $length, $padString, $padType, $encoding), 'UTF-8', $encoding ?? mb_internal_encoding()));
-@@ -43,6 +48,7 @@ class Php83Test extends TestCase
-      *
-      * @dataProvider mbStrPadInvalidArgumentsProvider
-      */
-+    #[DataProvider('mbStrPadInvalidArgumentsProvider')]
-     public function testMbStrPadInvalidArguments(string $expectedError, string $string, int $length, string $padString, int $padType, ?string $encoding = null)
-     {
-         $this->expectException(\ValueError::class);
-@@ -155,6 +161,7 @@ class Php83Test extends TestCase
-      *
-      * @dataProvider jsonInvalidOptionsProvider
-      */
-+    #[DataProvider('jsonInvalidOptionsProvider')]
-     public function testJsonValidateInvalidOptionsProvided(int $depth, int $flags, string $expectedError)
-     {
-         $this->expectException(\ValueError::class);
-@@ -205,6 +212,7 @@ class Php83Test extends TestCase
-      *
-      * @dataProvider strIncrementProvider
-      */
-+    #[DataProvider('strIncrementProvider')]
-     public function testStrIncrement(string $result, string $string)
-     {
-         $this->assertSame($result, str_increment($string));
-@@ -215,6 +223,7 @@ class Php83Test extends TestCase
-      *
-      * @dataProvider strDecrementProvider
-      */
-+    #[DataProvider('strDecrementProvider')]
-     public function testStrDecrement(string $result, string $string)
-     {
-         $this->assertSame($result, str_decrement($string));
-@@ -267,6 +276,7 @@ class Php83Test extends TestCase
-      *
-      * @dataProvider strInvalidIncrementProvider
-      */
-+    #[DataProvider('strInvalidIncrementProvider')]
-     public function testInvalidStrIncrement(string $errorMessage, string $string)
-     {
-         $this->expectException(\ValueError::class);
-@@ -297,6 +307,7 @@ class Php83Test extends TestCase
-      *
-      * @dataProvider strInvalidDecrementProvider
-      */
-+    #[DataProvider('strInvalidDecrementProvider')]
-     public function testInvalidStrDecrement(string $errorMessage, string $string)
-     {
-         $this->expectException(\ValueError::class);
-diff --git a/tests/Php84/Php84Test.php b/tests/Php84/Php84Test.php
-index 9d573a1..8724bee 100644
---- a/tests/Php84/Php84Test.php
-+++ b/tests/Php84/Php84Test.php
-@@ -19,6 +19,7 @@ class Php84Test extends TestCase
-     /**
-      * @dataProvider ucFirstDataProvider
-      */
-+    #[DataProvider('ucFirstDataProvider')]
-     public function testMbUcFirst(string $string, string $expected)
-     {
-         $this->assertSame($expected, mb_ucfirst($string));
-@@ -27,6 +28,7 @@ class Php84Test extends TestCase
-     /**
-      * @dataProvider lcFirstDataProvider
-      */
-+    #[DataProvider('lcFirstDataProvider')]
-     public function testMbLcFirst(string $string, string $expected)
-     {
-         $this->assertSame($expected, mb_lcfirst($string));
-@@ -35,6 +37,7 @@ class Php84Test extends TestCase
-     /**
-      * @dataProvider arrayFindDataProvider
-      */
-+    #[DataProvider('arrayFindDataProvider')]
-     public function testArrayFind(array $array, callable $callback, $expected)
-     {
-         $this->assertSame($expected, array_find($array, $callback));
-@@ -43,6 +46,7 @@ class Php84Test extends TestCase
-     /**
-      * @dataProvider arrayFindKeyDataProvider
-      */
-+    #[DataProvider('arrayFindKeyDataProvider')]
-     public function testArrayFindKey(array $array, callable $callback, $expected)
-     {
-         $this->assertSame($expected, array_find_key($array, $callback));
-@@ -51,6 +55,7 @@ class Php84Test extends TestCase
-     /**
-      * @dataProvider arrayAnyDataProvider
-      */
-+    #[DataProvider('arrayAnyDataProvider')]
-     public function testArrayAny(array $array, callable $callback, bool $expected)
-     {
-         $this->assertSame($expected, array_any($array, $callback));
-@@ -59,6 +64,7 @@ class Php84Test extends TestCase
-     /**
-      * @dataProvider arrayAllDataProvider
-      */
-+    #[DataProvider('arrayAllDataProvider')]
-     public function testArrayAll(array $array, callable $callback, bool $expected)
-     {
-         $this->assertSame($expected, array_all($array, $callback));
-@@ -202,6 +208,7 @@ class Php84Test extends TestCase
-      *
-      * @dataProvider mbTrimProvider
-      */
-+    #[DataProvider('mbTrimProvider')]
-     public function testMbTrim(string $expected, string $string, ?string $characters = null, ?string $encoding = null)
-     {
-         $this->assertSame($expected, mb_trim($string, $characters, $encoding));
-@@ -212,6 +219,7 @@ class Php84Test extends TestCase
-      *
-      * @dataProvider mbLTrimProvider
-      */
-+    #[DataProvider('mbLTrimProvider')]
-     public function testMbLTrim(string $expected, string $string, ?string $characters = null, ?string $encoding = null)
-     {
-         $this->assertSame($expected, mb_ltrim($string, $characters, $encoding));
-@@ -222,6 +230,7 @@ class Php84Test extends TestCase
-      *
-      * @dataProvider mbRTrimProvider
-      */
-+    #[DataProvider('mbRTrimProvider')]
-     public function testMbRTrim(string $expected, string $string, ?string $characters = null, ?string $encoding = null)
-     {
-         $this->assertSame($expected, mb_rtrim($string, $characters, $encoding));
-diff --git a/tests/Uuid/UuidTest.php b/tests/Uuid/UuidTest.php
-index c84bef9..ed085a0 100644
---- a/tests/Uuid/UuidTest.php
-+++ b/tests/Uuid/UuidTest.php
-@@ -11,6 +11,7 @@
- 
- namespace Symfony\Polyfill\Tests\Uuid;
- 
-+use PHPUnit\Framework\Attributes\DataProvider;
- use PHPUnit\Framework\TestCase;
- use Symfony\Polyfill\Uuid\Uuid;
- 
-@@ -85,6 +86,7 @@ class UuidTest extends TestCase
-     }
- 
-     /** @dataProvider provideCreateNoOverlapTests */
-+    #[DataProvider('provideCreateNoOverlapTests')]
-     public function testCreateNoOverlap(int $type)
-     {
-         $uuids = [];
-@@ -111,6 +113,7 @@ class UuidTest extends TestCase
-     }
- 
-     /** @dataProvider provideIsValidTest */
-+    #[DataProvider('provideIsValidTest')]
-     public function testIsValid(bool $expected, string $uuid)
-     {
-         $this->assertSame($expected, uuid_is_valid($uuid));
-@@ -126,6 +129,7 @@ class UuidTest extends TestCase
-     }
- 
-     /** @dataProvider provideCompareTest */
-+    #[DataProvider('provideCompareTest')]
-     public function testCompare(int $expected, string $uuid1, string $uuid2)
-     {
-         $result = @uuid_compare($uuid1, $uuid2);
-@@ -168,6 +172,7 @@ class UuidTest extends TestCase
-     }
- 
-     /** @dataProvider provideIsNullTest */
-+    #[DataProvider('provideIsNullTest')]
-     public function testIsNull(bool $expected, string $uuid)
-     {
-         $this->assertSame($expected, @uuid_is_null($uuid));
-@@ -194,6 +199,7 @@ class UuidTest extends TestCase
-     }
- 
-     /** @dataProvider provideTypeTest */
-+    #[DataProvider('provideTypeTest')]
-     public function testType(int $expected, string $uuid)
-     {
-         $this->assertSame($expected, @uuid_type($uuid));
-@@ -219,6 +225,7 @@ class UuidTest extends TestCase
-     }
- 
-     /** @dataProvider provideVariantTest */
-+    #[DataProvider('provideVariantTest')]
-     public function testVariant(int $expected, string $uuid)
-     {
-         $this->assertSame($expected, @uuid_variant($uuid));
-@@ -243,6 +250,7 @@ class UuidTest extends TestCase
-     }
- 
-     /** @dataProvider provideTimeTest */
-+    #[DataProvider('provideTimeTest')]
-     public function testTime(int $expected, string $uuid)
-     {
-         $this->assertSame($expected, @uuid_time($uuid));
-@@ -260,6 +268,7 @@ class UuidTest extends TestCase
-     /**
-      * @dataProvider provideInvalidTimeTest
-      */
-+    #[DataProvider('provideInvalidTimeTest')]
-     public function testTimeWithInvalidUuid(string $uuid)
-     {
-         if (80000 <= \PHP_VERSION_ID) {
-@@ -279,6 +288,7 @@ class UuidTest extends TestCase
-     }
- 
-     /** @dataProvider provideMacTest */
-+    #[DataProvider('provideMacTest')]
-     public function testMac(string $expected, string $uuid)
-     {
-         $this->assertSame($expected, @uuid_mac($uuid));
-@@ -296,6 +306,7 @@ class UuidTest extends TestCase
-     /**
-      * @dataProvider provideInvalidMacTest
-      */
-+    #[DataProvider('provideInvalidMacTest')]
-     public function testMacWithInvalidUuid(string $uuid)
-     {
-         if (80000 <= \PHP_VERSION_ID) {
-@@ -316,6 +327,7 @@ class UuidTest extends TestCase
-     }
- 
-     /** @dataProvider provideParseTest */
-+    #[DataProvider('provideParseTest')]
-     public function testParse(string $expected, string $uuid)
-     {
-         $out = bin2hex(@uuid_parse($uuid));
-@@ -343,6 +355,7 @@ class UuidTest extends TestCase
-     }
- 
-     /** @dataProvider provideUnparseTest */
-+    #[DataProvider('provideUnparseTest')]
-     public function testUnparse(string $expected, string $uuid)
-     {
-         $this->assertSame($expected, @uuid_unparse($uuid));
-@@ -359,6 +372,7 @@ class UuidTest extends TestCase
-     /**
-      * @dataProvider provideInvalidUnparseTest
-      */
-+    #[DataProvider('provideInvalidUnparseTest')]
-     public function testUnparseWithInvalidUuid(string $uuid)
-     {
-         if (80000 <= \PHP_VERSION_ID) {
diff -pruN 1.31.0-5/debian/patches/series 1.33.0-2/debian/patches/series
--- 1.31.0-5/debian/patches/series	2025-02-24 20:03:32.000000000 +0000
+++ 1.33.0-2/debian/patches/series	2025-08-24 21:29:49.000000000 +0000
@@ -1,7 +1,5 @@
 0001-Adapt-to-installed-path.patch
-0002-Workaround-ICU-new-format.patch
-0003-Drop-data-tests-failing-with-PHP-8.2.patch
-0004-Drop-some-tests-on-32-bit-architectures.patch
-0005-add-Caribbean-guilder-to-the-list-of-currencies.patch
-0006-Drop-test-failing-with-PHPUnit-11.patch
-0007-Modernize-PHPUnit-syntax.patch
+0002-Rename-Abstract-Test-into-Abstract-TestCase.patch
+0003-Modernize-PHPUnit-syntax.patch
+0004-Comment-away-currently-failing-data-on-Debian.patch
+0005-Drop-tests-failing-on-32-bit-architectures.patch
diff -pruN 1.31.0-5/debian/php-symfony-polyfill-php85.autoload.php.tpl 1.33.0-2/debian/php-symfony-polyfill-php85.autoload.php.tpl
--- 1.31.0-5/debian/php-symfony-polyfill-php85.autoload.php.tpl	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/debian/php-symfony-polyfill-php85.autoload.php.tpl	2025-05-04 12:06:57.000000000 +0000
@@ -0,0 +1,29 @@
+<?php
+
+// Require
+
+// Suggest
+
+// @codingStandardsIgnoreFile
+// @codeCoverageIgnoreStart
+// this is an autogenerated file - do not edit
+spl_autoload_register(
+    function($class) {
+        static $classes = null;
+        if ($classes === null) {
+            $classes = array(
+                ___CLASSLIST___
+            );
+        }
+        $cn = strtolower($class);
+        if (isset($classes[$cn])) {
+            require ___BASEDIR___$classes[$cn];
+        }
+    },
+    ___EXCEPTION___,
+    ___PREPEND___
+);
+// @codeCoverageIgnoreEnd
+
+// Files
+require_once __DIR__.'/bootstrap.php';
diff -pruN 1.31.0-5/debian/pkg-php-tools-autoloaders 1.33.0-2/debian/pkg-php-tools-autoloaders
--- 1.31.0-5/debian/pkg-php-tools-autoloaders	2024-10-10 11:44:48.000000000 +0000
+++ 1.33.0-2/debian/pkg-php-tools-autoloaders	2025-05-04 12:06:57.000000000 +0000
@@ -7,7 +7,6 @@ symfony	polyfill-intl-idn		Symfony/Polyf
 symfony	polyfill-intl-messageformatter	Symfony/Polyfill/Intl/MessageFormatter/autoload.php
 symfony	polyfill-intl-normalizer	Symfony/Polyfill/Intl/Normalizer/autoload.php
 symfony	polyfill-mbstring		Symfony/Polyfill/Mbstring/autoload.php
-symfony	polyfill-php72			Symfony/Polyfill/Php72/autoload.php
 symfony	polyfill-php73			Symfony/Polyfill/Php73/autoload.php
 symfony	polyfill-php74			Symfony/Polyfill/Php74/autoload.php
 symfony	polyfill-php80			Symfony/Polyfill/Php80/autoload.php
@@ -15,5 +14,6 @@ symfony	polyfill-php81			Symfony/Polyfil
 symfony	polyfill-php82			Symfony/Polyfill/Php82/autoload.php
 symfony	polyfill-php83			Symfony/Polyfill/Php83/autoload.php
 symfony	polyfill-php84			Symfony/Polyfill/Php84/autoload.php
+symfony	polyfill-php85			Symfony/Polyfill/Php85/autoload.php
 symfony	polyfill-util			Symfony/Polyfill/Util/autoload.php
 symfony	polyfill-uuid			Symfony/Polyfill/Uuid/autoload.php
diff -pruN 1.31.0-5/debian/pkg-php-tools-overrides 1.33.0-2/debian/pkg-php-tools-overrides
--- 1.31.0-5/debian/pkg-php-tools-overrides	2024-10-10 11:44:48.000000000 +0000
+++ 1.33.0-2/debian/pkg-php-tools-overrides	2025-05-04 12:06:57.000000000 +0000
@@ -7,7 +7,6 @@ symfony		polyfill-intl-idn		php-symfony-
 symfony		polyfill-intl-messageformatted	php-symfony-polyfill-intl-messageformatted
 symfony		polyfill-intl-normalizer	php-symfony-polyfill-intl-normalizer
 symfony		polyfill-mbstring		php-symfony-polyfill-mbstring
-symfony		polyfill-php72		 	php-symfony-polyfill-php72
 symfony		polyfill-php73			php-symfony-polyfill-php73
 symfony		polyfill-php74			php-symfony-polyfill-php74
 symfony		polyfill-php80			php-symfony-polyfill-php80
@@ -15,3 +14,4 @@ symfony		polyfill-php81			php-symfony-po
 symfony		polyfill-php82			php-symfony-polyfill-php82
 symfony		polyfill-php83			php-symfony-polyfill-php83
 symfony		polyfill-php84			php-symfony-polyfill-php84
+symfony		polyfill-php85			php-symfony-polyfill-php85
diff -pruN 1.31.0-5/debian/rules 1.33.0-2/debian/rules
--- 1.31.0-5/debian/rules	2025-02-24 20:19:08.000000000 +0000
+++ 1.33.0-2/debian/rules	2025-05-04 13:47:13.000000000 +0000
@@ -46,7 +46,15 @@ execute_after_dh_auto_build:
 	mkdir --parent Symfony vendor
 	ln -s ../src Symfony/Polyfill
 	cp debian/autoload.php src
-	cp debian/autoload-tests.php vendor/autoload.php
+	mkdir --parents vendor mimic/bin mimic/share/php/data
+	phpabtpl \
+		--require-file ../Symfony/Polyfill/autoload.php \
+		--require symfony/var-dumper \
+		> debian/autoload.tests.php.tpl
+	phpab \
+		--output vendor/autoload.php \
+		--template debian/autoload.tests.php.tpl \
+		tests
 
 override_dh_auto_test:
 	phpunit
diff -pruN 1.31.0-5/debian/tests/control 1.33.0-2/debian/tests/control
--- 1.31.0-5/debian/tests/control	2025-02-24 20:03:50.000000000 +0000
+++ 1.33.0-2/debian/tests/control	2025-08-24 21:29:49.000000000 +0000
@@ -1,14 +1,17 @@
-Test-Command: mkdir -p vendor && cp debian/autoload-tests.php vendor/autoload.php && phpunit
+Test-Command: mkdir -p vendor && phpabtpl --require symfony/polyfill --require symfony/var-dumper > debian/autoload.tests.php.tpl && phpab --output vendor/autoload.php --template debian/autoload.tests.php.tpl tests && phpunit
 Restrictions: allow-stderr
 Depends: php-apcu,
+         php-bcmath,
          php-curl,
          php-intl,
          php-ldap,
          php-mbstring,
          php-mysql,
          php-odbc,
-         php-symfony-intl (>> 6.4.12),
-         php-symfony-var-dumper (>> 6.4.12),
+         php-symfony-intl,
+         php-symfony-var-dumper,
          php-uuid,
+         phpab,
          phpunit,
+         pkg-php-tools,
          @
diff -pruN 1.31.0-5/phpunit 1.33.0-2/phpunit
--- 1.31.0-5/phpunit	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/phpunit	2025-08-19 12:13:28.000000000 +0000
@@ -0,0 +1,13 @@
+#!/usr/bin/env php
+<?php
+
+if (!file_exists(__DIR__.'/vendor/symfony/phpunit-bridge/bin/simple-phpunit')) {
+    echo "Unable to find the `simple-phpunit` script in `vendor/symfony/phpunit-bridge/bin/`.\nPlease run `composer update` before running this command.\n";
+    exit(1);
+}
+if (!getenv('SYMFONY_PHPUNIT_VERSION')) {
+    putenv('SYMFONY_PHPUNIT_VERSION=8.5');
+}
+
+putenv('SYMFONY_PHPUNIT_DIR='.__DIR__.'/.phpunit');
+require __DIR__.'/vendor/symfony/phpunit-bridge/bin/simple-phpunit';
diff -pruN 1.31.0-5/src/Apcu/bootstrap80.php 1.33.0-2/src/Apcu/bootstrap80.php
--- 1.31.0-5/src/Apcu/bootstrap80.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Apcu/bootstrap80.php	2025-08-19 12:13:28.000000000 +0000
@@ -22,7 +22,7 @@ if (extension_loaded('Zend Data Cache'))
         function apcu_exists($key): array|bool { return p\Apcu::apcu_exists($key); }
     }
     if (!function_exists('apcu_fetch')) {
-        function apcu_fetch($key, &$success = null): mixed { return p\Apcu::apcu_fetch($key, $success); }
+        function apcu_fetch($key, &$success = null) { return p\Apcu::apcu_fetch($key, $success); }
     }
     if (!function_exists('apcu_store')) {
         function apcu_store($key, mixed $value, ?int $ttl = 0): array|bool { return p\Apcu::apcu_store($key, $value, (int) $ttl); }
diff -pruN 1.31.0-5/src/Iconv/Iconv.php 1.33.0-2/src/Iconv/Iconv.php
--- 1.31.0-5/src/Iconv/Iconv.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Iconv/Iconv.php	2025-08-19 12:13:28.000000000 +0000
@@ -430,32 +430,6 @@ final class Iconv
 
     public static function iconv_strlen($s, $encoding = null)
     {
-        static $hasXml = null;
-        if (null === $hasXml) {
-            $hasXml = \extension_loaded('xml');
-        }
-
-        if ($hasXml) {
-            return self::strlen1($s, $encoding);
-        }
-
-        return self::strlen2($s, $encoding);
-    }
-
-    public static function strlen1($s, $encoding = null)
-    {
-        if (null === $encoding) {
-            $encoding = self::$internalEncoding;
-        }
-        if (0 !== stripos($encoding, 'utf-8') && false === $s = self::iconv($encoding, 'utf-8', $s)) {
-            return false;
-        }
-
-        return \strlen(utf8_decode($s));
-    }
-
-    public static function strlen2($s, $encoding = null)
-    {
         if (null === $encoding) {
             $encoding = self::$internalEncoding;
         }
diff -pruN 1.31.0-5/src/Iconv/bootstrap.php 1.33.0-2/src/Iconv/bootstrap.php
--- 1.31.0-5/src/Iconv/bootstrap.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Iconv/bootstrap.php	2025-08-19 12:13:28.000000000 +0000
@@ -66,11 +66,7 @@ if (extension_loaded('mbstring')) {
     }
 } else {
     if (!function_exists('iconv_strlen')) {
-        if (extension_loaded('xml')) {
-            function iconv_strlen($string, $encoding = null) { return p\Iconv::strlen1($string, $encoding); }
-        } else {
-            function iconv_strlen($string, $encoding = null) { return p\Iconv::strlen2($string, $encoding); }
-        }
+        function iconv_strlen($string, $encoding = null) { return p\Iconv::iconv_strlen($string, $encoding); }
     }
 
     if (!function_exists('iconv_strpos')) {
diff -pruN 1.31.0-5/src/Iconv/bootstrap80.php 1.33.0-2/src/Iconv/bootstrap80.php
--- 1.31.0-5/src/Iconv/bootstrap80.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Iconv/bootstrap80.php	2025-08-19 12:13:28.000000000 +0000
@@ -58,11 +58,7 @@ if (extension_loaded('mbstring')) {
     }
 } else {
     if (!function_exists('iconv_strlen')) {
-        if (extension_loaded('xml')) {
-            function iconv_strlen(?string $string, ?string $encoding = null): int|false { return p\Iconv::strlen1((string) $string, $encoding); }
-        } else {
-            function iconv_strlen(?string $string, ?string $encoding = null): int|false { return p\Iconv::strlen2((string) $string, $encoding); }
-        }
+        function iconv_strlen(?string $string, ?string $encoding = null): int|false { return p\Iconv::iconv_strlen((string) $string, $encoding); }
     }
 
     if (!function_exists('iconv_strpos')) {
diff -pruN 1.31.0-5/src/Intl/Grapheme/Grapheme.php 1.33.0-2/src/Intl/Grapheme/Grapheme.php
--- 1.31.0-5/src/Intl/Grapheme/Grapheme.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Intl/Grapheme/Grapheme.php	2025-08-19 12:13:28.000000000 +0000
@@ -26,6 +26,7 @@ namespace Symfony\Polyfill\Intl\Grapheme
  * - grapheme_strrpos  - Find position (in grapheme units) of last occurrence of a string
  * - grapheme_strstr   - Returns part of haystack string from the first occurrence of needle to the end of haystack
  * - grapheme_substr   - Return part of a string
+ * - grapheme_str_split - Splits a string into an array of individual or chunks of graphemes
  *
  * @author Nicolas Grekas <p@tchwork.com>
  *
@@ -191,6 +192,37 @@ final class Grapheme
         return mb_strstr($s, $needle, $beforeNeedle, 'UTF-8');
     }
 
+    public static function grapheme_str_split($s, $len = 1)
+    {
+        if (0 > $len || 1073741823 < $len) {
+            if (80000 > \PHP_VERSION_ID) {
+                return false;
+            }
+
+            throw new \ValueError('grapheme_str_split(): Argument #2 ($length) must be greater than 0 and less than or equal to 1073741823.');
+        }
+
+        if ('' === $s) {
+            return [];
+        }
+
+        if (!preg_match_all('/('.SYMFONY_GRAPHEME_CLUSTER_RX.')/u', $s, $matches)) {
+            return false;
+        }
+
+        if (1 === $len) {
+            return $matches[0];
+        }
+
+        $chunks = array_chunk($matches[0], $len);
+
+        foreach ($chunks as &$chunk) {
+            $chunk = implode('', $chunk);
+        }
+
+        return $chunks;
+    }
+
     private static function grapheme_position($s, $needle, $offset, $mode)
     {
         $needle = (string) $needle;
diff -pruN 1.31.0-5/src/Intl/Grapheme/README.md 1.33.0-2/src/Intl/Grapheme/README.md
--- 1.31.0-5/src/Intl/Grapheme/README.md	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Intl/Grapheme/README.md	2025-08-19 12:13:28.000000000 +0000
@@ -21,6 +21,7 @@ This component provides a partial, nativ
 - [`grapheme_strstr`](https://php.net/grapheme_strstr): Returns part of haystack string from
   the first occurrence of needle to the end of haystack
 - [`grapheme_substr`](https://php.net/grapheme_substr): Return part of a string
+- [`grapheme_str_split`](https://php.net/grapheme_str_split): Splits a string into an array of individual or chunks of graphemes
 
 More information can be found in the
 [main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
diff -pruN 1.31.0-5/src/Intl/Grapheme/bootstrap.php 1.33.0-2/src/Intl/Grapheme/bootstrap.php
--- 1.31.0-5/src/Intl/Grapheme/bootstrap.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Intl/Grapheme/bootstrap.php	2025-08-19 12:13:28.000000000 +0000
@@ -11,10 +11,6 @@
 
 use Symfony\Polyfill\Intl\Grapheme as p;
 
-if (extension_loaded('intl')) {
-    return;
-}
-
 if (\PHP_VERSION_ID >= 80000) {
     return require __DIR__.'/bootstrap80.php';
 }
@@ -56,3 +52,6 @@ if (!function_exists('grapheme_strstr'))
 if (!function_exists('grapheme_substr')) {
     function grapheme_substr($string, $offset, $length = null) { return p\Grapheme::grapheme_substr($string, $offset, $length); }
 }
+if (!function_exists('grapheme_str_split')) {
+    function grapheme_str_split($string, $length = 1) { return p\Grapheme::grapheme_str_split($string, $length); }
+}
diff -pruN 1.31.0-5/src/Intl/Grapheme/bootstrap80.php 1.33.0-2/src/Intl/Grapheme/bootstrap80.php
--- 1.31.0-5/src/Intl/Grapheme/bootstrap80.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Intl/Grapheme/bootstrap80.php	2025-08-19 12:13:28.000000000 +0000
@@ -11,6 +11,14 @@
 
 use Symfony\Polyfill\Intl\Grapheme as p;
 
+if (!function_exists('grapheme_str_split')) {
+    function grapheme_str_split(string $string, int $length = 1): array|false { return p\Grapheme::grapheme_str_split($string, $length); }
+}
+
+if (extension_loaded('intl')) {
+    return;
+}
+
 if (!defined('GRAPHEME_EXTR_COUNT')) {
     define('GRAPHEME_EXTR_COUNT', 0);
 }
diff -pruN 1.31.0-5/src/Intl/Icu/NumberFormatter.php 1.33.0-2/src/Intl/Icu/NumberFormatter.php
--- 1.31.0-5/src/Intl/Icu/NumberFormatter.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Intl/Icu/NumberFormatter.php	2025-08-19 12:13:28.000000000 +0000
@@ -340,7 +340,7 @@ abstract class NumberFormatter
      * @param int       $type Type of the formatting, one of the format type constants.
      *                        Only type NumberFormatter::TYPE_DEFAULT is currently supported.
      *
-     * @return bool|string The formatted value or false on error
+     * @return false|string The formatted value or false on error
      *
      * @see https://php.net/numberformatter.format
      *
diff -pruN 1.31.0-5/src/Intl/Icu/Resources/currencies.php 1.33.0-2/src/Intl/Icu/Resources/currencies.php
--- 1.31.0-5/src/Intl/Icu/Resources/currencies.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Intl/Icu/Resources/currencies.php	2025-08-19 12:13:28.000000000 +0000
@@ -1219,6 +1219,10 @@ return array (
   array (
     0 => 'EC$',
   ),
+  'XCG' => 
+  array (
+    0 => 'Cg.',
+  ),
   'XEU' => 
   array (
     0 => 'XEU',
@@ -1305,6 +1309,10 @@ return array (
     1 => 0,
     2 => 0,
   ),
+  'ZWG' => 
+  array (
+    0 => 'ZWG',
+  ),
   'ZWL' => 
   array (
     0 => 'ZWL',
diff -pruN 1.31.0-5/src/Intl/Idn/Idn.php 1.33.0-2/src/Intl/Idn/Idn.php
--- 1.31.0-5/src/Intl/Idn/Idn.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Intl/Idn/Idn.php	2025-08-19 12:13:28.000000000 +0000
@@ -145,6 +145,10 @@ final class Idn
      */
     public static function idn_to_ascii($domainName, $options = self::IDNA_DEFAULT, $variant = self::INTL_IDNA_VARIANT_UTS46, &$idna_info = [])
     {
+        if (\PHP_VERSION_ID > 80400 && '' === $domainName) {
+            throw new \ValueError('idn_to_ascii(): Argument #1 ($domain) cannot be empty');
+        }
+
         if (self::INTL_IDNA_VARIANT_2003 === $variant) {
             @trigger_error('idn_to_ascii(): INTL_IDNA_VARIANT_2003 is deprecated', \E_USER_DEPRECATED);
         }
@@ -198,6 +202,10 @@ final class Idn
      */
     public static function idn_to_utf8($domainName, $options = self::IDNA_DEFAULT, $variant = self::INTL_IDNA_VARIANT_UTS46, &$idna_info = [])
     {
+        if (\PHP_VERSION_ID > 80400 && '' === $domainName) {
+            throw new \ValueError('idn_to_utf8(): Argument #1 ($domain) cannot be empty');
+        }
+
         if (self::INTL_IDNA_VARIANT_2003 === $variant) {
             @trigger_error('idn_to_utf8(): INTL_IDNA_VARIANT_2003 is deprecated', \E_USER_DEPRECATED);
         }
diff -pruN 1.31.0-5/src/Mbstring/Mbstring.php 1.33.0-2/src/Mbstring/Mbstring.php
--- 1.31.0-5/src/Mbstring/Mbstring.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Mbstring/Mbstring.php	2025-08-19 12:13:28.000000000 +0000
@@ -983,7 +983,7 @@ final class Mbstring
 
     public static function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string
     {
-        return self::mb_internal_trim('{[%s]+$}D', $string, $characters, $encoding, __FUNCTION__);
+        return self::mb_internal_trim('{[%s]+$}Du', $string, $characters, $encoding, __FUNCTION__);
     }
 
     private static function mb_internal_trim(string $regex, string $string, ?string $characters, ?string $encoding, string $function): string
diff -pruN 1.31.0-5/src/Mbstring/bootstrap80.php 1.33.0-2/src/Mbstring/bootstrap80.php
--- 1.31.0-5/src/Mbstring/bootstrap80.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Mbstring/bootstrap80.php	2025-08-19 12:13:28.000000000 +0000
@@ -133,11 +133,11 @@ if (!function_exists('mb_str_pad')) {
 }
 
 if (!function_exists('mb_ucfirst')) {
-    function mb_ucfirst($string, ?string $encoding = null): string { return p\Mbstring::mb_ucfirst($string, $encoding); }
+    function mb_ucfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_ucfirst($string, $encoding); }
 }
 
 if (!function_exists('mb_lcfirst')) {
-    function mb_lcfirst($string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); }
+    function mb_lcfirst(string $string, ?string $encoding = null): string { return p\Mbstring::mb_lcfirst($string, $encoding); }
 }
 
 if (!function_exists('mb_trim')) {
diff -pruN 1.31.0-5/src/Mbstring/composer.json 1.33.0-2/src/Mbstring/composer.json
--- 1.31.0-5/src/Mbstring/composer.json	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Mbstring/composer.json	2025-08-19 12:13:28.000000000 +0000
@@ -16,7 +16,8 @@
         }
     ],
     "require": {
-        "php": ">=7.2"
+        "php": ">=7.2",
+        "ext-iconv": "*"
     },
     "provide": {
         "ext-mbstring": "*"
diff -pruN 1.31.0-5/src/Php72/LICENSE 1.33.0-2/src/Php72/LICENSE
--- 1.31.0-5/src/Php72/LICENSE	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Php72/LICENSE	1970-01-01 00:00:00.000000000 +0000
@@ -1,19 +0,0 @@
-Copyright (c) 2015-present Fabien Potencier
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff -pruN 1.31.0-5/src/Php72/README.md 1.33.0-2/src/Php72/README.md
--- 1.31.0-5/src/Php72/README.md	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Php72/README.md	1970-01-01 00:00:00.000000000 +0000
@@ -1,35 +0,0 @@
-Symfony Polyfill / Php72
-========================
-
-This component provides functions added to PHP 7.2 core:
-
-- [`spl_object_id`](https://php.net/spl_object_id)
-- [`stream_isatty`](https://php.net/stream_isatty)
-
-And also functions added to PHP 7.2 mbstring:
-
-- [`mb_ord`](https://php.net/mb_ord)
-- [`mb_chr`](https://php.net/mb_chr)
-- [`mb_scrub`](https://php.net/mb_scrub)
-
-On Windows only:
-
-- [`sapi_windows_vt100_support`](https://php.net/sapi_windows_vt100_support)
-
-Moved to core since 7.2 (was in the optional XML extension earlier):
-
-- [`utf8_encode`](https://php.net/utf8_encode)
-- [`utf8_decode`](https://php.net/utf8_decode)
-
-Also, it provides constants added to PHP 7.2:
-
-- [`PHP_FLOAT_*`](https://php.net/reserved.constants#constant.php-float-dig)
-- [`PHP_OS_FAMILY`](https://php.net/reserved.constants#constant.php-os-family)
-
-More information can be found in the
-[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
-
-License
-=======
-
-This library is released under the [MIT license](LICENSE).
diff -pruN 1.31.0-5/src/Php72/composer.json 1.33.0-2/src/Php72/composer.json
--- 1.31.0-5/src/Php72/composer.json	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Php72/composer.json	1970-01-01 00:00:00.000000000 +0000
@@ -1,28 +0,0 @@
-{
-    "name": "symfony/polyfill-php72",
-    "type": "metapackage",
-    "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
-    "keywords": ["polyfill", "shim", "compatibility", "portable"],
-    "homepage": "https://symfony.com",
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "Nicolas Grekas",
-            "email": "p@tchwork.com"
-        },
-        {
-            "name": "Symfony Community",
-            "homepage": "https://symfony.com/contributors"
-        }
-    ],
-    "require": {
-        "php": ">=7.2"
-    },
-    "minimum-stability": "dev",
-    "extra": {
-        "thanks": {
-            "name": "symfony/polyfill",
-            "url": "https://github.com/symfony/polyfill"
-        }
-    }
-}
diff -pruN 1.31.0-5/src/Php80/PhpToken.php 1.33.0-2/src/Php80/PhpToken.php
--- 1.31.0-5/src/Php80/PhpToken.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Php80/PhpToken.php	2025-08-19 12:13:28.000000000 +0000
@@ -29,7 +29,7 @@ class PhpToken implements \Stringable
     public $text;
 
     /**
-     * @var int
+     * @var -1|positive-int
      */
     public $line;
 
@@ -38,6 +38,9 @@ class PhpToken implements \Stringable
      */
     public $pos;
 
+    /**
+     * @param -1|positive-int $line
+     */
     public function __construct(int $id, string $text, int $line = -1, int $position = -1)
     {
         $this->id = $id;
@@ -80,7 +83,7 @@ class PhpToken implements \Stringable
     }
 
     /**
-     * @return static[]
+     * @return list<static>
      */
     public static function tokenize(string $code, int $flags = 0): array
     {
diff -pruN 1.31.0-5/src/Php83/Php83.php 1.33.0-2/src/Php83/Php83.php
--- 1.31.0-5/src/Php83/Php83.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Php83/Php83.php	2025-08-19 12:13:28.000000000 +0000
@@ -35,7 +35,7 @@ final class Php83
             throw new \ValueError(sprintf('json_validate(): Argument #2 ($depth) must be less than %d', self::JSON_MAX_DEPTH));
         }
 
-        json_decode($json, null, $depth, $flags);
+        json_decode($json, true, $depth, $flags);
 
         return \JSON_ERROR_NONE === json_last_error();
     }
diff -pruN 1.31.0-5/src/Php84/Php84.php 1.33.0-2/src/Php84/Php84.php
--- 1.31.0-5/src/Php84/Php84.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Php84/Php84.php	2025-08-19 12:13:28.000000000 +0000
@@ -109,6 +109,11 @@ final class Php84
         return true;
     }
 
+    public static function fpow(float $num, float $exponent): float
+    {
+        return $num ** $exponent;
+    }
+
     public static function mb_trim(string $string, ?string $characters = null, ?string $encoding = null): string
     {
         return self::mb_internal_trim('{^[%s]+|[%1$s]+$}Du', $string, $characters, $encoding, __FUNCTION__);
@@ -169,4 +174,44 @@ final class Php84
 
         return mb_convert_encoding($string, $encoding, 'UTF-8');
     }
+
+    public static function grapheme_str_split(string $string, int $length)
+    {
+        if (0 > $length || 1073741823 < $length) {
+            throw new \ValueError('grapheme_str_split(): Argument #2 ($length) must be greater than 0 and less than or equal to 1073741823.');
+        }
+
+        if ('' === $string) {
+            return [];
+        }
+
+        $regex = ((float) \PCRE_VERSION < 10 ? (float) \PCRE_VERSION >= 8.32 : (float) \PCRE_VERSION >= 10.39)
+            ? '\X'
+            : '(?:\r\n|(?:[ -~\x{200C}\x{200D}]|[ᆨ-ᇹ]+|[ᄀ-ᅟ]*(?:[가개갸걔거게겨계고과괘괴교구궈궤귀규그긔기까깨꺄꺠꺼께껴꼐꼬꽈꽤꾀꾜꾸꿔꿰뀌뀨끄끠끼나내냐냬너네녀녜노놔놰뇌뇨누눠눼뉘뉴느늬니다대댜댸더데뎌뎨도돠돼되됴두둬뒈뒤듀드듸디따때땨떄떠떼뗘뗴또똬뙈뙤뚀뚜뚸뛔뛰뜌뜨띄띠라래랴럐러레려례로롸뢔뢰료루뤄뤠뤼류르릐리마매먀먜머메며몌모뫄뫠뫼묘무뭐뭬뮈뮤므믜미바배뱌뱨버베벼볘보봐봬뵈뵤부붜붸뷔뷰브븨비빠빼뺘뺴뻐뻬뼈뼤뽀뽜뽸뾔뾰뿌뿨쀄쀠쀼쁘쁴삐사새샤섀서세셔셰소솨쇄쇠쇼수숴쉐쉬슈스싀시싸쌔쌰썌써쎄쎠쎼쏘쏴쐐쐬쑈쑤쒀쒜쒸쓔쓰씌씨아애야얘어에여예오와왜외요우워웨위유으의이자재쟈쟤저제져졔조좌좨죄죠주줘줴쥐쥬즈즤지짜째쨔쨰쩌쩨쪄쪠쪼쫘쫴쬐쬬쭈쭤쮀쮜쮸쯔쯰찌차채챠챼처체쳐쳬초촤쵀최쵸추춰췌취츄츠츼치카캐캬컈커케켜켸코콰쾌쾨쿄쿠쿼퀘퀴큐크킈키타태탸턔터테텨톄토톼퇘퇴툐투퉈퉤튀튜트틔티파패퍄퍠퍼페펴폐포퐈퐤푀표푸풔풰퓌퓨프픠피하해햐햬허헤혀혜호화홰회효후훠훼휘휴흐희히]?[ᅠ-ᆢ]+|[가-힣])[ᆨ-ᇹ]*|[ᄀ-ᅟ]+|[^\p{Cc}\p{Cf}\p{Zl}\p{Zp}])[\p{Mn}\p{Me}\x{09BE}\x{09D7}\x{0B3E}\x{0B57}\x{0BBE}\x{0BD7}\x{0CC2}\x{0CD5}\x{0CD6}\x{0D3E}\x{0D57}\x{0DCF}\x{0DDF}\x{200C}\x{200D}\x{1D165}\x{1D16E}-\x{1D172}]*|[\p{Cc}\p{Cf}\p{Zl}\p{Zp}])';
+
+        if (!preg_match_all('/'. $regex .'/u', $string, $matches)) {
+            return false;
+        }
+
+        if (1 === $length) {
+            return $matches[0];
+        }
+
+        $chunks = array_chunk($matches[0], $length);
+        foreach ($chunks as &$chunk) {
+            $chunk = implode('', $chunk);
+        }
+
+        return $chunks;
+    }
+
+    public static function bcdivmod(string $num1, string $num2, ?int $scale = null): ?array
+    {
+        if (null === $quot = \bcdiv($num1, $num2, 0)) {
+            return null;
+        }
+        $scale = $scale ?? (\PHP_VERSION_ID >= 70300 ? \bcscale() : (ini_get('bcmath.scale') ?: 0));
+
+        return [$quot, \bcmod($num1, $num2, $scale)];
+    }
 }
diff -pruN 1.31.0-5/src/Php84/README.md 1.33.0-2/src/Php84/README.md
--- 1.31.0-5/src/Php84/README.md	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Php84/README.md	2025-08-19 12:13:28.000000000 +0000
@@ -3,10 +3,15 @@ Symfony Polyfill / Php84
 
 This component provides features added to PHP 8.4 core:
 
-- [`mb_ucfirst` and `mb_lcfirst`](https://wiki.php.net/rfc/mb_ucfirst)
 - [`array_find`, `array_find_key`, `array_any` and `array_all`](https://wiki.php.net/rfc/array_find)
+- [`bcdivmod`](https://wiki.php.net/rfc/add_bcdivmod_to_bcmath)
 - [`Deprecated`](https://wiki.php.net/rfc/deprecated_attribute)
 - `CURL_HTTP_VERSION_3` and `CURL_HTTP_VERSION_3ONLY` constants
+- [`fpow`](https://wiki.php.net/rfc/raising_zero_to_power_of_negative_number)
+- [`grapheme_str_split`](https://wiki.php.net/rfc/grapheme_str_split)
+- [`mb_trim`, `mb_ltrim` and `mb_rtrim`](https://wiki.php.net/rfc/mb_trim)
+- [`mb_ucfirst` and `mb_lcfirst`](https://wiki.php.net/rfc/mb_ucfirst)
+- [`ReflectionConstant`](https://github.com/php/php-src/pull/13669)
 
 More information can be found in the
 [main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
diff -pruN 1.31.0-5/src/Php84/Resources/stubs/ReflectionConstant.php 1.33.0-2/src/Php84/Resources/stubs/ReflectionConstant.php
--- 1.31.0-5/src/Php84/Resources/stubs/ReflectionConstant.php	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/src/Php84/Resources/stubs/ReflectionConstant.php	2025-08-19 12:13:28.000000000 +0000
@@ -0,0 +1,158 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80400) {
+    /**
+     * @author Daniel Scherzer <daniel.e.scherzer@gmail.com>
+     */
+    final class ReflectionConstant
+    {
+        /**
+         * @var string
+         *
+         * @readonly
+         */
+        public $name;
+
+        private $value;
+        private $deprecated;
+
+        private static $persistentConstants = [];
+
+        public function __construct(string $name)
+        {
+            if (!defined($name) || false !== strpos($name, '::')) {
+                throw new ReflectionException("Constant \"$name\" does not exist");
+            }
+
+            $this->name = ltrim($name, '\\');
+            $deprecated = false;
+            $eh = set_error_handler(static function ($type, $msg, $file, $line) use ($name, &$deprecated, &$eh) {
+                if (\E_DEPRECATED === $type && "Constant $name is deprecated" === $msg) {
+                    return $deprecated = true;
+                }
+
+                return $eh && $eh($type, $msg, $file, $line);
+            });
+
+            try {
+                $this->value = constant($name);
+                $this->deprecated = $deprecated;
+            } finally {
+                restore_error_handler();
+            }
+        }
+
+        public function getName(): string
+        {
+            return $this->name;
+        }
+
+        public function getValue()
+        {
+            return $this->value;
+        }
+
+        public function getNamespaceName(): string
+        {
+            if (false === $slashPos = strrpos($this->name, '\\')) {
+                return '';
+            }
+
+            return substr($this->name, 0, $slashPos);
+        }
+
+        public function getShortName(): string
+        {
+            if (false === $slashPos = strrpos($this->name, '\\')) {
+                return $this->name;
+            }
+
+            return substr($this->name, $slashPos + 1);
+        }
+
+        public function isDeprecated(): bool
+        {
+            return $this->deprecated;
+        }
+
+        public function __toString(): string
+        {
+            // A constant is persistent if provided by PHP itself rather than
+            // being defined by users. If we got here, we know that it *is*
+            // defined, so we just need to figure out if it is defined by the
+            // user or not
+            if (!self::$persistentConstants) {
+                $persistentConstants = get_defined_constants(true);
+                unset($persistentConstants['user']);
+                foreach ($persistentConstants as $constants) {
+                    self::$persistentConstants += $constants;
+                }
+            }
+            $persistent = array_key_exists($this->name, self::$persistentConstants);
+
+            // Can't match the inclusion of `no_file_cache` but the rest is
+            // possible to match
+            $result = 'Constant [ ';
+            if ($persistent || $this->deprecated) {
+                $result .= '<';
+                if ($persistent) {
+                    $result .= 'persistent';
+                    if ($this->deprecated) {
+                        $result .= ', ';
+                    }
+                }
+                if ($this->deprecated) {
+                    $result .= 'deprecated';
+                }
+                $result .= '> ';
+            }
+            // Cannot just use gettype() to match zend_zval_type_name()
+            if (is_object($this->value)) {
+                $result .= \PHP_VERSION_ID >= 80000 ? get_debug_type($this->value) : gettype($this->value);
+            } elseif (is_bool($this->value)) {
+                $result .= 'bool';
+            } elseif (is_int($this->value)) {
+                $result .= 'int';
+            } elseif (is_float($this->value)) {
+                $result .= 'float';
+            } elseif (null === $this->value) {
+                $result .= 'null';
+            } else {
+                $result .= gettype($this->value);
+            }
+            $result .= ' ';
+            $result .= $this->name;
+            $result .= ' ] { ';
+            if (is_array($this->value)) {
+                $result .= 'Array';
+            } else {
+                // This will throw an exception if the value is an object that
+                // cannot be converted to string; that is expected and matches
+                // the behavior of zval_get_string_func()
+                $result .= (string) $this->value;
+            }
+            $result .= " }\n";
+
+            return $result;
+        }
+
+        public function __sleep(): array
+        {
+            throw new Exception("Serialization of 'ReflectionConstant' is not allowed");
+        }
+
+        public function __wakeup(): void
+        {
+            throw new Exception("Unserialization of 'ReflectionConstant' is not allowed");
+        }
+    }
+}
diff -pruN 1.31.0-5/src/Php84/bootstrap.php 1.33.0-2/src/Php84/bootstrap.php
--- 1.31.0-5/src/Php84/bootstrap.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Php84/bootstrap.php	2025-08-19 12:13:28.000000000 +0000
@@ -16,9 +16,11 @@ if (\PHP_VERSION_ID >= 80400) {
 }
 
 if (defined('CURL_VERSION_HTTP3') || PHP_VERSION_ID < 80200 && function_exists('curl_version') && curl_version()['version'] >= 0x074200) { // libcurl >= 7.66.0
-    define('CURL_HTTP_VERSION_3', 30);
+    if (!defined('CURL_HTTP_VERSION_3')) {
+        define('CURL_HTTP_VERSION_3', 30);
+    }
 
-    if (defined('CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256')) { // libcurl >= 7.80.0 (7.88 would be better but is slow to check)
+    if (!defined('CURL_HTTP_VERSION_3ONLY') && defined('CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256')) { // libcurl >= 7.80.0 (7.88 would be better but is slow to check)
         define('CURL_HTTP_VERSION_3ONLY', 31);
     }
 }
@@ -39,13 +41,17 @@ if (!function_exists('array_all')) {
     function array_all(array $array, callable $callback): bool { return p\Php84::array_all($array, $callback); }
 }
 
+if (!function_exists('fpow')) {
+    function fpow(float $num, float $exponent): float { return p\Php84::fpow($num, $exponent); }
+}
+
 if (extension_loaded('mbstring')) {
     if (!function_exists('mb_ucfirst')) {
-        function mb_ucfirst($string, ?string $encoding = null): string { return p\Php84::mb_ucfirst($string, $encoding); }
+        function mb_ucfirst(string $string, ?string $encoding = null): string { return p\Php84::mb_ucfirst($string, $encoding); }
     }
 
     if (!function_exists('mb_lcfirst')) {
-        function mb_lcfirst($string, ?string $encoding = null): string { return p\Php84::mb_lcfirst($string, $encoding); }
+        function mb_lcfirst(string $string, ?string $encoding = null): string { return p\Php84::mb_lcfirst($string, $encoding); }
     }
 
     if (!function_exists('mb_trim')) {
@@ -60,3 +66,17 @@ if (extension_loaded('mbstring')) {
         function mb_rtrim(string $string, ?string $characters = null, ?string $encoding = null): string { return p\Php84::mb_rtrim($string, $characters, $encoding); }
     }
 }
+
+if (extension_loaded('bcmath')) {
+    if (!function_exists('bcdivmod')) {
+        function bcdivmod(string $num1, string $num2, ?int $scale = null): ?array { return p\Php84::bcdivmod($num1, $num2, $scale); }
+    }
+}
+
+if (\PHP_VERSION_ID >= 80200) {
+    return require __DIR__.'/bootstrap82.php';
+}
+
+if (extension_loaded('intl') && !function_exists('grapheme_str_split')) {
+    function grapheme_str_split(string $string, int $length = 1) { return p\Php84::grapheme_str_split($string, $length); }
+}
diff -pruN 1.31.0-5/src/Php84/bootstrap82.php 1.33.0-2/src/Php84/bootstrap82.php
--- 1.31.0-5/src/Php84/bootstrap82.php	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/src/Php84/bootstrap82.php	2025-08-19 12:13:28.000000000 +0000
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Php84 as p;
+
+if (\PHP_VERSION_ID >= 80400) {
+    return;
+}
+
+if (extension_loaded('intl') && !function_exists('grapheme_str_split')) {
+    function grapheme_str_split(string $string, int $length = 1): array|false { return p\Php84::grapheme_str_split($string, $length); }
+}
diff -pruN 1.31.0-5/src/Php85/LICENSE 1.33.0-2/src/Php85/LICENSE
--- 1.31.0-5/src/Php85/LICENSE	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/src/Php85/LICENSE	2025-08-19 12:13:28.000000000 +0000
@@ -0,0 +1,19 @@
+Copyright (c) 2025-present Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff -pruN 1.31.0-5/src/Php85/Php85.php 1.33.0-2/src/Php85/Php85.php
--- 1.31.0-5/src/Php85/Php85.php	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/src/Php85/Php85.php	2025-08-19 12:13:28.000000000 +0000
@@ -0,0 +1,50 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Php85;
+
+/**
+ * @author Pierre Ambroise <pierre27.ambroise@gmail.com>
+ *
+ * @internal
+ */
+final class Php85
+{
+    public static function get_error_handler(): ?callable
+    {
+        $handler = set_error_handler(null);
+        restore_error_handler();
+
+        return $handler;
+    }
+
+    public static function get_exception_handler(): ?callable
+    {
+        $handler = set_exception_handler(null);
+        restore_exception_handler();
+
+        return $handler;
+    }
+
+    public static function array_first(array $array)
+    {
+        foreach ($array as $value) {
+            return $value;
+        }
+
+        return null;
+    }
+
+    public static function array_last(array $array)
+    {
+        return $array ? current(array_slice($array, -1)) : null;
+    }
+}
diff -pruN 1.31.0-5/src/Php85/README.md 1.33.0-2/src/Php85/README.md
--- 1.31.0-5/src/Php85/README.md	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/src/Php85/README.md	2025-08-19 12:13:28.000000000 +0000
@@ -0,0 +1,16 @@
+Symfony Polyfill / Php85
+========================
+
+This component provides features added to PHP 8.5 core:
+
+- [`get_error_handler` and `get_exception_handler`](https://wiki.php.net/rfc/get-error-exception-handler)
+- [`NoDiscard`](https://wiki.php.net/rfc/marking_return_value_as_important)
+- [`array_first` and `array_last`](https://wiki.php.net/rfc/array_first_last)
+
+More information can be found in the
+[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
+
+License
+=======
+
+This library is released under the [MIT license](LICENSE).
diff -pruN 1.31.0-5/src/Php85/Resources/stubs/NoDiscard.php 1.33.0-2/src/Php85/Resources/stubs/NoDiscard.php
--- 1.31.0-5/src/Php85/Resources/stubs/NoDiscard.php	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/src/Php85/Resources/stubs/NoDiscard.php	2025-08-19 12:13:28.000000000 +0000
@@ -0,0 +1,23 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if (\PHP_VERSION_ID < 80500) {
+    #[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION)]
+    final class NoDiscard
+    {
+        public ?string $message;
+
+        public function __construct(?string $message = null)
+        {
+            $this->message = $message;
+        }
+    }
+}
diff -pruN 1.31.0-5/src/Php85/bootstrap.php 1.33.0-2/src/Php85/bootstrap.php
--- 1.31.0-5/src/Php85/bootstrap.php	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/src/Php85/bootstrap.php	2025-08-19 12:13:28.000000000 +0000
@@ -0,0 +1,32 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Php85 as p;
+
+if (\PHP_VERSION_ID >= 80500) {
+    return;
+}
+
+if (!function_exists('get_error_handler')) {
+    function get_error_handler(): ?callable { return p\Php85::get_error_handler(); }
+}
+
+if (!function_exists('get_exception_handler')) {
+    function get_exception_handler(): ?callable { return p\Php85::get_exception_handler(); }
+}
+
+if (!function_exists('array_first')) {
+    function array_first(array $array) { return p\Php85::array_first($array); }
+}
+
+if (!function_exists('array_last')) {
+    function array_last(array $array) { return p\Php85::array_last($array); }
+}
diff -pruN 1.31.0-5/src/Php85/composer.json 1.33.0-2/src/Php85/composer.json
--- 1.31.0-5/src/Php85/composer.json	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/src/Php85/composer.json	2025-08-19 12:13:28.000000000 +0000
@@ -0,0 +1,33 @@
+{
+    "name": "symfony/polyfill-php85",
+    "type": "library",
+    "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions",
+    "keywords": ["polyfill", "shim", "compatibility", "portable"],
+    "homepage": "https://symfony.com",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Nicolas Grekas",
+            "email": "p@tchwork.com"
+        },
+        {
+            "name": "Symfony Community",
+            "homepage": "https://symfony.com/contributors"
+        }
+    ],
+    "require": {
+        "php": ">=7.2"
+    },
+    "autoload": {
+        "psr-4": { "Symfony\\Polyfill\\Php85\\": "" },
+        "files": [ "bootstrap.php" ],
+        "classmap": [ "Resources/stubs" ]
+    },
+    "minimum-stability": "dev",
+    "extra": {
+        "thanks": {
+            "name": "symfony/polyfill",
+            "url": "https://github.com/symfony/polyfill"
+        }
+    }
+}
diff -pruN 1.31.0-5/src/Util/TestListenerForV7.php 1.33.0-2/src/Util/TestListenerForV7.php
--- 1.31.0-5/src/Util/TestListenerForV7.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Util/TestListenerForV7.php	2025-08-19 12:13:28.000000000 +0000
@@ -23,13 +23,11 @@ use PHPUnit\Framework\WarningTestCase;
  */
 class TestListenerForV7 extends TestSuite implements TestListenerInterface
 {
-    private $suite;
     private $trait;
 
     public function __construct(?TestSuite $suite = null)
     {
         if ($suite) {
-            $this->suite = $suite;
             $this->setName($suite->getName().' with polyfills enabled');
             $this->addTest($suite);
         }
@@ -38,7 +36,13 @@ class TestListenerForV7 extends TestSuit
 
     public function startTestSuite(TestSuite $suite): void
     {
-        $this->trait->startTestSuite($suite);
+        if (null === TestListenerTrait::$enabledPolyfills) {
+            TestListenerTrait::$enabledPolyfills = false;
+            $this->trait->startTestSuite($suite);
+        }
+        if ($suite instanceof TestListener) {
+            TestListenerTrait::$enabledPolyfills = $suite->getName();
+        }
     }
 
     public function addError(Test $test, \Throwable $t, float $time): void
@@ -69,6 +73,7 @@ class TestListenerForV7 extends TestSuit
 
     public function endTestSuite(TestSuite $suite): void
     {
+        TestListenerTrait::$enabledPolyfills = false;
     }
 
     public function startTest(Test $test): void
@@ -83,14 +88,4 @@ class TestListenerForV7 extends TestSuit
     {
         return new WarningTestCase($message);
     }
-
-    protected function setUp(): void
-    {
-        TestListenerTrait::$enabledPolyfills = $this->suite->getName();
-    }
-
-    protected function tearDown(): void
-    {
-        TestListenerTrait::$enabledPolyfills = false;
-    }
 }
diff -pruN 1.31.0-5/src/Util/TestListenerForV9.php 1.33.0-2/src/Util/TestListenerForV9.php
--- 1.31.0-5/src/Util/TestListenerForV9.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Util/TestListenerForV9.php	2025-08-19 12:13:28.000000000 +0000
@@ -20,13 +20,11 @@ use PHPUnit\Framework\WarningTestCase;
 
 class TestListenerForV9 extends TestSuite implements TestListenerInterface
 {
-    private $suite;
     private $trait;
 
     public function __construct(?TestSuite $suite = null)
     {
         if ($suite) {
-            $this->suite = $suite;
             $this->setName($suite->getName().' with polyfills enabled');
             $this->addTest($suite);
         }
@@ -35,7 +33,13 @@ class TestListenerForV9 extends TestSuit
 
     public function startTestSuite(TestSuite $suite): void
     {
-        $this->trait->startTestSuite($suite->tests()[0]);
+        if (null === TestListenerTrait::$enabledPolyfills) {
+            TestListenerTrait::$enabledPolyfills = false;
+            $this->trait->startTestSuite($suite);
+        }
+        if ($suite instanceof TestListener) {
+            TestListenerTrait::$enabledPolyfills = $suite->getName();
+        }
     }
 
     public function addError(Test $test, \Throwable $t, float $time): void
@@ -69,6 +73,7 @@ class TestListenerForV9 extends TestSuit
 
     public function endTestSuite(TestSuite $suite): void
     {
+        TestListenerTrait::$enabledPolyfills = false;
     }
 
     public function startTest(Test $test): void
@@ -83,14 +88,4 @@ class TestListenerForV9 extends TestSuit
     {
         return new WarningTestCase($message);
     }
-
-    protected function setUp(): void
-    {
-        TestListenerTrait::$enabledPolyfills = $this->suite->getName();
-    }
-
-    protected function tearDown(): void
-    {
-        TestListenerTrait::$enabledPolyfills = false;
-    }
 }
diff -pruN 1.31.0-5/src/Util/TestListenerTrait.php 1.33.0-2/src/Util/TestListenerTrait.php
--- 1.31.0-5/src/Util/TestListenerTrait.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/Util/TestListenerTrait.php	2025-08-19 12:13:28.000000000 +0000
@@ -25,10 +25,6 @@ class TestListenerTrait
 
     public function startTestSuite($mainSuite)
     {
-        if (null !== self::$enabledPolyfills) {
-            return;
-        }
-        self::$enabledPolyfills = false;
         $warnings = [];
 
         foreach ($mainSuite->tests() as $suite) {
@@ -53,7 +49,14 @@ class TestListenerTrait
             }
             $testedClass = new \ReflectionClass($m[1].$m[2]);
             $bootstrap = \dirname($testedClass->getFileName()).'/bootstrap';
-            $bootstrap = new \SplFileObject($bootstrap.(\PHP_VERSION_ID >= 80000 && file_exists($bootstrap.'80.php') ? '80' : '').'.php');
+            if (\PHP_VERSION_ID >= 80200 && file_exists($bootstrap.'82.php')) {
+                $bootstrap .= '82';
+            } elseif (\PHP_VERSION_ID >= 80100 && file_exists($bootstrap.'81.php')) {
+                $bootstrap .= '81';
+            } elseif (\PHP_VERSION_ID >= 80000 && file_exists($bootstrap.'80.php')) {
+                $bootstrap .= '80';
+            }
+            $bootstrap = new \SplFileObject($bootstrap.'.php');
             $newWarnings = 0;
             $defLine = null;
 
@@ -109,7 +112,7 @@ use {$testedClass->getNamespaceName()} a
 
 function {$f['name']}{$f['signature']}
 {
-    if ('{$testClass}' === TestListenerTrait::\$enabledPolyfills) {
+    if ('{$testClass} with polyfills enabled' === TestListenerTrait::\$enabledPolyfills) {
         {$f['return']}{$f['args']};
     }
 
@@ -123,16 +126,25 @@ EOPHP
                     $polyfillSignature = ReflectionCaster::castFunctionAbstract(new \ReflectionFunction($testNamespace.'\\'.$f['name']), [], new Stub(), true);
                     $polyfillSignature = ReflectionCaster::getSignature($polyfillSignature);
 
+                    if ('mb_get_info' === $r->name && false === strpos($originalSignature, '|null') && false !== strpos($polyfillSignature, '|null')) {
+                        // Added to PHP 8.2.14/8.3.1
+                        $originalSignature .= '|null';
+                    }
+
+                    if (false === strpos($bootstrap->getPath(), '80.php')) {
+                        // mixed return type cannot be used before PHP 8
+                        $originalSignature = str_replace(': mixed', '', $originalSignature);
+                    }
+
                     $map = [
                         '?' => '',
-                        'IDNA_DEFAULT' => \PHP_VERSION_ID >= 80100 ? 'IDNA_DEFAULT' : '0',
                         'array|string|null $string' => 'array|string $string',
                         'array|string|null $from_encoding = null' => 'array|string|null $from_encoding = null',
                         'array|string|null $from_encoding' => 'array|string $from_encoding',
                     ];
 
-                    if (strtr($polyfillSignature, $map) !== $originalSignature) {
-                        $warnings[] = TestListener::warning("Incompatible signature for PHP >= 8:\n- {$f['name']}$originalSignature\n+ {$f['name']}$polyfillSignature");
+                    if (strtr($polyfillSignature, $map) !== str_replace('?', '', $originalSignature)) {
+                        $warnings[] = TestListener::warning("Incompatible signature for PHP >= 8 in {$bootstrap->getPathname()}:\n- {$f['name']}$originalSignature\n+ {$f['name']}$polyfillSignature");
                     }
                 }
             }
diff -pruN 1.31.0-5/src/bootstrap.php 1.33.0-2/src/bootstrap.php
--- 1.31.0-5/src/bootstrap.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/src/bootstrap.php	2025-08-19 12:13:28.000000000 +0000
@@ -36,3 +36,7 @@ if (\PHP_VERSION_ID < 80300) {
 if (\PHP_VERSION_ID < 80400) {
     require __DIR__.'/Php84/bootstrap.php';
 }
+
+if (\PHP_VERSION_ID < 80500) {
+    require __DIR__.'/Php85/bootstrap.php';
+}
diff -pruN 1.31.0-5/tests/BootstrapTest.php 1.33.0-2/tests/BootstrapTest.php
--- 1.31.0-5/tests/BootstrapTest.php	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/tests/BootstrapTest.php	2025-08-19 12:13:28.000000000 +0000
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Tests;
+
+use PHPUnit\Framework\TestCase;
+
+class BootstrapTest extends TestCase
+{
+    /**
+     * Test including the PHP polyfills does not try to redefine any symbols.
+     */
+    public function testIncludingTwice()
+    {
+        $this->expectNotToPerformAssertions();
+
+        // File should already be loaded once by Composer.
+        require __DIR__.'/../src/bootstrap.php';
+    }
+}
diff -pruN 1.31.0-5/tests/Compiler.php 1.33.0-2/tests/Compiler.php
--- 1.31.0-5/tests/Compiler.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/tests/Compiler.php	2025-08-19 12:13:28.000000000 +0000
@@ -16,7 +16,7 @@ namespace Symfony\Polyfill\Internal;
  * and charset data to a format suitable for other Utf8 classes.
  *
  * See https://unicode.org/Public/UNIDATA/ for unicode data
- * See https://github.com/unicode-org/cldr/blob/master/common/transforms/ for Latin-ASCII.xml
+ * See https://github.com/unicode-org/cldr/blob/main/common/transforms/ for Latin-ASCII.xml
  *
  * @author Nicolas Grekas <p@tchwork.com>
  *
diff -pruN 1.31.0-5/tests/Iconv/IconvTest.php 1.33.0-2/tests/Iconv/IconvTest.php
--- 1.31.0-5/tests/Iconv/IconvTest.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/tests/Iconv/IconvTest.php	2025-08-19 12:13:28.000000000 +0000
@@ -29,7 +29,7 @@ class IconvTest extends TestCase
         $this->assertFalse(@iconv('UTF-8', 'ISO-8859-1', 'nœud'));
         $this->assertSame('nud', iconv('UTF-8', 'ISO-8859-1//IGNORE', 'nœud'));
 
-        $this->assertSame(utf8_decode('déjà'), iconv('CP1252', 'ISO-8859-1', utf8_decode('déjà')));
+        $this->assertSame(mb_convert_encoding('déjà', 'ISO-8859-1', 'UTF-8'), iconv('CP1252', 'ISO-8859-1', mb_convert_encoding('déjà', 'ISO-8859-1', 'UTF-8')));
         $this->assertSame('deja noeud', p::iconv('UTF-8//ignore//IGNORE', 'US-ASCII//TRANSLIT//IGNORE//translit', 'déjà nœud'));
 
         $this->assertSame('4', iconv('UTF-8', 'UTF-8', 4));
@@ -38,16 +38,11 @@ class IconvTest extends TestCase
 
     /**
      * @covers \Symfony\Polyfill\Iconv\Iconv::iconv_strlen
-     * @covers \Symfony\Polyfill\Iconv\Iconv::strlen1
-     * @covers \Symfony\Polyfill\Iconv\Iconv::strlen2
      */
     public function testIconvStrlen()
     {
         $this->assertSame(4, iconv_strlen('déjà', 'UTF-8'));
         $this->assertSame(3, iconv_strlen('한국어', 'UTF-8'));
-
-        $this->assertSame(4, p::strlen2('déjà'));
-        $this->assertSame(3, p::strlen2('한국어'));
     }
 
     /**
diff -pruN 1.31.0-5/tests/Intl/Grapheme/GraphemeTest.php 1.33.0-2/tests/Intl/Grapheme/GraphemeTest.php
--- 1.31.0-5/tests/Intl/Grapheme/GraphemeTest.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/tests/Intl/Grapheme/GraphemeTest.php	2025-08-19 12:13:28.000000000 +0000
@@ -209,4 +209,34 @@ class GraphemeTest extends TestCase
         $this->assertSame('국어', grapheme_strstr('한국어', '국'));
         $this->assertSame('ÉJÀ', grapheme_stristr('DÉJÀ', 'é'));
     }
+
+    /**
+     * @dataProvider graphemeStrSplitDataProvider
+     */
+    public function testGraphemeStrSplit(string $string, int $length, array $expectedValues)
+    {
+        $this->assertSame($expectedValues, grapheme_str_split($string, $length));
+    }
+
+    public static function graphemeStrSplitDataProvider(): array
+    {
+        $cases = [
+            ['', 1, []],
+            ['PHP', 1, ['P', 'H', 'P']],
+            ['你好', 1, ['你', '好']],
+            ['අයේෂ්', 1, ['අ', 'යේ', 'ෂ්']],
+            ['สวัสดี', 2, ['สวั', 'สดี']],
+        ];
+
+        if (70300 <= PHP_VERSION_ID) {
+            $cases[] = ['土下座🙇‍♀を', 1, ["土", "下", "座", "🙇‍♀", "を"]];
+        }
+
+        // Fixed in https://github.com/PCRE2Project/pcre2/issues/410
+        if (defined('PCRE_VERSION_MAJOR') && PCRE_VERSION_MAJOR > 10 && PCRE_VERSION_MINOR > 44) {
+            $cases[] = ['👭🏻👰🏿‍♂️', 2, ['👭🏻', '👰🏿‍♂️']];
+        }
+
+        return $cases;
+    }
 }
diff -pruN 1.31.0-5/tests/Intl/Icu/AbstractIntlDateFormatterTest.php 1.33.0-2/tests/Intl/Icu/AbstractIntlDateFormatterTest.php
--- 1.31.0-5/tests/Intl/Icu/AbstractIntlDateFormatterTest.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/tests/Intl/Icu/AbstractIntlDateFormatterTest.php	2025-08-19 12:13:28.000000000 +0000
@@ -35,11 +35,11 @@ abstract class AbstractIntlDateFormatter
     {
         $formatter = $this->getDateFormatter('en', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT);
 
-        $this->assertEquals(date_default_timezone_get(), $formatter->getTimeZoneId());
+        $this->assertSame(date_default_timezone_get(), $formatter->getTimeZoneId());
 
-        $this->assertEquals(
+        $this->assertSame(
             $this->getDateTime(0, $formatter->getTimeZoneId())->format('M j, Y, g:i A'),
-            $formatter->format(0)
+            str_replace("\u{202F}", ' ', $formatter->format(0))
         );
     }
 
@@ -50,7 +50,7 @@ abstract class AbstractIntlDateFormatter
     {
         $formatter = $this->getDateFormatter('en', null, IntlDateFormatter::SHORT, 'UTC', IntlDateFormatter::GREGORIAN);
 
-        $this->assertSame('EEEE, MMMM d, y \'at\' h:mm a', $formatter->getPattern());
+        $this->assertSame('EEEE, MMMM d, y \'at\' h:mm a', str_replace("\u{202F}", ' ', $formatter->getPattern()));
     }
 
     /**
@@ -60,7 +60,7 @@ abstract class AbstractIntlDateFormatter
     {
         $formatter = $this->getDateFormatter('en', IntlDateFormatter::SHORT, null, 'UTC', IntlDateFormatter::GREGORIAN);
 
-        $this->assertSame('M/d/yy, h:mm:ss a zzzz', $formatter->getPattern());
+        $this->assertSame('M/d/yy, h:mm:ss a zzzz', str_replace("\u{202F}", ' ', $formatter->getPattern()));
     }
 
     /**
@@ -498,7 +498,11 @@ abstract class AbstractIntlDateFormatter
         $datetime = \DateTime::createFromFormat('U', time(), new \DateTimeZone('GMT'));
         $datetime->setTime(0, 0, 0);
 
-        $this->assertSame('today at 12:00:00 AM Greenwich Mean Time', $formatter->format($datetime));
+        $formatted = $formatter->format($datetime);
+        $formatted = str_replace(' at ', ', ', $formatted);
+        $formatted = str_replace("\u{202F}", ' ', $formatted);
+
+        $this->assertSame('today, 12:00:00 AM Greenwich Mean Time', $formatted);
     }
 
     /**
@@ -507,7 +511,7 @@ abstract class AbstractIntlDateFormatter
     public function testDateAndTimeType($timestamp, $datetype, $timetype, $expected)
     {
         $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
-        $this->assertSame($expected, $formatter->format($timestamp));
+        $this->assertSame($expected, str_replace("\u{202F}", ' ', $formatter->format($timestamp)));
     }
 
     public static function dateAndTimeTypeProvider()
@@ -533,7 +537,14 @@ abstract class AbstractIntlDateFormatter
         $datetime->setTime(0, 0, 0);
 
         $formatter = $this->getDateFormatter('en', $datetype, $timetype, 'UTC');
-        $this->assertSame($expected, $formatter->format($datetime));
+
+        $formatted = $formatter->format($datetime);
+
+        // Ignore differences that vary by version of PHP or ICU
+        $formatted = str_replace(' at ', ', ', $formatted);
+        $formatted = str_replace("\u{202F}", ' ', $formatted);
+
+        $this->assertSame($expected, $formatted);
     }
 
     public static function relativeDateTypeProvider()
@@ -545,17 +556,17 @@ abstract class AbstractIntlDateFormatter
             [0, IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::NONE, '1/1/70'],
 
             [time(), IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'today'],
-            [time(), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'today at 12:00:00 AM Coordinated Universal Time'],
+            [time(), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'today, 12:00:00 AM Coordinated Universal Time'],
             [time(), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'today, 12:00:00 AM UTC'],
             [time(), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'today, 12:00 AM'],
 
             [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'yesterday'],
-            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'yesterday at 12:00:00 AM Coordinated Universal Time'],
+            [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'yesterday, 12:00:00 AM Coordinated Universal Time'],
             [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'yesterday, 12:00:00 AM UTC'],
             [strtotime('-1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'yesterday, 12:00 AM'],
 
             [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, 'tomorrow'],
-            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'tomorrow at 12:00:00 AM Coordinated Universal Time'],
+            [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::FULL, 'tomorrow, 12:00:00 AM Coordinated Universal Time'],
             [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::LONG, 'tomorrow, 12:00:00 AM UTC'],
             [strtotime('+1 day', time()), IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::SHORT, 'tomorrow, 12:00 AM'],
         ];
diff -pruN 1.31.0-5/tests/Intl/Idn/IdnTest.php 1.33.0-2/tests/Intl/Idn/IdnTest.php
--- 1.31.0-5/tests/Intl/Idn/IdnTest.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/tests/Intl/Idn/IdnTest.php	2025-08-19 12:13:28.000000000 +0000
@@ -122,8 +122,12 @@ class IdnTest extends TestCase
      */
     public function testToUnicode($source, $toUnicode, $toUnicodeStatus, $toAsciiN, $toAsciiNStatus, $toAsciiT, $toAsciiTStatus)
     {
+        if (\PHP_VERSION_ID >= 80400 && '' === $source) {
+            $this->expectException(\ValueError::class);
+        }
+
         $options = \IDNA_CHECK_BIDI | \IDNA_CHECK_CONTEXTJ | \IDNA_USE_STD3_RULES | \IDNA_NONTRANSITIONAL_TO_UNICODE;
-        $result = idn_to_utf8($source, $options, \INTL_IDNA_VARIANT_UTS46, $info);
+        idn_to_utf8($source, $options, \INTL_IDNA_VARIANT_UTS46, $info);
 
         if (null === $info) {
             $this->markTestSkipped('PHP Bug #72506.');
@@ -150,8 +154,12 @@ class IdnTest extends TestCase
      */
     public function testToAsciiNonTransitional($source, $toUnicode, $toUnicodeStatus, $toAsciiN, $toAsciiNStatus, $toAsciiT, $toAsciiTStatus)
     {
+        if (\PHP_VERSION_ID >= 80400 && '' === $source) {
+            $this->expectException(\ValueError::class);
+        }
+
         $options = \IDNA_CHECK_BIDI | \IDNA_CHECK_CONTEXTJ | \IDNA_USE_STD3_RULES | \IDNA_NONTRANSITIONAL_TO_ASCII;
-        $result = idn_to_ascii($source, $options, \INTL_IDNA_VARIANT_UTS46, $info);
+        idn_to_ascii($source, $options, \INTL_IDNA_VARIANT_UTS46, $info);
 
         if (null === $info) {
             $this->markTestSkipped('PHP Bug #72506.');
@@ -178,8 +186,12 @@ class IdnTest extends TestCase
      */
     public function testToAsciiTransitional($source, $toUnicode, $toUnicodeStatus, $toAsciiN, $toAsciiNStatus, $toAsciiT, $toAsciiTStatus)
     {
+        if (\PHP_VERSION_ID >= 80400 && '' === $source) {
+            $this->expectException(\ValueError::class);
+        }
+
         $options = \IDNA_CHECK_BIDI | \IDNA_CHECK_CONTEXTJ | \IDNA_USE_STD3_RULES;
-        $result = idn_to_ascii($source, $options, \INTL_IDNA_VARIANT_UTS46, $info);
+        idn_to_ascii($source, $options, \INTL_IDNA_VARIANT_UTS46, $info);
 
         if (null === $info) {
             $this->markTestSkipped('PHP Bug #72506.');
diff -pruN 1.31.0-5/tests/Mbstring/MbstringTest.php 1.33.0-2/tests/Mbstring/MbstringTest.php
--- 1.31.0-5/tests/Mbstring/MbstringTest.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/tests/Mbstring/MbstringTest.php	2025-08-19 12:13:28.000000000 +0000
@@ -68,13 +68,21 @@ class MbstringTest extends TestCase
      */
     public function testConvertEncoding()
     {
-        $this->assertSame(utf8_decode('déjà'), mb_convert_encoding('déjà', 'Windows-1252'));
+        $this->assertSame(iconv('UTF-8', 'ISO-8859-1', 'déjà'), mb_convert_encoding('déjà', 'Windows-1252'));
+        $this->assertSame('déjà', mb_convert_encoding(mb_convert_encoding('déjà', 'ISO-8859-1', 'UTF-8'), 'Utf-8', 'ASCII,ISO-2022-JP,UTF-8,ISO-8859-1'));
+        $this->assertSame('déjà', mb_convert_encoding(mb_convert_encoding('déjà', 'ISO-8859-1', 'UTF-8'), 'Utf-8', ['ASCII', 'ISO-2022-JP', 'UTF-8', 'ISO-8859-1']));
+    }
+
+    /**
+     * @group legacy
+     */
+    public function testConvertLegacyEncoding()
+    {
+        // handling base64 and html entities with mb_convert_encoding is deprecated in PHP 8.2
         $this->assertSame(base64_encode('déjà'), mb_convert_encoding('déjà', 'Base64'));
         $this->assertSame('&#23455;<&>d&eacute;j&agrave;', mb_convert_encoding('実<&>déjà', 'Html-entities'));
         $this->assertSame('déjà', mb_convert_encoding(base64_encode('déjà'), 'Utf-8', 'Base64'));
         $this->assertSame('déjà', mb_convert_encoding('d&eacute;j&#224;', 'Utf-8', 'Html-entities'));
-        $this->assertSame('déjà', mb_convert_encoding(utf8_decode('déjà'), 'Utf-8', 'ASCII,ISO-2022-JP,UTF-8,ISO-8859-1'));
-        $this->assertSame('déjà', mb_convert_encoding(utf8_decode('déjà'), 'Utf-8', ['ASCII', 'ISO-2022-JP', 'UTF-8', 'ISO-8859-1']));
     }
 
     /**
@@ -567,7 +575,7 @@ class MbstringTest extends TestCase
     {
         $this->assertSame(3, mb_strwidth("\000実", 'UTF-8'));
         $this->assertSame(4, mb_strwidth('déjà', 'UTF-8'));
-        $this->assertSame(4, mb_strwidth(utf8_decode('déjà'), 'CP1252'));
+        $this->assertSame(4, mb_strwidth(mb_convert_encoding('déjà', 'ISO-8859-1', 'UTF-8'), 'CP1252'));
     }
 
     /**
@@ -729,9 +737,9 @@ class MbstringTest extends TestCase
 
     public static function mbStrPadInvalidArgumentsProvider(): iterable
     {
-        yield ['mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string', '▶▶', 6, '', \STR_PAD_RIGHT];
-        yield ['mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string', '▶▶', 6, '', \STR_PAD_LEFT];
-        yield ['mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string', '▶▶', 6, '', \STR_PAD_BOTH];
+        yield ['mb_str_pad(): Argument #3 ($pad_string)', '▶▶', 6, '', \STR_PAD_RIGHT];
+        yield ['mb_str_pad(): Argument #3 ($pad_string)', '▶▶', 6, '', \STR_PAD_LEFT];
+        yield ['mb_str_pad(): Argument #3 ($pad_string)', '▶▶', 6, '', \STR_PAD_BOTH];
         yield ['mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH', '▶▶', 6, ' ', 123456];
         yield ['mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "unexisting" given', '▶▶', 6, ' ', \STR_PAD_BOTH, 'unexisting'];
     }
@@ -878,6 +886,7 @@ class MbstringTest extends TestCase
         yield [' test ', ' test ', ''];
 
         yield ['いああああ', 'あああああああああああああああああああああああああああああああああいああああ', 'あ'];
+        yield ['あいうえお　', '　あいうえお　'];
 
         yield ['漢字', "\u{FFFE}漢字", "\u{FFFE}\u{FEFF}"];
         yield [' abcd ', ' abcd ', ''];
@@ -894,6 +903,7 @@ class MbstringTest extends TestCase
         yield ['                                                                                                                                 a', str_repeat(' ', 129).'a'];
 
         yield ['あああああああああああああああああああああああああああああああああい', 'あああああああああああああああああああああああああああああああああいああああ', 'あ'];
+        yield ['　あいうえお', '　あいうえお　'];
 
         yield [' abcd ', ' abcd ', ''];
 
diff -pruN 1.31.0-5/tests/Php74/Php74Test.php 1.33.0-2/tests/Php74/Php74Test.php
--- 1.31.0-5/tests/Php74/Php74Test.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/tests/Php74/Php74Test.php	2025-08-19 12:13:28.000000000 +0000
@@ -123,11 +123,13 @@ class A
     private $priv = 3;
 }
 
+#[\AllowDynamicProperties]
 class B extends A
 {
     private $priv = 4;
 }
 
+#[\AllowDynamicProperties]
 class AO extends \ArrayObject
 {
     private $priv = 1;
diff -pruN 1.31.0-5/tests/Php81/Php81Test.php 1.33.0-2/tests/Php81/Php81Test.php
--- 1.31.0-5/tests/Php81/Php81Test.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/tests/Php81/Php81Test.php	2025-08-19 12:13:28.000000000 +0000
@@ -34,6 +34,7 @@ class Php81Test extends TestCase
 
     /**
      * @requires extension mysqli
+     * @group legacy
      */
     public function testMysqliRefreshReplicaDefined()
     {
diff -pruN 1.31.0-5/tests/Php82/SensitiveParameterValuePolyfillTest.php 1.33.0-2/tests/Php82/SensitiveParameterValuePolyfillTest.php
--- 1.31.0-5/tests/Php82/SensitiveParameterValuePolyfillTest.php	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/tests/Php82/SensitiveParameterValuePolyfillTest.php	2025-08-19 12:13:28.000000000 +0000
@@ -0,0 +1,80 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Tests\Php82;
+
+use PHPUnit\Framework\TestCase;
+use Symfony\Polyfill\Php82\SensitiveParameterValue as SensitiveParameterValuePolyfill;
+
+/**
+ * @author Tim Düsterhus <duesterhus@woltlab.com>
+ */
+class SensitiveParameterValuePolyfillTest extends TestCase
+{
+    public static function sensitiveParameterValueProvider()
+    {
+        yield [new SensitiveParameterValuePolyfill('secret')];
+        yield [new \SensitiveParameterValue('secret')];
+    }
+
+    /**
+     * @dataProvider sensitiveParameterValueProvider
+     */
+    public function testGetValue($v)
+    {
+        $this->assertSame('secret', $v->getValue());
+    }
+
+    /**
+     * @dataProvider sensitiveParameterValueProvider
+     */
+    public function testSerializeIsNotAllowed($v)
+    {
+        $this->expectException(\Exception::class);
+        $this->expectExceptionMessage("Serialization of 'SensitiveParameterValue' is not allowed");
+
+        serialize($v);
+    }
+
+    /**
+     * @dataProvider sensitiveParameterValueProvider
+     */
+    public function testVarDumpDoesNotLeak($v)
+    {
+        ob_start();
+        var_dump($v);
+        $contents = ob_get_clean();
+
+        $this->assertStringNotContainsString('secret', $contents);
+    }
+
+    /**
+     * @dataProvider sensitiveParameterValueProvider
+     */
+    public function testDebugZvalDumpDoesNotLeak($v)
+    {
+        ob_start();
+        debug_zval_dump($v);
+        $contents = ob_get_clean();
+
+        $this->assertStringNotContainsString('secret', $contents);
+    }
+
+    /**
+     * @dataProvider sensitiveParameterValueProvider
+     */
+    public function testClone($v)
+    {
+        $clone = clone $v;
+
+        $this->assertSame('secret', $clone->getValue());
+    }
+}
diff -pruN 1.31.0-5/tests/Php82/SensitiveParameterValueTest.php 1.33.0-2/tests/Php82/SensitiveParameterValueTest.php
--- 1.31.0-5/tests/Php82/SensitiveParameterValueTest.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/tests/Php82/SensitiveParameterValueTest.php	1970-01-01 00:00:00.000000000 +0000
@@ -1,80 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Polyfill\Tests\Php82;
-
-use PHPUnit\Framework\TestCase;
-use Symfony\Polyfill\Php82\SensitiveParameterValue as SensitiveParameterValuePolyfill;
-
-/**
- * @author Tim Düsterhus <duesterhus@woltlab.com>
- */
-class SensitiveParameterValueTest extends TestCase
-{
-    public static function sensitiveParameterValueProvider()
-    {
-        yield [new SensitiveParameterValuePolyfill('secret')];
-        yield [new \SensitiveParameterValue('secret')];
-    }
-
-    /**
-     * @dataProvider sensitiveParameterValueProvider
-     */
-    public function testGetValue($v)
-    {
-        $this->assertSame('secret', $v->getValue());
-    }
-
-    /**
-     * @dataProvider sensitiveParameterValueProvider
-     */
-    public function testSerializeIsNotAllowed($v)
-    {
-        $this->expectException(\Exception::class);
-        $this->expectExceptionMessage("Serialization of 'SensitiveParameterValue' is not allowed");
-
-        serialize($v);
-    }
-
-    /**
-     * @dataProvider sensitiveParameterValueProvider
-     */
-    public function testVarDumpDoesNotLeak($v)
-    {
-        ob_start();
-        var_dump($v);
-        $contents = ob_get_clean();
-
-        $this->assertStringNotContainsString('secret', $contents);
-    }
-
-    /**
-     * @dataProvider sensitiveParameterValueProvider
-     */
-    public function testDebugZvalDumpDoesNotLeak($v)
-    {
-        ob_start();
-        debug_zval_dump($v);
-        $contents = ob_get_clean();
-
-        $this->assertStringNotContainsString('secret', $contents);
-    }
-
-    /**
-     * @dataProvider sensitiveParameterValueProvider
-     */
-    public function testClone($v)
-    {
-        $clone = clone $v;
-
-        $this->assertSame('secret', $clone->getValue());
-    }
-}
diff -pruN 1.31.0-5/tests/Php83/Php83Test.php 1.33.0-2/tests/Php83/Php83Test.php
--- 1.31.0-5/tests/Php83/Php83Test.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/tests/Php83/Php83Test.php	2025-08-19 12:13:28.000000000 +0000
@@ -115,9 +115,9 @@ class Php83Test extends TestCase
 
     public static function mbStrPadInvalidArgumentsProvider(): iterable
     {
-        yield ['mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string', '▶▶', 6, '', \STR_PAD_RIGHT];
-        yield ['mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string', '▶▶', 6, '', \STR_PAD_LEFT];
-        yield ['mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string', '▶▶', 6, '', \STR_PAD_BOTH];
+        yield ['mb_str_pad(): Argument #3 ($pad_string)', '▶▶', 6, '', \STR_PAD_RIGHT];
+        yield ['mb_str_pad(): Argument #3 ($pad_string)', '▶▶', 6, '', \STR_PAD_LEFT];
+        yield ['mb_str_pad(): Argument #3 ($pad_string)', '▶▶', 6, '', \STR_PAD_BOTH];
         yield ['mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH', '▶▶', 6, ' ', 123456];
         yield ['mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "unexisting" given', '▶▶', 6, ' ', \STR_PAD_BOTH, 'unexisting'];
     }
@@ -141,6 +141,7 @@ class Php83Test extends TestCase
         yield [true, '{ "": { "": "" } }'];
         yield [true, '{ "test": {"foo": "bar"}, "test2": {"foo" : "bar" }, "test2": {"foo" : "bar" } }'];
         yield [true, '{ "test": {"foo": "bar"}, "test2": {"foo" : "bar" }, "test3": {"foo" : "bar" } }'];
+        yield [true, '{ "\u0000null": "test" }'];
         yield [false, '{"key1":"value1", "key2":"value2"}', 'Maximum stack depth exceeded', 1];
         yield [false, "\"a\xb0b\"", 'Malformed UTF-8 characters, possibly incorrectly encoded'];
         yield [true, '{ "test": { "foo": "bar" } }', 'No error', 2147483647];
@@ -280,7 +281,7 @@ class Php83Test extends TestCase
 
     public static function strInvalidIncrementProvider(): iterable
     {
-        yield ['str_increment(): Argument #1 ($string) cannot be empty', ''];
+        yield ['str_increment(): Argument #1 ($string)', ''];
         yield ['str_increment(): Argument #1 ($string) must be composed only of alphanumeric ASCII characters', '-cc'];
         yield ['str_increment(): Argument #1 ($string) must be composed only of alphanumeric ASCII characters', 'Z '];
         yield ['str_increment(): Argument #1 ($string) must be composed only of alphanumeric ASCII characters', ' Z'];
@@ -311,7 +312,7 @@ class Php83Test extends TestCase
 
     public static function strInvalidDecrementProvider(): iterable
     {
-        yield ['str_decrement(): Argument #1 ($string) cannot be empty', ''];
+        yield ['str_decrement(): Argument #1 ($string)', ''];
         yield ['str_decrement(): Argument #1 ($string) must be composed only of alphanumeric ASCII characters', '我喜歡雞肉'];
         yield ['str_decrement(): Argument #1 ($string) "0" is out of decrement range', '0'];
         yield ['str_decrement(): Argument #1 ($string) "a" is out of decrement range', 'a'];
diff -pruN 1.31.0-5/tests/Php84/Php84Test.php 1.33.0-2/tests/Php84/Php84Test.php
--- 1.31.0-5/tests/Php84/Php84Test.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/tests/Php84/Php84Test.php	2025-08-19 12:13:28.000000000 +0000
@@ -319,4 +319,445 @@ class Php84Test extends TestCase
 
         yield ["foo\n", "foo\n", 'o'];
     }
+
+    /**
+     * @dataProvider fpowProvider
+     */
+    public function testFpow(float $num, float $exponent, float $expected)
+    {
+        $result = fpow($num, $exponent);
+
+        if (is_nan($expected)) {
+            $this->assertNan($result);
+        } else {
+            // The PHP testsuite performs assertions on the text representation of results. As we copied their test cases, we need to do the same.
+            $this->assertSame((string) $expected, (string) $result);
+        }
+    }
+
+    public static function fpowProvider(): iterable
+    {
+        // Cases tested in https://github.com/php/php-src/blob/php-8.4.2/ext/standard/tests/math/fpow.phpt
+        yield [0, 0, 1];
+        yield [0, 1, 0];
+        yield [0, -1, INF];
+        yield [0, 1.0, 0];
+        yield [0, -1.0, INF];
+        yield [0, 2, 0];
+        yield [0, -2, INF];
+        yield [0, 2.1, 0];
+        yield [0, -2.1, INF];
+        yield [0, 0.1, 0];
+        yield [0, -0.1, INF];
+        yield [0, 0.0, 1];
+        yield [0, -0.0, 1];
+        yield [0, 10, 0];
+        yield [0, -10, INF];
+        yield [0, INF, 0];
+        yield [0, -INF, INF];
+        yield [0, NAN, NAN];
+        yield [1, 0, 1];
+        yield [1, 1, 1];
+        yield [1, -1, 1];
+        yield [1, 1.0, 1];
+        yield [1, -1.0, 1];
+        yield [1, 2, 1];
+        yield [1, -2, 1];
+        yield [1, 2.1, 1];
+        yield [1, -2.1, 1];
+        yield [1, 0.1, 1];
+        yield [1, -0.1, 1];
+        yield [1, 0.0, 1];
+        yield [1, -0.0, 1];
+        yield [1, 10, 1];
+        yield [1, -10, 1];
+        yield [1, INF, 1];
+        yield [1, -INF, 1];
+        yield [1, NAN, 1];
+        yield [-1, 0, 1];
+        yield [-1, 1, -1];
+        yield [-1, -1, -1];
+        yield [-1, 1.0, -1];
+        yield [-1, -1.0, -1];
+        yield [-1, 2, 1];
+        yield [-1, -2, 1];
+        yield [-1, 2.1, NAN];
+        yield [-1, -2.1, NAN];
+        yield [-1, 0.1, NAN];
+        yield [-1, -0.1, NAN];
+        yield [-1, 0.0, 1];
+        yield [-1, -0.0, 1];
+        yield [-1, 10, 1];
+        yield [-1, -10, 1];
+        yield [-1, INF, 1];
+        yield [-1, -INF, 1];
+        yield [-1, NAN, NAN];
+        yield [1.0, 0, 1];
+        yield [1.0, 1, 1];
+        yield [1.0, -1, 1];
+        yield [1.0, 1.0, 1];
+        yield [1.0, -1.0, 1];
+        yield [1.0, 2, 1];
+        yield [1.0, -2, 1];
+        yield [1.0, 2.1, 1];
+        yield [1.0, -2.1, 1];
+        yield [1.0, 0.1, 1];
+        yield [1.0, -0.1, 1];
+        yield [1.0, 0.0, 1];
+        yield [1.0, -0.0, 1];
+        yield [1.0, 10, 1];
+        yield [1.0, -10, 1];
+        yield [1.0, INF, 1];
+        yield [1.0, -INF, 1];
+        yield [1.0, NAN, 1];
+        yield [-1.0, 0, 1];
+        yield [-1.0, 1, -1];
+        yield [-1.0, -1, -1];
+        yield [-1.0, 1.0, -1];
+        yield [-1.0, -1.0, -1];
+        yield [-1.0, 2, 1];
+        yield [-1.0, -2, 1];
+        yield [-1.0, 2.1, NAN];
+        yield [-1.0, -2.1, NAN];
+        yield [-1.0, 0.1, NAN];
+        yield [-1.0, -0.1, NAN];
+        yield [-1.0, 0.0, 1];
+        yield [-1.0, -0.0, 1];
+        yield [-1.0, 10, 1];
+        yield [-1.0, -10, 1];
+        yield [-1.0, INF, 1];
+        yield [-1.0, -INF, 1];
+        yield [-1.0, NAN, NAN];
+        yield [2, 0, 1];
+        yield [2, 1, 2];
+        yield [2, -1, 0.5];
+        yield [2, 1.0, 2];
+        yield [2, -1.0, 0.5];
+        yield [2, 2, 4];
+        yield [2, -2, 0.25];
+        yield [2, 2.1, 4.2870938501452];
+        yield [2, -2.1, 0.2332582478842];
+        yield [2, 0.1, 1.0717734625363];
+        yield [2, -0.1, 0.93303299153681];
+        yield [2, 0.0, 1];
+        yield [2, -0.0, 1];
+        yield [2, 10, 1024];
+        yield [2, -10, 0.0009765625];
+        yield [2, INF, INF];
+        yield [2, -INF, 0];
+        yield [2, NAN, NAN];
+        yield [-2, 0, 1];
+        yield [-2, 1, -2];
+        yield [-2, -1, -0.5];
+        yield [-2, 1.0, -2];
+        yield [-2, -1.0, -0.5];
+        yield [-2, 2, 4];
+        yield [-2, -2, 0.25];
+        yield [-2, 2.1, NAN];
+        yield [-2, -2.1, NAN];
+        yield [-2, 0.1, NAN];
+        yield [-2, -0.1, NAN];
+        yield [-2, 0.0, 1];
+        yield [-2, -0.0, 1];
+        yield [-2, 10, 1024];
+        yield [-2, -10, 0.0009765625];
+        yield [-2, INF, INF];
+        yield [-2, -INF, 0];
+        yield [-2, NAN, NAN];
+        yield [2.1, 0, 1];
+        yield [2.1, 1, 2.1];
+        yield [2.1, -1, 0.47619047619048];
+        yield [2.1, 1.0, 2.1];
+        yield [2.1, -1.0, 0.47619047619048];
+        yield [2.1, 2, 4.41];
+        yield [2.1, -2, 0.22675736961451];
+        yield [2.1, 2.1, 4.7496380917422];
+        yield [2.1, -2.1, 0.21054235726688];
+        yield [2.1, 0.1, 1.0770154403044];
+        yield [2.1, -0.1, 0.92849179554696];
+        yield [2.1, 0.0, 1];
+        yield [2.1, -0.0, 1];
+        yield [2.1, 10, 1667.9880978201];
+        yield [2.1, -10, 0.0005995246616609];
+        yield [2.1, INF, INF];
+        yield [2.1, -INF, 0];
+        yield [2.1, NAN, NAN];
+        yield [-2.1, 0, 1];
+        yield [-2.1, 1, -2.1];
+        yield [-2.1, -1, -0.47619047619048];
+        yield [-2.1, 1.0, -2.1];
+        yield [-2.1, -1.0, -0.47619047619048];
+        yield [-2.1, 2, 4.41];
+        yield [-2.1, -2, 0.22675736961451];
+        yield [-2.1, 2.1, NAN];
+        yield [-2.1, -2.1, NAN];
+        yield [-2.1, 0.1, NAN];
+        yield [-2.1, -0.1, NAN];
+        yield [-2.1, 0.0, 1];
+        yield [-2.1, -0.0, 1];
+        yield [-2.1, 10, 1667.9880978201];
+        yield [-2.1, -10, 0.0005995246616609];
+        yield [-2.1, INF, INF];
+        yield [-2.1, -INF, 0];
+        yield [-2.1, NAN, NAN];
+        yield [0.1, 0, 1];
+        yield [0.1, 1, 0.1];
+        yield [0.1, -1, 10];
+        yield [0.1, 1.0, 0.1];
+        yield [0.1, -1.0, 10];
+        yield [0.1, 2, 0.01];
+        yield [0.1, -2, 100];
+        yield [0.1, 2.1, 0.0079432823472428];
+        yield [0.1, -2.1, 125.89254117942];
+        yield [0.1, 0.1, 0.79432823472428];
+        yield [0.1, -0.1, 1.2589254117942];
+        yield [0.1, 0.0, 1];
+        yield [0.1, -0.0, 1];
+        yield [0.1, 10, 1.0E-10];
+        yield [0.1, -10, 10000000000];
+        yield [0.1, INF, 0];
+        yield [0.1, -INF, INF];
+        yield [0.1, NAN, NAN];
+        yield [-0.1, 0, 1];
+        yield [-0.1, 1, -0.1];
+        yield [-0.1, -1, -10];
+        yield [-0.1, 1.0, -0.1];
+        yield [-0.1, -1.0, -10];
+        yield [-0.1, 2, 0.01];
+        yield [-0.1, -2, 100];
+        yield [-0.1, 2.1, NAN];
+        yield [-0.1, -2.1, NAN];
+        yield [-0.1, 0.1, NAN];
+        yield [-0.1, -0.1, NAN];
+        yield [-0.1, 0.0, 1];
+        yield [-0.1, -0.0, 1];
+        yield [-0.1, 10, 1.0E-10];
+        yield [-0.1, -10, 10000000000];
+        yield [-0.1, INF, 0];
+        yield [-0.1, -INF, INF];
+        yield [-0.1, NAN, NAN];
+        yield [0.0, 0, 1];
+        yield [0.0, 1, 0];
+        yield [0.0, -1, INF];
+        yield [0.0, 1.0, 0];
+        yield [0.0, -1.0, INF];
+        yield [0.0, 2, 0];
+        yield [0.0, -2, INF];
+        yield [0.0, 2.1, 0];
+        yield [0.0, -2.1, INF];
+        yield [0.0, 0.1, 0];
+        yield [0.0, -0.1, INF];
+        yield [0.0, 0.0, 1];
+        yield [0.0, -0.0, 1];
+        yield [0.0, 10, 0];
+        yield [0.0, -10, INF];
+        yield [0.0, INF, 0];
+        yield [0.0, -INF, INF];
+        yield [0.0, NAN, NAN];
+        yield [-0.0, 0, 1];
+        yield [-0.0, 1, -0.0];
+        yield [-0.0, -1, -INF];
+        yield [-0.0, 1.0, -0.0];
+        yield [-0.0, -1.0, -INF];
+        yield [-0.0, 2, 0];
+        yield [-0.0, -2, INF];
+        yield [-0.0, 2.1, 0];
+        yield [-0.0, -2.1, INF];
+        yield [-0.0, 0.1, 0];
+        yield [-0.0, -0.1, INF];
+        yield [-0.0, 0.0, 1];
+        yield [-0.0, -0.0, 1];
+        yield [-0.0, 10, 0];
+        yield [-0.0, -10, INF];
+        yield [-0.0, INF, 0];
+        yield [-0.0, -INF, INF];
+        yield [-0.0, NAN, NAN];
+        yield [10, 0, 1];
+        yield [10, 1, 10];
+        yield [10, -1, 0.1];
+        yield [10, 1.0, 10];
+        yield [10, -1.0, 0.1];
+        yield [10, 2, 100];
+        yield [10, -2, 0.01];
+        yield [10, 2.1, 125.89254117942];
+        yield [10, -2.1, 0.0079432823472428];
+        yield [10, 0.1, 1.2589254117942];
+        yield [10, -0.1, 0.79432823472428];
+        yield [10, 0.0, 1];
+        yield [10, -0.0, 1];
+        yield [10, 10, 10000000000];
+        yield [10, -10, 1.0E-10];
+        yield [10, INF, INF];
+        yield [10, -INF, 0];
+        yield [10, NAN, NAN];
+        yield [-10, 0, 1];
+        yield [-10, 1, -10];
+        yield [-10, -1, -0.1];
+        yield [-10, 1.0, -10];
+        yield [-10, -1.0, -0.1];
+        yield [-10, 2, 100];
+        yield [-10, -2, 0.01];
+        yield [-10, 2.1, NAN];
+        yield [-10, -2.1, NAN];
+        yield [-10, 0.1, NAN];
+        yield [-10, -0.1, NAN];
+        yield [-10, 0.0, 1];
+        yield [-10, -0.0, 1];
+        yield [-10, 10, 10000000000];
+        yield [-10, -10, 1.0E-10];
+        yield [-10, INF, INF];
+        yield [-10, -INF, 0];
+        yield [-10, NAN, NAN];
+        yield [INF, 0, 1];
+        yield [INF, 1, INF];
+        yield [INF, -1, 0];
+        yield [INF, 1.0, INF];
+        yield [INF, -1.0, 0];
+        yield [INF, 2, INF];
+        yield [INF, -2, 0];
+        yield [INF, 2.1, INF];
+        yield [INF, -2.1, 0];
+        yield [INF, 0.1, INF];
+        yield [INF, -0.1, 0];
+        yield [INF, 0.0, 1];
+        yield [INF, -0.0, 1];
+        yield [INF, 10, INF];
+        yield [INF, -10, 0];
+        yield [INF, INF, INF];
+        yield [INF, -INF, 0];
+        yield [INF, NAN, NAN];
+        yield [-INF, 0, 1];
+        yield [-INF, 1, -INF];
+        yield [-INF, -1, -0.0];
+        yield [-INF, 1.0, -INF];
+        yield [-INF, -1.0, -0.0];
+        yield [-INF, 2, INF];
+        yield [-INF, -2, 0];
+        yield [-INF, 2.1, INF];
+        yield [-INF, -2.1, 0];
+        yield [-INF, 0.1, INF];
+        yield [-INF, -0.1, 0];
+        yield [-INF, 0.0, 1];
+        yield [-INF, -0.0, 1];
+        yield [-INF, 10, INF];
+        yield [-INF, -10, 0];
+        yield [-INF, INF, INF];
+        yield [-INF, -INF, 0];
+        yield [-INF, NAN, NAN];
+        yield [NAN, 0, 1];
+        yield [NAN, 1, NAN];
+        yield [NAN, -1, NAN];
+        yield [NAN, 1.0, NAN];
+        yield [NAN, -1.0, NAN];
+        yield [NAN, 2, NAN];
+        yield [NAN, -2, NAN];
+        yield [NAN, 2.1, NAN];
+        yield [NAN, -2.1, NAN];
+        yield [NAN, 0.1, NAN];
+        yield [NAN, -0.1, NAN];
+        yield [NAN, 0.0, 1];
+        yield [NAN, -0.0, 1];
+        yield [NAN, 10, NAN];
+        yield [NAN, -10, NAN];
+        yield [NAN, INF, NAN];
+        yield [NAN, -INF, NAN];
+        yield [NAN, NAN, NAN];
+    }
+
+    /**
+     * @dataProvider graphemeStrSplitDataProvider
+     */
+    public function testGraphemeStrSplit(string $string, int $length, array $expectedValues)
+    {
+        $this->assertSame($expectedValues, grapheme_str_split($string, $length));
+    }
+
+    public static function graphemeStrSplitDataProvider(): array
+    {
+        $cases = [
+            ['', 1, []],
+            ['PHP', 1, ['P', 'H', 'P']],
+            ['你好', 1, ['你', '好']],
+            ['අයේෂ්', 1, ['අ', 'යේ', 'ෂ්']],
+            ['สวัสดี', 2, ['สวั', 'สดี']],
+        ];
+
+        if (70300 <= PHP_VERSION_ID) {
+            $cases[] = ['土下座🙇‍♀を', 1, ["土", "下", "座", "🙇‍♀", "を"]];
+        }
+
+        // Fixed in https://github.com/PCRE2Project/pcre2/issues/410
+        if (defined('PCRE_VERSION_MAJOR') && 10 < PCRE_VERSION_MAJOR && 44 < PCRE_VERSION_MINOR) {
+            $cases[] = ['👭🏻👰🏿‍♂️', 2, ['👭🏻', '👰🏿‍♂️']];
+        }
+
+        return $cases;
+    }
+
+    /**
+     * @requires extension bcmath
+     *
+     * @covers \Symfony\Polyfill\Php84\Php84::bcdivmod
+     *
+     * @dataProvider bcDivModProvider
+     */
+    public function testBcDivMod(string $num1, string $num2, ?int $scale, array $expected)
+    {
+        $this->assertSame($expected, bcdivmod($num1, $num2, $scale));
+    }
+
+    /**
+     * @requires extension bcmath
+     */
+    public function testBcDivModDivideByZero()
+    {
+        $this->expectException(\DivisionByZeroError::class);
+
+        bcdivmod('1', '0');
+    }
+
+    /**
+     * @requires extension bcmath
+     */
+    public function testBcDivModDivideByFloatingZero()
+    {
+        $this->expectException(\DivisionByZeroError::class);
+
+        bcdivmod('1', '0.00');
+    }
+
+    /**
+     * @requires PHP 8.0
+     * @requires extension bcmath
+     */
+    public function testBcDivModMalformedNumber()
+    {
+        $this->expectException(\ValueError::class);
+        $this->expectExceptionMessage('Argument #1 ($num1) is not well-formed');
+
+        bcdivmod('a', '1');
+    }
+
+    /**
+     * @requires PHP 8.0
+     * @requires extension bcmath
+     */
+    public function testBcDivModMalformedNumber2()
+    {
+        $this->expectException(\ValueError::class);
+        $this->expectExceptionMessage('Argument #2 ($num2) is not well-formed');
+
+        bcdivmod('1', 'a');
+    }
+
+    public static function bcDivModProvider(): iterable
+    {
+        yield ['1', '1', null, ['1', '0']];
+        yield ['1', '2', null, ['0', '1']];
+        yield ['5', '2', null, ['2', '1']];
+        yield ['5', '2', 0, ['2', '1']];
+        yield ['5', '2', 1, ['2', '1.0']];
+        yield ['5', '2', 2, ['2', '1.00']];
+        yield ['7.2', '3', 2, ['2', '1.20']];
+    }
 }
diff -pruN 1.31.0-5/tests/Php84/ReflectionConstantTest.php 1.33.0-2/tests/Php84/ReflectionConstantTest.php
--- 1.31.0-5/tests/Php84/ReflectionConstantTest.php	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/tests/Php84/ReflectionConstantTest.php	2025-08-19 12:13:28.000000000 +0000
@@ -0,0 +1,164 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Tests\Php84;
+
+use PHPUnit\Framework\TestCase;
+
+const EXAMPLE = 'Foo';
+
+class ExampleNonStringable
+{
+    protected $value;
+
+    public function __construct(string $value)
+    {
+        $this->value = $value;
+    }
+}
+
+class ExampleStringable extends ExampleNonStringable
+{
+    public function __toString(): string
+    {
+        return 'ExampleStringable (value='.$this->value.')';
+    }
+}
+
+/**
+ * @author Daniel Scherzer <daniel.e.scherzer@gmail.com>
+ */
+class ReflectionConstantTest extends TestCase
+{
+    public function testMissingConstant()
+    {
+        $this->expectException(\ReflectionException::class);
+        $this->expectExceptionMessage('Constant "missing" does not exist');
+        new \ReflectionConstant('missing');
+    }
+
+    public function testClassConstant()
+    {
+        $this->assertTrue(\defined('ReflectionFunction::IS_DEPRECATED'));
+
+        $this->expectException(\ReflectionException::class);
+        $this->expectExceptionMessage('Constant "ReflectionClass::IS_DEPRECATED" does not exist');
+        new \ReflectionConstant('ReflectionClass::IS_DEPRECATED');
+    }
+
+    public function testBuiltInConstant()
+    {
+        $constant = new \ReflectionConstant('E_ERROR');
+        $this->assertSame('E_ERROR', $constant->name);
+        $this->assertSame('E_ERROR', $constant->getName());
+        $this->assertSame('', $constant->getNamespaceName());
+        $this->assertSame('E_ERROR', $constant->getShortName());
+        $this->assertSame(\E_ERROR, $constant->getValue());
+        $this->assertFalse($constant->isDeprecated());
+        $this->assertSame("Constant [ <persistent> int E_ERROR ] { 1 }\n", (string) $constant);
+    }
+
+    public function testUserConstant()
+    {
+        \define('TESTING', 123);
+
+        $constant = new \ReflectionConstant('TESTING');
+        $this->assertSame('TESTING', $constant->name);
+        $this->assertSame('TESTING', $constant->getName());
+        $this->assertSame('', $constant->getNamespaceName());
+        $this->assertSame('TESTING', $constant->getShortName());
+        $this->assertSame(TESTING, $constant->getValue());
+        $this->assertFalse($constant->isDeprecated());
+        $this->assertSame("Constant [ int TESTING ] { 123 }\n", (string) $constant);
+    }
+
+    public function testNamespacedConstant()
+    {
+        $constant = new \ReflectionConstant(EXAMPLE::class);
+        $this->assertSame(EXAMPLE::class, $constant->name);
+        $this->assertSame(EXAMPLE::class, $constant->getName());
+        $this->assertSame(__NAMESPACE__, $constant->getNamespaceName());
+        $this->assertSame('EXAMPLE', $constant->getShortName());
+        $this->assertSame(EXAMPLE, $constant->getValue());
+        $this->assertFalse($constant->isDeprecated());
+        $this->assertSame("Constant [ string Symfony\\Polyfill\\Tests\\Php84\\EXAMPLE ] { Foo }\n", (string) $constant);
+    }
+
+    public function testDeprecated()
+    {
+        $constant = new \ReflectionConstant('MT_RAND_PHP');
+        $this->assertSame('MT_RAND_PHP', $constant->name);
+        $this->assertSame('MT_RAND_PHP', $constant->getName());
+        $this->assertSame('', $constant->getNamespaceName());
+        $this->assertSame('MT_RAND_PHP', $constant->getShortName());
+        $this->assertSame(1, $constant->getValue());
+        if (\PHP_VERSION_ID >= 80300) {
+            $this->assertTrue($constant->isDeprecated());
+            $this->assertSame("Constant [ <persistent, deprecated> int MT_RAND_PHP ] { 1 }\n", (string) $constant);
+        } else {
+            $this->assertFalse($constant->isDeprecated());
+            $this->assertSame("Constant [ <persistent> int MT_RAND_PHP ] { 1 }\n", (string) $constant);
+        }
+    }
+
+    public function testNonStringable()
+    {
+        if (\PHP_VERSION_ID < 80100) {
+            $this->markTestSkipped('Constants can only be objects since PHP 8.1');
+        }
+        $value = new ExampleNonStringable('Testing');
+        \define('NonStringable', $value);
+
+        $constant = new \ReflectionConstant('NonStringable');
+
+        // No error version of expectException()
+        try {
+            (string) $constant;
+            $this->fail('Error should be thrown');
+        } catch (\Error $e) {
+            $this->assertSame("Object of class Symfony\Polyfill\Tests\Php84\ExampleNonStringable could not be converted to string", $e->getMessage());
+        }
+    }
+
+    public function testStringable()
+    {
+        if (\PHP_VERSION_ID < 80100) {
+            $this->markTestSkipped('Constants can only be objects since PHP 8.1');
+        }
+        $value = new ExampleStringable('Testing');
+        \define('IsStringable', $value);
+
+        $constant = new \ReflectionConstant('IsStringable');
+
+        $this->assertSame("Constant [ Symfony\Polyfill\Tests\Php84\ExampleStringable IsStringable ] { ExampleStringable (value=Testing) }\n", (string) $constant);
+    }
+
+    public function testSerialization()
+    {
+        $this->expectException(\Exception::class);
+        $this->expectExceptionMessage("Serialization of 'ReflectionConstant' is not allowed");
+
+        $r = new \ReflectionConstant('PHP_VERSION');
+        serialize($r);
+    }
+
+    public function testUnserialization()
+    {
+        $this->expectException(\Exception::class);
+        $this->expectExceptionMessage("Unserialization of 'ReflectionConstant' is not allowed");
+        unserialize(
+            'O:18:"ReflectionConstant":4:{s:4:"name";'.
+            "s:11:\"PHP_VERSION\";s:25:\"\0ReflectionConstant\0value\";s:6:\"8.3.19\";".
+            "s:30:\"\0ReflectionConstant\0deprecated\";b:0;".
+            "s:30:\"\0ReflectionConstant\0persistent\";b:1;}"
+        );
+    }
+}
diff -pruN 1.31.0-5/tests/Php85/Php85Test.php 1.33.0-2/tests/Php85/Php85Test.php
--- 1.31.0-5/tests/Php85/Php85Test.php	1970-01-01 00:00:00.000000000 +0000
+++ 1.33.0-2/tests/Php85/Php85Test.php	2025-08-19 12:13:28.000000000 +0000
@@ -0,0 +1,130 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Tests\Php85;
+
+use PHPUnit\Framework\TestCase;
+
+class Php85Test extends TestCase
+{
+    /**
+    * @dataProvider provideHandler
+    */
+    public function testGetErrorHandler($expected, $handler): void
+    {
+        set_error_handler($handler);
+        try {
+            $result = get_error_handler();
+        } finally {
+            restore_error_handler();
+        }
+
+        $this->assertSame($expected, $result);
+    }
+
+    public function testErrorStableReturnValue(): void
+    {
+        $this->assertSame(get_error_handler(), get_error_handler());
+    }
+
+    /**
+    * @dataProvider provideHandler
+    */
+    public function testGetExceptionHandler($expected, $handler): void
+    {
+        set_exception_handler($handler);
+        try {
+            $result = get_exception_handler();
+        } finally {
+            restore_exception_handler();
+        }
+
+        $this->assertSame($expected, $result);
+    }
+
+    public function testExceptionStableReturnValue(): void
+    {
+        $this->assertSame(get_exception_handler(), get_exception_handler());
+
+    }
+
+    public static function provideHandler()
+    {
+        // String handler
+        yield ['var_dump', 'var_dump'];
+
+        // Null handler
+        yield [null, null];
+
+        // Static method array handler
+        yield [[TestHandler::class, 'handleStatic'], [TestHandler::class, 'handleStatic']];
+
+        // Static method string handler
+        yield ['Symfony\Polyfill\Tests\Php85\TestHandler::handleStatic', 'Symfony\Polyfill\Tests\Php85\TestHandler::handleStatic'];
+
+        // Instance method array
+        $handler = new TestHandler();
+        yield [[$handler, 'handle'], [$handler, 'handle']];
+
+        // Invokable object
+        $handler = new TestHandlerInvokable();
+        yield [$handler, $handler];
+    }
+
+    public function testArrayFirstArrayLast()
+    {
+        $this->assertNull(array_first([]));
+        $this->assertNull(array_last([]));
+
+        $array = [1, 2, 3];
+        unset($array[0], $array[1], $array[2]);
+
+        $this->assertNull(array_first([]));
+        $this->assertNull(array_last([]));
+
+
+        $this->assertSame('single element', array_first(['single element']));
+        $this->assertSame('single element', array_last(['single element']));
+
+        $str = 'hello world';
+        $this->assertSame($str, array_first([&$str, 1]));
+        $this->assertSame(1, array_last([&$str, 1]));
+
+        $this->assertSame(1, array_first([1, &$str]));
+        $this->assertSame($str, array_last([1, &$str]));
+
+        $this->assertSame(1, array_first([1 => 1, 0 => 0, 3 => 3, 2 => 2]));
+        $this->assertSame(2, array_last([1 => 1, 0 => 0, 3 => 3, 2 => 2]));
+
+        $this->assertSame('a1', array_first(['a' => 'a1', 'b' => 'b1', 'c' => 'c1']));
+        $this->assertSame('c1', array_last(['a' => 'a1', 'b' => 'b1', 'c' => 'c1']));
+
+        $this->assertSame([], array_first([100 => []]));
+        $this->assertSame([], array_last([100 => []]));
+
+        $this->assertEquals(new \stdClass(), array_first([new \stdClass, false]));
+        $this->assertFalse(array_last([new \stdClass, false]));
+
+        $this->assertTrue(array_first([true, new \stdClass]));
+        $this->assertEquals(new \stdClass(), array_last([true, new \stdClass]));
+    }
+}
+
+class TestHandler
+{
+    public static function handleStatic() {}
+    public function handle() {}
+}
+
+class TestHandlerInvokable
+{
+    public function __invoke() {}
+}
diff -pruN 1.31.0-5/tests/update-unidata.php 1.33.0-2/tests/update-unidata.php
--- 1.31.0-5/tests/update-unidata.php	2024-09-09 12:16:23.000000000 +0000
+++ 1.33.0-2/tests/update-unidata.php	2025-08-19 12:13:28.000000000 +0000
@@ -21,7 +21,7 @@ foreach (['UnicodeData.txt', 'Compositio
     file_put_contents(__DIR__.'/unicode/data/'.$file, $data);
 }
 
-$data = file_get_contents('https://github.com/unicode-org/cldr/raw/master/common/transforms/Latin-ASCII.xml');
+$data = file_get_contents('https://github.com/unicode-org/cldr/raw/main/common/transforms/Latin-ASCII.xml');
 file_put_contents(__DIR__.'/unicode/data/Latin-ASCII.xml', $data);
 
 Compiler::translitMap(__DIR__.'/../src/Iconv/Resources/charset/');
