From 720f13017e6c750eba16ad8eb5702995fe419bae Mon Sep 17 00:00:00 2001 From: Lyubomir Popov Date: Thu, 29 Oct 2015 01:40:28 +0200 Subject: [PATCH 001/193] Add Bulgarian translation --- .../Resources/translations/difference.bg.yml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml new file mode 100644 index 0000000..98136c5 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] в момента" + future: "[0,Inf] в момента" +second: + past: "{1} преди %count% секунда|[2,Inf] преди %count% секунди" + future: "{1} след %count% секунда|[2,Inf] след %count% секунди" +minute: + past: "{1} преди %count% минута|[2,Inf] преди %count% минути" + future: "{1} след %count% минута|[2,Inf] след %count% минути" +hour: + past: "{1} преди %count% час|[2,Inf] преди %count% часа" + future: "{1} след %count% час|[2,Inf] след %count% часа" +day: + past: "{1} преди %count% ден|[2,Inf] преди %count% дни" + future: "{1} след %count% ден|[2,Inf] след %count% дни" +week: + past: "{1} преди %count% седмица|[2,Inf] преди %count% седмици" + future: "{1} след %count% седмица|[2,Inf] след %count% седмици" +month: + past: "{1} преди %count% месец|[2,Inf] преди %count% месеца" + future: "{1} след %count% месец|[2,Inf] след %count% месеца" +year: + past: "{1} преди %count% година|[2,Inf] преди %count% години" + future: "{1} след %count% година|[2,Inf] след %count% години" + +compound: + second: "{1} %count% секунда|[2,Inf] %count% секунди" + minute: "{1} %count% минута|[2,Inf] %count% минути" + hour: "{1} %count% час|[2,Inf] %count% часа" + day: "{1} %count% ден|[2,Inf] %count% дни" + week: "{1} %count% седмица|[2,Inf] %count% седмица" + month: "{1} %count% месец|[2,Inf] %count% месеца" + year: "{1} %count% година|[2,Inf] %count% години" + ago: "преди" + from_now: "след" \ No newline at end of file From 7e9ee2e430fd64a13f0b3895dead2b9d98eb2751 Mon Sep 17 00:00:00 2001 From: Dag-Arne Alnes Date: Thu, 29 Oct 2015 09:04:54 +0100 Subject: [PATCH 002/193] Add Norwegian translation --- .../Resources/translations/difference.no.yml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml new file mode 100644 index 0000000..183dfe4 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] akkurat nå" + future: "[0,Inf] akkurat nå" +second: + past: "{1} %count% sekund siden|[2,Inf] %count% sekunder siden" + future: "{1} %count% sekund fra nå|[2,Inf] %count% sekunder fra nå" +minute: + past: "{1} %count% minutt siden|[2,Inf] %count% minutter siden" + future: "{1} %count% minutt fra nå|[2,Inf] %count% minutter fra nå" +hour: + past: "{1} %count% time siden|[2,Inf] %count% timer siden" + future: "{1} %count% time fra nå|[2,Inf] %count% timer fra nå" +day: + past: "{1} %count% dag siden|[2,Inf] %count% dager siden" + future: "{1} %count% dag fra nå|[2,Inf] %count% dager fra nå" +week: + past: "{1} %count% uke siden|[2,Inf] %count% uker siden" + future: "{1} %count% uke fra nå|[2,Inf] %count% uker fra nå" +month: + past: "{1} %count% måned siden|[2,Inf] %count% måneder siden" + future: "{1} %count% måned fra nå|[2,Inf] %count% måneder fra nå" +year: + past: "{1} %count% år siden|[2,Inf] %count% år siden" + future: "{1} %count% år fra nå|[2,Inf] %count% år fra nå" + +compound: + second: "{1} %count% sekund|[2,Inf] %count% sekunder" + minute: "{1} %count% minutt|[2,Inf] %count% minutter" + hour: "{1} %count% time|[2,Inf] %count% timer" + day: "{1} %count% dag|[2,Inf] %count% dager" + week: "{1} %count% uke|[2,Inf] %count% uker" + month: "{1} %count% måned|[2,Inf] %count% måneder" + year: "{1} %count% år|[2,Inf] %count% år" + ago: "siden" + from_now: "fra nå" \ No newline at end of file From 8cdeaef54f759d7e9a93c85cbf9e6e7b63dd6e76 Mon Sep 17 00:00:00 2001 From: Martin Smeeckaert Date: Thu, 29 Oct 2015 10:43:36 +0100 Subject: [PATCH 003/193] truncate html --- README.md | 16 ++++ spec/Coduo/PHPHumanizer/StringSpec.php | 26 +++++++ src/Coduo/PHPHumanizer/String.php | 6 ++ src/Coduo/PHPHumanizer/String/Truncate.php | 21 +++-- .../PHPHumanizer/String/TruncateHtml.php | 77 +++++++++++++++++++ 5 files changed, 138 insertions(+), 8 deletions(-) create mode 100644 src/Coduo/PHPHumanizer/String/TruncateHtml.php diff --git a/README.md b/README.md index 6fc4421..bd6ddc9 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,22 @@ echo String::truncate($text, strlen($text)); // "Lorem ipsum dolorem si amet, lo ``` +**Truncate HTML** + +Truncate and HTML string to word closest to a certain length + +```php +use Coduo\PHPHumanizer\String; + +$text = '

HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create web pages.[1] Web browsers can read HTML files and render them into visible or audible web pages. HTML describes the structure of a website semantically along with cues for presentation, making it a markup language, rather than a programming language.

'; + +echo String::truncateHtml($text, 3); // "HyperText" +echo String::truncateHtml($text, 12, ''); // "HyperText Markup" +echo String::truncateHtml($text, 50, '', '...); // "HyperText Markup Language, commonly referred to as..." +echo String::truncateHtml($text, 75, '', '...'); // 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...' + +``` + ## Number **Ordinalize** diff --git a/spec/Coduo/PHPHumanizer/StringSpec.php b/spec/Coduo/PHPHumanizer/StringSpec.php index 767fbc9..4ef21a6 100644 --- a/spec/Coduo/PHPHumanizer/StringSpec.php +++ b/spec/Coduo/PHPHumanizer/StringSpec.php @@ -33,4 +33,30 @@ function it_truncate_string_to_word_closest_to_a_certain_number_of_characters() $this->truncate($text, 0, '...')->shouldReturn("Lorem..."); $this->truncate($text, -2)->shouldReturn($text); } + + + function it_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags() + { + $text = '

HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create web pages.[1] Web browsers can read HTML files and render them into visible or audible web pages. HTML describes the structure of a website semantically along with cues for presentation, making it a markup language, rather than a programming language.

'; + + + // Test with allowed tags + $this->truncateHtml($text, 3)->shouldReturn("HyperText"); + $this->truncateHtml($text, 12)->shouldReturn("HyperText Markup"); + $this->truncateHtml($text, 50)->shouldReturn("HyperText Markup Language, commonly referred to as"); + $this->truncateHtml($text, 75)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup'); + $this->truncateHtml($text, 100)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'); + + // Test without tags + + $this->truncateHtml($text, 3, '')->shouldReturn("HyperText"); + $this->truncateHtml($text, 12, '')->shouldReturn("HyperText Markup"); + $this->truncateHtml($text, 50, '')->shouldReturn("HyperText Markup Language, commonly referred to as"); + $this->truncateHtml($text, 75, '')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup'); + $this->truncateHtml($text, 100, '')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'); + + // Test with append + $this->truncateHtml($text, 50, '', '...')->shouldReturn("HyperText Markup Language, commonly referred to as..."); + $this->truncateHtml($text, 75, '', '...')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup...'); + } } diff --git a/src/Coduo/PHPHumanizer/String.php b/src/Coduo/PHPHumanizer/String.php index a9a268b..de8b68c 100644 --- a/src/Coduo/PHPHumanizer/String.php +++ b/src/Coduo/PHPHumanizer/String.php @@ -4,6 +4,7 @@ use Coduo\PHPHumanizer\String\Humanize; use Coduo\PHPHumanizer\String\Truncate; +use Coduo\PHPHumanizer\String\TruncateHtml; class String { @@ -16,4 +17,9 @@ public static function truncate($text, $charactersCount, $append = '') { return (string) new Truncate($text, $charactersCount, $append); } + + public static function truncateHtml($text, $charactersCount, $allowedTags = '', $append = '') + { + return (string) new TruncateHtml($text, $charactersCount, $allowedTags, $append); + } } diff --git a/src/Coduo/PHPHumanizer/String/Truncate.php b/src/Coduo/PHPHumanizer/String/Truncate.php index e063468..2d1932c 100644 --- a/src/Coduo/PHPHumanizer/String/Truncate.php +++ b/src/Coduo/PHPHumanizer/String/Truncate.php @@ -7,17 +7,17 @@ class Truncate /** * @var string */ - private $text; + protected $text; /** * @var int */ - private $charactersCount; + protected $charactersCount; /** * @var string */ - private $append; + protected $append; /** * @param string $text @@ -31,17 +31,22 @@ public function __construct($text, $charactersCount, $append = '') $this->append = $append; } + protected function breakpoint($text, $charCount) + { + $length = $charCount; + if (false !== ($breakpoint = mb_strpos($text, ' ', $charCount))) { + $length = $breakpoint; + } + return $length; + } + public function __toString() { if ($this->charactersCount < 0 || strlen($this->text) <= $this->charactersCount) { return $this->text; } - $length = $this->charactersCount; - if (false !== ($breakpoint = mb_strpos($this->text, ' ', $this->charactersCount))) { - $length = $breakpoint; - } - + $length = $this->breakpoint($this->text, $this->charactersCount); return rtrim(mb_substr($this->text, 0, $length)) . $this->append; } } diff --git a/src/Coduo/PHPHumanizer/String/TruncateHtml.php b/src/Coduo/PHPHumanizer/String/TruncateHtml.php new file mode 100644 index 0000000..d452d94 --- /dev/null +++ b/src/Coduo/PHPHumanizer/String/TruncateHtml.php @@ -0,0 +1,77 @@ +', $append = '') + { + $this->text = $text; + $this->charactersCount = $charactersCount; + $this->append = $append; + $this->allowedTags = $allowedTags; + } + + /** + * Truncates a string to the given length. It will optionally preserve + * HTML tags if $is_html is set to true. + * + * Adapted from FuelPHP Str::truncate (https://github.com/fuelphp/common/blob/master/src/Str.php) + * + * @param string $string + * + * @return string the truncated string + */ + protected function truncateHtml($string) + { + $limit = $this->charactersCount; + $continuation = $this->append; + $offset = 0; + $tags = array(); + // Handle special characters. + preg_match_all('/&[a-z]+;/i', strip_tags($string), $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + foreach ($matches as $match) { + if ($match[0][1] >= $limit) { + break; + } + $limit += (mb_strlen($match[0][0]) - 1); + } + + // Handle all the html tags. + preg_match_all('/<[^>]+>([^<]*)/', $string, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + foreach ($matches as $match) { + if ($match[0][1] - $offset >= $limit) { + break; + } + $tag = mb_substr(strtok($match[0][0], " \t\n\r\0\x0B>"), 1); + if ($tag[0] != '/') { + $tags[] = $tag; + } elseif (end($tags) == mb_substr($tag, 1)) { + array_pop($tags); + } + $offset += $match[1][1] - $match[0][1]; + } + + $new_string = mb_substr($string, 0, $limit = min(mb_strlen($string), $this->breakpoint($string, $limit + $offset))); + $new_string .= (mb_strlen($string) > $limit ? $continuation : ''); + $new_string .= (count($tags = array_reverse($tags)) ? '' : ''); + return $new_string; + } + + public function __toString() + { + $string = strip_tags($this->text, $this->allowedTags); + return $this->truncateHtml($string); + } +} From 3c3b830fad0f6e436a08b3f1adf20334a6a77604 Mon Sep 17 00:00:00 2001 From: Martin Smeeckaert Date: Thu, 29 Oct 2015 10:44:48 +0100 Subject: [PATCH 004/193] fix doc --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bd6ddc9..155d87b 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ $text = '

HyperText Markup Language, commonly referred to as HTMLHyperText" echo String::truncateHtml($text, 12, ''); // "HyperText Markup" -echo String::truncateHtml($text, 50, '', '...); // "HyperText Markup Language, commonly referred to as..." +echo String::truncateHtml($text, 50, '', '...'); // "HyperText Markup Language, commonly referred to as..." echo String::truncateHtml($text, 75, '', '...'); // 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...' ``` From c697c4c21b3538dbab363326497f19790f74f025 Mon Sep 17 00:00:00 2001 From: Dag-Arne Alnes Date: Thu, 29 Oct 2015 14:12:24 +0100 Subject: [PATCH 005/193] Added Norwegian locale specs --- spec/Coduo/PHPHumanizer/DateTimeSpec.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/spec/Coduo/PHPHumanizer/DateTimeSpec.php b/spec/Coduo/PHPHumanizer/DateTimeSpec.php index ead80e9..6d25ea7 100644 --- a/spec/Coduo/PHPHumanizer/DateTimeSpec.php +++ b/spec/Coduo/PHPHumanizer/DateTimeSpec.php @@ -189,4 +189,21 @@ function it_humanizes_precise_difference_between_dates_for_it_locale() $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'it')->shouldReturn($example[2]); } } + + function it_humanizes_precise_difference_between_dates_for_no_locale() + { + $examples = array( + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minutt, 45 sekunder siden'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 time, 40 minutter siden'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 dag, 15 minutter fra nå'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 dager, 2 timer fra nå'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 år, 2 dager, 4 timer fra nå'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 dager, 10 timer fra nå'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 dag, 1 time, 40 minutter siden'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 år, 1 dag fra nå'), + ); + foreach ($examples as $example) { + $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'no')->shouldReturn($example[2]); + } + } } From c14d2113e8949910dca2f5477e586d4811d68973 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rio=20Franco?= Date: Thu, 29 Oct 2015 14:23:06 +0000 Subject: [PATCH 006/193] Addition of Portuguese (pt) language translation (with spec tests) --- spec/Coduo/PHPHumanizer/DateTimeSpec.php | 45 +++++++++++++++++++ .../Resources/translations/difference.pt.yml | 35 +++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml diff --git a/spec/Coduo/PHPHumanizer/DateTimeSpec.php b/spec/Coduo/PHPHumanizer/DateTimeSpec.php index aba5e42..20a79a0 100644 --- a/spec/Coduo/PHPHumanizer/DateTimeSpec.php +++ b/spec/Coduo/PHPHumanizer/DateTimeSpec.php @@ -94,6 +94,33 @@ function it_humanize_difference_between_dates_for_af_locale() } } + function it_humanize_difference_between_dates_for_pt_locale() + { + $examples = array( + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'agora'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", '5 segundos a partir de agora'), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 minuto atrás'), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 minutos atrás'), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", '15 minutos a partir de agora'), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", '1 hora a partir de agora'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", '2 horas a partir de agora'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 hora atrás'), + array("2014-04-26", "2014-04-25", '1 dia atrás'), + array("2014-04-26", "2014-04-24", '2 dias atrás'), + array("2014-04-26", "2014-04-28", '2 dias a partir de agora'), + array("2014-04-01", "2014-04-15", '2 semanas a partir de agora'), + array("2014-04-15", "2014-04-07", '1 semana atrás'), + array("2014-01-01", "2014-04-01", '3 meses a partir de agora'), + array("2014-05-01", "2014-04-01", '1 mês atrás'), + array("2015-05-01", "2014-04-01", '1 ano atrás'), + array("2014-05-01", "2016-04-01", '2 anos a partir de agora'), + ); + + foreach ($examples as $example) { + $this->difference(new \DateTime($example[0]), new \DateTime($example[1]), 'pt')->shouldReturn($example[2]); + } + } + function it_humanizes_precise_difference_between_dates() { $examples = array( @@ -202,6 +229,24 @@ function it_humanizes_precise_difference_between_dates_for_fr_locale() } } + function it_humanizes_precise_difference_between_dates_for_pt_locale() + { + $examples = array( + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuto, 45 segundos atrás'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 hora, 40 minutos atrás'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 dia, 15 minutos a partir de agora'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 dias, 2 horas a partir de agora'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 ano, 2 dias, 4 horas a partir de agora'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 dias, 10 horas a partir de agora'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 dia, 1 hora, 40 minutos atrás'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 anos, 1 dia a partir de agora'), + ); + + foreach ($examples as $example) { + $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'pt_BR')->shouldReturn($example[2]); + } + } + function it_humanizes_precise_difference_between_dates_for_pt_BR_locale() { $examples = array( diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml new file mode 100644 index 0000000..b542d13 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] agora" + future: "[0,Inf] agora" +second: + past: "{1} %count% segundo atrás|[2,Inf] %count% segundos atrás" + future: "{1} %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora" +minute: + past: "{1} %count% minuto atrás|[2,Inf] %count% minutos atrás" + future: "{1} %count% minuto a partir de agora|[2,Inf] %count% minutos a partir de agora" +hour: + past: "{1} %count% hora atrás|[2,Inf] %count% horas atrás" + future: "{1} %count% hora a partir de agora|[2,Inf] %count% horas a partir de agora" +day: + past: "{1} %count% dia atrás|[2,Inf] %count% dias atrás" + future: "{1} %count% dia a partir de agora|[2,Inf] %count% dias a partir de agora" +week: + past: "{1} %count% semana atrás|[2,Inf] %count% semanas atrás" + future: "{1} %count% semana a partir de agora|[2,Inf] %count% semanas a partir de agora" +month: + past: "{1} %count% mês atrás|[2,Inf] %count% meses atrás" + future: "{1} %count% mês a partir de agora|[2,Inf] %count% meses a partir de agora" +year: + past: "{1} %count% ano atrás|[2,Inf] %count% anos atrás" + future: "{1} %count% ano a partir de agora|[2,Inf] %count% anos a partir de agora" + +compound: + second: "{1} %count% segundo|[2,Inf] %count% segundos" + minute: "{1} %count% minuto|[2,Inf] %count% minutos" + hour: "{1} %count% hora|[2,Inf] %count% horas" + day: "{1} %count% dia|[2,Inf] %count% dias" + week: "{1} %count% semana|[2,Inf] %count% semana" + month: "{1} %count% mês|[2,Inf] %count% meses" + year: "{1} %count% ano|[2,Inf] %count% anos" + ago: "atrás" + from_now: "a partir de agora" From 9eee3f5d88280fe7e0d90c0a2cb36b6b768874ce Mon Sep 17 00:00:00 2001 From: Michal Dabrowski Date: Tue, 27 Oct 2015 13:54:37 +0100 Subject: [PATCH 007/193] Oxford collection Updating comma Updating readme --- README.md | 14 +++ .../PHPHumanizer/Collection/FormatterSpec.php | 48 +++++++++ .../PHPHumanizer/Collection/OxfordSpec.php | 45 ++++++++ spec/Coduo/PHPHumanizer/CollectionSpec.php | 38 +++++++ src/Coduo/PHPHumanizer/Collection.php | 19 ++++ .../PHPHumanizer/Collection/Formatter.php | 102 ++++++++++++++++++ src/Coduo/PHPHumanizer/Collection/Oxford.php | 21 ++++ src/Coduo/PHPHumanizer/DateTime.php | 2 + .../PHPHumanizer/DateTime/Difference.php | 3 +- .../DateTime/Difference/CompoundResult.php | 1 - src/Coduo/PHPHumanizer/DateTime/Formatter.php | 3 +- .../DateTime/PreciseDifference.php | 4 +- .../DateTime/PreciseFormatter.php | 10 +- src/Coduo/PHPHumanizer/DateTime/Unit.php | 2 +- src/Coduo/PHPHumanizer/DateTime/Unit/Day.php | 1 + src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php | 1 + .../PHPHumanizer/DateTime/Unit/Month.php | 1 + src/Coduo/PHPHumanizer/DateTime/Unit/Week.php | 1 + src/Coduo/PHPHumanizer/DateTime/Unit/Year.php | 1 + src/Coduo/PHPHumanizer/Number.php | 6 +- src/Coduo/PHPHumanizer/Number/Ordinal.php | 6 +- .../PHPHumanizer/Number/RomanNumeral.php | 38 ++++--- .../Resources/translations/oxford.en.yml | 3 + .../Resources/translations/oxford.pl.yml | 3 + .../PHPHumanizer/String/BinarySuffix.php | 5 +- src/Coduo/PHPHumanizer/String/Humanize.php | 6 +- .../PHPHumanizer/String/MetricSuffix.php | 5 +- src/Coduo/PHPHumanizer/String/Truncate.php | 4 +- src/Coduo/PHPHumanizer/Translator/Builder.php | 4 +- 29 files changed, 351 insertions(+), 46 deletions(-) create mode 100644 spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php create mode 100644 spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php create mode 100644 spec/Coduo/PHPHumanizer/CollectionSpec.php create mode 100644 src/Coduo/PHPHumanizer/Collection.php create mode 100644 src/Coduo/PHPHumanizer/Collection/Formatter.php create mode 100644 src/Coduo/PHPHumanizer/Collection/Oxford.php create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.en.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.yml diff --git a/README.md b/README.md index dcfd62f..f0261db 100644 --- a/README.md +++ b/README.md @@ -137,6 +137,20 @@ use Coduo\PHPHumanizer\Number; echo Number::metricSuffix(1240000, 'pl'); // "1,24M" ``` +## Collections + +**Oxford** + +```php +use Coduo\PHPHumanizer\Collection; + +echo Collection::oxford(['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2); // "Michal, Norbert, and 2 others" +echo Collection::oxford(['Michal', 'Norbert', 'Lukasz'], 2); // "Michal, Norbert, and 1 other" +echo Collection::oxford(['Michal', 'Norbert']); // "Michal and Norbert" +``` + +Oxford is using translator component, so you can use whatever string format you like. + ## Date time **Difference** diff --git a/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php b/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php new file mode 100644 index 0000000..81164ef --- /dev/null +++ b/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php @@ -0,0 +1,48 @@ +beConstructedWith($translator); + $translator->trans( + 'only_two', + array('%first%' => 'Michal', '%second%' => 'Norbert'), + 'oxford' + )->willReturn('Michal and Norbert'); + + $translator->transChoice( + 'comma_separated_with_limit', + 1, + array('%count%' => 1, "%list%" => 'Michal, Norbert'), + 'oxford' + )->willReturn('Michal, Norbert and 1 more'); + + $translator->trans( + 'comma_separated', + array("%list%" => 'Michal, Norbert', '%last%' => "Lukasz"), + 'oxford' + )->willReturn('Michal, Norbert and Lukasz'); + } + + function it_formats_two_elements() + { + $this->format(array("Michal", "Norbert"), null)->shouldReturn("Michal and Norbert"); + } + + function it_formats_elements_with_limit() + { + $this->format(array("Michal", "Norbert", "Lukasz"), 2)->shouldReturn("Michal, Norbert and 1 more"); + } + + function it_formats_elements_without_limit() + { + $this->format(array("Michal", "Norbert", "Lukasz"), null)->shouldReturn("Michal, Norbert and Lukasz"); + } +} diff --git a/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php b/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php new file mode 100644 index 0000000..0a6b56f --- /dev/null +++ b/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php @@ -0,0 +1,45 @@ +formatter = new Formatter( + $translator->getWrappedObject() + ); + $this->beConstructedWith($this->formatter); + } + function it_returns_empty_string_when_collection_is_empty() + { + $this->format(array())->shouldReturn(''); + } + + function it_returns_collection_item_string_when_collection_has_one_element() + { + $this->format(array(new CollectionItem("Michal")))->shouldReturn('Michal'); + } +} + +class CollectionItem +{ + private $name; + + public function __construct($name) + { + $this->name = $name; + } + + public function __toString() + { + return $this->name; + } +} diff --git a/spec/Coduo/PHPHumanizer/CollectionSpec.php b/spec/Coduo/PHPHumanizer/CollectionSpec.php new file mode 100644 index 0000000..709b137 --- /dev/null +++ b/spec/Coduo/PHPHumanizer/CollectionSpec.php @@ -0,0 +1,38 @@ +oxford($example[0], $example[1])->shouldReturn($example[2]); + } + } + + function it_humanizes_collections_for_polish_locale() + { + $examples = array( + array(array("Michal"), null, 'Michal'), + array(array("Michal", "Norbert"), null, 'Michal i Norbert'), + array(array("Michal", "Norbert", "Lukasz"), 2, 'Michal, Norbert i 1 inny'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'Michal, Norbert i 2 innych'), + ); + + foreach ($examples as $example) { + $this->oxford($example[0], $example[1], 'pl')->shouldReturn($example[2]); + } + } +} diff --git a/src/Coduo/PHPHumanizer/Collection.php b/src/Coduo/PHPHumanizer/Collection.php new file mode 100644 index 0000000..101e013 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Collection.php @@ -0,0 +1,19 @@ +format($collection, $limit); + } +} diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php new file mode 100644 index 0000000..4a6a699 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -0,0 +1,102 @@ +translator = $translator; + $this->catalogue = $catalogue; + } + + public function format($collection, $limit = null) + { + $count = count($collection); + + if (0 === $count) { + return ''; + } + + if (1 === $count) { + return (string) $collection[0]; + } + + if (2 === $count) { + return $this->formatOnlyTwo($collection); + } + + if (null !== $limit) { + return $this->formatCommaSeparatedWithLimit($collection, $limit, $count); + } + + return $this->formatCommaSeparated($collection, $count); + } + + /** + * @param $collection + * @param $limit + * @param $count + * + * @return string + */ + private function formatCommaSeparatedWithLimit($collection, $limit, $count) + { + $display = array_map(function ($element) { + return (string) $element; + }, array_slice($collection, 0, $limit)); + + $moreCount = $count - count($display); + + return $this->translator->transChoice('comma_separated_with_limit', $moreCount, array( + '%list%' => implode(', ', $display), + '%count%' => $moreCount, + ), $this->catalogue); + } + + /** + * @param $collection + * @param $count + * + * @return string + */ + private function formatCommaSeparated($collection, $count) + { + $display = array_map(function ($element) { + return (string) $element; + }, array_slice($collection, 0, $count - 1)); + + return $this->translator->trans('comma_separated', array( + '%list%' => implode(', ', $display), + '%last%' => (string) end($collection), + ), $this->catalogue); + } + + /** + * @param $collection + * + * @return string + */ + private function formatOnlyTwo($collection) + { + return $this->translator->trans('only_two', array( + '%first%' => (string) $collection[0], + '%second%' => (string) $collection[1], + ), $this->catalogue); + } +} diff --git a/src/Coduo/PHPHumanizer/Collection/Oxford.php b/src/Coduo/PHPHumanizer/Collection/Oxford.php new file mode 100644 index 0000000..47d89f2 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Collection/Oxford.php @@ -0,0 +1,21 @@ +formatter = $formatter; + } + + public function format($collection, $limit = null) + { + return $this->formatter->format($collection, $limit); + } +} diff --git a/src/Coduo/PHPHumanizer/DateTime.php b/src/Coduo/PHPHumanizer/DateTime.php index 4954da6..88b6aa3 100644 --- a/src/Coduo/PHPHumanizer/DateTime.php +++ b/src/Coduo/PHPHumanizer/DateTime.php @@ -13,12 +13,14 @@ class DateTime public static function difference(\DateTime $fromDate, \DateTime $toDate, $locale = 'en') { $formatter = new Formatter(Builder::build($locale)); + return $formatter->formatDifference(new Difference($fromDate, $toDate), $locale); } public static function preciseDifference(\DateTime $fromDate, \DateTime $toDate, $locale = 'en') { $formatter = new PreciseFormatter(Builder::build($locale)); + return $formatter->formatDifference(new PreciseDifference($fromDate, $toDate), $locale); } } diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference.php b/src/Coduo/PHPHumanizer/DateTime/Difference.php index 0084d02..a703081 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference.php @@ -67,7 +67,7 @@ private function calculate() new Hour(), new Minute(), new Second(), - new JustNow() + new JustNow(), ); $absoluteMilliSecondsDiff = abs($this->toDate->getTimestamp() - $this->fromDate->getTimestamp()) * 1000; @@ -86,6 +86,7 @@ private function calculate() public function isPast() { $diff = $this->toDate->getTimestamp() - $this->fromDate->getTimestamp(); + return ($diff > 0) ? false : true; } } diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php index 2d7a230..af77a35 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php @@ -49,5 +49,4 @@ public function getUnit() { return $this->unit; } - } diff --git a/src/Coduo/PHPHumanizer/DateTime/Formatter.php b/src/Coduo/PHPHumanizer/DateTime/Formatter.php index fc6b692..8b0ec7b 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Formatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/Formatter.php @@ -21,7 +21,8 @@ public function __construct(TranslatorInterface $translator) /** * @param Difference $difference - * @param string $locale + * @param string $locale + * * @return string */ public function formatDifference(Difference $difference, $locale = 'en') diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php index 387c341..9425d8e 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php @@ -4,11 +4,9 @@ use Coduo\PHPHumanizer\DateTime\Unit\Day; use Coduo\PHPHumanizer\DateTime\Unit\Hour; -use Coduo\PHPHumanizer\DateTime\Unit\JustNow; use Coduo\PHPHumanizer\DateTime\Unit\Minute; use Coduo\PHPHumanizer\DateTime\Unit\Month; use Coduo\PHPHumanizer\DateTime\Unit\Second; -use Coduo\PHPHumanizer\DateTime\Unit\Week; use Coduo\PHPHumanizer\DateTime\Unit\Year; use Coduo\PHPHumanizer\DateTime\Difference\CompoundResult; @@ -64,7 +62,6 @@ private function calculate() $diff = $this->fromDate->diff($this->toDate); foreach ($units as $unit) { - if ($diff->{$unit->getDateIntervalSymbol()} > 0) { $this->units[] = $unit; $this->compoundResults[] = new CompoundResult($unit, $diff->{$unit->getDateIntervalSymbol()}); @@ -75,6 +72,7 @@ private function calculate() public function isPast() { $diff = $this->toDate->getTimestamp() - $this->fromDate->getTimestamp(); + return ($diff > 0) ? false : true; } } diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index 2117bdc..251a93c 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -21,7 +21,8 @@ public function __construct(TranslatorInterface $translator) /** * @param PreciseDifference $difference - * @param string $locale + * @param string $locale + * * @return string */ public function formatDifference(PreciseDifference $difference, $locale = 'en') @@ -29,17 +30,16 @@ public function formatDifference(PreciseDifference $difference, $locale = 'en') $diff = array(); foreach ($difference->getCompoundResults() as $result) { - $diff[] = $this->translator->transChoice( - "compound." . $result->getUnit()->getName(), + 'compound.'.$result->getUnit()->getName(), $result->getQuantity(), array('%count%' => $result->getQuantity()), 'difference', $locale ); - } $suffix = $difference->isPast() ? 'compound.ago' : 'compound.from_now'; - return join(", ", $diff) . ' '. $this->translator->trans($suffix, array(), 'difference', $locale); + + return implode(', ', $diff).' '.$this->translator->trans($suffix, array(), 'difference', $locale); } } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit.php b/src/Coduo/PHPHumanizer/DateTime/Unit.php index 34caf09..75681f5 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit.php @@ -17,7 +17,7 @@ public function getName(); public function getMilliseconds(); /** - * Returns symbol of \DateInterval equivalent + * Returns symbol of \DateInterval equivalent. * * @return string */ diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php index fec6329..fe12aad 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php @@ -17,6 +17,7 @@ public function getName() public function getMilliseconds() { $hour = new Hour(); + return $hour->getMilliseconds() * 24; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php index 2dac8c9..dd33269 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php @@ -17,6 +17,7 @@ public function getName() public function getMilliseconds() { $minute = new Minute(); + return $minute->getMilliseconds() * 60; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php index 50e4ca8..8f94e68 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php @@ -17,6 +17,7 @@ public function getName() public function getMilliseconds() { $day = new Day(); + return $day->getMilliseconds() * 30; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php index 0bd4921..a35f188 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php @@ -17,6 +17,7 @@ public function getName() public function getMilliseconds() { $day = new Day(); + return $day->getMilliseconds() * 7; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php index 61c3e09..d2185a0 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php @@ -17,6 +17,7 @@ public function getName() public function getMilliseconds() { $day = new Day(); + return $day->getMilliseconds() * 356; } diff --git a/src/Coduo/PHPHumanizer/Number.php b/src/Coduo/PHPHumanizer/Number.php index 9ad0c81..560ed86 100644 --- a/src/Coduo/PHPHumanizer/Number.php +++ b/src/Coduo/PHPHumanizer/Number.php @@ -11,7 +11,7 @@ class Number { public static function ordinalize($number) { - return $number . self::ordinal($number); + return $number.self::ordinal($number); } public static function ordinal($number) @@ -22,24 +22,28 @@ public static function ordinal($number) public static function binarySuffix($number, $locale = 'en') { $binarySuffix = new BinarySuffix($number, $locale); + return $binarySuffix->convert(); } public static function metricSuffix($number, $locale = 'en') { $binarySuffix = new MetricSuffix($number, $locale); + return $binarySuffix->convert(); } public static function toRoman($number) { $romanNumeral = new RomanNumeral(); + return $romanNumeral->toRoman($number); } public function fromRoman($number) { $romanNumeral = new RomanNumeral(); + return $romanNumeral->fromRoman($number); } } diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal.php b/src/Coduo/PHPHumanizer/Number/Ordinal.php index 21a2ca6..f1ae6be 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal.php @@ -5,12 +5,12 @@ class Ordinal { /** - * @var int|double + * @var int|float */ private $number; /** - * @param int|double $number + * @param int|float $number */ public function __construct($number) { @@ -21,7 +21,7 @@ public function __toString() { $absNumber = abs((integer) $this->number); - if (in_array(($absNumber % 100), array(11,12,13))) { + if (in_array(($absNumber % 100), array(11, 12, 13))) { return 'th'; } diff --git a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php index b568d7e..8b75359 100644 --- a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php +++ b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php @@ -6,28 +6,29 @@ class RomanNumeral { const MIN_VALUE = 1; const MAX_VALUE = 3999; - const ROMAN_STRING_MATCHER = "/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/"; + const ROMAN_STRING_MATCHER = '/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/'; private $map = array( - 'M' => 1000, + 'M' => 1000, 'CM' => 900, - 'D' => 500, + 'D' => 500, 'CD' => 400, - 'C' => 100, + 'C' => 100, 'XC' => 90, - 'L' => 50, + 'L' => 50, 'XL' => 40, - 'X' => 10, + 'X' => 10, 'IX' => 9, - 'V' => 5, + 'V' => 5, 'IV' => 4, - 'I' => 1 + 'I' => 1, ); - /** * @param $number + * * @return string + * * @throws \InvalidArgumentException */ public function toRoman($number) @@ -38,12 +39,9 @@ public function toRoman($number) $romanString = ''; - while($number > 0) - { - foreach($this->map as $key => $value) - { - if($number >= $value) - { + while ($number > 0) { + foreach ($this->map as $key => $value) { + if ($number >= $value) { $romanString .= $key; $number -= $value; break; @@ -56,7 +54,9 @@ public function toRoman($number) /** * @param $string + * * @return int + * * @throws \InvalidArgumentException */ public function fromRoman($string) @@ -66,10 +66,9 @@ public function fromRoman($string) } $total = 0; - $i = strlen($string); + $i = strlen($string); - while ($i > 0) - { + while ($i > 0) { $digit = $this->map[$string{--$i}]; if ($i > 0) { @@ -77,7 +76,7 @@ public function fromRoman($string) if ($previousDigit < $digit) { $digit -= $previousDigit; - $i--; + --$i; } } @@ -86,5 +85,4 @@ public function fromRoman($string) return $total; } - } diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.en.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.en.yml new file mode 100644 index 0000000..22eb5cf --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.en.yml @@ -0,0 +1,3 @@ +only_two: "%first% and %second%" +comma_separated: "%list%, and %last%" +comma_separated_with_limit: "{1} %list%, and 1 other|[2,Inf] %list%, and %count% others" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.yml new file mode 100644 index 0000000..6a999c0 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.yml @@ -0,0 +1,3 @@ +only_two: "%first% i %second%" +comma_separated: "%list% i %last%" +comma_separated_with_limit: "{1} %list% i 1 inny|[2,Inf] %list% i %count% innych" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index a718888..446f642 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -25,18 +25,19 @@ class BinarySuffix 1073741824 => '#.## GB', 1048576 => '#.## MB', 1024 => '#.# kB', - 0 => '# bytes' + 0 => '# bytes', ); /** * @param $number * @param string $locale + * * @throws \InvalidArgumentException */ public function __construct($number, $locale = 'en') { if (!is_numeric($number)) { - throw new \InvalidArgumentException("Binary suffix converter accept only numeric values."); + throw new \InvalidArgumentException('Binary suffix converter accept only numeric values.'); } $this->number = (int) $number; diff --git a/src/Coduo/PHPHumanizer/String/Humanize.php b/src/Coduo/PHPHumanizer/String/Humanize.php index 5c2f7ea..3ec9c58 100644 --- a/src/Coduo/PHPHumanizer/String/Humanize.php +++ b/src/Coduo/PHPHumanizer/String/Humanize.php @@ -15,7 +15,7 @@ class Humanize private $text; /** - * @var boolean + * @var bool */ private $capitalize; @@ -31,12 +31,14 @@ public function __construct($text, $capitalize = true) /** * @internal param bool $capitalize + * * @return string */ public function __toString() { $humanized = trim(strtolower(preg_replace(array('/([A-Z])/', '/[_\s]+/'), array('_$1', ' '), $this->text))); - $humanized = trim(str_replace($this->forbiddenWords, "", $humanized)); + $humanized = trim(str_replace($this->forbiddenWords, '', $humanized)); + return $this->capitalize ? ucfirst($humanized) : $humanized; } } diff --git a/src/Coduo/PHPHumanizer/String/MetricSuffix.php b/src/Coduo/PHPHumanizer/String/MetricSuffix.php index 5749712..513ddac 100644 --- a/src/Coduo/PHPHumanizer/String/MetricSuffix.php +++ b/src/Coduo/PHPHumanizer/String/MetricSuffix.php @@ -25,18 +25,19 @@ class MetricSuffix 1000000000 => '#.##G', 1000000 => '#.##M', 1000 => '#.#k', - 0 => '#.#' + 0 => '#.#', ); /** * @param $number * @param string $locale + * * @throws \InvalidArgumentException */ public function __construct($number, $locale = 'en') { if (!is_numeric($number)) { - throw new \InvalidArgumentException("Metric suffix converter accept only numeric values."); + throw new \InvalidArgumentException('Metric suffix converter accept only numeric values.'); } $this->number = (int) $number; diff --git a/src/Coduo/PHPHumanizer/String/Truncate.php b/src/Coduo/PHPHumanizer/String/Truncate.php index e063468..9bbd369 100644 --- a/src/Coduo/PHPHumanizer/String/Truncate.php +++ b/src/Coduo/PHPHumanizer/String/Truncate.php @@ -21,7 +21,7 @@ class Truncate /** * @param string $text - * @param int $charactersCount + * @param int $charactersCount * @param string $append */ public function __construct($text, $charactersCount, $append = '') @@ -42,6 +42,6 @@ public function __toString() $length = $breakpoint; } - return rtrim(mb_substr($this->text, 0, $length)) . $this->append; + return rtrim(mb_substr($this->text, 0, $length)).$this->append; } } diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index 79e4809..7131ed1 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -12,10 +12,10 @@ public static function build($locale) $translator = new Translator($locale); $translator->addLoader('yml', new YamlFileLoader()); - $iterator = new \FilesystemIterator(__DIR__ . "/../Resources/translations"); + $iterator = new \FilesystemIterator(__DIR__.'/../Resources/translations'); $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.yml$/'); - foreach($filter as $file) { + foreach ($filter as $file) { /* @var $file \SplFileInfo */ $resourceName = $file->getBasename('.yml'); list($fileDomain, $fileLocale) = explode('.', $resourceName); From 86827647146db6fa403602df8ab4df142de58d25 Mon Sep 17 00:00:00 2001 From: Martin Smeeckaert Date: Thu, 29 Oct 2015 17:59:58 +0100 Subject: [PATCH 008/193] fix append size --- spec/Coduo/PHPHumanizer/StringSpec.php | 6 ++++++ src/Coduo/PHPHumanizer/String/Truncate.php | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/spec/Coduo/PHPHumanizer/StringSpec.php b/spec/Coduo/PHPHumanizer/StringSpec.php index 767fbc9..a874429 100644 --- a/spec/Coduo/PHPHumanizer/StringSpec.php +++ b/spec/Coduo/PHPHumanizer/StringSpec.php @@ -32,5 +32,11 @@ function it_truncate_string_to_word_closest_to_a_certain_number_of_characters() $this->truncate($text, 0)->shouldReturn("Lorem"); $this->truncate($text, 0, '...')->shouldReturn("Lorem..."); $this->truncate($text, -2)->shouldReturn($text); + + $textShort = 'Short text'; + $this->truncate($textShort, 4, '...')->shouldReturn("Short..."); + $this->truncate($textShort, 5, '...')->shouldReturn("Short..."); + $this->truncate($textShort, 6, '...')->shouldReturn("Short..."); + $this->truncate($textShort, 7, '...')->shouldReturn("Short text"); } } diff --git a/src/Coduo/PHPHumanizer/String/Truncate.php b/src/Coduo/PHPHumanizer/String/Truncate.php index e063468..e67fbf5 100644 --- a/src/Coduo/PHPHumanizer/String/Truncate.php +++ b/src/Coduo/PHPHumanizer/String/Truncate.php @@ -33,7 +33,7 @@ public function __construct($text, $charactersCount, $append = '') public function __toString() { - if ($this->charactersCount < 0 || strlen($this->text) <= $this->charactersCount) { + if ($this->charactersCount < 0 || strlen($this->text) <= ($this->charactersCount + mb_strlen($this->append))) { return $this->text; } From 2e657b5ec0b54289610f8f94d3fb0bca09f4cdc2 Mon Sep 17 00:00:00 2001 From: Martin Smeeckaert Date: Thu, 29 Oct 2015 18:01:31 +0100 Subject: [PATCH 009/193] more tests --- spec/Coduo/PHPHumanizer/StringSpec.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/spec/Coduo/PHPHumanizer/StringSpec.php b/spec/Coduo/PHPHumanizer/StringSpec.php index a874429..0143dc2 100644 --- a/spec/Coduo/PHPHumanizer/StringSpec.php +++ b/spec/Coduo/PHPHumanizer/StringSpec.php @@ -34,9 +34,15 @@ function it_truncate_string_to_word_closest_to_a_certain_number_of_characters() $this->truncate($text, -2)->shouldReturn($text); $textShort = 'Short text'; + $this->truncate($textShort, 1, '...')->shouldReturn("Short..."); + $this->truncate($textShort, 2, '...')->shouldReturn("Short..."); + $this->truncate($textShort, 3, '...')->shouldReturn("Short..."); $this->truncate($textShort, 4, '...')->shouldReturn("Short..."); $this->truncate($textShort, 5, '...')->shouldReturn("Short..."); $this->truncate($textShort, 6, '...')->shouldReturn("Short..."); $this->truncate($textShort, 7, '...')->shouldReturn("Short text"); + $this->truncate($textShort, 8, '...')->shouldReturn("Short text"); + $this->truncate($textShort, 9, '...')->shouldReturn("Short text"); + $this->truncate($textShort, 10, '...')->shouldReturn("Short text"); } } From 923751e8d549cc9f4ca1bfc46f8e8bec7f97f995 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Thu, 29 Oct 2015 18:19:57 +0100 Subject: [PATCH 010/193] Change string functions into multibyte string functions --- src/Coduo/PHPHumanizer/Number/RomanNumeral.php | 4 ++-- src/Coduo/PHPHumanizer/String/Humanize.php | 2 +- src/Coduo/PHPHumanizer/String/Truncate.php | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php index 8b75359..8361d90 100644 --- a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php +++ b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php @@ -61,12 +61,12 @@ public function toRoman($number) */ public function fromRoman($string) { - if (strlen($string) === 0 || 0 === preg_match(self::ROMAN_STRING_MATCHER, $string)) { + if (mb_strlen($string) === 0 || 0 === preg_match(self::ROMAN_STRING_MATCHER, $string)) { throw new \InvalidArgumentException(); } $total = 0; - $i = strlen($string); + $i = mb_strlen($string); while ($i > 0) { $digit = $this->map[$string{--$i}]; diff --git a/src/Coduo/PHPHumanizer/String/Humanize.php b/src/Coduo/PHPHumanizer/String/Humanize.php index 3ec9c58..5da7e8f 100644 --- a/src/Coduo/PHPHumanizer/String/Humanize.php +++ b/src/Coduo/PHPHumanizer/String/Humanize.php @@ -36,7 +36,7 @@ public function __construct($text, $capitalize = true) */ public function __toString() { - $humanized = trim(strtolower(preg_replace(array('/([A-Z])/', '/[_\s]+/'), array('_$1', ' '), $this->text))); + $humanized = trim(mb_strtolower(preg_replace(array('/([A-Z])/', '/[_\s]+/'), array('_$1', ' '), $this->text))); $humanized = trim(str_replace($this->forbiddenWords, '', $humanized)); return $this->capitalize ? ucfirst($humanized) : $humanized; diff --git a/src/Coduo/PHPHumanizer/String/Truncate.php b/src/Coduo/PHPHumanizer/String/Truncate.php index e724ab2..f207142 100644 --- a/src/Coduo/PHPHumanizer/String/Truncate.php +++ b/src/Coduo/PHPHumanizer/String/Truncate.php @@ -33,7 +33,7 @@ public function __construct($text, $charactersCount, $append = '') public function __toString() { - if ($this->charactersCount < 0 || strlen($this->text) <= ($this->charactersCount + mb_strlen($this->append))) { + if ($this->charactersCount < 0 || mb_strlen($this->text) <= ($this->charactersCount + mb_strlen($this->append))) { return $this->text; } From 076454a58a12ea6c11a55da3825c4f1a54adec85 Mon Sep 17 00:00:00 2001 From: omissis Date: Thu, 29 Oct 2015 19:01:36 +0100 Subject: [PATCH 011/193] Added oxford formatter translations for the italian language. --- src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml new file mode 100644 index 0000000..09b74f9 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml @@ -0,0 +1,3 @@ +only_two: "%first% e %second%" +comma_separated: "%list% ed %last%" +comma_separated_with_limit: "{1} %list% ed un altro|[2,Inf] %list% e %count% altri" From b630913b8fb1018d3ec929932f4b5a467eb8a2e0 Mon Sep 17 00:00:00 2001 From: omissis Date: Thu, 29 Oct 2015 19:03:22 +0100 Subject: [PATCH 012/193] Fixed typo. --- src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml index 09b74f9..9441aad 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml @@ -1,3 +1,3 @@ only_two: "%first% e %second%" -comma_separated: "%list% ed %last%" +comma_separated: "%list% e %last%" comma_separated_with_limit: "{1} %list% ed un altro|[2,Inf] %list% e %count% altri" From 3dfd14e1b59f3a3fc34c7872115c5c58d854fd3b Mon Sep 17 00:00:00 2001 From: Max Roeleveld Date: Thu, 29 Oct 2015 22:27:20 +0100 Subject: [PATCH 013/193] Add Dutch Oxford translations. --- spec/Coduo/PHPHumanizer/CollectionSpec.php | 15 +++++++++++++++ .../Resources/translations/oxford.nl.yml | 3 +++ 2 files changed, 18 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.yml diff --git a/spec/Coduo/PHPHumanizer/CollectionSpec.php b/spec/Coduo/PHPHumanizer/CollectionSpec.php index 709b137..8e9a6fa 100644 --- a/spec/Coduo/PHPHumanizer/CollectionSpec.php +++ b/spec/Coduo/PHPHumanizer/CollectionSpec.php @@ -35,4 +35,19 @@ function it_humanizes_collections_for_polish_locale() $this->oxford($example[0], $example[1], 'pl')->shouldReturn($example[2]); } } + + function it_humanizes_collections_for_dutch_locale() + { + $examples = array( + array(array("Michal"), null, 'Michal'), + array(array("Michal", "Norbert"), null, 'Michal en Norbert'), + array(array("Michal", "Norbert", "Lukasz"), 2, 'Michal, Norbert, en 1 andere'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'Michal, Norbert, en 2 andere'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'Michal, Norbert, Lukasz, en Pawel'), + ); + + foreach ($examples as $example) { + $this->oxford($example[0], $example[1], 'nl')->shouldReturn($example[2]); + } + } } diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.yml new file mode 100644 index 0000000..0ba299b --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.yml @@ -0,0 +1,3 @@ +only_two: "%first% en %second%" +comma_separated: "%list%, en %last%" +comma_separated_with_limit: "{1} %list%, en 1 andere|[2,Inf] %list%, en %count% andere" From 5d328c56d4f7ab77dc1233171a4cc208c53d28e7 Mon Sep 17 00:00:00 2001 From: Semen Dubina Date: Fri, 30 Oct 2015 04:51:40 +0300 Subject: [PATCH 014/193] Add russian. Add prefix at format difference. --- spec/Coduo/PHPHumanizer/CollectionSpec.php | 15 +++++++ spec/Coduo/PHPHumanizer/DateTimeSpec.php | 45 +++++++++++++++++++ .../DateTime/PreciseFormatter.php | 19 +++++++- .../Resources/translations/difference.ru.yml | 35 +++++++++++++++ .../Resources/translations/oxford.ru.yml | 3 ++ 5 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.yml diff --git a/spec/Coduo/PHPHumanizer/CollectionSpec.php b/spec/Coduo/PHPHumanizer/CollectionSpec.php index 8e9a6fa..0bae7b0 100644 --- a/spec/Coduo/PHPHumanizer/CollectionSpec.php +++ b/spec/Coduo/PHPHumanizer/CollectionSpec.php @@ -50,4 +50,19 @@ function it_humanizes_collections_for_dutch_locale() $this->oxford($example[0], $example[1], 'nl')->shouldReturn($example[2]); } } + + function it_humanizes_collections_for_russian_locale() + { + $examples = array( + array(array("Michal"), null, 'Michal'), + array(array("Michal", "Norbert"), null, 'Michal и Norbert'), + array(array("Michal", "Norbert", "Lukasz"), 2, 'Michal, Norbert и ещё 1'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'Michal, Norbert и ещё 2'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'Michal, Norbert, Lukasz и Pawel'), + ); + + foreach ($examples as $example) { + $this->oxford($example[0], $example[1], 'ru')->shouldReturn($example[2]); + } + } } diff --git a/spec/Coduo/PHPHumanizer/DateTimeSpec.php b/spec/Coduo/PHPHumanizer/DateTimeSpec.php index 009cd8b..8a96074 100644 --- a/spec/Coduo/PHPHumanizer/DateTimeSpec.php +++ b/spec/Coduo/PHPHumanizer/DateTimeSpec.php @@ -121,6 +121,33 @@ function it_humanize_difference_between_dates_for_pt_locale() } } + function it_humanize_difference_between_dates_for_ru_locale() + { + $examples = array( + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'сейчас'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", 'через 5 секунд'), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 минуту назад'), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 минут назад'), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", 'через 15 минут'), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", 'через 1 час'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", 'через 2 часа'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 час назад'), + array("2014-04-26", "2014-04-25", '1 день назад'), + array("2014-04-26", "2014-04-24", '2 дня назад'), + array("2014-04-26", "2014-04-28", 'через 2 дня'), + array("2014-04-01", "2014-04-15", 'через 2 недели'), + array("2014-04-15", "2014-04-07", '1 неделю назад'), + array("2014-01-01", "2014-04-01", 'через 3 месяца'), + array("2014-05-01", "2014-04-01", '1 месяц назад'), + array("2015-05-01", "2014-04-01", '1 год назад'), + array("2014-05-01", "2016-04-01", 'через 2 года'), + ); + + foreach ($examples as $example) { + $this->difference(new \DateTime($example[0]), new \DateTime($example[1]), 'ru')->shouldReturn($example[2]); + } + } + function it_humanizes_precise_difference_between_dates() { $examples = array( @@ -299,4 +326,22 @@ function it_humanizes_precise_difference_between_dates_for_no_locale() $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'no')->shouldReturn($example[2]); } } + + function it_humanizes_precise_difference_between_dates_for_ru_locale() + { + $examples = array( + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 минута, 45 секунд назад'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 час, 40 минут назад'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", 'через 1 день, 15 минут'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", 'через 7 дней, 2 часа'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", 'через 1 год, 2 дня, 4 часа'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", 'через 2 дня, 10 часов'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 день, 1 час, 40 минут назад'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", 'через 2 года, 1 день'), + ); + + foreach ($examples as $example) { + $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'ru')->shouldReturn($example[2]); + } + } } diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index 251a93c..e2f0b48 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -10,6 +10,7 @@ class PreciseFormatter * @var \Symfony\Component\Translation\TranslatorInterface */ private $translator; + private $locale = 'en'; /** * @param TranslatorInterface $translator @@ -29,6 +30,8 @@ public function formatDifference(PreciseDifference $difference, $locale = 'en') { $diff = array(); + $this->locale = $locale; + foreach ($difference->getCompoundResults() as $result) { $diff[] = $this->translator->transChoice( 'compound.'.$result->getUnit()->getName(), @@ -38,8 +41,20 @@ public function formatDifference(PreciseDifference $difference, $locale = 'en') $locale ); } - $suffix = $difference->isPast() ? 'compound.ago' : 'compound.from_now'; + $suffix = $this->calculateCompoud($difference); + $suffixString = empty($suffix) ? '':' '.$suffix; + + $prefix = $this->calculateCompoud($difference, '_prefix'); + $prefixString = empty($prefix) ? '':$prefix.' '; - return implode(', ', $diff).' '.$this->translator->trans($suffix, array(), 'difference', $locale); + return $prefixString . implode(', ', $diff) . $suffixString; + } + + private function calculateCompoud(PreciseDifference $difference, $suffixName = '') + { + $compound = $difference->isPast() ? 'compound.ago'.$suffixName : 'compound.from_now'.$suffixName; + $compoundString = $this->translator->trans($compound, array(), 'difference', $this->locale); + $compoundRes = substr_compare($compoundString, 'compound', 0, 8) ? $compoundString:''; + return $compoundRes; } } diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml new file mode 100644 index 0000000..1b30aa4 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] сейчас" + future: "[0,Inf] сейчас" +second: + past: "%count% секунду назад|%count% секунды назад|%count% секунд назад" + future: "через %count% секунду|через %count% секунды|через %count% секунд" +minute: + past: "%count% минуту назад|%count% минуты назад|%count% минут назад" + future: "через %count% минуту|через %count% минуты|через %count% минут" +hour: + past: "%count% час назад|через %count% часа|%count% часов назад" + future: "через %count% час|через %count% часа|через %count% часов" +day: + past: "%count% день назад|%count% дня назад|%count% дней назад" + future: "через %count% день|через %count% дня|через %count% дней" +week: + past: "%count% неделю назад|%count% недели назад|%count% недель назад" + future: "через %count% неделю|через %count% недели|через %count% недель" +month: + past: "%count% месяц назад|%count% месяца назад|%count% месяцев назад" + future: "через %count% месяц|через %count% месяца|через %count% месяцев" +year: + past: "%count% год назад|%count% года назад|%count% лет назад" + future: "через %count% год|через %count% года|через %count% лет" + +compound: + second: "%count% секунда|%count% секунды|%count% секунд" + minute: "%count% минута|%count% минуты|%count% минут" + hour: "%count% час|%count% часа|%count% часов" + day: "%count% день|%count% дня|%count% дней" + week: "%count% неделя|%count% недели|%count% недель" + month: "%count% месяц|%count% месяца|%count% месяцев" + year: "%count% год|%count% года|%count% лет" + ago: "назад" + from_now_prefix: "через" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.yml new file mode 100644 index 0000000..903c661 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.yml @@ -0,0 +1,3 @@ +only_two: "%first% и %second%" +comma_separated: "%list% и %last%" +comma_separated_with_limit: "{1} %list% и ещё 1|[2,Inf] %list% и ещё %count%" \ No newline at end of file From 9c6bf240d98bf4ad60b7e7d0869f89ad3e472825 Mon Sep 17 00:00:00 2001 From: Semen Dubina Date: Fri, 30 Oct 2015 04:56:36 +0300 Subject: [PATCH 015/193] russian in readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f7ba58a..ddd14ef 100644 --- a/README.md +++ b/README.md @@ -194,6 +194,7 @@ Currently we support following languages: * [Português - Brasil](src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml) * [Italian](src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml) * [Dutch](src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml) +* [Русский](src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml) # Credits From bb6b3ec6e74b63c23b905c84420d4d9a7aeb5c13 Mon Sep 17 00:00:00 2001 From: Gnomino Date: Fri, 30 Oct 2015 11:00:59 +0100 Subject: [PATCH 016/193] Corrects a typo --- src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml index b2163c9..fa1ce1a 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml @@ -5,7 +5,7 @@ second: past: "{1} il y a %count% seconde|[2,Inf] il y a %count% secondes" future: "{1} il y a maintenant %count% seconde|[2,Inf] il y a maintenant %count% secondes" minute: - past: "{1} il y a %count% minute|[2,Inf] il y'a %count% minutes" + past: "{1} il y a %count% minute|[2,Inf] il y a %count% minutes" future: "{1} il y a maintenant %count% minute|[2,Inf] il y a maintenant %count% minutes" hour: past: "{1} il y a %count% heure|[2,Inf] il y a %count% heure" From dac446bb4bb0a959fb39466b3729bc97060f4449 Mon Sep 17 00:00:00 2001 From: Martin Smeeckaert Date: Fri, 30 Oct 2015 11:50:30 +0100 Subject: [PATCH 017/193] refacto visibility and breakpoint --- src/Coduo/PHPHumanizer/String.php | 13 ++- src/Coduo/PHPHumanizer/String/Breakpoint.php | 17 ++++ .../{TruncateHtml.php => HtmlTruncate.php} | 28 +++++-- .../PHPHumanizer/String/TextTruncate.php | 82 +++++++++++++++++++ src/Coduo/PHPHumanizer/String/Truncate.php | 51 +----------- .../PHPHumanizer/String/WordBreakpoint.php | 15 ++++ 6 files changed, 149 insertions(+), 57 deletions(-) create mode 100644 src/Coduo/PHPHumanizer/String/Breakpoint.php rename src/Coduo/PHPHumanizer/String/{TruncateHtml.php => HtmlTruncate.php} (84%) create mode 100644 src/Coduo/PHPHumanizer/String/TextTruncate.php create mode 100644 src/Coduo/PHPHumanizer/String/WordBreakpoint.php diff --git a/src/Coduo/PHPHumanizer/String.php b/src/Coduo/PHPHumanizer/String.php index de8b68c..8fbf9e5 100644 --- a/src/Coduo/PHPHumanizer/String.php +++ b/src/Coduo/PHPHumanizer/String.php @@ -3,8 +3,9 @@ namespace Coduo\PHPHumanizer; use Coduo\PHPHumanizer\String\Humanize; -use Coduo\PHPHumanizer\String\Truncate; -use Coduo\PHPHumanizer\String\TruncateHtml; +use Coduo\PHPHumanizer\String\TextTruncate; +use Coduo\PHPHumanizer\String\HtmlTruncate; +use Coduo\PHPHumanizer\String\WordBreakpoint; class String { @@ -15,11 +16,15 @@ public static function humanize($text, $capitalize = true) public static function truncate($text, $charactersCount, $append = '') { - return (string) new Truncate($text, $charactersCount, $append); + $truncate = new TextTruncate($text, $charactersCount, $append); + $truncate->setBreakpoint(new WordBreakpoint()); + return (string) $truncate; } public static function truncateHtml($text, $charactersCount, $allowedTags = '', $append = '') { - return (string) new TruncateHtml($text, $charactersCount, $allowedTags, $append); + $truncate = new HtmlTruncate($text, $charactersCount, $allowedTags, $append); + $truncate->setBreakpoint(new WordBreakpoint()); + return (string) $truncate; } } diff --git a/src/Coduo/PHPHumanizer/String/Breakpoint.php b/src/Coduo/PHPHumanizer/String/Breakpoint.php new file mode 100644 index 0000000..435279c --- /dev/null +++ b/src/Coduo/PHPHumanizer/String/Breakpoint.php @@ -0,0 +1,17 @@ +charactersCount; $continuation = $this->append; @@ -63,13 +78,16 @@ protected function truncateHtml($string) $offset += $match[1][1] - $match[0][1]; } - $new_string = mb_substr($string, 0, $limit = min(mb_strlen($string), $this->breakpoint($string, $limit + $offset))); + $new_string = mb_substr($string, 0, $limit = min(mb_strlen($string), $this->getLength($string, $limit + $offset))); $new_string .= (mb_strlen($string) > $limit ? $continuation : ''); $new_string .= (count($tags = array_reverse($tags)) ? '' : ''); return $new_string; } - public function __toString() + /** + * @return string + */ + public function truncate() { $string = strip_tags($this->text, $this->allowedTags); return $this->truncateHtml($string); diff --git a/src/Coduo/PHPHumanizer/String/TextTruncate.php b/src/Coduo/PHPHumanizer/String/TextTruncate.php new file mode 100644 index 0000000..a770095 --- /dev/null +++ b/src/Coduo/PHPHumanizer/String/TextTruncate.php @@ -0,0 +1,82 @@ +text = $text; + $this->charactersCount = $charactersCount; + $this->append = $append; + } + + /** + * @param Breakpoint $breakpoint + * @return TextTruncate + */ + public function setBreakpoint($breakpoint) { + $this->breakpoint = $breakpoint; + return $this; + } + + /** + * Return the length of the newly truncated string using the breakpoint + * + * @param string $text + * @param int $charCount + * + * @return int + */ + protected function getLength($text, $charCount) + { + $length = $this->charactersCount; + if (!empty($this->breakpoint)) { + $length = $this->breakpoint->len($text, $charCount); + } + return $length; + } + + /** + * @return string + */ + public function truncate() + { + if ($this->charactersCount < 0 || strlen($this->text) <= $this->charactersCount) { + return $this->text; + } + + $length = $this->getLength($this->text, $this->charactersCount); + return rtrim(mb_substr($this->text, 0, $length)).$this->append; + } + + public function __toString() + { + return $this->truncate(); + } +} diff --git a/src/Coduo/PHPHumanizer/String/Truncate.php b/src/Coduo/PHPHumanizer/String/Truncate.php index 2d1932c..2ec14e5 100644 --- a/src/Coduo/PHPHumanizer/String/Truncate.php +++ b/src/Coduo/PHPHumanizer/String/Truncate.php @@ -2,51 +2,6 @@ namespace Coduo\PHPHumanizer\String; -class Truncate -{ - /** - * @var string - */ - protected $text; - - /** - * @var int - */ - protected $charactersCount; - - /** - * @var string - */ - protected $append; - - /** - * @param string $text - * @param int $charactersCount - * @param string $append - */ - public function __construct($text, $charactersCount, $append = '') - { - $this->text = $text; - $this->charactersCount = $charactersCount; - $this->append = $append; - } - - protected function breakpoint($text, $charCount) - { - $length = $charCount; - if (false !== ($breakpoint = mb_strpos($text, ' ', $charCount))) { - $length = $breakpoint; - } - return $length; - } - - public function __toString() - { - if ($this->charactersCount < 0 || strlen($this->text) <= $this->charactersCount) { - return $this->text; - } - - $length = $this->breakpoint($this->text, $this->charactersCount); - return rtrim(mb_substr($this->text, 0, $length)) . $this->append; - } -} +interface Truncate { + public function truncate(); +} \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php new file mode 100644 index 0000000..a0152e1 --- /dev/null +++ b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php @@ -0,0 +1,15 @@ + Date: Fri, 30 Oct 2015 11:51:48 +0100 Subject: [PATCH 018/193] code style --- src/Coduo/PHPHumanizer/String/Truncate.php | 2 +- src/Coduo/PHPHumanizer/String/WordBreakpoint.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Coduo/PHPHumanizer/String/Truncate.php b/src/Coduo/PHPHumanizer/String/Truncate.php index 2ec14e5..25e4c58 100644 --- a/src/Coduo/PHPHumanizer/String/Truncate.php +++ b/src/Coduo/PHPHumanizer/String/Truncate.php @@ -4,4 +4,4 @@ interface Truncate { public function truncate(); -} \ No newline at end of file +} diff --git a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php index a0152e1..4a320a6 100644 --- a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php +++ b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php @@ -12,4 +12,4 @@ public function len($text, $charactersCount) } return $length; } -} \ No newline at end of file +} From a7cb8781189fb13d078530a03111bef47af8d04e Mon Sep 17 00:00:00 2001 From: Martin Smeeckaert Date: Fri, 30 Oct 2015 12:08:49 +0100 Subject: [PATCH 019/193] rename breakpoint len --- src/Coduo/PHPHumanizer/String/Breakpoint.php | 2 +- src/Coduo/PHPHumanizer/String/TextTruncate.php | 2 +- src/Coduo/PHPHumanizer/String/WordBreakpoint.php | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Coduo/PHPHumanizer/String/Breakpoint.php b/src/Coduo/PHPHumanizer/String/Breakpoint.php index 435279c..48a61e9 100644 --- a/src/Coduo/PHPHumanizer/String/Breakpoint.php +++ b/src/Coduo/PHPHumanizer/String/Breakpoint.php @@ -13,5 +13,5 @@ interface Breakpoint * * @return int */ - public function len($text, $charactersCount); + public function calculatePosition($text, $charactersCount); } \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/String/TextTruncate.php b/src/Coduo/PHPHumanizer/String/TextTruncate.php index a770095..4a065a6 100644 --- a/src/Coduo/PHPHumanizer/String/TextTruncate.php +++ b/src/Coduo/PHPHumanizer/String/TextTruncate.php @@ -57,7 +57,7 @@ protected function getLength($text, $charCount) { $length = $this->charactersCount; if (!empty($this->breakpoint)) { - $length = $this->breakpoint->len($text, $charCount); + $length = $this->breakpoint->calculatePosition($text, $charCount); } return $length; } diff --git a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php index 4a320a6..a4795c5 100644 --- a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php +++ b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php @@ -2,9 +2,9 @@ namespace Coduo\PHPHumanizer\String; -class WordBreakpoint implements Breakpoint +class WordBreakpoint implements Breakpoint { - public function len($text, $charactersCount) + public function calculatePosition($text, $charactersCount) { $length = $charactersCount; if (false !== ($breakpoint = mb_strpos($text, ' ', $charactersCount))) { From 798d77d6b864b2d46b4c2487f616ea044f08f92c Mon Sep 17 00:00:00 2001 From: Martin Smeeckaert Date: Fri, 30 Oct 2015 12:24:16 +0100 Subject: [PATCH 020/193] add breakpoint tests --- .../String/WordBreakpointSpec.php | 25 +++++++++++++++++++ .../PHPHumanizer/String/WordBreakpoint.php | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php diff --git a/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php b/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php new file mode 100644 index 0000000..1266e43 --- /dev/null +++ b/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php @@ -0,0 +1,25 @@ +calculatePosition($text, 2)->shouldReturn(5); + $this->calculatePosition($text, 4)->shouldReturn(5); + $this->calculatePosition($text, 5)->shouldReturn(5); + $this->calculatePosition($text, 10)->shouldReturn(11); + $this->calculatePosition($text, 20)->shouldReturn(22); + $this->calculatePosition($text, -2)->shouldReturn(-2); + $this->calculatePosition($text, 0)->shouldReturn(5); + } + +} \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php index a4795c5..8abe8a9 100644 --- a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php +++ b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php @@ -7,7 +7,7 @@ class WordBreakpoint implements Breakpoint public function calculatePosition($text, $charactersCount) { $length = $charactersCount; - if (false !== ($breakpoint = mb_strpos($text, ' ', $charactersCount))) { + if ($charactersCount >= 0 && false !== ($breakpoint = mb_strpos($text, ' ', $charactersCount))) { $length = $breakpoint; } return $length; From cc7a56a09f31a50bf32a329dea7b65c446e53631 Mon Sep 17 00:00:00 2001 From: Martin Smeeckaert Date: Fri, 30 Oct 2015 12:28:03 +0100 Subject: [PATCH 021/193] refacto truncate --- .../PHPHumanizer/String/HtmlTruncate.php | 57 ++++++++++++++++--- .../PHPHumanizer/String/TextTruncate.php | 38 +++++++------ 2 files changed, 68 insertions(+), 27 deletions(-) diff --git a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php index 7830d58..45ebd05 100644 --- a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php +++ b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php @@ -2,7 +2,7 @@ namespace Coduo\PHPHumanizer\String; -class HtmlTruncate extends TextTruncate +class HtmlTruncate implements Truncate { /** * @var string @@ -24,6 +24,11 @@ class HtmlTruncate extends TextTruncate */ private $allowedTags; + /** + * @var Breakpoint + */ + private $breakpoint; + /** * @param string $text * @param int $charactersCount @@ -38,6 +43,48 @@ public function __construct($text, $charactersCount, $allowedTags = 'allowedTags = $allowedTags; } + /** + * @param Breakpoint $breakpoint + * + * @return TextTruncate + */ + public function setBreakpoint($breakpoint) + { + $this->breakpoint = $breakpoint; + return $this; + } + + /** + * @return string + */ + public function truncate() + { + $string = strip_tags($this->text, $this->allowedTags); + return $this->truncateHtml($string); + } + + public function __toString() + { + return $this->truncate(); + } + + /** + * Return the length of the newly truncated string using the breakpoint + * + * @param string $text + * @param int $charCount + * + * @return int + */ + private function getLength($text, $charCount) + { + $length = $this->charactersCount; + if (!empty($this->breakpoint)) { + $length = $this->breakpoint->calculatePosition($text, $charCount); + } + return $length; + } + /** * Truncates a string to the given length. It will optionally preserve * HTML tags if $is_html is set to true. @@ -84,12 +131,4 @@ private function truncateHtml($string) return $new_string; } - /** - * @return string - */ - public function truncate() - { - $string = strip_tags($this->text, $this->allowedTags); - return $this->truncateHtml($string); - } } diff --git a/src/Coduo/PHPHumanizer/String/TextTruncate.php b/src/Coduo/PHPHumanizer/String/TextTruncate.php index 4a065a6..76145bd 100644 --- a/src/Coduo/PHPHumanizer/String/TextTruncate.php +++ b/src/Coduo/PHPHumanizer/String/TextTruncate.php @@ -38,30 +38,15 @@ public function __construct($text, $charactersCount, $append = '') /** * @param Breakpoint $breakpoint + * * @return TextTruncate */ - public function setBreakpoint($breakpoint) { + public function setBreakpoint($breakpoint) + { $this->breakpoint = $breakpoint; return $this; } - /** - * Return the length of the newly truncated string using the breakpoint - * - * @param string $text - * @param int $charCount - * - * @return int - */ - protected function getLength($text, $charCount) - { - $length = $this->charactersCount; - if (!empty($this->breakpoint)) { - $length = $this->breakpoint->calculatePosition($text, $charCount); - } - return $length; - } - /** * @return string */ @@ -79,4 +64,21 @@ public function __toString() { return $this->truncate(); } + + /** + * Return the length of the newly truncated string using the breakpoint + * + * @param string $text + * @param int $charCount + * + * @return int + */ + private function getLength($text, $charCount) + { + $length = $this->charactersCount; + if (!empty($this->breakpoint)) { + $length = $this->breakpoint->calculatePosition($text, $charCount); + } + return $length; + } } From f6530941c4fb5c109aa593229a3ea3da449b6781 Mon Sep 17 00:00:00 2001 From: Martin Smeeckaert Date: Fri, 30 Oct 2015 12:31:07 +0100 Subject: [PATCH 022/193] add the breakpoint in the constructor --- src/Coduo/PHPHumanizer/String.php | 8 ++----- .../PHPHumanizer/String/HtmlTruncate.php | 23 ++++++------------- .../PHPHumanizer/String/TextTruncate.php | 21 +++++------------ 3 files changed, 15 insertions(+), 37 deletions(-) diff --git a/src/Coduo/PHPHumanizer/String.php b/src/Coduo/PHPHumanizer/String.php index 8fbf9e5..bdd5339 100644 --- a/src/Coduo/PHPHumanizer/String.php +++ b/src/Coduo/PHPHumanizer/String.php @@ -16,15 +16,11 @@ public static function humanize($text, $capitalize = true) public static function truncate($text, $charactersCount, $append = '') { - $truncate = new TextTruncate($text, $charactersCount, $append); - $truncate->setBreakpoint(new WordBreakpoint()); - return (string) $truncate; + return (string) new TextTruncate($text, $charactersCount,new WordBreakpoint(), $append);; } public static function truncateHtml($text, $charactersCount, $allowedTags = '', $append = '') { - $truncate = new HtmlTruncate($text, $charactersCount, $allowedTags, $append); - $truncate->setBreakpoint(new WordBreakpoint()); - return (string) $truncate; + return (string) new HtmlTruncate($text, $charactersCount,new WordBreakpoint(), $allowedTags, $append);; } } diff --git a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php index 45ebd05..4dfb3b8 100644 --- a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php +++ b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php @@ -30,30 +30,21 @@ class HtmlTruncate implements Truncate private $breakpoint; /** - * @param string $text - * @param int $charactersCount - * @param string $allowedTags - * @param string $append + * @param string $text + * @param int $charactersCount + * @param Breakpoint $breakpoint + * @param string $allowedTags + * @param string $append */ - public function __construct($text, $charactersCount, $allowedTags = '', $append = '') + public function __construct($text, $charactersCount, $breakpoint, $allowedTags = '', $append = '') { $this->text = $text; $this->charactersCount = $charactersCount; $this->append = $append; + $this->breakpoint = $breakpoint; $this->allowedTags = $allowedTags; } - /** - * @param Breakpoint $breakpoint - * - * @return TextTruncate - */ - public function setBreakpoint($breakpoint) - { - $this->breakpoint = $breakpoint; - return $this; - } - /** * @return string */ diff --git a/src/Coduo/PHPHumanizer/String/TextTruncate.php b/src/Coduo/PHPHumanizer/String/TextTruncate.php index 76145bd..d57ec7d 100644 --- a/src/Coduo/PHPHumanizer/String/TextTruncate.php +++ b/src/Coduo/PHPHumanizer/String/TextTruncate.php @@ -25,26 +25,17 @@ class TextTruncate implements Truncate private $breakpoint; /** - * @param string $text - * @param int $charactersCount - * @param string $append + * @param string $text + * @param int $charactersCount + * @param Breakpoint $breakpoint + * @param string $append */ - public function __construct($text, $charactersCount, $append = '') + public function __construct($text, $charactersCount, $breakpoint, $append = '') { $this->text = $text; $this->charactersCount = $charactersCount; $this->append = $append; - } - - /** - * @param Breakpoint $breakpoint - * - * @return TextTruncate - */ - public function setBreakpoint($breakpoint) - { - $this->breakpoint = $breakpoint; - return $this; + $this->breakpoint = $breakpoint; } /** From 5bbff03cebefdf95eaa4cf9c53905c703a471ae4 Mon Sep 17 00:00:00 2001 From: Martin Smeeckaert Date: Fri, 30 Oct 2015 12:32:50 +0100 Subject: [PATCH 023/193] style --- spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php b/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php index 1266e43..e333fb0 100644 --- a/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php +++ b/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php @@ -22,4 +22,4 @@ function it_breakpoint() $this->calculatePosition($text, 0)->shouldReturn(5); } -} \ No newline at end of file +} From 93a09b7553ef5838e705da2664d780e8602aacd7 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Fri, 30 Oct 2015 14:11:22 +0100 Subject: [PATCH 024/193] Reorganize WordTruncate and HtmlTruncate --- .../String/WordBreakpointSpec.php | 31 +++++--- spec/Coduo/PHPHumanizer/StringSpec.php | 37 +++++----- src/Coduo/PHPHumanizer/String.php | 26 ++++++- .../PHPHumanizer/String/HtmlTruncate.php | 72 ++++++------------- .../PHPHumanizer/String/TextTruncate.php | 57 ++++----------- src/Coduo/PHPHumanizer/String/Truncate.php | 48 ++++++++++++- .../PHPHumanizer/String/TruncateInterface.php | 13 ++++ .../PHPHumanizer/String/WordBreakpoint.php | 18 +++-- 8 files changed, 167 insertions(+), 135 deletions(-) create mode 100644 src/Coduo/PHPHumanizer/String/TruncateInterface.php diff --git a/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php b/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php index e333fb0..f608032 100644 --- a/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php +++ b/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php @@ -9,17 +9,28 @@ class WordBreakpointSpec extends ObjectBehavior { - function it_breakpoint() + function it_calculate_breakpoint_position_when_sentence_is_longer_than_characters_count() { - $text = 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.'; - - $this->calculatePosition($text, 2)->shouldReturn(5); - $this->calculatePosition($text, 4)->shouldReturn(5); - $this->calculatePosition($text, 5)->shouldReturn(5); - $this->calculatePosition($text, 10)->shouldReturn(11); - $this->calculatePosition($text, 20)->shouldReturn(22); - $this->calculatePosition($text, -2)->shouldReturn(-2); - $this->calculatePosition($text, 0)->shouldReturn(5); + $this->calculatePosition('Lorem ipsum dolorem', 2)->shouldReturn(5); + $this->calculatePosition('Lorem ipsum dolorem', 4)->shouldReturn(5); + $this->calculatePosition('Lorem ipsum dolorem', 5)->shouldReturn(5); + $this->calculatePosition('Lorem ipsum dolorem', 10)->shouldReturn(11); + $this->calculatePosition('Lorem ipsum dolorem', -2)->shouldReturn(19); + $this->calculatePosition('Lorem ipsum dolorem', 0)->shouldReturn(5); + } + + function it_calculate_breakpoint_position_when_sentence_is_shorter_than_characters_count() + { + $this->calculatePosition('Lorem ipsum dolorem', 20)->shouldReturn(19); + } + + function it_calculate_breakpoint_position_when_characters_count_ends_in_last_word() + { + $this->calculatePosition('Lorem ipsum', 7)->shouldReturn(11); } + function it_calculate_breakpoint_position_when_characters_count_ends_in_last_space() + { + $this->calculatePosition('Lorem ipsum', 5)->shouldReturn(5); + } } diff --git a/spec/Coduo/PHPHumanizer/StringSpec.php b/spec/Coduo/PHPHumanizer/StringSpec.php index 4793c5d..ab76335 100644 --- a/spec/Coduo/PHPHumanizer/StringSpec.php +++ b/spec/Coduo/PHPHumanizer/StringSpec.php @@ -39,7 +39,7 @@ function it_truncate_string_to_word_closest_to_a_certain_number_of_characters() $this->truncate($textShort, 3, '...')->shouldReturn("Short..."); $this->truncate($textShort, 4, '...')->shouldReturn("Short..."); $this->truncate($textShort, 5, '...')->shouldReturn("Short..."); - $this->truncate($textShort, 6, '...')->shouldReturn("Short..."); + $this->truncate($textShort, 6, '...')->shouldReturn("Short text"); $this->truncate($textShort, 7, '...')->shouldReturn("Short text"); $this->truncate($textShort, 8, '...')->shouldReturn("Short text"); $this->truncate($textShort, 9, '...')->shouldReturn("Short text"); @@ -51,24 +51,23 @@ function it_truncate_string_to_word_closest_to_a_certain_number_of_characters_wi { $text = '

HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create web pages.[1] Web browsers can read HTML files and render them into visible or audible web pages. HTML describes the structure of a website semantically along with cues for presentation, making it a markup language, rather than a programming language.

'; - // Test with allowed tags - $this->truncateHtml($text, 3)->shouldReturn("HyperText"); - $this->truncateHtml($text, 12)->shouldReturn("HyperText Markup"); - $this->truncateHtml($text, 50)->shouldReturn("HyperText Markup Language, commonly referred to as"); - $this->truncateHtml($text, 75)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup'); - $this->truncateHtml($text, 100)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'); - - // Test without tags - - $this->truncateHtml($text, 3, '')->shouldReturn("HyperText"); - $this->truncateHtml($text, 12, '')->shouldReturn("HyperText Markup"); - $this->truncateHtml($text, 50, '')->shouldReturn("HyperText Markup Language, commonly referred to as"); - $this->truncateHtml($text, 75, '')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup'); - $this->truncateHtml($text, 100, '')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'); - - // Test with append - $this->truncateHtml($text, 50, '', '...')->shouldReturn("HyperText Markup Language, commonly referred to as..."); - $this->truncateHtml($text, 75, '', '...')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup...'); +// $this->truncateHtml($text, 3)->shouldReturn("HyperText"); + $this->truncateHtml($text, 30)->shouldReturn("HyperText Markup"); +// $this->truncateHtml($text, 50)->shouldReturn("HyperText Markup Language, commonly referred to as"); +// $this->truncateHtml($text, 75)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup'); +// $this->truncateHtml($text, 100)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'); +// +// // Test without tags +// +// $this->truncateHtml($text, 3, '')->shouldReturn("HyperText"); +// $this->truncateHtml($text, 12, '')->shouldReturn("HyperText Markup"); +// $this->truncateHtml($text, 50, '')->shouldReturn("HyperText Markup Language, commonly referred to as"); +// $this->truncateHtml($text, 75, '')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup'); +// $this->truncateHtml($text, 100, '')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'); +// +// // Test with append +// $this->truncateHtml($text, 50, '', '...')->shouldReturn("HyperText Markup Language, commonly referred to as..."); +// $this->truncateHtml($text, 75, '', '...')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup...'); } } diff --git a/src/Coduo/PHPHumanizer/String.php b/src/Coduo/PHPHumanizer/String.php index bdd5339..74b28e9 100644 --- a/src/Coduo/PHPHumanizer/String.php +++ b/src/Coduo/PHPHumanizer/String.php @@ -9,18 +9,40 @@ class String { + /** + * @param $text + * @param bool|true $capitalize + * @return string + */ public static function humanize($text, $capitalize = true) { return (string) new Humanize($text, $capitalize); } + /** + * @param $text + * @param $charactersCount + * @param string $append + * @return string + */ public static function truncate($text, $charactersCount, $append = '') { - return (string) new TextTruncate($text, $charactersCount,new WordBreakpoint(), $append);; + $truncate = new TextTruncate(new WordBreakpoint(), $append); + + return $truncate->truncate($text, $charactersCount); } + /** + * @param $text + * @param $charactersCount + * @param string $allowedTags + * @param string $append + * @return string + */ public static function truncateHtml($text, $charactersCount, $allowedTags = '', $append = '') { - return (string) new HtmlTruncate($text, $charactersCount,new WordBreakpoint(), $allowedTags, $append);; + $truncate = new HtmlTruncate(new WordBreakpoint(), $allowedTags, $append); + + return $truncate->truncate($text, $charactersCount); } } diff --git a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php index 4dfb3b8..1496c78 100644 --- a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php +++ b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php @@ -2,18 +2,8 @@ namespace Coduo\PHPHumanizer\String; -class HtmlTruncate implements Truncate +class HtmlTruncate implements TruncateInterface { - /** - * @var string - */ - private $text; - - /** - * @var int - */ - private $charactersCount; - /** * @var string */ @@ -30,50 +20,25 @@ class HtmlTruncate implements Truncate private $breakpoint; /** - * @param string $text - * @param int $charactersCount * @param Breakpoint $breakpoint * @param string $allowedTags * @param string $append */ - public function __construct($text, $charactersCount, $breakpoint, $allowedTags = '', $append = '') + public function __construct(Breakpoint $breakpoint, $allowedTags = '', $append = '') { - $this->text = $text; - $this->charactersCount = $charactersCount; - $this->append = $append; - $this->breakpoint = $breakpoint; - $this->allowedTags = $allowedTags; + $this->breakpoint = $breakpoint; + $this->append = $append; + $this->allowedTags = $allowedTags; } /** * @return string */ - public function truncate() - { - $string = strip_tags($this->text, $this->allowedTags); - return $this->truncateHtml($string); - } - - public function __toString() + public function truncate($text, $charactersCount) { - return $this->truncate(); - } + $strippedText = strip_tags($text, $this->allowedTags); - /** - * Return the length of the newly truncated string using the breakpoint - * - * @param string $text - * @param int $charCount - * - * @return int - */ - private function getLength($text, $charCount) - { - $length = $this->charactersCount; - if (!empty($this->breakpoint)) { - $length = $this->breakpoint->calculatePosition($text, $charCount); - } - return $length; + return $this->truncateHtml($strippedText, $this->breakpoint->calculatePosition($strippedText, $charactersCount)); } /** @@ -83,15 +48,16 @@ private function getLength($text, $charCount) * Adapted from FuelPHP Str::truncate (https://github.com/fuelphp/common/blob/master/src/Str.php) * * @param string $string + * @param int $charactersCount * - * @return string the truncated string + * @return string the truncated string */ - private function truncateHtml($string) + private function truncateHtml($string, $charactersCount) { - $limit = $this->charactersCount; - $continuation = $this->append; + $limit = $charactersCount; $offset = 0; $tags = array(); + // Handle special characters. preg_match_all('/&[a-z]+;/i', strip_tags($string), $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); foreach ($matches as $match) { @@ -107,19 +73,21 @@ private function truncateHtml($string) if ($match[0][1] - $offset >= $limit) { break; } + $tag = mb_substr(strtok($match[0][0], " \t\n\r\0\x0B>"), 1); if ($tag[0] != '/') { $tags[] = $tag; } elseif (end($tags) == mb_substr($tag, 1)) { array_pop($tags); } + $offset += $match[1][1] - $match[0][1]; } - $new_string = mb_substr($string, 0, $limit = min(mb_strlen($string), $this->getLength($string, $limit + $offset))); - $new_string .= (mb_strlen($string) > $limit ? $continuation : ''); - $new_string .= (count($tags = array_reverse($tags)) ? '' : ''); - return $new_string; + $newString = mb_substr($string, 0, $limit = min(mb_strlen($string), $limit)); + $newString .= (mb_strlen($string) > $limit ? $this->append : ''); + $newString .= (count($tags = array_reverse($tags)) ? '' : ''); + + return $newString; } - } diff --git a/src/Coduo/PHPHumanizer/String/TextTruncate.php b/src/Coduo/PHPHumanizer/String/TextTruncate.php index d57ec7d..dd99238 100644 --- a/src/Coduo/PHPHumanizer/String/TextTruncate.php +++ b/src/Coduo/PHPHumanizer/String/TextTruncate.php @@ -2,18 +2,8 @@ namespace Coduo\PHPHumanizer\String; -class TextTruncate implements Truncate +class TextTruncate implements TruncateInterface { - /** - * @var string - */ - private $text; - - /** - * @var int - */ - private $charactersCount; - /** * @var string */ @@ -25,51 +15,28 @@ class TextTruncate implements Truncate private $breakpoint; /** - * @param string $text - * @param int $charactersCount * @param Breakpoint $breakpoint - * @param string $append + * @param string $append */ - public function __construct($text, $charactersCount, $breakpoint, $append = '') + public function __construct(Breakpoint $breakpoint, $append = '') { - $this->text = $text; - $this->charactersCount = $charactersCount; - $this->append = $append; - $this->breakpoint = $breakpoint; + $this->breakpoint = $breakpoint; + $this->append = $append; } /** + * @param string $text + * @param int $charactersCount * @return string */ - public function truncate() + public function truncate($text, $charactersCount) { - if ($this->charactersCount < 0 || strlen($this->text) <= $this->charactersCount) { - return $this->text; + if ($charactersCount < 0 || mb_strlen($text) <= $charactersCount) { + return $text; } - $length = $this->getLength($this->text, $this->charactersCount); - return rtrim(mb_substr($this->text, 0, $length)).$this->append; - } + $truncatedText = rtrim(mb_substr($text, 0, $this->breakpoint->calculatePosition($text, $charactersCount))); - public function __toString() - { - return $this->truncate(); - } - - /** - * Return the length of the newly truncated string using the breakpoint - * - * @param string $text - * @param int $charCount - * - * @return int - */ - private function getLength($text, $charCount) - { - $length = $this->charactersCount; - if (!empty($this->breakpoint)) { - $length = $this->breakpoint->calculatePosition($text, $charCount); - } - return $length; + return ($truncatedText === $text) ? $truncatedText : $truncatedText . $this->append; } } diff --git a/src/Coduo/PHPHumanizer/String/Truncate.php b/src/Coduo/PHPHumanizer/String/Truncate.php index e9fb3df..fa815fa 100644 --- a/src/Coduo/PHPHumanizer/String/Truncate.php +++ b/src/Coduo/PHPHumanizer/String/Truncate.php @@ -2,7 +2,49 @@ namespace Coduo\PHPHumanizer\String; +/** + * @deprecated since 1.0 use Coduo\PHPHumanizer\String\TextTruncate or Coduo\PHPHumanizer\String\HtmlTruncate instead + */ +class Truncate +{ + /** + * @var string + */ + private $text; -interface Truncate { - public function truncate(); -} + /** + * @var int + */ + private $charactersCount; + + /** + * @var string + */ + private $append; + + /** + * @param string $text + * @param int $charactersCount + * @param string $append + */ + public function __construct($text, $charactersCount, $append = '') + { + $this->text = $text; + $this->charactersCount = $charactersCount; + $this->append = $append; + } + + public function __toString() + { + if ($this->charactersCount < 0 || mb_strlen($this->text) <= ($this->charactersCount + mb_strlen($this->append))) { + return $this->text; + } + + $length = $this->charactersCount; + if (false !== ($breakpoint = mb_strpos($this->text, ' ', $this->charactersCount))) { + $length = $breakpoint; + } + + return rtrim(mb_substr($this->text, 0, $length)).$this->append; + } +} \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/String/TruncateInterface.php b/src/Coduo/PHPHumanizer/String/TruncateInterface.php new file mode 100644 index 0000000..a6e1bb7 --- /dev/null +++ b/src/Coduo/PHPHumanizer/String/TruncateInterface.php @@ -0,0 +1,13 @@ += 0 && false !== ($breakpoint = mb_strpos($text, ' ', $charactersCount))) { - $length = $breakpoint; + if ($charactersCount < 0) { + return mb_strlen($text); } - return $length; + + if ($charactersCount > mb_strlen($text)) { + return mb_strlen($text); + } + + $breakpoint = mb_strpos($text, ' ', $charactersCount); + + if (false === $breakpoint) { + return mb_strlen($text); + } + + return $breakpoint; } } From ea62be3750b7d352e74b7d02138dae91bd51bbdc Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Fri, 30 Oct 2015 14:14:55 +0100 Subject: [PATCH 025/193] Remove comments --- spec/Coduo/PHPHumanizer/StringSpec.php | 32 +++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/spec/Coduo/PHPHumanizer/StringSpec.php b/spec/Coduo/PHPHumanizer/StringSpec.php index ab76335..991b2c3 100644 --- a/spec/Coduo/PHPHumanizer/StringSpec.php +++ b/spec/Coduo/PHPHumanizer/StringSpec.php @@ -52,22 +52,22 @@ function it_truncate_string_to_word_closest_to_a_certain_number_of_characters_wi $text = '

HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create web pages.[1] Web browsers can read HTML files and render them into visible or audible web pages. HTML describes the structure of a website semantically along with cues for presentation, making it a markup language, rather than a programming language.

'; // Test with allowed tags -// $this->truncateHtml($text, 3)->shouldReturn("HyperText"); + $this->truncateHtml($text, 3)->shouldReturn("HyperText"); $this->truncateHtml($text, 30)->shouldReturn("HyperText Markup"); -// $this->truncateHtml($text, 50)->shouldReturn("HyperText Markup Language, commonly referred to as"); -// $this->truncateHtml($text, 75)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup'); -// $this->truncateHtml($text, 100)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'); -// -// // Test without tags -// -// $this->truncateHtml($text, 3, '')->shouldReturn("HyperText"); -// $this->truncateHtml($text, 12, '')->shouldReturn("HyperText Markup"); -// $this->truncateHtml($text, 50, '')->shouldReturn("HyperText Markup Language, commonly referred to as"); -// $this->truncateHtml($text, 75, '')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup'); -// $this->truncateHtml($text, 100, '')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'); -// -// // Test with append -// $this->truncateHtml($text, 50, '', '...')->shouldReturn("HyperText Markup Language, commonly referred to as..."); -// $this->truncateHtml($text, 75, '', '...')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup...'); + $this->truncateHtml($text, 50)->shouldReturn("HyperText Markup Language, commonly referred to as"); + $this->truncateHtml($text, 75)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup'); + $this->truncateHtml($text, 100)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'); + + // Test without tags + + $this->truncateHtml($text, 3, '')->shouldReturn("HyperText"); + $this->truncateHtml($text, 12, '')->shouldReturn("HyperText Markup"); + $this->truncateHtml($text, 50, '')->shouldReturn("HyperText Markup Language, commonly referred to as"); + $this->truncateHtml($text, 75, '')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup'); + $this->truncateHtml($text, 100, '')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'); + + // Test with append + $this->truncateHtml($text, 50, '', '...')->shouldReturn("HyperText Markup Language, commonly referred to as..."); + $this->truncateHtml($text, 75, '', '...')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup...'); } } From ed8569b18f0f700fdaa160df49917f9e92117823 Mon Sep 17 00:00:00 2001 From: Martin Smeeckaert Date: Fri, 30 Oct 2015 15:38:52 +0100 Subject: [PATCH 026/193] bugfix refacto --- spec/Coduo/PHPHumanizer/StringSpec.php | 3 ++- src/Coduo/PHPHumanizer/String/HtmlTruncate.php | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/spec/Coduo/PHPHumanizer/StringSpec.php b/spec/Coduo/PHPHumanizer/StringSpec.php index 991b2c3..6d2125e 100644 --- a/spec/Coduo/PHPHumanizer/StringSpec.php +++ b/spec/Coduo/PHPHumanizer/StringSpec.php @@ -53,7 +53,8 @@ function it_truncate_string_to_word_closest_to_a_certain_number_of_characters_wi // Test with allowed tags $this->truncateHtml($text, 3)->shouldReturn("HyperText"); - $this->truncateHtml($text, 30)->shouldReturn("HyperText Markup"); + $this->truncateHtml($text, 12)->shouldReturn("HyperText Markup"); + $this->truncateHtml($text, 30)->shouldReturn("HyperText Markup Language, commonly"); $this->truncateHtml($text, 50)->shouldReturn("HyperText Markup Language, commonly referred to as"); $this->truncateHtml($text, 75)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup'); $this->truncateHtml($text, 100)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'); diff --git a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php index 1496c78..474d985 100644 --- a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php +++ b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php @@ -38,7 +38,7 @@ public function truncate($text, $charactersCount) { $strippedText = strip_tags($text, $this->allowedTags); - return $this->truncateHtml($strippedText, $this->breakpoint->calculatePosition($strippedText, $charactersCount)); + return $this->truncateHtml($strippedText, $charactersCount); } /** @@ -84,7 +84,7 @@ private function truncateHtml($string, $charactersCount) $offset += $match[1][1] - $match[0][1]; } - $newString = mb_substr($string, 0, $limit = min(mb_strlen($string), $limit)); + $newString = mb_substr($string, 0, $limit = min(mb_strlen($string), $this->breakpoint->calculatePosition($string, $limit + $offset))); $newString .= (mb_strlen($string) > $limit ? $this->append : ''); $newString .= (count($tags = array_reverse($tags)) ? '' : ''); From b15e242c4c13b32fe631cfd7e251019e0f22d0d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my?= Date: Fri, 30 Oct 2015 15:47:45 +0100 Subject: [PATCH 027/193] [ADD] Support PSR-4 Composer --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index ad08edc..48d0fd8 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,7 @@ "bin-dir": "bin" }, "autoload": { - "psr-0": {"": "src"} + "psr-4": {"": "src"} }, "extra": { "branch-alias": { From 2c72fbaf29efb47459814b843392e70917ec69bb Mon Sep 17 00:00:00 2001 From: Max Roeleveld Date: Fri, 30 Oct 2015 20:06:04 +0100 Subject: [PATCH 028/193] Refactor Number into separate languages The old Number\Ordinal is no longer directly responsible for the ordinal string generation. Instead, it'll use a dynamically included closure for that. Closures for English and Dutch are included. --- spec/Coduo/PHPHumanizer/NumberSpec.php | 18 +++++++++++ src/Coduo/PHPHumanizer/Number.php | 18 ++++++++--- src/Coduo/PHPHumanizer/Number/Ordinal.php | 23 +++++++------- .../PHPHumanizer/Number/Ordinal/Builder.php | 30 +++++++++++++++++++ .../Resources/translations/ordinal.en.php | 22 ++++++++++++++ .../Resources/translations/ordinal.nl.php | 11 +++++++ 6 files changed, 105 insertions(+), 17 deletions(-) create mode 100644 src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/ordinal.en.php create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/ordinal.nl.php diff --git a/spec/Coduo/PHPHumanizer/NumberSpec.php b/spec/Coduo/PHPHumanizer/NumberSpec.php index 6acaa24..1e03273 100644 --- a/spec/Coduo/PHPHumanizer/NumberSpec.php +++ b/spec/Coduo/PHPHumanizer/NumberSpec.php @@ -109,4 +109,22 @@ function it_throws_exception_when_converting_roman_number_is_invalid() $this->shouldThrow(new \InvalidArgumentException())->during('fromRoman', array("")); $this->shouldThrow(new \InvalidArgumentException())->during('fromRoman', array("foobar")); } + + function it_ordinalizes_numbers_for_dutch_locale() + { + $this->ordinalize(1, 'nl')->shouldReturn("1e"); + $this->ordinalize(2, 'nl')->shouldReturn("2e"); + $this->ordinalize(23, 'nl')->shouldReturn("23e"); + $this->ordinalize(1002, 'nl')->shouldReturn("1002e"); + $this->ordinalize(-111, 'nl')->shouldReturn("-111e"); + } + + function it_returns_ordinal_suffix_for_dutch_locale() + { + $this->ordinal(1, 'nl')->shouldReturn("e"); + $this->ordinal(2, 'nl')->shouldReturn("e"); + $this->ordinal(23, 'nl')->shouldReturn("e"); + $this->ordinal(1002, 'nl')->shouldReturn("e"); + $this->ordinal(-111, 'nl')->shouldReturn("e"); + } } diff --git a/src/Coduo/PHPHumanizer/Number.php b/src/Coduo/PHPHumanizer/Number.php index 560ed86..e34d440 100644 --- a/src/Coduo/PHPHumanizer/Number.php +++ b/src/Coduo/PHPHumanizer/Number.php @@ -9,14 +9,24 @@ class Number { - public static function ordinalize($number) + /** + * @param int|float $number + * @param string $locale + * @return string + */ + public static function ordinalize($number, $locale = 'en') { - return $number.self::ordinal($number); + return $number.self::ordinal($number, $locale); } - public static function ordinal($number) + /** + * @param int|float $number + * @param string $locale + * @return string + */ + public static function ordinal($number, $locale = 'en') { - return (string) new Ordinal($number); + return (string) new Ordinal($number, $locale); } public static function binarySuffix($number, $locale = 'en') diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal.php b/src/Coduo/PHPHumanizer/Number/Ordinal.php index f1ae6be..1be0042 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal.php @@ -9,27 +9,24 @@ class Ordinal */ private $number; + /** + * @var callable + */ + private $translator; + /** * @param int|float $number + * @param string $locale */ - public function __construct($number) + public function __construct($number, $locale = 'en') { $this->number = $number; + $this->translator = Ordinal\Builder::build($locale); } public function __toString() { - $absNumber = abs((integer) $this->number); - - if (in_array(($absNumber % 100), array(11, 12, 13))) { - return 'th'; - } - - switch ($absNumber % 10) { - case 1: return 'st'; - case 2: return 'nd'; - case 3: return 'rd'; - default: return 'th'; - } + $closure = $this->translator; + return (string) $closure($this->number); } } diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php new file mode 100644 index 0000000..ed15848 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php @@ -0,0 +1,30 @@ + Date: Fri, 30 Oct 2015 21:21:48 +0200 Subject: [PATCH 029/193] Changed suffix for precise translations and added tests --- spec/Coduo/PHPHumanizer/DateTimeSpec.php | 45 +++++++++++++++++++ .../Resources/translations/difference.bg.yml | 4 +- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/spec/Coduo/PHPHumanizer/DateTimeSpec.php b/spec/Coduo/PHPHumanizer/DateTimeSpec.php index ead80e9..a631ee2 100644 --- a/spec/Coduo/PHPHumanizer/DateTimeSpec.php +++ b/spec/Coduo/PHPHumanizer/DateTimeSpec.php @@ -189,4 +189,49 @@ function it_humanizes_precise_difference_between_dates_for_it_locale() $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'it')->shouldReturn($example[2]); } } + + function it_humanize_difference_between_dates_for_bg_locale() + { + $examples = array( + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'в момента'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", 'след 5 секунди'), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", 'преди 1 минута'), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", 'преди 15 минути'), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", 'след 15 минути'), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", 'след 1 час'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", 'след 2 часа'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", 'преди 1 час'), + array("2014-04-26", "2014-04-25", 'преди 1 ден'), + array("2014-04-26", "2014-04-24", 'преди 2 дни'), + array("2014-04-26", "2014-04-28", 'след 2 дни'), + array("2014-04-01", "2014-04-15", 'след 2 седмици'), + array("2014-04-15", "2014-04-07", 'преди 1 седмица'), + array("2014-01-01", "2014-04-01", 'след 3 месеца'), + array("2014-05-01", "2014-04-01", 'преди 1 месец'), + array("2015-05-01", "2014-04-01", 'преди 1 година'), + array("2014-05-01", "2016-04-01", 'след 2 години'), + ); + + foreach ($examples as $example) { + $this->difference(new \DateTime($example[0]), new \DateTime($example[1]), 'bg')->shouldReturn($example[2]); + } + } + + function it_humanizes_precise_difference_between_dates_for_bg_locale() + { + $examples = array( + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 минута, 45 секунди преди това'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 час, 40 минути преди това'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 ден, 15 минути след това'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 дни, 2 часа след това'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 година, 2 дни, 4 часа след това'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 дни, 10 часа след това'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 ден, 1 час, 40 минути преди това'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 години, 1 ден след това'), + ); + + foreach ($examples as $example) { + $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'bg')->shouldReturn($example[2]); + } + } } diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml index 98136c5..9e7fe54 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml @@ -31,5 +31,5 @@ compound: week: "{1} %count% седмица|[2,Inf] %count% седмица" month: "{1} %count% месец|[2,Inf] %count% месеца" year: "{1} %count% година|[2,Inf] %count% години" - ago: "преди" - from_now: "след" \ No newline at end of file + ago: "преди това" + from_now: "след това" \ No newline at end of file From 149d4c391772392d17d4028e2023ef6b2835bd7b Mon Sep 17 00:00:00 2001 From: Brad Mostert Date: Fri, 30 Oct 2015 23:16:35 +0200 Subject: [PATCH 030/193] Added support for optional explicit BinarySuffix precision --- src/Coduo/PHPHumanizer/Number.php | 4 +- .../PHPHumanizer/String/BinarySuffix.php | 38 +++++++++++++++++-- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/Coduo/PHPHumanizer/Number.php b/src/Coduo/PHPHumanizer/Number.php index 560ed86..e77f561 100644 --- a/src/Coduo/PHPHumanizer/Number.php +++ b/src/Coduo/PHPHumanizer/Number.php @@ -19,9 +19,9 @@ public static function ordinal($number) return (string) new Ordinal($number); } - public static function binarySuffix($number, $locale = 'en') + public static function binarySuffix($number, $locale = 'en', $precision = null) { - $binarySuffix = new BinarySuffix($number, $locale); + $binarySuffix = new BinarySuffix($number, $locale, $precision); return $binarySuffix->convert(); } diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index 446f642..7ed216f 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -29,21 +29,53 @@ class BinarySuffix ); /** - * @param $number - * @param string $locale + * @param integer $number + * @param string $locale + * @param integer $precision * * @throws \InvalidArgumentException */ - public function __construct($number, $locale = 'en') + public function __construct($number, $locale = 'en', $precision = null) { if (!is_numeric($number)) { throw new \InvalidArgumentException('Binary suffix converter accept only numeric values.'); } + if(!is_null($precision)){ + $this->setSpecificPrecisionFormat($precision); + } + $this->number = (int) $number; $this->locale = $locale; } + /** + * Replaces the default ICU 56.1 decimal formats defined in $binaryPrefixes with ones that provide the same symbols + * but the provided number of decimal places + * + * @param integer $precision + * + * @throws \InvalidArgumentException + */ + protected function setSpecificPrecisionFormat($precision) + { + if($precision < 0){ + throw new \InvalidArgumentException('Precision must be positive'); + } + if($precision > 3){ + throw new \InvalidArgumentException('Invalid precision. Binary suffix converter can only represent values in '. + 'up to three decimal places'); + } + + $icuFormat = str_pad('#.', (2+$precision), '0'); + foreach ($this->binaryPrefixes as $size => $unitPattern) { + if($size >= 1024){ + $symbol = substr($unitPattern, strpos($unitPattern, ' ')); + $this->binaryPrefixes[$size] = $icuFormat.$symbol; + } + } + } + public function convert() { $formatter = new \NumberFormatter($this->locale, \NumberFormatter::PATTERN_DECIMAL); From 81a1073341afdc02c0d82ec0ff3f1152520b7e42 Mon Sep 17 00:00:00 2001 From: Brad Mostert Date: Fri, 30 Oct 2015 23:23:40 +0200 Subject: [PATCH 031/193] added a BinarySuffix precision example --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index f7ba58a..e226c02 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,14 @@ use Coduo\PHPHumanizer\Number; echo Number::binarySuffix(1536, 'pl'); // "1,5 kB" ``` +Number can also be humanized with a specific number of decimal places by providing a precision parameter + +```php +use Coduo\PHPHumanizer\Number; + +echo Number::binarySuffix(1325899906842624, 'en', 3); // "1.178 PB" +``` + **Metric Suffix** ```php From b0d1d533da19ba485bf616cf8a7147d5b77a6bde Mon Sep 17 00:00:00 2001 From: Brad Mostert Date: Fri, 30 Oct 2015 23:28:27 +0200 Subject: [PATCH 032/193] added another BinarySuffix example --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e226c02..1c613f6 100644 --- a/README.md +++ b/README.md @@ -112,11 +112,12 @@ use Coduo\PHPHumanizer\Number; echo Number::binarySuffix(1536, 'pl'); // "1,5 kB" ``` -Number can also be humanized with a specific number of decimal places by providing a precision parameter +Number can also be humanized with a specific number of decimal places by providing a precision parameter (between 0 and 3) ```php use Coduo\PHPHumanizer\Number; +echo Number::binarySuffix(1024, 'en', 3); // "1.000 kB" echo Number::binarySuffix(1325899906842624, 'en', 3); // "1.178 PB" ``` From 87618d4b71250326840476937debf3e65ffba407 Mon Sep 17 00:00:00 2001 From: Brad Mostert Date: Fri, 30 Oct 2015 23:33:43 +0200 Subject: [PATCH 033/193] added tests for BinarySuffix with precision --- spec/Coduo/PHPHumanizer/NumberSpec.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/spec/Coduo/PHPHumanizer/NumberSpec.php b/spec/Coduo/PHPHumanizer/NumberSpec.php index 6acaa24..8651a66 100644 --- a/spec/Coduo/PHPHumanizer/NumberSpec.php +++ b/spec/Coduo/PHPHumanizer/NumberSpec.php @@ -39,6 +39,20 @@ function it_convert_number_to_string_with_binary_suffix() $this->binarySuffix(1325899906842624)->shouldReturn("1.18 PB"); } + function it_convert_number_to_string_with_binary_suffix_with_precision() + { + $this->binarySuffix(-1, 'en', 3)->shouldReturn(-1); + $this->binarySuffix(0, 'en', 3)->shouldReturn("0 bytes"); + $this->binarySuffix(1, 'en', 3)->shouldReturn("1 bytes"); + $this->binarySuffix(1024, 'en', 3)->shouldReturn("1.000 kB"); + $this->binarySuffix(1025, 'en', 3)->shouldReturn("1.001 kB"); + $this->binarySuffix(1536, 'en', 3)->shouldReturn("1.500 kB"); + $this->binarySuffix(1048576 * 5, 'en', 3)->shouldReturn("5.000 MB"); + $this->binarySuffix(1073741824 * 2, 'en', 3)->shouldReturn("2.000 GB"); + $this->binarySuffix(1099511627776 * 3, 'en', 3)->shouldReturn("3.000 TB"); + $this->binarySuffix(1325899906842624, 'en', 3)->shouldReturn("1.178 PB"); + } + function it_convert_number_to_string_with_binary_suffix_for_specific_locale() { $this->binarySuffix(1536, 'pl')->shouldReturn("1,5 kB"); From 06b0735959baa44ed99c1030716553de1210f5db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Ram=C3=ADrez=20Ruiz?= Date: Sat, 31 Oct 2015 12:56:18 +0100 Subject: [PATCH 034/193] Added spec for PreciseFormatter. --- .../DateTime/PreciseFormatterSpec.php | 104 ++++++++++++++++++ .../DateTime/PreciseFormatter.php | 7 +- 2 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php diff --git a/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php b/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php new file mode 100644 index 0000000..cce0989 --- /dev/null +++ b/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php @@ -0,0 +1,104 @@ +beConstructedWith($translator); + $translator->transChoice( + 'compound.day', + 10, + array('%count%' => 10), + 'difference', + 'en' + )->willReturn('10 days'); + + $translator->transChoice( + 'compound.hour', + 5, + array('%count%' => 5), + 'difference', + 'en' + )->willReturn('5 hours'); + + $translator->trans( + 'compound.from_now', + array(), + 'difference', + 'en' + )->willReturn('from now'); + + $translator->trans( + 'compound.from_now_prefix', + array(), + 'difference', + 'en' + )->willReturn(''); + + $translator->transChoice( + 'compound.day', + 10, + array('%count%' => 10), + 'difference', + 'ru' + )->willReturn('10 дней'); + + $translator->transChoice( + 'compound.hour', + 5, + array('%count%' => 5), + 'difference', + 'ru' + )->willReturn('5 часов'); + + $translator->trans( + 'compound.from_now', + array(), + 'difference', + 'ru' + )->willReturn(''); + + $translator->trans( + 'compound.from_now_prefix', + array(), + 'difference', + 'ru' + )->willReturn('через'); + } + + function it_format_compound_datetime_diff(PreciseDifference $diff, CompoundResult $dayResult, + CompoundResult $hourResult) + { + $dayResult->getUnit()->willReturn(new Day()); + $dayResult->getQuantity()->willReturn(10); + $hourResult->getUnit()->willReturn(new Hour()); + $hourResult->getQuantity()->willReturn(5); + + $diff->getCompoundResults()->willReturn(array($dayResult, $hourResult)); + $diff->isPast()->willReturn(false); + $this->formatDifference($diff)->shouldReturn('10 days, 5 hours from now'); + } + + function it_format_compound_datetime_diff_for_specific_locale(PreciseDifference $diff, + CompoundResult $dayResult, CompoundResult $hourResult) + { + $dayResult->getUnit()->willReturn(new Day()); + $dayResult->getQuantity()->willReturn(10); + $hourResult->getUnit()->willReturn(new Hour()); + $hourResult->getQuantity()->willReturn(5); + + $diff->getCompoundResults()->willReturn(array($dayResult, $hourResult)); + $diff->isPast()->willReturn(false); + $this->formatDifference($diff, 'ru')->shouldReturn('через 10 дней, 5 часов'); + } +} diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index e2f0b48..4230728 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -54,7 +54,12 @@ private function calculateCompoud(PreciseDifference $difference, $suffixName = ' { $compound = $difference->isPast() ? 'compound.ago'.$suffixName : 'compound.from_now'.$suffixName; $compoundString = $this->translator->trans($compound, array(), 'difference', $this->locale); - $compoundRes = substr_compare($compoundString, 'compound', 0, 8) ? $compoundString:''; + + if (strlen($compoundString) > 0) { + $compoundRes = substr_compare($compoundString, 'compound', 0, 8) ? $compoundString:''; + } else { + $compoundRes = ''; + } return $compoundRes; } } From 9be57709a0e83714d8bd29d55e3c437a57dbeb6c Mon Sep 17 00:00:00 2001 From: Daniel Ribeiro Date: Sat, 31 Oct 2015 23:57:39 +0400 Subject: [PATCH 035/193] Added support for multiple character separators at string humanizer --- spec/Coduo/PHPHumanizer/StringSpec.php | 6 ++++++ src/Coduo/PHPHumanizer/String.php | 4 ++-- src/Coduo/PHPHumanizer/String/Humanize.php | 20 ++++++++++++++------ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/spec/Coduo/PHPHumanizer/StringSpec.php b/spec/Coduo/PHPHumanizer/StringSpec.php index 0143dc2..327f7af 100644 --- a/spec/Coduo/PHPHumanizer/StringSpec.php +++ b/spec/Coduo/PHPHumanizer/StringSpec.php @@ -2,6 +2,7 @@ namespace spec\Coduo\PHPHumanizer; +use Coduo\PHPHumanizer\String\Humanize; use PhpSpec\ObjectBehavior; use Prophecy\Argument; @@ -12,6 +13,11 @@ function it_humanize_string() $this->humanize('news_count')->shouldReturn('News count'); } + function it_humanize_string_with_special_character() + { + $this->humanize('news-count', true, Humanize::SEPARATOR_DASH)->shouldReturn('News count'); + } + function it_humanize_strings_without_capitalize() { $this->humanize('user', false)->shouldReturn('user'); diff --git a/src/Coduo/PHPHumanizer/String.php b/src/Coduo/PHPHumanizer/String.php index a9a268b..43668b6 100644 --- a/src/Coduo/PHPHumanizer/String.php +++ b/src/Coduo/PHPHumanizer/String.php @@ -7,9 +7,9 @@ class String { - public static function humanize($text, $capitalize = true) + public static function humanize($text, $capitalize = true, $separator = Humanize::SEPARATOR_UNDERSCORE) { - return (string) new Humanize($text, $capitalize); + return (string) new Humanize($text, $capitalize, $separator); } public static function truncate($text, $charactersCount, $append = '') diff --git a/src/Coduo/PHPHumanizer/String/Humanize.php b/src/Coduo/PHPHumanizer/String/Humanize.php index 5da7e8f..b8a0dec 100644 --- a/src/Coduo/PHPHumanizer/String/Humanize.php +++ b/src/Coduo/PHPHumanizer/String/Humanize.php @@ -4,6 +4,9 @@ class Humanize { + const SEPARATOR_DASH = '-'; + const SEPARATOR_UNDERSCORE = '_'; + /** * @var array */ @@ -15,30 +18,35 @@ class Humanize private $text; /** - * @var bool + * @var boolean */ private $capitalize; + /** + * @var string + */ + private $separator; + /** * @param $text * @param bool $capitalize + * @param string $separator */ - public function __construct($text, $capitalize = true) + public function __construct($text, $capitalize = true, $separator = self::SEPARATOR_UNDERSCORE) { $this->text = $text; $this->capitalize = $capitalize; + $this->separator = $separator; } /** * @internal param bool $capitalize - * * @return string */ public function __toString() { - $humanized = trim(mb_strtolower(preg_replace(array('/([A-Z])/', '/[_\s]+/'), array('_$1', ' '), $this->text))); - $humanized = trim(str_replace($this->forbiddenWords, '', $humanized)); - + $humanized = trim(strtolower(preg_replace(array('/([A-Z])/', "/[{$this->separator}\\s]+/"), array('_$1', ' '), $this->text))); + $humanized = trim(str_replace($this->forbiddenWords, "", $humanized)); return $this->capitalize ? ucfirst($humanized) : $humanized; } } From 31cde3c2b12692dcc731fb202c11c81ed577f8b5 Mon Sep 17 00:00:00 2001 From: drgomesp Date: Sun, 1 Nov 2015 15:33:18 +0400 Subject: [PATCH 036/193] Removed useless constants for character separators --- composer.phar | Bin 0 -> 1177045 bytes spec/Coduo/PHPHumanizer/StringSpec.php | 2 +- src/Coduo/PHPHumanizer/String.php | 2 +- src/Coduo/PHPHumanizer/String/Humanize.php | 5 +---- 4 files changed, 3 insertions(+), 6 deletions(-) create mode 100755 composer.phar diff --git a/composer.phar b/composer.phar new file mode 100755 index 0000000000000000000000000000000000000000..502d1e716f850689687771ecda6a21be906260e0 GIT binary patch literal 1177045 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 z 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

}>@Dr!rksYVqKw8)x^6}jJGb7*p%BQVyG-DA zGJ;g-X9+qMULt7+3i{#xp{5MTAvcqv1mnSie*K!+8w?~n;jbX@HK_Io-}Jpr0->=g zFvHb80cniWY;h4<;cN~)@q&OF2Mnzm zP>s5{{zRME2LwuVZ8Pk*Y>VfDNgEIv1Rulrcr>`w6c~oyj-Xet*1aRR*8o&Z~jf6W5r3&o}B0>O{+`vR1hdS;zd3!lzoA`M`mD`=eW|7s^ zKWzN@Xl?K4;pQWu9GJ7K#nzwf?rv=Ddr?x`l7x#9L@LUXqT^-n>{?Qa>6TX>Ey&qY zH8_$ap-C4{j2-hfRJFrAxFN(#3$v+APLr)>EV=Zi!o5d?=5ZG(8^v-<*(QB>PVgF! zq3*30myqJ>Gm@Aq4`!L%6l1k8uQvlhICldK6B|440f;qdz_ii)gy<6hLl>^ZWnzAE zYUkiQdgQ}gzyDi&yRy#B?J7=g;hh}4ErR)P#Mv}FJ#{bb<@NZ*NoU0$;eQmbuRkO2 zt|Y<|Z`0SGtUvhV@GzxnQh=AG?{WpiTy+yeLgwDm#8b>pqJ!9anMcz}j3Y@Ssd72I zJn?=%VQ8NK_{l_9bL0g#M#Dd7Xf~BA^ApDv3=~1*bO(BMX@jd#M(huNkOK@+Za+lzppRh4~CUgrqjv^IXu|h z)ewa2%MZwBu)TXEA4xR$0h*kba9$si1tEB2D6;ppk~m*I+}`cndC>XflOH;pTb;#E zVvA_#)1}UX?apH8k^#k`!j4w>gtQbO1G{|K9qJMUVLqMX0_#~4XNYsj;`*0rrCyxy1R=Q+d#Nk40`Oc@m z>zoX=6z2+x#Q{-{nz&+v$BPl0V($A`iY3z^acNYGmkqKg|D_F^YS`AYR_G|r5RkVV z&bw9ou$u3DU|y7ePX{@GC&P<=eB)o^TM$@-xUgsr7uXwMTlfaGRb~1htIE1r01KnW zL}Saxwv(78&5R&&gTtnp*Zr1*hb zljLIZjnN292Qfj23^TB~aV(CLq(}c&upKBc=0{2pX7xfsonG{?tMB2KL^`I;q(hd5 zxFmR>bWpqn0FhG?6-A-CqFdEqaC0Pza|~kJFo0p(W+VVX64A{1M)HfuR*qOjSO)rT z=?vTZAnxnb^LH@Tg*jE@+uw0YlMeq8Gitc?3AJ4-HL~LT`3+}Qt0xnCbH7Mtpx#mY z)igVHVp8{?f#qiHy`Pk5B(yO$Zo*+S{0kQJW{?ikQ_`3#(AE`qB}^A%Z*jch;%wME z2_pz!qHYZ{X~}F;5t3R#Z+8lmz@w(OwPsx3cFmeY1&2`ejH;aKS!u44ZQ2+wUPg{@y__l4R83EwS$`(y5^4qtX1tFperw z*Uk6o)Dex1Nvhc45;~Ie3Vsh`q?i0$e_Fl}Pi?u)7U!`iCz&(WR*xQp#Ee2ZcIUOo zz?FGX3B=^)`3K5A&woNg;j$SeF`9r9-eF@eXsdqCJZ-*hj(&cDlF0dXL^8VAG^75B zVydP*MHkYhahCU{sSg3GvM{3>$Z4A?Xs<@bvpUUxk6gvzcjV*zxrfm7^WGt}rvc3L z?l0ZzpPd}?^P|DVmHgOYHg@x-=3n^*npIG}ifx8)``!LITyQC$%H)W%RQPcB8Hvsd zbdvTm`9P@H5cbjPmVdPNr=z{~?>8Q=VS#@x2YwM$zPG=-xxODie1S1*`QPv1lz#6{0#E{R5`Npjed<7M)O6>lRmYmPK9yi+>YiZo*^jJHrDDfdKmj=8E>gGUvz z11`*KKEA(t=gzwUE#RzJ>ea35O){5vkV||VV)}bcNQHmkW+>BxnGN5MO&aa$P&lGC z{zBaskX1rObfl{0HYK;6OsD{p=nZxorBiyN6-L&Cnil>+|G?9_{Gicmxu_ z$l*GUlSUvKKFUsI96l+~g>YHJ>MA_w<31Pl;sSAzAxtaS@-J76oPGCeLlH|$TqFHG ztd?9PUw-*p%`72-fx*%pfkfMxL`4x<1biv8;TaD6LxSGcT_=(iF&Tg!lgG(n<|WVr zFuf@0SGszQxpe=HNp95B)BYy03q@jTkKv?^fGs`i;T%p8wxW9H{E7FC#e>}n4w2z} z&exq^{ccV-$_$^7m&?lnfGhyPM$M%07i2Egj$l?FO<3lifkhwWM@3hqn_!M@7G z#f7oRM&L)G&P0k37kfb*AxcbJzYFw%qZ~>6=%jxvmxx$(fLm~FDGavVB_r3P`LG*F zUmUE06QF%_an*axM2%9QvVd$L55Z#q!VwL?M@QnHURk-L|Btl((KD*!ULma9lj!4v z<^U>#*0StL?%kDXay0UQr%Zp8*c?sL{_;HpNW-Z+yy%@lLB>UCS4yC|Imt@ei85ZD zW;ap@OGk`>X)^f0%~8;7BzZ^pid+A9CJ#xzFfQOM4wBR1VKYf_1Szm(b947;UEQtBNGI(uByyc4v@^FA)L>c-UTq}b#R*je7FNpNfwE`Z? zb`NlnN;rG>DX|b)6&b6*Ehfgm;TLf%G~?Lad064?tezZNl_Pm>TkCMab`(X_7!+tA z3T(t=Y`T3U{)}5IbLa%eh%*Vpx-*8ruSqa;9eOs9%?F)(Uw3|e_e-p5(h6x3SeIo~ zZwpYd5s|c-;faOgvJu>D$TdD2MBSpa1$*Arkqk>5{?sk#F(_gAilBV)TiQ{}PXZ?R z57n(=1g!Pz&%cn<&N2CkFu`>nX;-$I7Hxzp0+7sf)L(>)z+NqO38z>KK41CO%D>Wh z@Dt! zh~tIG$;m*(Mr==kMpVbh#sd1d)c`PiX&rKEZFMDh2dBP1BSwA?%s-SBV(fw6o9f3#B1+w96jFL zd%U*4p0xJl;shz;&xWr$u=(>aF;XaD#?A+0VP@?OuJ7YEvGwoQb|Yj_)nfjms}Zi4 zIDUb9pOE!>q`9Wrn|reV@VBw0$GtPo3QiB>{qk>PGdKc`nEdhJ*%`CS91lmd0pYiD zv}FA7F!V6nu}Q!8Rah0^z|xG&{;;9;cZG3FvvT^p2f?g4STPMCPx3kY*TS%y>N%x8 zX3%$`cF%6)74`ThfMKo z&Jj+JXn0EZ>U7}Cz)N8`NdL7gj2rV?G;6Sv|6%Ro+zmCzyZ8kU!J|G!vgfPhL}E}d zU!P!uu_sp$b{S;AdZ04c<+upBX~GNKKev7Q@7JJWHfYN7v+L7SAxi1%0@@vOgM{x) z4+wURYrX*ijL)5~pacsTeERG&65$-&)nI)n;)z=b7i7smZz4A(3Cg5uT2dHmcfosO zBL#G~(q~zSB=zjA)H3jqAxvQ4u;UQuJxRK}4~ZJSt{MVJSaz$OSX9Zl{BarHq1VB2=z^_%i$3C$F^CG<21nK)vi3x4|i>JKuPPhgm=bx-105*cuSJdTWFgs$lNB2gOST4ZxX9;6QCH zBWzff<6mq!{)NjCa9}O|Mb~0lDR2d@pI}Rj4TsAcOrA(FvG|DY7}pdqWk~>UCs+`) zU_=3@@&cm?FNC~mqY&EaPOpohefAl_`han>wo7$|MaMZyu#`!G%nOltvv-gShYUWx zQjrm*1>DJl%WD)Hj=Gw8{zJ0X4{)fHjjV`~h?e4Dqx$<3P`wwf6 zo@_Mh$~W4gw!Q;U-m{y3U``LOKwHo?;3T%kP69S@`hXQuaSA-J%CYSm@#KDSJ4O9;W<0_>lz;pQ4BG zzrS@?iuQHF5V7-V>^ng?JD%6x?k*p`zWZ$T;FVB5m8KbYk2rz)J7Vp;WKfgFTTZKL=;>1M*9FxEkR5s z4iN{w6D+0Jg=u26C79Xt7mRAAQmLcB0Yx(bXyJk!F*DzT(;=C>7WOW2#ta`apu%|**gqf2EIe~eLHPbl&KA?GD z;b9DitHn`JgH$&a6;?G>)5uDWNxN?5vB|Ln{F_F2YXFBIHaS-PK)To9J?Ge374SU< z41eh3a%BZk4XO^PoI1jg4OF|k2D0#Z|22T>zWs6WaQx{ZELWdmSq4(iRtUbW;(z%^ zS#Ve(<4xU?kI*yIw*8v~IZtNz-E8fuxBct znG3Nnq4*sh-luY#V8LsNL0``X5eO*}jE!%(e@vUlK9VydSjv&4qHCoq&S%X3F%r+w zzE(lEH3)<+y#4$gyNINK4isYAMCHU1j}``Hh?qD064J+|-~w1_evkN} z;vQgIHU%x6P)OwLvIG8)*x4e#Yu7;}dU%eal}IqXf-Ya=J!8e;OvDKR)0`S`K7Ntu1s@DiH8y-dpaPe47IaS5@|%KP_{6i#ir`Jy1Mgd zZ66129)}DTyBpta{0Yk>!9>cl@`a-C%ysYl2zLgU3xB z(5u(IyS#9hH9xn%U)bMY+21eqFDX2MN&W1O*zT{F!9kMGpedmJ`X?eZgi%8)NN`2h z;Ik#9x9o$RC^CsNn<_BS3#d5fm;P;Wp+|0{1#vP)~(nI^j~`)hWieGg6>sx}T4 z%z9XF6UU=tPDY}2CJdy~RkMp?EO{@jqwukVbq+3w?}*?q6jy7otRe>%<0v0p?4U#4 zMS;c^U_aAC)M7VR#Q-@9l)RI^^aYM&kPIl_vdP98qfM!I269XlTBU$4wk;&iGaL^H z__vOc5*6;1%QGP$9(1tz`9cw)Mu3La<~UFVLPV+$gx!k^fLnp4F6T8pVSsc;WzI(I z&EO6FRh5au!d&Lk2QP$`ryMzGkult>bQW3Em&~$8i>;Gd^qM3DLw<+s6YGE2-^G89 z9&J9}+*ik5!VW_x>IBe$8*CJD2ImB~6M+OxArZaRXzrW8V9j_)40Wnd9x9>|v`uPg zo&=|tf^y(kUfPtQA>yd}b`d%wpN~|b7b=8)Ht(8goBn?L{*pMr9dt*jspbJh3`v^D zDy0^k*lItt>qG|0WTI!2LdNcG1pzWyKSBk)D;Ma2;biOd_{zkH#E(sifv3x!6t9!}HpJy)9yPBAHmf+PhRf*sT3N5Nd*oY7yv zj5B^pwH+Ee*_hYE&q(y`oXTNuWkWI=sKnlGF~f^<-Cux2r7H{)sy?9jc~pJQGia51 zzTu%AkpLyC_zrre<$qk17(hW|cNTPmEy9e$^TEixShp@&%ehH;Vz&F@?s4Jm7wShW^yix`fW^{}-HWZU&ks}kjp2D&x1J7H_O zY*V>ELG0_92WKmyBk6(@K`xB_2p-qPE=^h!bccqy(T#r-6^CcI@Zhn;@zahjUcY`% z;-;i$NY1-YCGCZeN@6%*yL8a5~Av5>P$WTf$&bBCzzL*7B<$6Rrsa{@; zsz6p$mQ$>?>%D9nU^LX|=1U54x-hB1_3Mw5JuvrPGV=n6*BgA}RVbTVWs=kUl z9Poga0qR};T({kZKV7OpYj#-FR+x8?*$h*|;;&7QZW2;CNfj5-V|T$Ib%CsFJ!G@e9MPA3#%+QQrhDCY^7QT-I1*mrIZpRhOLVu?pkE2tMczW&{50HQ$za)-RA47 zU}@YPR>onK!sciqz#kLda;f`Lw9^+Fb&dEx?o*W3-6AQG{A8vGtPw}9M)rHDi|h0L zXmGp;>e3T5s-K~K(`F=!7m=b1DB+nSMMdF<1HKiLf@0Ib!sZ+lq)>f^(6dy=Aed@} znIOb~3E|3uglVPwRD44cW{Byixv(JM`e*&~#5a;EUag=?9XXi;j?NH3#>QoHnLvwB zx|PHloGm}4M5{T=U>PEb=HhruH3A(AbmHVIsd@%z#Rg+uHK+0>RSJS-5@LjOkk5@+ z2BRSxW@L-BxgK;5ubzIkG_Tj@4EHGq2^9$Q-y}RNob6r0hIN;(iiB_6}vRx*TW_ zW9rtn+D}&}2k<|XkbRz`MlQPJYg~CCl5@3_HG<`kJp;bj6V9)1>~5_+`Uw5yO?j{R z+pO=Z$@qhYTy4=Isea4=Qj0q;noexk9|TafMF*(*F$3t^wFgHG>i-C{lQ-oclUk--XlxKbl z$GC2&7CMAm5}}-{tMz`E1OR+WS`)-I;6pIlhMio+h#aZP!L_&9al50LdVqy2?sl(# zj(GUP^$_Ki{4A1*SkWK)I9lSTY|`0TI~(-I)=ij_Z*daM-zCYU)^W!23;}ueX%kxF z=oC(zeB$i*C8KKnkPtD3lZggI_5~MqX3rp$-gx^odp8;mJ=RXZ#VnfDGU)<=!p{b0 zgR3_rnb@-hFG!GY00*7!YT!!#9;)mq?)kaO-=ejb100UaVN(AUUi!aDbXsDpvtZ){ zH5tB?t|FEwTdSmKHRY7g77P<|mdBNGYYZ6jc7v@Vn*$ceUW8)SJPX**@F}1eA8jsq zWQk`f#h1V5Q?TfrV};l{1IpQ?E`y{YM#thCG*ZU3t1fIVeV;loLl*HF<71d8KKT6b zx49L^2)Ly#Ethf7wie=&0`}f^u}~Rfc71$07}5VPh2O~$GzC-MM5wLpJ)Fq5(T97V z5LcoXiz60B+cBOB;wb3?-L5H-S7KEI%HcVw*R`%Ib#3n1b4%SgL8PvnHHA5uP=6;~ z#uW$(imJnbi_7~jE0r>T~RH{4mO{l$VyrNRu z>2*SFU~9tQlZD}J$m}=B4x7^5f{$XE)?#LjJ`AYi3~{iF3)$8%Y?kZF|zaure0%8vf#LMvXyT zMmew8lC*O`EFo-L*Aa*k8!H$RuPj9d%q))>uq-=hJaqV^d_}754X;PYQ{d6N@@`-9 zW%3;>Bu#d|20t`@YhZXq;wgN~)~u<5fnCagk6^h#1|)rndJZNF`wlbkZmUX!aJz{> zO2jKUYB(|PgBaEyA83QLg8UQ@{#DT;cOXbY;;883a+FMWm5h12Vf0kf^Y^ znzB}6xwfV@cw^0!W~@xL3Gffg11O16j22bcVa*w(1)wGsueJ|dRN9|B>{^Ak#ueZh zW+W{*xiPtGs3AxL3NRvVOUg}c3Wu_1YYPP@H@4fyF=p7)rqP~4mz1tHir(oLgIwTmz*UVK8+&9ZGx^5&@-NGleb)X;RY3Kv~XX=WNp zSvwO5iX{>PnMj~T*(z)xioDpYq|{og+6`uo74}~AK3`|js`2&tl-1QNUTqlghirn| z|DV10Z;R_j(uV){r)Yb~)i`luJ3F(_wVuRTVw1!>*yaK!Gqd2Z7~0TJpkcZpi6_Z- zfA70~NF^Perg4(pec$V4cH=(hNTpJ#s#GeKN}4)v)hrRq%(Q@?T9rN1TdzoWnp@BS zy4@|_*AMpCgEIFheTU2WI{1 z@|-EMuYr?`^#Ou$p9?LPu2`}U+%vs)WeX`KuOn4iv=1PbF6rdNHJvSs_5;L)bo233 zBn`Y4UMSfI?sLD0ZZV7HVts)AGJf~N`RwRAs^wyRfSw|22=DfTx9yq^7A5<@eRX~| zzK{f@3%Mf~>jSiNb$pCas_QzKi}e8lzn&nI-!+{}rTW0^TwO3}@ikylsXj0-&Mzl# zCrHQ&dS5?rc1rhwwL1{uo8~n}*LGGfugs;JU?=nSH^^^_J8l;0jiOi+5VR|Vjp6e= zwr9S@YY5q@&;-7}e|f%xU@jiE&McQbk@+jKDz1vLJ2-!vL$0Iwn|xI`r(x$2m)TLU z9_`s6AcuD8{_b3dKcdnd8j<$$r{fnvz0+^R^M5(VlDJ zq{g z@c!>YMR<1Gh2R88oxq_(qN^TLC5x@lm89Am#StIUZusin&c!J^{S5cGqL29H=QR?+ z_!gr;r|Mgr=1|X$6y<#a;vJE|BDhf`O#y+3SA?IkXCzTeA}%E@rY+%9@G}oVA~gwa zpe22QC)^^(DTxt+RK6|4FB6J5+<=G*9%(?lCx^2$R0*l=F>AErxqi9b(msGl-*>+T~aNxS;s+naCnG}iBYBb2{CBXXH(qnnIRxt>6f#6D|E%ZT)MRDv{y*o??2N`E5$CK1G0b9c3ZW>=f#2pwy$VYak{9>r3LaI4gd(x zzo;w6h9=Zj(1g|P7#y(V%UwCpiLuQ4OSqxTIlPmSnOw#lT&71fq|}0(I~DB^+*Dp$ zBidE9QuT$5T)h%0AzD>~i0}1DXw`ot;$nl$x)<8=SL(z~CA@)Fudpn9S^lZM0*W54e*&oqUS93tBBVDwL<;u-C~{sU92 z4M%iAU+5mTNU7~tQmmA?Ar0e>C0CgI|~rqO8hQV(>(0>=UsrP;y^&`ruyw z0*wk*qa}6blqYNxOpv{BjHeIH# z&2fDm)*OC42V=9Z<}@T-Lx7lUHEt8BB1+0Z=5>EchK;`%JCQf_b_B`0(c z2%5*Q29SMW$4XT+N4Hf26L+0|$DSzjc9kAep(c`mU z(GBm=)octd(mSR$euUcL{UpA@0=V{o9w1)f^g`_M{GHd5rNlmLaSd4pkSSIug38x7 zhKntxsOOD}G?6lHu#_5q!2Aa2K(gT!72)nQ6$tjy-KbggmPhOpVExvz9)$2}#hF!{ zI?T)ofx;kSQ4Z9UyIHWBx!6a4R$(Kj+Y%5lEvz$K!xdBi-~|CoktMW%3Y5C$?B2ef zD`Tg1Nrr-IhjuF|qt&dlp}~N?Uh<&R&;Lc?FF<=^W{(GEkgMKt>d@Fj7KYo4cUs7A zR^;83^djnsFjt~pa(C#Idc8X|)88)ibe4vyKsbrgbHkk#si__SWCV%$BMmV^uY^5- z*A0j5S8#S}Rk+)gl@q?yO1R^~=7BIGRQL%<(lhuG^<+&LHU_(1gv(&ENx~8mWZt;# zaF&u0a*`_$J>Q%Zh%bZK4!|S3cegMkJ#~dBbj9|)R~|C6LT78B-oOYlOE#=JHf;Xw zn|_V#65Awn3iPgg8ek%Mqd{qX^Lk@?Qvv0aCRF+rZlXR%5Ov0_TL(OBhRpPKAuS^v zO>Q8MAXCTFlQo9|2rCy8NenG2PAwF$CSt=CB)mZ9k1DX-0#!qPg3izaRXdr+qS2km z-PH>?4T$x+27m!(B|Co7Zi!(W7ur3lE=~xVE5}}f5vJo~`10`sbe&vmLY={NC^sfB zgHEgs`pN9mCbJ}S;3mlCMh*0b%fEjz3Sq&XB(x{_( z@5|HkH;*1&o^SJ@tP%U(;A6BaN6nC7`O}r3?{g! zyM6sxPq=xXOt^fOsBNb%A#9S&^J<$(tyrAH`(T$yW%$qv>gp7OVt#?6CCJN-`@ZB9 zcbtOdyc9idD1R3-U~x%=PljsxNEseH7rl@4g4h8cIaj55+F7VG>uB`{uZ?W)t(6w- zmqI(rpUPyljkr)GWqW4u)tCFvzI^d=dt+Zxo?@a&Hw@=bUv9qq9A9|FF#ob~;JWxZ zPAxko^~m+8z$K+Tv9uWNY=?89+_ISQ6V%Z@=fVZ@c5>`vw@}nllZ!P%hSn6Iua3L= zfHR{0)kFfT%*U}x=4^H(wjuO5K%ZXh#ZXU0eb} z7Hz#a7U)z=HOoiz&XrEhI*T1`*^1JXJ&Oj3E!@D!2Uiub3@JGD-Cq8gypUByLoTt` z&8<#;AeCH z5{z&d@fu)CDi~F`y9=eqr{@=pVZ2-SI2>!_B@7f`H7{|W>F3WjpS}9~K7Va)Kq_$^ zVEt|T3Euyy`~LHdSL^uluu)}wbL%Vl)~NP$;~Uia7_~awV@IC#(rsmtTSM>`wu6Nf zYFXA;gZSG|n%}pd;M*JA(%Ae;{P7*TjwkH`(hHREk*J$TPtrW&eOZ|tv17?rk+6b4 z#}}BuaWI{mnPovRfkubp(0!;62m5r+rH!4CKqdLBwNqipb5}-Oe`dp_CP8__$n0pA z#7met48s3`9&V|O2|?>lc>B%>%MN?4@xfOeDbbunt;P%+%j|6o7YmL1va(TYE1}(} z8_B4KRRaRs)p%p+RnSI;LBfqT1zm+YpxHaBMBv_dI<+jmQcmNtP9e201M|5!L&~F- z>U#us4S3t>9P@j?GxJ#pzmIHI@FNKxy<>ol&1XlrZu2N`g^aB5YcKs!hZU^3#1VaC zhE~um6+qpV_w*GgzKFdU4fWpSZ|I=adTIGjR6ek_VpR8v7I0_sFmR@fY3c?)S-GU zcMh#9Zy1FRJmD0?x9KUXzyvi|cG^nyw=kKzDbeU~MUc4X>$Nh$`r7~)Tx9x>t8tI+ zz<2$!hR8V2Yl@fOXmS<}GVSOhm={=*^~XR7WvJlAW-6Ufilll744Mbtp7BYHqe zynL&82%kGgP7ru|pn)PCFkS|&+s`hrB#x;t_B~dJKtDCx2NALojHDJQ4P~n8c&Brm zAw!7@8wVQVu;{09aN2Xl7g*_(rB|Rwr&wTcqM}N5&EYXTmIQ;>gx=1#nk3D=BjJ7; z;N?Mu!xOpQ1a4?}cDw!y@KK3^DOL&i%IIM8$@h(_){5Xl`X~PwBjsy~C9)uc3dn~4 z`aV@ZScy9PKZ;kWpS#E>u(@F+N58eLRU8`Ymwa5+?eb4FHza9L z9E^ZZe2w1aNnOUQ*ZA4?X`QgU=tZdBzb1};0M_Vbj1ln5tO7GqxW?f%=;hG52vv2P zxTGVOhK%!Jz{X#ZQvQ1ZJ_%wMp}KYxBR|_{2$>87eC!R;NdnS4W)7{3OjWmuOFTr1 zM6k+$uqOjH;Vm%=j|*rN;dU`=z-VHZj-{@+@CUs76_N7a3ouHsy6Duko4D-Qfm7E3 z`WW!Z$_Ba6<#6f(Y#dq_nQQ76$2+qES$%VUj`PmbyT19Clv^JXP$l_1=}IadI+WfC zBf7G5cwHi40)zrtaISPR--q!am(}T%nOfk5z&7ipcev2kcV}+uJCx~flEN1I=Cyh* zj1!)KXegtkyxl9&M~86k-HSHBCEd25Ox8CG3Kaskpj;LMFVyTn(kfo6fqUZNzA^=` z_7&>k8nW399L9T3ug)&yL~Y?WHX~;*WTdQ|#a_bxO)St;tdEs?inqezjSy;`tg<3&WIcAu1E1$pHH)=; zd_U674;IHnBIzpl8=gV%hCb4Rls=0076qo|iFySbUyiP3r;3CeAl^b~B{n?>YNF{U zM%ZOMK?&G$xXejI-bL$jWhpOqhxGjn>2N9*jd3-WisFz7bC>p&PAieR!hSk4eblWR zYI$hJ;djWh5FBEN;YJuUoHmBC?&6GaoS_TumF)0H4biW0^(-LciY~ykF+zO5jB$q` zv0Cb1uEde(sUyh{8dYYVx~Z>XvB1)8eoewu50>JVa=bKqb*5FdEqfq=U=4Lh#8Y{? zB;gf zYI-|2p{4C#TdX100)eEqpG>OSW@;DrPJQ9(Om?t6mBKu}n z8V5k)r>OX}M4S$TlvRZ|R`()jZ8z6q1)VkKxFZGIxTYW_$O)r%IcX`(qI9}Aa`^Yr z+30BS)uYKHgaOLXxgItnjS~}+a$jMY=mUYRWX?tSheSZFLPDb_v2P9)Y^(XqR>Yhy zY_Z3mwzA>Ru$17VoAUe(P~vgm@3?g3v+*2$64UqXonKW$_Q}oZZ8b1v zf_eqE@Jp;I#4ZQ5u%g0+ zWqWteaGYdlI(NedNvKW8q@z-FwF-!>AVo}I^kvN?yie7qaR8$H@QytpCBadC4UCmg zwd|!u099Hs9*9Q65J{HmtQ)l``j+pMz3}t(D_V);Ce3m2r8`lQ=9ha^w~2#swdVfi zTRk~qBcrdwe37o6kuNrsHC=CH>jS^S$X}GsKG^fJqO*(?o0vsFdi+Iip?J*!y?m{9 zTj#aJ3`qLj&ZnT0I^QnP^~-m8`p^Q>X2<+5Hn`PlgL<`SppdLLbyDtL!V;TFfid_R zK@~kVQHm6+&_n%c_+H8XJ=wIdavIrEiv45UA$~TQ1IM?MYhBo!?Ng*OS-a2U8j#~3pej{sN!y0V3hb;M}~RE(!N|K zx91dFO!6J|S9MjpB4O{N7q9prv#}1IK|;K3-X**a?*`gUi0_dcjpLjd6I$pRmAY|u z5!Dv$XVtsa2S5VJkSlPuFSnJf4qu&&WrJ^j|Hb_$sD0w zU=(hD9^I2W*l97IqE!~qS3(bPUGiSr1I=J^xk!sta2qWxTrfJ=_p-5- z@F>=4-3@;ClnsYs7-JQsLV(3pvQ*46lzg%wrUoZ*tsmw)QV_nOA?xO4?De7F!Dq{N zvDcx)xGw_p37IWnti$YOE}(tC8&%ta1qoKWp`lfavcG@ z4637M?c33zHU`E1i#ik>imo29CfOa@tD-Qv=BMubCNYk?EXz8hjuJODhy1>sS&?<6bM4po|``mNXCps!7eN=31 z;wn`OCVa-2++q(nceM?ouR&e$mLpeij~DP=%DWo3I`1hYTW{Bt3HxnJ>r6j>ck7NT zES$ER4-~tK6H<~!j^s~!cgPBRcODJa*4FL~_U-`1@RX3TcfZ`*o5F>ne8K~KKJun4 zZZ)*>?$D`(Tn$|&*vS#S37S_(WQCI~3cJ?fer2PI61iC;Z&o(yrM`-KY^aKiRoZau z>LEqVcPkss*#JH)itl}dATf{|o)^6Ro zDJPNFbbt6)v6fM)#aK^)^{Yb9IZ=#m6^pQZ!BSql$xtkv*{L~xyKqR`ZBU$G5C`Vc z;*i64iwT2#6r9dximmdVmVB$d*^Gb8Z8W&samxJJne>QEhqJr&jIYxKVmc{?D&25z zyzI1YXRGL?9U|PGcZs~2er0L3RUWDOlWj5mvg&rU7~5R7%<(Ge8BCKeU~}RI!Sba# zJ-_jzDfp_51()aWbykgv?Jdhw)0X$N3oc3f^G=lWOa9I=NrX-Ol)lUCtagt~&^Xl& zGnth*;*A>yb&9rPGT@yy5k4TcRVSRLB7_cmrXL1m$AbX6n94-ZGV@YMR%2%O_^hn< zL+QRr+>1yUR|DwN9QW0QYnA$77jaz;*u`B!i3nA#1l-e{`VeSjgEBgQ!_W5Gf1r zU%f$d&tLv0k9iEge)R;WZK7OZykpRX0OTmAbOPx}pXCoovtQlsPE1{cvh{^Ei2#kt zy##Ir{B)=EI^-uc)vTTxb4iFX2(Ahj1&TCuv&V|`EmQLM9{r$qgdsQpHs1h@DmO`>ewcqq|nIYk_&E{D>+ZDR4H!8@r`6D*tP>6f6eIJ zD{uH2{jU}d8gj!jI+Y&G)*OLWfqdK zK&xg;P>R&n9~27I8AE2s54-OdXipd_N@GiQZSc8ykyY}nfk{_nMLE` zR{#y@30ZOCZ@vqJQ^1Z|r*}C^(RiU9@2G%w`V~KF6gpI{8}czldtp3lr+Fo_q7vQ6 za*y~b&lZe^5_0B;fzev&l9e;Se-yPi)O<0w5&W{C_~?(gE~~NhH(%uL5Z+Yil99+N zRFIXeJ&(P`$umj=>3-%lN4=+}aG|n-YBMo4bR6^rA=_o}-JZsR$WV(;qBNSkoJ_Bf zWrdMMa7m+6G+2*b$8uPBX)d z^PdcF;NwWLR;LNl85>Klw-a0;-_v2?^%qyjVLCZf{VV0YwvEEwTTqammF#^XMjC=2 z2@(CCAgHB;3~|#AYD3!n2Ur!?qw8YVBsa&O|GUZgsZH7P!$Jptx|?Me+L$q(mnC56 z@$_gu*h{Zue{k|WmqsfR^dslO?ZpoVvndSK_zFCUXxfg>j~j%hArxAQpLJO21tE#b z*S#Gr&H;BcY`*h~{N%r}D$`m7!ViiTxT2Hs_>R#crC6EZ(m`HPgL6fX27A*xYkvFD z9XuFzewUQ@AvKKj3nHNnCHWMnG=c;bGYEB~%7$KbPAWK4L}K){^j8~}Mr)Zs@6ANT z{{Mf#xl&yWryRx)%6E~2xWOtL?saD)e`vL|Lyg&AY6V`<7aUgyNTrCs8Z1Ar%AF@Z z6UjrgABpG}NWx4pG&6^Q>Bi4ju;`v6^-qxsk%iQHQtgI{4(`z-Q9*pvI+!N+sl*w; zU?@Q&2n39yn2v;x1p&1Ou2|J?C0Z@$2}T`|sk9kARw5{d!kzE0J+LjALdrH}RMIeE znC-7Q2qyGq9-`+r*j6W>zn8u%Sk;tWbi!646<$Io42_+yiaZgcrF!`VE)6-KA<RpE9tM*$B9KP(qj$dlN<9#SrI+?t)^lGypikK;oe>dY6?+7uAh zO*)e4#PoU&9MM7bgAqvTJH`(5CJ&6dq=x z8@b|NlE0ib8l!sJ{g5VUC^2e)Iy#?Mtu4(ET|At-)&~mUh|9h-#(N*XMySs z4(rfNFH!Xsnz|aRv4aP`Y3H=(8j<(H3|}a2ff1I8U`b0s-S9;JhWq<7gf;E&OQYUs&RL zs|VoMly=QZ-JUBo2MWR0luW}s4+mN}`~ivMl-AM<2PL{WgB?Cxd$9HZMCgzpWzI{) zvs!vs$sS}n$KsAx0ZW_(dB+qcemciSb?yTTcs*f?3L2i@YKH5+(!_>|6vlqu@n7pDiu`KUfd10!J@pT+C6 zgcR{y#rCLVJ*8X8e#)xruB;&G(ctziDc&WB_(b^GTzf1n_ho-Nxb6t9o`aRTz%*|l zVywajq5}-)ZBd$U+g*yxH+pPfS94c{aisdS=WwC(VFb}_!)um-7M4ti*x6CTNF*_g zhl#T+#t${Rl4nWlP(M zJ8~-b|ARggLMNfXSUR%N18qR>G@aQPD09U;fBU+sSNTnn}SHwWrwD?RONXs@;^rvrEcfY;2H~+)y zkM1JpKJI58;MZq^j{xQ){e)+|Y8i+aB#>ElURCiLK60&=>N6yu)|pFken5niixM!1 z88bqg{+A*)YW7MsbP=~H&EXOW5jsbMP^58%p=CZs#DTtz@uKQ^!;!VogPG3RopqR zTJYbY203@EeI&|oxbl#M&K1GHY^Bt#qFPb2)}Ok!LE10{Jl)@LNSho>4t1bW5nT-A z9WPVLj!4FPj&0d4MvuLK_epH-gj1xqAfKznPu1vQO9mGJ)f%Z7;rAM1ku+DvC5{Vq zaxifE^l`9z-e-CZ4DtJL(r15I-8~q+eK7jBMbk1P3M{|>e*neqquuU)e zXyvl{;Wu;VRem&EIWKVXnWybZn#ypD$7i()*v*`BTgbTvrH?C*+)t-2F?Do)1LFa% zemHj5vwLmvxh$C{22Z})c=DJ1_03ICH(i&eFTZ~A`OB|gJl%it^2N@p?e%9bUhQZh z9O<$h8afN;uuCrrD=578O_fwI?-Zn0KnSk5Pze*t_Z z$L`06X3Zec6{_;l|3#M&;NGN|z&W3i&>13}FE+NZSpX>pnb-DSPws~E(9O{PMq z0seb6F4Iwz@eQ!kaK>w`zTXK-2br}IqO$-qnwa*z8WoA;FGgkb`XhSLs^U&w-K~}* zVckNanpQ2BWcM?s{7WmsV@llu_R+&9@BW!amJNvNzp>*H;(Ho^cnTrs`|36nFiFvW zB*NasPcMGKe>Q&^tnC{igwM^eDM=i{^^%J%?Y=E4TJ^~U#K9G#@zL4=vh|GE@xV6VG#6RAvq~dV< zzvMq-QIDJyqqePGyoma^@^Y?Zj8sY-OkhUwIOtnyB^iqx4)7=K-YfQ|4H)IDzhY6NT1xckf~6@_XcNIIIqP+pIr08=30_2 zCC17`9Kf<$Sut6!OdTLJ0O?lb0F`wvmJEIKX}Ue=YaT+~6p=1u2uSGgbZ~Ncd2yfr znGe3+-dwil5mk1)(QRb~>$7%t|N8@6vE?{ffqR25o^8Iu&fPcbo6nviInVya^Yv$& z>WWb5xrPD)XkquQsj}~!f^o5i)`m|Paf|b%`)?2-8rpda+wPHelOqo5k^)DCM4~Q+ zD@0lhQ7~Mn+&qwbfpYUAm2xu$0Di|_D5V~%0r_k3B^gueMn=g$7<9wp(m|4<@-(1PdA_GssL>0vNz;zV<&7u}8R_ei*SN9J zcz2cCuQx-xNWQ=DbYTfoMy1i)Uvf*Y-dtSEe4wksaeC2_soqkbIBC#SQ;95Yr6LP} zJi34X6NKzw>HPTqCx<5o)9Lv1@gn6K=%d{w2W5ZzO{DDCN>z7m>g&B)20^&mL=Cn{ zAzqD@PbP!FE(yErL{$MX?boYGQ}KRHnv0lVuUt*voL^1Lkbk-Zo+QuE>hM$OIJf)z z7MBv`es+NKVKX@zSPi*4@2hPby-p+~$j&?Far57swq=x>u_*>XG<{1qr4p5*H*jX* z=Tf4+Q_KlmwkQD;DxRRYUHQ6`J79n9J{CIa^EME@bADKYtn#S2po7BEiYSR@R+ z-1B7CsZlo{(1-^x*9ww3{P?M#8FuKgjjQAX+IG5aD zk1diKgmrHHl_OXwCbT-W%zcAuTx>DNkcTH}!07BzVK1D1qsQX&%HSYn;R}P7+m7-Es}(a5M4%Tw1``S&CckLs4%WuCv1}f{z~cI!h&3-ve*3mrS~n zgp@nR@ykP|)9A5mB{BY@qc8+il#H%7_|c=S&GlDbyxe}ik35-wS^sile|zK0jlV&y zxU|Sw02{MH`zExyWHwY9>^2uVXR?FDaXI<@Ic|zR5*eXwdd-5_57;lXDUlkKS2Bpy zr$uF{YH%XaN_A9Ca0$8f7#EE3b6av9cArM+6I+E0m)7y%hm&^$E+d;S)#(6qmeCbnfi$~mZFtH6ywwz2h;(##}PG`87ga{XDqx4x|@iL9w;WK%A+V+ zqZd07NPxoHIq9@a`p}Kqb6l>IuL{YZI2#U!vh%sOSDr9Tg>Xjg;dS&_lL2f}CBYHW zq$jgSaA0ci!{qV=&ZhJUGY=-&1BBh*3n~|ePAaiB1h#5_2Hkrd3nF?>*vuACOU5X5FcQ*<3LZ=Lb(kut0y|6d7jaF-W(L?BI7Nwtz2XP!~i zY=)N6Y#Sgz=S_KlG>criDxq9W^&AN8<2@<978}8EB;TbatfQ(l8wz^o@c=4}@vLMX z-%1M-R5jJgoC8)=*`Zj8s!VCMd?`dk5hAOSuB2Xm$J`5X`yS$fDcU< zp$ml#sr@8Mx<~u;bb7aFmny07fupARaE{;*fAla=&qnpm?SylDvxUQJA76&?) zP)p=wozHY1d`nmCX$#%gWLhQpP+U>qg_@-hNT_^Y3gxw{hI05R#;9&tmEjXv?<*wK zWr#Qg+@p_deI+f_VJVpA{<_?G*-k_Ys%|WELf3+EQoOee8}?mw-xyb%oa1`SOL#jF zMs_^@5&t5L9UHSaQ;5D)DUy`}4#L(F5k{&jvyPF#f>LeUATCr9=?I-H4X+JXez}6# zY8Ye`%v)?6@TbT|`qsAMlZmNdmrb;fYf0MvumvNZx83wJ?6xgNR{gAwxHnsW-P zk(~E7icuV345VZ>?NJ&5i5AhqTC|sim>w4EUqpfT;h@U{O!&Hael0%~{dVICKFT>x zT8o9F-f3E~XxzG2oRP)5}6fDcGf%GDWs{ z*KNuxt$cAp$ZR9pw%p3_i73s3ou0YXB9R-3eCm|-zIAuS1Wf;|w^%>*^-KJJ&GOsh(y*B6{<&wTD9Yw={P#?o(FaX*a)u6X1TwvK?g-KQ-}j`j{_ZKL zA@N#Je^&)1smGT%Vu#Q>{KLnp#Iu)s&t9gWdi}UFK0OjLZbHBAF|Zv@yR6mPzO6FbEB@TloQy;WqBxMV{QByE1>nX3~3fe^ON>}>89;C{+IBd_Y6C@zt9{+>WTXJ?t zXGy=@VXN*$bypFqB@W8+Dg+TI<0JD)v1Ec92f#cJ0TnlYZNx}Swwo)7Q`9^n{8}_} zz&L8p5m$bN3g`s}+POzRyVdr#uMp^PHcmQQZ`~x20n85E2z3tof?GEnNUnEqIQ42W z8xunq)v*2HW~5;8NMY@ft{5j0w)U7G@TQ z+8j!O=Q1IpjgSUQ_=9{JD4VP7KES36_sBXy1SJ(^2ZMc+Rfppwi5zUK-M^qp#@&Zf zMa9jT*((cT3(5X>+|vRgt5#f-0r&xPu_mfG!p<3&S%Z%sJp6d{;NM0M{{$nDyA?V( z7IY@p?7llg!L=E8Jf#gw=;Aww|^bMLo2|uhp zw$5(_KIyc@wA?|O5)xQ1hzLS$>R^-M3TlMy{w{zh+YqAd|Ax+3lkE=a$Fft*O;XUf z&^hrNG)~otQUGFE5rTSd1baQN4s+-Eh+~pRxKh!+LgJVbp6a;t0XnQ@jxj~nNu0TEbM z;N^5YC4z8o#AH1{Pd7%OwHt%1xNV;QfFQ1ANw)-Urvk7;Jj2buUWc2>_Dk$)%@DWt ztH%~;9^|z42(b$av5R4&$n_(eOg7DE5mcxFIrx%w!fa}1 zBUv_u1%2zYFtpg0;VYL0rC}T<(9QGX$ziZskot`cip}zt;nr(|ucxx#j46*MtbE1< z=`*rg7_LJ?v(!0)a~5erR&3lD29MW&HP0i2CDBOKXNts}tI{-E0#E+gSOQZ5i#QXR z{hEr|Afbe*v80z$k)%6BQxR6s4CzsYF;(*Rk`yEj0!rwNhY6JwfCVM7B6^_j6(f9v z@TAjRA{=oKJAx^2eJGO)A;jbzts5+%{_ptkl19kE;JfMh4^!+O!4l!*yv-q^<$`OM z&#x|Vg)%+s;>W@P321&dW!BDT$MHdV8-{CVM}P1lBjPba+=u=k zYHT9o34H%u%pin^qx~a^KB66ah$ZzqIMA2_N>&^iyCPvPe8%fy%@aO{g$_z3E@KHv zDVE>Kgd5(w(D9X$nay{nC~2%S-9C$BV#v(sIRO zF=rQRSo;dk9`c~+YwOZIwecYDGS%lLnkLuGeifJIbO#3`2THvNL&-~p4qHQWv%`|R zgXHkyt2DCwK@BWN$8?6G<04EA0%wX+)L-TX{EcZATcG;eEdSghuV91;jry@uCu#Dq zXp2OXSlH$_MX&Ka^|1e&)g@KM7|+9^YCC#YuBME_&nq}r?Of*^T*4Vr7_d3C!A?QA zFDK6q{)Rq*bh@GTg?g?BFO2F5v`&2K3*72L^*EUprmrwh-NheflS^DE#^C}UJ@Z)^ zxsu`!%uGlKB@b;1NGO=mrz?%cQ3oRnK#}@H0ThDpJBvqMk;ckCs_&qkQI@(jT~8rV zuEKlTen{c@0&9DYf~U}Jm-@!97IdGMLIl}wdqpDGZ)~LNV237>gF7G0@6;Do!_`4w zgKie%eqf7#RYEZi#yW0yYa&zH#rTjI>&U80a`c%0CY^%5*?t}iryM1Pek19b7=vjL zK81rob8bm-%U?hRMtk|IK!Y{R5Td zT#<0xN0i?R25C7KAp3;HB$5E09s&Osw&9=@Z3QFtsqdYnepCcE22R^LX-t!++H3Bc z4uv6cez=dAvZrgVFTiU^IdyhYZG_egNZoxK`~=JbHu+{0?{@xuO9SneZJ( z_Qe%qB4oTooBNXi)@SBtk=B`|r_X^|`MO|2{e!9Sy#EGhNt8252lxY8NcIRh@0-B6@$@@pXLz@nA8F?07!e^|a$BNv!~d20}=hj+0QTJ7|7F!Br!~H<6NbaO;IVU z^Tun0LN(r|d7<&muKX^(@YZk67oC?icou8}=a+c3c?VRhU9&8TvO2k#)m(fbH()Y* z3awkb7io)P6)28_u&|v%&=OcEe8xJrcuszd;%&TySSS)fm`ceysB8fuCMu@yJCLES z>HBP2sqZuJ$Ksniq_!s@^tchbNQox#@d)RrS>5 zs^h_ru`RM*g5_Y$LK{Nt4`UIUj*(*b!!2S1&S9LMB)yV zvDUfp9?$H8tR3HDK|GtT`p~{Fu&{v*$ZB8(KwPqb%DM{#a@2lZTL7VxZgty&jhw4~ z;kpWzU}CL`{t>ULR=G6emjCwEg~2X$S*>hPYQqQ}o=$MEZT7AgV}Qtn=)y^T??Zv; zyPkwO?>}Ql{GCwLANt_2OJ1hjJ_vSSZYC|21fJ30RP0Q!#W6h6VkaQ0_5ha+eEak6 z9{%n#v-aNF-r8q;>93HbosZ4;cR&1vckd4Gb8T+p<5==?nftb5&|nD=XyZrZG0|JR z;p*W-Adl-q{jh*63Z*+l0-&!RTL0XXsw3b^HsIi|I70rr4RnHEkyvwt1U)q$105 zHgQUo8hl*4GfX7E`Unl0JZR z7+upE9Oa8Aw`6=VS74XcSHNF?JIuQ0pkad8LaMCY#0dTyT`xLHX#p8V7I61DK?@Ee>Jp?48%z-Z#QqbbW0)!aW2u=7_$&3`Yz zD?#icRo8A}e@|=KRQ%&G_tXH2AG(p^In>N)yu;=a-YWh;?GzKIXsG zmCBtKFs;52+3M8-eCu|)DEGi>V!d8Et(?STb7BRg56Y56+Dk3Kwuaxuwu0-h=rXHE z%e0fv-0ppX0Z~lZ0ckS^h-|V8Y?V+{VS(bsf1@`Hvw(TheOH)QB#W`dg(-SxCLVsx z#&2mZ$L#K3R>gWvx-}DZpo_r@HXb*Oa?MfI*a*dxW@|l^$%Iiq68nsK;!&IN173A}2@} z#f&@9vah4)FGP&H#n<8ngpKew#sxdD%cAnt@l7$&k)aPzv9ok}bry%rjUATR)LURnRt9CUh8{9da78#ebz`u( zpB>@+;!$r2z(9%K&*l&BgOA!2{r>ta;C|MHrOY|n*AP3>jX_eUUSAz{ty`zJt0=yc zLOB-Vs>LWG*8@YT1>=+2Osmi(Kt9)%_QH}+v2eY1WLW6BURasMePE&Gdccy={cvq3 zmg%fd#EV8lMXFP>EmdFOv_n~81%VJ#7*&iz@|cJ|@h;ZN3z#!(+jyytsR0JbOWZ}J z!jf}QvAhagR4T8`7L|f!y&P_N$&$d4cD1rXU)`S1Y|%&L!mLkV8z4)&+Dq02#W~>$ ze>Lm=r10Zu`9*w|tL8q`jiIA?2c{1r6#9BP`N!3`oCX@OI+l1J$o>7xbIZxHs0+&Z zOBC!F)qM@4FRzdeb$)^H%a<2inTS5QX=n*}K|?~e&(HNj`#LscohPXLB~wI8#-{mz z6&e$CP0YBV-Kv7+FdKMD<2T!f7txPLE4aBoetk`vEc~mnqFjWNVdb8Kft6^>RB8dF z=dI(I{UE!=7r;&mEgzxmhg=t405?r7;F``xc_ctAxBwm)9A+mGIECr55Mo)h4`#n> zlhAFU=iW>jz`6rHQ1jAwB^Nd`)&#phUYEXThnG4YTX&x+%C(sZg`?ii z{uWc^0b%$?T)!`mbFKum^8EDnwK8?v{{MGWv zdJW-b^$qtRo0oyhjhip% z3{Kh3B`?_N_;T#;moRIRCl6kd>E!I{EDave&WRA9G(2_|HcXllQN|97g#smypooy1 zHf|^+KzM*6JNe22LZ$Mnm^>Yu2h&u?^yqXZjC7-)o#K6R0sE@c7D1P`OWlG)>)LC; zJ<(e&A!qzPIqML&k}hwn=2&1}wbaGCgzb=;SQo|){m_Xe0;S_?ut8DGp*Qd>V0W>M zP#sDW$891dEarOzndt(S`6Y48PY%0*VSwDluM44x-MZQ7HsHqY0k13ox|A4;qw@W% zey#gn+9ta#o6DRY)sq&(5DxikP|+y>x$iC0l{PQjC2E7k7Z#4A=mi^Smh9M9Fk03& zq;84#_U}3ant~V+fWOPH$_KKD5fE5?n;fUSmbEtyu|UriO(z1j#{gFtyALwjTCu^@k>k z(=+6T$#IpbGY!JKy>AZZdtV(tMc!T}xh$$8pXUoWF`vDx-nS0qaDPqT8y*^EU)8)m zhp3bQFEYdCh8$%)uhEhsJKrO*Hk$l?%17q{bL|)kU*ZyBMEa|u@w0BS)FMInmtKO~ zHK%9s79^R&&*WW^Djh2$`g@ev8s9THzBi~kA~7~>=U$6e$sMHa1%*!mo*Z)$(qGAr zG_-XJwI0|)v%sANiWfeGb$WA5ni>6E*e>*Bw{{L*E1sJrcHF@9ZQj1azuqh{P=|%I zfPG4D#81eU;B`xvr*-vUv|-Q9M>nbLm2{=2nXit2(^kCY&=D};bxp{DP3JVH*PteY z$$lTLxv>jIuZ{uh9Z3&lpV-K2EKwZr&&Cmhli#&LPgTdbq zM&GwlU(ssi8ewHJ|6+WA%%kJa)B(lygkdY0^ z19=Unone;P0&S9nlYM&4MNGq!bnfA^*(+L1=OXcB@6KsqJgR{ zl@z!~$0K6}{%L?$E(iMXyrjcg>K`1@3B>LX|4skou&_#nbwZ*R`a1Lw9kT8JYVfL? zY6c(fev5NM_rKa$e>(Vu%xA;yztgU^Zr1*eTkr@J0 zYy%&7l-s&6>*{M%;Zn*2DF76og&G1BDKr-tuR|+)(b0L%wZ;MO#k23nwA!K!F4^@a zoNy#|9=grMu5R|}JijV|Oq$e-6TD_4Py=w4`5;sgss)lBO)pYp6|Jmv?d-cYDSJyw zGA2(%dAafKw_{At`7j&YLChd>>cGyz4Oa8jy?Jg$0a!0g0w>ar#i@Tb%bV8s{mulAp>{|!uo;L>R^jSIgG5!of8V0ps|q>yUod^&oo zbN|SRixfYCSQB2l82D!$dC5Pdim?}($YVAeyd5zPlAdIfI(RGToz7EQo}qu$95NiN zF{HNB>$Sn~u4Z0IkfcWqox8Y6rnRctJi~QGw3lv_z&9nou%P9c9t5 z$=^~aRrZ?a!&xyTP_t|67U+_ZfF~F*TX>%!;hHd{@J!;(surxK=-@7jN~T%Z{qs9k)N(~ zohkWJx}1h*&)xUp6stX&7fi9in6q!(gNDn~vpb15siQuu5c~p%it5>yE2yxvleaVh zkRb*0j(?X>ILxnDl27ms3s-o79sgO!h=t8{%Jpm$d$GDPGWaUBT9no%TZLliM9a}rM~3_V1> z!AAoOFF&*^rZRwlG!hx%HOMbgl_^mi5NLy5r3FA21J>sX4F`AhID)Yt7Wx>|i&JK5 zx-+-~60&3W1|Mf~horiiu25D43MQo$jA?wyvuVw*L)M1Dri{Up&}ez(`rp9WokE}9 zZI9>Yr|9+G*7-Ty!-ZdaOZ}O+jY{mgv?JA1Om78Ra5I*}(;I;n+_iNhfhVv1zDUaP{u!u}~wE6DkAFBhz^QHB zT%(sn5lpWc1+P4|koI#J8$6HR_R%LN=kHtOQSNeF{ZTNL&IQ97yeMv!<_6 zSro^6PA+Kf(H00Vq;BXRhRCMTx>0bTC>>oN2AqkGwP=1|20KzCidFy(p`6B0p}Cs? zloxpUb$5v;<5VyqG`~X@+|w50)@*W)#LVxIE|im&leDi8u?ALmDBs&i4S9xpe2#eSmK>({c1^64 z`b`89U1FW0^w@}$-LVCK{%EI+!mt{2H9I$x0UHKL4t^*f4C`E%K(kXQ(0cb8iT>txTU zDy*hE#)psvGFxx8gIiv1#*05Ki04_DNdo9?06+5vY$XbEaK6M!{IKMb?)2(-G6g#o=HJHm$d&kXGQZ%y9gJFeRx@zt-Pzmo z={wkbxEOAVVq*QBpN?@iEz&pZf0K^AuFgxz`Mjt9gj%ZK)rdq(kc=b2A*~SQN!Nrf zhtM5TkOmFqBX9g5odHm*-l$3uA2z6A+*R509ycV8xHtZ>ymXr^1F7l@y=_S6g-WqB zFN*fME{xHmpxEsQR989r{xET8csV&QV(X7j&)*!JI>n1mHd{JjBjgL=jG!osiU@Ck zrwQ@YM_b);$)5oG3bqvZ^z>jpe?q^Vn9dIpk9U|nD*KA3@1=XrBjbCw1}kMZAy6`t zgIuO~C+Bzv*+>f7X~)<8JALdxtKg@C1qsfS2@5 zj3z0ZQCv_Z6jGx~#iOR@!I5#}sxoDgU0D9YrJU=fRi*3XeDs(L$TwHVumfmo=J#@M z(gyQ~t`0ZR16*J~P#{?5fZRCo1D=N8K>WE%1mInma@$!ui+6MFN=GR1KcUx^l*6k&gM~hlAM^M1A}U^tvNU*)I7J z6f(TyYKYf>&%c{oTp)V%&G_(uh6Qf_@$tqe*hs?6Oarp2puLcDv&xvP&3CZ(HHAKu zw(es1aNlOS?OoihdTXawRqb?&+eqMz92oqX20oa?|L)oVmzodG4&GsOfIBZ@#iisf zjeZF{uMrpKxg){9re^L8^v3wLPwqRx7zTP6oTIMA-9*_^E{3Kvr9taskh5`RaTMio zdODshRt2i27l5bq`O=K~Fq>w{VUDn7?#3kh4~LFd^S(-2t6H(~5l$5-_CZ~Ge`w

^UAuoao*j=@x!am$c-vF~7Q^L-r}?}-G(4xDsDf30h~BkkX!J&{cx1?BVLd%R z|L*D{8#ieTup5GzF2XTyroBp_;5+v{fkcH}ujr+MYO=_#<;oJ#szFTAsc!Cvy(-2@ z_PEfAR6KXc@e-XD+(M}+r`hn=;EW#1Mdl#+;WXwTaO`b}b%&+9+mxpY&8H=s0?p}z z18?56)!SuI9n-MERP?5H;eG7hEG4{t^#&I;<(;8gOpH^yYz!j4J(!%noIcmtg@ak{BKqdw^eRloL$N>yKb*j!;fj_sufzsq z!PZR-o1)>Nc3o=otx8NGWmT*N$n zN7ejhj9opZJ3&|w`>bm@8JEd?UwvpwhTJ=HO4(sBOS>qBgO@7m$|Z`OnPyzsWLxon z;fe?1r#s)YG$^F2zKtOt#N5sukQ*emv&J8`tYi_ZcWA=n=rQi~wt}6SxDzta zQ5Sl~-kmm9B5tS#^^b_z3u2jQW|0Q#h96dy4hEiQ;VYXyhu9E2<3;4^E0pava~ldu zBG6o|ikl@iaEOCVmt+0JGdCCPK`1_Y?24KL6UIQwK-_tSo%|-jso3Pf4*=>X1OyzM z&c|xz@?tpjlCIc&Sug7qgXmn*EO(1}aiG1{ZfMo+Zsz>MyHa^?{*j!m`Q>avVyrxr zw+P*m-Eewq_b<;bhHDH;fAmNjH1`wumYAWFxRemW`q^XXQhTEXWuxhOK)A=V3q8bV zt#l_V;niehf;b#oZPd4qC+BJQaV5@?()q~Wh}C1PEoOJni&)*e)rDY<)EIzdi?=a! zI%aBQmx$%&vwOw89tksNo-|XM^CL{ms*EBU&H0`*T54vr`M;V8eGX)FASOB<3c(D9 zR3?`bIkN~uT6u+E-ohh!gb-mc0B1tdNdA`$wAzVLX%y2BOVxO~tU6 zW@+7EY^&yj0uH98vWhnU#629GMtc}0e^D)Yp<^b*P(n0}R8&&>$F(^6XnoRei7t;G zZFM$0l-BRRMNv7n;^wILdQZ-bZ;#IqEKU_Oe+Q5C8MK@HDI36Y;-{y!S0qpuZg0-s z!qvsUwBZTz@O1b12nkUgc-Pk(9ox2xS!0GJ$y;tUMt}=0lM!$^tK!;Ehnt+$F<1zwppf11koJ^-3b;q>YSa z@QxO6!+JU~f=|M#1{Mq;EXmFY5>dwQkRx$^u6HP%RRY)9__DetpUCKQZSen(JA=%Z z8F!(eY^4MWGLknxF64(aHiZr8Y~dzGD&=!o%_;LS@8wusK_2AUJItzQx~O;{LJoU% z{3DoU_!Cky4A)XD8&7`9vO^L+;ObDUG$cw-pxnI+C&(`o2BPSxM{$Gb$`68gBPn#| z^nL_SraF$Q!&6dTeVm|U5eX~^i)Wr$EYUIaR#X;G?_#kh9mm#|u2*(8*0-O0wg1J} zo13pT{`N}Ny(Y$`K5NfZEZ=A_QE&hX>Y1OrNu;H3xc>cz^Vt!PfpcpC|HGlPs6U>L z8Al>Ho>9h55c@GH?LJ0KseLP)Qi(8N&LNst)fldK*90g65-$D63)+(_;KgfiCakoR zPA3@}s%;zdN^llzsp3tuKx$MN&yam~gsv35uQGOD&r37R!`2oRwrJb{om-iqhzvn& zBdkDpP(sDag)4-{w`S2W=Pv9mamw02rzS&jE|ZMD%BwTZg>W%inbBi0CEeW6B{E9b z%ccb3Q$hnKGFm?zw}KilMe9VdflE@T@`oj zt{E0#-;b>q{k{2(MT9PFN_~)n_Z1aY2b>iS;i@WG8Pq^aNU4KSHL|NXwM`hVW0G-( zfhxJH1ie5?e1I!t`o}khGrU-qPF{7XY@v3H0&c@u!tnIVlfON(BW?|6a zf6ULPd;AaA?$z4KXuGGr&Ls};Swa0LscqncKVJ>uVl>3 zZjg>4Xu!2>jvqh@j=kZ00BG7nsd7z?egKGpSp1U+nU%R3-=JL0~ea z(q4JRb{?!9UxS?1;2g)Do+9-3Q>bN%;Rv; zAL>>$yQ|Xu$}~1sx_&8GpNmG#;xM)1NO+4rX^(?oT+R+1gMzboRf6Xi@!$ ze!4A>jFzLs=_D7;&@^Xrq?Ke)bMATRD-l2+D;Jgg+&z=>~j zDc^-?ygS5T@W~;9!Vxa?_$R{*&3%s9oObW(-CsVr@82bMWjefs^*cV}hUN+U^4R;l zP!+7vM@3h}l4>CW=OHqk%0)iIFX%dUAcIes=;HAQ^H1)}kHKm}kMA6nyO?riKcp^? z1qI?#i(bybrqj!}U|?&M6TG4fegIEYd{(}p`NkTV;lXrdT=`L0u! z&I1y4o_F-QU8@e&)xH0mT-a4EgB389wWy1apU^2B0Q~Xg+np2K-hvaq&v}pq9Af6B zC0FTwA3cP$fn~6GkwgDH&(Cv`XaQkbS7+pac{t?HFk>>FeCNY6wu{Q>3P%&ZoWrw= z)i=%`JVJDdls@1U?8Qf<#U+Bwc)&f07fB81cxDA$z8x!T19f36EU{9g@Ze0D8Dc9F zp}XM&bsHp@O+Y&Ln5gPDEO#LgPQTs)=FO7G7LW^SLj@1#L`r}lIc-{4w}&S;@9A$y zd(D1Rjg_{{g+1mVIVh)N0Ac(B`3$RJ$mLQWh0<*_Fy;`8X0se?{or;M*fo*4!E-|S zj^gjpPNPzaNxxCd4m)AOmz8yMtk72T+~lt2c{7105bWT>EO&TuNm&`-OPtwB;dBc#c5p!Zto$d;np!pdM7XPZxo{oPvq4z) zSR&u|bW2nA2eGlyEYa9XtV%XFE%Sk@s`T%(#iL7_Cni=)Eorh%ZW3G^1=4_A5G53Y z3>D9udS!bwl&MZB$(~~Pe5fNF-eAjq^7dT~M*Y0?TRP-4-G<~EGW8mO;U_cQ&*pW_ z(}RD$OI7QSUTYIt1aWvpAN^agr+}CFq7-ZK^LJlQ=>Jn!CImke(j`^#YUWqg@z#b= z^xzaJM0Vz<+`B%WL8Sm>x1Zzk5OD!PZyvULGK(+NlHt8tfVe71+BtfzuJqKHeI}w$ z4=xX&$$s71mM6U=_qnm#y+I{72rn$Vg|7R)59h!tv*GUE4{NVK+WYJ?Oikj=@2o{- zBMLi4oeuy!Jh{B&q=qn&&S$FV?psuvX$GlI1+Kw3Q_EB>kmsLaE}?hcvNSiUAnVn? zYJg7XBbr+6dH`sQ%;%>t5^*;&(Vxqm$oz$OYm3_YS0Kmb!PV^a^NE;rGP&;KS?|cw zp|LeQ3X|TsbTD2A7W!(Cc87DQY_Yg$i3Hz7fAs6KDPpuBD*!P##xfhrC#(uwcLlG7 z1o3o;qg@e(u-%kc#PpU$;})ZsK7qVRN`H~AHUNnr?t|X@jP(-{Ve%Sml+d%TyR5O{ zp7O9U)zE7Rw)^P4j9OAaFKJ|}Y^d`~Y%}!;wve_$npTDIYRD|#TEKKR3Mn(ot`A_I z;?8R9jD5?jY1loxkL1{Ud#^tdBlPZPc(eQ2A710zXP#dKJ3_flEVonw>{WLD*bCA7 zXq1+=%<@>rF(^)ZEcO_VZgFxLv4bP5%ZAvOgLqa5?tXhP`X>^ouf4{W9aR(+MGzkqSt5W9LvF9D$7RaEqIQ-FjI&JOUE(1 zl>yK71T@z8wYI)KNyEl>z^T6BVhQLq!Y;He3_rec4?1pKKpENF zWU$JTvWTECW-`CXmK-Agy`nD6s^Fq2gCnsSJsU z6#b&()>X~H?Akm(o*d?Lzr(Isg+qyY{!`8ixtf{dmY1nSR&%nHBbxNKFsyMP7ewID zuWO!rk`l0HAJO3BgCqDzrAO6#QFN$pj#?PrqrE43oF#Y0Gt39{P*Llv{?!s`?MP$o znm`%RiE1=q%E|f9K9JBLxd6jMjVj=5bmioHera=DFsK0!Cp(er{_E|{{jXl`yn@A! zZFandMPg1d6BL*oV*Fsr6KCsc0*NU=;K+Imjlu9^3SA1>A{QCz5Hoi=S*2av7%jDF z31T6zkefnF$xOz(Um07KccYY$HTzf&08-OuGco-nNT&*cl2P-nWw&1l9}+O^YVaXj zg%)$R_zq-5<$99pqMi557qDhlE82S(J99Zmhx7}9xLUTan6~n_n)emWFrc-ogRs+n zMHA8ovaM$EM7ju)_JY9kH#^>8%*g8>n0B#06TwghG*R9=u9R1zUbGe<1Q+Ye(HsgZbY<$Ob;IFl=bpLt*ZkKg-GC zTHbWh>FCDFP40&XrFrQYqy7rAlq@n=k63FSw}~X${L%GXk_8f%qLn0g?Ag)kh*3FJ zOj&;25Zl7orlF0I#eXp_qAAb~N|3n$s($Qhm|_vu+%6(C)8vsscWq&N8N740ox(AA zbY}h47caM;?{BR?`OEs38~fWEUvB)((P4_*;r>3?c>DY6NK!m2(d5i$g8VRxZa-B^4nGLJ9ezOKd@%H^hA9-DueqaL zQdg99Ndn}_Q+MI$_lyEa@0b7 zjbiQ+>pEJoYC)y#AgF?y_oW_o8hkiZP8UZv%zOK3aM{MtW4B4eb@ zFM;4JEjI2Fh?J>2(aF_*Sm(SQBlbaTP&L+4bqtman#gB8ZYB@FraM)pMvyMs?0;-* zQi+=PLt8~BuT1!gE2)PIET11eCdvB zrDZ9cS|N`3pX(LQs0ap=)CUtkcE5gjIKIHW_gJ=3L3zS_W8)CM^Nn9O!t9V146uWW z6WrN}5WrNyez1?^dzg6X7zK2fi&O54#$j)%Y$Z5Qj=oa%q?P`!_>oN(`-0bXL1l#& za<}jl@^a8e=!RdkaKN8dq_?e`@Rq@PPp&r%v7Q7aEADBFK7vX32dS9SUEm_D}yM2sAgR9U2 zH)~X=!q|V&jK532`kD|e7A)JtYsiA^B9i8r z(DXa-4MY6YwMM(zM3ZElo?+8xBw-&Ye938RV~C;)a&C zRE4(J>)!WJ-dTsEZ%AI}5(rg*P=n$vuaB)KWl_ekNNbGjDx99zan+Y3AdM3MdH)~s z?*RZY$Uu7pgIex_{*&mb;2Q3p7Lbg6SID`I2y4v9;`Oyw^63C*As!{qM+~=S zpYfinTFnqB7hPlVkWi2jRBz|kyunUyTnJ9mSTgEn8t7hwHn3h1h#t%GPU2(TvC=9E z_Oif9(I!?TvpJ{(8oP-i-dMC&eCI*N`^K&Fv|57D92Ei+Y=3J7ZI{(R1nHWmT_XTq zI?9Nr(Hq81m!?^Yh06HAD}O$nAe9!bW(T4OFK)r`E{Vxy5gM`Jerznw}1v!oC@Ly+xKXSRM-Y!DSEk3>aZse zU?#eAd%lh))5Fs%oM_}nvf&-_e{yiG z5%FN>$gouzSq57oGz@oau6?KhSSt_Z%s;AE!wmj*bn&qdx0cxn)T+6*Wn*D(b@VCGgPvRLO77wy zYS19b!U@gO4t!tdas|pr6pT!jFz;-WF3Rs#waw$P87Z!|FbUCS`I<9eJsJ%0gO_YH z52bI+9Q}h~4Vqj3w;2nE+3@p68j=51K*La20i^N7F4k{15?t~2D640sUZaNer3Nre z+N9d8vB63E2ok>R&VBu8UGe!R%QHWVEF-rQc|Cu@i(S7ynC@}<1AI(GDjYM-;o+aC zm%^Ojg_61|*)QWe+AEr&gk%-&r(i6$bQT7`%*vK($Wq0rNOad-Y)^ikd_KqSd?+fRfMk% zr*WvLl591@8;v63kSE7i_fohbP5_au7y7J_@z+wolJXvt2(M2$e{rXhLV~2_HpcP- z>273_9#3@#nBSNHj83lTzTy&Yx405$j8d;zMo*7EM{>{u+{FN!;sF?tnFK|>HS~9w zIC!j-n2}{|uNs_Wvxx3u+q2uD;zE>jzg|HE-yg__4iw|!KQnupjU`7Z(r0014THc@ z)pJhd?o)FJU}6|dGGT;J790>s%K%#dB%o^WdVPYlvrqm?DTU@FRoDj~|50qdP9Z_) zBgwl1oeNJj4qZt~wtxBaElruvXh3;68VS3I%p(MC`~}EcCVkZtCtHnAcAJ!(L7O8W zr@nPCsW60S;x(#b>{?-` z{tfIw)+cMU;0p$wvoE?w)QnDbxSk)}2xDB#7!CVL2RM!JRS$?k4~dB|j1bd?ljOUa zpN_{Ds}CRWk9wop(9OCbhg0n^VGDMJlO9=>JUFZ=2@DXr47qiDA?!!z66q|VrMO)O zHz-Vwrw5l;v+>&C)d}uGvKtkU!+>)JZ&f%un8LOl;Vy;I+2rU5&hmrHOPC#~0QSRG zH@xO2UC}T&IL4ut0j^e+<7~4_xYhv{oqdN(a_}2hec)CfyaHrs+k@}YO$^jX7^D9H zfxZAcw~oPkPn;KB83gu|SC)Gu2emliMgIL#sa`dF-Ov;xBZciY3(cLnV0=VsPiE)H zlP)>xRHVEcT%-bLAH8INTc4^poy0}AZB~lsSp!9S-FRJ` zZ?QsnC;KJ5?#Cv-V(WxAK8X==q@F~u7@pzr$G{+*NtlS&Dk0-JZh7V9TVRoK?MrNQ z9$cgjJ$I%wdCKVw-q21MnGuw*jqNJj4wj}WilcMQEt{ov0E1mm{?)ngx5;s^rM7+A z;sXxy7f-w+7gFZ7CDIxLfaeX7olwbqj7i2|*Bg#KIlR0Ur)r}e++~_ZS!b-YF3XFj zq6Ak?d=c0bo0YjMdNx-yKPW7JHEtZH&}bunc5G26e)PUNc}Rbw(s|hsXyug%Th=(~ z1!C}ivU3LcU3ve834;i*EdtyDo%zXwI-8xp<_sdnB@=!*gxzB0EE(~>rX`*G@^-Ix z4K%QxIbanHf6E$uV-lKdom&HjtS!uE&C!l)u-wghZZ}-^biRd&@Td34`#Fc@4IOs6 zkE9y2eMaEhwL(L|P#27J#yRfHM46CRZm+qtbxH$W*5to3nJ-S=oBBlQblKCa=fbU? z{#Td(sq{N8in?is%Wiw~OZM7|FVSfT_?C*MhTA8C{Z4~jv?sh-aq#akvNy;idSi)> z<5;%iqznqSX1SbRbLH~<5_2-xEjl)rlr63MQKeK2ctK<-=_;Y4r_0%4+ZBIK+8?!+ zFCl{>gW&;VQ|&V*jwah@f<{Vp=9MHc%S=`&zM@N?TDaI({_odW3p8!|vI?2_ET1ju z>DAfAc&154^|u=xmO7M%x!yaHhae>n{VSFtjHX%dBoR$E2Mu@!S#w-8Hr!x~qsq2} z#X(SD$}q+(;0)C8M#M-kOpqQV6<-52n)7Z@vx(8;@sC)iKm~F5RU=3v>Tq*OilOmR zON@2MmjcXNW=ZQ4Twc@d^=A#qejf=UN~ZKF(8`8$W??;rx{Q;_@{#1B4C_eGRg&S- z`aUS!MM@vho6HclhFQ(KSFQ!r%3s#8r1Ohqo5c__MS$?srg$7B2X}JhW+6^ZbAq#n zr}T1x(Edz@5oGFoWl|810u|eK;GDX-Dg$yhCOok|t#ZOc?UV$xWVH4~FNr}Fm{2>I zH7mF*4Z<1ep(0vED{2ogC{KLzdn?VNqRI?EAqyK(y`<3LtwAd>iyQE?e(7i{hO)4- z+2h9g%M5y5$JjMa zgKi>|yOMfPu_-5#nI#N^Lji|u9nhlb?SM0+=Kua#*Sx` z!&T&I_e~G2phrPWU=uWHt}3Y32l@QHr^-@8H>tW>>F(?@&3aoEmLVH-w@i@c;ntDv z)!x)Zz23Y$$u64j)OWgqp%S=`8XK9%UV zYMW&3&fauy>eFeX&ffHn#MurWLDk(NlKgT@Z&cg(5sq97t%lhTXQi3kBVzRDAgu+h> zz;@tM7uaI@D4}4*8weh6+RI2Tp)zJz`RIUkQs~!d27MLe`@y-YXS=IR&;?=gb6n?) z&~1s6|1b39zbFtn_pRiyqx+Uo>p_q#A&TiErCBs!R3X!Vu_6FXA@87?3K-1{NHyF{ zt(IYxqhU2lE)!>aOlW4{^_tp(+hG4=pnTB~*D6##99R6IdL4oot-k(MN39KEzI{DA zea>y-lz0oYF;iA<1;zs7l;oCdg|e}DpNZEGLxN!@?j<={Y^_SKjLyhXhgMy__O_}l zYaXh;$yD#uNjqs$4Orr0Sq1XF<({8IIYnVN7uh65&xI#-U6t4>C${ z=%lw6c3^0wU>=V_?Y<}Zbb>0`37dvgRK_C7U>3I?E?i*R8(y3}Iy=B6oihxKr(4`d zfU8ygV{kV%vx5v{O^Yg7^gy3yGfnxbKh(vR95efm6X+?pd(9Y zPyUf7<-LyD@yh~+FU|-5<-8$NsqcSsr?ILeK5GfSx| z@su5UAfW0$m{vzIK}Cqn}L2quB#h;B_9aeApE6EHizorg68o~Wb*mUFl?(wT~8V`TK2 z;~Epu*sCiTuj9$oH3vAyf|M=UuYX2}vQ00DR6bSZLH&h58Oi0v8FYu$HiO z;;=MXglG0rUz^P!l`+!q593WgTe$UaVBCv%1igI^63P>7xY|N*$_8^@oKNetY>sZ8 zwHH$BZ)Z4qme6OvNqfWs|9B<|Tx5-p-}|&~_92{DR=UbqOz?YyJ3CVQZ_hV3PLWD@ zdU@yGVDs7Mc;0{Ua$|e@CH0D^R6PR783Ij-j%Q~*m2JZBx}geMx0k+2`}WdVsUf6B z9LJm4`FG>#+F;d}I6$96LJMK=Umwi>>#lBgfp9w6_^t|i!ZEn%^2N0#M$Ip@G7ZQZ zE-*I9;%2ztNt<7e zUmR5C${HO^QW_?OE;Hl$rh%p_emr}AaNR9sy_&XV^@|n;>tL-izkK*W+rUWD;gOK!7oC?8&;YFsi&%<3 z>@EJVEbi+fEsrjs1@-3K8g6gwyn49yFM4z`f`tjJ-#%XO4TqQXEW-ToYtR6^unLP7wL{3?=pgf>K#StSRTRJt zNg~ExX6Nec>;PV&PBGkK!Ve&^K@+ZTl{-Ghkd2Rw`){qxuP&GhZ+v9dJVjNATqFQY zL%>nQ79y@>8zW+6erdH($$G3G!>3ht1oLdCA%N03umNw``7r5gnG?Bk){Xta2XnbB zOalI_WxB84(Yu9jT&tcRo}bRSZKETTZoS3S-bB}3Qc8>5<3yX?7G=URi|N=+aXcL( z&O^LrYQKn(jvgx~HR!QBw1{3T*1$8S0)x0w{bNC&SqWW;tboUE(*Wh_FB@iQVbB;! zg9vtRQt1C-?_1m2x{`Fi`&TG58Hw0{?Ra{onZz~*5_8%ebHGlz2OJ&&0@MMCkp#Be z$^7>7zI9o*y|)lH>2%K-&vek3X9-Z$Wb)evdH*Z0H7K zKp4#*udGBho%4#8fC{#V_r|uNq6566I`RrAh?STdj8|Y3S{A^<75R~q0QK-=5 zItD*myHMx7*i_=FuR;O=Mk<;qh7j$^AxR>b0#Z=KBoug!JyWwpv5|lltpPN~pEFTj zv6)2GNPW_VVm^p3Ss)2{4RYiA{0z3LW*z zCd~+}eNnVb3jUzy2Ie(GZzil0z}somke)1=rfvec8>is@^;V_WS_^g$p(h^x20#i}H1ade z%~%AJk(*S0U1Tb3J<~`W_pan5ZX=BPUBn4e`Qqa%AcYkQ3Hmb3&|>uP7?_NErB6T+42+w2&^6kxCUGRpULO5Ajsif)2a-_359peSO~W!86Nf2_{PjTNF~aP zJ6n(LKZ@#VEJfs#|NA@i;>2g{^Tv2T8wgE(kq!UNr7!9EVsd&DLO}&6=&-f8wnnqd z(&XKQ{MRgJz@ESwatmLSj-g{pm^kuP2}Jl>QU{Lu*b)5=$zk0fC)n)@VXU)ln)<C;+C9`F96ZI+yOznz}FE``2VvI0GcE zjrVMs#FHzpe*RnEg2{SuZ%UVz8NN0W~dG9ER!Chsbb^-Ji#p_;;BVJdqb> z=)0kM=gp9%5jdhN&9diJ2UFEKG;Pr@aJhRfp>5P;J#j&?aT@mw{Kx`Mg*`0W4YlgZ z+T?8~-HSv>o@d&BG`h$*;3kzf>jW2wPt$(OvQ3I`S?*e$xU4WuJub^qQ;u??@w`}8 zEpEghhsGruMAp5%g99Y<6`xOl8-9C3Bxe6ZT{z zu6+QDDotq$glQ#k@QR(Sdl^|`y?v1B4Q!L6iZb_6zxMvlVXxb^PtuZ9Ly9w78~V+H zkQmO^=4lB`JY-P(7+rvn;`C)Ss3va>%_u%VCHk*4DP>kIc17_Ry5K`>8c#`+i9?O` zgtyC3P0x+3@KbyO+tfXB(z29@9fcxEcPx@T3bmD!f&0yLCeFFWnU-|f*g%+kUH$N} zsrr`6=!X7hn7}K*u%>6lf?M&#Mua0jN>Pn&pgy#u1c&r)pY9p=$NX1RIo%K;ecH5$XRS$c3)*OafP3TS}1q@pC4^pj?}!JtN~{ zv=8n}XR(pUqh&E&%hoQ7$`8xRzWxTO8tYimLZy3v3x^6P{X?YM>0LayKN-Hn37swi zk5f-=8)wYL`O*IRYdC${z5hy|PAp3Cv3xt3=(oo#cxIozl22#$=_`IhZYC}G+1Hfm z<*tO9K_b%~=pxVYusP|SyG_S)ChJ><3Nm}IB<>XXM;~a254E~h3Zz(_wuFq{k$CwS zG>T&6Js`i34b=N{f?%hJgKWP?kQHJfrD=|Hw;fB|!S&za=?)?+jTnz;42gXhbka6t zR;&(LaSV&=WZXu5uR{Q$dQ=`OqrB2PIXFn^MKQuJFf>LB#pc%n zp9eTPh8&f#%0*bZ%9U>ls4oJTYz&;<7e1{58AZ+1@d+s2(4rK_gfWia_9Z73-)cdM z1x^@Oi@P~6&S zAfv5+-hG_O01}%gXtKfJn)%wnwE3ZKI@h!}9HTj%=eUclYAvX08&2SK)I09NHTF?; zA&GxQdXAH0H?`I9GckN_GMriSxlpA{NlsNz3{ofxIiPE-kFvgxk9M z84OYdpRI6e@L6jGSS4IZwm!}Z@(q!J@TCjkv`XCO06ZdxoFyuIdK_57x1-_Zh4V<9 zps*Yc1S^Z`XQ7QGI$ppZc#?B5X`1)i`FI22@(bI@h83Fkp^+M;4aVyjEwENevEEun ztv6lsgta}qZ;U0beqeJ8h!r9~z@Ii3Jfo}&)l-cEB)TJ)$c8PkU05z{Vk%Q)Dxg6f zy{}-!)`mKasmeMB^}^2wr$ux38(!pB832;MeHs8D)h^BuBmy&sup!|H5uKS!ffFz0 zov!01m0rsQqN59Y}^yPJt4+dP?Mib-X$trz)_L*8BzFR$%@8u zLjKp|Iq`a4M#5bV+H$d;Ak?>nk+q+~I00nioYAPD z0x((0sV#9uW=3%2a*hasTY9q9j@NS-=HIYsM?ALcv(__M>WC8oVR1VppA6AEafh@E zeS*G8EJBWi07;z^s&M`;;nTa^V6_@*ymVV|aEN@B$QQo}c^Ov!)_76T?_{S`r%s42 z2lm1&9rv5~C`{(oSJAKqWGa?vx$ArG}t+H*6G7L~PlVV(;MlKsq?_tY(Ihf#HMQKTxka0-a1p4_uTqEsecH11i?t5+F zwel{wiVj>qO8-_`wMwS#NDDz~`m|*A+m9t?AYm)UcFMkiH${z-ipd?zhOw5h&p1= zmL3k&SKz=d#v%LZT4;yMJSQS~qJ+PVX0^%0H4!7YVI^|FP)Al{B}@_Z#QD7rGu#U5 zmcR@6a`z==TL&4Cuby=Fjy^oN_vJ4OoxP>Kqq_@uk^hyeQM_Xe!PC8^kfgw~_qz|? z+*#`Q{@-6d1lqyO5+AwW#}UPanzCQ!WxsqgrR<};?4wW?GSzK|wk!fM*Km?tg>?`# z#n_mc{2~0T_Gj`UHKRQMT(lHXv-+KBwe>qkaeGGM(j;$!j*>00%9{>ZytOFBq+A)T zn0!j27L&IyJjoeK8pP~hX`Rk2{>ktFkYreR@}NnkTFyf^@iFNhPu?w;#PqDBW#VG; z2$AnpEN7No>LPO-i<4OJoA*xCz?0;ySM2EZ66l1eAdc*C0ZSWcmCKotRcJ*hC9R!MNGK$j8~e5S=DjM`rY%ju&Gl@+ zH4BlqJ*A}`A688xVf-J%K>@|=VB*wVI6J*_hz!qOqu#e7dChh>lO<wfth(qEthRiUQf#CCfjqwYZQ}BBQ@)(_|9E3<~ZOmi8i z^zTbJA#uqWd`Pmu%q|+Cl&@E?k`A#Jhl1Vc->PHSj$Rmq?e)?@Xn{pJl4@SB=FbdU z5|uQxKBB=}5gYAuc&5Brk@Ztv1F*^Cn~WLf1rWuGa6uH706e;<&5DQL zYR4?*9-6k?ocOI_*x?$}a>zB;nQ~Kam+s&e0!d(X!~p#A zE}Zh>1XKPAcGp}>KL|Pe5GOW`=fVY&Oc^+&bIh0);25oxrh;icZ+nnkmR4-a(4*>2 z%KUOGY-L!sRI(8H5HlPLyG=zo(Is;CO>SgOCM$6Hxp zzTZ(C62EML5Yk!0cnno^JV48z%RZ@Y&2oe#C zbYx*ID@C~D4lY8;+0r}ez*hpF;rNW#J|T$08h}vYFLBx94EJjhAafsV9KYZ`*bfae z%;50LGInH*MH9Gp7JgZbhq9L@Cx4q$zNvw8n7HU3;`$z6N)m%$u#}gSI@rdD*p5XZ zN5q?$))$ZqYL;ZEYbTbo`qj(kCj6#AAyJ~xnc;Rb4wYR?MaJDWKs5su@J6$#Kq0Z1 zRrE>87hiNV;0i|o3Myx12TL%PQ|IN`r;IBT93s!Nw=z<^2J7gKV}GeL?_LreT@({4 z#0rQ;XX=qN`=BN)+ySCG=SbBD#CAyN%OZ%q0fLMjs(iDBWoXDO3wvkU(t-#o1O8=3 z6bDY1aQo+4xG02d*H4)u?6}<8noLsi#X(7$tmE!B;*Eehen{|q7BY$zV~f&rMybHo z#)3(QlI1c9sOA6)c_{2TcBP>kW`l^Ybp(MnwcRt`{-snpjoRWslaUD(I;l^a4Si$6 zMPf74hn2?B)Xzhkl7Tfk<{y?i`39PXyPIC5Hf0ku-OylYxRzP*Hvc$G2 zT4E>>m5U{k06Yh);f;Hov;G|xxuw*yXMe-x z4}}fWi*ZYnkZ4hA28-_2*(EY(?&+VTH*TxVj(OIdKvOseQg}Wt*>)U_^(vG29?J!( zfE-R+FIHcD^K$!7p5GKXO26IsGq?&oubn3=SS|c_@%N7o`jdqxKcAjno&Ss%X!U1s zg@wi4AD7?UU6_XhmRld@dUoal-uG&o#J#8=#R8H! z2Pjaw>rIUe1$Uv!hom6`A~U(M4!F%{;Ru$Du{N<3NbZ-~EZvT|<_!OMTUe$J8PESd zc==(_;a*HOSP>GcEr)4}*z_l=6}A~j%)6QztR5vGDZH}BAeHu1vzo4sPHLT$a?RI2wvZG6^hIU%XOmB(x%zMtVG%?f~QcbjFnX3cV?9^d%pFlu$kE) zS6MJ2I@7c}?ce>_+5Pdq?=FIsE`2foJD#j-(?eu62E^mWqc}q zu0bVfWTtVpIx5YY$NT$77%}0druPkx+^0N(SnZZ;pJ7Y}vAu0PB4!Z2m@rTzpr9E0 zk0#WIeke`Ie))Tg!b0(n#IRY-(iJLbGXeZZb{e-p-%*C-ra#lU_$9ys8KN9!6~=Gk zh~=jf1KOxZGH`Oj9QJUM1&Y~u5JI&|6!?x0KrvdO@6fr}!{yU3y-h`&3jEX|7fcBp zK(rU&lJ+y%{o}8#F`&e^`^HGbew#66f{`Vxe3C;o*cZ$i(FaamvH7z8=Gx2ezK@L6 ztP);pFp)8Fr0A=?x%L_uK!P};&xKZTFo+lXc<)WnJpQ4ko1z$?8E(NOc7q~@?)R%D zkv3QtZ0{i4;Q=zJBkoeb5$Y~J?!&|;@AT3Nj29(I|A+AE420%|jZ4H}r@j0mM%^;d zQs?X}eX%gVd``v{uFJ6KLSjV;xDa{x0EY&F8ad>kZ6nQ19l$Mj`})gQuQt{lYUOgd zuc2naWDX{Z_IZc!0dzA4UP8~u$>PDz&WpYA7YMrCy}$T}C5WibZg=r-Z=OI@F$5s& z8ap}xu9off^aY|VaqhEYHfI6AuEtv8&>$7P_EKj!LL%q*X|eT(-*ZR(%e~git&Q(6 z0-x9ZtBpUu!j~L47l&Y#*Gx@jw6{YE%VC>eLK}E4B0D)qc}bfd=#(W<1H^YY*KsaE0tw_`q<+CT!j|2cbBzMUMr6S#-l}0uiMno5 zI+!wolZZQd-JM$0ieiOtmB!hQ-DJ1uGT#9uVfEKYALT+soohE#Zn6l>OdN<+Edt{* z-bT~aqUEjK4~jf9n8U~m*orJ>-=AuFvO&~XnFPG}kLciX8E3TbM3{;y0s{~t=WtSl zHzfz#&kpW0S$n?!&FdF0$X0Dq_*d44)b|w6s;L2XG6cy8G-FM;gNzx)sw4x%D}@%yjv>fxz^1;}&#&$(dICx? z{AM>V0ScM@aB76-nixb1BViHJH)C97xh`=v)M^;9=1<*0_e8F9a)N+D3Y8$1NaGyc z$XFy(3spfCW`$fk>*9LF#GIEjlf_PA`6NIyw9$hXdJ-c^G4ygB(=g-BmkILq5fi6S z^w7APn8>1iM;efbY3-GuJRKqmid&60uUg4!Q}e|ukz!5>@lki(5%7aw2KS*pWbsHIL>nX+`5!j$pXk)woWSz8$*+;mz#rO=2U(D%l{ zKpLi6J1!w)=jx&HxK!mlA-}c*Vt3-t1oL9|GVAJUscSVBi@gD~Wrxshk(V=eg!l|N zo0Uz1Sl9(OP=4WN(c62Yy<{sya;Jx<+3X#Ojh3Gjg7eBu!ah9C zE*}9%*hDCGORc3Iu>J`qrNbxf+E1mo@K}(P_T9v~ky0yTK@oIhNOg--fJ?}nW#bB! z%L6$QdI2HU9194Lz~|<6peDb_d2Q#1QC|dhXdkHpVQ3RkpWt{hkAhq0WZ&F3=1}&{ zMtvKnYf`iwTdQDfr8$QSaw))zIogL?h!KacPJvYCy~*kDi0B2!_^8L+u1EJ;6qJ=_ z-oxC8YfTWGIPT-3O}Q7=3$6FABA66e-?mPMgC3Nzjs4d<8{7Nq8(Z5O%znBKtnta2 z@40r0f?OY=zX>`jIm9vT;8IPj=lkFl3C9dR>3Z_L?+=;DE>kR2>J_@fwCj^gO@tHB z@qgQ&ASD0b^6)3@;&A0SjPR~dqGNj__sP-YGj4^K0aJlT(d{)qd^_M>B*~jV9k@g( zc|GZ#U|z`!Y!L^%mo|Gj8V)C$@UTq!$Ni#RT5r~1RHL0KIv+8yl7P#*a+AZSzxy$q zc7Xp=p|H0!9Gxt~UQfs8a%bu8lZ8Frs48ZA<5{qvfnkX~12|+aW$L6zwR6zQV_zZ& z;^&9)v)+97S|UN)VH_L=Y-jbGEKtRE1{z^Y6cf~m)#I)xpF>bgZ3qn*UXDOtftRDX z9XVcs7#;+oBM23~ouzCj%ec)G7jqiB1;Hcpb2@Qkdk!x`G2WZShjpARM{h(?o<&(% zk#H|QdN3kJ0IY^lbpj#o17y@@_#L5{O&rboL0|6)XWEf%bYBrFIrqR(6yIo{N-ooN zrs3tcPE-17ngL$vi>)V`RA;p=E}$k|;|uJX zb{Vg@!;@C0jDZn0

zvJPk8)tO#o^*k6wXc#DA&J>sZf6#QGCQP2+Z%8dCroiTyAM?E zE(QdH12^lvhMLq6|5+#>cL4&c@E+~dQmS{HQ>7@UX8iRMyX{F|&T9R=`3+Ewp+dNd zuQw466)}#0@=r}O3{+JEy?oXISUyz(KeVqe;dD5^V1_^(*U^^iaY(9~3tUzr*URcF zO+oKh5Uq{!fO7XYSQU0lT;<XT?%i$emRm3xgh#jwoLAUFPQf2xLE#0)uY}2rg|hA7Qd(A zmNYHH7QrJbI8R^Joh4Fpz&y`QmIuGevy?kO^)D`Xj`Epnw>a%OX&tGe4^p9{219{Y z`v5yLZZalNsLd;wd%C&jI)}L)%`KU9tqk5?Oh%W;{c&^Cc->xS+O|fHgl~<8$Z9y= zc!&KLT*Ae!NQ%Vs&vjq11)_Bge^|IEQSO}beHgbNMFroRWm~MKomIYfI@IQpJ(2R7 zgY?^x~nv-XaD>;=A4 z40E2Z_2hJ~dxj(eSp&eF;OSQ`EsA}g-hON6P|V2U5$d$1xy7r)@#0aRx2<6VBUi=c zuDK7pKfKboa-VH+NTdf5b|>xhp9K!iZ-NH|5A}5BqxiMLBIS zs{Q~8z51{-q3afkj9WX^YTpZ4BCjXUctLAhOd_z-s*;qD`F&c9y5jaGh_j{v~?;U%s~mX&$i1$?j)AlNHt zqwE~^#1cvrQv`a>wl0Y05z;ndeUQRA9k>`vZ zApS$JSkFcSi024_TSFKM5g&65Vp(tcj?pFI3Thn*6C>bmoamzPlRy-(B{V~@BOAcwU`>Z9$86H^V)6l9 z!*2&F85hi(jPr^nKRdB))k*>Vl~_t2f769kl z&HJ(59}zc9ZO9f}8QS9Fd7rjquJq@;+M6&=V@TrS^uSF$CjSQ(ki|9cG z$oG9Pf4suBK?H{458gZrI|U9%UyCd=!e679bl_LWJ`;YNok~Bkz|11~TnG#HQ~FoL zKZf}6Hb$LJu9;w7(bxv|WOJ@(J*w$|k_W>@+$TRAVey+7PuR|g3%YD}d~w#F;AAK- zF*U|ymXHvn+x`NC!wc2fiR)M*j^cLGUyCPJABek@cD|VbFUkeq-WRRA9mb@Ipwmj| zK@G>OZDXy#DX}42BpkJA{+|;|ZB4=MME4~Dxk?b4roe?h^;TJOG|>aKy-WNw7NC0oG^<*# zDhOUohOf)1{L()(0m#3jeV?>9J=F%OgQ>8ZY)WUtlh)z`upHHqzyAF5?&KP&lL8Jy zYEX;-Qc+7(q1%JerS}T<(N6nmdnr?x?uo`13j8N@`cC`xt2I4->T^#`j%*j<9-`ED z+J9L*Up#6(U+J$%ntzZ+MH!!p;R#DJ)RqJ?DQ@3u5t;VGjh}{MCPr-0>v5HI<8zSJ zHaebKX$nhIk!tps((lEsb21%1qW@qfY(#R=dx_kO@TdS6SaGW8i4sCrpR+8mtwsWg z6hYfTgy1)I*^C?E)KJ2Y7NF-HkC!>1Wf3a#x_#=N0P`v$g~fJFj68fJHZ&=NXl;VD zMwGC|6lgyS>PiE|T|f%d{b6>PYmG$U>(A~11mIO`@oL6Jm=W~aTY$cGjs+;P;kCXH zNAU9Vjn(y5BE^MqRfvlr^^o}sPg-Bd3gM5hAj0aA;|(VUp6Ie^kNL{!J6<~JOO>n} z9mck9hF@Ns80Wub0du;_K1Jo=SFwtw==;0Qj}R2t`2Vc_^Plkq7!09}^%kBy{dsvA zFZP!7@9E_MH`vPyzmqeCvMq}{12-tzo;I3b3M-UXvb6CWhza z`wa&qs%b^!34=QugT2X)dU5d-+RM1bQ0HP^`7Sw#x8`yCJi<6{8e3Cm0Ct0FW_ewQ zyIGD>jrLxFFO6x>30ASfB0J53EPJe?{8W>#*pt8QPo7^MV8!t-gwf#5$C`QnenB(v zkZ+F1xRW5W5(jaea%&*Y1olkW5a#>iEqDxQSTQGvP90muSO&DL)7Nj;*pf3oL9U7a zR~HJo!~&Rx2jKAeDIQ=oTv)-;q$Df{b%eA0ybPwwL$$^iL0f^Z25q*8&iNAD)QTt8 z6EITcypQ7NG&;v4O`JW)gz`KDg{%Mc16j2Yp9-U-1=_>jzJ1GhBI9^s9J7%m1zRLj zFG8knMMNz#HYCXVQ3istzcg-RN+5@8+S#EEf=_7_r|O4tC|vJ%NWfeD{=p{%i{9nM zw~jnM8)eSMPei6!YsWp<*GjX56eux{=8Iq#d!6roH5nhUEZErs=w}3lbQy(dFk&_v zO>6>KR;81Kua}?1wo^OFT(ak8gDFGu=_g1z^Ejlgv~8V7;6Y^A&;$6?jpA;IDYyh< zJB9#HwC&#mCrLqxWCZEZQ<_MP*P(a9bRMB=s012mGl&hHBxDpEOQBHh1n_nF>PsD5 z?X0zW82se{G9*SzHjtn`y6a=$U(*u%O_~bqnbY^Qmzck!RSzMVVBS09Q(wyfhD!ld zD5%k7>0(#HvbbnB2+IP?Xf)8w6n(a8C?JR>tU4iD2Aie?8(BHtB7p1wZiYO53ew3I zv@)~bKH$vPVOAEgW}ENL=+#TN>I!=zN-AzY_>SbC%*KUlYrnw>HyqA@$wZ8BI6C|G z6pj-ZV2h6=1UoM3R-%+1CLfPf@H|V9Y95961UvJu+e@G(w~Hi(At)Md^}rx%&3>vU zfNelfmNBqcMJ{2*x@99_e5+*UG+e+1PJ_eY5u!A3anfhhHx6*m?(ZM9wz<^cZ=n4x1_o_D}W=C~XLC*R@2v)jL+x=x#B|gb? z{OJB8nTe&xUgKz!fz3;-i88(d4;B}5;3pdsWuQJ(5gh)|v`YRR%4IT{`qjBM{_#^# z@cbNE^ugDr;TwuH&0`w2<#S7LLMMbK`3{W}OZb;JXX-DyPw+sCq=wEBZQX|Lu;WFQ z7u>C}sJifpW|Z4-2=^$qg)#5@xy(pNLB9u`yn?NYH~^E%EXAJ%+m%#FO!WzV)D8{f z2{vNcpg?K-d~E+e8TESj8FwB*5eZ`z4JbTC`Gi+8U!jI;0R@E{dp43fEL0{X!d5QB z-E0zGZR#YfP#ELvbC9wB|72snseD!}b#3j27V5xbNOOT?Kb~#Sy!+$=hqEql1o-O* z_nDgK4q{Y5dHe*Y#4Q}rh{o{HrbXWhmg+S4NrG-Y4Vzdw@zyzs@P^Z_auG>(Sv{}v z9bzQ6FcbRJe`&cMknm+7rfGTxJ$5@q8;v}|?As3XS+%j)K+}r5B{qSDzjD4OAp$;& zTUvRj>^Qjt*MV62DmY-a<7Y@N`qLRA*TPWRC#Q)1K`gyw(NR><@!mGFB(28SV1W`N z=rAB$U5X@*?r7iTX_q#xBYyAztFPR%$hTEaN=1y~pTm4tk_rg&>8suL@Zhhod1d$q zJgO(fn`5ANTwvj^Vu{cE7|1_&I|epr91s*@<$|Z0D`YelG^;!FL4aW0GJ_c$8+CUu zdULz9$>obF`xXdI=DlTpADGVemNa~mLO1lpgJMuxaa!8KVszKPcr@fmFyL?fP^Gh5 zkG1|*tiyk|AZxKgCzja6evP$W8W2w24jIUe92?iJKWk8?oJC zW3tVV02McaHaz#HyEPl1r*p|RL})`;y+znH?id)_1zUU`L5UY`TC7A;11yK_eb|1tY{`Q>{(XKBlOvPIdRgBZmMkWLPSi)z4*9$i9^#P zTp{xkS*$~JbXcbpou>iIVlGUQ>4^b3xZ6cO!7JNEd zd5pY^twp!h`HJp}#{o-$7rZA)UM`5Fx*m&sjlNt_hLZpYYBfR5BgeorIT={YMwRf0 zWhE>s)4#RV679bZnPy)?8UkPRv2TN4CpdGW)}~nfTrSnZ21}w8s5SH?PLpVwnUa3| z^WwHQxQM&vz-&R^E3Gf?Gh;MkBpD5C4G0+K^8r*mo(gMX>I@4(Iuah9tY3ee;G&ud zlCKiZvZ2`tEcVur5;r=5JyaK zF#U0#c^#DKTIaA|AbK4wAiRiy;)jUg2fiT)9Z$7Xg1}%TL_nCC9ncAbO#^u|jxvRt zB=D)H)zEqhijC_ANC`fD4;Xg zSUoQI7XMDW2`M_CA7P!&&Y(nt6cBTrU5i=nKroI1cFzU>0P zkfjU3{Rn72=#lVnPJl>q&Y$FjJ)9j0%X$yGrxVz2TksQlZ}t+Kg&s84I~IWzvEWWf zHyGbp0Ey}h^-4nmKQXPejD9tpN*E15t`_t=HY^_HYd>kvQFcf>AW zLWHIRQLkgT*LsLy2H`GQZ@^siVwSWM;hoI=7yuEL1x+LEFHSw^6tusP$+Ftiwty*b z$`%t%LDpf2X+R$?f2uT(LAxoH658cJ7@Y4kQdfOY5Ji%dZbs;0*zTx;_PX#6eWdXL z>mQoL%x1TMhf!FxJ(epO8s<*sAI&QMjbc*X(){gwp}LD#oyLSaRb7lNw2!SIUvVdh zu+aX1wg_t~QA)B3+^VvemkVw=wCnpIAL4G?R2rnkfWh_3 zDpA<I!=u` z5>*a80mJjSLC+{hgfo5-8*f?Z2r>xM&IL%_N|X@fZY{1u1_eFSrcmkJQ6Ul&o3J7T zoa=$%r*7}Vqwm$cWVu(ngHc-}p>t+@w!3B3Y*>p^&>*5^hf{Eg6?jS6m)IO$;QYvQ z*PGKDRlPb5Tl(A8RyS(t+k371_gepIXXbd3*@}h+@$xT*E(fu74`QpV`mdD!QOIf? z_Q+q}U#7Z$C7F#L|3~W!-17DH+yG{fIf-v&4KP}<@uWK!i*1VG!>UW%EJfzb0e;hh z_R0V~YBL&!_xvOrbT_IK>kh&jL*6Q^Xk;Y+^U_sWeB6!W;r_X^RpmK}x`^KSsBBdT z8ljVb=`mamgYah8SJa05b%7rx)&F?E{n%VaRjuB{pyG*>2NPiDkK<38w83pKvN!Lm&tRvwdu-<+5pp} zww@PllJQ|?HVc^Pvs5ZUJ*`t>M8t!TYr^+9GksK0?rs#5;>OCeBS+GAuXfzGQD@tGnT&mKRF)ApdZ@ zPl0~Op!L7WySOrOZ>ubc(n&2}Go*05y;X6c$iL>e`9z^;Je&;zaZNm?8f@sw!UyUS zMX}8E`Po&N^z5~LOX6PiLjj_P@aVlBFK@twQ=X}Z?HbzH5C{AeXFbF&DXC~ z(qZ)7*DaSf^FJ%ESFUhFDM>iAW(*UgBF21n>#pW!A+6Wx$=}W4{Hq=6nzrYYb5~n= z7MJ4OmK2HJ+T!c9P2+5PMe>jA*pwr5_A)ok<)3I){Rd0N6>`655)%v$RBqfki>T1^ z;33Oau&#)Hp|zw4Tev0z*PH1HxIQA)Rv0`@bV6$V@jpg#tuV5WPN(JfiEI$b|bLt~v*K{zsGqDYDc^0F=&=Nbr?KeG-kABKpHa|W}3 zTVa}+<=PP+CZ`{8ZGm4=qK6(39G?uw)& zkwiT$$fT0s1q%T?6tiDoZ-`U#$P@U1DRF<9YiG!o;~^%XXjp@9H7PK{eDeXavNp4O zAKtXYt7*MuuB9p95#voX`WQBVvZmDe2Q?enPKDdSDT80T<~W#bT-@fU;0$NKv;0KL zJ!U`?c)?nWlAbL$l1yP<@kEDkF0Ti6QlgWJa&@PBu|&NVP+V&O@rq zFDZjkDxur{=h5-umtTJQ2mbzLPQe3iS!k~@yFxOo>D0vrK^|ff#tu)D2q}1!Vo*K% z_~{9RT$m%|PL7*rSVB^D@XBK3JL-DWnu5TupkX)W&8GUT%nLuzb1)h>BMp4s*%`$Z zYfaHtGLr+$-;0k!D>WQzmZUu$UiG~;lJtvEaYau_os(rsjHa z`voT9o&g}PtqG^b72w|*=!e(!M)fFRX0d1ZRwsq~{K0Ve6BJAFPR_O(-puW;h_>oF ztXV+HWJ=X_@pG_u7i4v`m3)DGyi*s+*CSv~ihlt{zs;1NtnA`$-#1?{aYj8-)=t|O zcKWfe1FZxile7^wLJ^x?^vkaAy^F8qf#~hm0}u76I7PbXjTK) z7Vd`|;_@a8AOAG$!Qahh$HFyi!%1eCQu@nY;h>;(gEjCxKrZVyp$%lE(+`_L$nGA|c9(6z*AHjhh_^mkJB>qlEi?VIlyVb6W0}J8Q0e8h-Rg3xoV{JNA zuj$Im3nQ}c9Ipe|T?w%dVyo$i1~I4*k6tij&+3w&3aTgKt+Ja1!cv&ed zabjDK*3SBf6W_V$9VVHCeWey3!(KPQ=`}6I5{}>=Wsk@gJy#I|=<>-W)AGH7`3CbT zR&;Q)M8x%*W;zV!!F1XcFrqDoI#TfiObCY+FQ~392wBGzz4YoM?T^AI;~wEz76SW8 z{40?Xt*p(sd&(eEkN5%~VkY9156>^soE%{=4K*wL)ux#iS0)uS?|tgo5%dusW|&mO zk-WJ=5(j)ilQmWc=cBqJN<>pycovKsq<<|g2|X%!kM3gOWUO9iN+++N70X^i^y3Eb zXrZLxYn0}?j5Rj-Yxd^#hJ|@`#A9@-Ki_G`m=s?}M$|)grPsbiI^C5|I1$hsqJnQ1 zk05GBX$#)Cgf70u#}0xn6OLg6n*!h0Hx0@`K(CV+oir&?B$1*io;NI-w?Zl8x3{&C z$}3v@RG7FIBH#Ac&{LFH>@n`fBVKs;wjy{sM!;+eNAYAX)IEUfhAQ!_Y~)10ims~{ z7a`0nQ+oFfI==irUp!jaJE%>$xn<%E%$GLUo!$s`U%T0a={42Tu$6n{Bon5BWXfCv zH<24wE-#Esb^9HpsC}F&^RQll?rK>2IyHxytmlFsvT!w(l;PCWQl`Udx1u3VxjQIR z41ZOxsA!!#R|8r$@Q07r_)W91U6Y1WM6If*XncxxN;*i?%*s7T%v1!1lj)qws*`F_ zC?qd)+j7=GFi!>cO9q(Kh1xXuiOFJ7pe+wjIFs+*p%?MzycEajCHOo4Y90eGkbe|k z&RTL>mdB%bw2A**mz%$oMUz)W9=du}8^lXKXTn+`ix(p?B#wJ$$15xF>YU^LoWBw1 zuAQP9wokZPiBK|JDK1H(%40`NwDnX_2>_8#Vse`6<0+JFP)*fHdsF-H6{zXPKN+NJ zdh!xh`P$C7m^B?G>s`}HQpr0I(VqqVjjslavi6I~QE9Ot3XhE7NzL>%$kKrU23z); zVbu2^?v|+lHgv6-c7ezuj@2|>MTNW-M=Hos_N}M=cyy~XkHdbzOlZ-1>`z+)B1)Ag z?*j^Ho(G$+F%33g*+Y{0IBUVyRaRLAfgp<0DzWyfUcRCOu>tbvhHv=_h1Uj#x35H< zCCbzh`YdXB&Iy@0%UTc6o6@9qCh9IQ5*S`;x&|VAxU~@M z+4S`~B{NYCMPrScB9KP!oKuXC9~8HB$BR`aeq)=eW_zJ!CG*M+BFK*VSKir?5_phT zr4Oby78AWFabFUG=?WldY3PR(2yxe>-QAnVA=34Z z72ilwdym1G_tLQwm<6;vZ9TyKnxu}bw8Rv2$yFz)R(hg?Q67lKvwM-9I-fwm0Dz{M zrsVe(04UJQTx|3+C=PK%*Pa86;RV%0^2q>BwQH+$3#Npr6Ob89 zjqsidDI#4hsAR1InBvhhWo^)sco*H`<0dZ}PMP(B$A%B3zvjb_JW>7BPN)S8NnQm~MoTpr#Vl6Zhd9cq29T*dv zT4@SvR%v23zQ!PPT}o;!K*Z?a6DAhFZIQ$&u0?Q*hjuDPA?b_65FOxVqB_h{Mrt!- z=j^~J(PL;pf**}>JQ7JSx)QbEp^~|NsNBH<|C!w70k4nz#j~yz9yTG_jZp$7vE za>O*6DWz+4N15q#u~9+YII91_2&$KOW(exbh@b?50GWp4qD)6iU)2H&ZP5!IH8yIf z7W&K5UJ!jPQbIWo7DH7n)3dGiuga+$Bp=VM3N3?&DTF(bFZ|>4ET8`;@-1&h)+$(V zZ_c~Coq~Vex|!8(8mcp!&|spHCDp1Ca{vvLw<7WH-d(+C_-FoJnkkS#Zv~%(g3=Q(N&YtICA?f0*%Y*&YEKm?$sRj3 z1(s-&+sC-j^kg+$5iYaky}JGJ>cMz;b~))0yY22_%-#BLA7h-nlLW#E(`C9-w2bNO z?Qv%;hBv^)O7oi|w~jYjCWC?9H$7Ayd5tmD6&q}wyrv;Bk=1-O{Mb>`u$uzIuH4x6 zwJ8-r2Ue7gVpjlnD-A4(ZPVM94RP`wRl~l|r><;Wn`)RMYF(G1g&?>l-ktb;I|1*! ztg1M6k1QT&{vRvg{Z4xuK9g~OGDQBmJUkz1{ds{pgY%JHz{s!%ltM908yL2+u2&iz zrIZvho&*b3~OS zFC{_XF;eb=sYRxu3@3RG={+;2NHk7oulr@d5Mz6?5{6OPyE4-b^t$lxxIaKfda~<5kmV@OeJfa$>nz5JM5EooR3?@?tlgpY(5SSUL6L=1*&*Bmf*MMGj))u5Wb z(l=B41G(7!G^R)7BDq{52``CtRBi`^Q*Gp)8IDBG*DOjJB%rwqC_lR4wDMyqlU{o&`(IltO9~v;sAaRAQf+ zi`IC4rgZ$8z9s)&o$55A)LP|W1IENgL$jqOZ@1BmJJ(7ERmL@>#*LlC#G3^RV@Mgg z-9)L_4yqZ`sPTUqQW0>m&;@pS=ZM+a`@T1#Hnr6qA{d5h<^wRH;7&KFBuqw2EXYa08kWedK$0!ga!)?|W zcN<*mq)e3G*=x0v=mz=_*}@QP0=aC`ry?LfRl6z{s5O5S77x9uf+dayd_kx(CTy=| zf34ypeh6j!7AV-jk;?4!@<5XhyF}iL>m`Kqt)!t>+F^7h>MVxC9@kb4IXAKfuB{eJ zpPtOxTP2+#M~hr#l3KZGcF#{@S03j#y@rSSg?e{dZEQ`aSAt0(lqdI|Ro$$piHvx~ zDw~reqA6^>_<~rW){|T>)z`Rfw~cHR&{?c!BPuinU600=?|Y;7_#Y`P370=?(n@2` zY$861UQ&t}%HNWA!W1x~gFLm5r6K4u_P8+G1gMc5_M45s$ShKVTnOo`E zv%$;ZOZ`nF73XM;uB-$p-ZX+RHma>+aP%=|)~)S@E5ZOlM=f0pqj!fj5vY6HUw!Icr~g)=g|eJ#y2A3lka|oUCN?R_-#4 zc=Yz3K-5h;83ky4LxFK8S`t9uq4v-&yM8~Mh=BA3m_L;Tf-;(U!^$LAhdM?GSvYs9 z&AYwxQyG5)r$C@ZLBm1N^-D>%1a>;=bZ*nbeR2?3-><%25Kz*rGD8|@6vO5&=`*Co2&LKPjK;y@HT%voTU;XU@ z5l%DQ<}pNKRCKzFXrbsGqH>bioF(&3J_H3imcY(^$Pc~U3u&l%zsVvYi~q3* z+BeGNs`QQkH`H?4(Je?1F98D-=2&MNd;6=m-4U;5dF-o>`a-4M6RvDuw<=5?&|+5q zua>>Mt}AqiaL0s&q!|O5kuH+ezP(Woh5=7n$Dre>qxP&)k{?k?%b0~nXJ;?>gU9PA zb@pfcW$|$+1QsIX8=Fip1;@sVud=A!6KV-*wMwS}3xtQ(wj-|AfKwlKmloeVIqF^M zbwq+!Sr?e>b-flXc78;2i$8~k7vgnvS_@3*JqN5n}+Mkt(r?G>aOZNHo>z zenX*V0}!eAca>`jSEVuqN>y6vd%wu^lVq076Evc~Qpxp?EVb&!U849j3zI(tCf)s{?6TGhEzz}U4cUJDpbDQ{8lP_O8m!VTEPQC# z;E0VB^{JYQs+)X^t;>>#O`YJ86|v%}bh0_}vq!1au>ScNAz#m|6D7N<(pHxh5%7hI z7$wORg7XpX)d|7RX4qjV-WV8kSf#-k4ttoxtw=-WP?w=~69W@0Vo>tESVPMkS*pzA zZYmdSsT1kr1*XURQL6U)gxJta`5PSH*3 z+)pn`i}Y{fpqoUFr74fpQoaK;bEbZR*8mA&qA3D7V&n~*^!1~8N3Q=%bUIE?RwQdp zkNo8A`MaXUTE`{;=5{R(kDY|WxdDE%ggC?UOaxDm{{TxCRbVS-+W3~Z?2>&|Q9EHD z72=GeilGF4WVkY_SKLEer!+m^WK6N*4Ttlou2UnXz16dR7l%ZI=~ANepPIFQ81*OJ zgR@@Yv}`Ug#(}uoErMUPknEd+=?h9})C2+Rm=GD?*elcNXB0fg`&hFD93AS{;d-gY=tCK{Z7x+pL%M{!W zq;XTc_g+dzK%(`O1B>g?RGHyKS3RrOxq1D1lG5JFfjWJ1DP~!SokIkqBaNE=Q+~6i zQP$$+4v>^5q52y&TSOmo+uHCQWtv<8_5$O}(&mv&KyaTF8)g(^9pMoFyrO83r0PXNag& zlzs_RM089)+?=2U^oHs>VCj3T_|31_3E;%>*7nB!=65@U;EQKmK%5V_HecZ zR=TsZ#l!O>_(=SpRe8Dds#0e-o=mTVeqL{_ufEzyyU}X`ntLf~u#;(3&h(_A z2V>wa$IX2dHQ2|rD(GYN^{baJUaqe1ufP7&mO~7uaE8=*7LP8^FX~}dt;f!0sJQ*| z<*WUz)wMsaej8Rx`el8dB1DD~(T98qlKy?2xoB(K8(e^`?U(;&V-1hC-fRV_SHSQV zu^0L)k}B3ii&NiTd%pR7wuar&;VFWb>Z`EVvW`r;wo-1LVjs~JN3Q`H#_>OgHr4KXX0zR<4NVrdnUy@Gd; zwT$tK^SP!XI5q_8M9o=B4iVr`5rc*$;b&8(bgqCJ|Uw1{20{XopGm zC2lNeQ3*hRdkTgZywPdtJd#}!zCUU0{$=o{g`mB#;l^gUduEgB4=yg5<(Oyvz$h`s zjv1fzB(Rng+w%kF2;w~ZgMHoY%u8+4a5`;V?$aLNgd?Hl#t13FMNNWPwlCqiKJO*w zr7iKg!-6D0>bze-b{b5zGgugkJ?P#Y3Cp~LF5=lu2Py33ct3TC(0^Q@SQ1NcbYv*d zo6z-#Mc}!FMV#^KA0lB!1a-Ldn=1!phv*394IAYN;+hl0T=0WuHzH+`Vw3*FS89WdwRLy$K`N=g*}qen!(T_sMuNg9?6ygWU!LT22hee$NGt$S{+|;}4>Z_m~8J`DZ*lOG+w$ZK7l2$65hBH?ecb2KX}YtJ{<{Ie5yW4u#I2>owtaStT^q%XWe(w848=4rbhnxzaq~ZUNVBzla2Y<`L24B z(zPfOF<8@}f84{i8EPI|TGUi__;kmf9UyX4vD@)JR#slD{&{}~GyT&l8%oA!&OmLh zs7}V=4oNoU08Eg~!at)WSUrR8zZK*6xn^9W)D=1Gy^9#mfU8zqEAJ{NnV+so`I)rr z~!=q+>Id&3^8e2@l)=SjmVwtY1O5&T+`J8ff3xRZpp z7BXopf$Yc z4ZNYH_MIi%d$@UwyApe?@$h(paUry9%o`{XIlDNPyoUFr{(1Mkw6QmrEZW{2m)H7Q zLf#gV-+pg!2qSL&^iA0g0l*m~7##1D9OJ@@{&AnVBJ>i+Q4b0eqL7aeZ;j2?5%ycd zrPeoC>}<4g9-Ot0IvsR2W*7m0KqO~#@5VJV9n^ii`AA;@Vy@?6l*n-butBLAV~^1= zV(gi&0NqIo`KGuk1iC4`QklDk@hN5p)~W&;uIQyWz$&@Y`iMBl+0Mex_E-PtC&{LW95WC0_P$))+k3dT z_lSW-mF~c!^UjieYx)JWT*#+_G-RxEpO5Ft7*s;>fU@L*sVcxdTAkj~$x=)9#z=?^ zJYIeajeGH^3*e3ymRdgm*A)OjXoinUvos1JaDJ(^I>u)>17&C5KRff}CG-i)F8}i2 zoERxv{$!n~G6s5AXya8fd)sml*Q!gY=hHmPpNdC6%m&Wb3b{(%Hi@elWGyqaoFiH~ zPO-__dc-zlvj;&z<-m+>H_vd0QU3s$hB$YS)g=rXi1AQs8IM(h)-TR3aZAlu??!yYr2eOC(7h8 zy%Ca)ASE?|Xa*DRsb%zGEDNp2tq0tGx50K9mD}#i(Zp;?nQMjIl-pvn+;GI>n&yDp zbFB~a+V3woOC;SLwGM_zwh6nFy^u?A?KkIxLtu#bf&Kx(016w@kJdO3(~~6@{Xgtzne#DSay20Z9#k zixS2@guJJa!_i{cJZxRCGzYvT*x4JeFy>kvb}7;?d7lZS4x~C3XAK0Ut4(!pV56sg>(;Fq0U~X)D=a6l^I^{t+gnM#3 zg3w9H{xfAa2MiQOQdt^9DPN38N#O%Xru|^){?dKX5b9e=g??;8-?BcOZ0GNn<-gL3 zofh`94_<|uw(n0GVqb0lWSbSVE!wl+=@_;p`L2rXLhd`Ql(qalC`=bY47oqVpxlq# z{(QXMq|64P_5(E^Y|#4qT#j<8i$-G~%nBT09n9q5CVH-{L z3}vh(xPaQY16ow99=06Z>d0|y7N94k*E2TUX`W83AX^L%#eq-*#baC_B#IR*Sgr4dR7fG$ zVU5+^f&+*hEwxwhg$r7qzTvEsjwCICrX-kU2s;y)_rQU`hgb3t?W9c!JrtN|%Cmip z2pW++oOdre!Ew=<@3LDC%J>ux*>c$JH^58$=46ahnPD?VmUHr0UM#?vco{gJ~E>K5`RZeomG z{7~Cv`0lU$uYTTne||h1yx&`6AkY9i&%JN@*dLGV57;CBDSP?`Yczfj5S(MGAp*-x z&z=|+H4J`X@lz}3R-S1PJU_XW)u3p8+oEB@C=_nU+osZ>>|ewA)VSy#u>N@esE2UkAw7 zcazkr9fnUe*lBd}Lx;aAc;o)Sy3ySME*FS%H5BE=ozReRbrMobofd4V7FjBYia9A8 za7;I7_QxP~!nt>}?nMMFR+@t`1kK<-y;fM4&&s8>W*M@L5bpr*YHwd`TcWm~=F80INo^umLD-kRk%p@QgI7T$@*vS^v&z&7Q z-=G!waG%ChRikp?7wfupirZYnAR{>(aZlAd>a@3>Z|(oE`Q7@ha~7ICIp?16|W3MQ0)2zCDk=z-cVmzF7Nlb2ju?9-10aUP~5d3CSnB@n*qfn(#A0 z`+$fyUJ2#n{BOxBr!OP8;yjFi>S+jqdfjo`C3OOO=7DXJ_bV$qf85;KUw`>(2T+|K z^~;96J^zd3q%bsx2K}}Fr8^J^wExZK_RcG`m>4?HHkp`6K2z)Df$6U>eBDAA8xd4f zF({ia<{;W)K=DrjbBi;|L}Bs1G?&cd=NH9D8$vtI9_ z^X0$Z$3M{&KAWW{k*c~w{91R4+_~-}|1_>-1zp%S3dGS~3z@}59Kh7gWEH&D3mYyZ zsClZkh~2i;VOnCY&MZ@qVR&DB~g57707Z*eaw zcp97tn-DthU_Ck;9{waIJ`^E&wDc$uYP^S~gr2$X+55lsj^;!rPs0uefvvVvRN#Nc z&PpOOLe7^yeR*4poVEGC%Sonp3(Hw0=ELE|dsveP+j88gV|Q;uz`~ghl5qtxFh%v{ z3iDyrY6VbN&c>}q*kcH4&L;BQaU8_cy7SQ}pKe>;?QFdGCWt$mN`vSy5KWVc2F5Kg z6fhfm0#{kzg!Spw%k97H?`&+XZm;4e-a=lBz}vYzV2$rYLMppy6s=Ro##Tt-E@5@a zY6NRoaIYa2Rb9wB{Ut0a@Up@qVB3ReZ$c%q7*X4v;uKVEL6W;lc)=Bsg*Vfjufyul z?yOuKK}__h&}our(C^p}!z}Rs%NwobO{mh?JDAq$){vEz-uSS45g-DCQ)3B3Daxo) z9p+X6)<17G)rfUuQ7Z;UHtNIoH9$sN7si^dvacEjkSsyKpF6F3K%8GG6#nTZAJMF$ zRnCM%CMK&yz-|7{DR!NRDIiTj`NgpSk{Ry;aDA^Yo@6lw1x{-`r@XL-)#dQ>XAK1= z!%`(|%pMuGfHJ67=kxJ`XoMJ?KAgj6&zn|ob%)#;gkXTlDSd*__k9{_F~!Y8cmbj~ zJ3Q`V`{l_?Ley-WJS(t=>&kK>KtGaw3Mj!<>&&iX(XrTlENyi_(E#0x(Jp|rG8vXt zgI0KD5VOrh8}}eC;Q)X!C45v#MY?AObK~GR*J$UrVW*K0cDBq|X#gjd<%A-ydf8AqpAT>uwr6v4M1!qV)y7>@5jL(thWjZLJuAd0im8V!Br^?X7G$hx{?^)Sr0bJ*xCYT zgZ9u;e7S}|2C`ud|Hnx=VM0Z3L?c_>v{9*#d#?OuZct=h&xk#s&xO+fa|r)R zaaU40TmN5bKmQnNCl)9Mg8CB7OW7sDT=w^&KJD*IsLMWdwHF(BsKHIa*x!Iyh2XK% zm#EN)w!*;Tqhc^_TKlzWSW<^!IL)Me)g8eiN#8HnH>iOsS{?VhhSux5Auj4VkPIZiC$tToaO4-svU0L*l zgb%M|e-(zVfUjdik%yHm5D9p_LTFIpz_8d$i1-bQO6eolWm~TXONNSR-X&vhC2K2n z5NZL`Q;etjV)3;d6%-_6cQD@MpC8;~NE2}o?&^%Amc5Sqe***czEt~9eQolExHN4; zJSPprC{HnaEzJp5vq^VHgvM-6rd&D4dA}0}BZIbLR5Frrrt>MMQ)ogyFN|-5i_g;I z6Z{mof{Z^G<+!m*qM-mniq@cBo)Bh- zn@m*G2p#Fm-3KswDL|dnbb+Ga)EcG}3L`M-%1IT-A&f8?y&9eB+kaqu=<))PF|TQG zrh#W^P@@Qcfvni14^MG1Fni%Zpc^>v<7+Z!L?XCi%WOiI7cy%NHM$tW%OY!op79CY ze%29hr@vNyYK_7j-h&O5u;MFFI%$mF%7f8PHJGgK7oG#Zbmm3fy8dal$y0u#L9ds>9|X2 z0znU-%2m%?@=zN@kHFrC9SSBLzNL{0P{I#!gHqj)N+czGG8tEHTo53KCeTu_YaX5g z;i7&jJz%AxY3k`%;|b_xja~R)pt)!Z^B4*0IS~B%LbX9no9%T03${+dIvwak7`n^q z?iug90(NoW!?P>UWB`J_sYW;i0LM1t3_`eyH>k`^aLt3F3OuX!5Um^UW!=23PaT{s zucMSVn+y@=s*)J4hXYZWrWB5qTsQzdd`R$IST9Rg;BI>eujJc%Z8EB}x=!gb=1tn# zh81N$H;$WIv&>hBe4Ft$Mh$|)5o-V;a`>j~DM<`*aUUGXYSngQxOzpihq+~HfvbKnpVHSaf_zd{<7}Eoll`|P#4ghG{&eaHm zA8W{F#rR)v3O&#c27%vprOw(Jq7czwW*5yqiu%NKC~Ly&$X~#g@L$xjpiea*=30y1 zcfb4N(>HgY?*6y}op|?0C@60vsWnF;_?B!d8ZD@8_{?xb@N$GR3a__c&}oe7&A9+QVlbt{FV0E^1FNlWilKZ#~SJE_mnbNw<{c-ki5I&@!R1Drvt;u zERH9OQmTL&Mt?;bTmR^L;Qe)ob>bz&t;H+ub~P{uKd>5LIph@iB0&4XY$Vmm&zjL@ zVQ+j_l1Rt~W$Et13bIx#JhcQ8zx2OOWwAod@mM$6*^V4YR1gU4hJGAxt0w zQ-$P>Kr7$st%Sq#E)L~w_fC56+>Woa#=Q>6B=UtE*EEVvmcb$%vdwH%48zz&KlCS3 zFag#EuG{u3{lrcHdcxxA9Bmi6nh)OKH>f4PiHS+jpw$ZCXf4fQo=It~pT3d$$}7w> z)`02Q9-ZwY%5St!!QQ~hfL8MwihK0(a)J~~Mh8(c62Uz7Vk~>V_M*g@$k;JCFagXi z-)Q{q$KR0#+AW^lD@hT{C-L{%p+r;>uoWV%uxzGFV2;zUfzWJ5V5v?9f$oJR#zPP7 zZ@Lg&a>N3MropReUQ%Ql!Hs^0~+hOH@Pf@%12<1B5PQI<+b zh}E}PO}rIwC_ub2;e*PKas)Vg5y6Au9=yN69rHWm({F|&MQUJCP6tG(o1s40(US$q zpktmHnHc>yAt#pLaXPDDuT;;4dX8s9B4s6YbAh!&9XTZuXiz*j0az;~Ek@FWhjqN+ zmSDn#2}UGghc-?o&%#~G^(-3PSmZed@%-|D#~LWbv7OTebWT*c*%7^EvQpN}&@iZL_|@%FdgOU{}ngH7^qf0%%!Ki*`gJam5Lo8;zplCo!V+*lhW z;PqsXldiCUC?Br{K8FjaB?ALr;mA38Pj(jO07!!b2xU+H)Lt5O-{PGoZD4!5ZSqU* z0(g)Ymi`rzbX_?TEwvIW2l@=~%Ck^GO#*NTamREF;wDrzoymKnQ^-d*9;zoqbDzVl zKymU(9EcE3m=XuVD7Zk_?uZ9j;rbA&O8cqCY9oaMd@%R|(7cNaPeCLHXZPsvDQ z?T5+-=aWo^ZZn+~AE*RTlHLFxPzB%!mQM!-NWKoYVN>ZM%o}R1USXS5HL*2?tLt6N^ zn$Zq)WIILQvFj6;VErBU_CYd+9gN<`Zejm9vb4%QT78_!e!PI`fZ8}nfJ#-%JCUyB zWO*cWq?YVJOW;2TFwDZ3WHA?Hy=w=WtG2N^IC_rl!m8wD^ai(#M$sUub5JRo*{Wws zvV3Po-P5tTnFI^@LU2r3NTl>S&X8~rIrUdpCd}jw;1+qu!#B=FzJ&YYH)9wHJ>Y0y zjutK!NcytIDa#D6lKB}bXa-l(4#Xsz)EAAS(osl@VY?JFt48h-*AvCfR%d+9qH)sw zxvZdKUbJIeqf#0unzcz&W193yQ*J0rpa-gAXl+7)q-2)uS*8vHioi3>NSr7xxPx&H zE>3_i3b~wP|BE7LFnMK~WGC!dJ=-F;NKr#X&jMUws8w4e$-sJxJE!(BZgDwVDY=L0 zFd*c%?X@MgeFbshn%Bvxgu8mj7TMCrZCKVFE%nI@XROXnGqtJ~q*-OUs?=5!4c+R~ zOC49{yo&~+(g`KE9&HS+BrCj#13z#+?jHB{&#{3=NENgv<^Oag+kkBb;C} z-AcN|El5y5X_f&WK!aCw(J#pXd453N9LWt7TG!kYbBjme&DZzm5b=*39WbehZtI2= z_u`9I0mTiCckm5XuK4leck-Y&UC1v!&TFj(_Wqc7a*iWaifYf-_JrHlJ;;B4T@M_0@9*5|nVN6tW4rLA1noOj#5zvY(daO zJ%_fjjy62mz6);u3|^rAY96u2F~Z)-{(oJ<3P)j|31O(qv?d*CAAl)jByU=7ro(It z@7oI4yKNk~Y2pK83dExNWMKu{is6` z!?y!Xw6a&dSP+^8{slJ*HvG5YNl~dtH*@f(NI&>b>5aG*zl!Zz=!K{0J9f;pP{kYF z;M|hug(0c6o^HdJn%=7;vNp=G!(_+$pLMQDM;C^7O5{kh```Vg%1yQe(|z_!Ev-V`6q>I8j`=Z>!PC!+dDN>z~6c zDz;o|5bqX;oV_NBrM%>4F)5uDKnvsmu2n8%b=JiW1Q#cjlZVF?q86= zPj1k{+5fNE1JuZnNWT5~!~4LN_FeoZ-)wT=8r6(5oG@+xc@kiUGZoJ*`Q7JZA|2%e z(8S2IsSYfQkgiB!i}Xib*cpMbORY^v6ef4?*m7c zBN~+jT?NXni9WF-E=!)LhxYLuPhUyq8=lKRpTG`X3~hm<)ypbUYrrch**WbW!7#c& zYXHeW$X;7%M#z}X2N_zm#}imR2Z_-?Pc&2yw)S7(;iSq8qby9aM*z$OS)&G*5U%fA zh(m!57cjA`oUS7yB_1^@V-8BkG$xW$piJv48PMaol&T{YCnK58F%$;1tiqCBcQ5+j zm4LOo5!t=@zyjH8KF5oGGD5j%os_=jOXwo-S*_lR|YNxIdkN`7RA z@qK3Sn%Kp;a%2MRRn1$E?tgi&_2@qC9hrtnvIBnX8(>8y7y;!8a(;9PEfCbD$i#v3`?TBt5IDh>5*5wckiE|M;;cXE%q{Qkjqkm=yG-|^*GQD4 zN*6r&r!G(oah}o;gPLme1+GeLNOQ5Rm)nwsgWT3*k`cWjgfd1BO;TP{7n1INLyAhG z8estKmC)zEBb@U9sa_Co9KVl~0*@Yj8A^y@CmNTG`3U4`TO$0N*yRC%|E=~HvfZ|A zq~ie79dq0vy8Dj$KG?)_0Ih1Um&X6Yit)f+Rzw1KLuHdpuux)!X$ZpY$Ebn0sLdCz zkmm3E)fby`4c_Kfc=yeV)o=GVx4wTQurkqRu8F>eiqH2iFkpyKF6+U2Dn}hzVxSu~ z)?6O9rTI|6ad|F|Rx9DE!rOf6(jLADtT<~l<9-O9xfMN)eX2WMuBo7QRxXi@o!!MXRoAn&pu`vC!LWiH(f@m8cVxNWs+}GOdym9N|$c@1p zx`!&lj`Tlnj4lmB*>WBBkC<5vOGQqHy!PZOio^4`aR(=NlgSD4vxcxeE8Io(1N`q0 z|2xWxi?%2fL@tR=&=$Oot*^dnJ$$r)<5B2|4-bB?4~KmCcmAGdyxlpJL)4IAkihRF zx$=FSL+JeXeHQF|`LMO9UqwYk2e8SqLcawNv$l47+CLHBbH9a*FaNF0VteuK8~b;I z$p}VsDr$VW$#hWb4z=*h(ZH)e##lLIVuUvM72a^TN;bD?Q$c)ik%SRaj#6~b{t{L$ z0=Fdl@nH`rkw`uU0A>NE7msl0b_iyY7J9UH)`vD&ynGFRZ1Kt+e&uUWRPkzO!c4Hm zOYLR{`M-+~GNxCETPxn{1@rmKnyA^!LI1xldkz8Zg*%z7;#ewx_t3N%9(m6Th+F@Y)=8h(6iEIPCOH_=-tO6boxPfL*y`^cHRr;t9MsEfAo8=ka|@Q|dq| z*_Wo0O6$)KmLk$wKoKB?uHnbNHrE{ni|Z|+oFFz=J*18-)5heWz*s|v{LM4~&cs8z zB9;s%D$}Rgcc(Xk;aT%vx_@6m?fE+b?EQtzRV_^%HgxCMv6)(IwY)|WhI{d-wRj=c z6fuoJLc_j%JZvqB5yI?O>8PUvw0_0GS!~Ih=#7Y=NO;m4FxzbJbpvJc5DG;t=R`S? zVpfou92^Uoq7{)3E^%ph-xqcNP#D<0n4~ORMF%o%s53VxP-++na;FX_aO)%+Q{%CO zM%smyoHDC}5t7%RmW?SBEL-!kQ<}SYL?>|B9NBu=n3qIjuJ+kNUOe*hzOa+6M^Kvk zbW9?@h@sV*M5`?(y6OOxtoVhuJN{Zch3Dxw3?DGDVVpy7IeN)2VTiC8a_6!oqu+M;B-i)fJ;GC_7>5E_d@*>Jp zagfg|6>w-_v9t)A!5J>m&DvH9rc)X^trETiS+-0QKoh2&!uIbujzXhK+9>NsIM^~k zo-`o+iA~geZ=tNU#{xPKssq`OeGvR01E<*Ckp$COx#(gkN_of$LSKa~upzJGuhUUv}3F3@oOJD;lpDyU{*IRPutZ%Ft>O;Lqwz+0;s z#pS2kM!e%+Ec|hD{sWzrNC+=LL;5w=Z^S|l8`_$XaWQOB=W6i+C}8V>I4!E%qAxg{ z^b<#}A2D`lz`b{h5E^BwU$FL)Psfc4QtB~M;6oBSZtJ#zDms^0>tVxR&z#5FcRCyH z?+?#$j^2kSe4Fi|cWVwCQEnLxNQHV02qmqOr0sdZ+=*0YgDSfR0c&5FqUX-%8guG8L-!wg%GBotV} zh!aXlc9ufI8c}2mBHi%IV^ZR@lAI_cSeXYrM*z2MGk2KRlZGII zP$gYe|LUwF6w*s>BDVn(DYsMfWadcRbMoMR)uYXUV5ZlP2vG%k`)r6?HPz^&ssNzM z%?lmuv0^h16hL|ffus1*UrPK_Y{2YL)yQykS2Crf0pLOan~KtDJZfq~Kp7_@@3BVx z2~L+JPBJ;g3bZpUm8fh9+hkZKm3NQ_)>L!9>-2?M>KpPX1R*$bGOJykE!Npsh`Wd? z>kjAr0IqDuO4Ya4pz%+Pj3VI#aF(0&u&wo%yt+<-WL4AcU1LdF1Y?k#7G z@g?0zfe3e`v1{!UZFbsPJPra-td4Z$X}X5kKSgMz+582l`l;YSQ8!_nRq!MOjk7@{ z0Vi4yCy7gm;D0sbMiT&|DFf?&EZ_ARqFoD?DCYPAtTlZk{z9)s8?P@IRi|xOeBJW- zGUDr2`YSjq5v#^u)kan&%43E`s#RaU1y^4qHIj&Wr$jdBN+4#(=|Mh}bn*X8gpN z`U55h!7mI5I?NdNv(kBw$Z?#4p{cMXiKGa<8HTwdS53#xfQr4*1X&Dl4IKo`jIF$Y z?z%BJ!eB9!?pafW#tRJGkuC0ZOPAw^*2%ZZ#wH%=w*>IOgs@SuzHwv`B!#n& z-}ifOE7+$k$lA4+mzI`Vt;|{g29?m5mPml$_oh^spsZ@nUCGlAgS9fsRZ$nU6J^7Y zryMa#9P^T>)W!)$@RlObf(jK3(-;ZCVZnKOK?qt<-Z4;4STs2f+B_Y>>#c!m#V0B% z)h!wX0@EP&Y2e8=Xve+bv3^L@XW^dQ>Tq6|GXfJ?6&+i$UfBmBrX$)j^i5ejNK>|0 z1w1qe+@S(3st?Gy{wiX}#ePt(Yji1~xhPXzLfO587;zGQpQKx$lnEF0hQ3l|&ke>n zyG1EiGvJFyI#wB?E@)kxTvTZ3#7EPY-$2 zC^RGVbO$Fy>T?E5LiX33(N@%x2wRIWC5T<`jPy{-R_mCBb!Ug7(>CiBb+%T0o7>>! zw;U4I`veN0=9f`$G^)C?gtD`(VjfwAiIPoTtc|!K@OhlCkW>=bPOC+#)NteH>&$yx z0+CezXN(|vU~#Mp@GtwCxMFI)?X904>zny9jt1;N zW~t4TQ54M$)eJwhXHJmfSjiHEOPdw`3lFA>qofpnPN2*@v-NGJhS(w(YK?#sG%R6XE>MPqn9btQg280tj0DUx8N%nJU$3w|rbd=l>7t#O*2`++Lye75Slk9dF^L2daO?pkZI2ws%Q z$yE@~#2}Qcz#-C|r=x&yCBptTSp^0QjP(SYLHd zj8JFc>c|!f?ep(R5s08UA-;F%?4iPbolB?G=13Y)3`A^}OuXdb4V>AiONO!=`EorA zBI+u?4gMOXi?Ae|k*ENr9wxEPP6D&)SrS6U@WNne{s-Yz4GST>_0txDVgsDJ8rlFo zEdbpE8_4^dYNT(Ar|^=Jl*rXIEf@_Z&e44Bf+f3d_f4HmOgS&)Z~!ieNGz-+G{V>G z_82-e4g^FF>H{sf_)prnp>pQTck%pzs%X+Qxz@GF<5h$BHNLTJvD~&e5E7HyLF0YMU-GEgPg`8%}q?!xB-cC{!qu zl*C+x8T5W?+t|V@R!Jw3A7((s>wBV>rl6P!10j;L3(5-wbXqmrL=!sDwy#+#g2&m8 z^665`{zU>HHN>xc3*gZNl{DjQMlDR3N>rBZQ*5(#R0#J-nu|Yy@oCEN*oqK?$dVf! z;e>yzHN!cVnTjz_C`Q1tYi11DD|3}32WIl%d&szG#k2tadD_(xf`z$#d7oFx#}f0n zzLTfz)e)E-C`sI#*?T=rQiQcl$vwhVg$Xe+{lx_BSkCaT6y3IiO)QcBV(BWZMKGC| z7oE)uuTZ2y7d+bJ4{~#R@8I&p!snQG3b3^;cdovF=pe@ra;Puwjgdxu0U3by#>+^g z-iJcao_~PUKVRUNQ*I=$A_GEu;~nm@XR?Oiiba|u%m%64dHdcPgC(#N!q27oWIT%G zel*e!7Jx&u9;P(QF%gy%v6^L)G@8aFkQxAD1BJkQ#WN|p8HFV_Z)X>D^n`ChR|d%p zTd)keGh)=L+(M2EJD~Y;gY+QEJ(?hco1OE)C$l|rA>-vH$x3s!ZgW=qv!e3K3WoJc zu^Al!m4U!#X9s$y6L(keNkaNPvk4CFIo7QFKla`RO0MHN6Kn9tq99S?*%fSQC9faH zL(PCh&p$}~V;VCJVCebd^Z+D?0Y^R4Z)Te8=^phDfZ+UxM2qqtGadT)~#E&Zr!@2HC|~8$bb=nC|GAz>W+|qO@cOkXenzT2UH+io7l& zR{YH>s+e7md-}=dJWx;L zYWUK~*iH~I85!O+*@>qMf()P~c1XRz6z`&CZeYgPYi;86BOz+s=GD|7^NG2tIj6JX zFsv!SN_IWj1v8WR;!IfT)S#2-&SH@%E=6!Hb4b*U?}R3s6UX|(5*5T6LR#H^5R%U{A$6tpj`v4RVi72B9NI5OL zfHLYawiW(J)?$E67fiO~Un&V^&QPE@h3VeV4?-vgpv~??+eMidS4Tp>zwK9RWn>i$r0Rgs>hZ8XFAncA$0XZKxc>8E`?&c$69o^|uUP)oB4eEL2^} z0?Ro?qXa>$+aLB$Lh0#{OA{bOc-U6@gluTPd!by1-aw2OoaC)lixrJ=$c9!AA<=2Q z<_0q}U}}>Ebuj#)5!fM#l(8f5SP!!8$I1U;MDU>zBuE5o9ce})9tov1Um1ymEKt1- z>*Io-a#h7j3ZVp#HCLmE;gZNBvblMtWReDJF;dX!K}lN{p){!zJafelo+~dt4cO{G zJPHhl2rNLwNHhS6Akp9V%o9QEU|x0O+;>C8ARMw%#9j(gg~lXFIf$7o2+kjnIpJ!X z&KKT@-ln~tV|;TlDe69I-$~Iu@xePmKZqYNd8k;3%L4B> zqedw?=2jF$wQcjfExyuj%@#pfm3XmF1zueiRkhJa^R@AQwN?y~c^M0aBr1=XD})Id z3(zerX^QKx&JEP+>kO~+3}b&7Izim%e6;s~H>_wq2!C%C6&l4V98ss!dRLn~M^}(7 zJDH`fHc#Wej#_s~O>zrceJRaF zX)pmxw{@XY?Sc0YmLBkKuB~|qA@H~k*2X?^CS0-`TW|pNmp4RpyS_Yy)dK{jlbe$)WV5|~_$v5IrMitFc79adI=i?yKe$vtM5~Kq z2QMv^mP-02>ZGBCVMuWi++?NL(43)>blF8G!x?r8c&wKal=iy#@b8yfBYV)-VZ))M z4D|JguMq8om69AqLC9CQuBs^7B^e2A@Z_KXu7R+|Fwn!goA78q`fcyu1UaAtLA0k5 zN1Mg?h+}*6`5KebziB!btbJ!3CY`U&T_ff#uDz1R5{(_dQ)HuV5C(v)DB5 zYG*QFmE#<`N>69u?tT)blD6?=NGRhlMmggxN|8zN83liVDt2=;R;5&bFY3(L z+(Bp?WqRwRGaHg)?YUB`;a*P>19oYpH0zmM6a6Tx>>boK)uUX+YVhHpYd6vtaq)6u zPZ6K!6v`O~^91j0#GGr?3|u3|pY}>a35dx4RXCq3$soT&iEFKg^fdRDszK@kxSM$E zmugg8UkeQ8Ac<~RkYu%9jR4bWqNY(^CwAw}SBPT$=V(AOb==Hlmdve2)3fIY>Kma{ z`u@Vgne_7lB!b%M0*vgJ(0#ONfaB)2?G8pr@Y?SIa;4$cwtrFS0u(*)V%`DH(El!=juzWf}`H zs-UpcjW=C}1Nve20a^Dkrbd&s3q9r+=FTkS3vH@FWFktdko2L@XgV~B^mh`Jl8-%^=w9TU-59&))j~J#D)f7!|x8;x&<7=)e3(aD)#k+j5 zDpBY5sJxo3Hr+GO#du2zs1x3j(QdX@dBtvI?h*+vdedjYgnoKdfoL?S4&VwPV`*4} znP`Lhkg9`9l9(h8cv}@<35^QK;@+U5zKz?H>#X(VE%ek18zy35Y-o(TAMLKn=8goO zt=Bwu5-vycz1;j1F4{pA>e3M^9&o+F#bETv0LD}V&q#tXGbP*vE`(Gjzui>eX~5GgnkzC$yaTIcvsy7@IJV8WvAcCx;O$I8dXx2njuX z9_}>8+DPAiY_$tAU|^}rt9&+FXdFyl>cSrK1P*Y*(kfS?L#3}aYEbRTQWjNu*otKQ zMt6;0#PX)L%6vpRkS3|YDm3fZdxjwB^N{$`H@Zs{Z;;Xnx3N2nBUa^()%BR5GZ>)3 z4fU{Mwe1M3T~`pHjpkkkesOWsteYS|78~*r7?+S*x~aCO{DMP8VClxyjrE zZef5Bv*z0Ab2@Q;`VuQzJ-(E%f;nsPq*nz!h?sBUN8&iKDZxptF!#DN-*fSvC zUUf;j5WJnaTI7^6?lvxRTfC1Ub+($>JT0PPMy3^6w!Pp-qq-W|Wb??xbHe9p3k|po z3##T}l@V+k+jIf{%1TJ*wAZpkMy$)R?R#<_LeW$Vp=1Ytc!1u^5#%TIW^=82#FKy` z3ULwA;aE)&e!+aEHq$8P(MpXYB@!4tDu67<4&5Z%vq&va0;p7`oSPd}4pwv#o&YLr zAKWZBuLaFlcf)113kDHV`HfiU&55V1=FuQku@)~JR7?zM)wfm?w*y9`qPL^?)(m66e6x5Jaha1mx#Dr9tnkj1&vul5Mxc_D*5xX>!7hR_P#o7M>1CNdyp)52o0 zwgr!3jSJDSS{I{SwHBa6@fFgTcbqtSr9xR<lX}XLmc9|M5YInSyP_=Fg4RtcIJ(SAA>=b-9c!02Ek(iJjSCeD#GK@*~~jvBdfrGY323KtlFrns3M?8UI=I0*hIA=x*I z(lSp6jOn7*M#z{Y6{=RZtFD!=o<*z9iVN>)2KLA5wB2$@nqZC|qNAa0EBA}5aKjK& zdr&w;T&c&ZXrPJ*=jU8yJP99#wApH~7J~YL=rHO#+T||si~|~(zJ;v|++CxSuu+0z z%~ZW%DE6U&8XL3Ye+knV4|ipG{8Z_y%zV-th60m?A%R}mhAP$~Z&$0C$SMoV5p1J$ zIaw*R)Jv<&yh$2p!W2D|du;iU#S6=_`?5*8o| z1|lYwZM6ukal$g}8grq80yF{M1p5uO;$AX+IJD&&#$_z^<;)T0u` z&c%%G*~j)*U4nFGmrEOT&|oAIEL2`&7h+19ri1r(@7u6A)p zh}@b5MMuuy?e*ZqL}jOE^1}4w^7PcHh1|l0<@wy=*&cAEUIPTHsaPgV92^(XmwWav z9;QK&)r!qP1yu!3B)#wpQ{xKUx6xG5hGb3LxLk!<(hY(rVZ-2=X2%8qc{N0!7an3K zZ2VTiB@FSApbv4dvT#604~v_V9O^_lfXhCd#*!nSLRAi!%VsYl2SAB70)aGQhQ0;8 zEXNc_-Iof!Qbo*SLme`grN;1K5yIiNm1zhjXnlrVYoQhzz$<&g@;25PBYV1NF`1%8 zn}g;-%}&;hZXvPJSWO^&L(~P3lx@*l-U?FKRCBCf*g`p)&F$g_1!}KB{_^Hlh0d|u zw>7I9O$4AKPHZZ#c;+iJfzrSA*)X|pyElZ1w?(^wp{5mBCy^Ul z$E9>7LD(Z+e)yrGp`qcFm8l{l!v}|k#!!UB?zHx@8mvYqyURGIXyF{WB&<}Uz?|gK z9UUGbvTJ7x)CV4b&xV@%<1+;j3$Kw@1FX~FM<;UBZ*r2(_*z)l_L|p?~>b}4(^grWDuR5ca#hc@au7(lNFp+A|;Qh1w{({TG8Gij;|9-BZ9NbvUD9(MAB! zw4r=O%vSVCuYVf{jjFZ%yk>;WCtZxqo(-`$g}fPO7BMQzTnDb)q?=nfrvc4CtH3k- zG`oU**#En)A%C#-Ck6NRWwT&{tjz>`rpU=^0*V&Y(hGZc^HFueLAl$09auz((?>80209fzFQbUWtI_Srx^Ozz&0Y`3CiakAM`C}hS2 zT!WcY<4IC0&pt&3{oGcCA`b*O`8L!oLTs>CMs_>RXnnFgiA>NCnpTE$INKlTE)7N_ z(6JF1@D^L6C1xnxM@O6IBEZBDGgQasR|qu83}XsVg{PA$U3 z9Z1>avalqTSCw`XMJk+0gmTh8F|#Ppq0}}o(a0!F&Pv=fKvv7*szikt6F$AvV~2kY8r2#J`c`-IuhcbI?5 zZO8{+BwOn(L*!FU)keh>eW`gbkn;_jR_tC2rmD+qLdgS?#aJ*CK!sEbK&cYKNbS%w zWK6Ka1dLv;u2xzle`*cE)f&9Xg>GNe88uM;T*l2F;WLaUUC5Kn7+PU>kciOJ9H`1( zYfE-;AQqp*t}-|HQ9sTu!p3sILo7Ubsy3v#wp~^0^v03C0S+x(5IV5851u*|+|O6= zWQPYEQy8bn7#`D>_yHA!Q@|Z6Y>!nIKM7Rj-P$PD#c=>9>Vr&2_wo*ve&rErdO#EN z=w9s`F?j!8cy2F315>At@d<&@^boNCrUeBZIhd(`b-y=@Fq>Yku_e29vEmG)Oj4XhHWu$M!t-Do21NcA3&MGy?d#0H{bwfIcDTEA3?AT-Y@N+pfkrbSPR|3g*Y~Hs|bQ$^yUi- z*&*#Rp?DQgiA=%w!>+{{{niRY9Sx%Evaq)e;*CSFu+$XmrN-b2?)e&2Vb=%gbh-tk z2L&_^2alJ^U-R`ctaB0Re2q=ajD@6-pFMB&47-2g72d1P(V5l)6=O#RsOow_d)? z4ry(16!NKvAx)wNF@&7hmJKyT*ND)}J6DB^W4%$VOoXG-fEfp?z!v45F0Pb;;yerw zl*@JR*qWq_H?}v|YSnEHMv+#gKst#vsQs_3nlZzXv%#_)uw(Kg2xtgD9c;o(`_=X4 zMq|EFAHz(h_TV^P@N#nEV#vUlfT zBI(ST;+9=s6pYCM@kRR~%&_R#5Sq&DL{7#uIWI(&+g(_pqCdY;XE4eT$7A+{qQ7dl zm3sjet`fNMKmhIWQxAtRK5ZH>)M& z3~WIVNZ6XFGN!6F-LC3x5BRhmn#|t?u-ogq0i6PG2mDw!@G`Q%HC?batP=qzlQoHW zzc&s|rnspX9kxjd3bLX=r%0x*KymAB7PnOAK^I_Ax0f&p1}I6dhS1y&Bm0@9jINLh zB%zv@^Vkdx#b<6|u$@6%OACTgu2o&(21ONxq@sQu&rrR^tfSPLl6XyG zWI|cs{8FUYhE!F&c);_a*KkVa>wb>`5~>o|4q1`K{L-@n<}>J*xN)>xYc(L+SrdWE z#Hk=chzlqKQFo&9f{;hhPE=M86Nax5ak5Jr%C`9p0lG2pY#3vSyklQ=Ua34W=y@(fx#z0eY3H2T%VYL4XJQdaO5O7!hZ>l*>rM zYr4Gqj8HVAIioKS>6+mb&dhJUlwTc!SSvIW^RxjU%WLs1Ye?i>K4=5a86Pq59g0E) zN_a)v7R%zI8_IRUQUci?PXPd|U#VDOb*?&D?rJjiOFu@eh$@qsmUx{H%3ivtiz=In zDa%hyoQ{Q1b+m0*yVx+|xSOY)I4Nb#)?C>isg-p^(TaCVnmQsttxihhr!)Y&F;*HF z@uozZ+7@YfkXj6n*|I7khJ)q8&6LCe&^IZJ2Lk{H^s>8-{b1_)eM?JyiYC$Nxr3;t zKb_rtr}zzu>HwPTD>l3(eUQ?`d=It>bjG%#UDO~wd~c3;$7;gN%69wpgo#VPIfn(5 z)?KAXbf*E$ESk5SsUcXIyfssUS{G>y<-;1r{GB+I`QQf7ZBsNpa9K}>!OO=kx{4?8 zKq1~v#v6sby>#!?)kX1VYSYiX&|tBwgeZfqgYQPca4;oi9C{}10(Fp!rYvG}<2*vB zaY#25}Xo^2uy4ZpL#i>cFG=`s!RQSE+8m> zN93=yd^Tjn{2ES}oOTs0!nrvHB-RlLGp54C?otkFs%S2axZ2mso23FO>5SdP3bv?9 z+kwRm7RZ1E(Xkq7XA+7xZ)%M}j}Y8qn#7Ta2IoY-kBK9AUEHencBWQ*Sa%rGc6)^o zspsRNI0d51B1PBx(feDK;woppVil)3xO}*o3!vStf5PQYn>jUka>F9ch!r!jC9Qhz z)svq)Op*mKS0T}^3CC?B^F{jIXw6C;b_GFOxV!7*G)mW->StFD!1l>kpb;gmb;GW{ zaqY@5!kE}rZC=)x1PI-bRs_aL(u!`Jd8ntf?PPNX+X!-gnyK#l)8tK`CWTevf^!iu zp&K;Xci4ELSGF2GpV@S_Kt~Xo?b0@up5- z_LF!unBrj?f_v2JQ#3<2VQmUGt>`b^kTkuEtu~)b0W;zPn)q>gXk#!5(vbi#Dmw&l zTO2hjr)#F}(X}*Tv z*^ZoH%%hPFgpTxqT$<3f*+?Nc7A7UT#MA7On3r6W_@Ev0XctN;BYSf2E1>hV-ZKOB zuq%g6J>eYq3t$JZsRs=Rb5gg{aL;&J7AZF-lA4;*;2xn`yOx=?E14eKqGn%`As(nM z2D`Z(J6EgT?M$yB6z-PF9wWtl8#BJ)G0|o^8C`KR-?9OXGh}MZTunI2J`cBfZuAQc zd6<|R!J#cz>y>dyajt5Br6o$Tglh$GVjUJi-O49xh$Q6OB1=yPC9ssiU$H32ERM5l zaF%G(b6kp2VtnB>#&qg}&2L>CRWm4Zq{i4thn8 zWq0gyA*}q2Fi_R@AOc>LPGcv?lyLP|Ev{7-ZW)1M3J10jFFodzf0RnX@=>zHS>QBk zQ&bh-1HCUou-+9c4wS2dq8bJbjw<2?%2FFbo9&J6M0RPdN$uNfJo#tOe4v57T zGc@4mF45lD5KkcuL60&1iX-7t5G}+-nEvL9IJ&?~Oy(xV1f?2UN`*um6!nV3%ahVsMQE+iDR_3wE$R!vM#E@?y zyn-|peGg;c0T14j`H96joNp}T=W`1=e3k3SP?NGCb0Fj z17mPtS4Z4jNj#LpS&#&hBh`p2r`w=XD4Qm(0ZTB@vO4pMbD4Q!e?|?g=1Dv?niBr9 z##+F7w$iWn(E-?{sL5q$+K!YQ!n-D)%kGKPYEPj~?Hh83mLMqeri3U4m#M)O;WrMi z7!sgZVEMr*G3wuv5XeyWhtm|A$=WgpuCnQ6{SRP%ivS@YFqMq>wxxrjkOs?bgn>25 zB$-vn1Mr#5R?1JA)f!tE!6m6dQBl;cax{T5&%zv*OcO`P7grNeXE^-UHcg3A zV93J?JWy-m3n=X_Yv>|v<=K;Gr1N`vB}!Vc2j^UQFaqZyo(Bc{RVQ0Ca2*sgcSVWN=Uxw zDd>n`S;GDC^|Hit>G3Yfn9q$V-;3MrbvqA`SEeBj`DWnt;?5I%wD}u_{uL9+YPvEFI;Qda=IUCyN5OOm9N> zH(v6XJH%HUp0nAlN(&b>t8D5!{M-6A{bo_;R*%$PaR>kl!lJi|px@vlR*XyeirJ@! zvWK&m9@uYI5Z=l**2myZIDMm`>dcMk?ivt14=eOhY}OFaIv|1F_8v{_;9-P5ML793 zvyedO>&{dP!*L$r$rX$VF=`k@Fg#!lHYayDn)D)HnNctwqY|(o{OM)cJ%9x`?PCpE zh%tgl4{aP{Co6wNLoU>WMN6qB>lB>sYa$jrYlm*hbN(72tiObF1?Nh<2J{RZ$5x$J zuQeLzr(zRNH|6*c+^tvOn$z5VQ&fxck3+Uy@i^?DICW%bXu)m6&rkW=Fe{WeVB1tH z7B80-%1wVWUM7i4qC6xyEUZv1Tpyan^+An@>X-;e)_sao#gPHe5s)=ogthc+)HdN5 zu}(qNrbVfQ#aRtTLaC6MXmHabCf3JfgJP47!MVX?!J(rb+#pu-N+5e0+5zk#SVyCr zQ*XSSbZE@Td)!8AL_mI*Aak*G2gT=Asg7aH#IE7&tZxZ(CQMm;J7aH<>Pu1(Y zfLC^ACObI^4chtz&78XsNcIH9!Ra1m?`fknL_lesCMpvmISl<1GN~|ZQ$$$X`P#Lpjw@5%q8`eLROoBK9Tj^RdZRL!Z<6UAOATj4wkG^# zwWmi9saP|Djz}E5t`s!7R?$O%fDLk#(K%!s^kX{5a-YW>&7=e2gf6D2!BrBNa1c{= zzY<$w4>xz&KyIm1-%#X?@N%_}HbR6uM*&HqO{Vu)yyw1qO=f&0Xt&C(4caQya$Dzd z$7DOP*|xc;*X zCQGA*OD7t)Za7#9f-CJJtfBEj`~dFlUh$zvh@ZF6f1ZX(a@m2HmoaqAbR7sZx>Mj{ z5ofLlvROR>SQ3j)gXXYo;O=)i6mX%ZYsU5^t^nd#g;uO%9gER!6!$LnAKV1dLF-_? zF%?G4xIIi`A5knSwqio-`Rql z;!+klZN-C~PcXqcPNotBdxar@aU*0S-rwd$13C)?2K-^FV(-Ic2-qRwqaV9~qktiHB5{^;oRdp*q{10&oxgMoG*)b(i^@UIvb#fh6d|ez2BeVKR zS|10QoN=DRl3cBng9iGk^s)5_zgx%n|S?U(1BEdtX*S7B#blM(@V94lPOscn_gN}9e}ZsMv@~kU-7~cIIqC(Q}&8*g`%>@ zt5h2NmZ$~*+ENeBDIgRr#TZsfPzg}To|9F!loH1n?z@sDy3u90%zV0(*!_|?x(qg| z9+*e8yv-W?#yB?{e2w^)^8lhoZo=^gcDuK1@aT=Pq}`l=3Xa%H$2E&+mbqR`J8WW- z2^&b0Krk6ayLzcdVTEy(PWxIZR}=T6-jWuevZBn^YypmHKgFBsY)&=k4;+uZqgG)N|kT+(d3VH$Oj_Tg=_J z6vkJRj91{k3k4@-531(VovCqah#*yY{kSC*a_vf$-q5sWfgXZNtV^F!5xa@pa|lNV zJa^f(RKspf(^!+&kJ)-~V_o!1t@xyF9s%sKb(dFfQNN)gh>bP)asT#b6mQDxi0f71Om^8>5DgzZ zcyI)_19<%pdT>5K+?=!vSbG4zMU9XuBFKyWAcH9?K{+Lg{g_r~g&A;q6QTsySvJZ~ z$IXWB#9(Vj#>$XVJK{X2T87Fz)+ViD6O@dRhtc*e^}xa~Q$CfNxj4a58p{rJ)Z801 z#jmzDq3>Mm;i?#mmmco#_3WkZZ2`R~ zUlK%^SGAzbm8F=#R&dJOdsNL6GN&L^;ZFOYa~q8Tlgce8)QB-ZU{%@L;>NdQRZ=Q2EuK+xg);1@r=k(V@X**u z%^U0qIsa47Hd<>4SJAcc!G3t+0@PJ{=fr&rH{GgLE7#WM3?~n$!EVV)1E$BV;yz+l zpbICo`Vctj`1JuEPs7a;+)XWdbM?#(wHo=%a? zRjw4bp^)pE)SOakZHh&k!#u1yCDO2H@l4%Yh%?NE$~jL~7eFjWNS5f1dF#z(D5 z{WQtkZ1$Q|*GbCGfbhNt zh69mEVr!Jmrx>5TmaDIn z0T4zr0Ze8pDmkXL3>oS0J_sC*IqHMZ+h)Ij4nuS)HsVwJD8qAX8_Esh4;10QOc~hc z!SO?FQ^+jAJECN#1ct%zq>gK^+O>OwnSI(4Dxgz@e-vj({f83{yJ=`u7mAjPlf- zUc1>Y3z*CDX^j#D!W>)W;x8ZQMcPweHn_te8Bh_yv`N_hP(Pn!ZFTNJ)(!b z^$k=j@j$yPDwW>2p3<(V_8pi4Cz6!N`&ZS5KlfU*x30G^YN4wkW)Rp_qoB?f8JVf% zaI{|raCyVP`T+J@60zof6?D8odglzPtt|Q8Fh3UYfIluJSmYxTIC;`DsNDpwB}b%( zA}Lt0z`c-1@j1_F=Of-ff>`A|d5Tjryu|`@BwB>UE4FRp4mIDG`ep{hXR5i|=N*z%R9Kh0)GIN##xqY7?WJAe{R{9TxU=NjOnh~w+n zqZJu6rRND0d{)Xm%VN*gSD#&&K&W$;>kU;7nLDliGe5Axk`(5pK-WraqY|v5yLhX%iE2`HcW>e zS3|W+0|WlGl;MWDmKc4@!}B!S!=!Jve3Wzc_NMZ2K<|?al&1wEkMJ6H zw1w8xS{0}5z!?qdnIKc6wY9}lx)p!DxXLGT3>!98?*7mXh8NQDRy|Xb;wo?g_Ku*U z8g&^{Ky1|9RN|`R`Eg@(NLOvS=)znDIp&X>$S^f=14x_F&9;ud$sMO)^3TbZ!-~Brzz|MQj|* zx>}mbaG@hs!@S9kj^uQr(JN;RVph2Zw zHABcWZ)xjQe|?WM9zC!2S8sL4t6EKGeYg7k7PdX?_V0ev(d!uP%~s=9_qwX}yWQ)z zu5fA^b?Ue}tDk$1OB(uYSW>{AoBQo!HphO2)6?zY?NZzXcRE8VTCzNNFd>Fit7 z>V&?&#f`Rm8gWt~YT&Kr?urIVnKnw?BrPuFaU5-jYKMhd%iwTpmAIhWP4#a%3EZCl zZc+d|U{*R=dQ`pTjkmOTQ!%!!A>dj2t?hYJ|E+0wIH#L>zgz9*U2L~}P7j-JS06bK zc`Ijj3L$PQwxeSN37#8M{jPAwSz?-~WHC?p zF#W;c3*TJF1QXN}qMjH{Ckb&B5oh$Mk5d5gM)4N#Hxu70<)_MT9hnLJW@1~euij*2 zrxqq~8&9!X^((S%uDKcZN?1JWtB5O#V_-O$IjA$;%+{#W`Zu{jn#ot{ID#g2ICIEL z_+C{RGdc$R`6f6Xk@()ifePp?`Y_1W*qbJPMCK%KX7Y;4HS7empqe3;X%+DT(+N#i~ z>H-XG7?s~WH*PE!qA>)pl4U)khYn}4PwC642ypGifU11tO$HH53o>Gss`((Zv|tg&y;CgM<4*y24?e2%J+0YK-eiO+`RvBnm__L@*hN zLJ%uA_eCO598`i#5l9X$6Vp?L`HoPSp%aA3@_KmzUO?H?bA>_(DcT~F$zvwZM15@2 zU;ad`5dw<$6`yy)=ydVQQ#jnZ(85vqO+SPbMM>rIbS|$AE~lp#f2=J8JPYxN_Rwj# z^@Zi)ZQ%2;Y@FBD>OO)$cc#N>yYR@ZRV2BsFxZFd6MNBzTYe^&0mgxx=iboi$&|QI-g$bGhj#kX$qHJMwZ^J5WJL z0u{Ki1e4v0oRp+0VNY*5H61dg+KQjW;pPV&AWZiP>bR&kRb8#Y%TpadEJz$EoI}Ju zyOHj>b;u{GQk`2am7S?-9W{dzYQqn>w?vYD<0Z{ z>e|4#Hk3>&=Ieyj8jfGr8$4ZR^Mg(`B)1?Wj3-Dobe$t&a%+gMR`brtx!H<0-&(1l z9}T~v3vIO80FAZr3}&bPY!7Vs2`nS& zroosZyRe7><7h@X7fk1|q@ctHc@#>w!9AZlJ>zzv2vztKHkCV)hb*RXo#~S}o=Qcm z&2VBZ%AXFE;<9kQkTf`jyEG&{pO~Q;C3`!7F`AQI+X3v{0SZG`TzABy;Fc`n)9f)#su_hNU$2s6s z@Jv*4h(iYHG+?Q!bQWS^dBAoCRrstOYpxfv=}(Un(I!fM7T7rVxiGlP-9-m zj%1Z;?LdLvJ;K9bRJxaX3gt~)zOz>LO9+Uf1&P(6F?O{9XQ|t928yC-SD!b+Z+3>PGNcAP+LjojAu(qCD-0^eAb<=0WrQBs1yM`|S!+!aCya!dftAsmmas^j zOppNV1cLLrBMFoau$Sk%CP#Mq)T}f4O&71=rgDsgQ-1v^+?ulO&5D&5%Yy0Ril`ij zg;XyWVVX(Hieqi5KNeDdu8!45wOBD-Fjq+?e=?y=71?tWF|udPL$4nZedKlkMp|9- zCW_$wTD=NmKw-;Y#W+~C#cFa*I3Ur)5oai7v5Iivnt7J8D-x!7tk1EI3$(M8v-=7n z$Bj_R4IGT3B@aYvtdv*O4+D}i4%s_td?8q8ncEHQgB`(w@Cb9ur~{UO(}}4lH-Q^( zML%*R?*wA}!11|Gb3kpij3WdMZ?TRm%3z-X6LR~c*a(89brb-aP9CMbC;YQVKR3o7FBr8 zPVBOqX0fnh_xW|ONhM{kp_bisoKs7>ew12v)0MGW()289*P^idQtu5gNvz(KJcD{~h;5vDQ*#mOy&*<& z>P^j8h1`wtRbhiRmYiI)+-*$}h%!`qLri5?nwq1e(i`BYXr(FH36scb&O~ZS$qc)fDv?^!^*;EGLqDqR zcG4kj21_S2WbnS(D$@14RI!_Ww_8Du>8{10irq;AyNYx@jw*IH_U$UVclS_=o|b)2 zF1|dy94%Hl(`IrqVV$Vf9^gi~&PpQ6aBpDJ3dUfTQjRtgv+7K!3gT-iUKpLSg3cDL ziTuRWbW$UHrmOv%*pfHc8|`k53*ftLNDV&~{_#mUCH$@kVG`!WF^Ll&9wvrgY(b+9dqNE))E%|o0pEfZ+ zCkQ&*RpN{Rv)z+0=_w15g_*rumC$6~$7-4}Nxy}iRYWep_COiFGG-%s z8iBK`Pj@6&sl2wvNIX$OnbcGU>B%`qRv{r>YiiAg|6xaVOsd3m01A`yQN$;alB#Iw za(Sz?Ch_#eC5o=$JvuQJfc!+l@XVK5>Owadz&NOI=n#f+GXT0V20_Lq#4aGC^I(kE z^5OvGsIhtUInDu`<{6Ik$N^FuxkN}^aPr{^BSGvfQ?*KyOWd5%1bN!UUYSQ^>qf(| zee1;Cj?H}1P|qXE@fLRXVwl->)Hvzu6#?c<2l;vhHyF6Ez#5&WgZ#Nk#Qj~bmmT4l zKj-nm89cDZy}P3s$L?HWOIr+9g}7GGqv~BcDh)0cKMi+P&8Kc={jQaVm7)OUw{OUViTN&O9DXOpV}<0JHnq^x{~aY+YuM> z`SNt(^f_m<5lQH~3a(7x28|Xx7E*11OfN*mXd)P|Uv^uKG+Xcy2#C9Oop<<7FS;nA zy*wYry**J9(qMV!w5-@1)}j*}$>&Yl$7f8lUGKnvl^qJjz&q^9qMSu zemYZD-enF{ood?L8N~F+yyF{phDqrPSJd^~me3w8tzGrbFg+!NR^_V0{AVgmOH~|x z`&*S7Pgq(g=)_b25}h;IEgd{F5#_0}-I=J6qp^9h6I5h&p~gf7QH|McIsrxIu0Yod zbGdm4v(XiYhD=WoKFHU}z;qV3IU=;x0`3y4JH4VG!M~xp-h#mMRHjtDbasB$aez6C z6)CP3S@qzhwTTn6oSBqwrR>7PJ_GL?9J#4m=*B2Ib!sNNRbFu%)RBrXhgbai`~*D9 zajSc=Qhr*zGX%7F_8V>5f*zM7QxoT+L`6cX=1x6)#wl1W$>lMSt=_})`7_>`dabpU z4i+bunc{kR)luhVdQlHj0V>ac29CFsO7pO;s+MpOQ*b5(0M&VgbgSekL>pXj1g=U; zh1nEzJ;$R@l9GH8tPYE_1L0(I6Z2Cp^^xu|J*G{iGy@QwIirk=b*oXMdFiZysb%^o^XCty>s-9IGlpB&YLPEt@C2#9xgU8a^pf$r6;r?-u{OR zbFtPctJCb65533>Irv&>ORgvQjSi`lPot*5lj*5^q)4 zqumE7gtSzBhpf0Wel1p>iKzfgCk?>q7S?D@R}!2@WKGU*(WO>wNNI?U98CtvVQnj{ z3BVHZD=zwv1vEaO*YyUi>u`~BeuJFhBHcXndN(YcV2jtVI3SF28+GbMHL zHQzZmh=jC-XHVy%L?9s_sMfN=o>}G1%t*Vg5hu>RIL}mT;O)TEsR;d)7TvR2+rnj_ zYu0ICm+Xnn=6bKcT0y{A^I$fN`wnG0;$O%vv<0&O7ws)v z=R;TY7`MeSTAX$v72$Y))m!v&<^gIJfT*QF99RP9v?@4AE`M5ms*SGOX@tx|nQ~y&fCMb4?fWkQBSt`Q!60eZw1pSG1IBN18?OtXB#f^3 zj-_W7rjC_#1a8BQxL=i)+l~vz1XKi?qYQ$%+d=EX+w(lB5L=VL&p8W|@*4V0@9FE~ zxSFF8MxmpmpLOLV64KFX(bW}4Yaa?DLnib2)EOW^U5+W}ZL*|;S%Qv-DLu}%OxFK-Nn z&ScjKpgq^M$8aplx19ivStM)+Fs7`v2PokAo-w8wegnmM&xbYzb)C|0k zpzp@@&jbJ}TnIL)5|F6)S6j}~cwW-fO+)ZXsg%+MlVZ>nM8qmQ z;;bsdbknjs}~*9ok~k69dFN8qtz@|oCfK{Q~vQem)gRzg(99E=y>>2nr$I!l1cxcutO zY70qAGs`aIz>8|Iu|ck&IdfwtX!hKg04>Scb-^!Iuy({4c&cH@-#OMu955_EGme+R z0_-3&^dnsNvk2S9g+Q8_WT7zOnhzGrtF;YtE?&7qN7l=oSahMavhDB(Qc_`3$UPPd zOjRgeH6+qPF-1@+6k?FqC>lC39VQcb$M{r0iYMoO=%r}Kg|Ubcmm3AYT4I<^2Nj)~ z4wo}i*;DbY_`;c~HYX`gbzj(`u)uU=d>5FV$Dx856L1}2M#WtM`O2FZ-Eo)-8=Fx_C{;d!XwB`}EwbJ$rTxnS@-6_~>gr5tPyAMOk$X_h4~IP;LBm&g08wO*`G zEX;thVy6CrewF|;YU)oQ)}!tiz^Mz|artPu#H&Qj{zre|(dqqf)`4ho!l?rZg9!PY zhO-voxaGLINRqLLrk1>ma|@50%aeN1?o{dCWt={JAl|^P1}?^!aR4Hg41&qjca0(T zGkCvhc5%+x1=bI+D^=gb4V-J(6QZbPY zI_lw%jyjHHNC=@=uAPQl{fG*TSWF|?(P7)b7aR3}lN~;M_|VWpBhHGvYYi-x9eN1y zhwU2T65!EdbG5dapipd!aa`!B^0?&gvNU+K(JF5_J4h-mRmVTNc-qxNCu`oL8(0^R zkx$=`y|D|mmiH*bj4jq2GkfKu7c%se_L3c`{8ll=>#OCYS81*_v2bDQ%!NsN4CU?6Xo&p zCR`K1Opaw)r6Jy(`KRy7{L0&Z=iXQLO#jZkiyOFQ5Y9B~ zI5y_3;-)2B3V>6+b?C0NMdH4UO{gmaci+9YSA+gfKYQSJj{d@_Pnh?}pZp)6ID+3J zfAXnMWaaa-pExX^zx#=k`20Ze@Fx!8^XM;3eBv%i|GdusCH?vP@(KIH24R{O%;z(i z={mHGik49Zrk&YJ#Wus_9Ep6RqCO?iO+lR_V{~TeZMV}xsyNfGM||b;RlFz z^5-(3-}sM9MwVk?`3ydonE6;wCNs}3;{g2w{NlXuaBC0J?#*OA;5@Q_9>Vi+JHg9j zzHI+?z7N3hyNR@SpqYXf+se+iUS1~ip@Dh{d)t}Jzhpin2u~ss~iI%*V(y zLwJKWnfKyty~Z<{R|o2i`YO_-tw_k+h4#otiIQ>HFD_^^3<2oSh z>>Ib$u0{_}kN&4uktphI{-PYS z=Rfn#mk;5`;U7MLzpaPnclN!C{MYhdzjoKPx4$s+`uro;|4X**!fV(3>(}zHOYYG> z)cN0r{2PJ`o6!1!oqa!tU%G`a5%BfD0%EVdGV^#QvvwHG0mgTXzWTM9myY4d8GX6aAfiTi$r)$(@~j6?|T}@bXW93NQZ@{_O1g0#dHs-Ng47 z?%LV+Q}Sy|e!cXI{E>P2Dt=u*e_JMV{gXiX`Qz^a#7yg*8~@~oSpJj9bm98CJh_K; zwcgH({xOqBUw!TRGkEgVfAAl6cCPK5yY}@T|9U@&_VU?bRCo6z|Lz;--yc54zXuQT z@9{DGUHj>MACix|7vd_geUi0KZzDycoI$bkht-Idr5^}e0}~nGh|wKA*^e(N=%!nOQe*U-DGjm_6v_dkF2p4(f!*T&y-+`IF?eqVFn@q794uH!xYc-!&J z_B0;7uRQdTIk--Ann4})-mY+EAsC1{u?^`&X4m!q<^qtq_WyziBE$BK{@!tjomZvllwmsm=&SJ( zU)Z_t70`9(zF!gQD*Sg266m$b-g{oC^xpF#-VeMUHsuX81ufWVefwJe4GsE*{I`SF zy=K><5PQUM$a{8L_b86t_|NYFxi}`T{~0QK{xk0tenGQuCsp=jM*rgc^*@j&??m(O zKF`j;57y7SVm!^^2`ETsBNNcde z&WrhPDmDV4zZozKas?cpzse*XH$ z@c7!pZ{XWc;@c~gp7G3A8^{gn{>S%vlJ%;xW;{BKX znarQ!{d;)-3f`Z@`{Q_j0?+vROO$=R7wY|efQ9$p`d}tg!uucL{ST4OSASn7^BKIq zg!gs4zk~PR28@2ZAH@5A!0)s8d>rp4-am==-$vTI@Xp}%ur;UGm14;& zRnJ-_lZdmjG9d;j7KUz>g$!#|T*J+g$m zH0q6|hL0Ny%+0usC0roUf;qj>Y?aD2Z)9kAXi0|}Vs%|YU;EDyfDTgTo zTcs7j&i^6wrL$h+18S)J{G$Hk@3(Wf{SEa02GWvVe_i?e z@9sH+!zQ>T00(1cU{lFte)aZ(lXCPnRo-*tT%7o?Y)jq%CxMzb_Ne*R>yX8BqjX~W|x`9dz2!y}ma%d5-qszSKg z&G9xMFno}C7=KR%MbzcU?MgV6j*J7u_~V(M{ehFKwN_JMFdD$>R{ijJE|Yl}Wy@8! zC=O0{#GFMxP5NL%lb3&{M_7m#p;EWH0xE@seN$BW;oDE1d@ya-2%3-N^5`HeK;|E0 zx8jTXJN`I`o>{)_lfya`^EwvB*|fzM3g z{KWj>AsGhy_AD1S8|%yd)iTUv{~)uxj4r3=WU;>9$Q;(y45^g zu3*15^MyOq)1ODVGES}F&eqHwx5-yL-pt$?eqZ)8#{dm?VVBpN8{obYCln0J{|99o zev{IE6COu?y$)*~uqr(Xr;_EhQu%Tw^DmHRYZ;|+F$l-{zf!-~)UPLj8*T(G`O90i zG9zzfURN-ei(6aE3^RqXkGkv4<&wYBT3`3;%h(BdDwCPWoFtxTZPOngzmR(j-9_pw zXzKjw?aQqy@O&!saX^IFs8yxGmv38^)DPUgtW!R;2e2bJG)OUC=)J72GOv#*{HvLF zkSdpJPx;GNicQ?d4J)cprdh95*0z=#nar=>CSgKYhhM_=(15V+XYRd2JXtdT)P9Nx zgSfHM4>D!4cPyGFVP?dAhJg1!inMIWrClcR#2x3V`jT}NRu_-!Zq4kw1G2R35zQzrKxaZtN&;^2XSS8ZN;`U#w9IFCrX`BxEwbWZ|+Xj4)No zWd0{BRbz+2$d`{Wux(C4>I1N|{^^{ND6Q}Vq&nl%4)OXGUse|g_;PI8Xs zi}N_=;a=z`-+%qbLjl-z@Vd=xeSCx};vuNPOyx^Gr=bap`!?wt3F$Bug+MGgO#c{u z|NJ=C0Jmo{Ur`lgK0lGk&?aYo_uoE-T<0@|%rgGwGYj}Om6^-T;`bE(p2l~+e*KPr z`yDQv)tf2&p2AjM43irRp4v^UKwQ}*6>=ulVYZXryd~Ik-mv<4df|FonGb& zKATwe*D@`9dQyKe^OQVY$8TarTs%Bge>VV=zkI;kl;=g1@=#9|P(2N4OW?8I6+Br5 zL<2$9uIeL>4`$wBwdK6PZ2+!m!*J#R$__>TvfQD}J5i3bQn*x6PX&Ea1Xh@G(55o* zDdBrnuv8e4e|`|eQR%TnMw~kVnh%*l(tu8e3u=!I%&UL_G3rT}4-Xp+h z7=N)A0N3sTAFvmhOW|SqhQB)DGXOlU3cg1&cLUBm;M7oa3p8t5tzkW3dpv2kX%W^z zLc?fTmy+%1IEgmw0e2Tsv%xy#K*(YleT#U?_BTM|A}|a4=k0g=<2#NO5#?xerLyf^ z-KJf%R-Yhn39Z9=4E3k50Bz*0 zIN^`)f!%rNo}qh(28Rv}ogSJVS{!;}s5Dd^dS>W_p}#lu($Fss{iC5@9(rZy*M~km z^!cGL4t-^4XXvisA05sPj}JdQJU6^Je0lhp;hz|OVff?2zcBnu!@n~8`QhIg{{7)U z9R9zC|7`f1!+$w^`$*5o{Uf6zhevWFGb76*PmXMj{MyKGj(l$9Uyl6#$RCXS$;h9L z{C^|g9Qmt}cZ~kc(f5tsH##&rJGwaf_~?g5*G4O&jnSt^e|+?(Mt^4XuG=zl-@ zOQZi}^i!k1J^HUk|IO&1j9wr8^UTYhyn<_TP@ZH1^4{ z|8?xMV}CgIr(@q4d(Xjp4?b~l_25q&eBt0P9z6Tt%!A7hKKJ0yKKS<@%sli158eIH z{SRGv=-G!p_0U%y`gafghllPwboZh69Xfs}e`x;D`9n*GRt{|(svc?{diu~u4*lGr z|NGEwhatE<%4gV5hprEOedq(j-f(mH>hK3fypi#drI8PfY>YHHQDLTpn*=_;*Ivg? zZf$Js4PO*h4cv8(0Q%dTYqje35*Jul?FL&0jZ25K6i^VO1<6#+%g_la~R;4bgmt4Clg9RV10k2il6`HEz3ehF` zD{I>|(6}3Ns!XoFep$Yy&0a5V?;^iso%Gjezd&o!RU(Dva0C6W3ZNwn6V%*A9XVds zotj{CttP2_s)gA8b-$#3cB@SnQXjjmN{@+M)f6d{xWXMq^in7K^wnCtZpBWlJz>nn_wW z{2~Pd`_t}=2DYw_Mdcx4MB_*!mIU=B=eNa!;Y^^uA*yr(HxX~)K6kbKwfC95TXLbP z@Aa-KR&033y<#0wr+@#^@Zl9W*^`KTDhj*x3=W~#r&gL+1`$6yCCfsVX zCv*WRc+@0@MNH}7Q4}cxtzcmH1Hxk(1m@fpN0fXD&fo{EVmc7 zP``*EO#LzVnpBPc{a&#VaMFJ78BEaA($rwkc)exL?SN9n(fR|PGm&_`HJO$4b7D|lLoh_-^^PA$)lyno z9>Bp-%3#(fA%Rh}i~=czLg*+JnOby7O?$8&wjNrTP3QVmo!~eP2VKSUs~|qj`*K`6 z;E7Ug0ZopVcn%KU7>i#2QZO97UY{rt)q72?(ecX1*!`$oLDryIhCpSE4O-4|TrJX$ zfYQ=lH5lsH2lDGd&HcT8(3#1X${z`LwQB-2qk=hNxG1x zY+t#tT!k)!i2SHp(`>)sXMUl-`^(kleza6SS0#s3ubV`-%rMCkVr#MintGx*K~vWV zI|3nAK~>%fZ{*-X7dDcF=mZ+(Rqd@~3#wkVk+p__I|vj{Bo2eN{BIba^4enj?1>G8 zMlbT78HiY=QueFaq%WJ*;tj&FFMGakzoM{W+U$udFf{oU@TOu3^!jwIx_(}nRHWDU z>Q)U&vyI3N^J^(Ii^?^J>+anZk`$zZ;fBUg4FJk(=>a3@B_E_|beJ1$-86btO{#s~ z@e^L36iMP=dv;Ybph(E%nstMt6T+?#NrWJHK~x6f8%(M*Vl@HrEfj!k(TUMnpP6-A zfr`cFrY_1I-9f=jfI%+Q3kEy-s~vPoSXADgv0bjlbP`T`!8fm$o#59o7h1DNkj7>N zKZMO>@^E2;IRl9Ogk#WByqf|7C%Zs{QBzR(8xvUY%)&BEB%0x`j(CPp6A(=agKbSH z?GDlQc%Zct(W#@qcSS{kwb~cg2K$)_GFRvASV2y!ib;@-WCh()gGB2@lEk~01EC`- zQcjJRb_$;n#|fMjh`bnIY5Cc)Zd2MQkQRM)aWYR=NN(S1Jtxp_y?d$b1fp6|%KP94 zLk-x;Vek^6uZK$mN_w@q*57xmjNOS7_ce|U$`@lu_l{AdU`-~E%y;V6PQ`XgSdq|4 zSEZ}anh1^y*DAU)sL-Y};yP*FUx$|M*R}ME^$7Las%UDmjMv%J9GoaQP(Vw;hMFP* zvDsixg(@~%3&TKT7YcQt=ekTqEOo6xb;1|AlI#f#P-|7F=3ul!D}O<@awA{ma=L{1 znA%tHz$s5*&EksqLSW8ip_UvJ1fSUwicpnCNvbYQ*KqSss1^qNGNFj$sr78neT^Ou zM-_QKakU1wkkux3&cp&%#N|hRX+X}2V;^P($ZvZf@;b6M5x^W?aUQ&MJUX4=6gjkN zwV8AV$L03I>|{GGF5IGO2?3LNzz3ahFk zI;>e{3p56Z(225aU z>hHxi2#kG{4xZ*E0r25gt%)wvPcIH%+CR`o0QdJD^`6rsPU;4Atd2GH!<@Q>I-lqp z5VQvRSSx*n!=|uDDK2m$LUY?{bVE%6U?K*X1HeE!LlV?|aHJ23Y(zrC6I~PW5pZ;z z5?4e-(D#9KFu1A(aFKqQaA!o^8H=RshMe`pLMnzl#Rah+#v&ECz=^LP%?qJM8!>R) z>shKURVQ)v>^4G+Z1S1{j-!)HRk}a)V2B2$2h;MzLfB(tpdPfe;ai2Vda{Z!Y8kB% zs8gT|_7-j;5Yh-?15}0pISgYJJyNbNE4dK%yv-7g17dDPAyP;aC+HHe+6ix%D&4&b zAW4}98JiEpSwi|$bvS0};^qnrSG88d>%Xr7ZnZJOcO|tT?s6+Db^mf%PH7;%6~ha!uHnXCl!bvsjC>)Mp?8uyFwbGWli7K15`lZ;#;LsBSSyD-vr~GZm z`l!I=fV<^Got0{#OYB5Mv>oH787O3ra8rK2_w2KJ$Rxw*6=4x%-|rpshRt}B`B*Ih z5Z0X1p;@ovn;NSy03CsK1q=mqgCbj0wl-QTC}1)VfiFw47YKYF{Gu*7Uf1Y zR?NI>@P9~3?5Z?Z zvsUF~{d+_4X=Sx>fam~ILFH&8ajm>bqBd+xT+sG5LXj8JHMLj_K$GcrCA25B?rauS zZNxR2W?|?^-av-aEX}D%3t=yizczlM1|46tVC-45I|v~wONe3eWVoDU&ne9TENS{T zDvnh@nR)?9&5WQ=sIEp!h{jCFwA~u!GV(2)c$D>971e4oSxV3`0!)cB>=%mu5n!vt zp!WcVlFiRpPBM$T+zVA(gA6t;L*nV>2R2=B300^$IxM3FuoxS9i!#Lq(-?O{LShJ( z0S$;Bo?$#zaB+`_b9_ zSq;`1?e=1>c2``*20fJG3jvIXQy^I<?1*Sjx^T?6&`Gr$+g{j30 z%d>L}Gr8#lP}$I6f(fh2o>1Rcuv}1kE+7lp_JAG=eF0y}Zbiu9U{gR_R)ypl_b6nk zXU3Y@#98yPO3^!&!7?hLpWqOd*iFR-f;xW>cT~iYjqMac)GKI{=M6niq>LR)zpgN#|<2!cz&FayVedms^PTQ;)RHYgf0ys<~6tkt9dEUkQ8kal|!vUl) z1~tV$TAFAT3@RV|NDz6pxdHMJ4k_Gwg$aPDa{jY4H|I)>aPi$Vgf0O9-5yhb8 z*%Rt3W(Fb%WFPRxAbI$!Ap%{mK{ZZc&CU}btt#J=n*sBeIW*3%s07ts~uRl$G*#i=6=Sngy5fE6dl zD`10~iAP8a!;16?g} zTGhrzd5wm3rkmMyZ=W&dDPMrT14zLE8a3A{Ks*l$7bQ>#GhHS(1HW zmz>7$#FF|!Sh9$d&{9(CzX$fpWB~SpZdXR5$daO{;=5K@r6JVv%2?v7hey2!9_THL zTvVGdSbys61h)EOZ~4;2K6%o2Ny+C}GNiIF2M^bvu6S`ih?iEWrm!I@dqdDvHJjwV zOW;0|Ik5tve+)g9$_hwqlqazh%S$iB%B$3{e4N(M2f}r_BwMy7;W7n#jvZ<} z>+_~?wVQLp)ehU$s@qwTT5993*U_5FFg!axvFu#aK-ClRJknN*6 z@5{{=rY5MJktxhph=raKX4*q9+zdHjoc2u8$R%O@_P7WJQh&&M+G&7+S%fKXyng8U zBw25x+1yr|TZGpNNS>%wTAMI;i)A1IUwB{$oUJ zN3o--z5!xlzH3b05)?vnfa+}urUS|#6b?8w)*beT$vNmUX~!mBqDp%Y0c=DWjs)pEiE$St{f$Ce|*;( zl))vC5xa#C?;sy~12=xa(|y^hX^yxJ%I3Z3fXs5)?+Zth{32zC*)SD}r#mjeOSmt4`SN9S2`ul5(22gp%8MA9ynlQ&ni*tr z9goAz$VyUvFOMt;&(%#yTk(R;wXz+Lym;j06~+4%`VW3$ z;vPxWaB~&~WaHRD60VyJTx|9v@p|S@u$I0uFuV#4;i?Gv;|W4smrM`0@n9=c_MNH9 zcaQ~;U`Sfd)dO5mc1p#rORoN<#(A&9 zm#Hqccpu5sHMc93v1*4e%>F9rC*{SACy-?UA+Um$G(Du6>8o<`?MNu5dPar6qgO6< zg{p#`Mhk(BElNfraIaUaO5;lH`^3r$6s|&QCW(R)sB@tVKIICglmG4tjrio4hoR^^ zs@(+PhLYe4PFe)sJZ}-p&}ZWb=JQ4qa699sI7?|Pl+Vsik%f>-UK`wm&xt_XaHuKV z24R5I7>!GEJrI>7p*sOZ15W-W`pYFp3Cc2iX8~!LB=G|jmVY8a48jtvRn(>3!XTD} zD)6+F(*`*yU+AidCizm6Q6j$FSTBQ)FTT&b5JNU?-^rvcCC9y9}fIizu}N=0lHg)MdTPCi@U-3U$Lo>;ft# zucEtrV^dpqn87aD9ZS_UyTvngkkJ(m?m=H;If36Xj1c0Sa;6UiDB9)&Sz0_edbNil zl2oO!cbl@~rK*nr)1DAQj^VG$k?v>-NCCyc9cnG+tN(R64O>uSGvT0uMF^i7w`R^rm$Hz5J^r?Gi325-r>>08ZVe}9bU_}>N0UT!NpLUju=fZ-y%E}>U-b?lZ)_n@&>Wb@pk}@%ZKr4 zi#sr=v@%+Tf&uj`PG572I%g*rDE-ID*;|N8s}0_95}KS@?pYiUQt!^W&$+NJ=@UCH zaXIHlcP807Eig?UZEY^m6z!)lcka8a_t0p`G*MFW$VhP^6#`bYpW=;g%c145)hC#4 zO+86K{7g3o0WS{+xv|;aV>h@<#yl_IUCHg-vQ^CP2Y)+41Qna6B_CLJ|8g6QM5TE4 zr0#mK6yiRAuPq^(Ca3*umjKlmGRq@PJ(~x4g08KF-0ZvLI()bHJ?gl`nbnj(jY_tP)jk=rlb@az%F#f-5)J>v z^8|1a!vI^vPERL@L2{AEo4S_vo9Xcgz#B_R2!*@8iG{z>4On%%>}wg9KtIx_L6>}_ z&U?ak`qvz0`hj>6X_!vg1Uepv_qsl&lNJ*sNLtDsmf$)3Le-}DMMe(#hH3A)oO=>v zv@*FXFe`GL=7b3#>-S&Dad-+ikAr}?+##B6<3+Qf(qpUV$#e&*cT+3GiOu7IA{EDT zcXT_G+5N)_Zz|if!h5pcN~g8WPinf??-#(?XCB2VlRP^ZH%*rTorMG7_+}xzisRKD zkCe-#`)^em#IAm~^iGe*OtJA3pd8b|H(L*$a4q{41~RTb@|-BSvP=}#x<8O!-6;2l zh=nF8Jb`U86M?n#M4ehFi;|LdSxP13G+Z{RIV2=rxwpHP7Um_wD9q1C&k6||MP*nr z0p>Vphqq^7n7Jig5huce%8r4Y|AfW4%pz+Y2g7a~qk3n12l+sH<}G_#5)xMmof+FCwyeu-JFo*?R0NdMNh2t;CEnAn64 z!nTvK2=dBVJroT4k`-5cr{06IhW15BBZ37{`T^s>0VT{__l*r})-8P?GN>xJz;gL? zk_-d&Qb+1O%rR`(lLb%O++s17*2OGODh^?EW=J^X2zS0`yJ>DZ;>FJT0H!XM{Bs_< zknw_-2#L_HN+(6L651kjxSogyx4AUaJ2#4D!(30EeuRJ=Tu)(5?Se@5Ln)S~#`TRVuvd^@W9N9OP`8v#!5sVDq9XXFq`sRa)Wexpes5*mUjmp%EpWpjq)D;tsT zy{**XA+dsTS2YybtQ2)kF)Dh71|mq*=JZfVWqM2GLZOSG_%Oq6%v}qha}nmed`)KD z0Y%Qni5vf31StX5rJI6DXw+l_!Hu8eg9Je&LzpL99ZgPFRYDz_r1H?Lt6_WU)+LpwfzTc-mEY47^VDs~4x$99CBA&+L*-g@$Ahzt`P!eZY! zj+qVM;)EYXP~ZjSif!Og?LPXc-5Y#~HRJTI;G_<|$w1bmf`rK_R9xe*I4H^OKA@5# zec{6RC;k*iv0dy9XKp6_y`>$+1W3XKoQ51L{Rc=K#c$skz`WAffCUHAqE&*!MGxsj z7)48?poeVAx6<}8E;-&m9VqR-Yv<;fI>*-g?vir5I3D- z%6oKWK`#_?WV*buvoz%QMR@+L#K#*pQlaL)Qt9gcn#%T{v`y0{A$Fm4jBuL{*APc~ z7!)b@Z{X=a^Jz~W>+->9db;?qr}sM1sY`1)(CMG_^d_5|mnS#r_+cRo=olWX^Uj}lai;L6Yr7lv>)J1Lk9)EiA#mLr z!AR!B2qMcn>B!BAo)FIE9vQ+leDtvwxjD|uWs!cOn!Z@Hjw(TBU8?q}$pxyY%YT6i zDQvx{j>bH9tI#K`u>8|iUiQ#AfW!&pCd@p11n#?#cVT1DG?s{R~+&q8{c?%U9qW%5{klhdV6F0&re5( z_|6IGy!{?8roN$u0||5d{^RQ>&Fv|0pOE7`4`j9dNu!wDqJw&fkNt#mN`ch%!T+62 zkFV2bJ36?=F5pYEMVR7w&Do}?+yj(P%R=l8fnK}jj7W2yHQz^Nd#HfmVB{5tR-VGN zcJJQ3t!Ix`xV&p8wiI5z-^yVx2i&`f?O6rbH`srF?7%k=z&1#@k9N?QAq)<&{l(y} ztZ-=z>&Ju9;ViL;aB2je4PL!NULsTJSR|d=w7#wk$PxL$RBkj~0vWIS z1=v<%2BKSUr8QzruY2^vXmThqT%!q+u}=b7O_HzP6J6p?Wlh z-)j2Z*@R4Q##Gh00aw_5I>d&udk9^0E?J`#iLdNUip<++Qip`Cy)c^y$fW7kW?b~e zDRHuDCZYc#cv{&7TXm4QWG-w$mLZj0eB72xx4usPDc1)-LdC+U!!UI ze_&{*!RWtz`*FT#I*+lXKM-~jBAuZ22jDm~>_M3p(HYulwtR%h&H7}TdtA@P;eB)P zAzCvxdNYScre1WsAvU--01LHdW@d|RdV6e%w%lRK-r5o7%H#dXYn+@+heHxc7dJ9E z!=(i6mdq*ONWg)Bt^sY&&penV+#a6|NkI&+2pr5Nwycdw_khj>3Cv+Fkz@@*iEy5f zW_as$B1c#BKH8w?>)t@j&G`S0KD>}U z1)M;cVvPTI!%%%Rbsn#L{;(E`6q|~DK9nZST@iwpV=>A!X$i)ye?F5e1v~+<(~eAM zGLuS*b!kolC|ehq#)!_&nZ|GczX&|q0atLsZX%idnBM8ud(MqKXmE+VcpntuXX0Q5 zPlyhO%Ye=CABI3!Jv(m(UKp}!q%cm?lf6X@B!_=mJe>^^D_|oP4^BKAS5>$(4^5;) zU1FW_Py1t;o}kX<+^Fm^0@3+SM9|Vj0f-0M`LM}AXrSZ_aJ+R4YM`rj^tVr*eYN>y z@9E~(Tif4kKG;3vFwt~(NbqvAU&iZtIBVcA<%cRNF1HBpnCF^z{HyZ zF(-llQkr9Frd)igEA3HV?$m7*<;?!6d(E9n+-NVF6SmVC6mAqX zUdu8ouKMLtWo|EAyrR-BpMbFr%8ZltD&VZPtm zjvTX!p`50g5{DrA-fHvGmMW>g04s<4;Xoq;C zV-~*1s)gqVbi}LRhX76p>V+{0`oRMoCkk;|Ra@Ws1joTnuXm(+ndIxc4MDSQf@GTX z-_w1#0Z@61)m>ptiOEhHhF;F+Qn!D)VBD;Qar=AS>fEhH&Fj8(cKHRDC6;ltN%W_@a5O#F#LExv{5B9~t$%3mWWL`Mf+y~pFY;Pdy(U~iVR1KQqS z24rw`J7B}Nd7uw83v?rHc3Qk<{7iVqD3jdx;MdFPMU7mu;@#ZiYO|m+yxK0NkPo?^Bjk=cD-{i`C zxE7+qgx|$naBgcKeQZ_f>>Frg6VhwmWz##Fv}R~7t?x5<(6hKikY_g|3R#~&`Uj3I z8jnpxa@1o!WD(y>XOCpLUxZd@M>R9+x4H)ZjtqlLk+k}gU%5-r$^LL2N)zrJ>E26! zTFT<&*{7J`hoiHR&j1n5D4^>%w_?1=W2!!dI;W7dMV9eWrfLZc6|Ul^I9&$2%vYsj zeqPePErDrg7{GNv+BgywI4$ z9gM1o#mRix=?aHBLDG1EdNxqGCLc7sZ~)~*yA2|(eCcrnYe5enO>H2Ukfxp*P3RK( z+KL@gm=ZeX00~!+?IDZtoN4xT-=F$4AHA0?K^8R%hK4)j7XStq*Hng@q zm=J_njrx>K;?jeZ;S&B;=%cj*V>}a;jMAo8@8U|Vs zHYtbP(1!RG@;>AoS)7-BI<|mOE;gAxAL|z$%gd4iw1zgpMGuF*r8z%nT&S*N~L z0~cD(ezCKAx_kT*Kjh*_xmPi_h`v6IyK5Ar>;bD=m7?-R&I}fTo=?DMqOuP;APM>O z*$16@q{Bhw*oLAUEUD+)$`rd$V%zqcK~J$G0oBv7o_}4(GF&>d@~?P^kaIm`HSs`F z5OuWAr6E;|vLXHQ9reXoB+7%`F_EQ?*JLI|Ypxz)3*Q8BgcA09v(;N&$kd|Xg;-jR ze!|xLE{?LI#uMhwY}%|TL@r_=IuD@2=~UVbF0GzKkzHsdx>y1Z!NFvO1vLjIGMJ`s z>g{ND!LvH3G6yv)TO+2_%xGD$UZnK9qGWYNnF>2H^zNDoFFTCUKx@XY)^76U@(Nut zz>thMI@#|uFB6{G_#@0n8*0M9xqe?afajq$3xJ(W4kx+jOf-rSJjWMNBiWxK+8_qc zqO)pIeF&@&qGuCf`QDf6^`>uwY8lG{Kw$@A1ep4#3L2aFMt5WS?me-5U$H;eM zSPv9Bo>l-v@4B_k>FBQ-G>EkqxFSG#Ft`GBEjkxqa3lwuZXcmj+yuWd_|M^uxHFYR zfMvu0kK-|M2F{6|f*WaPRbh0n%kUhV^==IRbErB;U*_kS{<;XL0S_GQ6M+A0J43`g z^WEJTWm|ylAJi}U&&xSRY>T4O<;AABO56u^ZnEla7p_vj&_H0NawWD7rQ<=(h2)M^ zNrmKC_16tz$GXdku47qyTpvVm3*hdhT}o{8Aawb-2v>Kx#(RZy5Yb4%fAd#sSWO$juUVnPitT@0e5TB0jh?Rj!JCG9u91^t?&x7 zUG=0lS;KC3>X|xATX=JG#$!3CR*Y ziSQbJZ*3uJWiIqLn6m=U23#VrP`E=h@t-y7Sz4c%DOszLdsL!DUj!`*vDHvVbf`uIgOvX&3Mi|)AVWaFB-lsq{{PE{0<&OT9D zN^XTV&!`OtqDy6jFK8!}r99rWLwK-bUpH{1%gek^m?2qp+93DXrv(E~7!o_}MTm-< zk~?#&yfi|*ttk!`{o~}|>@9|~dcEL`ANTYck!l61_=Gu+I}t^vsm1UF;cLrC zT9xYhv_7});M2h!47$ddxp@kTD5goB*nIHgrwuCGMzN22@@H3XJc zaAV&1O*+P@yEZ_>R#<<55<2wh;P$WSq!i5un+=KpIb+2NORAU2%eEE{!s3~mcN%^> zjQNhHxER_P@}^}K+VZbs~rVl zL|IeOFC>z3HpLx?JOC&(n?zmxIR9ev@@F!Q7#(t21m#cgb}-_}!;RrfQOFOelBP2_ z;CBD~5SxBpBvpSjJyncm?rJN(s;c>Ffn=Ioqr6)Xj3Qu?3a;}`Jld&dNm)4>;2*Rz zS3w;;xhm8#Z5=3e)bU=*hl0cfr z>!=5px0oGz`Rq6(Z=L5YyK#d$tHU!C`j|5yD~*|8;*R%WEHldmZMKs+>nu_>}=a|hXV}Q4XTM=JP zn$Zg7bz6P(w)X|I6)ETGdoucOK?ozNRfqqM_$?94@Hw6RO_7}W4wO$%m31~y%0c5) zS({{*A2p{teqCl=xI?@wnHojwvl~e+ZRRbyY*Usde!9K`+Y`SojHwB)Qw*(xt!ZcH zJz{GfSSzgE-@2-3AjDBN(_aVNx`8b7~<#M9aW(At6;4b@>tLv+O z5p@2>Lua`-9gRow-Q&xLW%`^?5azi$u;L!L;NU5jMCt+5q(YDi=?CS#PlY91F9`#M zu*zghc0o({Qxz-uXtkY{c&2&ZZL|mJT#6lI;>*E~`(d+}T?E|fx!lTxK3J93DIcAV zhw^&aLo#<|Xu%r`eN~sT&ls%ewV#(2IrGapxy3Cb>ynkt*JkJ7IyvKq#}vtqtfZ`! zjdN0F6HrniiBzZ8^V+T&G44XKXw`_A?HLZ%LWGj4AYu64u>L2ekT|+16{a^FtYJ`{ zONRUB4;lGrLX6Fct{(jFb2QNN-0x7!lpaBPu_ye}G$uac#PAzMP0d^m3JL%i;(9Wb zM5Y-4WC(&aWh%#Do~+X};(eZEo;~shwuUS9Rigq2U}7p8(zGI~S=kSr{D3(~UWd#& z2+L_Z0mVs6b`hkod5UBkhTgBOTw(-4N(Uw%lasx((Hms2TceD}`0wjYu(|_LN6Js! z`03E(p8$hCWX=xK456yWkd;ov8g3fn*X$sT1&`OqIs4m>pFQ1s{BUq@@XK4D-;%5d zTcfqm?IHGotqpf2Pn-YAiR(;!H<+rMR>PlpjKIsx$Z@uXrYvv?)rI(5sYK z3`J!Hq%3Km)lFj}p;dO1Wl8BvbC`dS=lntgXke_?j~3@EPkE&!2HUg}&k4izfrp+V zkKO)qZ!4A}#ESKz&Y0C4ocURiwSpfE%Q~#ru(q^4rB!>FtaDOg7i4n)&v2f7E+tM) zkG07p0iP>l2u-mOVfNL#7o#_#HpSSmet&W{K3bDKq3$4ZK*6Ei^m|giKV8y<)X`L{iN9|ll>D}MIr%upLTq$rt#2|OBUCw2qjw7Ygx$%}%&*_ap*1p(7mpEaROv90| zT6rJm$+iE3m%Au*uR@G!22!h>F4Kt|te%W`^)`QBmr1m~MWQ-3 zK8_E*k+1ApHc90-TwlToHLD?=3O;sv6cd}lSH5EWfE~8uQ^yUylr&C=2*x^a-)zaj z%_D7%-RTlMc2H|EDj+j_pVZ+Z8;QB<$yyk%8KuQsEAS5?0tO9cxcL(XP<%&kw{s|o zhcG(kr7&yRkU1Jlxo)lKg&wIl$Bw&MQ$wDL*MkuU3~`gX*}$-ecAlcx|8iCs4+OMJdtLYSnKxY;S?xD7je{K2g&IH>74!9_^ zp6^^!(E>uTY*SK)X+i8k?1z77_#jGwIXYl<3z9bAP|J13pM4oe0nC8Xw?j&&m5FsD zP>tbY0`#4a8XsT%rxI&hPWgKd%Ap+Mni+^70u6FetpXMC%ZmvJv;LJKR=WF=&L#6f z))f8)l_)L9%+A_@-t(lL**TBP^(4Gb8@FI&2$D!G1d06(mp#3Q{Pw(x#SPJBHHiW} zV5fRMVt2S+^4#BoF1Fa|L7|mm5eBWaY-34h7ywx@$)^hiaIKy3OM&z}>PUfqOq(6} z)3w+#-S!d%Z42X5m|-too6*SZhi;t<6Wmv`Yk*rN-2oEw+bWQaZ|iGidZXyQ*H|Tr z|H=61+KJ(%*)RB))7u;$K{INjjrIymn3oW1g7UGf=du2D+$$v z2d>@C&zj4^5*4fBTW$ebNP^ zZJ74URll&ihu5fU2+e6%S=^|aaehCu)0P#pGA_LScacCo&No&j9xke*J?uNCx-f`a zesNYQpp{8XBAM>l3Sv3_X#!pzVAlRo1rt$`gzR87Ap$4L5uh2>XvW4yR0)?}6cy>9 z-*wKb_uyoDqyfHKg1(la)6G?j?2SOU*KpAHwcPAnG0i}`Mn3f+L+FyQK&(jtnZ!7f zb`2U;umQd{9MGdJ<6c7_yvzT@W?hHpLL*-I^>cGILdRg6c_s<`=qiv}dT&`*ou#Pj zFHX3W8XYYb5$u$Qvc0cr7|fPt=%>p|-Xn=BVn-cVBL9@fY8lhVcmquJDH&TCrZvKV zfQVg#5zOE0?A;+Et|=3?{murP5!SvV72Z`FfFmt8Y5Y-fazUf zN4H6kwc+^mbb1QhxFlZD)=K>N7K`=l22W3xh=N)%$eWemUB7cdyg40@kK1+WyE`OeeN=P2<*mtM{fO^}!8a3A2wEW-_wYsjaDGG-m&Of)wd zw4^1eqf;oGA0_h+qE=^9aFa(KklfdJotu&~wB2d^?P#_w0;`n()@EXsziw<2C2zD5 zC{7J;46qe+U5!_$RofJcv$v>cBRuU~_u_=vn|^R)256D(Gd*#CU| zX8aSMcSh^~{gVH=wf?VrU))`P`3sZ~gNOF^-|q3s#4G=DZw*G#YT@LL!Oiga<+c0& zGWm%+yR32klBpOrgn#pV>$iK)9zELLda;Mxc}(S*9G_z$R&eK*ZULEyddf>tPmQ=L zxSiWCi91X)@U~aC@Jd21w-9HQm?$^I40m^Na4-ugwRR+OyFR!ryWaCF0gBy2`sWqT(z368wkxFolcLoMJg$r$tJKN-8{Pl z+0%e3y-rk98p&onY2WcYpS{I-n$*FBF0*XfJ<0`Xtlvin$aFVX=xRzrgcQ;%7>aA4 zy(M1ag7jG^8$h!C>tOE?#Lm@gE^Ydwt707hl{9RbR4anR(m=7Mx$+XyzKBm{B!)NP z7k%;a(`#Sg?_K;|yZhJGYjltz{|%LniJ*OW_Wa@2^N2wXwkfwDXni9uCA4EzWC1=I z6Y;M0W^X62X-8?G$T)Uo`1+063%-S-iG+zH$qF$%)$yCt>G?4d<)tDOHEP80)qDV7 z!9VE*!13nv9VIol_)He8s@9Ne$lC{TM-!GXCI`N{o+h`LYzFov;uR5HX=1Jnb**3R z4x3CCE(gsBczZZLHt(6I)FK4mkzdWZQ{%dZEpyVG*Wtavu!F?!a={;P3JeMp4g?9t zr*a!u<KTq>iaAl~|19}#^v@`@0 zpzrqwpJ5$!DA&j8FYors~*MDCqQ1FK((Nz2wfFJ5)~$!pMNfyt%0xB^B>{&Kj={C&%Bn6r&{JonNZ< zGh4n1yClmUoZGm9+sKdi$D_j*^xqVse&;tRPJhE?eHDh*oQkXftFMxy5MJu~btV|W z*uUD3EFw&~1v*aHA_1=}H;~>5(J_P3{b+ctT)4(LCcUG4+Gz$DUGVW)w!LeiTR`(~ z6@c7&2_WnFTEH*?utQP}L!CaDS3f>8aq?UlJsH!(B;8m5Y=1;|pM!;wqUf+pZ{%x0 zH50(9fD`I1i%TVLvAWkfK5cCD4^TT;5JB7Oa$h9iurf3UP!5w&w-Tp`uphIN@&4rX zWPGq8CtutcZ2g2cNL(G@QWIWNymobVjmMozactwq)!WP~hV?Se>B+fih^1zf(DI;*0fmNi#EE_ylDT%F?S`=^f%kG^ zjr-*yPPB;t>N8)Ua4S}&tDV=?C|=upLCV3!n_Kgcup@IW#&2^AeI=#DkipJoyV-X2 zwwsGAYB!dw+BK)6;JVoV%%9?0y^X&lh_bIA9seGX04r%@ZXuHW1;+PtY==!ui&3%^ zGV#EjA9r+R_ts~h?OdH5U7h(aMCsF*e-}f321xUS&`bS2vr9+&4-^dO4a;;U{Nfrk zRO?Z4pLs-4aN^uKZq&)++VXW&g@cZ%uTn!7IxSf?X|5fq?aEEp)&JG-qxMoWK0rvO zKOnQs#d3{{rRmB{*4`As^iuL%g=LO;jdz@oR1vt6)d*fPX;xkaf86Y3@hz6bb$0VY z!dCrs44UV4*&0dvoXxU!HddsiW{<2I9foilH zmV>M|N}DXLh74z!u!00D%6u=c?$FBGihxWE_lS?t)xb*CWEQp5=~yPxWl2lg7E?LF zL>?=U_qm7!aT_0O%gPN}BN849SGmUq0kMKbQI8$tV;mMmPMvjoGi)YgLPuUL!lER% zPe}7rIA86ESg=Fj_%fb8CSwRjoMM)B_zt2t<77+7GT;i`Yc3kx(CrOv!@(3xkA_14 zFU>jcM(pWMF@_nluv*E5)INcRqHHBaTqJi{dV+Z8m*7Is)j(?^=_u41#ca5Y0O6Kh z%ixtum$8IA05m5ht*odid^mn}{s!ZUt{`Zclq{@|z$O_#8FjMzWMO8^q!~fRAB`j8 zhlL37OQL`H>w!J|l$ag6A8q)g2TSKP64E zFbaH+&t9+LK+b!w-h4qq+;*F#hlAcW#8X`Ef) zsfvnu?hGj665ZA_Bzc1&GaP6rGvIOLwH0dI^Q~<&SEr*1;`?v5p7Aucg(^3|sqS+MDPOT{ zO$o4U8P)8JNAQQ7jWB8|zCDDaU6W6RVau5J%eVFz-;IQ7=KKjg?x4_AY9fFSAENn% z_9=D71}zywc9@6?ixhl-j!^iBmTvzmjed3nyw5|9Bv)q`H*Vg~W=qGOou+xR0qms) zZd&6c+I)(%#h8bWqpjc?8v#8JwShmUrx+s3!f!I*3{ZWqm7%Jb_?Jq*>fWh_ z+Y@-^3kkRm!2m(eX|0!;#wDBb?ePpZw#jKPTwjCA>rxu1>hahN-&epg7BI^40ym!euN+SXGKa>OL>@O;|>ZMB7Mp}80_5R9-#Z-E*HB%^`+hE0#N9d0utk3W^DbwoIrJm ztWd|0BkC$<;yA7c$eOVn&A#6}J^;NY2e|wo8^PgyCMG10aBcNu!cgJ00X3S(VL5vu z=}Q8$W5{b)YL9W=wNydVaXLC=Gefe*8UT`_Jb_aRNM_zpxHo$+vRG#v-uyFnPi(IL zf80Q^{_@kcFE_52Z?64fm1)p53Ph72#<~=Ikx@#65+-RGX;FZ>8T54glc#w!&|oE> zEjQ|F=qHl}`W3}DlT!Nv;E@XgZ-fKcnyDp0X=Tc*H*6& zKEL&^zXC4gshDM5H$ZuIDCiiD2RWM@jZ^ac+He!ILj+mvEFx_IqeQ`#+lo55a%K1SuYY|-*|JZj@TD$tNBUqt z0rzx)h7%TAUtgV|_dW@+aRtD*#C`iAuRDch5={n2P)#m_!M3dT=1OLJ!9DD%qpLA6 zQS=>R5Di;jB1UQ7lHeITjf(q>iMEJ!ClkwJRr@=4uqOp1fs|r;M5^!=qglhR!V6&n ziBJ|p#r4}-4Fn-MjWF7YCIeWi*eNGfaN|e`n;Xpldt*SsS88M9XBP8M!7(;@6&oVc zTaqr*2626i0M~Gd&u4dB9rqz%*;tyZrqX}?NWg-KE~adX&>yDP6C|JZ8Ifiia)dZEM)G)?wIC)O_00z|}$ zTN3y0u3)WYLhDdNGkODV7;>Y<5ic)|x4Q38H4S~k#>F)qZ!uue!co4^agxxxZsRBg z#>~`Cz~a+SWtNx*Qq4+htLX2kp{k#u8{8w*Wn70tqCLMB2sQNKy|;(=^Lcp*OY$21 znq0dvymymD*nC}C;QmH!hbVI}ttlWN##guWx_P!~KZtgIdYp(QG_+k$6g_NaiUVgD z^&5jerdh8ioVW9AcQwdi)~*7A{$Jba89=!<91 z|FpNg_08tb`ehD)rZ#O?69ybCZ19!!H zCFn~s*2{aUnIr0~DhM#DAW33_t6{R*0Ru(QNi327DH}H{=Q%YYo;%oJ|L?8RG%(HpPrmY?w}1g4Oe%jbSDRS)NHa zf59jNF=0q%%2WxT;DRe6vUqi|StwK(;dGiBi6L{oh_#X*CSx77a+t^CJ1T8~Qn^Xu z6Xv>jB=C~rqch})H7VW;hocy*aLF|z!g$j{ew^GS!~rUy*`gL9I!EH)26xJ_=|l6% zr4kHC9>a%Vh{K)7g0g1~6+mT&^O0Fl(;bHCaSk9b@es!0D6Eb|TTk0&fqZ9b4G#u0 z!XuzkngTo*jRuVFDzrr2Wer8e$X61Q+GJC0q5rgV4{^BH*vuu?FQ`a-EvUp7uI1*o zzs9^D;Rvj5&Jgnqwpg<-;ai^}`4N?_#E)*M#Tq~R{cv#S{@~`p_=lTB?MettYxHpV zYJ}kezUP1IpYQb#$B=6>nVG#M`r>>M8mELEKg352K?rh%I_k()y~BqvS(C|&F)9`m zx^zh04NLWr93xVL;&>~7;WBxA=g$5AbDQDWWK4J_+&+Rq&0y1{8JL7qPp#;c0g@n^Rs*p^E(^wY_ zJUk!pYT&1Dq=+Ht&%TJ@=-9oA(>M9}5mQ4_l&)T@a$ZH{DG^?U$hXhreLYp z{EEBoksB|AJB`;8u+ISno9GAZoORR6F-n?>DM0{<*_!z>bXE$-ri<|ga1DTaR-F)w z$5masJ7C-@QbU&&m7Xkeqtyft(^6mAyOKc)&Sa~i+J)T$s2v5*I=Fh@d(j1spi3du z%uI$%lMOC-5sbgqM$OLnjw{9vGy8O-I`y!YbeO!(=&x!Cr&An&zmJJYQw6s*BVJO0 z1*3r)9kVs;?wE%@&IbA>)q_%ov$o$#5lA-fzJxs5VAVn|=&$=h_rh!fI~e@F0ZL)G_E-dJ zc=ccqI;3TKh^bcKkCQW8Md8PY<;cEj28?;KjLtQ@lOe=y$7(oL42opDL@BP<=i|wM zOZ)_jnZKz&1WDzHMYt6l6*5?*KOepP#nDZSWs)(I zELATGu@`K>2`jTwB~@tuy*+3#@#4VC!EZWbBvQjlHOGLZhZ%IB37{NA=9JRGotFJ0 zP85*A$KYkY;6Ra%BQ?g;c=X!tW5^XleVcEvS>X-xus|xGL)s{stvUFZzFDBOugfuM zQOv!M-2oac4J6V0Y8`O(0!0KMVNJPDRNqpK-9zL?DSgYkBKN>^T*b!nT$YvzCKloJ z1hadm-ER7@HmPZirsN&d_MALvoINAX7s8 zy6=R_wKPDyKmc1Ql=35wr)S6}m6Md2-Wd;2W~0Lc4S;EIfp`zNV6Ah7#0%+0QMNGkdeJzw<*+- zJq4knn&@igE#<@RgDTz^NBLYd0R^F9IXH_%dcNlE=}=x18Elv8df9iXZ*>C8C+sa5 zE zIv-e|PMm>It5k6uERFwaMxLI}OETI&;wb@=QE%FeM+VC+2Zs8MH`wU$YC4<9Qba|) zjg9ZNo`3ah`|*oE?ctaF2aj765t;2x^~`eYp+~JF;}1mzt`!hu z(rCla(HpTs(ya`erJy8Ii{5SiLi^=_r75w=Lc&b`dnIMQbH21wHgvuxQ%Dg1^b9`P z;hyg3+k@YTBlN9#28xx68nWJ&*<<=Foi=0r1R-*?W{WI=!#YjH_F2OvNRh$*@pN?Z zz+@||3mXnW@YLaTE__7y)C!b^# z$})5k^AtrCKPX<_!;`%Cds0TWlj|?~>n&MPScZd-=0=F@UPM#XnadoV&(4snKPM>? z+Jok$sa|^}gOfF!&4b908WlhYaQI|G>7vz3J(4QVeZEnPQ4I%4YgCHoQld82g@&lb z3q!ACZ|x>A3q3HR{Noy5h)$6gWaLTHbEF5pJK@@)o$q10zr5=%)}hPznY0MMJvC^K zra?9k^}zWs^R$g{*6)|*&~U<4H_G{q4IB}plT>0&*{@;%NwOd~{2kYz{Tq=k`YcXV zR+(BzN}Lc=Be#u?cuME4$ZaHcGYR8?DvwaW8X%061~W1o&M)cweEcOSmGTel(3zD< z&XceklSleWgA~hpH9Gy{2 z#k=u|^f|ZUxG3=-U)i9gb*TD0yZhc(is6(Uj3$2+M!pN^5 zFt7T0^wT!Dhp-(Ga+Be4Hmz8N{5k9}>q_Ezk(3hfH=|>p*~$A@e<|vq)#pjP&avdj zWgise3XPZr1|SVVI*ODVa*7Ln$!rMijq=8rWVX@3H(WS)i{t&rrz+c!^M{P_O*FlP z;W{(hjIcNtKCwin%zk3tc?oRv9pSZ_ni-;DJNcj#mF z!pyk_a{IbOx3%vZoL0Jdv8QhL>#l-#%CNd~X=H8pQg)XW?K8-)FUTbY+T@EzqsbIy zd_=TI#=w#`o*x3eeu6u$9cufBNb1@!QQg&urd{!%szkIgjF_Q}r}4S%3{q>aghDlZ z&?LccLA7qVZ7_Roz%$JoV7J{4#28y`Bj!R#c8>h15aCeefx)DM$(o>7w2;zr9mMBq z!tlo4-q%|%e)sGl_u34O##npB+qGAIr7PUSi6f1@ry1CBWd8Iu|coTph3B9dph<2X&vxfB|d*2LMEX(q2RIuhtYe$dc2ita_mN>OKzQ?o^vsA%INn z8|1878D-f2wbzGJZc}Sw!+vaV`Y!zsosf;00Xy!fNQBT>6VVJLDHKwN`&yJZ3q!b{ zqQmxlvRP`qkv4Z!2psq$-YT)K3Z8f2Wv5JZ_i_jYghhq zb&W?;?XK_fe%>!Pb~kWW?^XQ1_T|;TO_0!+EGk0*dN!2>TZtxSDT)q$c;lpsh=URd zJrz}y)INH>3jzRsU;{4HRr=!WPyndIq6s)!E-;~>q}4V{adOmlybrjpw*;TCFN!!Q z^vE4CM^EnF_Ekb~KaqzAvqZ$x63JC$-g@mjJc@$1tEgBzaK1sC{3i0Lopj02s8%ii z`-iyRsH3xmmi^s?xg&)Zc;*%o+xrkZnxcfU#~$QMf>^1V(FoeF2PL?jF|#9@D<_z^ z06vnCYK&qih#SMb<0)!s@_oSp$e#u*Ais;NyVNAZu~hRWG=cBSw3?(HB3h#yVPTEa|XeAWsBkYdNrNW2P=m z1KKS;Yb)8@z+j%k)L+?8pa4fhtE!Ao&<$BIke(_zog~__+f_aA>*~QKcTz?9%^;+A z6lzsvv135CDOXg0vxIU}8t3 z{WeQ{7ptKQA*WoTe(>-1sy5P#r5k#<_0_k(?P)>MhXj31B+_Bz?#h9l5ZhDhnBx#G z3P!K>XTqi6Qyqt&v$6rEnJ1xpsBqKqNH1qegXfyhD-j{$-M`peQt{0_IuR-)SjxeX zD9xxnrYblTnAOBEeeK5o8WkO^Okcbe%$>Mwhzam7@<#x(h$Q;nse-aN8qS-@WjS=1 zuW$Cw_M*nJIjBTa8L>xoF*5NT4w#FT4JqlkhqKu0Mj7r&Eg-Egw(D-bk`Lh)-TUf9 z3!R9a=Gkv^ipIUOsazv+2fC!riD7h^aq7|mT^WuKM<+9!eJQ80V>3Kg=LQ|=A+1d0 z+}^4E=F;GrE)0@Zj(1otVB2U1hd_@Y(#LO>Xo(E`B*DtkM=a)q8S+UvEXFhCmeocOfaTkRyx5{WhwT5P^P4YKL%4W@QNw%!}~EM zu__3sxU6%CpISHK>%PY&)S(H}wreU7IRWl`HhKeH%o%F8#Ayi3>PEL<=r z{&L%0dO2l-2NSrD`DE*nxR}s)DA@AtCeWFjYBemDwmhV2@la+S{J~YT&9? z_2z$+K-*}yN+z|eI%>GitI|dgQ*57`(e8P0q?L0>oWF?qgYMDMb>zp3W*(vr;~zPt z4lY5JXP9v7PBB9@AWj^f;Uba=(ia(B$)+@AxyjoUPm)y@j7M5H6o<|1yi1Fjoi8@q zQrrBUPFQ>%B%?<8y1!e|vL$ z{w%b~=U=rNrVDMOO>RP4;t3aDe)(lSl;VHxkr{PNJ0@!O-Btr~_@RX|vBO@J*4;Op z8}u#wK6tXZy)C&xYV_u(1}(n4h7*W|_t&`V@f9@Hnw`HWEYScJ$Lh{8%tio3r>*as zR->@;)U!?+F~tVe7vy6APTf}lMs)e(1sm>aN(A^aE zoZGVcgYQ9Q1rXX5J85k)NQ%QDkVsf2Aa!)DlYs>NQr8Dkkq!}Ga*>f%&p-@ImEA!{ng2#OL3G_PNT2#^P6_^kXLAf6)KrHF+=BK2|V2{>zkDELgDx2(5{quu~kj$`8x@g zW09rGk}-f!VIbn7n)dU}_?X8JAw5ugpa=eH{yJ8}a0D$vS{N2QcLNX^s7i-ZUHyxs z(Esf!R|cgt{#xrI;nsdy=PZ}Hs=|HBobxXhfsBGD^|D~=OU6!WJv6{;xHkAy zHLZHZ;UMQI=;&R{6d@Kgi=(ja*_~GEopqAXO@in-jFRJFcjzbu6g(E(A%{PVP9cWf z6c0AeJMK=ohVOO^A|i%E!O&AHy$+pm?no$A&WF;1-GqrmL$6`hY8YzyCp0s}T}XMQ zqRGarw8rq%L`MLki(eV4I&-5|bhMI(UJxhGuEC#Gn?s|J=S6l2mCID=l^uJHeiJ*P zcyS7FbqSvFax%^f9X{X%T404C|qZ!ZL%SMe_3=RL|V%{Y7rSXsp930Phl3 zP5U91tCh+0f@{*aF(|JL7L1l6jU~^dx-nBH&cnzqGyz~{n3?#MvE)<@RyGm}HAME~ zJ1)~!J)_kpV6KVkr`W8uijUo9qgbMCf3&lAsfxHQ8lY82@ME!bc;Lt+#2(S; zCL0F?wV_niNF*sdTKMfbPU{=L;8bqaiskb+Tx(N(#DZE2E(_#3*#osqic@;o#mPQ_ zZi=I$k*Zt{4Y55D1$lwyt(m2C)D&xIT+qIxm!U5mMdZRyr%S13ZD=IWnWfK-bpYytIw>rFHMvT)q0gSyvocx8BMM-HJ7^rIk+-Bf%1sb_i1RWMwP4r9 zVG3SLBl?h!25fv}{+_he@Fztlt;HlJT^RE+>lj-p{1{}vTHajsK6Rh-4pp*lQ&}^* z1Zn%12$Vd<#_G6Wna>7P1# zWmH!kh{s>O{~=!l{E2p-fl5KNb!G8?8Gj^m?V)DoS#U@}6a~IR@aTX?-)cfnGH{Zf zeK6f@-XTR7PSmzIy9T%+)9ZqFTKV}jxnZ6&Gp}LDO)fl{t>3pRS{C0?OBN@D1hm$0iuSjUX2H%fpme_nh98+ zrkY(8IaFk55Vdk1h->s=0wek%b)yTpkv{W3! zPNu(D1;Os#a44EL4%S`huI=KcG*Zt2iFRy;Yt&Am3BZe*B08Ky6Y;V&Udii$f$mL6 zGN?j0(U2WQBGw?cIhpBoV5)3-B@g0ztbk=b+_$YGAz0XZZCH>7NpnJEQ?i$LaZ(r^ zs2~Uc83S#LUq6Es^gLTAKdj&9 zN$T;sG2wj>rfjM*II*flt@@HO_Cj;&?Hm})Nd2NRkSNX5azjHqauK@<<)Fi|HZQrB z*F0vdL*c+BWq^-a?oK8RE6m6RRIIWuoXkZ~9dX!f4>@L$WNp~)m4dLmrfRJ7etFwZ zNpKN7zJxo))9oo%TI6zxD}YxTmjh3*aD_zpbzWa6H;9Ls9VF$E>@AeU{`LECn6`N_ z+S>5#A@rXow<-lwDf|2iTVlUQi6JiNJ{x2IArxn2V7GOD@*0QM^L|krpse1GMoRY4 zX`BhcJzwD)Z^n_@l<_OOw}1WXE4r4x?}MJLrv>^z)^Eur?|M1c`np^$-<`4Is*j!9 zy4lMj)Y$okD1&VA`Vd^nVji%Q7%R_hMQvKJ4o5*rS_g49e4$kna@Isit_R3~pNRx;I=eKNC$;zg2&oa)t zxrTu1XA&AxdYw77*hy}WtRyCY6L&!SDA5-0Bi#c~$`oveh#<-obVIk>6|4i_Kz-5b z=y4=ERhZOc#6BvgC{(5IO6)+>WIwBchCsx|Fp#`|cZCPRzUEb@1O}2d{6P?)GhA`7o*W#EkDuFB*!`YCw3_Y|;22a@@rRF}Z#{VN z4Cj<@Z+)}*d=o!~HMpG>0@Sv?R0BnOsHwR$3Q>d;^6s_<|NAHOSS5H>piX9yP53XIKv9X-oXTJGn(r{-=Ch~kVdow4rpBv zjL%d@eIW{^;)j==%W+v)6tPeZUuYFM@^!JJlP#8oxjH|_ZdY8cnwo?-I+v1=stl?> z)H5kuVicAuig8I^x)wK$y{S*H!S4hle_af+ZOpJiux4;ItLQXf@>3 z$lO&6?_-efx@Vz#ve%Tg2J5Hc8-$c=aJ(D}#hgsdTbs!*b$;$*K5!Qi8$8n&x-0)3 z?5^e}hny}5Vq*0KR|=<-s4Izv#2jhtQY?g*y3ENt|DZWzNrFN!=>+={#vV+9e)_+T zH36m!0`^7F)R_yBQRQ-91hhDh9CR4j-SK2iF?aiV^i#T59t1N#Fa%z_B2$VSO7j|J z&ML%isS?T{tP>`aNN`4G2`asF??Nt6{4R$_0U`uAA)2r^DfkkjE{=>003KN3OEFNw zgboL?#Mjd{&Dd1=Vi!#^;%k8$Ux3o0TsA!ZKYf9Do8DbB-A8vQeuM0ID^w5W`h(nJ z{!uqkJ?7Nva?4Yd3Apr<&yq_^SS@)y!KneimH`CXb!NN85y6S*+{ zC1VS(gi9xA9XncZY~=X_IjBD1)k7%kwHwcq5w`_zY>+?d9>ci%pq5CeV+GmzVFR+B zrjS_$>+j;kQ0JW2b@O4gk%HaCc`ou*jzeJU0-K@gur? zqN&glC5nJ>LpA5MGFW>zp4~j2UbFZrBCm9RK!3SJ#ecs{XaF1UKfF6swv$6-x@8mL zdH59pYhVVa4H0Zc(o%mUgqR}7AowC0ErYbRv*XzFZplQ?<=L@JQwB{1wBvIpW>TM1 zp9>xqG@^E`eyE`SCByWpeBJwYt}s&XGExNV{beg&FNDENtt8Fb5WxYPzs%8U^&6`J zFPn$nK)W>-=^V!vp|W=qAyS^&B+BmZ#6QIpw;Lg+AgMJIgX-36ftUMHT?r*m|MqGf zLFFz+9U5~C12?;l4#s7!D+kX|;&l3BkqTRV-k%c5k$v^k48CAm3CeL0! zkm9zXHGNgGYo+vZ#xOSC`3od6o=x_-=8pG-P>=9&1EH?BncXdZieDmN%f&hVZiXQXIVfT%TUU}J;FTVB?xYZ|NjuhYj~ZPX z&!RiwD1Yg&Itj)*-S}DK%GnV~QRDjFh;^xN*i{}!Z$d{JRh3>>uy*K2=ztecakwKG z(72aFCXBAg#!(Y2YqUX$4!g?hhy`%8IGJ~1Z*)2=WTw;+4KyM_Vs>5QT`lfdkWQr5 ztGCKIw9-NQ@Z=In&-AI)&;=ys{kd|eN@FyrD?tN(r>00(pLy@KSSHcf%1Z5tpNZg` zm$@tM@+Xp4o!`<|4z8{hX6~x+qXL@iN!JYHT*w=P;c;)49F@Y2-aLod^sdl^2Fug2 zs1e@!{n5dJR9=;8P553!R`(IzH~4wHmnN9TiyuMwv>uWk@KylFmglsjHEdSS+Fdap zVHrbif}MVkyNW`FzV zhlmkAEk{*xVbsj9bF?!0^okd^3RRxty=OMD47zG%f~3!@WW`7#@1x)cz}rr7;vu{> zg;aQ6lPu1XT6~iQEiD)2$Qy7K8mFROW>rcD$3uw%MCzuT)E9h`gC`IWmtVDqGzz1+j(+3 z?Y<Ya9HV;vAmO_v+spj|Lm2Mq6Fw_;dwywx_Y zq&!8?9cdx8@^xCS3w$>|h3j52Jma-M7Q-ltPVGa{wU6#_nvsD%h&n_8i7MCWW=vz# zf?yY9Ukk!Y5~5h7ec@rpB0b=$7)uc?8wDbM$+W6!HV{Y~QEMiLUAv@CALocb_5pg( z;AljuLGEo$6)5i*#z;HC$r|wmkA~&qoChI{+dZPJhF;-^YqVvoA$=sLjjgLXPY-7& zqhn}0t^p)HR|d%h<8EV|7-(oAujF>>4wFn8Al3iqAU!tQRirVjlu%~6nCv1HT(6u~B;sDf)%K*jV$;rXtp{4s1#I}&K<<%KzaesT* zM!AFmluqeY+$j$xbyUOmejK^c0v#^jU;LPIAsl3vNjL~j8-NoXRdGgVl5x zDj7W_VR-@Av;~u+9qy zioyJ0+H@{Qd3Ypc(o6M@kH)9eP6cP4T^G5KIsHs6s7)BO9oU@O!xf_} z!(*JftlzJCNS#AQwD(MvrDH{Fw^;f?b9sI&{grtbKnV%xIDshY5dNOI&EiI&4j=9f zY$K$=5NATai2Cs*${YEx1bp}uHtRXw%J?w@C9O2v>R=Q37F+f8+siN(Nn*7~DvW4V zs%VE|ZjB^3XibTY9*K(v1;_u~#4rU;3{&Kf9P!USR5u!!wj^n>a+C!gO)qrfK1VyI zzTaLEQK1!!q8%o#rcuOi7*IwGfjx&2#xBf*Z?l4E2_6v(h6bnlhz`2tgV7o>OLU929z zdID@j^^%z6Qg9$JRuJFJCLNYlFM8A>)o80iXw*!Cv_O|9eZt+i#SJJ#&Tc;8h8IJd zQ*26#kthmWLpx>&Y*`dyZ5a(YM?MmEbqR8ei7Bf~0dcnZ@izF2UH7xe4`X#Z_b34h z!#p-a9ckq_BC-Ug_S0Bj2nVf2c;OlmUWsPt>T>d874y0x4kPCW^=s!BaZfk216qeC zAX2D#MRmdFA|$6L3G0xJWoS$7L3q(a1x@VCj(itm@k5KKT2C1t&U=R0R;}nUcZTMG ze5>xgG%!_zwOFqvQFO$EayT)lD3pa2+t`Hb9AbB#J5>0j2k9mj&~^*w<3EfL81w zdXwBox9GGZi;ejMkW0M<(oSc+VfsjG6i~Z}ZGKSC{1U$}Kkq|^yWHR2BM|6CWkfvsvqd@R0Et<(*a#Fra`{0y}Dw>Q6bH1I3DaAU| zIdUdQO|Dzoq#+i#`kW*I-13xqDbkHQG)#pwm*d_lH5^d0LtN-fB2Nygcpc8!^>?%X zh*Y>oUv@)u64qRIU^sUTYT$6QKhLX(kI1{=#!jeo;?!d^4wdQZScB9%M_vm{@a+SIj^0~Gy`MyPKRw{2PCk^XT}VzU8{euyYfZh< zY7Wg+SA)>H(3$hC9?O-_FHB~!PW6a6E^OzOtk)piP^_uK}242I)p^C6P&ZsZr(o5Yulk;plPo{3GOK65F5v?tq?QO-rt^c z$48Sk`TIQl*1fe0Aec!842w0;gqjY8T}1JWp(JDD2DI0_d09s{ z8PoOW_i|{1LBwP_zEz0+O(sywWKFo)AHKk)0V%pRIG7>=ay-Sc&F3d4*jXlfmR?T} z52rtJ{lc2r80=<2Q|@BB5)4T@F4z`GBaHD%jc51s!)%*o0@2ssMBnl>iP_K;uk{z`2kKxc8L% z`I|MK$yUE^3g}X`p5o+N1z=JyT@PAT?Y7WIbRGd>ob~-=^H0ydeX;j&>(S=7PhLQh zF=`cGzIyij;nwpfTie_Ch>%0ugq259w)@r z|I`#kAn?iP9hSNf%9FpeTE3^jUx8GztwA#njp>=S>3RdfCZ0o)hYzO07MlhNSSAVm zfPCng3&q5+ABqot0gAoaSSs@@*-*<(8z}jea5#5)c15yGjgV;NZ;;_QKM>o}V1W+Z zDQVEAHemqCl=Y&XlZaN9YJ!$4Bn-r)#0*>tNpNE+usykm=5-oaFLY6`0og7g%527E z3E;C;8&GrPLdSxF4!JB5Z<52*s=?2=*t?1aVqf{~b_8R}wmQ+GH@y{GT<&kb>3y%h zZDe09#OMN`E{0>n&0YPWlPt6lza_z347XwivbrAl$S2ELL>vr|h4Lw#C^ z)10aoqZ2HOJ=Z3HD3Vfml5eBe}VceT1_Kmf7`|+4Moe+*Nhk;zQ0wxa;=~NqkU$zc%Br z%$>70WrRS){zFV)#(y<>aXKo~!!(%!W#t8YKh*VIYO%ab z+TzsfJtrtC24U79LmC^m1G(cE2=oxs30F9_h9wp%?v(6~3@q~32q&6pe*CofSeZf= zs5ao%#gk=XSp<6m%4YZq+rUydqon9sRQWCx(@1>qdyAhx{_XExKvL~r&2u>G&`x(I z)*@BOYEE}PDPF>H53zwK(>Ig-uxXo-0N@~riu-SIyMb(}U@!pNDkQbmHn5rESXsaD zEEkC-+++DrKYAdJgbXzuYp9jbKQm)bZw5Sl)F=Db>WO%qzgr3UF2gki_or2 ziMk3sju|aQ{6t}^-(9F16}(1JtP6gw9z6iWWa^UJ({WP>H5Kz-q!$%4^*BYUdf3&n|?n&Mk-Ny0pD^qK1i_Z(JQ)~=Aw?!3P{8x_3Hy^;9=VL zF6WKN&1pFBR?Cna6c|Zrm$Oj`K$2k$(kc#2e2zOocZPf+H;SR7wqP=QJ9&-3rqltJ z?*B_S$S8im`<9E$(?bjwogp+1pTX$-LST8QN(mG!jlN)0PCJ`xbWgGoT8g!R{D7>_ z(sGhs)0TWNl3XClQi{WkhqmdxG{g+$gz$St37uFe+hpZPBIHGTNJSZ9Y0Oa;T8C$+t^FQ321%22353`jz^mVL-V+iyC8>}N~4$)0Ht@Yw!dB&4mSZ_eTpHPDxSti6{40sn-Lml1wWk7qPGi|HE z<;>%#ZeBdaOt7@8XLSoLkvEG3J~84Ol@y>DvehUGzC6@m@`9!U!=2@A4U2G8!TS|V zPUr%ewOQ*tu-fNqo!#=9FJ6xL~ zc9-Y4TYjc#k(qS4KS6WM8*+n_8Z)$g?eggKO|Ou}!gt+@qJoSbNC(7ENr`$2Dz06V z0}|xb1kId|-eHU8mlnpdk%qe?glQ0!l|dLWy0)vtRZ~QnV%aSTfenaCNnYw?Coi@WphB6vE?oAc;}X+)o#H(4->*wIQBy_=4?+7)s)V zdshpsmRA(6&%^UVRx3kQtCeheP@p!;8Us@T7KAGGQ{eY%N~y9k+N7FLm^pS`@vs4k z!g2xHEMd|$lOLz2so|e*&eJdnS&AVL)u6~in}qke{}d}56@ zMu7M2qdE?H+15FZMFy>9gq0z?^7a!xZFK0m6sAmu^#keZ$^Z@tw}+#*{XVb`cSb6f zc8@4Ig6Snpr&CYhf_%yIwQ~qqwxl!D`;$pmG_d(frzI-yiZY47%H#=DI&noDRB4v% z)a;wITb6LP)aEX3>_4gmug3)@jzm;7iCeJZ!bvd%D;ND3d9~wuopHB2egjx z`HH)_#cb<#E%hIqDe~kKh+XU?-aDM<7q^7m(so_pOO;hgfH!&cZAxP%Q$VNUQ<)5jLcPLayf13=?PrC(AIb- zS(@ki#N19jW=$8glhg4VTwsPf^wx%d`SaTP&Y!<{`RNze)^2=y?Qa|-ykAm8_~VKs zZ+33KydjvZ-yhHRMIRi%(kDQD8DpKXVl ze7LcOfbA#h&>V}3=n8U%(#5{>H4xn`gqfJN~X-jv#*^@g3q27 z&G|0Vi$!xkB`pV-3JaZ%EIGk*MNt?&i6hiBvZ_lWR%G%6PB5FDuCi z7$(R|5{setkwxA5g6|%wQ7iAIo4x!%Zr{qv=oJRAv=z6O=H-T3HJzH=`^bL$)_&02v25WCRA@52}?n%UByFcIh!?(Dn`61|-wz5C_=EdV@PdA_79X7FR zxyRdko6nzb{t53shd1Ceep$B)*^@`OZaO@|@^Ve1cr)8Soyg)Zz~p~5%c3vs%hv>s z_Bo-1cpiXe1_>|q%!agt!ZI9B%Lym}h-+<-bicND7t~IHwG@ohD!e3C>f9gvnu|sH zaE~W;U(i4}0|o*v-svNLsw`4Un`+cd=4pq~Nu##C6bN|9zsbQbsS=4qzg5RW3}Zgt z(HkU(f(flT0jvEK%}4hnV3oC_t`~jCtQ1P}EOl6-j z@A{y3mAgSElRlTM3ULW?D2atP@V0Xrf)lzFn0outgVC`ZT!MS2M+2*3*HDgsVsau6 znAa(wOVY-M3$VzPr*Kp9jZekGbEy#lD;EXyQQXfwv1FBS@sQW4WWVmpW`#cyPxsou z$jKa~bK^};0W##B2oQAp*)I_g)rTt24QXAjcCsl=2=FNBd*r>5o`N zddz?W-$AbBU#(dXOqrao$$wLE&N;BDR8;vgXA%iCSc&j@jvBP(rN(UeSmg5fcrD4kDEoS;#knrHa^!zvu zQFLh$0l?y;s~A+m7LyXdWKLO)K<-VVgc5|3^q%eW3a2eWg4@&6JXy}YyV+809mc`JX5sHqM zrhv%2FbLcQut-;3XW}GmRExE`TQ=y+j zZz16cx@*sTkwJ|lN|f6CuU4vsF*AyQHTHAG$r9>}R(nGm7LZ-($;F*9@EQsc3JIrcs9tq4AKd+*$@I~X8{!_e>#NrTF9 z`2X2^|FyP~ByI42uHuv%kK`)AE?4)=ew52D8HBB`F)#>Mwb!_40Rl7y5+ez_JYC)Q zu+KivUf^EIzHj`<%=1eU*xgg#x6SmFbVPke3tFK+&k**92~uB{R!00 zMfL{#7em}#@^#G@XNYm}jEyKv#k_#;fq`M>4;vWNsPnCA-5OFQ%zG!&8YYfoN|1;`GTNN+xp1OV$`Huj zU2z#!d+>wq|0IpOx_B6jORU07q0UWGt(IqR5mC(71-1a{C1RjUl}^*q#k#XzngE}! z&nfXOQgT&cl#HcxGLeksUIwhT(o?n$B5A@HC6ss3<3$ffJ9IpT`DkLH(kBvt+*YR< znM9-MZxPR~&-7Kot#Ya_d28+2&Y^QgQI`>C_Y#D_h1!0a9EZ;hIiV(Btvc}s63_|Q%EFtD;Izp;y1dgQYOPC))B6GmJQ!vc&O*P&@mhuyz6OWIniU!+|kF*g>Z!_A$`DgsK_p z)m0hg^tejkk)&$bO10)VvQH3E>;`x;z1JE~!9dD7@pHPwPI-@j-U5)pU2EjIFKHm> zgZJ_rqfiwwya}KOWMi8NDIV$a+Ixdbof~UwYg)qrS~Rtl5nwLa5l@FLqb4%eVPvcT z4@%c7ir$32URm;dUz1<@Rr}!O?&i_aS|h{3u8YwrmZI1Jz$WMk;vP>k#7n`;jeJ@Y zq(#gguYCjm#%cBe7p^fg+qi!5t55a!F;tP} zZ3NlKZ=T?%G46dhvW$+5e5dz;veQ+m)mnXe*5^^69Hqg zM);f$pM6rPEogI!xYkJNh?!mR(Ql4UWFJVCoKj}y0HVkuLqmKV109(h^*_VbO=0II z?7~2I*BK~ua7Hp$ugX@gsR*uxzdm=y&_NYjpBn(`70c`k zNgpCiwR=V2dHG%sDJf@$eJoq*HVh?~{8~6sI!@&xBA{`;4!K7DiY0-H4gwUCmnnBW zlv)T~A5|LEiy@oV2xt^hEd)L~w#8zgm$0k_NT%V60R0)}M-p_Rcw=H{D9I14?bmI{ z+nqMVTL?PQw=pmvhMwq`u*od}C@G|{wf|lAf1tZ=W*0+K+(Jn<=QMI6RIu5R6ma1M zmF0x2W{`9j&%;%`L24omS&^uK@RR^Ykr@Fj`2$1BFELvbpHbh>_2_42dNK3C&+((! z!pnsQHb+Kctm>}FiH0S33f0v4Z{WSNYMT3#bv@t`x0<{JRRyiBc)@4*B8HYf0a7@n zB_^wXkd6lPlkQ82yW;JVQ=GbO9{&1Z^%%Wk5;|OaeFHq%W+SFw-ys3&b{k z{fAErZqkYV8A6*v_hBIWZ;X^0`8JDg5%?=T4a?i7Bn>78=O&%I<7B z$}W01AAK=^(m%*2pfN?}D=QIhDJmup(Wz_rLQcDf!L_%3uhUcAu+WRX9EW9} zWIEQ>-=WK;?4+SssjrtKV5!~G2`}L?9n8|oxW17RnAlLt?ooxr=&you2|fjxHgj84 zw&t?Ey2YrPiYRKwBD;2C|@|ykRoJq;5`nuSxyv;Ys zi52C%=~T+{WKz}ag9D>d*xQE-1jyd-w2g*H>0qR??SG-LHx~{!h`fa|^>DaZL2o)u zaubZXXWWus_fQgFycZ2U7^N;i681HTU{LC3fYc6AZ|MXG5W?38rOa!#w^Xxf6;^6u zawOguOJ*tY3_!(X6Mce8Nhum7UZHsWuvDlLC{m~q-sdVrosmR%hL?q+;^_0OTI31J zRVjR|sv3n&Mb-Ebmo$E!2t?=sHPySYkA~+mLLpr)mPeXE7XrcK#b31lbcBq;ot+nu z7LDfHpAIMQzIyhc`E31g@@wp|sX07CE#xD0A3gL*cJD7jjnmfWeZB=Kl~20<*=_=R%xS`C~XO zLqMDd7a;{R)jls_o985(;S$Tb5RMcEOsooJ%m^XbEF^4MuRjQmHw5-0eyPrj21x-B zrDP?xksfl5y150Rd?4v>+=P;I4uk)KH%v$#JD<(88HUuUt zWa1HjpWZ+WX7uEyiWcm}lbi8GJcS6uv$RP5PBWdJPcM7{lAhLhcsTj$VT;~TV-iid zqol!Gg)2*)XjbO{fR(?y2gcN?@g1f|W6h(*Ie~Kgzt;Hb!Gg_M|1~NyCJFM4Kx-hu z;QC~8*~3wi3G?V4jr-S^h$Yq|sm%tELceg&+yB46BM<_h)wY4qYvD%X022I*+PwWDa0lFD*M*i=e0iZLRUixLIi|XTF$1* zm>9E1;p$SG1GtMmKZ>A`C~VigGTCIe_^(SFqw9~ji1K2JeVPZ^<42EvzxwzQ7KdBC z;{mL(J)Eo`o(%fqrKP?8SPtgGr4Pw;fdK8}kJ&kHnTN|Cr<=!p$w1GGSkB?(LXVj5 z6B}Iq%{aiA>a=gYy>V5%(; zw2)!41fU3uUlBZ4XmAeBkhVn*=&odklD^ zAOJ3*1+NFd+mwQ1CuL;BNzkd0Xu>xiF0c~d`DC5WpP!)2khKZwUpC%VQ-KbH5=}rw^h3=qt zoRt{(0RlvM>n_Hq)Xg=t|FWHRcef6HZ0)zRPB+`z-~FMpi34c&T3tNfTgiUxU?=JI zL533ht(}86+3r@>+If@xv9q&@eW5>LLkL%|?(Q#jUhQpn+IZL5+1P%)NsHt;>h0_v zWZRur9T*td!EVL|4OFL%dRy76_Ws68KyE$nY-8(ZWofH(utS(zyZc!y+iUF~bT(dZ zxAwEW*ZX_B-8P!v1lXO<&KB*S_N(^J!5Uh{yR7{K9jkmf&u|e$dw+?=6ua!lm)Kfs z@3XxY{-Y zI)SMNM;robZuj5!aT;Ux`IX&IxmtJwJUzPXD~zz^6D>})q^*?pCEC)tE(U`dJhe+h zdN4d21tYn=zmI{yTe-y7Oxob5hM0mvkXFMxY^)xSCWGlmA;PQPHEOFxx8#&rUkBsv zzi97l;1uW6tk8*yz0jm)Yr72=yKSwF{SIal50c)pIqUx|YhjjSieg!E%X$zPoegY8 z%&ew6#qE`ZC^~fWYP~tCsJhvH{(2swQpWFY4+D)b7T7%tkFpw_LeCWSFrGEv(~+ww z62_?JdomhYg5*kZh-9z+?&Pih8Yq~4hDoD;vsQiu#)mIK=9BH_BUYt$D#5ytIh8Hf zj6yC9S)gJX8vNkDu7Y3D=vN;2R4N}Jm9Qw{6=38`x~HZ{rOOeHo?lXmVv%!&`zU*~ z+N{g4BBlre335gH%5`5pOs$0NTZLGRg{_n7&0q%8QUOMpAf%zN!Dk-tiIA^i=VRn0 zOSr8!^Idi<#HpezqYO;Xkowq^4bmfP)#6_ErK~VUH?1uGsP=d~8Y`1YtcR}xVq8P6 zjtqwQ7Zj$z_`!J)9;BzCk$T#4>&L5q7~?eEX`PGTMg9 z+rXQDxj&Ii4rp5Mc|c9|$N_U(QeiDH#U^5;lR=Sn*WGs5m8(?9sjZO@XbQ%L79<^$ z4e?_+LJN8_tWp1p62Kyq=xGrO4>{kBNwj(pK6z-qjI>%o!h|erfdfuQKaxRH!XT~L zbX+2-^E#xhB~EID4eGM2q}IJ~E$@QLJ|Z9;B|3WfvjP{|ygD=b1KbIvZ* zN@1wFQyezDvX@D&yNya)voNHS=_yP^AI-AgJ?HTZ;saxjYY-iwhF5q*U|M9rh< zGE6uYSCyv1v^Yy;=PtmFEhpr!D-x!!w^?7Xw(UrV1z02H3A7dK=0?~?GeN4RU@cNn zW2(|Bv|IXIMTm+*)$M^9a#|jQcLA6(V33013yR79K!>!tQZWb*#N^U~Ud%oWoNh@+|j4IDlh zbRiik;;VCLutDxZ+Du(>_wf?C^f{{D<@c|5Yh27(_*3Tz3>M+0Vc z^{cZ^$u27iL}D)7R*iVd1Uba3^5pEQ&1JzN2L_&np(B?II?PS~EL{X;ic%GS4#fR#LS{)0`gA z8UcYYAgKw!!O3bxai}YzF4*7H{RQArz*V3Wb#F98D1_@;&S`6uOT|f;XJyG>QZh4| z0Q1G-#KqbuT5tdUy3;<8HjDilO#c05fJ0V_Fq4@};aV0&wJFnU@?xj4BD>*xq}6V23wm4VFL(YYxJ(g#z^@uX2sUNBAj z-hCylbJ*531aT7^N+d?H3w8DDIu^$w;B$K_)QH<6ZiQ9U3{+KeVavpPo(b8)u!C&4 zmSu{3&f*EHgH|V}iySERi!-A_L>C!S~FC9)^MBwYY#mAJ0} z9QHhJ0llOdig4BAUx)5z(H=HlC1pXCX$nHTca)>WVJua;wT7X8tJvxKk*A+Q%>m(o zpd!h#;!g$Bn(vXx=P>i^+CP6O$7Ah*z$OTRIJsb?JTxp{ob<3mtMVpDT4b9{Rqi@Y z9H<|d0!CLh$sE_8LG6Ne$G`%YI?V*V-}-TVp@MtZJm1NofYsaJ`e@oa4|z;xU=z_n z*dEWtt*0@{^EW774}TtxJ|K`qcY4GykwpDj^Zw+4c-KiuQziM9q*?cr#J+ZHhb zQ75CDF(OfywSC!tYv^y@_4ZwcF$txPC{06AYNJI$C>z`}?xq_mO2}cqf69x1wKXcf z0d5mI zgAyR&cTirz>L}YCpqlnLT~+5gA?<=KDm=O~R0%kY9hQ}sn4aICnTg{rZgL%vGy`A_ zr=E2m5B@;9S=+nY;)c~d)LaZ~>2{b#jCqwtOsD#ooSj|XOfG!$Mh7GziL!j9zdAnx z)~C%5a!Md*?#)rRjcC6Xeo7BbITXU)aRWc38b(0A!r|Dy zx?veB@C$U{RldwYd;gVrklkN&Gn8P|=+{OZ*DptdNpCv+2te2-`W^=j!>bA^+)a4> z`wb#tlatLlRW>e0hz0d;LF)L6RPLNeQ5cs&5?#TF8bFdT3^gRV4PU{3SIA(F{byVl z1ZQ^mAl~3t!H#VFz+^cZ@qt*^!4RA4gVV5QU7i9t>Gq%2tr)nXXv);`^at)DsNAiL z5HJ}%J-)C1t<#+5q5nSHphGqL!3g{QI!nMCn+hX-qD2_1v~H%O6A?eEuw4yw z!sA7W4!|4Qv5I*gFbno1r+?WO`6`YV42bxUEQOP|>~r#%b|Q9ePQTrQDaBkcm2pGw z_Jmt1I;U(D>y~T7O0e3?S~%&CzF=1zP7O*FDitJab8pUgwW&KK_LMYIVCY=2&q}u9 zk(o+%!<==7V!xF!1B>L4i{H~O0Oe%dW0~Y7ir_>XWA)=_dy#Up)7m%lu-a5{(LeQj z&kQk4*AxZnnaH1bGT^if5G&+BY)SwJD2Z_PMKT>pf(0*!iKXEr2~Y(k=1T4`%TI56 ztN+zn{XZYA{*NPE;exYiEBQAMzFdCD)t&=4B#1I^>h4b#&b#38Ma8Z=WL--Z8$xeG zqQ;d9L?}f<5SoLEloDq_G7d7cQfe2A0v-$#^ClGGF(B(b}|XUpGqxyc0Q@*c-}c!Y(`$hj0h@#u>h;ZGkQ4jNQ{bId8f8?kIv74Rez7G6QY*t!Gf!07_G#1YgA zGb{OKtYE8yLaavAlxYpBO2bZY@RR3e!%2wQn3RlPOL#i#Bsxxoh-)}&KqLb|xv)bD z9Nry?KrtCGQ5w#L`bs#@K6fSu7zvngvpiWiV2Q+JJLwYSVsLtjGm7Qahkn??p|#`Q$x0Ql8JUW@Ix@m)GFNLXZ>zto#VKy6MT|(mfH@oK+38&yd2X`;4Wqid`y>g;T@Xv6d=cAcCq~ zl_+hzaC7<0*gRR2D9Tbyh_jjrA6e12No!>aP5{!ubnU(C%?8TpHoibmQoQQ}aTs#YXJi>K2e-2puSxyH3IYIo-aLU;J4oqHJ zI&OdG=0^ej&pHDuc#9HJsaea)m6PWOm+is_D&~`k1CaX8;JY5kF?*b!#i@?j5*sMb zkpMkHP$5`^1E2}yA z&6JT%fdXBuEvN91VsRNv#2~dqC?ycgy3=K?O00@I=Cu|gX(1VPfg`C6@3{Ct&u533 zc9@Xjuq!Jm`8_W%O}DTP;UJI4r|atMjYlVN1s~eK&u<2or#vrSjZ!Fmaozr7c!JlJ*6+%WXuRS0i%hd+6Ny`6oe*x{+A zTIACO#z0nzRdUb@mBc2XM*=P87**7)3bb?*wcp zV*SNuOgq`hc)9xu(eg-#vS#0om@Pd*N>X$MC`uy$VH{j;r0b(@$2UWFM_ z`xoT#ggGwmOVQmX;;$D5&8+eK4v5MtNbs3@lq#ks$F4(M8k*UO>L6#}h zGh*+Rd0!T)3UFD=BL6k&$a`(Qh}4rOPuja%OHY`H;He$Q&*DKk_(T%&m z7&`$^*%&tSV6y(?q10c>vM)375Q1`7Olt)PT3;q8eQL<@(uc1A$IR$xO z6}i*fNcd7XDwfceBmd?bspO>VW9K3r2$Q$cM{bdDa8P3T`gjQj{po3weEPtDV*_;` zp*C+D*hPQec=r}rh5VCai|4@*2Iyeg9=;!pN5d;P%zo&N2b9z{S5XF{XHQ#$L;#uW z*bJLa>B)Jb#a5qEdiZR#ur)Y6uuAW_r$vWd2BpaES`GuxF@eWK4!Q==z=ncngZCtm zJA(V%3MxuDiAZcH`VzGW|Fv>I4iDveL6AEBk0kPe?ayExcX&3Q$d<@cI;ahD#x3T- zP!4QLIyjj0QV1I$z3B}SBq0>-$wRHD&giN7#l&P6y@XyD?Gg0fMN?eWnS@ySv44ry zB|#O}$tp4aVjaxU1Yk60<6liKKxjY(XU!)>AAIn%t{Q@ocu_?20cv{L2biucCczV_ z0lyEDJ@GI=00!9CvAA57Jt3lezp{k&PAGW^6`zzu$|RtQ01>_ybN793a4AbPqw|ER zi$)MINX|qAq#wohf7*;NRkX-B&mb~b9{ms<7|yNaI7KE#40(D0F)r~>u0yKHjY~MN z!>(LbJ-WLRvsmGF(0L+wSJ!MsGoYe+f=}!_P2Ph0HK#7o8Dy3aGl$v(bKXVm5ua6Q zY3_-b@$78$wn6*rNY8&akOuA%rWq@|ZS;qy4JJ5K8LRKEM_9Br-syx(i$!n0x&$#b zHIsyx9kTfZqZ-Q{#S_XNw51mm`J;(0}ujnbKJBO91a-Fom#(nqU`tw=8V#34)MHo)d)Z61Vk??S=i|^|N%2P4FKkil!mO zT?n#ur>R&)d=ai*$F#Z%i&4Kw6%_-*67C~n;m9K;4sjL`CaYJK=nFRABFFf|0Gd9z zI1hpVPnC&TWYtw1@EIUYn%x8B7h__*$G-X~2&>^I)nn(Rzkt5X?U> zi4F>M;35J%QCu5n7ji3#iW!Glnk!NXN+Tk2<)Fw5HIsEl@e>H_n>WQzKFO4@#joNZ zlhs#Pq;x-CosEVc53w9X2K6Ddz@abp!VehGm>kJwAPmy!;Hn=uyV-~lV``TMQxe(r zU|>>6TT9uVb`+};Ymn9`4MB0bU0%WvbSKu`cI&#+kCzz3nl-8|h7N-mpK-{tdX?)C zUSggi?F9OBj_u3I^Iq+`*lVbqw+2I`CQy~X5M{3GV=XM5i4MU@F@k#qCJwqAfTas+ z*B*pkWao6Lt1Sf(o+ByYK!rr}&tXz(mZ8Gr+J*$6sRb56`L9bre40aSG9;wmn>H;z z5&A-^<#q}SF6k2pqG>-NIW~KH-2Z#ThD?~z@XHlR#SB_O4N9TP9#~YRg;Cz+Xkx)) zs0BzXlqV8qVzPKFIl5ofas`0e79p2PVdrJARi*0s0HGNnCL>h9G+(R^7#glTsaJ_& zWyw0oxoG#uM+Gc%rRqQd$sk!4iixkpK7y!-IxbFSP%oCBN#vv$@&7dOD$@r>oSiHw ziJ{8rHHAAMW*Y)0>R+)-6L@5~;P7zf+JZD&ut}os9~fA6fn{xZT5a>8PHs-9o#z*n zmE8Pd$e+u!9`g%A4K6^P6WHsO)G0}MalkrpF2ubBktT*QVs1tsrf6Nwt7t}*{B;hC?aKwvoW=)^Ftr*E+~wX+tZ1aJdphIu(ag|R<~-r<`JO0 zg^`#_Lh5(!*dSl}B|~G)gqKobnrad?_lrgnpdmOklQsE)dN?nC9Gp%e zaFEwukK{LJ9^*kibjj*a7&}U}$|%K=IK)Jp1$kc5D94wh6DX*}R2K(i&`uLBj7TX} zR*1DQ^Sbe6$^$&$#dz=|gd^wXP!YPg2kbN1toeF>?>^ zwi@CrvfpSzSu}9Q`Z{j;?eX}Z7cb&}q!B#gOo0~l==ZRy`!E`xei-+z0|erXZIRWd z37@TIIz89du`t9XB6Nswyx^=4fJDV}btsNR-Gz6o5O##TW5}#K! z_*~IczZgz2#aJ0<2u58hdO3riRMIiN8BQ(+XMj!g(cy+{@XA91HgVs{C%QrYMIBBY zR=!KeQ!gp!IT-dD6k-7~o)kpt&1Ai-3_O>FKk6k4wh|J9QS0Ov4BnR06*dRvjd>9B zNItngd3qlSYoE%w1{U+mMo1%E*jkmIvlrU18%}srz4|UJ58~RWa!x8xZ%n7zQkWrO zdm&)#42(C1FpD8 zFkhR2>vbMoK_nzQhW4F|XMUV8O4zdp<}=Uub}mw9b8< zle!$-#lYTsap~d@9@mErrR#+-_0BE_Fq6$8MIMPBDGR24>#ul{ z(A7s3dq{WXtX-L7FhfgDuej?{T-N$Bx!}Vh+bEU20CvF86MI>`Q^P)$Dq#YMd#sk| z-ay$c7LkBayBF8<+#BzuPPDnO-Gw#_B6r@^&1Ri&gO)eEm-|IIfCXLM^sJ^3D#>0} z>YczlUnW;qLi568%$Xq}5*4d);WwuwhDyXv8v!pL@vw1$5I#gfkDHDE_y767AU!jj z<1Q9<`X+^C=~FCMg!g|dyo6no8cv-`k8xmK{}E4JalxJhB8azy=?29ICgF()7Lz`k zD5zM~10#a)o5x+e=}I)IoBzOJg)FJ`A*u@&Df0E8a+nQy2;fb+))g_q95a$n_{U57 zkfx<(_0L%`a$??Pf}mR@`eDwpc54)mb4qoqc~_|>uvLd-KGaskRl2;Jk_+ekM;d9#3H!r9{Jej zx7D4_`LA=R>(`KS-<_<0rVE?y?g$M_v!Z0RiRZH>nai9qGs8p<5C`H?gxbO)KScb8 zxQ~JkPvFalSK(LiN>YX=ky|!llkE#xke(uh1<}%QDx*MJUR}&s}U|cGl($nE+U}la8xh^(%z-+`+a1?pYu8V=kY?b;*MO(-P0N@M=<`Cs= zBxfIy`QSfS;QszGJZFm2k@?gF)0IpliO#~(m?T|P2LO902qG{%NX42S0C%}NiVcW2 z)MM@p06O?}D%u@W!38}iVN){!fzuN7oROo_DdCGBrUJx_w-%s=KW& z+-rJ>G178LT2M8>?zVq-faFo(8b?!1NkkXSULN&1OlH8m-I|V^Dr$|#y^r#9vGP)M z;aw>8G?&AnX755;t!|Q74h$3jbUP{OsuBl-?R=5W^<xl#9_bi1bN6Ii^{;T~i=Gd< zR77iYe$ZMgA{kQjjW9PC9t z(1R4I(MRJzc1yHJDsYW2iu?yvy*ZfRj&Y>X4(A-vjuH@4VBG(}gGV`tqV9AkbQ^H_ zRAHbZv=H(N9sw?dKe%Ct=-b(q#U>AJ3(w@hg*;G2rDmnHe@-)d8K*-{Yn4Z@(J={U&5{O>B$5k|`+U6l6xcQH8~1;D)WN+KRF4fmqW zt0LoZDF6LrRiJ#XBHeme7Uw74^&sGF=)<#4ojZ$iYni695IGU6_J(sgpy3=Bgm;mB z?Cf1Ze48*g5e10y0#nlL6j`d8^pg(0ZCI0#PfOUgOcEj_5{0O#0I||C-xKY`79`b7 zDupOXawiRND6VD6S(~BV2TL-+1sg}$wu2SzTMWcoHYz_u2#`Cj7XS5Daq?hWJR95b~k1LC97QlRUJ7@@UF8^ zE9>!PNou$VQ_C~f!=%pt702vkbd9wa5*nNjhOCC+#@-f2(jG=w9*(g=4PFb2GD-tm zXd$)`A%{KW9gH9(p%#Np&Hyj>fkGqtTiHUXBk|(#EgYhT^9`q~iK8a;KJFtP0U6c^ z8EGDHSdYRc-shemA!l7p944lt#yK)*AmHo$?W32tK~#tmXp%Msn#88qu`8Zc%+U>@g2{)Zvh;?C z83Yozc=~u*Z%#lzzV~}SlhJOBi>DuRk75N6hhrwK2|W$c-9- z_Tc$5L|jk6dio`Kp-AHeVo7lyWJOgm5#pqeqwtAz`vgw;{^a6nMBh=E*YM0?e&G=8 z6}>{?HIC!ss*3m}5f|CNWRJf78s2*dghj+&j`B?P*VH$=GUX^l(aZ$dV{-HR4m9Ek zY-95#j5=DxsAxt`Nc(jnj zeDbFc&=-90pI{VneWFK*C;ez-08Cfl4OubacZM=h7hhM)io1GYx@UY2on> zC@%|efK#x~vhS1DtTFr}t?+O}`WYjX<2Z$NEB4UVId5fN3L(>RlNU;_`e7Sm^Wi-t ziV%o2&|l~jLRMumQS7UO%N79XJkx6EOsFPB;rNCgq&m<7X@U=Vv&hhUic^F$Ab^C` zs%NdwHz`q5$xyf6(#v+ZMQJLl`6xED5tG+Z8jP=GLI)HUo>|&nhT1sfi%lMx%kxId zm%J)BW`#Miv$@{;MEZQFv(LA}I>*)D-wX?*cU#ge+`h<#$mb9UMG0jpoe*7{V0PYI zAwCK0{s@0~#6aC30ThypCX1F?nnu8>s^L!`fdo)-kY=-}VmX^bfhTpLW1mDu=c%9c z*s8!L`I~n6mUaWpAzeD%Qs7jL1MaSjA{lEks=8fWKDn~j$*e|U9-gos@pqEIi2 z-rWXw%sHJDO{;cW=0d}t&Rk{eZ)NESKP-+#fxAkI0B0n`X`^d35LB0Q_z_m`sq|Mp z{6+FnB|5C;Qy#kT<=`Te-RKSJby5uA=~kB%7i5ZqF2j14g#A&SQ*yPBp_sGFwT4Kc zye;{CO$Tp}V7e$w7Jq?cb@-%uxTuD4f<>jJl7CYcG};&aO_$y7@JGaM;3!Nw5ENPS z%po}PliK7mGySdxyg$vC&V^P%L|anGYQn2j`S?&%U3?>24Ynr9X@Srep*KHqG_}w1 z8`hcb#v;gws9WT*C~$JAy)3O#vZ!G%0}s~xnOY}WeY0sSctPP_kH*YfRlSUbQZuVx z3x>|j8v!AShB8|2LIsd4SK(cgM&VaLn$xep`TF+{W_c2mjBDz9%dCIdDc0-oSwvtN zfvsnUxMXA8|IZuP-KR+OJ9rPv?7Z(GxEFn1p7l{OwVhlJm@EEB5=$7S7cl4vp~z<~5>u#Z}CUiJ^fR#X}htZoFpC(Q1u(?#9pE3v^9y7)nT+oTA>V+A5*f03&l64Kcm7Y13>EJL;-8y;z!+C4mftCP*Iq?2zp#EhwLtgXrDDiD>N z)~WseRgZ0Pu)?);EZk$1?a>6x9@!2w1Lp~9J`7`HO>!kbL=4uNNOLLopp;sA2EUl{ zacCWh@G2HF&M=+kZn^+3<>4e^l$XN7uSnL3 z;hv{Bh^?=oR`tPsCmba2p1QW!LuWEp^OC}CXP3Qm_PW9gv%cQ_V`uMZbN8T&K9*V$ z>wDi<=?>KYRpUH-1_{;i626-urE*lTfDLmPDtI~ncYS^1WoLWyXsff2eK_(%^aT`9 z6VrVX$d29pQcfM$5wD@&MqRA;saXuORb;=*BT07^~+-yMWcRIm3^wl}i5D+TGsX z{qd;#<`r@y{jrN#TUjh+BS#1Q_*4eU4IJ5c4g+=D+gl0$$gmbBV*r^BtZhNWi7Hf% z>=(L}V>~ThWW3Nou-t6|z%D8?o}!o=e-2~L$W=~9)?wI*{H?3?6o1wa9tA~f1*P-6 z=Ud_wHIUzd#o~L6uJA4=pIE_$#wmAl1PfJP5;mTrS*QWr=U8MhrSCaX8co#tB5=v` zzNo{tOrQj{V3HH8(0m)l-hoK^CRoTU1Nw^4c65mkUo$$ctQSb8lqNf0Pl8iCK zejJLWk&heydm!qqvEJb4>c$?k7$S$+o(M;pE=kCT0^{)j277cjUbbJgQCy~av^$FZ zKE1iR-U^eB3IqIOd%5`K`=tN+um37LI+!XD2>7qMJ=i9Hp%v9JzJ-7i=>(2@pkXGF z#kjx8AOm%Mc%6kOm;^^~(MG3-_!j^|m9)$=0!&vmd=_#nPqowN3h&-T4`e5IB|Gj- z%%Kx{=3UdZC?gWT=eHw-qo!v&6kw#C^nOlHVrY@}gm9%FK}ra1(=G(GtREt(+(%=* z0uo*=WeEe>3) zGt9nOd&F+Hk6zA zaB+%Q5@Z}=gawb6o`WQq553{X45Kmu(MQKqte!YlJqci2LP=VC*<^G!MQ$Km5sHhA zaP!dUWFTX9Iy$-GttNW;mv*Ts6Rc}B?qO1)k<)(fatQ;+Z~jT{TEeLj3@jw#K(Y}- zQx8urZ%&B=Z+GG6%fS_9J=ZJh9}!2$5`bdQ0tpvEnHA$Q{LAB^E13wc3H%B;+XT?Z zkkm*sCgI39j*Q>v$3rkD4isM^NOj`U8h#1x(=(7>i7qM%QnWqSs!U}91x2)h(?--Vc^hHM*&RVQgh1@a# zaoR9?ke?3&sy1DYyY6L@p`+ppY6Tg-`nlB(flUB?sRsx_R$Ko*UrHj zTE)Ap{R1Ad?#tHpHk(>PhNqXi`@}EX*xh@x-+A%!AbYvHy@_3m?0FlQwVrRcwJCIJ zW4qOPwUTYNUbS8jyZvkzQ1+KtOtH&;eA(tJw%5Y{Hkd(*-PqXOIoQYJ3VOMJ5UT#z z>9$w0)_$i;f^6;YzFJu#IZ*@90R;7S+6slF76OG4K@k!Rk}d$uHrp*ML0({Zc5=hF z_K%MOj@ANyX)NzHl7_y-6uX2#!Z8553P(gOa!QL#~k67nC)yd#z(YMfh9|*rI~Atm@vH8Q6S;aT?;BM;Z{@p7u`89BSU>63hB}Be=jKu!m81o zDT-qaJZt`Da@p@+H@|)a~Ez^xnd`O8kNTz!HU+(~a=?Tz{fyxWv zs_wMg9qFLk`>=J|yM_zQrE1~68!TJlQ$Lwnsr0Ciy-LrVAS;YrlZP8JXu8mIKq+Yy zOuqZlkK#R4!uHjs?IIv~c>1CDi+|t}w6k+?gsj!MBK==z22!A@bESG$B_>g@f zH_ziJ92TUUbUrY#nJ_{Wq|5emaUSCw4lE`zHv#N2Sf=IV7C=otJIWAZ(oPCGig2V@ z(a(!F;PTrWaEYHZ;IBB5{rBPx>_i>mZ2(JeHfbh#%a)SI#T)BV-FP#idy)oR7cI+= z#er^8PdQLgS_x2BV!SZ8e~W?LQU&K=P2VMeqXy(skjijzjJwc}Ji|5CTT^v5nbMTk zi-V%dbRLmUPR zZ|e^rOKtb#&MDSKP}b$4{C7^t_Agj7i{~1c`Oi6Z6#9ne&Y9U=lrnXDxN~!L+#kmm zb6SZ74>_^pBSu;N!f;yNHd_Ud&b|`x3=V}A0@w)ZqY!n=ykwxt`kk=!2K&aUTC0rS zfoUPF_!k(8Vmvk^n{!B87VJkDXQ(CZBx^Mdh05DBrAA@wRDyOJNI?T3E)kq)cOJn~ z^O8aLRQeoTF^jdb)!8m{NHzR3r>WB7_y!{;=8Q5R9aTbZjF^^CGb;Ef7N}qbP}rU` zKvGlqt=trtBQ(g_!aE3WSyynveulf$qT z;j#J@m0@4WbZItlYX(j$aKg?g^b2<=C0Y$IX*>WXw&CC!^;s^q#2hFrGqzNJ2fFcu(_`q?w5ww}h6g8%En@S7E^C)Jnu#7;l@G>=EfF?4K|> z-wAgc$^iqRtICGlW20Gi{9yA^-qvz5Ds=#1DsgSN>Dp9z#zi13NJAtHodcE86Ti(} z`Po5N^^q(ZICus&&dLG3giAq3=TGIyGhI;3q{qe${Nq=1so32nJ^&a$P!%fwgezb0FM;#!h&+nU<>mkG23BJc}0`hH0lac zmezymHUO-KDJm$nPd3cBan3i^O&YW*v1AfXTfvjeDL&y|A3lzuH_7$>X?2La5j|>K zY#d&}+eFeX(zT;N_g1D7%DY03lOicr&>eJCaPOkjYRI(_yanGiJffiEm zV1GHn5OJ}uka_ZL^(mH3yz&wE46*F$Q*0}C5u!QWLOd%v0t#x}JoY0WzWY)*0jeVw zu|blI!}9ijj()~{8oB~TTHij>@}BhNCDbQ@koYReVw3IRsWnIgKlfhYCH>JGJcg(G zLE8s=UQ0Km1)#}k2cC4UH=bP{AU^65JGD9*2d?msK8E{3<_Am9u>A0M8}OobnKxff z$p~Fm1x-0runKt&>VZ1zbLx<_tcv_(K%mVnZ3@9)P_8f{p$UePm^kT%@h^@@xmW=M zR!_Nt8CsrloXd6yL(}6eGV#=M{cICYl|7@Db>i`P-o%qKzk!KI77pxTEF-uJD^OpA z8Eju~G3g{0;6HEVUUbUbHD4#cIqJ3%d(%QR3xrx@4XmD@4`1YGkIpKxOE@>EX!*Qv z2n3%!HgkS^^M<2t^G1Gt^1P{@HHB4FdDfVs(ghV%Q&b}IDp4YQ7JkU9r6_@*34#a$ zKZo5MR;=B}c_RBDIgpK2*2q>HYp|xhZn~3$WKAcO7{~C`{QT`wx}Q@8=&Nc#yhyeZ z5Vv+};FR&Hg7C$xKGlNwv^KdR759d!&<8zh+tyfs83s>balKJ8!iJh3N!y^4UVns;H1zr5;^ZrFs>->D9ECg;`O_ijJVv zSZidk9h?y05jI|IcP4k`z@cWsOm)iKSN3H-D(=6i{XZIC^`>6Q#}Ib4t!m6z4?gJV zOwOC_TRAv&jZ+u%Z!Wl!$D<66T z-z(}Qfdw;4nM1%gzv6OVP$@a|fs1Tb$DKlrGMLfAPIIzk}7005uXV#IM} z{EpZ0(VJCgC+^OAH8karX4ULM#f7G*?>PHvaoePq(_5fynps*M5uto^JJiDGB(qJ> z8CdLbd&GE~=F3bZK$^5X$im0^Dpel4;$CDuZk5|Rb;WZrMsj!W4+DFg3I7X1Z z*lg|p*xA9-9PSQml){4u|41POtQw~ZHC0vyLAM3tLi8656ER_nBZSl92=PC9{^n?> z^{Sm3rQ*3~UEfiIt5_ew!|p+v1Cta0OxXKStuU_|_g@}>>Zwg#k5Fr414k#?n@0y7 z!7PE&TNntBW4x$@ak4OsSG${?EgT1_K;$X{35Id>-s55$T>dsVZP{fg&|4Y_5R*H< z9{xOJ{xMQEv*WuVSt(!ISt_?jf*(=B;~yb1S9XYCUE-)bXuJy7qWeaaU~7&0)BDJ2 z=V{$!r#2oNmR?~`2R=R#g`zyzS7mh-ok+#sY^wv4T<}H6#8kq{vOQ=AV2bGyrfMBbgGM%L zw1~S`u!N{>);uzy(Ye714z#j2k+x1!|2GZxs4s;9NRtMooq^*~4=!*^GsZ=R^9)b2 zBsx$AX;2g9B4GA=!}CInW{RQ_*&7X1_vS!pxD^vx^9;?*RzcW)IWDxSO+qSy=kDnw z={C$qbyUq7TQm!(`#XjX8BN6vm**dKv(4%kOU&gRft(JN z!Yz#xSHx*!zpZekLL_;W^XdBH8dj}tCRA7%i6dP zV5X!iLqQX9_pF42cOzm^h5$SQgwSsfr9zTmqlECEKLoPaT>K*X2)&4V1#z4Z$Mc`? zKTp4tpYmT26>qSIrboeV-Pvdt#9ZtS%e)rw4 zUwrrL+b2)oefR9w-Wd#=UnN`Bug87(3j4p_Aji(-gJ&$d_SLfo_;>ktOraqhfPVxS zHiJ0gx8l=H9DZs{5owGlEx0KW9Vwa15X02VsLYU&Y%-NRA<_f2Tc)`01#&>XtCcIq zf)3<{K11d0<98@*vVmO9(yLF^^Vw{?7T;!u#9Tb`8&6^(%;?sA5R5IgNiP$>uHY_c zC+H~hVR`{6OWNpVzSdlg@sTk}B3e0Y4H*&3LhN&tDz_m6R`^hoMNd_^2qYQKLIr`O z!(I4N0`){e8Ru6EN77!VZCQp>u6(9R;=J$w>f)|=y6hh^ZFF|Ll@v4YzTy;VzWw>? z{N3Q0eEA2=7o@Gjp}NW$lgtC>uE*~zZWM<`P_vKxWDw}0kZ(VYUELT8LD@Jw4mmlm z!0_L^lctt3S0G5SLR}>ZDTvfoyzC?>9aOaia$`H@%Ar=8^v~B$aigRn%vlA3ZTPI6I2;FJ+g*_^@ z^z5W%)xp&;-wt07u}gxJj{VagdY3o-00LU;lW~~2r(jMT&lVGszPOcY*lR8sW}dtm zN9-d0v#yQ~oe98I7Y75mm(NsFG>lXIZ0H6^$W@}1satU-w}(3xpy`n1XXfSM$)QxM zPt6zbaBpbZasZEnVvVjGPsK?AEbLDuJz;haFobKg%5$SHbmv+Sip{=>JEEdp{aCs=;Xu!?;S*) zFl{9!LMRxx%$hE8;eX>CnK`uz@gG#ZI-BGJEK{EOEp}#s&XQ|`S~&-5(JY%rl%9jynGjr<{=I(Vgmbr7K=G+L?-QYcUd!B1g? zvCk7I{~4SZ*78`X)WNi~95oygUe`I-u9N=VnJaHDhDYyFvW(@G|`q`jd&3}C8>?;AOdV95^X-@SZ7-G9omsz+anYDiE)XFmVuve*@ygWhM`OcDFR4i-x*9%ICoMb7( zUNhh|(8}{Te_S>aN=|&{Zk1E+H$5}r>u&+S#ws+sO|w0f*);dw_c$Cji2Ce)A#Ki+?Zr$-DvGGM>k&Mt}BxU)iT20TI^||EDSe2)m(TF8-#}>3vZ>g zoG>nYK=I^tGRfu{hEzqEf9FTy&uTUv{?uIi%Qq{3efFUFc5pTM<)*dy`rVfgmi3lA z%tEfD#oGkV0P3KC-#c>k_Um_&$(O;Vyy>j;Z8c;FT4IU~sZL$WvX~iPl*574^_b3RIWwqINu}Oqyog* zZ#cv853n_UUdTt^c!3)Xhgi6|w&EoK*pG*2UM8aJW)9kHOFW1Y_`WqqKl;ht16=gQ zs}JNdJIN>jvBZIufL1XqLJ4*k2j~nGN2qWk;#!23LdI{aBYlq|dOYdxnZ8L%n5d3; zI?68C%Bu6TTJ&mN`Gj6_)uDRT@qMtgR#Ps_)miE}f(aZHQU>{~h83huB$5aYBJdp! z2&$+RhL*`23aiMma_Io&(S^{3@G0~G1CPZ#6biCZ@TnWW(&{8? z#+cQ7vMYSsY#_k84$vYth%A@u0Q@gyO(3s@(ZnW5vYf3m6pT4B(E2NovMfH3a-;DTww~D_6+=j&knqLBiBGZ;Dtr7ZqhnX+x{7K z{3ot{gQ*o^X*wb`UvQ5Y_NN0-RTdAj`{GaZIqX%TrcygVT&qd*n2Z58EadGsrXYxE zoMqMlkP|D;Dj%KTrlI2=?)PZ??X4JbUmhN={f)ERN`!fC0P5zsufPMj;7P79JHMR1E^^$nT> zq2>(-u`+6vn9)a;19ry^DYx6f>-ZallloPDqO!1eSB}=M`@ZKco4R5p`>L*Bu%GG* z}Cf$s}fN5pnMC4k7O@E`SMHBJ z*xB80AN{b=#U0U-?KtjI+PBSJ_}J_lH!EFLhkIU=XlFUX07aqa_@UxLVL#4L`LSPh z%Z~+6TUdT&JxMEFxc0`X$ti-$O35iAe3xZdf~OoLFTd7vJ}56Y7+D)gl2+X~qbRGt z(2c`uQmVg_P0N=OS!>B5kIH`8HhVQ>SR%#yfg)I_r<#vd$D1P2!sx=Lm#c%`pG-{E zMJ(XKct3X{9j}F_k1vwe=p9( z6^#i{T)L(E+R0)e44q=RzFy*aob;3qginFx!R}&n=$TMcGfmmZ&Yf;X&ct$&yf&&V z5_J!=U#$M&5y4;q=`A&Q+(A#5>x{QP8^MFM?5X49dR1Zpq*rmPTR;@41}B2IX8#5i zlLUz@V_j7d#P zY_3Sr2oVWk5ePDI^W^y*3<|rGc|J>Eq~;m?f}!n6whIoimkQEd;!BwA{R? zYQn#LViSpxQq@ZG`IZfp=|z*Kstqx9J{dYNrCC(ffPK2fP*;uyEmZjL@ZW@o#B3Gh z=T01{Ig@>h9A;*=oMcb$q$-%-M{;|*`@ZbsN~U7-f!snMiQ!ym&Sz~k!4Sm2wb;b- z#Q8J3FV41nv1F^lOgNnMuQ$|Uu3^=$R_9;7%lG( zIkE0-dI`PCUtN{^1sLTLi2{|mQ6Ua#aWxM&E=Lm_IzWiA{z#_^3ZNzba;up@;Lktq zP>`1)1|{7^sdVj~Pxf|)21DScF$mE>7ZzxcL60*VEXzmjquzkhKb2#Dcj{{{!_XWY z>af_r&DH0hf<&62XbuiVsi$;6X4JtM?v1-U9dhZ7=HO6L?&`&u$=%!_^iT$Uqs^NZw_|hXYdl1Qu&xKjZ(ftr=M$kL^)9G6^;ThRgvl{tX@W! z@B61nk`lcOTr89&m^fyb;U7OJz^GktfDcasPq!RWcuI79cY!SWh_SWk0RNGC(1A!^ zH5lTm;RXXGkDl+hHrjG4P<%uv?4t)r4=8VV-5j#$mm36FU8b0>O_9NRgH2LKx^lSH z!tmgtZ;L`(i+s#Z%gaNOM#M07drTbRRiJF%2;djl)Qdwv$}esKV5#O(PWY4b&E2k| z+K=tX22#bhfxFIxnh8aU5z}u*H`x{L_(9P0kybs6Cid_x;`_CPp4qMHf#g1#Se0ZC@FfQo5kSmfSZI z35na}U3;fPm~ei`I20}`an)1CAaFzpY9PI)h|i}GiI4|V#oPPp)$&57Jk5PK%F9!x z$OQBk7(Ey?!;?M+vh3JSEiUH~ozPxiqU}5OO&mqxCcr?T$~NYM_DNcg@4>hSj+)Sr z;OTM5A$5v{mQ^|oXbI5hKWvT1y^krjage=3G7enw3xb1b90R`0b)|cKxrKL~;n@g5 zU$}%2-*Gb$8%jR$c0xdt@iPwbwrrgJ_Cd~#bkpN2U;nt%XC(>c zkO71rGhAhJ>{@2Im-CuoyqAyDH!SC!%olxzy>|=@&WJ%ECq>*T+IYuwAOM!UNa~<} zp;n%HRb8&0{5I_h%cZdH5b@Wn{Tl9JR7I~`ts}A60<&(Jz^PSeH8|)iaf)AO;FMd% zH-6Xr>DPx34%gPcYCimR`N8iH^o?PN6Hoi$ydcxh9^%NWD?ITX^7gIn&Gj|72_}Q8 zElJAZ!%L`e_)Er8W5K3-#}hcZDNxcFl-Hb-mY$>S*^v|fy~qcKMxZl^#w;G#ZZ>vC z2pcg>{mgQ9hV8;rpPIDK%9AIDx^*FG-)R)5s&`NKIkrZZ$YZcQ82${efYLZIS#2{! zGR1}O>RYr=df$Ool-zF$7Np?Dv4b@BvpQV$1!&^4^AF}_^J?G_DQllMY;(>(yT>fn zE|vfQe`STbygI-Eh_A;!&^H-A(4h&NS9XFRyP>zjCrD{NI=DnmQD)g|bzCV`u$brl z;{t2PeOmg-X8^xe+3t>K)wgRj4zK|>o=7asD(5_Mdm(4T6mE1;aq%&grqGzS ze;Z_9EQqO5_S|z?-!a-nCP3*w@sJsM82?OVso08|Bb>vbfe-8umUrtzKByMr{Xu}n z@327#;-0~DhEGE-p45fja({BtyQWDS$h15dZrqG7K~=oNRyM-)^s>GN1fKXJU+9_# zh#_lX(-$HTgb0SieQBt~d()6cirmY>-)3KZwLFkP!f_;&kUDRd2bMV{A{HcNsn>`Y zYv7I>Im-Yb0!%SOaB`#h?7O!=9j?85ph7tUjQxUmqn6;cfee;gb|7VbyIyd0nN-MM#oNc8Sea`!JMeZl+7y3%nBaev_9ASZHXu$SG46Cc(z~zC^x48$&{{2A>xnYIZnNNZwvUN9I$I*AldCN!dF%z8##B% zG>zc@8o|pkpipi`W2l3s$TQ`pR#$7ATDe10sDq|{C3{Akadsm|6Jn9;ugyJjI74Sq zJA6(UTL6MO={KF;;AE|rNpj*@0YmH_63}0k0 z?hqjuR%$R!{ZGYZRZLpQeW4o9*FO+#Zn1NTLgfeQ=n9H9um2U-2x%}#KqOwL8!Y#r zP}6Jmydf^6^*0$!_z254x)r#ZlQk0%Qp4_IJo=!^s=BNQ&4wp{LXKQ?@3u z**~F^-e2^xGOvcOdV(%SxkAd89uf~-Pt_xcj`Rmy1wuY*QztiL#INErS}2;j^&}7; z64oXmju2ZhKH_4^$pQW3O$lX;(*o;7=5s#2i$V@#3fvcszRYg`JM$<@@>@ly;sRWG z62d~OII}n+i}GaxHF2>fZ#j&~<3EH+WCn0>k0i_lR;iD)cv$xPy-Tq@HK@Bd@U&5o zF$shw?zx(;)Gc53XC*z9MVCIyvPQ+az0g~$6(6?n58^zLKE^;b!LAE%kmt7sSzwd- z-%QR4dCFZ*`oF1&<28Y@cp_j-OHZ4P$23cKG|iLpp)S;t3mREOyz2cTFq;VoRdfNo zxg|n-lrNt_g1O34;YIJxaM&Mv$D6pV1@9EM2iemg<-Aj$O^xYz+ZuDzee7Ezw;h|B zQO`x_mc}sEbx!jnG?f`qAhIVoaGbog#cgR@Bxp@9fSCzpWw|ZDWHb3I^dk&@(3o&L zc!X0TnH*nEZT}6{(XmP}Prv8wQw1g` zWu{}?U?F=u(xs1xMtz7x!nC)%ZSf?_p{IB?awv?oS897{Z=K*^4Mg_^tYQoum!M(} zdK=PUzOs!L$OYfjvvqo>@K0lnSrL$$z6o;^Gdci(6@kx*>*_PiH$kyHfLN^M0vYq& z)$*8#m=BWnzWD(8T2UvA1<0blu#$dA8g!sW1|Jb7y2t~fPg~mz){N<*OT;9Ba?8 zd%!Rgvn?<5(utJN6qAHO<*QF~wJGpQ@G&wu_{%5O8hXr40XkuW<0rt))$)Yg+${*z zSD$*X$@X!W(zlhxZG_7;>_en4BG~42@RJHipF<{Wc%OdL4L_$J88NaEQ$eij)Y=r zj|eH^P*i_GC}8aJlP=I!(Jxl~x&N_ZrdlPDMI1?$L6uVy*u=Csonm@O*U#K*oD z{GqacS)SPA{s-j05=~^H9cZo?Q@BqR$sZ8BC5C}SL!f8 zEaRr<(dErlrXN_(`xu4|yqD;Yz{JUU*c5^s1$O%C>{PB+<*$TK5JiiZ@YP;5@eW*% zU77?PaF~r$4iXgx^aiCQi~vBue}yDgIswlzxi(Rn9#L_su`;}SbTSbTcqll9igofp z*cbuPF%^P5j9_?Aai2)KW{ISsUxsP%neb&+f9e8W#6py?9PI9Q+FkVdF-4S%W$qZ6#4OLJRAvTeL$qx{3*B%6Yw9TQ5iQ8; zIzi}`aUu(g;$&f$4Y^&nOw0WQ*VlaumYAR~mf0D!8a+eYucU^nG|z%(GilR~1r}P< zw{zOrthEA7_T=bd3>6K@sz+bO!E~f+J3f#kqs(cafn*7ZeFOG<(UXg@b z``lf*o{-4?emHu?+Z5~z?b zn9~%Q3EH6Y#klgu#f$xU*pc%=blY!|AFHrij3F_T7U#)0?lA#0xz<+KLjuna3IT?a~JWT5 zwF_%AG)z{&reWf6BowbFL@Br-bXCm$!%{#AT>1K8X0m%mff4?06U4pNnDu_~>3q@3mQMdC0675-rmhnjAHj_<1bI2rbPThv+_954} z8-ST2>jT#X80|uINKWuU^j=^oc7|M<^b1$v3y8w|6#Qb^Na5^X+}E)2dVjyYb8yt^ z9__UbUhcGBwQ&$i{RPQ4UM?+*(wPy-2Qbj=R1W$w8eV?%2xTNzp5Bay3~Y2~78Y`x z3tTm0Crq?QrF2g_iDJ&w=R+K$DIHv^q(P|UqXMEJI-Qr5;Ak}AYrq*uFY$~O@=V+T z2vs1ZK|H0;>z&S@glgT?16et$6(Gf|vw<#-a#$`2M{?XGakRJ=6Bi`m(a(&YQWCrU}C?S89KgM@TeyLL5wW z%yt~bstGJ|C4mqn4(k1jlPN4Q!0WL!r(SHq-^g@xPli{(OFx)Ud%vAs6C|QUNnM4s z_B$EcD0Ex7lTv0Pb7b5>9wkhrWG6?84iM?uak9( ztN>RS>+cbUKg3M&Jz=mcCnCIxGKnd1x!Vf~i1J7Hii4xm-VtK3dg8~zTTqb4nfn4o z3*wb8j!~Z>{r#V*_!@{6s7Dm-MC+!uJ1CV{XrE>@&s+>{guuVUa$ZLrH8mu7>f@iW zg~82?0Wwh&RFmq=yaSt(J?Fgku~!c{&mRzy>wTHXq%<`_TskVV-zAKY4OIHhqtDkd z`YdZR;}sm^;Y@HhODIU5${RKs%A z3H~?}vepV(52Z}LsBPs$P~z}>h(Lg(aSacEs2!Hx*xp4ma;VdUCdAgs)ivIm`?GgR zQ%^L+ap4sehN~b-)jSS55VylY6eL<6Og6b|M*DFYtyXN-t@8M2bni(Woky{fz(~Yw z?!@V5>t}(nZr5QWx|6%5(ZSiObQ?OxUd*O+o^wA5fsG;p_F^^yg{kpL7+8RGB!Rss zVvswYAY3kLS|KjPvT54;87Iklj3$=z4E!ib7VLg^ z269YS2g6KS?p>ZUh2+H*{dYa&7qS!Jwqm0{x3ECPP`k*JI1~i(;AlL$;DY67I`Y%> zd0DWc_hDh_Z-=?1CMI>H1W4yLgq()Y8*J? z^z|RIt={nfm;dZxpKo|F=#Q6{Roo+}wb2?l2fo|R-KE13-A1m1*GK!BLhxA2987E_bs*qa-K#FY4Z|xks$#%E0*3O&kkDZ;(m8|`zz5RB#o9*r|bzbdl zciMQ@+1c2By~!KQo}=E*?m@QQdDS@p(1YEK4H_uM!~oc<_CAH>LF;*EyL0enWofH( zutS(zyZc!ygB$jsv+;VnwV&<1-rw8pw$c11!0vQ*w)W9V`xU%CYiJekvi1*n$ht3E z+uLkvsr4Gz?-RdlV|VY(e&@x@gY4z*_GTL|pSOWo>-lzDn?k2Hwp*Q7E7@l2RqF+@ z+s}3ZWq*mq6ua!lmuz>VG1!M-{k;6ls7womwoGio?rTKl;_9*@Q^(a>ez0#nQKH?_tL zE&8~)=?1ud7n#Y_@ZL&Lbn0JGtRF#acg1B^5nZSkK*!1ftKwN|%XwUnmst@ps#!4< znO?9zi?HS7G!FO;hSxW8ql>}P_mDG}mnT=J{(S*t?d-q|c+dzl;04nZiTs+&822<_ z7hIsbU3edrnhZ+?Y5~-A1cTNkJyEPew|3NXKhbe+vX!jPuN1~ zWYa}HqMQ}VV}nVZOK(LG4`6d*iQuME3cL~qGba1&!oS7250kDyoi9E&c`A~frR1@x ze7lYmy8)k=$Sy9;qB~uUOA|AB%etI$Wdr5{tr392_C`i;DyT2AU-GpL4;$0$3Kll( zBv?(puaQSz+lnMF;)y^e94<)3YhBKhQBv08GPc7)k56 z=yh^^Ihf))uIAzRaQN%t_}9bX1764lL);y-7HtVBB`|QWE8wl-9#j~TFOIsfArFpr zc8}Vx_72{l0d>?0anQ&NIFB`neQwakvGD*xD1_DZH5IAJVVVTeafeR7o~(()|`UDiDK-FRM?rHN;|y!X$!X z{GeB1Nhz{&WhtluRjt`yY`0P>=tdYyew+PuDa|5ZAt-q-15UU?oeCthqq-Gc)(&x` zPeP6(Ht%Kha0A|?U7{91OsR6Bb|2>nP>4h9WZ*>LP~FL)S+Zp11@KjmAw6G5+~x!q zg%EvtiCdX}gdLu^C*}3Vn-}^zI3?vZ-fiyw*hTT+jFk7!yPJ4N|0AjCo9E0fr>`n? zQOL+!CCFJfv1Ry(7ED^4-(b#bbz$z5ggA{Z%{udzn?`~sL|TimZ}J#FEq<3%UpNo> zDfB4ccLWnyK(B$AMubWuFgQ9N^K_#lN+n+GU_?hjz;Qtk=zwE~_eJa1 z@dkZORz@&uUJp#E(;7ccu&b7^n%oksZJJ1J&%oQM2$mx=Dv$u=yK{E|4x25V-L%Pfh}@xeo^eGLCf z_5{+`+~M~I%F`xYkjl;vm@2JZc$6S+B4GQhrRrc1n+houPV)4*vXF!#6bdTxfoIF! z%>9G_sZmyegbbX@ve|Ih=p0yiyvk&S&9xDZeQ-L-g&v&oRNf4>qyK7n-h4!Ynf-vz zbUDhNZ!{@XumGTkYhVlS+od8LyD>y%l+I4gAEj7`&~=ML>jL5t;=v_ZP2#XFnbm4< zylo)I-=ufW4drwOIPSM+{XMl;;zfMUq*$Hx$7emb3q!zJNPq}Z-fn``wxV;b&OIOF z(P~T3KI${y>f|4QXFely#IErE?~haU{=HM#{`HYm8r#dQ9(X&(5QaV!87>uX*UBS+ zSF~1B!D9`;f;STwAgEycnHziE8zgR;OwMjDbq73heBA&y8wfqt(?&hSKM;9YjsVI^ z1`oWrz|WBoVd$^34{+T~LPNg3)Cq*i9Xt>8kejMk|AT^GYpmTn9JYUfnaOCG_3Zwn zd4KZY-U>1(XwPJ0)T|uj_=J=yd}C#cw8>ZU4+nZQ8gp1k^hJa`nC!|*Y;z!)l`Xxh zA&&?##~vsi4z=j|;SfS5_jfqFKVgA3E#PTU#RNN!BrbdIg@b5fs;SJ)fQkV_5DCx?9R{^TC0 zbJFjhV#0Ep${=w=>^|lvuP!~Mk1sz#inA)HUDBMe4irByiLEn>B8e(`5k@M>vccp< zAIG42m$8Ysj<$70N*pXV62sHRxRSRAlMZ$x?gW-BQVA2?ERzIR+F*N=m)?{|leWhR z&hb|uy`EbquRgUw6fqaD#_$)b6S-M+bG=4=Tr$zaIppXy5~2{})Y2#fblSW`~gk)c~-70HmbFG+Hl# z%zY)sSaCisWi*h!_bXiFwX6{cNlC(YAc#9h68@4;vK8UTteiyMh&k^8VN z(pW#KLHf%7InW&9c0md}AJzQ_@%qE}%?9bhD`M8O@CK-Yl91?u{$?lyCW-7x7G!7U z9*`md+P`pLHnfA5+kZMBgcPv!jU}Jej-3}ta%QFM8>1`zt(?d+rp0*00y5MbO8nr6 zu`8fG7mk{&5%}`kTE(G;H5o0&k8_`n8nZqq~G|1;P} z!ii{${4>}`;(-1c?DNlHpHB?-F$>Dg2^@%EZUbEZJ-{+~9emh439M8<%y~FOr zI{jK*U0qdOU0qG-MuV$p2mzkhI(mb+kKZEv&&_F+$$P6i8>SGoTSun@>VEiV5n-+I zY!e5g>Vk-@*iNb~#8iQWGHwnJx2K{Q9jPMVLJ(dLxd!t3B5g7r@c6kB8l2jCXLYx0 zfanaEsEwo`K&71!NR@eoPG;>uCf`*12#Q#1ZRPNn-r2>)AsUyc_Lvol;{x(Ii`oi-26uz8vnJ z6P;q~Hg}5R!k=zW3AU2jo+Zt*xdo@$Ak0U=$)<_(w9;%@>1gqJDl9k zWseVuF=!=2{To(&i^YMYmj%Hp)0Sn-(ePVtrQ6v0i@!bGo4J0(c!Y%ul5iBdN!Jkt zFUJ%d0sF)3ggbOTal#BiER;G|Eq;%bNv|(SLV7mh(oFqOfSqL3UWDLT>V)|in*hAa zsL>4RNn)Y3G?$uMi{{_vg;FfS>ZP+ z&nQ7lCQyfizW`l0u0~+qJqe#fudm1b{<+{`baf#wgOR#;xTR)jKXwB>gd;DoF=IyN zEf7u%OVue-FIsffSUV}>jrfd3$_VoHBhWw2 zCc+tDjmFiyz4r9^)?d1N8~;H&_VSkxzJlwD{*{D@NneMb1-bJO&wc?16U#lp<~AvT za%E$56J0$&{sFgcu-$e9lRxr4E}@);S%I>3TSJ`b50Hq5f+`Gex?D8D z=4fyc`22kEi!=} z@Jpx?|7Hz|U{s25TWh#UZOhN4gu@Bvxu6iwB?w8Q4w5P#*s zC<2)#&Z;wpm4IeT)i#@_-gp=$J?nE~l^b$2uK!B+gblAY6KZ{CTJeMTx^XJ3(038e z8=kRBx>}Ia?m9q{uFo{%$^<>yYw1Qn{WG9B%T707LEk}XYa$3(&@h~kdQ@XVF`-FP zsydQtr@FKOBS$<(6-mnH4|vN+!Zuf`Al?=plug?p)`P8^4W+}9HBs4cM>_bKxwj~l z`R_|d%#FUL1#Ylw=McVu`5Tq>r|r^`{lGc${w2uwQ+PJC=MeUE?k)a@?IEADae0QG zOiHY*>~B2l;Br?NuFPw=@P#W~pH<79FVW{cLA+Ci>n+puvV>pCxByd_3rv}jtW1-j zM=8$S8YS>utw>af@W?oiIH*+mA~pux-(yFrCCI0 z7&vAi4pe6ha0_aH<(c%U^$p0PWW_+^vAwzWhJyCV?+StHsdkqj!G3As>66QTn8kE z9Kgt>E{(}}CITs|DOnu=L1{HCktUv?;9?;)@P&}4$4bRweoLNy4=-z)8|+&F&*lsZ z0XI3Ek0glGIe7~O52sB4@q|Ai@84nxVu>X1E24R&;M;Gj<*(+yG5$E`mEmtYVRDiP zS8}N}1cONc;nGwnQZDim^z^e%8m3K`hfhHbHX=Zno6Jy>&5ULyLx7v60sNaE+VnnE)dJX?fw<&KE+SMy#Qo+9mC=&!yM>IYmcNH&j+Zq>7 zu=}D97~R44Aw%TOM@)jqmn3NcEhVK@g}fJtNccDzFz z-$2Kw2A0^PAUuPv&n&&?I-vl09v{w)*)u_&?Cr1ft}rC!y@f2bv%71lptRUosfd@_ zZnlfa3a8Xy>o&{B;&$@O($PD4m|WSm;}VPm)~7j zV@Yl;I9PSZCtXq-mB$oMhLNe&;q;bP2kN3c)CI5bQ8ErsPM}(elEOreg#%6aK9hOq zn0h{7) zHNymPhvR~ewwnukz7N>M8EKCCX9$__gsUzdB9+AcF}8MF&o{Zj0JVY8vps@up2&v7 zz9ienWgn<7B8Y3@`gT;!Ymvg(wn5RfXG^oJk01zw*$kL4Tt!}Qm}D10ij){6Yr25} z2aQ^5LWp%!50O{fP0XDng%TQcdQL=mnd zUZ6#bu7a@>)w-I;$2;y;3+gw)XwYFxP8J}as>LRwr%L3CRDdYggkovDLMU1^s322I z8%qesscl=LauaC!X8I8Ub-7hz&aOO_WN#)TkhLFO1S3+Dym0AGN_{O6El3=W4NGBP z$&&Lr`HoJsxH#62uE>?DSrGaG6Xjc28KVV4n#Qlk6`W1Fw}pj)Z@)n(>sB(E`!84L zxOr~NRZ`h~hMuSk1)fH2XNG7L9HeA9z%MGZ$Yc3oa6OtGZQYLMDc64A-m7qDO8%9 z?l&i0nu0vUG1%U_vy8kn)!(d6IFq|s@pOlexwJp?a8W}C#E71s%HFbSVfzR>rY6a5RW_tZ zvb4SZ)&1vt-QCXW`j6yU)V|(@8kUQHb{Pr{`Qi}KKQ2q`cXpq_Rm}?FdMBO`XTZI* zBScq23%H@K(72r--dsY8Ld_=!XRvW(nAW;^8f`3Pj}p4GNOC_KHxU>g05Thgm@b3q zxs!ZhJDGe5zev7ip!9!9(&!bS`Ut5j$uK{eBxMk<t@6PszuLF3XCt0Q6^6SeIyC}bEtkteWNq3Zglc; zfcPj3A*r!@12(Pj-r$u)FwaUSZ5qr;3U$OQs!J;OQW8u`!NC!l9C%CbRB^s-)(w(S z03sF|h(jh&S!f4b?Md9vMdZa2HV#?rX-(YE#}O{DaNffSO(<`Q@Z8wY zLz31%Q{BA)DS$URqy9Jp<>O)1+Wrf!ut}VomR%py%jHPDF9n_r#$?90_9o%gaAy_a zTM$bN1!k7-e<@|a$A|Rnu>}Elm2;Y6)Z+;obrk%Q6vXs##fYIs&O{{dD{rKCIygox z++20fKK3$GE#LoIiePi_>gs}Z9w_v|TSwA#82@&~`sn2N>g)m_jRb%PI+~5s)BY<2 ze&lmsJP-$QOVtO`J^~vb_3w&t{9*{_5fEcfyZc=7O=>VM<%oQTfP5i2k3njn^5JNu zn&nHOa3Y5J35Py?_<#X37HE=aJcEe_W~<>#2Em+_HWZ6bPKQ_sh&-iz_x+s|G|8sV zaf=c=3Yei@Bb58#h-NN4D1s4aBZ}d_3~&nB4!jY5UXV}>OM3clUiwmGKZhIbq64=q z8H(b){wrAya@XL^V93A_ilfgJg&urM^IZ3Gwl&o?+xyti%k=lMa0^l`?y^#iF024fohgnljzex4z-{bMB#5O-9#(Oi(;MCbt1GYAaL9bclU^O zYh^I@20G%fESR&r!jU{Y>t^Qn@zn($z8&MH1V!FhJXWZ;!6N@soU^->0WqCtq?vDb zebr?iY7CwwN4ez3c8*c60^1{FS70+@r2$g7JiiWR7f(Ra70=&gW1}k^;=6_q6w=&~ zG%RX*EI=OOmRN=JZ4bfyl$f%v%6`tS#+TUm#io+JNV1csh7;#!iPLmq()qNLvwh%I z;=;qj24`h(PQXIG08>9!k-fMGVam1RSc(cU-bc`lpA|cF#gJk;odPwgWw`f`at?~goHPTN zCdPa(}Rv92B!Ci4n$fWybIdBT)NyOvX5K7qM?qutV-M-?W| zj+LS4=(HgMKPLdPZunNtJvkLnIuW_vHhexAJ_QYH#nm^H*`fJT>tSoj=sQqA>vd=9QkXg(HMoQ?oRgkTCNgzs92vS})&S z;2vaGc6QHzZldHiJoSQD&5DkM`+l}Y_~GGvJ)33(9k;Wy-W z_#LH-4=XvA&zddROnp7a>pQ2tt8*w!J-IGrgR$ikmq>$=!7N#ZVk-*Go@i92CG5&F zt}dXM_xHqHpg>fej#hewBQPPfw}=NqWB;pZ5C~?d5y-^xlx3 zrerHJF*M@EIoUkJw(=t3)HcSfAUF9ajB=vlYm2FwjJ-#7qPEUMq@FbFQ;@3;hAKt+ zB|+Ab@I6zZvgl5!jJ%{Ezcdf#BMg#1zgHC7gH8QcV$ZM2ApXkXna53QYyE}SB6%kgVOQ!~rd4z5f zo&9(SjKL1$S>ffO462Oplx=4|d*Nzbn2{TEP*wP7z)%Iy77-(P7!6T*bZ&s3+@Iry z;CKK<+yqX}m<*xO{GSuU1g$ZdN7ow-6ihJB5<;{pzyL+RP!$X9)g}H!e3s}`4OKPR z-+@h80KX5J&gW_)vcrrCLn;SUk9CN>Xujg}9;Q+o7Jf5s@-}WX(}9oqJQq`WOHmo+ zfglLm{3*}EV{Q9JwTVL-nacvF%9ttxO4fdYG=1R%T^r@$O>PXhp*A39(XhiwW`U}L z3KR%Ycd%#apmiqaLOOMNdc+}dy$Z7QUW2y7xik8p-v$Qg%%mJiIEKpH+t99)mo^v) zs-(@M(|#|;y9_#r;+9GQ`oFewoPmW7IXAJp22KpjC5L0>0{{Pzh+!Pd5Y{BVaw;zI zXA^Ye)mkIvtifB+b5ipo5Ou9Jt|+@ZL!eV8a3ji28cY{G$h$upO(gH6R#;%uXuMoh zByl@PE$O?#n)<)NWM>q36ZNi1xh2Whb+!bJ7D!m#5@q8hrv%;>X3`)?>ZnOh8KEpN zM*-G|snnUQTxjDrTGK^S^7hKLVtn z&J@xT%EWAA{@0mHlKZ_SW(?TNU{*}DMcbD|h4Cf~xe2jB`;IhF2iFZ}Tt2REx@s;? zRi89_RZV7=3Cl{>r!Jput#x%9M(4-fP-)gBX*;Nk0;Xq*~_X zcjZ+0a-*vkc*c_wq!%Y9)g4F+JyrfDwT&f2LpmU1pStNvjt3i55jH_@tQepAvN!(u zXZi}=eNx@sukP+_tXH2NSN9+O5#B(F025o3oZrgX6|!8iLT3|k@mqqh?2r56FVwqI7*ZB&VH(HY z$GhfuMjj8Ut67?^KjQq#w^7Z7ySl)hozCKkt(t9<|H82i2S$G1Ek=UvDSHQj1!tTie@xDI3CX!o;UJLe6TO!g%TpDFH%nBny z%)J~AQ->mT0Q38o%)A94Y>-o&vu-pwnUjJ~{4gB-46FG%PDqas!cLnA5-i!Z;)tEH zg5t`0Ky7iX^Y=BSpS*YE$KD$mVy%C=2_`H8U&001P&TyKZi!sLMMu6mF5npuYZ>Ec z;vB3kE^QK%l{FKofqzu*w>)vNwU z{rB4P@=a^0+kMvAf4aTi?Jl*rcmDo5Ro-y1!#}z@ya15 z+GL^&lhUJ*C{Guqjnw)BND`rFT4{2`SukapAQ1SDI&PRllWPbHVK}Y-6uwTM;_^w= z?XGRE?(KEE{Fyj-V22_NmUI-+(Lg)f8aTOum6&5utlh}myuL9L_eKIjUDpVancWe# zAoFP*2%npHXQ~0{DV}Z9`oX-JZ)elpEOJ2sf^-u2(?qbyu|(>Tqe`iXBW{=wg9DbG zx{LGV0XG&;N6eK__7+FoSbfT{8_VBf+zr6wK0^6|G*bxeL`?>yD2`;rL9{1!rMeF6 zDc{yM%8RZhqubFX%drEScQJj?p(kMrwtV+dGP@G1F1vWeT$gt(AHf0n0<}FrhBm>e zn}APs=cvS|sZ$1#Z%+TVBjK}RG7J|vMsb`!T-yq2L>V6xvu#BXo@9)N#(>@&5t7D466^k1uMT4!(g-!@V*xXXMjD1}*6WpRxz(h4l2Wedv8(SkIH)g>joZiPz zd2<=}LE};~Hr>qCVzCLvFlf$+GcRx^)Z)=jlPsqkrzQ&%g&0osnR5=4SVPcOi(b}h zIY=^~M^q0U%Fd7b{BLlT;kf_jxkukrLb$M~VBh-ij}P$8JEiiiXL?R&30Q@g0G=(9 zeW0jG9_%U(5k$>gruw zUXA*laLOMkGCDy8a6h^u6zAC2sjc*690#p%d}DLZaF>ZSHwc_M@iwel(=LLEOpzY$ zl1J>Cx)E{&+XAYSag4ZuF1y;AcvGrs-Q3ss$ zPiRKS0=^`CQ30)i?RV+>gpDp{r*@l3j~PT_G>Z-2c2G^h!ULh`4^?{gH%8Dt;brZ4 zECfw59(!-e9RRGBs7#@ja4C!BEX&zyBcPc?m5F<-Ns&=>ukO{v454?ku>bBMULh~g z0~3QwyeN%r_GKTt{0di}1zem-oxSXjeEa20Fbu)TCxjR9=@oODI)o>*Z(iYKe?ea7 zYtWq1xpGz~K6fBY-+6}fP>{7Tz|>q~-DHvPly@q7#1-Y7H*$S|*s@3$oIPL$bH}Qn zSJE@P0z1JgJt@7o9HoN_4dZ-p=yDaQzA)Y69nd34et#NkOLc%I$Qni`$&0jN3xpM50-v$w^!9Jb|w;pTnsa#EY=3? z3%X4A-pce6!)1Pb(Uc|ZY_os^sXTxzQmwTzS^XcOh2!!n8fTfjj%`Tzf?O+vty%rGG$=%*>}%oLWfY4uXoyFBvFTAF<7|w<6N1-0 z_9)Y@RHqkh($hp+kW=C3mROV?-Kle3N*JtyYhpqaOTuVxKdfMJ6#_APE|Jfx7l!}; z^Xd5i$b~5HDP7qS>qc}1VHS~^1R*#*Bj*Hg9_X43>~q&qKGoGKOs z7RI}yLO7^Z!d-Bz@v_fz8@WeK6nr|Ck!M{~Qc)z`bO4E4)HP#BN`Bxl0-fAuB>(dQ z04nOUXmyWy^SnO-UAQU}pO#Ewb;%KCC{Y~Qg>*6VB(+=>XOx#D*-ik!bk)oO%1D}c zjmYCXxSD)Iu<1Y*i-TQt0u^&VGIK~MmA+4Ah-x$|MTG9eK`Ut1* zb^Hy^osd0Z{`VFzA1^hgcAP{JBm$j9EgK6 zZGs!Hr-#TB$=O88jY+!f!Cca|#g8}LzSjhc%B1>4$h?=$)^7D0I%=)DxJoyEDSs{- zh9%DkIvn1pam^lL@~x^cZkk3Kas%s}t~9kmh$D)dd4@!iFqNTtsr;p|xw7sD`yf+C zfgbvU41xrsbQSL52P5eyWDmu?N$3|m!rn^E|?ZfEOzw9WK|-WDALU@O6VVqzX+B6#pmUnY^(=Q+CpND; zG?g;;f}7JWk!|SIZX}oxa+7Y96g2yI)gE&PNyz2ozh2=44j;xhg3}yyuUFmi1;Pcx zWwbpze;3ppNO=JUQn(uIcE0QG?QCxBcel2?c-03^tiPqH>z&PwXWg~co&D##9gV_- z7cIguTWi(^Wb zZ7ul~bFG14!1TD(n*Hh1(2H2!vI)uSpn}pk`lP!%=Z!d?b6hHCZvsK!WLbS?OqP|;Ec&w zafG7uINU)LE*cwP`_eY)Ey`dW^r!qi&Y4&<(>yPm1{Y0p6A!0?4dv4@+`~^1))%3W zFD?;GM8=535r6i3XE;&PCy>>OqBB^;%!zn)PFM1;a;<^8fC`RY_eLZFqc%LO819;* zfSjU888y-)32!or8w4xHL;xypJ4&6!YFVzHzMokeUc7_%?CZ;_eKcR)zqhdwYe`e}?Nje^()x z^B5I|FE4uo1`lM&K6EvM;C+;Qh}C;?`4-`w#N`%bF+5^aXGFOk9$m$V&2+XOBmOf& z%gpXsjakTgbaLG9o#I7wi3;dh65a?xlGA}H68Gi>P}kAv)iGgsi(u2tmRP?M6jrLs z_{TG76y5;~0_Os63E(+3{M(mdi8?oay}+vwX!_;VB}#%_oeqxrc$*hqAm_(-Ne}(g zQv~b3kZ`peD;|C@z@-d92X4;bz@aFT$l7mTGgxv`mY6=d8l4XyW{wFNu8NKE$QycO zoNczk;wOj`JbcTcAsF;Aj!6;ze`RK7A6W?MjWbi?T&EX7cmS%PTP8q&&{?&t@oO+1 zdOj<{)b$xjVK^Aw)k_d9EXJ_qTMTflf_#`u=>KV_+S`7z|HJBTr`p(qsM`L1V;zqn z%&zX?dv>AvVFRw&ICn&e-PJ9~v+XC<>ei3dUpBVZv6lZGB5!Z6+TNYncm}!GLE6UF z+U9dShwxqX81=Tc_bbS}4L+W*zg@9IYigr|dQYlno!zykXnFPV2IS_C3o}nP_P5yP zlkMGVwc1(T-QQSyzPY+v?L6Pz+1~4*`*k$Ch2#2N^wN3O+1g)1uSlyp-{Yg&d%C*0 z$*yKrp9A_`!dIgo0-o?_Um9(MrQ>f_Chc7;K~vv=d!Lbbm7Z1p=r zw_9zamE9Q@Q|PK6p2AnXv&;Tg@&6Lujl)>m-rC>A=K@B#yC16lu(8)!s8)CJ_An6g zWOw`7!VJ-g8fYDjpx#zTTOq0iL19Kvgb0JDdT6j(@2qa3Elkf=HhoLe-c0GA9v}WI zmN~AM!MhKO2b}464bF)Ot&;z#(#Ntpy%Ah+z|ZuliuKMu;OzdT^J5nd}V_DNMz;&UspCGHE7^aYZ(oPLy6PVO+5KHLi}|$^d~8X8<_m~ z$_hQkbsIQ{q~*Rw*8cAEj+Dba-kH{u)y+NoT()|QRiOnO5Bd&lneTk;2r2s zg7rdwI#8WcdGI1Me4mibsic;YY!rL0WBEX{G*pGjwPS?SaTlZ`o6xpC6d`XEjAj>R zBnbShP9Huc$o{O(6+R_kK0Y@$@v)38`@?FMnCF*7tDhCj^HUoFQu!fa-e-U1Pi^8o ze%{v_EBq+|>}MDF^MSN_z@OU23;fJRf&JaFzW$Jo0|VC)Jy@ug@rtT`;QDd=_*44v z^~8_m`*_efw6L7D_mRE;R?-8$9)$it7RlFg1}48^$>lGzR`3<`Ko`lt`SoBv$D+K4 z8pyyVAYPM}7nT8OCBgjBgAhc>L4TFZEpQ|g>p5Q|Ljw4J4lsmHJZJeHvXodt z5@ramgs^Yyo0f$DFa^ufC+AE${R%&%uTbrCR8w*ZNngw(O}{E3Fa7->P0k1R<%F#J z3x6V1$*43%NmZM*l%zqXBoJgdU)9=UO5UEN6tyO`M;zzyF(q$LQnL2Go(P}LOg3Oi z%3IW=tVtwIf^k`XRfBl3}1eMd=JF9{@K@+BI&Jq83TAQia_tgG<~OezW{_6+x4x z{y}_Ahe09oLHsPo`0~PinHFgZ(;tVJP2FUswp^!lNyO1euRL3d?oB&8fZZ~H!FS-v2U z6x%M~tuuw?5_3RLoh=|KwmD^0DB(dG>)*U8X{B7i%Ugws7XUM1cP`x7e@= z1)n|~Ii)sX@g4NTl=7G|Z4<^v*)Id`dx;~$37*{AK7YLZEOzaVm|k4#VWVZ|WU_@0 z!{<#)%h3IH$f1!tX6nv6WD>J;@7`Tv--r;hC7&JLTp zmjE1?XN2E?`z>5Nz43fV>ShbO$HCl%Uc~@$zhVBC~D*gYh>EN)9guUc?Xo^km%D9A0cag4LZuGcazP%`LEF z+^__al746HD2E3mSoeU8FmM3$*15L*tTmiB0#umkdw6gW47I|eay%c9upzGyK1mKC z$1s+UFL5D=R&cx&i^xBgL9_@d5(GKqm7%m-zs@e*dDK3{-@#9_FHg=#mv{Mb^83~!X<6$ zK+b|Dz}kMa0x)0P`He8n&VM%d9`9OS3*`-<0};Q%y8t}MaF_36In&U&Tj1fEJu3;E zqnN%5*@Gi99&9Dsw^^nyx4r{7IG2;uK#+lBwZ!PGFPbvYlhkg3dfVjRB0=sf&y$*0 z4$o12&T0a!`FxCD58v*{eY7ENH<<;$@;b`oEj<+Y;3)4+|d`@JeD8; zc~s4IeBJZK(cuYZ3+yDM;%5eB@TI{aY`VU+b5hw&ZzD=G%Bv-RU=g8Kj zk8C`~doI@7Px#0vgMx{RZ_0}rcyhwwEEgCw<_(iDr(GJ&J9TebXXBQYEpIkgeLI!aBv zjhf^N1N`O2iKdic>A+f_qLOI$e1*nTl8j6%#1xpR0trVS@kB#`*M~7HO*B?Dm5Pn; z%CcWk#(e<+sSS+7n=s(>;N{RALG0kErbjN3mC4%oWYN2Ht&MS%&#jK3$8@Np9yGt@ z6=Gglgy@^9cPpiWqBTc19-5VjTwOGwobEvy%VjEl(vu+#QZ*w1)!#|OpA)6@&ia`N`wWXmbct2w+8W9;VU-xCcbUWfpGC9vW@F`w? z@j^5eYQ?g>S$rte5xJMmX}06gw0TG_90s4ul*Iao`vVUYKlsCFS|@|i__AA*4LZA7 z!%7%z7?E7Dmjb6=o_}$Ww(x>N1TyuO?Jc8~SdEP+R7bTv{O)(L!@-s z$U>}u5FQF7`)&im7`ryzKz5Qezjz;uAp<+30V{+R6M#qt=be6&ufqpehmJmVtdwn? zA=FcFbY6=jlj?TR-Z5*qI{KOxqiGsWQqt5X`sn(}d@z8)Pbr}%w`CX$Kvz=<>)kty zo1R*KoD*IlS6i_DxnS|UBcE`GHc9;w;pyQN_svWYELN42V`3#ysANAk>LXC>QNQcg zvaz+pZi)M(gJfU#;y0#T9rPAYRu`Y#Tm1UPub;n{t)A}ZWfq~f>$YbDPIZX=fxD$} zLrXolBSU;(xE+Asi8pSNm}UhdLgCUw9psz zLZ%g^rM_J8)liPkDCU4>MFCiDjD&P1fdSF=Z z*gp6@7=VP;&C*{4YW4nG#-rv}El2}7#*ROC7g0Xok z3{?zN2@Z6u(4QsoCEH#5$ zl~I~LnhoVI)AY-jem60kn!lR)X|#tKv`bkZI3riXJi*-c5) z*#6(IKC4iXJUZPGHrG^pgjGeYP)WDA&6PAStprl4jRJ;zy9Z6`l;tLNax?HtwwNhs zm$LInnEDV!52xgahbe@vyjFgq1s6`zj#|*h*mtu1)Yw?$1Pzb!$w^*oNlFd!nnwZX z8@sfZxD1{22dx0`kxe4lknkJvKoM4DE6yAC=PGK3ycl{@9*{#{zB* zX&6-8>*@WB6C?!3*5pE^$>SH(_EN+jE`=iBYz0uD& z8#K;@Dda|Z>c!gpqJ&F|COJ2=G%u$_6xcF&WnRPi!UB|%Hd1azt5xM)~`R!-gNK!+rdwV z_ZAO-x%V~x*TawH6EYl}5zc=$izCb#@gyREzp{OCk>S^Seu;k%zYh2%Zp{38!7uS; z#@7Nr#E}OdEBp{oMtpE9r%h_$r1DGQF(z9dh-;L%1?HZ z6ge%5-+DR}ztzs|O$5VCU^j{J?;Hn96lb@y(z(q}xu>+Nd_sW^J(m7AST@FSb@f8) zHgs7sk%jrR&AlZOWwk`d3o@)&u*SzQb82vjMGV_T0zQ-1r~_fi#3E0*M$2f6GAVYb zu0&R%Fh#>Vu5JgWY>TF1(kY8cN@CfS$o46co3WdnZ45uCK&=L|JNU5uBIbCCgZn*jk?SDbgu0`s^gjAkn@4_5^5R0kw0 zMFtA^;-I9iLSq!;)tF=DIfO7w?X5mc9nptbiw}eEB4TJ2H)KIcFM)+5EJ9`w zwV4DWm~(j_m)IIYFhBv`r6NG~szo+aBeqmR7M;UzA~pE)y>Gw`K?I>Jzwg{3EJTA? zu%&0$X{Ch&Eq*XJcp;WQQT&WlZ12GqV(l(22qSRC;rY^M5US>!gxv^!3RVcMqep)P zla&=9iRzRDCVVH@=DiK#B@{~8q#us4VCv3+wot4*NXvO;Y*7xP?(ojxq@%X1y?FRl z(5B`g;Z_dx#SBM(UDzECg~QbgmqZi;Z$EsV!roUTDoP(<&|aBvJ~sO~vp zqjs?lPX`Q4F$RJB_+wYzp3aOTlge`n#ascqP--WF!N~K>Jw5rQ&kroqg6qnPbH5?ULH_LyrBpl#)(pQ#*BN|J(|G<*sq11hE3&#vzinrqF zQUNoXC-EXZlVC9O=AqC^(lW;GXCcoHE2fspX{+qulWl(_s}LVtva_HA-hQ=6Nw}mJpZZ z{BmWbsX1FHb@g&xp%Q(>(3N+=6?PjVfnq0E2?26Lw3aXa8Lb5oPW~CK1<|=+v#S0X zt>vH5TJY`+<;`EO@H8&ol3d@|Wdy~$OG|g(fUOQkcY9ZtLpWO;FQFv3_KdtP)!OU5 zLu@A~%~ksiWGXH)%wxBT?780g_${7Y`E#{LGv?aqU}uDY@R#w|$_ltMQn)p-));|O z>-CS(%#t^<#K`j9&h};~ne_X5aC{7(tebbM6%?G?b^h%mL6cfy@n5PF;|mxaia`QQ z<-=jv;KTA~vIi#tSqwtQ1SJfdm9QpZe}a3&dAo%kSMJ`GMC_DWBeDGiaJb${eiKw4qYrq9e*&m)=bfod|yRp29bO~pY?(qPZ z^g!B;t>gSaL$ZYlz_lZIf*IZsYajTHd6&`yvftj}ykIATux?N=FWw=h9UgV!Cnf_& z1xILPPOGQ$AvsAxC~<}GVDK`lSH(pT8PlBhEmP;~1lnc)^kiivp$7>#39tD+j%x5< zF*zv`{gg(AAPBoUhqC`OHa?o9RH4tv#r5Y}ijts|;f5!F;QVSly8Ci)eiuPY!#rOi zx*9MydpF6%0|M3J5#qA)jm7Q1w5t0L^$~M!K4z0UYi8Yi2@gT8g8$Nge%61E@Q=o? zg#REWp76BT8tG%C$9-f{iUyC*H%EXlDX3#t!UR_U5lKOfr}iZc8oH#6k{4feT07%i zN6Zu3m;PD`4QzLq!0PNBjCJF;h>gc~zZF{^>s5=RBoCC0clk8jF6I#1ne)q&b|a?7 ze7${<`1%IO`vyCGeCwwm@o+A7+2XA^feil|w4gPO5e|5!5{toO1S4(Ni2$B=SK(r? zTx7vr#gsE}I->KwK(IYOR-{_`c7ln=jt$3WFNdQ`Y~}P= z*0&fs66c~ql)fh{S#7d5#7GF1Wh9-tXTmG5VojtY#pO^spAf<7xE6 zdx)0t-Kckb)vLDpmzeCI$1|%}2pTwAsUG81mLWp>4*Ix^w%Z>d2ZW-r0~v6zKf-I_ z2!1!S+Yd1UF;I!P$Ixg%f-xk73aqfEdbrC?*H&y^8JLh4-Yh`jj07K~CzN6eXv01j zF#~xa7r1#dpuWea6(>dk#8#)zFrA17h~w!TBnjDPu*liw*%cNvaEDNh(jca$A$A~c zV_*Y3Q&qS>hw|{e4qJUj@zmRUF(M(50MUs6=_4Se0S5GyAVJ?JflIBp{`aSWK?n%R zZNcCSFlb^HVv>zn=*A&3v6kU}hLHA%?iLU&vm-S<_9Lc62esA5%%K)@sY7@$#Da*h zEMgf!{{Ue`fj-bMLP-usg4Q#rUwFvoi!XDGngeJ zHY3pFj|F_`ZHCT#!uXC1I=R0p9is`L3fUOgMjEnwvg#AAO|;WZUyYfmi#XBpBm>i&#Rxd$`#S?_QSMnzs{J->{xENv$Mqa#8ifCa=dc#&6a zRxybRblpNF52CkKZc`FTXAt0GqQyfjJ;;IZHL#yi8F$r1sx3amz3>fa!nnH-Z|8|1 z=jop{o|Xz$FTMn#cX8PxF4ONbtZ#TD3YV-AwD;`ljOE zxY~32FVtB)r>Xf?NkC9r=Y(0OrU1<*ICnyrQ}I)a5(Qf_wNRn6J%>-5kb>>i#7Yi` z2Y8TFQCJc@Mx=B%H!wwvYeoJb;mU`qr#2N=%jC5~oF!q*>oCty59{~jLaCryf@okf z48nXP2*h%@loi8cUbE|B|ENh~dcb~Du`EkGm~Aoiu+H&HA6HBq{m&S^;nU_U_QNG? ziP~<`ove2ZNjH|p3^2PA0J?V?mswa=MP_o-M}`O89Py*44)6w}D>})?S)-h!%anhm zpiIRe3H%9 zjS4i~k0uD4O!+)DK7=K14Sof1%qWH;J4{*L9_B;YxL>PQPYs&fGKLL5ji2M%&zTkT z)Q6)PsO%U!>LLPK)=~q72)OklsvBrW+}$Rs)AP~b5dYilV{_9-1TOM8`RmbV7k7Ot zSEO9UlDB{)jPtmPP|ID&6WC;-N=31Nw+{M8KR<&PI1s1Sg0-iewZC+qZLfFmKFaR1 zRT!6(@>dxsNk-rrvi!)zlgt4vX#G9mtvm64Tg#RKEtp`L*ap`+2Ut8!Ei?Cj-09$n zmc4!CV5#3HOnDqo7qSz}~s{3`*5OiCdL z&RF7B4#%K|rsorgz>>4-LcYm#iE`jZorbn1fmODfc9LT$0p>%-AJ~)gT8s9RG^U;KFlqn0rB2(cxh3)sr3sgP~jraSonNsVX!N!H3^T2 z$`OrgHV;~LQq95mdn$nGX}G^&n>6aRYjj0(n!5I7z4>UkR+S)?D(gBUe6B~rP<9|S z_-YY%InXvS3=w8b5G9EIn3@Kf#cmI-b1G`31iY0@x`?28fn~3PK^npSj9z=95QO5P z2&G|2)oXwQf*mA_=0cs6@)BeyLj9vNur_ztX)VcLr3>VG;t9fDBt} z*wQ+!1U7^w>x=>u5nEe)D1}Rq3>LvZ7@xHgDL8E)A&z{G6W;8br%HO$M+wS4kJo(!I?$&6$6-L9U->8)(5C*!VW5Mn ze;;N1Z0P^F(NE%kPjKXhizy$2^0le|=SD7?dR-@il~Fci(1u|z90g^F+XOlAZj$eD zPhTq4jmrAme+CmeWJ*JWiw_+Pg#qHt&7VnK(UXdor*5zj6>Sho96|=sl_yS2x|LLw zvF^ax5hIe?@&toLk*KhUMx7|n(qesc6-)F{nfPIpfr1dCNLURtZU^r5SqI@ z-4vVV{*{Cf}-5m=H4<{Yv>CMcnV5L&@UZ^b|_;yB;p!3KgB zNQ-m)h`i2}d>N z#NXnxXN&9fY9Z4_gaiqV;Qhf9iezn<8w_whFdYEb-P|;QpRNp6#(i039}&ia9=<_{10r-|MO*Vpd{~FuEnLBgqPCPA zjbtH+X+(9TjeW=Zf6$AhA^naNxXqkgT^=o-4S4USe{>5{dj5OKh+_Q}JZ*3y?cL+Z z3J=M`)YGpz7sDg^6W(|w;MMK^FB9P3WnNgg>B&nuF=3rbbG|m^I3kLMauMRz65fh* z_K~kbSYjkXw(^W=U58lr(wrW==Zk%OiF;BExp<8`w-fr=VczZf zk>+5#=5vuv-9dA;&Vu3!msRL|U7VkXt`;hI5yQEqE0>e_a_IA2IOA9%A8hQxfBDJk z#wMRkpR)GC_)*^`xCtuwj0{dc2(HdE0P(vZlfIjP8eA-bVqr`j12Pp|gNrwxe-M}( zJCk6gu29QO!QolaF>ZUI*Sd zvv6D5B&}h&vLNRCe~CBKaVuRIv9e~I4fB3Fto5SoPeG8eU}39%UJ&0Xxg7EG4DQ3U z;pYur9Ump>{q?HH9$q4L#n1W!ujwM;6PW^WGaNGCYNYCliKvY5kS_y0{u4d^+11^^ch~9-QKQmA~)=$tnLuP(i4s`0bQiHe=LEfZ7M|e+$3Ad_O;TcYr2syw{=6B#TH3F&hKbJnd2g zJJi@y3E;)ZTVarA0Geu z;QitJZ}RVaCI9fhpTB1iB6wv`BwpKLWD;EX6T3X}dSc9GpcS>}v7nX;^jo6e)Pr__T0Fyot%mG#n0R=LCNt;i|^r$$z>*AE~o zYr2`NH1k@rG5|8N`g@GFnXHZnc9-_?JMnR}6?TIAJwf|}NN}c;6^A3Q#&4RiDmTp0 z&AX^xzRP{J)7C_4H}X_@P77+q_Q_2kOiNz}pzufBXR#-{`0`7QUig-mb}kSae#FM@ z>SifDC_>$xLn`_GuyD++=+zx0!*S@Z`=X5i^H-1|&~Yb~f(inDb|i5{Pz+9M?R!i2 z{7)VUIv$*yAge7g>*o=a)f&YkBi@&(#EVH=;BHcpoI!pdA@r1}Y3NOnfncYDGu%W% zT*K<@B`={$Q2#Kn*(F$zA6b@!9J4IO7MfT=!wxa3owtu5iS^=mZ+=qycqFi)eXkJO zca6)?G@={~xYD3-0R&D{07osCzf)-`JvJtqm;>3^$x5WR#Ah@(kmT+p5S8XTx&tj2 zXpHwbCi<38UkUPk`mshN3MB}Mt0X$Hx{^U@kk$ZH-W@AyxGpJe%gT3AJ7w_zPh4B| zCItlPF5-p#1jl!8ew{bQ1ubd2v66M7DsZiKM@?U8RU5XDh&LS}&F8=r>*DOrLHn?g zb6ebidhA{8&Oi-W`Ut1)Jb8&g8N6bPC@i+A@LuLlqW=qBm~ERX>ZsnupR6f}H?;MR z7cuDu9UH<09p287v2)vdgzJWbbG_voVK;IYh~Xs08xPcB2`eFGbGWjC;9b6-jvdH$ z#@yu$KN=o;0Oq1nOV(8IlBpfKKSBUBo+CFpQTyGH_s&Rs5`+@%(6xT->T^Ankn{j9 zQfjtzlPg#`aakz}k{cnAl0;oSQPVJjqe1ctzL$~G_+UX05l|I(TW#4D$K^Ajsd7YE zAVi?)C7%Qf#vFQbM5@Fu$B08nHKnFL_ERDR&$me`H zkl~t&Jb@JAWWcK8+B7+U49V-tkaeOa(4>`=y^sM7;KWbD4=j0cFx&p|zF3%IxjLv5 z>|k*7a;Y=#fN=hyK)=_%1JLiaOAzh*60yAb{ z6J%dGYp7M}jk#hnCi{IM| z`7~dVv6u}{UE0(8Qb~)U!lPi?Ngo5k>qFkBuSx4rXDdv(kbSU}D#s4@rK}T9zAqRLuQ9Ujf zi7dN-Bp^U_o5t0E+|=(}*pC&b@Q?||tWI3g5zAT&?2NW;vEd6hWs5!m4RbSDc**46 zpkIT453WpZ3^#NOxG<;~D`nD*v|G4!Yv?%P=7_Ic!=67lc~|vb;p+MLQco*j!2Mm$ zTcv~U-(#+uZ4JF&5VZK!C1U$T-2&TM*}H~y8}wydH;)ydgHO;Zf}H_DdSEM8;i7m= zS`ank2+^i+0j-bAqNhVV5D%G14kqz#N=x71{06Y*7E7;iBUn%Sj6h!AuGc1R3#@Gc z1g)Q>D*GR}Cjf>+1oze-xPlH3`A@Jrh3eRTNQTeFG-WP0l!@vu5m0mw6ZRwMy4Hmt zJe4>fZsu{q!M|{2cgZ1V6O0MlWsExpE<5A3LkTpLh!8c82;pfi3=%K#ybLd&t1Feb z$6MQ^6Ib6%Bp@fLErj$z2Q44K$XVq%f}bP03jzXt&+S@Z^W4WF@Gegrjwh8VL_vO! zVyw@=i9z zQOFtFP7OZEt}zvQ=Je@L={R4aE2yXpX##h{02{k!a|K3+dT3iHMN*s83=!s9>+$w^ zpHqoCvVB7` zr&+<8ySzYp=%{{O%-f?{B_>|c5PTr$C9MqIGI80aCh&>fqn2UouB8DviqPOKkzh&j zB^*kc^WOT7+6H!r2#tzml8>?mHlW;stt5dbh=z1CHDL!M6k{krtAX((L}3inN5{E} zwiW3nj3U_&UuyPgwYGYi$-W&Kv z^$<}s@d~vf$Q_k&NzFA%dl4S+&0%;R`rW^iV11CU+z@KRTuzS=qX@ORKlvlEmB z5DgnPWX+451r~8;D;n5Bg=kzNlk;W`D^eVW3fs9J+i8^W4f_wY(Mj=3_G8DGU4lWG zrOF39RQV00n|KMn8l0(w!_wwb6!nX%G7b`qdgDai+gt~%S>OHAdSb^xQ_4XdL9sPw z(Rxf?2Z8zZT7jE4!{A#k2Yse;;GNqy*Hg*E^~n%9VZ=ceG}oFmG!qrgm6%x{mr9a` z8e!gUp#P`5!6pI0CLLwiI9ejKGMdLkvLb1KjRJ^;&WIWWLneb*_<$pm4^%&z!aan*9`9ACH6CJYhVw_h!a0=Wz=f<=yXP;PWh_C3dqDMIc9u_s z3?Kq25GetD8`^xoo!Iv>LMre>SwlS1VRFyes5xNNP>FR^ue*J+qxKEhR&P^p9|St7 z0{T;1rm@Vr&gGCdwi2h@P-5he5`gdMx*4NL#J7mv)us#dhK&SB+Z_f{u~ms3Z0UDo zrU>9l?i>|6O4}DjgsO91x*6Jj`Jd3~5$s0#fZWSNJf-c!+N9L8_%J4$0=b~%Qmdbv zmenaQQ$m{xgf>fH%2ULwrP^Sv84qdUNX>b2IYWE0ahpJR4O3Lew6eJ^ab&x3bBsX| zkSy1-$_6{=@Ve#_6DcNYl5%j}BArI{c#$S362&B$r=D;>5?fEzcR1!xXcnGs=29Yc5L&&SG&>?TsbGfMUu} z!pYIGP()2h_I5NPWO0z=nUl0&!@Hs^TRUD;?Ng9&1#yIY9V}ajwB?y%GL&Ili|#-< zwd1OdF>Vhb^eyZcj95Gnq3k`lIv-4epWJYM33f`Wlv|NZb;gXmR9khz%CLlh$r6!F zrzS>}i&8(|^2$D7Pc@LH4LH?8&5k>8rylPMibb+Wa=2st2)iwbiNW!(JMd^`aRAM< zM(GVYTendo+@wzKTUfBvn?UzhZg(?4gG~dD;vSPxbzkE=8BP%j?uO`0@zB6)9C2tc zXA~bFBhT!qG+48Aa^cjE(3GH6Jp5%b)`e7Wjv1%7LWd#UHY`^-Gw%egPteCgI_Drk zYlPRWT*X77+!CJDk87j08pU!?w-g2*pBi*FwkO=j*jqU8cd3)jJq{0IwVMtjKYU2) z-*gx_(~*bs#P>V5?x*lf7)D?{V3N7eA^R(2$Z;RDxfz4iwDyV$7}0|%RgyQ+-1G?dl_r4$w^sns}< zk#$U9uGeq_X({Ie(awfpYxFZtnTLK6HsF{IDvqV;kAh>il;fB~akOCKZjD=_G8lgS zIar&lTcP=~($hQKI+L$EFqP=3%MY;+%V7M_KXbI`bwbiw>1?TH;CLgds3{({x3LhK7CgKPfjU# z{2i~jrW0oma88ux$s8;B+>A#z^Zy3EpKkXQ zZ(?0eT3{2ZpWx)WaI=v~26RPnoAeqxoFjl*7LRP4r}aeLPuig|&UON(_AB<4Tlxm2 z=r;}K9J2&9h%$5C)@#C^%k;`fjQa=(hSY1zu5DCVE9dOeAHSU zbDX3RUAi~$PQBGxNZz#-Z~Zreq1;FEg%hF=u|Bzq1a3%LS?}y1ybaU=+y(5t;(5PZ1Hg7i zUcrE{z&n0e+&C|IjlJ|sTs6laj{1Fg!yr1XDL`ebcsm(EGM;VhJzL#hE1EZKGlmTA zBSAo%LFpt!lbc)H-`(u4Jzd?+0fk4wc(rO#q7RJhs1M?>_H3`We`B(Qu%aVqPPl`v8W)^tcnP3)u^wM zIPA!c@|tw(f8~koNgumV;G>P=+`B2o0e7Ym+(hIj5;N;J6}x5Y5Y`H{DIM*k5v-aC z!q`Sp4g#C>bhd96)E<1=K!6P@s~(ge8+@)F)RCRycLIcAl&W*2h)yPw>Y=%@DD6G8 z_Y$y?R9d5SiKpF-E2v!x9s&Q(owQ*fn0Y=`9Mk|G^+)5HoX zB`BQ{$U2zEW^`|a0|3$V&phn9w@>5;jWPTo`~4e%y2{h_?UOxG9kEdlNK8lA1aOH{ z5N|MZ5`@~(vLptB^^JhjgZA4)SJHB1g*9E!2yOj9_+3Z=XhaJkKLUAB%@B z<-)UbD_s54~rX<*{UQy#7xNk0_!Ptx>6}iHMB&xy_xWiO--P5_fJMtJR9BIX>w%mUtS{r9q7aFB=r|9wwC z{+rV9)B9iO*QXLwP1acy6@){niob|J{)>0$<~WRz`x>6uvL2^Y}fZ_>C<58q=nrYaLB(n1K2eqRP6aB4OP}l zNe!Sm8X~Mv`bd#2t*i->RU8{TyV>}Pt?Kvw=#CHFUO~GWodz3IZTJ{nGBUIHJRTmu zLnGy=(w!YiOOyzYZsNBiTX=;16b~H@aJP{371jUxlkT%ejCsn}^u)gj&)()9??K$)6Kpo^mYSf1ugVn3 z{RO=*>YE%95YN;~NSYy^w!R?_6Csi=hO~_0_vmyu#tEE^C1ZWKT^Sn}J}3)u@CHuD zl@ney1qz|=5MN~WZu`;7;pp&u{@45O+e@Dz?&R5cRwRl-jh}L&2b>!8N&jSHk_)-) zuq10I2d8zSyxc` z%Vk$%(du)l?U~l=%gYN9bGl;rhTi4t;jv1-?>hUu^7p!rOQ0i3n)MY;ubeQ-h7~;n z$7~E9{HH6X+AhL49-kuQs}oUsz9Ms1K9@1k+b-A&!7${az?GgGk+gl0V*I${)bCP5 zGGf9uS_`5Ko^R_H@Db`8ahu-@ru32k%4hIq;O&ANftWG@a-q7nQ2j}~Tv{B)%3Xxx zEsHGTI35Z&VjfBO`zVZlH-Hm3gyUAZ@+WR%A|>I9w6dA5(u`_IlelDK4e%XTy5s3< zR5UQ5y7PdVYOB4@#}eMv#7K=7krnAWsOA*hLYuTi(Iss>AXE}ZUB%%->z|&itmJyp zGrAOQoIjNn)V6K}D+TL{!wJlb3q9e!X5{wu!v|E7fi!n?dv2`b3{rx;I6zu(U+Q#0 ztNS?WoDA7dYj+T#nIVz-$E!4hP34w~DxGYz%V1YweION9GKH- zEH2sT=x$11&sJMq5U+WAY4edvi{k|#Jl6q53l&JaX}}h+F#xQq%OEKA(OYUn;RdRl zhNkM#?5E?|if+YJWkpX~f@mNo1*eyhuXfclLM7< z_i~+7G;%13AzwyRuWzU{puJ*u5;X;ZvpBeOaRR2oQF5nytr4bk;sU_-E z>$jiU?Sr3I?mqg%i#zix^N-qh@8X-EpUvaz;3xUjKIBhJ`vbMX`A5HDYs(hH3I|vq z$}_0b*vgTDRS^IlNOfPtSF}a%Qik489zg_1_!_g7E^bpihhjml`#|az1Ac zcfx7$FJ8#Srb;^g(={C*wElY4AHBn43@%?kMtl72_N~yFtz>imPDd5z zO39=IDdv|Li#dXKUowjDuqKL;0FYo?3@fSBYOWpKC>b{>lQ47GvfR?VfUk4DPj))^ zFT+k+#!v$#JmRvM!q^4D7dlLf|9bDeY2PVPrX^(50ZubylF{ZS@h}jOK+fv#;zfj| z!zJ0-FWsI0Z2mK0;%OfVH)r(ZP51?9<@j&7Roy_m1=KB(?g%gWu;vJbV^wbv$EqG!nYMcFfhVAxYB>@Oj753F6%c|nz|B_!MoZoB>H+fNRc<^@>JzJMx~CJyoL zT`4H=T1g*_ASD16bw#aiaY~|%$XaDL?rp4OROL>c~jL74HX&{Xf3gK9~SnL zn%Si&j?Z1Ufd_4|Rw=0XwVXiS?iRWyx_#Y+b4txdhma}dxwINR%zzyEOVmemhEe@7 zF>zy3!niSGx?h&cPK~xjTI*pzC=paX>!T*0v57eujLyQyMHYuXuxikykxDocAg!d3 zEIzEO+QLt9s6r6=7*MDzJg0W37pAJg-~=u#8cu8?C<#L8}`Y5ED>Q-W(CP(dPm~~%3 zeu8bxmIN1+$)vdIT1f)xLrll$f;f@{gAaV$dQnuQo#vJ9u@Vn1WmK_J21Y~x9Tega z6sDLEKuhLy0{W1vMrdHpV(f@gR9GYrgKE$IU5ZNEeZDG(O*Dt7VknwlK96( z2nGIILW6lmn5qzA#wSx?!NnHbK~)EsY63hoeuc#mK}i=yDOsT>N5c+gifRPbFtAMq zXezAIIMW($d`R}O)|!)ZA^ROyhy5ycQy?Jt49xXLJ3Ke%496Nm^K!Js1;*A-}EU$jRvZKKQz1}Gz!0HhWg8W0|M=tQMXts70#X=1l%}v7{$tr>gXdK~bV%X4@ zOMRNNOwdJh1xeO_9qWW6oxubW7EVa5guzxdDzoW)Q~AHweyC*g!S+KTy8lTA#L`Ik z_qQJk%09?|m>BF**^+TpkZ(fclT^$?*kREGks5cSTuQpYlBE$h&>1w;j#_SOZ7`1t zXQqR9QVR@-;R^gvT{k3dijAgU;Zx2{e0ZV^to=RAh|i+|2T#-9-kKN~p`tR%bE-3O z1j=H$H7NPgKg7TQwpkb#*5GS&IYQW!%kiNq88M}{LyuYG!}uGG+MjOA!*(tlR>rbm z!AI<|s(C+wEL*(`_}L!8qB}glt3v+{4!{L*QZQBsDZdK_Xgm7t6}5%@*(v8|=6^8t<^1b%M<8i@uj zXwNTHd)vGFT|7bid~Swm>(VshC$$X0mjF^Je|i&ldl*QcZjRu?<%|@1S~_-XZRe6Xob*A7YH?Q z0!0GNjE5(eZxLQs?veM#V?ZazcvKj! ze`u{=c~kzQ9YHr&kgc+_Ukp@qicK03fT&$nkRJkc7M-a3bJ3 zZrYx_!@msifa{q&N*==_5Vup%G$Ljq5oQk>OyOAvx7YLIySRdiqXb+a9bO>n%?utC zOreu91Rc0R|Ar#=TfKb^3vODLm_C8-i!L>U%JFb!Jd_?8gpqYv{A9?7l!;!f0KLgG zUYVKMM^^9U5H@1sTqhRC%K%l-EfXL>;94tiU|HkWxKYD*ZWLkYmw}H?PqDf<9A2;$ zI}av)0Nh^;@oqBK9p6n%L0>}uPdgy9C;LCF?slq;J-m3l{r$#zXT6$T-NQF5)IV(O zKiz)5U!ertAoqW)wx3k1TR&ER+1OfNs5<|SH&Y&9={)Of?JuEMq*a~o@lowPUESPdS2L^6 z0sSuFtJb!6e%#&o?&*H@bbAxtpL^Bg4j@~7yxGyNFsQZ7)s1Hh)%xnQ)$a)1Znce8 zc4t^jp{ss)+F=s=TgCsc?Qh@?FNU$UO+V4K{RND2cRy79VPmheP_6E6>=7YPcDJ7` z%n+TZf!5Io>TPwj6{1=Y6lMfPh_L4vw8K)ZcUCvi7N%!QhUkTt3h(07zt~yC;oimZ zFJMT@s`;_0t71$Gs`BQ|jkV6!UT3fSWCNH1Uml~_qOG3sQeeqiy7TXAxJM2g6y^K4 zDSjbT7i%~h=fA-W>kTWHuO)YWfzmF-uLWWop=j)?Xd`B1t&~zE^@T|`Al#rjcEk#& z{GZ9eDn1rxi3pR7tZ-!kOSfhozuQ2Vt;@m5fbYH!!f$pemK`%SSVuN92T93v+p8N} zLm%eJ?FCKMAg8RLysRhM*%;dakN#!ZF81Q;@XLB_i-o+0Kix$T7&XScpQPtAqc3tgRGN{}ec z*IgleSK+}GdVrxCjZ;54e}x+qxz)zc+G>w)wOgy=1_(K>RpUX*lKSlX2*?i%cQE>7W{*X!f(Sz0{^MK5a49an585usnoDAG>zmI9?x&(n~zY zgAo@^yW3sg*zI=pfE##`kQ+gOWd==y0b;>eI(Oi@{&MORI-)4WMA5A|_s$M(v^i*; zC1KE-p9yMiMe;7tGCK%XMSg@EFS6oYf@VVqOl|TYB4_v*!zeU}IFQ)Q^+SQosf{KI z-f@)w*Un5VDuXi`4_<+I#P*`y5<}u&uW(xrt0NFnkXhhNPNYz4H%1=v6ADgiL9ox8(a4iG&!5#RE>*=>S0<5vaaO`BwS)9mhQNY zl}#x0HJo(uVdy_s-+ucoObVTU2cYdo?e)%+jjhi7OohKcRD)w>|0~tX67Fy?W8#YO=Gfv{$gMEIo##1RE7(T7buS(cakr3 z?4W21xS8oYB|!8?tA%JMhj$)Tzg1aM_KlY212nLOUNEYY!z17TF*c`Fm4i#0#N8=* zvZM6@gxQdBg<1_=$_~FNJ@(a<3#FzZ**b#TAHu;m8%uqhI=Wqs!h_mP9MeeZNZXkpv>;~Aaoq|l8AW-V8 zBOFh1fkz>R3+-5XEoNrsr?wo4{s!aE>fT-lwj!8gQgTl^oS&bYdH>6dus^ay@dyP= z6lpFWJpTuqOf+MZquPrn{&!DO|7ie*>HD7s;C~u`|7igJKm&09OkY>yN#Gi#Jx-1e_arqr)k}VY z1FE^0r4eouM_tez{cqB?8W*l%@7TwcXPj^0gbA9$GT5s9ywClyu{PbzlJ((`DJ|T3 zNE1bXgj3ti$8NVroxfi7PWOjtld-iM_5bHv18@pk_3s<>w;$Z+M;P(9w;yr; z_hR|ax9=0jV845EKbg|4+agQyY9P`%M$O}zNJ$mM1?!t1twY1$5%XF|Xg5~EI`gf3 ztjm|j;q!+_@QNl{8QPZpcsLLC(0l|`u61;bzX=g^BGhRJotPRNxyTa|2Yl#MFy5&# zPCE#THkg}yXbr7N0K+%1QIFh`#(;E^fU{1_%lT0sTHrIp#vR1!)XajjdZ-X_DEnm9 ztHe&;)TEZl8q&SEK)Z*>vT=Tcm@HnmQB5O4ON&43sXGZ$*g`}RM`^qGG?|uw^xJu0 z**5G1S=#|=3VPZ^qP;eBnChIC-R)iu&8Vtll~|DFg_hfpnv0XLKrDu3<#CJRjFPI3 z#ARfAr`!2A-~(}QL&D}h5^#|#Ch)-Wevi=s@xK=aFZ9yk>SPi#BcMo&3zOEi_Hpdc98fmPy3Dq9~K3_ zW5I8Wk_ZGo(*i5Ynq(rTO8?v}T8s$mHjXHPnhgnWLEI9?a=`eAWh6o{C27DK)4)Vy zB9Vl zA#6SjGK577w+s=JAPA-6$!i5|0;aIPRy5ec_eMY`(}o0Nq;eUXCKPuy%h}Zgv|0t# zE1~)^s@+Tc&pXCXlemwu3@HWCwrsNh*I~T3G1f6+gstQLn?7##ez7BGV_IGaTFF&X_!tqbLT@*AGhs#aJ+X!osjoRb9x7_#LMmQ zg%stlz}pXSK{Cbo;qzq&e1MM`${0HlW?^p6h*vy&w(*xXPhJ!pvq7a+);Oh zDrr@&M;%YvHK1BHKjeiUtoRP#g{vWaBF6$UHH~^M|H=W}Y>T9tQCWBThNHPoZ6ncK ztlSfP__kB`0-dvq%Xbki|G=%Lkw~DjhB=vz*Z)ZyxjMb26B`#y>)?ery?ik31B*J* z#fJTM6D`|3y{$m91h27Z$;BQy%R;69ygG-2`I|{$d{gaS_6SrveQ#><(7Xw#XC#ee zyPg!K=9_#%Xe#$eK(Hd-TvU+D#e1`bk0~k+o@zakmzJ)536SF37r$9rOd~NVF`qbh zPjBz|N{MGxkt5%}U#ggn`fEB4-Nc?977#~`lm36SY7-m=za=^<-)=h6R>W&K_y#69 zLcqo|TL-C+VFT^M4H5sxP{`2PXy%S{Jr?h}TXPw(f!m*B=wSzzj&!fLY*zQyurz}y zNp9Y(cO-EUspKf?J>_N;(~ov|lYgW_l2qqpR~jeAxWh7r-#1*uqAr>a-&S()7c?Cu z>xPT7DIJj0I{dvJvnWXBnC`u4A__LuPqs4F)LK}C?cC6;?JPbFv3tUJXgf$J6fNbQ zTgZyoG;on(07x`KN|T$IK;)X&BOIQ?dfO^MV;mixPIB)}Sh=A&td_33>v{%mPl*tL zze^mkMej`qff=$vD3z_OTs!j^4N&LR)JO%7k+gcdUV%^rH@qzo#QEthA?MZ3Rp#utiT`8*t3U%_^KIx*6ynwQ9mDU~CqF zlgmzayOGyAu0_)N)3=t$6^(6=MQ1w}HmmKFYbO+n zeq%g0CT~I6qPKcNVcI_zf@&Qhrjv1k;{bS#a{y^lMlDJtZsFTvh;M9l!VFK3(~?>Z zEAFK^(6!}DuJpC#3&l$o3GaMa1KAT+(XBSH-cYwX2$l%vo#_lraX5~)=IhS_iY;Q^Y zd875w02lS}B%_NJa;r*HjL*H?<^S0xKcz)}0YG0)(C(Q_UDlHqG}-&s1}-yjQAF4M zJDSCk*=Z3M{NeA`mKQ$^*bM&jVq{T@Kuy5bfLbtC{GC-IC{YrR>V`tAo3TeNJrTJO zBxEMgZv8;#%B*)fB8XKeZZK)n9H&fq&cu5KYy|*tC90mDPM#fnoNPoc+O3wvB}Ei1 z>8(&+!#xUSaE%roN@rU{8eTBagBu(e9k;L))*Z-|=Yj#J zFsvBW6Pzr0rJ@T&LZ$~BcRa$$8eA3Oe4xW03}swhbY=?9t0`g<{7-oC4U#IabSB8W zoGl|E_Hy{S_#u*yzrs-?m95?=qeA{p@!=3s6?^J z{*w<&%!dknDtS@k&+D~>_svJAKM}nAF*rxZr$2$UTv#jV3_N`R$;MUZBKz`_Q@XYL zt);rcP%&}gk6+I#yqOl>423bZ7>s&yet}E%nWkSO{ZqD70&RW}o3jNg19Cn1umqAl zOrCA5eEb2X=$9Z?$xw7Yrv$WCDF#j03~+iH-(=wPvJ%sZ@qc zGtO|mH{zuVrRyWg_WV0@U;{ar5}Ti6=Qs9-@4JSxyJezQQ8cw0;T@CcrUPbuDoQ+vxzxRrB=`eonmhY!5l*FR|!(Q0wvXK_I@((ynglr~H zI23z=B~mm?Cw!`!@a>!S&fX(ya-05f2MLbvQLjURb=KZ5?ak zKHQRAe=U)s5HMBuc#fapqTuJz$Z`uy)wl z@h-`r9f21*R~c2bJ808cBYAquvxE14x(EG1BY5o-qoSheS~Jx>D#4gvBF4jPK^vc9 zeHz*JKKV3TUS1rO^^_@ZC;j3;lp)wD%o}tn-@3>C|EYy+IIZ^-^`r)E=lf)wVhB>9 zWu6D?+W1PiwD3fXoHh}Ga%VTM<*o61?Wp}+8;GAPn&8&@cZob^3E)L zgP4(yOJRl=_i`R4X@iUTxS$p1twI^OFX5Go`;PLjOYz36N$49G62P@g@_71-A!JQQr zSzHp0A2*uOp{_fVOc}2t}yTeJ}5Gznw-ELT*iv~5CR~Hqf4`$Ik zk`zLpl>sa2H5g=@*Zw>W)}%H#%7vPufwP|vbO($_DTIApQC=baoTLmYYCn)5CVY{q zjTDmzd#I-Io>{%9+k|cALd_F7sT6xe8d)K$TbmI1a|=xG#Nv74snmR@_tX@wVjY{; zTMQ6et@N+jqaU|-#1k{ir?`ZeS0t`Zb#sjf$tTxE|0N=ao4Gl6YW=t^`R#AwHZHVw z#rMR~lT5hE9cvtV^#yC)F% z1B8!LAlOdd2!yeL8X$a}0^uw;XtoGLEVjz*xCoBzU!Kt0FQ!-Jx#TA{g$x2?HEulB z1pqK>Wsdp~kE1xp!|Ud>e?JcoxESi>kuC3(dneQ>n5C-;A&vpJQ!nl?W&5F77aI?+d`> zD1z`_vo7k$WI0ufz^o02iHifx%1EPmEnKdCCl1$X-94cYg{~I&=RY zF=W*=irH;4!17$(0E?a%mIFd9+7S+*zXp=N`o&hSb`uO zi~DQxCmM^oJ<&krlbjWm1v_AH`q!hU(e55a`w6h`21^$v-@hl zEV8>7yK(<@p{@?l*Z3FiR}HG{U;`%a);>pQ9f0cSx`X_QTiJt>*hhXtU4Q8dl)76M zX!4A?F%51=jlO@hJ-hRGw*7c#_6YwyevI7|2r2Pe+fu-$po)yAE_}E!7kaN|M8Pt~ zXwEdjFZGG2Fk2iF36dNwY{&$QRk2bfEM=M`T7jwncCKL0ao#jt;4)uHj>V=v6v4B~ zoj4k~E~{KkGtfoeErmd9*e~JSMu~BF?ur!ed_M=BI1RQ|yXKz0ED z@}j|_p!;%zepX^Mx3axhVLTq=j%7K$j74?a;KgYRwI+hrMd*H0LigJ^EuO8eYUrLE zf^a@k=DHszW9Ng5@IB=M@M13HIslo?t5D4rI8*>EqiDboVkDFGFwSh^5$9n)SnerV zN-dfNrrr+fT4hB*;;YI`q^SP6ix3(BBVjhOCWhPlg~>tX8CKyd&o*^qoDEiGlq&1Q zL3nSzDQ1F1X%H-U5_CFcOb?$s;o z2s*zRFfZK*kYSX3*uM!hPRvkLLG_0{Pza3i?Q}4lPa_mv$9~K4>LrV=Pr&R#Cjs$$ z4i zNEJcSdP~Ir*ATt94NtkEYU?J-2irbSYoVNNUEe$8{h6oR;oG%J^Z_5pVZxAx&E#wRvR#dF}SDqZMhsT3TW<{}7~43E0U zZ|e$G8|)Jha=O;ERRWY0Dlozl-E+CDs=tRz@&HHzHWA7`kZ~JDb$<&A7u@5JGCdWHx6Uatyj00^9K+f!SuQmXP>RF3jSjvj&97 zTH-D$OP062MVN`$C_m|CurXL47lB&?`YF>~76M|_K7@-)E zjppJtI7>=8Fq!FF9+ZT9UNGZwIq#AQE)|(*HY+EJO;IS3ImnT9XF-kVk}CfRLSXgP zWZApayX!zVfLbZFX)Ef=h3-;X_RN z*g?Y+qic7?s3c+)`2yY_h+!dLluqpz;vKP=Rj5!SV8tRj`N)|8l)4Vk&E=|sM#3Do zZE8MZ4a^e!v9gZG7CYww7ogxxm|!&v2Q_$EVU_JpD)q)zrO~Uvh^XR8?p!7B*^$~8MSsfO8BFRCsCMd>fWwr~H5rhD&B4}M3_}tL z2qk5x)sc*&5k(xrL8+@>k6%GaM*x&L7b+N^5!5SjQa(i zcqu9@y9QSu%d9r|QW9Z_*}CdlFfbfLM7!!Rh=Jtlj|>g0kSIs_0epOQP=0fHSeYQ+ zpQ#v20Zb$g6png`K7p?S#%oE>VmX#ZW+*u ztlepkoo3G5(n+Ts(Uk`tCD& z2mJgcuIT;a%YQuFe}?;rpWv%(rUV=iPiFumx>O3223uU!4ypM{oEx1u2r-KQ*)^pl zc&4x{T0rB3$mA0N zQQ;}NO^xJ`6>I>+iCLbWR^DqY&DCKk3ei1mU`x=^ott`8Qub~FgE6F(h;&gA)$npU z|DD6eX~8lFV-Rr=OjZ3Y_?OjwHk+21;C=%WC|_RBmG^%wgp4ceoh|NAFc}3u^}FX- zmd5JhyZ)h>$wRD=pW%YkMD;cIUEQ>xTC28}c3NYh+Ax{MBFJQ&y|4BT_n+)N7x8If zbx^hg@eZ{9@mZd=zUz)hIDoqqZlm#IzH-0)yZkNE|GXP?K21#l=O$xWNqT zVEG6tzds)5a?BIiiGX{1mDXP@w$sVgWos}R9KsD%?Z94tW>1hdW&l5}dvz$#khfiY z2)QK=+h@-6@zwLu)2pdwJrBv879}?rC5FKGZ}Ad43e0j@`WIIrQg$U<#nyb;Fs&6( zMP8sz8|%Js{^jSV0itfyfPW9baZ9YO+bT}6tHOc#rvbf(gR}P^Agt=o{d0XCV}&!_ z{qEbWjcXTqZ~<94aTFYvc!0XR>%+_PQ(HR!)mnOci*c_>#^Xd-y^Ae>sxKLedy)ecYPJ zAbN*nDNa5U;lgfyaV2TSz*bAygZmqw zWPiYZi0lbgtI-HA1MEI*oJivm*ybaD3U;%WgU>9u8({ABt)?yy2( z^lLK7j|VuJ)605x$EYX|x$Sw9wdH)*zSX$PmEauSc6SI>D)jMJ5%Rh$FlSgxiT-9k4yU6&m21`L)1YV^0<=DQ~^pRFw{eEzrp{xAQ!`A>iIm;d_Dzxwa3v(A64 S|Jz^w`lF9N`ts@5PyYv%osr4_ literal 0 HcmV?d00001 diff --git a/spec/Coduo/PHPHumanizer/StringSpec.php b/spec/Coduo/PHPHumanizer/StringSpec.php index 327f7af..a360bff 100644 --- a/spec/Coduo/PHPHumanizer/StringSpec.php +++ b/spec/Coduo/PHPHumanizer/StringSpec.php @@ -15,7 +15,7 @@ function it_humanize_string() function it_humanize_string_with_special_character() { - $this->humanize('news-count', true, Humanize::SEPARATOR_DASH)->shouldReturn('News count'); + $this->humanize('news-count', true, '-')->shouldReturn('News count'); } function it_humanize_strings_without_capitalize() diff --git a/src/Coduo/PHPHumanizer/String.php b/src/Coduo/PHPHumanizer/String.php index 43668b6..38dd31b 100644 --- a/src/Coduo/PHPHumanizer/String.php +++ b/src/Coduo/PHPHumanizer/String.php @@ -7,7 +7,7 @@ class String { - public static function humanize($text, $capitalize = true, $separator = Humanize::SEPARATOR_UNDERSCORE) + public static function humanize($text, $capitalize = true, $separator = '_') { return (string) new Humanize($text, $capitalize, $separator); } diff --git a/src/Coduo/PHPHumanizer/String/Humanize.php b/src/Coduo/PHPHumanizer/String/Humanize.php index b8a0dec..d4eaa17 100644 --- a/src/Coduo/PHPHumanizer/String/Humanize.php +++ b/src/Coduo/PHPHumanizer/String/Humanize.php @@ -4,9 +4,6 @@ class Humanize { - const SEPARATOR_DASH = '-'; - const SEPARATOR_UNDERSCORE = '_'; - /** * @var array */ @@ -32,7 +29,7 @@ class Humanize * @param bool $capitalize * @param string $separator */ - public function __construct($text, $capitalize = true, $separator = self::SEPARATOR_UNDERSCORE) + public function __construct($text, $capitalize = true, $separator = '_') { $this->text = $text; $this->capitalize = $capitalize; From ce13d359518b6e571e4ad6004b24b1163de9d35c Mon Sep 17 00:00:00 2001 From: Ezra Pool Date: Thu, 29 Oct 2015 20:36:58 +0100 Subject: [PATCH 037/193] Recreate all tests and some more using phpunit. PHPUnit 4.5 is the first version that includes prophecy so we need at least that or the newest version --- .travis.yml | 1 + composer.json | 8 +- tests/unit/DateTime/DifferenceTest.php | 54 +++++ tests/unit/DateTime/FormatterTest.php | 66 ++++++ tests/unit/DateTimeTest.php | 165 ++++++++++++++ tests/unit/NumberTest.php | 295 +++++++++++++++++++++++++ tests/unit/StringTest.php | 74 +++++++ 7 files changed, 661 insertions(+), 2 deletions(-) create mode 100644 tests/unit/DateTime/DifferenceTest.php create mode 100644 tests/unit/DateTime/FormatterTest.php create mode 100644 tests/unit/DateTimeTest.php create mode 100644 tests/unit/NumberTest.php create mode 100644 tests/unit/StringTest.php diff --git a/.travis.yml b/.travis.yml index 27cece7..c7c5955 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,3 +22,4 @@ install: script: - ./bin/phpspec run --format=pretty + - ./bin/phpunit -vvv tests/ diff --git a/composer.json b/composer.json index 48d0fd8..3c90b2f 100644 --- a/composer.json +++ b/composer.json @@ -21,13 +21,17 @@ "symfony/yaml": "~2.3" }, "require-dev": { - "phpspec/phpspec": "2.0.*" + "phpspec/phpspec": "2.0.*", + "phpunit/phpunit": "^4.5|^5.0" }, "config": { "bin-dir": "bin" }, "autoload": { - "psr-4": {"": "src"} + "psr-4": { + "": "src", + "Coduo\\PHPHumanizer\\Tests": "tests/" + } }, "extra": { "branch-alias": { diff --git a/tests/unit/DateTime/DifferenceTest.php b/tests/unit/DateTime/DifferenceTest.php new file mode 100644 index 0000000..f562662 --- /dev/null +++ b/tests/unit/DateTime/DifferenceTest.php @@ -0,0 +1,54 @@ +assertTrue(is_a($diff->getUnit(), $instance)); + $this->assertEquals($expected, $diff->getQuantity()); + $this->assertEquals($isPast, $diff->isPast()); + } + + /** + * @return array + */ + public function differenceDataProvider() + { + return array( + array(15, new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:45:00"), 'Coduo\PHPHumanizer\DateTime\Unit\Minute', true), + array(15, new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:15:00"), 'Coduo\PHPHumanizer\DateTime\Unit\Minute', false), + array(2, new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 11:00:00"), 'Coduo\PHPHumanizer\DateTime\Unit\Hour', true), + array(3, new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 16:00:00"), 'Coduo\PHPHumanizer\DateTime\Unit\Hour', false), + array(1, new \DateTime("2014-04-10"), new \DateTime("2014-04-09"), 'Coduo\PHPHumanizer\DateTime\Unit\Day', true), + array(1, new \DateTime("2014-04-10"), new \DateTime("2014-04-11"), 'Coduo\PHPHumanizer\DateTime\Unit\Day', false), + array(2, new \DateTime("2014-04-15"), new \DateTime("2014-04-01"), 'Coduo\PHPHumanizer\DateTime\Unit\Week', true), + array(2, new \DateTime("2014-04-01"), new \DateTime("2014-04-15"), 'Coduo\PHPHumanizer\DateTime\Unit\Week', false), + array(1, new \DateTime("2014-04-01"), new \DateTime("2014-03-01"), 'Coduo\PHPHumanizer\DateTime\Unit\Month', true), + array(1, new \DateTime("2014-04-01"), new \DateTime("2014-05-01"), 'Coduo\PHPHumanizer\DateTime\Unit\Month', false), + array(2, new \DateTime("2014-01-01"), new \DateTime("2012-01-01"), 'Coduo\PHPHumanizer\DateTime\Unit\Year', true), + array(1, new \DateTime("2014-01-01"), new \DateTime("2015-01-01"), 'Coduo\PHPHumanizer\DateTime\Unit\Year', false), + ); + } +} + diff --git a/tests/unit/DateTime/FormatterTest.php b/tests/unit/DateTime/FormatterTest.php new file mode 100644 index 0000000..1afc48a --- /dev/null +++ b/tests/unit/DateTime/FormatterTest.php @@ -0,0 +1,66 @@ +prophesize('Symfony\Component\Translation\Translator'); + + $translator->transChoice( + 'minute.past', + 10, + array('%count%' => 10), + 'difference', + 'en' + )->willReturn('10 minutes ago'); + + $translator->transChoice( + 'minute.past', + 10, + array('%count%' => 10), + 'difference', + 'pl' + )->willReturn('10 minut temu'); + + $diff = $this->prophesize('\Coduo\PHPHumanizer\DateTime\Difference'); + + $diff->getUnit()->willReturn($unit); + $diff->getQuantity()->willReturn($quantity); + $diff->isPast()->willReturn($isPast); + + $formatter = new Formatter($translator->reveal()); + + $this->assertEquals($formatted, $formatter->formatDifference($diff->reveal(), $locale)); + } + + /** + * @return array + */ + public function formatterDataProvider() + { + return array( + array(new Minute(), 10, true, '10 minutes ago'), + array(new Minute(), 10, true, '10 minut temu', 'pl'), + ); + } +} \ No newline at end of file diff --git a/tests/unit/DateTimeTest.php b/tests/unit/DateTimeTest.php new file mode 100644 index 0000000..d474b8d --- /dev/null +++ b/tests/unit/DateTimeTest.php @@ -0,0 +1,165 @@ +assertEquals($expected, $datetime->difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); + $this->assertEquals($expected, DateTime::difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); + } + + /** + * @dataProvider preciseDifferenceDataProvider + * + * @param $firstDate + * @param $secondDate + * @param $expected + * @param string $locale + */ + public function test_humanize_precise_difference_between_dates($firstDate, $secondDate, $expected, $locale = 'en') + { + $datetime = new DateTime(); + + $this->assertEquals($expected, $datetime->preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); + $this->assertEquals($expected, DateTime::preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); + } + + /** + * @return array + */ + public function humanizeDataProvider() + { + return array( + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'just now'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", '5 seconds from now'), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 minute ago'), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 minutes ago'), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", '15 minutes from now'), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", '1 hour from now'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", '2 hours from now'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 hour ago'), + array("2014-04-26", "2014-04-25", '1 day ago'), + array("2014-04-26", "2014-04-24", '2 days ago'), + array("2014-04-26", "2014-04-28", '2 days from now'), + array("2014-04-01", "2014-04-15", '2 weeks from now'), + array("2014-04-15", "2014-04-07", '1 week ago'), + array("2014-01-01", "2014-04-01", '3 months from now'), + array("2014-05-01", "2014-04-01", '1 month ago'), + array("2015-05-01", "2014-04-01", '1 year ago'), + array("2014-05-01", "2016-04-01", '2 years from now'), + + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'w tym momencie', 'pl'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", 'za 5 sekund', 'pl'), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", 'minutę temu', 'pl'), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 minut temu', 'pl'), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", 'za 15 minut', 'pl'), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", 'za godzinę', 'pl'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", 'za 2 godziny', 'pl'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", 'godzinę temu', 'pl'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", 'za 2 godziny', 'pl'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", 'godzinę temu', 'pl'), + array("2014-04-26", "2014-04-25", 'wczoraj', 'pl'), + array("2014-04-26", "2014-04-24", '2 dni temu', 'pl'), + array("2014-04-26", "2014-04-28", 'za 2 dni', 'pl'), + array("2014-04-01", "2014-04-15", 'za 2 tygodnie', 'pl'), + array("2014-04-15", "2014-04-07", 'tydzień temu', 'pl'), + array("2014-01-01", "2014-04-01", 'za 3 miesiące', 'pl'), + array("2014-05-01", "2014-04-01", 'miesiąc temu', 'pl'), + array("2015-05-01", "2014-04-01", 'rok temu', 'pl'), + array("2014-05-01", "2016-04-01", 'za 2 lata', 'pl'), + array("2014-05-01", "2009-04-01", '5 lat temu', 'pl'), + ); + } + + /** + * @return array + */ + public function preciseDifferenceDataProvider() + { + return array( + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minute, 45 seconds ago'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 hour, 40 minutes ago'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 day, 15 minutes from now'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 days, 2 hours from now'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 year, 2 days, 4 hours from now'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 days, 10 hours from now'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 day, 1 hour, 40 minutes ago'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 years, 1 day from now'), + + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuta, 45 sekund temu', 'pl'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 godzina, 40 minut temu', 'pl'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 dzień, 15 minut od teraz', 'pl'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 dni, 2 godziny od teraz', 'pl'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 rok, 2 dni, 4 godziny od teraz', 'pl'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 dni, 10 godzin od teraz', 'pl'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 dzień, 1 godzina, 40 minut temu', 'pl'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 lata, 1 dzień od teraz', 'pl'), + + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 Minute, 45 Sekunden vor', 'de'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 Stunde, 40 Minuten vor', 'de'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 Tag, 15 Minuten ab jetzt', 'de'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 Tage, 2 Stunden ab jetzt', 'de'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 Jahr, 2 Tage, 4 Stunden ab jetzt', 'de'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 Tage, 10 Stunden ab jetzt', 'de'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 Tag, 1 Stunde, 40 Minuten vor', 'de'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 Jahre, 1 Tag ab jetzt', 'de'), + + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 dakika, 45 saniye önce', 'tr'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 saat, 40 dakika önce', 'tr'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 gün, 15 dakika sonra', 'tr'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 gün, 2 saat sonra', 'tr'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 yıl, 2 gün, 4 saat sonra', 'tr'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 gün, 10 saat sonra', 'tr'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 gün, 1 saat, 40 dakika önce', 'tr'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 yıl, 1 gün sonra', 'tr'), + + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minute, 45 secondes il y a', 'fr'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 heure, 40 minutes il y a', 'fr'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 jour, 15 minutes maintenant', 'fr'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 jours, 2 heures maintenant', 'fr'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 année, 2 jours, 4 heures maintenant', 'fr'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 jours, 10 heures maintenant', 'fr'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 jour, 1 heure, 40 minutes il y a', 'fr'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 années, 1 jour maintenant', 'fr'), + + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuto, 45 segundos atrás', 'pt_BR'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 hora, 40 minutos atrás', 'pt_BR'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 dia, 15 minutos a partir de agora', 'pt_BR'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 dias, 2 horas a partir de agora', 'pt_BR'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 ano, 2 dias, 4 horas a partir de agora', 'pt_BR'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 dias, 10 horas a partir de agora', 'pt_BR'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 dia, 1 hora, 40 minutos atrás', 'pt_BR'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 anos, 1 dia a partir de agora', 'pt_BR'), + + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuto, 45 secondi fa', 'it'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 ora, 40 minuti fa', 'it'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 giorno, 15 minuti da adesso', 'it'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 giorni, 2 ore da adesso', 'it'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 anno, 2 giorni, 4 ore da adesso', 'it'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 giorni, 10 ore da adesso', 'it'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 giorno, 1 ora, 40 minuti fa', 'it'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 anni, 1 giorno da adesso', 'it'), + ); + } +} \ No newline at end of file diff --git a/tests/unit/NumberTest.php b/tests/unit/NumberTest.php new file mode 100644 index 0000000..4a2fac0 --- /dev/null +++ b/tests/unit/NumberTest.php @@ -0,0 +1,295 @@ +assertEquals($expected, $numberobj->ordinal($number)); + $this->assertEquals($expected, Number::ordinal($number)); + } + + /** + * @dataProvider ordinalizeDataProvider + * @depends test_return_ordinal_suffix + * + * @param $expected + * @param $number + */ + public function test_ordinalize_numbers($expected, $number) + { + $numberobj = new Number(); + + $this->assertEquals($expected, $numberobj->ordinalize($number)); + $this->assertEquals($expected, Number::ordinalize($number)); + } + + /** + * @dataProvider binarySuffixDataProvider + * + * @param $expected + * @param $number + * @param string $locale + */ + public function test_convert_number_to_string_with_binary_suffix($expected, $number, $locale = 'en') + { + $numberobj = new Number(); + + $this->assertEquals($expected, $numberobj->binarySuffix($number, $locale)); + $this->assertEquals($expected, Number::binarySuffix($number, $locale)); + } + + /** + * @expectedException InvalidArgumentException + */ + public function test_non_statically_throw_exception_when_converting_to_string_with_binary_suffix_non_numeric_values() + { + $numberobj = new Number(); + + $numberobj->binarySuffix('as12'); + } + + /** + * @expectedException InvalidArgumentException + */ + public function test_statically_throw_exception_when_converting_to_string_with_binary_suffix_non_numeric_values() + { + Number::binarySuffix('as12'); + } + + /** + * @dataProvider metricSuffixDataProvider + * + * @param $expected + * @param $number + * @param string $locale + */ + public function test_convert_number_to_string_with_metric_suffix($expected, $number, $locale = 'en') + { + $numberobj = new Number(); + + $this->assertEquals($expected, $numberobj->metricSuffix($number, $locale)); + $this->assertEquals($expected, Number::metricSuffix($number, $locale)); + } + /** + * @expectedException InvalidArgumentException + */ + public function test_non_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() + { + $numberobj = new Number(); + + $numberobj->metricSuffix('as12'); + } + + /** + * @expectedException InvalidArgumentException + */ + public function test_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() + { + Number::metricSuffix('as12'); + } + + /** + * @dataProvider romanDataProvider + * + * @param $expected + * @param $number + */ + public function test_converts_numbers_to_roman($expected, $number) + { + $numberobj = new Number(); + + $this->assertEquals($expected, $numberobj->toRoman($number)); + $this->assertEquals($expected, Number::toRoman($number)); + } + + /** + * @dataProvider romanDataProvider + * + * @param $expected + * @param $number + */ + public function test_convert_roman_numbers_to_arabic($number, $expected) + { + $numberobj = new Number(); + + $this->assertEquals($expected, $numberobj->fromRoman($number)); + $this->assertEquals($expected, Number::fromRoman($number)); + } + + /** + * @dataProvider romanExceptionProvider + * @expectedException InvalidArgumentException + * + * @param $number + */ + public function test_non_statically_throw_exception_when_converting_number_is_out_of_range($number) + { + $numberobj = new Number(); + + $numberobj->toRoman($number); + } + + /** + * @dataProvider romanExceptionProvider + * @expectedException InvalidArgumentException + * + * @param $number + */ + public function test_statically_throw_exception_when_converting_number_is_out_of_range($number) + { + Number::toRoman($number); + } + + /** + * @dataProvider arabicExceptionProvider + * @expectedException InvalidArgumentException + * + * @param $number + */ + public function test_non_statically_throw_exception_when_converting_roman_number_is_invalid($number) + { + $numberobj = new Number(); + + $numberobj->fromRoman($number); + } + + /** + * @dataProvider arabicExceptionProvider + * @expectedException InvalidArgumentException + * + * @param $number + */ + public function test_statically_throw_exception_when_converting_roman_number_is_invalid($number) + { + Number::fromRoman($number); + } + + /** + * @return array + */ + public function ordinalizeDataProvider() + { + return array( + array('1st', 1), + array('2nd', 2), + array('23rd', 23), + array('1002nd', 1002), + array('-111th', -111), + ); + } + + /** + * @return array + */ + public function ordinalSuffixProvider() + { + return array( + array('st', 1), + array('nd', 2), + array('rd', 23), + array('nd', 1002), + array('th', -111), + ); + } + + /** + * @return array + */ + public function binarySuffixDataProvider() + { + return array( + array(-1, -1), + array("0 bytes", 0), + array("1 bytes", 1), + array("1 kB", 1024), + array("1 kB", 1025), + array("1.5 kB", 1536), + array("5 MB", 1048576 * 5), + array("2 GB", 1073741824 * 2), + array("3 TB", 1099511627776 * 3), + array("1.18 PB", 1325899906842624), + + array("1,5 kB", 1536, 'pl'), + array("1,18 PB", 1325899906842624, 'pl'), + ); + } + + /** + * @return array + */ + public function metricSuffixDataProvider() + { + return array( + array("-1", -1), + array("0", 0), + array("1", 1), + array("101", 101), + array("1k", 1000), + array("1.2k", 1240), + array("1.24M", 1240000), + array("3.5M", 3500000), + + array("1,2k", 1240, 'pl'), + array("1,24M", 1240000, 'pl'), + array("3,5M", 3500000, 'pl'), + ); + } + + /** + * @return array + */ + public function romanDataProvider() + { + return array( + array("I", 1), + array("V", 5), + array("IX", 9), + array("X", 10), + array("CXXV", 125), + array("MCCC", 1300), + array("MMMCMXCIX", 3999), + ); + } + + /** + * @return array + */ + public function romanExceptionProvider() + { + return array( + array(-1), + array(4000), + ); + } + + /** + * @return array + */ + public function arabicExceptionProvider() + { + return array( + array(1234), + array(""), + array("foobar"), + ); + } +} \ No newline at end of file diff --git a/tests/unit/StringTest.php b/tests/unit/StringTest.php new file mode 100644 index 0000000..71a4215 --- /dev/null +++ b/tests/unit/StringTest.php @@ -0,0 +1,74 @@ +assertEquals($expected, $string->humanize($input, $capitalize)); + $this->assertEquals($expected, String::humanize($input, $capitalize)); + } + + /** + * @dataProvider truncateStringProvider + * + * @param $text + * @param $expected + * @param $charactersCount + * @param string $append + */ + function test_truncate_string_to_word_closest_to_a_certain_number_of_characters($text, $expected, $charactersCount, $append = '') + { + $string = new String(); + + $this->assertEquals($expected, $string->truncate($text, $charactersCount, $append)); + $this->assertEquals($expected, String::truncate($text, $charactersCount, $append)); + } + + /** + * + * @return array + */ + public function humanizeStringProvider() + { + return array( + array('news_count', 'News count'), + array('user', 'user', false), + array('news_id', 'News'), + array('news_count', 'News count'), + ); + } + + /** + * @return array + */ + public function truncateStringProvider() + { + return array( + array('Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', 'Lorem', 2), + array('Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', 'Lorem ipsum...', 10, '...'), + array('Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', 'Lorem ipsum dolorem si amet, lorem', 30), + array('Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', 'Lorem', 0), + array('Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', 'Lorem...', 0, '...'), + array('Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', -2), + ); + } +} \ No newline at end of file From 83f1ab479320b7884a87b858d921bf36ef9c6a3b Mon Sep 17 00:00:00 2001 From: Ezra Pool Date: Thu, 29 Oct 2015 20:37:20 +0100 Subject: [PATCH 038/193] Non-static method Coduo\PHPHumanizer\Number::fromRoman() should not be called statically, assuming $this from incompatible context --- composer.json | 2 +- src/Coduo/PHPHumanizer/Number.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 3c90b2f..6ee9669 100644 --- a/composer.json +++ b/composer.json @@ -30,7 +30,7 @@ "autoload": { "psr-4": { "": "src", - "Coduo\\PHPHumanizer\\Tests": "tests/" + "Coduo\\PHPHumanizer\\Tests\\": "tests/" } }, "extra": { diff --git a/src/Coduo/PHPHumanizer/Number.php b/src/Coduo/PHPHumanizer/Number.php index 560ed86..b354f53 100644 --- a/src/Coduo/PHPHumanizer/Number.php +++ b/src/Coduo/PHPHumanizer/Number.php @@ -40,7 +40,7 @@ public static function toRoman($number) return $romanNumeral->toRoman($number); } - public function fromRoman($number) + public static function fromRoman($number) { $romanNumeral = new RomanNumeral(); From bfca702bcb43dafffce3a33492b29111d4a96eb4 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 1 Nov 2015 13:36:02 +0100 Subject: [PATCH 039/193] Improved phpunit tests --- README.md | 3 + phpunit.xml.dist | 23 ++ spec/Coduo/PHPHumanizer/CollectionSpec.php | 53 --- spec/Coduo/PHPHumanizer/DateTimeSpec.php | 347 ------------------ spec/Coduo/PHPHumanizer/NumberSpec.php | 112 ------ spec/Coduo/PHPHumanizer/StringSpec.php | 54 --- .../PHPHumanizer/Tests/CollectionTest.php | 41 +++ .../PHPHumanizer/Tests}/DateTimeTest.php | 72 +++- .../PHPHumanizer/Tests}/NumberTest.php | 80 +--- tests/Coduo/PHPHumanizer/Tests/StringTest.php | 79 ++++ tests/bootstrap.php | 3 + tests/unit/DateTime/DifferenceTest.php | 54 --- tests/unit/DateTime/FormatterTest.php | 66 ---- tests/unit/StringTest.php | 74 ---- 14 files changed, 213 insertions(+), 848 deletions(-) create mode 100644 phpunit.xml.dist delete mode 100644 spec/Coduo/PHPHumanizer/CollectionSpec.php delete mode 100644 spec/Coduo/PHPHumanizer/DateTimeSpec.php delete mode 100644 spec/Coduo/PHPHumanizer/NumberSpec.php delete mode 100644 spec/Coduo/PHPHumanizer/StringSpec.php create mode 100644 tests/Coduo/PHPHumanizer/Tests/CollectionTest.php rename tests/{unit => Coduo/PHPHumanizer/Tests}/DateTimeTest.php (68%) rename tests/{unit => Coduo/PHPHumanizer/Tests}/NumberTest.php (69%) create mode 100644 tests/Coduo/PHPHumanizer/Tests/StringTest.php create mode 100644 tests/bootstrap.php delete mode 100644 tests/unit/DateTime/DifferenceTest.php delete mode 100644 tests/unit/DateTime/FormatterTest.php delete mode 100644 tests/unit/StringTest.php diff --git a/README.md b/README.md index f7ba58a..cd2ba68 100644 --- a/README.md +++ b/README.md @@ -194,6 +194,9 @@ Currently we support following languages: * [Português - Brasil](src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml) * [Italian](src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml) * [Dutch](src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml) +* [Norwegian](src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml) +* [Afrikaans] (src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml) +* [Bulgarian] (src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml) # Credits diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 0000000..546b974 --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,23 @@ + + + + + ./tests/ + + + + + ./src/Coduo/PHPHumanizer/ + + + \ No newline at end of file diff --git a/spec/Coduo/PHPHumanizer/CollectionSpec.php b/spec/Coduo/PHPHumanizer/CollectionSpec.php deleted file mode 100644 index 8e9a6fa..0000000 --- a/spec/Coduo/PHPHumanizer/CollectionSpec.php +++ /dev/null @@ -1,53 +0,0 @@ -oxford($example[0], $example[1])->shouldReturn($example[2]); - } - } - - function it_humanizes_collections_for_polish_locale() - { - $examples = array( - array(array("Michal"), null, 'Michal'), - array(array("Michal", "Norbert"), null, 'Michal i Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'Michal, Norbert i 1 inny'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'Michal, Norbert i 2 innych'), - ); - - foreach ($examples as $example) { - $this->oxford($example[0], $example[1], 'pl')->shouldReturn($example[2]); - } - } - - function it_humanizes_collections_for_dutch_locale() - { - $examples = array( - array(array("Michal"), null, 'Michal'), - array(array("Michal", "Norbert"), null, 'Michal en Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'Michal, Norbert, en 1 andere'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'Michal, Norbert, en 2 andere'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'Michal, Norbert, Lukasz, en Pawel'), - ); - - foreach ($examples as $example) { - $this->oxford($example[0], $example[1], 'nl')->shouldReturn($example[2]); - } - } -} diff --git a/spec/Coduo/PHPHumanizer/DateTimeSpec.php b/spec/Coduo/PHPHumanizer/DateTimeSpec.php deleted file mode 100644 index 529aff0..0000000 --- a/spec/Coduo/PHPHumanizer/DateTimeSpec.php +++ /dev/null @@ -1,347 +0,0 @@ -difference(new \DateTime($example[0]), new \DateTime($example[1]))->shouldReturn($example[2]); - } - } - - function it_humanize_difference_between_dates_for_pl_locale() - { - $examples = array( - array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'w tym momencie'), - array("2014-04-26 13:00:00", "2014-04-26 13:00:05", 'za 5 sekund'), - array("2014-04-26 13:00:00", "2014-04-26 12:59:00", 'minutę temu'), - array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 minut temu'), - array("2014-04-26 13:00:00", "2014-04-26 13:15:00", 'za 15 minut'), - array("2014-04-26 13:00:00", "2014-04-26 14:00:00", 'za godzinę'), - array("2014-04-26 13:00:00", "2014-04-26 15:00:00", 'za 2 godziny'), - array("2014-04-26 13:00:00", "2014-04-26 12:00:00", 'godzinę temu'), - array("2014-04-26 13:00:00", "2014-04-26 15:00:00", 'za 2 godziny'), - array("2014-04-26 13:00:00", "2014-04-26 12:00:00", 'godzinę temu'), - array("2014-04-26", "2014-04-25", 'wczoraj'), - array("2014-04-26", "2014-04-24", '2 dni temu'), - array("2014-04-26", "2014-04-28", 'za 2 dni'), - array("2014-04-01", "2014-04-15", 'za 2 tygodnie'), - array("2014-04-15", "2014-04-07", 'tydzień temu'), - array("2014-01-01", "2014-04-01", 'za 3 miesiące'), - array("2014-05-01", "2014-04-01", 'miesiąc temu'), - array("2015-05-01", "2014-04-01", 'rok temu'), - array("2014-05-01", "2016-04-01", 'za 2 lata'), - array("2014-05-01", "2009-04-01", '5 lat temu'), - ); - - foreach ($examples as $example) { - $this->difference(new \DateTime($example[0]), new \DateTime($example[1]), 'pl')->shouldReturn($example[2]); - } - } - - function it_humanize_difference_between_dates_for_af_locale() - { - $examples = array( - array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'nou nou'), - array("2014-04-26 13:00:00", "2014-04-26 13:00:05", '5 sekondes van nou af'), - array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 minuut gelede'), - array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 minute gelede'), - array("2014-04-26 13:00:00", "2014-04-26 13:15:00", '15 minute van nou af'), - array("2014-04-26 13:00:00", "2014-04-26 14:00:00", '1 uur van nou af'), - array("2014-04-26 13:00:00", "2014-04-26 15:00:00", '2 ure van nou af'), - array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 uur gelede'), - array("2014-04-26 13:00:00", "2014-04-26 11:00:00", '2 ure gelede'), - array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 uur gelede'), - array("2014-04-26", "2014-04-25", '1 dag gelede'), - array("2014-04-26", "2014-04-24", '2 dae gelede'), - array("2014-04-26", "2014-04-28", '2 dae van nou af'), - array("2014-04-01", "2014-04-15", '2 weke van nou af'), - array("2014-04-15", "2014-04-07", '1 week gelede'), - array("2014-01-01", "2014-04-01", '3 maande van nou af'), - array("2014-05-01", "2014-04-01", '1 maand gelede'), - array("2015-05-01", "2014-04-01", '1 jaar gelede'), - array("2014-05-01", "2016-04-01", '2 jaar van nou af'), - array("2014-05-01", "2009-04-01", '5 jaar gelede'), - ); - - foreach ($examples as $example) { - $this->difference(new \DateTime($example[0]), new \DateTime($example[1]), 'af')->shouldReturn($example[2]); - } - } - - function it_humanize_difference_between_dates_for_pt_locale() - { - $examples = array( - array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'agora'), - array("2014-04-26 13:00:00", "2014-04-26 13:00:05", '5 segundos a partir de agora'), - array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 minuto atrás'), - array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 minutos atrás'), - array("2014-04-26 13:00:00", "2014-04-26 13:15:00", '15 minutos a partir de agora'), - array("2014-04-26 13:00:00", "2014-04-26 14:00:00", '1 hora a partir de agora'), - array("2014-04-26 13:00:00", "2014-04-26 15:00:00", '2 horas a partir de agora'), - array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 hora atrás'), - array("2014-04-26", "2014-04-25", '1 dia atrás'), - array("2014-04-26", "2014-04-24", '2 dias atrás'), - array("2014-04-26", "2014-04-28", '2 dias a partir de agora'), - array("2014-04-01", "2014-04-15", '2 semanas a partir de agora'), - array("2014-04-15", "2014-04-07", '1 semana atrás'), - array("2014-01-01", "2014-04-01", '3 meses a partir de agora'), - array("2014-05-01", "2014-04-01", '1 mês atrás'), - array("2015-05-01", "2014-04-01", '1 ano atrás'), - array("2014-05-01", "2016-04-01", '2 anos a partir de agora'), - ); - - foreach ($examples as $example) { - $this->difference(new \DateTime($example[0]), new \DateTime($example[1]), 'pt')->shouldReturn($example[2]); - } - } - - function it_humanizes_precise_difference_between_dates() - { - $examples = array( - array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minute, 45 seconds ago'), - array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 hour, 40 minutes ago'), - array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 day, 15 minutes from now'), - array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 days, 2 hours from now'), - array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 year, 2 days, 4 hours from now'), - array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 days, 10 hours from now'), - array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 day, 1 hour, 40 minutes ago'), - array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 years, 1 day from now'), - ); - - foreach ($examples as $example) { - $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]))->shouldReturn($example[2]); - } - } - - function it_humanizes_precise_difference_between_dates_for_pl_locale() - { - $examples = array( - array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuta, 45 sekund temu'), - array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 godzina, 40 minut temu'), - array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 dzień, 15 minut od teraz'), - array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 dni, 2 godziny od teraz'), - array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 rok, 2 dni, 4 godziny od teraz'), - array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 dni, 10 godzin od teraz'), - array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 dzień, 1 godzina, 40 minut temu'), - array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 lata, 1 dzień od teraz'), - ); - - foreach ($examples as $example) { - $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'pl')->shouldReturn($example[2]); - } - } - - function it_humanizes_precise_difference_between_dates_for_af_locale() - { - $examples = array( - array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuut, 45 sekondes gelede'), - array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 uur, 40 minute gelede'), - array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 dag, 15 minute van nou af'), - array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 dae, 2 ure van nou af'), - array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 jaar, 2 dae, 4 ure van nou af'), - array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 dae, 10 ure van nou af'), - array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 dag, 1 uur, 40 minute gelede'), - array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 jaar, 1 dag van nou af'), - ); - - foreach ($examples as $example) { - $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'af')->shouldReturn($example[2]); - } - } - - function it_humanizes_precise_difference_between_dates_for_de_locale() - { - $examples = array( - array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 Minute, 45 Sekunden vor'), - array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 Stunde, 40 Minuten vor'), - array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 Tag, 15 Minuten ab jetzt'), - array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 Tage, 2 Stunden ab jetzt'), - array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 Jahr, 2 Tage, 4 Stunden ab jetzt'), - array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 Tage, 10 Stunden ab jetzt'), - array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 Tag, 1 Stunde, 40 Minuten vor'), - array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 Jahre, 1 Tag ab jetzt'), - ); - - foreach ($examples as $example) { - $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'de')->shouldReturn($example[2]); - } - } - - function it_humanizes_precise_difference_between_dates_for_tr_locale() - { - $examples = array( - array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 dakika, 45 saniye önce'), - array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 saat, 40 dakika önce'), - array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 gün, 15 dakika sonra'), - array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 gün, 2 saat sonra'), - array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 yıl, 2 gün, 4 saat sonra'), - array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 gün, 10 saat sonra'), - array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 gün, 1 saat, 40 dakika önce'), - array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 yıl, 1 gün sonra'), - ); - - foreach ($examples as $example) { - $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'tr')->shouldReturn($example[2]); - } - } - - function it_humanizes_precise_difference_between_dates_for_fr_locale() - { - $examples = array( - array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minute, 45 secondes il y a'), - array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 heure, 40 minutes il y a'), - array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 jour, 15 minutes maintenant'), - array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 jours, 2 heures maintenant'), - array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 année, 2 jours, 4 heures maintenant'), - array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 jours, 10 heures maintenant'), - array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 jour, 1 heure, 40 minutes il y a'), - array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 années, 1 jour maintenant'), - ); - - foreach ($examples as $example) { - $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'fr')->shouldReturn($example[2]); - } - } - - function it_humanizes_precise_difference_between_dates_for_pt_locale() - { - $examples = array( - array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuto, 45 segundos atrás'), - array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 hora, 40 minutos atrás'), - array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 dia, 15 minutos a partir de agora'), - array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 dias, 2 horas a partir de agora'), - array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 ano, 2 dias, 4 horas a partir de agora'), - array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 dias, 10 horas a partir de agora'), - array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 dia, 1 hora, 40 minutos atrás'), - array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 anos, 1 dia a partir de agora'), - ); - - foreach ($examples as $example) { - $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'pt_BR')->shouldReturn($example[2]); - } - } - - function it_humanizes_precise_difference_between_dates_for_pt_BR_locale() - { - $examples = array( - array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuto, 45 segundos atrás'), - array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 hora, 40 minutos atrás'), - array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 dia, 15 minutos a partir de agora'), - array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 dias, 2 horas a partir de agora'), - array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 ano, 2 dias, 4 horas a partir de agora'), - array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 dias, 10 horas a partir de agora'), - array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 dia, 1 hora, 40 minutos atrás'), - array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 anos, 1 dia a partir de agora'), - ); - - foreach ($examples as $example) { - $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'pt_BR')->shouldReturn($example[2]); - } - } - - function it_humanizes_precise_difference_between_dates_for_it_locale() - { - $examples = array( - array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuto, 45 secondi fa'), - array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 ora, 40 minuti fa'), - array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 giorno, 15 minuti da adesso'), - array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 giorni, 2 ore da adesso'), - array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 anno, 2 giorni, 4 ore da adesso'), - array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 giorni, 10 ore da adesso'), - array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 giorno, 1 ora, 40 minuti fa'), - array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 anni, 1 giorno da adesso'), - ); - - foreach ($examples as $example) { - $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'it')->shouldReturn($example[2]); - } - } - - function it_humanize_difference_between_dates_for_bg_locale() - { - $examples = array( - array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'в момента'), - array("2014-04-26 13:00:00", "2014-04-26 13:00:05", 'след 5 секунди'), - array("2014-04-26 13:00:00", "2014-04-26 12:59:00", 'преди 1 минута'), - array("2014-04-26 13:00:00", "2014-04-26 12:45:00", 'преди 15 минути'), - array("2014-04-26 13:00:00", "2014-04-26 13:15:00", 'след 15 минути'), - array("2014-04-26 13:00:00", "2014-04-26 14:00:00", 'след 1 час'), - array("2014-04-26 13:00:00", "2014-04-26 15:00:00", 'след 2 часа'), - array("2014-04-26 13:00:00", "2014-04-26 12:00:00", 'преди 1 час'), - array("2014-04-26", "2014-04-25", 'преди 1 ден'), - array("2014-04-26", "2014-04-24", 'преди 2 дни'), - array("2014-04-26", "2014-04-28", 'след 2 дни'), - array("2014-04-01", "2014-04-15", 'след 2 седмици'), - array("2014-04-15", "2014-04-07", 'преди 1 седмица'), - array("2014-01-01", "2014-04-01", 'след 3 месеца'), - array("2014-05-01", "2014-04-01", 'преди 1 месец'), - array("2015-05-01", "2014-04-01", 'преди 1 година'), - array("2014-05-01", "2016-04-01", 'след 2 години'), - ); - - foreach ($examples as $example) { - $this->difference(new \DateTime($example[0]), new \DateTime($example[1]), 'bg')->shouldReturn($example[2]); - } - } - - function it_humanizes_precise_difference_between_dates_for_bg_locale() - { - $examples = array( - array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 минута, 45 секунди преди това'), - array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 час, 40 минути преди това'), - array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 ден, 15 минути след това'), - array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 дни, 2 часа след това'), - array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 година, 2 дни, 4 часа след това'), - array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 дни, 10 часа след това'), - array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 ден, 1 час, 40 минути преди това'), - array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 години, 1 ден след това'), - ); - - foreach ($examples as $example) { - $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'bg')->shouldReturn($example[2]); - } - } - - function it_humanizes_precise_difference_between_dates_for_no_locale() - { - $examples = array( - array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minutt, 45 sekunder siden'), - array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 time, 40 minutter siden'), - array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 dag, 15 minutter fra nå'), - array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 dager, 2 timer fra nå'), - array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 år, 2 dager, 4 timer fra nå'), - array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 dager, 10 timer fra nå'), - array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 dag, 1 time, 40 minutter siden'), - array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 år, 1 dag fra nå'), - ); - foreach ($examples as $example) { - $this->preciseDifference(new \DateTime($example[0]), new \DateTime($example[1]), 'no')->shouldReturn($example[2]); - } - } -} diff --git a/spec/Coduo/PHPHumanizer/NumberSpec.php b/spec/Coduo/PHPHumanizer/NumberSpec.php deleted file mode 100644 index 6acaa24..0000000 --- a/spec/Coduo/PHPHumanizer/NumberSpec.php +++ /dev/null @@ -1,112 +0,0 @@ -ordinalize(1)->shouldReturn("1st"); - $this->ordinalize(2)->shouldReturn("2nd"); - $this->ordinalize(23)->shouldReturn("23rd"); - $this->ordinalize(1002)->shouldReturn("1002nd"); - $this->ordinalize(-111)->shouldReturn("-111th"); - } - - function it_returns_ordinal_suffix() - { - $this->ordinal(1)->shouldReturn("st"); - $this->ordinal(2)->shouldReturn("nd"); - $this->ordinal(23)->shouldReturn("rd"); - $this->ordinal(1002)->shouldReturn("nd"); - $this->ordinal(-111)->shouldReturn("th"); - } - - function it_convert_number_to_string_with_binary_suffix() - { - $this->binarySuffix(-1)->shouldReturn(-1); - $this->binarySuffix(0)->shouldReturn("0 bytes"); - $this->binarySuffix(1)->shouldReturn("1 bytes"); - $this->binarySuffix(1024)->shouldReturn("1 kB"); - $this->binarySuffix(1025)->shouldReturn("1 kB"); - $this->binarySuffix(1536)->shouldReturn("1.5 kB"); - $this->binarySuffix(1048576 * 5)->shouldReturn("5 MB"); - $this->binarySuffix(1073741824 * 2)->shouldReturn("2 GB"); - $this->binarySuffix(1099511627776 * 3)->shouldReturn("3 TB"); - $this->binarySuffix(1325899906842624)->shouldReturn("1.18 PB"); - } - - function it_convert_number_to_string_with_binary_suffix_for_specific_locale() - { - $this->binarySuffix(1536, 'pl')->shouldReturn("1,5 kB"); - $this->binarySuffix(1325899906842624, 'pl')->shouldReturn("1,18 PB"); - } - - function it_throw_exception_when_converting_to_string_with_binary_suffix_non_numeric_values() - { - $this->shouldThrow(new \InvalidArgumentException("Binary suffix converter accept only numeric values.")) - ->during('binarySuffix', array('as12')); - } - - function it_convert_number_to_string_with_metric_suffix() - { - $this->metricSuffix(-1)->shouldReturn("-1"); - $this->metricSuffix(0)->shouldReturn("0"); - $this->metricSuffix(1)->shouldReturn("1"); - $this->metricSuffix(101)->shouldReturn("101"); - $this->metricSuffix(1000)->shouldReturn("1k"); - $this->metricSuffix(1240)->shouldReturn("1.2k"); - $this->metricSuffix(1240000)->shouldReturn("1.24M"); - $this->metricSuffix(3500000)->shouldReturn("3.5M"); - } - - function it_convert_number_to_string_with_metric_suffix_for_specific_locale() - { - $this->metricSuffix(1240, 'pl')->shouldReturn("1,2k"); - $this->metricSuffix(1240000, 'pl')->shouldReturn("1,24M"); - $this->metricSuffix(3500000, 'pl')->shouldReturn("3,5M"); - } - - function it_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() - { - $this->shouldThrow(new \InvalidArgumentException("Metric suffix converter accept only numeric values.")) - ->during('metricSuffix', array('as12')); - } - - function it_converts_numbers_to_roman() - { - $this->toRoman(1)->shouldReturn("I"); - $this->toRoman(5)->shouldReturn("V"); - $this->toRoman(9)->shouldReturn("IX"); - $this->toRoman(10)->shouldReturn("X"); - $this->toRoman(125)->shouldReturn("CXXV"); - $this->toRoman(1300)->shouldReturn("MCCC"); - $this->toRoman(3999)->shouldReturn("MMMCMXCIX"); - } - - function it_throws_exception_when_converting_number_is_out_of_range() - { - $this->shouldThrow(new \InvalidArgumentException())->during('toRoman', array(-1)); - $this->shouldThrow(new \InvalidArgumentException())->during('toRoman', array(4000)); - } - - function it_converts_roman_numbers_to_arabic() - { - $this->fromRoman("I")->shouldReturn(1); - $this->fromRoman("V")->shouldReturn(5); - $this->fromRoman("IX")->shouldReturn(9); - $this->fromRoman("CXXV")->shouldReturn(125); - $this->fromRoman("MCCC")->shouldReturn(1300); - $this->fromRoman("MMMCMXCIX")->shouldReturn(3999); - } - - function it_throws_exception_when_converting_roman_number_is_invalid() - { - $this->shouldThrow(new \InvalidArgumentException())->during('fromRoman', array(1234)); - $this->shouldThrow(new \InvalidArgumentException())->during('fromRoman', array("")); - $this->shouldThrow(new \InvalidArgumentException())->during('fromRoman', array("foobar")); - } -} diff --git a/spec/Coduo/PHPHumanizer/StringSpec.php b/spec/Coduo/PHPHumanizer/StringSpec.php deleted file mode 100644 index a360bff..0000000 --- a/spec/Coduo/PHPHumanizer/StringSpec.php +++ /dev/null @@ -1,54 +0,0 @@ -humanize('news_count')->shouldReturn('News count'); - } - - function it_humanize_string_with_special_character() - { - $this->humanize('news-count', true, '-')->shouldReturn('News count'); - } - - function it_humanize_strings_without_capitalize() - { - $this->humanize('user', false)->shouldReturn('user'); - } - - function it_humanize_string_excluding_forbidden_words() - { - $this->humanize('news_id')->shouldReturn('News'); - } - - function it_truncate_string_to_word_closest_to_a_certain_number_of_characters() - { - $text = 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.'; - - $this->truncate($text, 2)->shouldReturn("Lorem"); - $this->truncate($text, 10, '...')->shouldReturn("Lorem ipsum..."); - $this->truncate($text, 30)->shouldReturn("Lorem ipsum dolorem si amet, lorem"); - $this->truncate($text, 0)->shouldReturn("Lorem"); - $this->truncate($text, 0, '...')->shouldReturn("Lorem..."); - $this->truncate($text, -2)->shouldReturn($text); - - $textShort = 'Short text'; - $this->truncate($textShort, 1, '...')->shouldReturn("Short..."); - $this->truncate($textShort, 2, '...')->shouldReturn("Short..."); - $this->truncate($textShort, 3, '...')->shouldReturn("Short..."); - $this->truncate($textShort, 4, '...')->shouldReturn("Short..."); - $this->truncate($textShort, 5, '...')->shouldReturn("Short..."); - $this->truncate($textShort, 6, '...')->shouldReturn("Short..."); - $this->truncate($textShort, 7, '...')->shouldReturn("Short text"); - $this->truncate($textShort, 8, '...')->shouldReturn("Short text"); - $this->truncate($textShort, 9, '...')->shouldReturn("Short text"); - $this->truncate($textShort, 10, '...')->shouldReturn("Short text"); - } -} diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php new file mode 100644 index 0000000..2ced098 --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php @@ -0,0 +1,41 @@ +assertEquals($expectedResult, Collection::oxford($collection, $limit, $locale)); + } + + public function oxfordCollectionProvider() + { + return array( + // English + array(array("Michal"), null, 'en', 'Michal'), + array(array("Michal", "Norbert"), null, 'en', 'Michal and Norbert'), + array(array("Michal", "Norbert", "Lukasz"), 2, 'en', 'Michal, Norbert, and 1 other'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'en', 'Michal, Norbert, and 2 others'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'en', 'Michal, Norbert, Lukasz, and Pawel'), + + // Polish + array(array("Michal"), null, 'pl', 'Michal'), + array(array("Michal", "Norbert"), null, 'pl', 'Michal i Norbert'), + array(array("Michal", "Norbert", "Lukasz"), 2, 'pl', 'Michal, Norbert i 1 inny'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'pl', 'Michal, Norbert i 2 innych'), + + // Dutch + array(array("Michal"), null, 'nl', 'Michal'), + array(array("Michal", "Norbert"), null, 'nl', 'Michal en Norbert'), + array(array("Michal", "Norbert", "Lukasz"), 2, 'nl', 'Michal, Norbert, en 1 andere'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'nl', 'Michal, Norbert, en 2 andere'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'nl', 'Michal, Norbert, Lukasz, en Pawel'), + ); + } +} \ No newline at end of file diff --git a/tests/unit/DateTimeTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php similarity index 68% rename from tests/unit/DateTimeTest.php rename to tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php index d474b8d..3bff429 100644 --- a/tests/unit/DateTimeTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php @@ -3,14 +3,8 @@ namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\DateTime; -use PHPUnit_Framework_TestCase; -/** - * Class DateTimeTest - * - * @package Coduo\PHPHumanizer\Tests - */ -class DateTimeTest extends PHPUnit_Framework_TestCase +class DateTimeTest extends \PHPUnit_Framework_TestCase { /** * @test @@ -23,9 +17,6 @@ class DateTimeTest extends PHPUnit_Framework_TestCase */ public function test_humanize_difference_between_dates($firstDate, $secondDate, $expected, $locale = 'en') { - $datetime = new DateTime(); - - $this->assertEquals($expected, $datetime->difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); $this->assertEquals($expected, DateTime::difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); } @@ -39,9 +30,6 @@ public function test_humanize_difference_between_dates($firstDate, $secondDate, */ public function test_humanize_precise_difference_between_dates($firstDate, $secondDate, $expected, $locale = 'en') { - $datetime = new DateTime(); - - $this->assertEquals($expected, $datetime->preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); $this->assertEquals($expected, DateTime::preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); } @@ -51,6 +39,7 @@ public function test_humanize_precise_difference_between_dates($firstDate, $seco public function humanizeDataProvider() { return array( + // English array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'just now'), array("2014-04-26 13:00:00", "2014-04-26 13:00:05", '5 seconds from now'), array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 minute ago'), @@ -69,6 +58,7 @@ public function humanizeDataProvider() array("2015-05-01", "2014-04-01", '1 year ago'), array("2014-05-01", "2016-04-01", '2 years from now'), + // Polish array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'w tym momencie', 'pl'), array("2014-04-26 13:00:00", "2014-04-26 13:00:05", 'za 5 sekund', 'pl'), array("2014-04-26 13:00:00", "2014-04-26 12:59:00", 'minutę temu', 'pl'), @@ -89,6 +79,25 @@ public function humanizeDataProvider() array("2015-05-01", "2014-04-01", 'rok temu', 'pl'), array("2014-05-01", "2016-04-01", 'za 2 lata', 'pl'), array("2014-05-01", "2009-04-01", '5 lat temu', 'pl'), + + // Bulgarian + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'в момента', 'bg'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", 'след 5 секунди', 'bg'), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", 'преди 1 минута', 'bg'), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", 'преди 15 минути', 'bg'), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", 'след 15 минути', 'bg'), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", 'след 1 час', 'bg'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", 'след 2 часа', 'bg'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", 'преди 1 час', 'bg'), + array("2014-04-26", "2014-04-25", 'преди 1 ден'), + array("2014-04-26", "2014-04-24", 'преди 2 дни'), + array("2014-04-26", "2014-04-28", 'след 2 дни'), + array("2014-04-01", "2014-04-15", 'след 2 седмици'), + array("2014-04-15", "2014-04-07", 'преди 1 седмица'), + array("2014-01-01", "2014-04-01", 'след 3 месеца'), + array("2014-05-01", "2014-04-01", 'преди 1 месец'), + array("2015-05-01", "2014-04-01", 'преди 1 година'), + array("2014-05-01", "2016-04-01", 'след 2 години'), ); } @@ -98,6 +107,7 @@ public function humanizeDataProvider() public function preciseDifferenceDataProvider() { return array( + // English array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minute, 45 seconds ago'), array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 hour, 40 minutes ago'), array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 day, 15 minutes from now'), @@ -107,6 +117,7 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 day, 1 hour, 40 minutes ago'), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 years, 1 day from now'), + // Polish array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuta, 45 sekund temu', 'pl'), array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 godzina, 40 minut temu', 'pl'), array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 dzień, 15 minut od teraz', 'pl'), @@ -116,6 +127,7 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 dzień, 1 godzina, 40 minut temu', 'pl'), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 lata, 1 dzień od teraz', 'pl'), + // German array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 Minute, 45 Sekunden vor', 'de'), array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 Stunde, 40 Minuten vor', 'de'), array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 Tag, 15 Minuten ab jetzt', 'de'), @@ -125,6 +137,7 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 Tag, 1 Stunde, 40 Minuten vor', 'de'), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 Jahre, 1 Tag ab jetzt', 'de'), + // Turkish array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 dakika, 45 saniye önce', 'tr'), array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 saat, 40 dakika önce', 'tr'), array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 gün, 15 dakika sonra', 'tr'), @@ -134,6 +147,7 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 gün, 1 saat, 40 dakika önce', 'tr'), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 yıl, 1 gün sonra', 'tr'), + // French array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minute, 45 secondes il y a', 'fr'), array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 heure, 40 minutes il y a', 'fr'), array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 jour, 15 minutes maintenant', 'fr'), @@ -143,6 +157,7 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 jour, 1 heure, 40 minutes il y a', 'fr'), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 années, 1 jour maintenant', 'fr'), + // Português - Brasil array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuto, 45 segundos atrás', 'pt_BR'), array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 hora, 40 minutos atrás', 'pt_BR'), array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 dia, 15 minutos a partir de agora', 'pt_BR'), @@ -152,6 +167,7 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 dia, 1 hora, 40 minutos atrás', 'pt_BR'), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 anos, 1 dia a partir de agora', 'pt_BR'), + // Italian array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuto, 45 secondi fa', 'it'), array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 ora, 40 minuti fa', 'it'), array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 giorno, 15 minuti da adesso', 'it'), @@ -160,6 +176,36 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 giorni, 10 ore da adesso', 'it'), array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 giorno, 1 ora, 40 minuti fa', 'it'), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 anni, 1 giorno da adesso', 'it'), + + // Norwegian + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minutt, 45 sekunder siden', 'no'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 time, 40 minutter siden', 'no'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 dag, 15 minutter fra nå', 'no'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 dager, 2 timer fra nå', 'no'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 år, 2 dager, 4 timer fra nå', 'no'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 dager, 10 timer fra nå', 'no'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 dag, 1 time, 40 minutter siden', 'no'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 år, 1 dag fra nå', 'no'), + + // Bulgarian + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 минута, 45 секунди преди това', 'bg'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 час, 40 минути преди това', 'bg'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 ден, 15 минути след това', 'bg'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 дни, 2 часа след това', 'bg'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 година, 2 дни, 4 часа след това', 'bg'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 дни, 10 часа след това', 'bg'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 ден, 1 час, 40 минути преди това', 'bg'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 години, 1 ден след това', 'bg'), + + // Afrikaans + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuut, 45 sekondes gelede', 'af'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 uur, 40 minute gelede', 'af'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 dag, 15 minute van nou af', 'af'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 dae, 2 ure van nou af', 'af'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 jaar, 2 dae, 4 ure van nou af', 'af'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 dae, 10 ure van nou af', 'af'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 dag, 1 uur, 40 minute gelede', 'af'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 jaar, 1 dag van nou af', 'af'), ); } } \ No newline at end of file diff --git a/tests/unit/NumberTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberTest.php similarity index 69% rename from tests/unit/NumberTest.php rename to tests/Coduo/PHPHumanizer/Tests/NumberTest.php index 4a2fac0..a8ca40c 100644 --- a/tests/unit/NumberTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberTest.php @@ -3,15 +3,8 @@ namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\Number; -use InvalidArgumentException; -use PHPUnit_Framework_TestCase; -/** - * Class NumberTest - * - * @package Coduo\PHPHumanizer\Tests - */ -class NumberTest extends PHPUnit_Framework_TestCase +class NumberTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider ordinalSuffixProvider @@ -21,9 +14,6 @@ class NumberTest extends PHPUnit_Framework_TestCase */ public function test_return_ordinal_suffix($expected, $number) { - $numberobj = new Number(); - - $this->assertEquals($expected, $numberobj->ordinal($number)); $this->assertEquals($expected, Number::ordinal($number)); } @@ -36,9 +26,6 @@ public function test_return_ordinal_suffix($expected, $number) */ public function test_ordinalize_numbers($expected, $number) { - $numberobj = new Number(); - - $this->assertEquals($expected, $numberobj->ordinalize($number)); $this->assertEquals($expected, Number::ordinalize($number)); } @@ -51,24 +38,11 @@ public function test_ordinalize_numbers($expected, $number) */ public function test_convert_number_to_string_with_binary_suffix($expected, $number, $locale = 'en') { - $numberobj = new Number(); - - $this->assertEquals($expected, $numberobj->binarySuffix($number, $locale)); $this->assertEquals($expected, Number::binarySuffix($number, $locale)); } /** - * @expectedException InvalidArgumentException - */ - public function test_non_statically_throw_exception_when_converting_to_string_with_binary_suffix_non_numeric_values() - { - $numberobj = new Number(); - - $numberobj->binarySuffix('as12'); - } - - /** - * @expectedException InvalidArgumentException + * @expectedException \InvalidArgumentException */ public function test_statically_throw_exception_when_converting_to_string_with_binary_suffix_non_numeric_values() { @@ -84,23 +58,11 @@ public function test_statically_throw_exception_when_converting_to_string_with_b */ public function test_convert_number_to_string_with_metric_suffix($expected, $number, $locale = 'en') { - $numberobj = new Number(); - - $this->assertEquals($expected, $numberobj->metricSuffix($number, $locale)); $this->assertEquals($expected, Number::metricSuffix($number, $locale)); } - /** - * @expectedException InvalidArgumentException - */ - public function test_non_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() - { - $numberobj = new Number(); - - $numberobj->metricSuffix('as12'); - } /** - * @expectedException InvalidArgumentException + * @expectedException \InvalidArgumentException */ public function test_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() { @@ -115,9 +77,6 @@ public function test_statically_throw_exception_when_converting_to_string_with_m */ public function test_converts_numbers_to_roman($expected, $number) { - $numberobj = new Number(); - - $this->assertEquals($expected, $numberobj->toRoman($number)); $this->assertEquals($expected, Number::toRoman($number)); } @@ -129,28 +88,12 @@ public function test_converts_numbers_to_roman($expected, $number) */ public function test_convert_roman_numbers_to_arabic($number, $expected) { - $numberobj = new Number(); - - $this->assertEquals($expected, $numberobj->fromRoman($number)); $this->assertEquals($expected, Number::fromRoman($number)); } /** * @dataProvider romanExceptionProvider - * @expectedException InvalidArgumentException - * - * @param $number - */ - public function test_non_statically_throw_exception_when_converting_number_is_out_of_range($number) - { - $numberobj = new Number(); - - $numberobj->toRoman($number); - } - - /** - * @dataProvider romanExceptionProvider - * @expectedException InvalidArgumentException + * @expectedException \InvalidArgumentException * * @param $number */ @@ -161,20 +104,7 @@ public function test_statically_throw_exception_when_converting_number_is_out_of /** * @dataProvider arabicExceptionProvider - * @expectedException InvalidArgumentException - * - * @param $number - */ - public function test_non_statically_throw_exception_when_converting_roman_number_is_invalid($number) - { - $numberobj = new Number(); - - $numberobj->fromRoman($number); - } - - /** - * @dataProvider arabicExceptionProvider - * @expectedException InvalidArgumentException + * @expectedException \InvalidArgumentException * * @param $number */ diff --git a/tests/Coduo/PHPHumanizer/Tests/StringTest.php b/tests/Coduo/PHPHumanizer/Tests/StringTest.php new file mode 100644 index 0000000..6cd5d6a --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/StringTest.php @@ -0,0 +1,79 @@ +assertEquals($expected, String::humanize($input, $capitalize, $separator)); + } + + /** + * @dataProvider truncateStringProvider + * + * @param $text + * @param $expected + * @param $charactersCount + * @param string $append + */ + function test_truncate_string_to_word_closest_to_a_certain_number_of_characters($text, $expected, $charactersCount, $append = '') + { + $this->assertEquals($expected, String::truncate($text, $charactersCount, $append)); + } + + /** + * + * @return array + */ + public function humanizeStringProvider() + { + return array( + array('news_count', 'News count', true, '_'), + array('user', 'user', false, '_'), + array('news_id', 'News', true, '_'), + array('news_count', 'News count', true), + array('news-count', 'News count', true, '-'), + array('news-count', 'news count', false, '-') + ); + } + + /** + * @return array + */ + public function truncateStringProvider() + { + $longText = 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.'; + $shortText = 'Short text'; + + return array( + array($longText, 'Lorem', 2), + array($longText, 'Lorem ipsum...', 10, '...'), + array($longText, 'Lorem ipsum dolorem si amet, lorem', 30), + array($longText, 'Lorem', 0), + array($longText, 'Lorem...', 0, '...'), + array($longText, 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', -2), + array($shortText, "Short...", 1, '...'), + array($shortText, "Short...", 2, '...'), + array($shortText, "Short...", 3, '...'), + array($shortText, "Short...", 4, '...'), + array($shortText, "Short...", 5, '...'), + array($shortText, "Short...", 6, '...'), + array($shortText, "Short text", 7, '...'), + array($shortText, "Short text", 8, '...'), + array($shortText, "Short text", 9, '...'), + array($shortText, "Short text", 10, '...') + ); + } +} \ No newline at end of file diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..796fb24 --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,3 @@ +assertTrue(is_a($diff->getUnit(), $instance)); - $this->assertEquals($expected, $diff->getQuantity()); - $this->assertEquals($isPast, $diff->isPast()); - } - - /** - * @return array - */ - public function differenceDataProvider() - { - return array( - array(15, new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:45:00"), 'Coduo\PHPHumanizer\DateTime\Unit\Minute', true), - array(15, new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:15:00"), 'Coduo\PHPHumanizer\DateTime\Unit\Minute', false), - array(2, new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 11:00:00"), 'Coduo\PHPHumanizer\DateTime\Unit\Hour', true), - array(3, new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 16:00:00"), 'Coduo\PHPHumanizer\DateTime\Unit\Hour', false), - array(1, new \DateTime("2014-04-10"), new \DateTime("2014-04-09"), 'Coduo\PHPHumanizer\DateTime\Unit\Day', true), - array(1, new \DateTime("2014-04-10"), new \DateTime("2014-04-11"), 'Coduo\PHPHumanizer\DateTime\Unit\Day', false), - array(2, new \DateTime("2014-04-15"), new \DateTime("2014-04-01"), 'Coduo\PHPHumanizer\DateTime\Unit\Week', true), - array(2, new \DateTime("2014-04-01"), new \DateTime("2014-04-15"), 'Coduo\PHPHumanizer\DateTime\Unit\Week', false), - array(1, new \DateTime("2014-04-01"), new \DateTime("2014-03-01"), 'Coduo\PHPHumanizer\DateTime\Unit\Month', true), - array(1, new \DateTime("2014-04-01"), new \DateTime("2014-05-01"), 'Coduo\PHPHumanizer\DateTime\Unit\Month', false), - array(2, new \DateTime("2014-01-01"), new \DateTime("2012-01-01"), 'Coduo\PHPHumanizer\DateTime\Unit\Year', true), - array(1, new \DateTime("2014-01-01"), new \DateTime("2015-01-01"), 'Coduo\PHPHumanizer\DateTime\Unit\Year', false), - ); - } -} - diff --git a/tests/unit/DateTime/FormatterTest.php b/tests/unit/DateTime/FormatterTest.php deleted file mode 100644 index 1afc48a..0000000 --- a/tests/unit/DateTime/FormatterTest.php +++ /dev/null @@ -1,66 +0,0 @@ -prophesize('Symfony\Component\Translation\Translator'); - - $translator->transChoice( - 'minute.past', - 10, - array('%count%' => 10), - 'difference', - 'en' - )->willReturn('10 minutes ago'); - - $translator->transChoice( - 'minute.past', - 10, - array('%count%' => 10), - 'difference', - 'pl' - )->willReturn('10 minut temu'); - - $diff = $this->prophesize('\Coduo\PHPHumanizer\DateTime\Difference'); - - $diff->getUnit()->willReturn($unit); - $diff->getQuantity()->willReturn($quantity); - $diff->isPast()->willReturn($isPast); - - $formatter = new Formatter($translator->reveal()); - - $this->assertEquals($formatted, $formatter->formatDifference($diff->reveal(), $locale)); - } - - /** - * @return array - */ - public function formatterDataProvider() - { - return array( - array(new Minute(), 10, true, '10 minutes ago'), - array(new Minute(), 10, true, '10 minut temu', 'pl'), - ); - } -} \ No newline at end of file diff --git a/tests/unit/StringTest.php b/tests/unit/StringTest.php deleted file mode 100644 index 71a4215..0000000 --- a/tests/unit/StringTest.php +++ /dev/null @@ -1,74 +0,0 @@ -assertEquals($expected, $string->humanize($input, $capitalize)); - $this->assertEquals($expected, String::humanize($input, $capitalize)); - } - - /** - * @dataProvider truncateStringProvider - * - * @param $text - * @param $expected - * @param $charactersCount - * @param string $append - */ - function test_truncate_string_to_word_closest_to_a_certain_number_of_characters($text, $expected, $charactersCount, $append = '') - { - $string = new String(); - - $this->assertEquals($expected, $string->truncate($text, $charactersCount, $append)); - $this->assertEquals($expected, String::truncate($text, $charactersCount, $append)); - } - - /** - * - * @return array - */ - public function humanizeStringProvider() - { - return array( - array('news_count', 'News count'), - array('user', 'user', false), - array('news_id', 'News'), - array('news_count', 'News count'), - ); - } - - /** - * @return array - */ - public function truncateStringProvider() - { - return array( - array('Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', 'Lorem', 2), - array('Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', 'Lorem ipsum...', 10, '...'), - array('Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', 'Lorem ipsum dolorem si amet, lorem', 30), - array('Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', 'Lorem', 0), - array('Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', 'Lorem...', 0, '...'), - array('Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', -2), - ); - } -} \ No newline at end of file From e53f28dcc8c78184d87079c131cf6df0e4b3f859 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 1 Nov 2015 13:42:34 +0100 Subject: [PATCH 040/193] Added humanize string missing tests --- .../Coduo/PHPHumanizer/Tests/DateTimeTest.php | 72 +++++++++---------- tests/Coduo/PHPHumanizer/Tests/StringTest.php | 2 +- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php index 3bff429..a993005 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php @@ -15,7 +15,7 @@ class DateTimeTest extends \PHPUnit_Framework_TestCase * @param $expected * @param string $locale */ - public function test_humanize_difference_between_dates($firstDate, $secondDate, $expected, $locale = 'en') + public function test_humanize_difference_between_dates($firstDate, $secondDate, $expected, $locale) { $this->assertEquals($expected, DateTime::difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); } @@ -28,7 +28,7 @@ public function test_humanize_difference_between_dates($firstDate, $secondDate, * @param $expected * @param string $locale */ - public function test_humanize_precise_difference_between_dates($firstDate, $secondDate, $expected, $locale = 'en') + public function test_humanize_precise_difference_between_dates($firstDate, $secondDate, $expected, $locale) { $this->assertEquals($expected, DateTime::preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); } @@ -40,23 +40,23 @@ public function humanizeDataProvider() { return array( // English - array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'just now'), - array("2014-04-26 13:00:00", "2014-04-26 13:00:05", '5 seconds from now'), - array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 minute ago'), - array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 minutes ago'), - array("2014-04-26 13:00:00", "2014-04-26 13:15:00", '15 minutes from now'), - array("2014-04-26 13:00:00", "2014-04-26 14:00:00", '1 hour from now'), - array("2014-04-26 13:00:00", "2014-04-26 15:00:00", '2 hours from now'), - array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 hour ago'), - array("2014-04-26", "2014-04-25", '1 day ago'), - array("2014-04-26", "2014-04-24", '2 days ago'), - array("2014-04-26", "2014-04-28", '2 days from now'), - array("2014-04-01", "2014-04-15", '2 weeks from now'), - array("2014-04-15", "2014-04-07", '1 week ago'), - array("2014-01-01", "2014-04-01", '3 months from now'), - array("2014-05-01", "2014-04-01", '1 month ago'), - array("2015-05-01", "2014-04-01", '1 year ago'), - array("2014-05-01", "2016-04-01", '2 years from now'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'just now', 'en'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", '5 seconds from now', 'en'), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 minute ago', 'en'), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 minutes ago', 'en'), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", '15 minutes from now', 'en'), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", '1 hour from now', 'en'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", '2 hours from now', 'en'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 hour ago', 'en'), + array("2014-04-26", "2014-04-25", '1 day ago', 'en'), + array("2014-04-26", "2014-04-24", '2 days ago', 'en'), + array("2014-04-26", "2014-04-28", '2 days from now', 'en'), + array("2014-04-01", "2014-04-15", '2 weeks from now', 'en'), + array("2014-04-15", "2014-04-07", '1 week ago', 'en'), + array("2014-01-01", "2014-04-01", '3 months from now', 'en'), + array("2014-05-01", "2014-04-01", '1 month ago', 'en'), + array("2015-05-01", "2014-04-01", '1 year ago', 'en'), + array("2014-05-01", "2016-04-01", '2 years from now', 'en'), // Polish array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'w tym momencie', 'pl'), @@ -89,15 +89,15 @@ public function humanizeDataProvider() array("2014-04-26 13:00:00", "2014-04-26 14:00:00", 'след 1 час', 'bg'), array("2014-04-26 13:00:00", "2014-04-26 15:00:00", 'след 2 часа', 'bg'), array("2014-04-26 13:00:00", "2014-04-26 12:00:00", 'преди 1 час', 'bg'), - array("2014-04-26", "2014-04-25", 'преди 1 ден'), - array("2014-04-26", "2014-04-24", 'преди 2 дни'), - array("2014-04-26", "2014-04-28", 'след 2 дни'), - array("2014-04-01", "2014-04-15", 'след 2 седмици'), - array("2014-04-15", "2014-04-07", 'преди 1 седмица'), - array("2014-01-01", "2014-04-01", 'след 3 месеца'), - array("2014-05-01", "2014-04-01", 'преди 1 месец'), - array("2015-05-01", "2014-04-01", 'преди 1 година'), - array("2014-05-01", "2016-04-01", 'след 2 години'), + array("2014-04-26", "2014-04-25", 'преди 1 ден', 'bg'), + array("2014-04-26", "2014-04-24", 'преди 2 дни', 'bg'), + array("2014-04-26", "2014-04-28", 'след 2 дни', 'bg'), + array("2014-04-01", "2014-04-15", 'след 2 седмици', 'bg'), + array("2014-04-15", "2014-04-07", 'преди 1 седмица', 'bg'), + array("2014-01-01", "2014-04-01", 'след 3 месеца', 'bg'), + array("2014-05-01", "2014-04-01", 'преди 1 месец', 'bg'), + array("2015-05-01", "2014-04-01", 'преди 1 година', 'bg'), + array("2014-05-01", "2016-04-01", 'след 2 години', 'bg'), ); } @@ -108,14 +108,14 @@ public function preciseDifferenceDataProvider() { return array( // English - array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minute, 45 seconds ago'), - array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 hour, 40 minutes ago'), - array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 day, 15 minutes from now'), - array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 days, 2 hours from now'), - array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 year, 2 days, 4 hours from now'), - array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 days, 10 hours from now'), - array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 day, 1 hour, 40 minutes ago'), - array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 years, 1 day from now'), + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minute, 45 seconds ago', 'en'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 hour, 40 minutes ago', 'en'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 day, 15 minutes from now', 'en'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 days, 2 hours from now', 'en'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 year, 2 days, 4 hours from now', 'en'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 days, 10 hours from now', 'en'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 day, 1 hour, 40 minutes ago', 'en'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 years, 1 day from now', 'en'), // Polish array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuta, 45 sekund temu', 'pl'), diff --git a/tests/Coduo/PHPHumanizer/Tests/StringTest.php b/tests/Coduo/PHPHumanizer/Tests/StringTest.php index 6cd5d6a..6abb9d1 100644 --- a/tests/Coduo/PHPHumanizer/Tests/StringTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/StringTest.php @@ -43,7 +43,7 @@ public function humanizeStringProvider() array('news_count', 'News count', true, '_'), array('user', 'user', false, '_'), array('news_id', 'News', true, '_'), - array('news_count', 'News count', true), + array('news_count', 'News count', true, '_'), array('news-count', 'News count', true, '-'), array('news-count', 'news count', false, '-') ); From 56d30c0bb8a055f1bac3869e01c431699daa3c8d Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 1 Nov 2015 13:43:15 +0100 Subject: [PATCH 041/193] Updated travis CI configuration --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c7c5955..08dffdb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,4 +22,4 @@ install: script: - ./bin/phpspec run --format=pretty - - ./bin/phpunit -vvv tests/ + - ./bin/phpunit From a562115f6cf627dc408981568f9d425368da1d75 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 1 Nov 2015 13:56:22 +0100 Subject: [PATCH 042/193] Added possibility to pass forbidden words into humanizer --- src/Coduo/PHPHumanizer/String.php | 17 +++++++++++-- src/Coduo/PHPHumanizer/String/Humanize.php | 10 ++++---- tests/Coduo/PHPHumanizer/Tests/StringTest.php | 24 ++++++++++--------- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/Coduo/PHPHumanizer/String.php b/src/Coduo/PHPHumanizer/String.php index 38dd31b..3eed429 100644 --- a/src/Coduo/PHPHumanizer/String.php +++ b/src/Coduo/PHPHumanizer/String.php @@ -7,11 +7,24 @@ class String { - public static function humanize($text, $capitalize = true, $separator = '_') + /** + * @param $text + * @param bool|true $capitalize + * @param string $separator + * @param array $forbiddenWords + * @return string + */ + public static function humanize($text, $capitalize = true, $separator = '_', array $forbiddenWords = array()) { - return (string) new Humanize($text, $capitalize, $separator); + return (string) new Humanize($text, $capitalize, $separator, $forbiddenWords); } + /** + * @param $text + * @param $charactersCount + * @param string $append + * @return string + */ public static function truncate($text, $charactersCount, $append = '') { return (string) new Truncate($text, $charactersCount, $append); diff --git a/src/Coduo/PHPHumanizer/String/Humanize.php b/src/Coduo/PHPHumanizer/String/Humanize.php index d4eaa17..c58fa03 100644 --- a/src/Coduo/PHPHumanizer/String/Humanize.php +++ b/src/Coduo/PHPHumanizer/String/Humanize.php @@ -4,11 +4,6 @@ class Humanize { - /** - * @var array - */ - private $forbiddenWords = array('id'); - /** * @var string */ @@ -28,12 +23,14 @@ class Humanize * @param $text * @param bool $capitalize * @param string $separator + * @param array $forbiddenWords */ - public function __construct($text, $capitalize = true, $separator = '_') + public function __construct($text, $capitalize = true, $separator = '_', array $forbiddenWords = array('id')) { $this->text = $text; $this->capitalize = $capitalize; $this->separator = $separator; + $this->forbiddenWords = $forbiddenWords; } /** @@ -44,6 +41,7 @@ public function __toString() { $humanized = trim(strtolower(preg_replace(array('/([A-Z])/', "/[{$this->separator}\\s]+/"), array('_$1', ' '), $this->text))); $humanized = trim(str_replace($this->forbiddenWords, "", $humanized)); + return $this->capitalize ? ucfirst($humanized) : $humanized; } } diff --git a/tests/Coduo/PHPHumanizer/Tests/StringTest.php b/tests/Coduo/PHPHumanizer/Tests/StringTest.php index 6abb9d1..eef471a 100644 --- a/tests/Coduo/PHPHumanizer/Tests/StringTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/StringTest.php @@ -14,18 +14,19 @@ class StringTest extends PHPUnit_Framework_TestCase * @param $expected * @param $capitalize * @param $separator + * @param array $forbiddenWords */ - public function test_humanize_strings($input, $expected, $capitalize, $separator) + public function test_humanize_strings($input, $expected, $capitalize, $separator, array $forbiddenWords) { - $this->assertEquals($expected, String::humanize($input, $capitalize, $separator)); + $this->assertEquals($expected, String::humanize($input, $capitalize, $separator, $forbiddenWords)); } /** * @dataProvider truncateStringProvider * - * @param $text - * @param $expected - * @param $charactersCount + * @param $text + * @param $expected + * @param $charactersCount * @param string $append */ function test_truncate_string_to_word_closest_to_a_certain_number_of_characters($text, $expected, $charactersCount, $append = '') @@ -40,12 +41,13 @@ function test_truncate_string_to_word_closest_to_a_certain_number_of_characters( public function humanizeStringProvider() { return array( - array('news_count', 'News count', true, '_'), - array('user', 'user', false, '_'), - array('news_id', 'News', true, '_'), - array('news_count', 'News count', true, '_'), - array('news-count', 'News count', true, '-'), - array('news-count', 'news count', false, '-') + array('news_count', 'News count', true, '_', array('id')), + array('user', 'user', false, '_', array('id')), + array('news_id', 'News', true, '_', array('id')), + array('customer_id', 'Customer id', true, '_', array()), + array('news_count', 'News count', true, '_', array('id')), + array('news-count', 'News count', true, '-', array('id')), + array('news-count', 'news count', false, '-', array('id')) ); } From d5df1e49f04585f6006b1f79f9988cdc5382cee8 Mon Sep 17 00:00:00 2001 From: Martin Smeeckaert Date: Mon, 2 Nov 2015 08:27:29 +0100 Subject: [PATCH 043/193] remove default parameters --- spec/Coduo/PHPHumanizer/StringSpec.php | 22 +++++++++---------- src/Coduo/PHPHumanizer/String.php | 2 +- .../PHPHumanizer/String/HtmlTruncate.php | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/spec/Coduo/PHPHumanizer/StringSpec.php b/spec/Coduo/PHPHumanizer/StringSpec.php index 6d2125e..6e8deeb 100644 --- a/spec/Coduo/PHPHumanizer/StringSpec.php +++ b/spec/Coduo/PHPHumanizer/StringSpec.php @@ -52,20 +52,20 @@ function it_truncate_string_to_word_closest_to_a_certain_number_of_characters_wi $text = '

HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create web pages.[1] Web browsers can read HTML files and render them into visible or audible web pages. HTML describes the structure of a website semantically along with cues for presentation, making it a markup language, rather than a programming language.

'; // Test with allowed tags - $this->truncateHtml($text, 3)->shouldReturn("HyperText"); - $this->truncateHtml($text, 12)->shouldReturn("HyperText Markup"); - $this->truncateHtml($text, 30)->shouldReturn("HyperText Markup Language, commonly"); - $this->truncateHtml($text, 50)->shouldReturn("HyperText Markup Language, commonly referred to as"); - $this->truncateHtml($text, 75)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup'); - $this->truncateHtml($text, 100)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'); + $this->truncateHtml($text, 3, '')->shouldReturn("HyperText"); + $this->truncateHtml($text, 12, '')->shouldReturn("HyperText Markup"); + $this->truncateHtml($text, 30, '')->shouldReturn("HyperText Markup Language, commonly"); + $this->truncateHtml($text, 50, '')->shouldReturn("HyperText Markup Language, commonly referred to as"); + $this->truncateHtml($text, 75, '')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup'); + $this->truncateHtml($text, 100, '')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'); // Test without tags - $this->truncateHtml($text, 3, '')->shouldReturn("HyperText"); - $this->truncateHtml($text, 12, '')->shouldReturn("HyperText Markup"); - $this->truncateHtml($text, 50, '')->shouldReturn("HyperText Markup Language, commonly referred to as"); - $this->truncateHtml($text, 75, '')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup'); - $this->truncateHtml($text, 100, '')->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'); + $this->truncateHtml($text, 3)->shouldReturn("HyperText"); + $this->truncateHtml($text, 12)->shouldReturn("HyperText Markup"); + $this->truncateHtml($text, 50)->shouldReturn("HyperText Markup Language, commonly referred to as"); + $this->truncateHtml($text, 75)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup'); + $this->truncateHtml($text, 100)->shouldReturn('HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'); // Test with append $this->truncateHtml($text, 50, '', '...')->shouldReturn("HyperText Markup Language, commonly referred to as..."); diff --git a/src/Coduo/PHPHumanizer/String.php b/src/Coduo/PHPHumanizer/String.php index 74b28e9..13b1a85 100644 --- a/src/Coduo/PHPHumanizer/String.php +++ b/src/Coduo/PHPHumanizer/String.php @@ -39,7 +39,7 @@ public static function truncate($text, $charactersCount, $append = '') * @param string $append * @return string */ - public static function truncateHtml($text, $charactersCount, $allowedTags = '', $append = '') + public static function truncateHtml($text, $charactersCount, $allowedTags = '', $append = '') { $truncate = new HtmlTruncate(new WordBreakpoint(), $allowedTags, $append); diff --git a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php index 474d985..5e011b1 100644 --- a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php +++ b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php @@ -24,7 +24,7 @@ class HtmlTruncate implements TruncateInterface * @param string $allowedTags * @param string $append */ - public function __construct(Breakpoint $breakpoint, $allowedTags = '', $append = '') + public function __construct(Breakpoint $breakpoint, $allowedTags = '', $append = '') { $this->breakpoint = $breakpoint; $this->append = $append; From 9104ef095693fc7b9c1f417b1ff205d7e02aa1fa Mon Sep 17 00:00:00 2001 From: Semen Dubina Date: Tue, 3 Nov 2015 02:33:09 +0300 Subject: [PATCH 044/193] Past/future compound formater for prefix precise. Rename: ago->past and from_now->future --- .../DateTime/PreciseFormatterSpec.php | 26 ++++------------- .../DateTime/PreciseFormatter.php | 28 +++++------------- .../Resources/translations/difference.af.yml | 4 +-- .../Resources/translations/difference.bg.yml | 4 +-- .../Resources/translations/difference.de.yml | 4 +-- .../Resources/translations/difference.en.yml | 4 +-- .../Resources/translations/difference.fr.yml | 4 +-- .../Resources/translations/difference.it.yml | 4 +-- .../Resources/translations/difference.nl.yml | 4 +-- .../Resources/translations/difference.no.yml | 4 +-- .../Resources/translations/difference.pl.yml | 4 +-- .../Resources/translations/difference.pt.yml | 4 +-- .../translations/difference.pt_BR.yml | 2 +- .../Resources/translations/difference.ru.yml | 4 +-- .../Resources/translations/difference.tr.yml | 4 +-- .../PHPHumanizer/Tests/CollectionTest.php | 7 +++++ .../Coduo/PHPHumanizer/Tests/DateTimeTest.php | 29 +++++++++++++++++++ 17 files changed, 74 insertions(+), 66 deletions(-) diff --git a/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php b/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php index cce0989..40ea0f3 100644 --- a/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php +++ b/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php @@ -32,18 +32,11 @@ function let(Translator $translator) )->willReturn('5 hours'); $translator->trans( - 'compound.from_now', - array(), + 'compound.future', + array('%value%' => '10 days, 5 hours'), 'difference', 'en' - )->willReturn('from now'); - - $translator->trans( - 'compound.from_now_prefix', - array(), - 'difference', - 'en' - )->willReturn(''); + )->willReturn('10 days, 5 hours from now'); $translator->transChoice( 'compound.day', @@ -62,18 +55,11 @@ function let(Translator $translator) )->willReturn('5 часов'); $translator->trans( - 'compound.from_now', - array(), - 'difference', - 'ru' - )->willReturn(''); - - $translator->trans( - 'compound.from_now_prefix', - array(), + 'compound.future', + array('%value%' => '10 дней, 5 часов'), 'difference', 'ru' - )->willReturn('через'); + )->willReturn('через 10 дней, 5 часов'); } function it_format_compound_datetime_diff(PreciseDifference $diff, CompoundResult $dayResult, diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index 4230728..fef065c 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -10,7 +10,6 @@ class PreciseFormatter * @var \Symfony\Component\Translation\TranslatorInterface */ private $translator; - private $locale = 'en'; /** * @param TranslatorInterface $translator @@ -30,8 +29,6 @@ public function formatDifference(PreciseDifference $difference, $locale = 'en') { $diff = array(); - $this->locale = $locale; - foreach ($difference->getCompoundResults() as $result) { $diff[] = $this->translator->transChoice( 'compound.'.$result->getUnit()->getName(), @@ -41,25 +38,14 @@ public function formatDifference(PreciseDifference $difference, $locale = 'en') $locale ); } - $suffix = $this->calculateCompoud($difference); - $suffixString = empty($suffix) ? '':' '.$suffix; - - $prefix = $this->calculateCompoud($difference, '_prefix'); - $prefixString = empty($prefix) ? '':$prefix.' '; - - return $prefixString . implode(', ', $diff) . $suffixString; - } - private function calculateCompoud(PreciseDifference $difference, $suffixName = '') - { - $compound = $difference->isPast() ? 'compound.ago'.$suffixName : 'compound.from_now'.$suffixName; - $compoundString = $this->translator->trans($compound, array(), 'difference', $this->locale); + $translationKey = $difference->isPast() ? 'past' : 'future'; - if (strlen($compoundString) > 0) { - $compoundRes = substr_compare($compoundString, 'compound', 0, 8) ? $compoundString:''; - } else { - $compoundRes = ''; - } - return $compoundRes; + return $this->translator->trans( + 'compound.' . $translationKey, + array('%value%' => implode(', ', $diff)), + 'difference', + $locale + ); } } diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml index 77c6ed7..788457a 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml @@ -31,5 +31,5 @@ compound: week: "{1} %count% week|[2,Inf] %count% weke" month: "{1} %count% maand|[2,Inf] %count% maande" year: "{1} %count% jaar|[2,Inf] %count% jaar" - ago: "gelede" - from_now: "van nou af" + past: "%value% gelede" + future: "%value% van nou af" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml index 9e7fe54..9e035b3 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml @@ -31,5 +31,5 @@ compound: week: "{1} %count% седмица|[2,Inf] %count% седмица" month: "{1} %count% месец|[2,Inf] %count% месеца" year: "{1} %count% година|[2,Inf] %count% години" - ago: "преди това" - from_now: "след това" \ No newline at end of file + past: "%value% преди това" + future: "%value% след това" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml index 0dcc736..8585f99 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml @@ -31,5 +31,5 @@ compound: week: "{1} %count% Woche|[2,Inf] %count% Wochen" month: "{1} %count% Monat|[2,Inf] %count% Monate" year: "{1} %count% Jahr|[2,Inf] %count% Jahre" - ago: "vor" - from_now: "ab jetzt" + past: "%value% vor" + future: "%value% ab jetzt" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml index 6a7534a..df245c7 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml @@ -31,5 +31,5 @@ compound: week: "{1} %count% week|[2,Inf] %count% weeks" month: "{1} %count% month|[2,Inf] %count% months" year: "{1} %count% year|[2,Inf] %count% years" - ago: "ago" - from_now: "from now" \ No newline at end of file + past: "%value% ago" + future: "%value% from now" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml index fa1ce1a..1869933 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml @@ -31,5 +31,5 @@ compound: week: "{1} %count% semaine|[2,Inf] %count% semaines" month: "{1} %count% mois|[2,Inf] %count% mois" year: "{1} %count% année|[2,Inf] %count% années" - ago: "il y a" - from_now: "maintenant" + past: "%value% il y a" + future: "%value% maintenant" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml index ac3e622..e0f5de5 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml @@ -31,5 +31,5 @@ compound: week: "{1} %count% settimana|[2,Inf] %count% settimane" month: "{1} %count% mese|[2,Inf] %count% mesi" year: "{1} %count% anno|[2,Inf] %count% anni" - ago: "fa" - from_now: "da adesso" + past: "%value% fa" + future: "%value% da adesso" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml index 86aced4..cbabddd 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml @@ -31,5 +31,5 @@ compound: week: "{1} %count% week|[2,Inf] %count% weken" month: "{1} %count% maand|[2,Inf] %count% maanden" year: "{1} %count% jaar|[2,Inf] %count% jaren" - ago: "geleden" - from_now: "vanaf nu" \ No newline at end of file + past: "%value% geleden" + future: "%value% vanaf nu" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml index 183dfe4..a2f4ffe 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml @@ -31,5 +31,5 @@ compound: week: "{1} %count% uke|[2,Inf] %count% uker" month: "{1} %count% måned|[2,Inf] %count% måneder" year: "{1} %count% år|[2,Inf] %count% år" - ago: "siden" - from_now: "fra nå" \ No newline at end of file + past: "%value% siden" + future: "%value% fra nå" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml index 47b48c6..23be15d 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml @@ -31,5 +31,5 @@ compound: week: "{1} %count% tydzień|[2,4] %count% tygodnie|[5,Inf] %count% tygodni" month: "{1} %count% miesiąc|[2,4] %count% miesiące|[5,Inf] %count% miesięcy" year: "{1} %count% rok|[2,4] %count% lata|[5,Inf] %count% lat" - ago: "temu" - from_now: "od teraz" + past: "%value% temu" + future: "%value% od teraz" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml index b542d13..7fe2901 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml @@ -31,5 +31,5 @@ compound: week: "{1} %count% semana|[2,Inf] %count% semana" month: "{1} %count% mês|[2,Inf] %count% meses" year: "{1} %count% ano|[2,Inf] %count% anos" - ago: "atrás" - from_now: "a partir de agora" + past: "%value% atrás" + future: "%value% a partir de agora" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml index 570e55d..d590ab4 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml @@ -31,5 +31,5 @@ compound: week: "{1} %count% semana|[2,Inf] %count% semana" month: "{1} %count% mês|[2,Inf] %count% meses" year: "{1} %count% ano|[2,Inf] %count% anos" - ago: "atrás" + past: "%value% atrás" from_now: "a partir de agora" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml index 1b30aa4..ca33639 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml @@ -31,5 +31,5 @@ compound: week: "%count% неделя|%count% недели|%count% недель" month: "%count% месяц|%count% месяца|%count% месяцев" year: "%count% год|%count% года|%count% лет" - ago: "назад" - from_now_prefix: "через" \ No newline at end of file + past: "%value% назад" + future: "через %value%" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml index a283f2d..8573ef9 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml @@ -31,5 +31,5 @@ compound: week: "{1} %count% hafta|[2,Inf] %count% hafta" month: "{1} %count% ay|[2,Inf] %count% ay" year: "{1} %count% yıl|[2,Inf] %count% yıl" - ago: "önce" - from_now: "sonra" + past: "%value% önce" + future: "%value% sonra" diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php index 2ced098..358b5d2 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php @@ -36,6 +36,13 @@ public function oxfordCollectionProvider() array(array("Michal", "Norbert", "Lukasz"), 2, 'nl', 'Michal, Norbert, en 1 andere'), array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'nl', 'Michal, Norbert, en 2 andere'), array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'nl', 'Michal, Norbert, Lukasz, en Pawel'), + + // Russian + array(array("Michal"), null, 'ru', 'Michal'), + array(array("Michal", "Norbert"), null, 'ru', 'Michal и Norbert'), + array(array("Michal", "Norbert", "Lukasz"), 2, 'ru', 'Michal, Norbert и ещё 1'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'ru', 'Michal, Norbert и ещё 2'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'ru', 'Michal, Norbert, Lukasz и Pawel'), ); } } \ No newline at end of file diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php index a993005..6665ff3 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php @@ -98,6 +98,25 @@ public function humanizeDataProvider() array("2014-05-01", "2014-04-01", 'преди 1 месец', 'bg'), array("2015-05-01", "2014-04-01", 'преди 1 година', 'bg'), array("2014-05-01", "2016-04-01", 'след 2 години', 'bg'), + + // Russian + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'сейчас', 'ru'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", 'через 5 секунд', 'ru'), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 минуту назад', 'ru'), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 минут назад', 'ru'), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", 'через 15 минут', 'ru'), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", 'через 1 час', 'ru'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", 'через 2 часа', 'ru'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 час назад', 'ru'), + array("2014-04-26", "2014-04-25", '1 день назад', 'ru'), + array("2014-04-26", "2014-04-24", '2 дня назад', 'ru'), + array("2014-04-26", "2014-04-28", 'через 2 дня', 'ru'), + array("2014-04-01", "2014-04-15", 'через 2 недели', 'ru'), + array("2014-04-15", "2014-04-07", '1 неделю назад', 'ru'), + array("2014-01-01", "2014-04-01", 'через 3 месяца', 'ru'), + array("2014-05-01", "2014-04-01", '1 месяц назад', 'ru'), + array("2015-05-01", "2014-04-01", '1 год назад', 'ru'), + array("2014-05-01", "2016-04-01", 'через 2 года', 'ru'), ); } @@ -206,6 +225,16 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 dae, 10 ure van nou af', 'af'), array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 dag, 1 uur, 40 minute gelede', 'af'), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 jaar, 1 dag van nou af', 'af'), + + // Russian + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 минута, 45 секунд назад', 'ru'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 час, 40 минут назад', 'ru'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", 'через 1 день, 15 минут', 'ru'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", 'через 7 дней, 2 часа', 'ru'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", 'через 1 год, 2 дня, 4 часа', 'ru'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", 'через 2 дня, 10 часов', 'ru'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 день, 1 час, 40 минут назад', 'ru'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", 'через 2 года, 1 день', 'ru'), ); } } \ No newline at end of file From fa73af33122a621b9caa1b8710fa5386cdaecabf Mon Sep 17 00:00:00 2001 From: Brad Mostert Date: Tue, 3 Nov 2015 08:28:05 +0200 Subject: [PATCH 045/193] moved optional precision parameter of binarySuffix in to its own function --- README.md | 17 ++++++++-- src/Coduo/PHPHumanizer/Number.php | 9 +++++- tests/Coduo/PHPHumanizer/Tests/NumberTest.php | 32 +++++++++---------- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 89d55fa..f9046f7 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,8 @@ echo Number::fromRoman("CXXV"); // 125 **Binary Suffix** +Convert a number of bytes in to the highest applicable data unit + ```php use Coduo\PHPHumanizer\Number; @@ -128,13 +130,22 @@ use Coduo\PHPHumanizer\Number; echo Number::binarySuffix(1536, 'pl'); // "1,5 kB" ``` -Number can also be humanized with a specific number of decimal places by providing a precision parameter (between 0 and 3) +Number can also be humanized with a specific number of decimal places with ```preciseBinarySuffix($number, $precision, $locale = 'en')``` +The precision parameter must be between 0 and 3. + +```php +use Coduo\PHPHumanizer\Number; + +echo Number::preciseBinarySuffix(1024, 2); // "1.00 kB" +echo Number::binarySuffix(1325899906842624, 3); // "1.178 PB" +``` + +This function also supports locale ```php use Coduo\PHPHumanizer\Number; -echo Number::binarySuffix(1024, 'en', 3); // "1.000 kB" -echo Number::binarySuffix(1325899906842624, 'en', 3); // "1.178 PB" +echo Number::binarySuffix(1325899906842624, 3, 'pl); // "1,178 PB" ``` **Metric Suffix** diff --git a/src/Coduo/PHPHumanizer/Number.php b/src/Coduo/PHPHumanizer/Number.php index f6877da..89caf87 100644 --- a/src/Coduo/PHPHumanizer/Number.php +++ b/src/Coduo/PHPHumanizer/Number.php @@ -19,7 +19,14 @@ public static function ordinal($number) return (string) new Ordinal($number); } - public static function binarySuffix($number, $locale = 'en', $precision = null) + public static function binarySuffix($number, $locale = 'en') + { + $binarySuffix = new BinarySuffix($number, $locale); + + return $binarySuffix->convert(); + } + + public static function preciseBinarySuffix($number, $precision, $locale = 'en') { $binarySuffix = new BinarySuffix($number, $locale, $precision); diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberTest.php index 38c178f..c2ef873 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberTest.php @@ -42,16 +42,16 @@ public function test_convert_number_to_string_with_binary_suffix($expected, $num } /** - * @dataProvider binarySuffixWithPrecisionDataProvider + * @dataProvider preciseBinarySuffixDataProvider * * @param $expected * @param $number * @param string $locale * @param integer $precision */ - public function test_convert_number_to_string_with_binary_suffix_precision($expected, $number, $locale = 'en', $precision) + public function test_convert_number_to_string_with_precise_binary_suffix($expected, $number, $precision, $locale = 'en') { - $this->assertEquals($expected, Number::binarySuffix($number, $locale, $precision)); + $this->assertEquals($expected, Number::preciseBinarySuffix($number, $precision, $locale)); } /** @@ -179,22 +179,22 @@ public function binarySuffixDataProvider() /** * @return array */ - public function binarySuffixWithPrecisionDataProvider() + public function preciseBinarySuffixDataProvider() { return array( - array(-1, -1, 'en', 3), - array("0 bytes", 0, 'en', 3), - array("1 bytes", 1, 'en', 3), - array("1.000 kB", 1024, 'en', 3), - array("1.001 kB", 1025, 'en', 3), - array("1.500 kB", 1536, 'en', 3), - array("5.000 MB", 1048576 * 5, 'en', 3), - array("2.000 GB", 1073741824 * 2, 'en', 3), - array("3.000 TB", 1099511627776 * 3, 'en', 3), - array("1.178 PB", 1325899906842624, 'en', 3), + array(-1, -1, 3), + array("0 bytes", 0, 3), + array("1 bytes", 1, 3), + array("1.000 kB", 1024, 3), + array("1.001 kB", 1025, 3), + array("1.500 kB", 1536, 3), + array("5.000 MB", 1048576 * 5, 3), + array("2.000 GB", 1073741824 * 2, 3), + array("3.000 TB", 1099511627776 * 3, 3), + array("1.178 PB", 1325899906842624, 3), - array("1,500 kB", 1536, 'pl', 3), - array("1,178 PB", 1325899906842624, 'pl', 3), + array("1,500 kB", 1536, 3, 'pl'), + array("1,178 PB", 1325899906842624, 3, 'pl'), ); } From f4ee349676553df626a41f85b3db49678fd37d6d Mon Sep 17 00:00:00 2001 From: Brad Mostert Date: Tue, 3 Nov 2015 08:32:12 +0200 Subject: [PATCH 046/193] updated documentation for preciseBinarySuffix --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f9046f7..6e09e1b 100644 --- a/README.md +++ b/README.md @@ -130,14 +130,14 @@ use Coduo\PHPHumanizer\Number; echo Number::binarySuffix(1536, 'pl'); // "1,5 kB" ``` -Number can also be humanized with a specific number of decimal places with ```preciseBinarySuffix($number, $precision, $locale = 'en')``` +Number can also be humanized with a specific number of decimal places with `preciseBinarySuffix($number, $precision, $locale = 'en')` The precision parameter must be between 0 and 3. ```php use Coduo\PHPHumanizer\Number; echo Number::preciseBinarySuffix(1024, 2); // "1.00 kB" -echo Number::binarySuffix(1325899906842624, 3); // "1.178 PB" +echo Number::preciseBinarySuffix(1325899906842624, 3); // "1.178 PB" ``` This function also supports locale @@ -145,7 +145,7 @@ This function also supports locale ```php use Coduo\PHPHumanizer\Number; -echo Number::binarySuffix(1325899906842624, 3, 'pl); // "1,178 PB" +echo Number::preciseBinarySuffix(1325899906842624, 3, 'pl'); // "1,178 PB" ``` **Metric Suffix** From 212711d7f8dd92a45721e50bea9cffa9dbbcc12b Mon Sep 17 00:00:00 2001 From: Semen Dubina Date: Tue, 3 Nov 2015 15:26:40 +0300 Subject: [PATCH 047/193] Fix compound.future for pt_BR. Inline key in PreciseFormatter. --- src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php | 6 ++---- .../Resources/translations/difference.pt_BR.yml | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index fef065c..7788683 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -31,7 +31,7 @@ public function formatDifference(PreciseDifference $difference, $locale = 'en') foreach ($difference->getCompoundResults() as $result) { $diff[] = $this->translator->transChoice( - 'compound.'.$result->getUnit()->getName(), + 'compound.' . $result->getUnit()->getName(), $result->getQuantity(), array('%count%' => $result->getQuantity()), 'difference', @@ -39,10 +39,8 @@ public function formatDifference(PreciseDifference $difference, $locale = 'en') ); } - $translationKey = $difference->isPast() ? 'past' : 'future'; - return $this->translator->trans( - 'compound.' . $translationKey, + 'compound.' . ($difference->isPast() ? 'past' : 'future'), array('%value%' => implode(', ', $diff)), 'difference', $locale diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml index d590ab4..b771ff4 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml @@ -32,4 +32,4 @@ compound: month: "{1} %count% mês|[2,Inf] %count% meses" year: "{1} %count% ano|[2,Inf] %count% anos" past: "%value% atrás" - from_now: "a partir de agora" + future: "%value% a partir de agora" From 27a65adb9be7ad787a26c218cc3fe4019d90f183 Mon Sep 17 00:00:00 2001 From: Brad Mostert Date: Wed, 4 Nov 2015 19:18:14 +0200 Subject: [PATCH 048/193] no longer showing decimal separator for zero precision --- src/Coduo/PHPHumanizer/String/BinarySuffix.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index 7ed216f..ab6ac36 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -67,7 +67,11 @@ protected function setSpecificPrecisionFormat($precision) 'up to three decimal places'); } - $icuFormat = str_pad('#.', (2+$precision), '0'); + $icuFormat = '#'; + if($precision > 0){ + $icuFormat .= str_pad('#.', (2+$precision), '0'); + } + foreach ($this->binaryPrefixes as $size => $unitPattern) { if($size >= 1024){ $symbol = substr($unitPattern, strpos($unitPattern, ' ')); From 84b88638bc1e4d29394aab0020c392f0b4eaa59f Mon Sep 17 00:00:00 2001 From: Brad Mostert Date: Wed, 4 Nov 2015 19:19:46 +0200 Subject: [PATCH 049/193] improved tests for preciseBinarySuffix() --- tests/Coduo/PHPHumanizer/Tests/NumberTest.php | 54 +++++++++++++++---- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberTest.php index c2ef873..db31d65 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberTest.php @@ -41,6 +41,14 @@ public function test_convert_number_to_string_with_binary_suffix($expected, $num $this->assertEquals($expected, Number::binarySuffix($number, $locale)); } + /** + * @expectedException \InvalidArgumentException + */ + public function test_statically_throw_exception_when_converting_to_string_with_binary_suffix_non_numeric_values() + { + Number::binarySuffix('as12'); + } + /** * @dataProvider preciseBinarySuffixDataProvider * @@ -57,9 +65,17 @@ public function test_convert_number_to_string_with_precise_binary_suffix($expect /** * @expectedException \InvalidArgumentException */ - public function test_statically_throw_exception_when_converting_to_string_with_binary_suffix_non_numeric_values() + public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_negative_precision() { - Number::binarySuffix('as12'); + Number::preciseBinarySuffix(1, -1); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_large_precision() + { + Number::preciseBinarySuffix(1, 4); } /** @@ -182,17 +198,37 @@ public function binarySuffixDataProvider() public function preciseBinarySuffixDataProvider() { return array( + // Negative case array(-1, -1, 3), + + // Byte Cases array("0 bytes", 0, 3), - array("1 bytes", 1, 3), - array("1.000 kB", 1024, 3), - array("1.001 kB", 1025, 3), - array("1.500 kB", 1536, 3), - array("5.000 MB", 1048576 * 5, 3), - array("2.000 GB", 1073741824 * 2, 3), - array("3.000 TB", 1099511627776 * 3, 3), + array("1 bytes", 1, 0), + array("1023 bytes", 1023, 3), + + // Kilobyte Cases + array('1.000 kB', 1024, 3), + array("2 kB", 1588, 0), + array("1.6 kB", 1588, 1), + array("1.55 kB", 1588, 2), + array("1.551 kB", 1588, 3), + + // Megabyte Cases + array("5.00 MB", (1048576 * 5), 2), + array("5.00 MB", (1048576 * 5) + 600, 2), + array("5.001 MB", (1048576 * 5) + 600, 3), + + // Gigabyte Cases + array("2 GB", 1073741824 * 2, 0), + array("2.0 GB", 1073741824 * 2, 1), + + // Terabyte Cases + array("3.00 TB", 1099511627776 * 3, 2), + + // Petabyte Case array("1.178 PB", 1325899906842624, 3), + // Locale Cases array("1,500 kB", 1536, 3, 'pl'), array("1,178 PB", 1325899906842624, 3, 'pl'), ); From 739d112729b81ddcccd171574ad39b04b1e6e842 Mon Sep 17 00:00:00 2001 From: Muhammad Irfan Date: Fri, 6 Nov 2015 00:41:43 +0700 Subject: [PATCH 050/193] Added Indonesian Language --- README.md | 1 + .../Resources/translations/difference.id.yml | 35 +++++++++++++++++++ .../Resources/translations/oxford.id.yml | 3 ++ 3 files changed, 39 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.id.yml diff --git a/README.md b/README.md index b94df81..f818266 100644 --- a/README.md +++ b/README.md @@ -234,6 +234,7 @@ Currently we support following languages: * [Norwegian](src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml) * [Afrikaans] (src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml) * [Bulgarian] (src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml) +* [Indonesian] (src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml) # Credits diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml new file mode 100644 index 0000000..cc3a3fc --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] baru saja" + future: "[0,Inf] baru saja" +second: + past: "{1} %count% detik yang lalu|[2,Inf] %count% detik yang lalu" + future: "{1} %count% detik dari sekarang|[2,Inf] %count% detik dari sekarang" +minute: + past: "{1} %count% menit yang lalu|[2,Inf] %count% menit yang lalu" + future: "{1} %count% menit dari sekarang|[2,Inf] %count% menit dari sekarang" +hour: + past: "{1} %count% jam yang lalu|[2,Inf] %count% jam yang lalu" + future: "{1} %count% jam dari sekarang|[2,Inf] %count% jam dari sekarang" +day: + past: "{1} %count% hari yang lalu|[2,Inf] %count% hari yang lalu" + future: "{1} %count% hari dari sekarang|[2,Inf] %count% dari sekarang" +week: + past: "{1} %count% minggu yang lalu|[2,Inf] %count% minggu yang lalu" + future: "{1} %count% minggu dari sekarang|[2,Inf] %count% minggu dari sekarang" +month: + past: "{1} %count% bulan yang lalu|[2,Inf] %count% bulan yang lalu" + future: "{1} %count% bulan dari sekarang|[2,Inf] %count% bulan dari sekarang" +year: + past: "{1} %count% tahun yang lalu|[2,Inf] %count% tahun yang lalu" + future: "{1} %count% tahun dari sekarang|[2,Inf] %count% tahun dari sekarang" + +compound: + second: "{1} %count% detik|[2,Inf] %count% detik" + minute: "{1} %count% menit|[2,Inf] %count% menit" + hour: "{1} %count% jam|[2,Inf] %count% jam" + day: "{1} %count% hari|[2,Inf] %count% hari" + week: "{1} %count% minggu|[2,Inf] %count% minggu" + month: "{1} %count% bulan|[2,Inf] %count% bulan" + year: "{1} %count% tahun|[2,Inf] %count% tahun" + past: "%value% yang lalu" + future: "%value% dari sekarang" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.id.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.id.yml new file mode 100644 index 0000000..3ff1323 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.id.yml @@ -0,0 +1,3 @@ +only_two: "%first% dan %second%" +comma_separated: "%list%, dan %last%" +comma_separated_with_limit: "{1} %list%, dan 1 lainnya|[2,Inf] %list%, dan %count% lainnya" \ No newline at end of file From 10ef4438fb14d07bfc2f44d29cc7f3c9b9fcf13c Mon Sep 17 00:00:00 2001 From: Muhammad Irfan Date: Fri, 6 Nov 2015 00:47:03 +0700 Subject: [PATCH 051/193] fixed Indonesian language typo --- src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml index cc3a3fc..8751811 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml @@ -12,7 +12,7 @@ hour: future: "{1} %count% jam dari sekarang|[2,Inf] %count% jam dari sekarang" day: past: "{1} %count% hari yang lalu|[2,Inf] %count% hari yang lalu" - future: "{1} %count% hari dari sekarang|[2,Inf] %count% dari sekarang" + future: "{1} %count% hari dari sekarang|[2,Inf] %count% hari dari sekarang" week: past: "{1} %count% minggu yang lalu|[2,Inf] %count% minggu yang lalu" future: "{1} %count% minggu dari sekarang|[2,Inf] %count% minggu dari sekarang" From 952fee55ac077f18b9673912ab005d4f44c2b3ad Mon Sep 17 00:00:00 2001 From: Muhammad Irfan Date: Fri, 6 Nov 2015 10:35:24 +0700 Subject: [PATCH 052/193] Added Indonesian language test case --- .../PHPHumanizer/Tests/CollectionTest.php | 7 +++++ .../Coduo/PHPHumanizer/Tests/DateTimeTest.php | 29 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php index 358b5d2..9769d05 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php @@ -43,6 +43,13 @@ public function oxfordCollectionProvider() array(array("Michal", "Norbert", "Lukasz"), 2, 'ru', 'Michal, Norbert и ещё 1'), array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'ru', 'Michal, Norbert и ещё 2'), array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'ru', 'Michal, Norbert, Lukasz и Pawel'), + + // Indonesian + array(array("Michal"), null, 'id', 'Michal'), + array(array("Michal", "Norbert"), null, 'id', 'Michal dan Norbert'), + array(array("Michal", "Norbert", "Lukasz"), 2, 'id', 'Michal, Norbert, dan 1 lainnya'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'id', 'Michal, Norbert, dan 2 lainnya'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'id', 'Michal, Norbert, Lukasz, dan Pawel'), ); } } \ No newline at end of file diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php index 6665ff3..93da3b7 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php @@ -117,6 +117,25 @@ public function humanizeDataProvider() array("2014-05-01", "2014-04-01", '1 месяц назад', 'ru'), array("2015-05-01", "2014-04-01", '1 год назад', 'ru'), array("2014-05-01", "2016-04-01", 'через 2 года', 'ru'), + + // Indonesian + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'baru saja', 'id'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", '5 detik dari sekarang', 'id'), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 menit yang lalu', 'id'), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 menit yang lalu', 'id'), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", '15 menit dari sekarang', 'id'), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", '1 jam dari sekarang', 'id'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", '2 jam dari sekarang', 'id'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 jam yang lalu', 'id'), + array("2014-04-26", "2014-04-25", '1 hari yang lalu', 'id'), + array("2014-04-26", "2014-04-24", '2 hari yang lalu', 'id'), + array("2014-04-26", "2014-04-28", '2 hari dari sekarang', 'id'), + array("2014-04-01", "2014-04-15", '2 minggu dari sekarang', 'id'), + array("2014-04-15", "2014-04-07", '1 minggu yang lalu', 'id'), + array("2014-01-01", "2014-04-01", '3 bulan dari sekarang', 'id'), + array("2014-05-01", "2014-04-01", '1 bulan yang lalu', 'id'), + array("2015-05-01", "2014-04-01", '1 tahun yang lalu', 'id'), + array("2014-05-01", "2016-04-01", '2 tahun dari sekarang', 'id'), ); } @@ -235,6 +254,16 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-28 23:00:00", 'через 2 дня, 10 часов', 'ru'), array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 день, 1 час, 40 минут назад', 'ru'), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", 'через 2 года, 1 день', 'ru'), + + // Indonesian + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 menit, 45 detik yang lalu', 'id'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 jam, 40 menit yang lalu', 'id'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 hari, 15 menit dari sekarang', 'id'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 hari, 2 jam dari sekarang', 'id'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 tahun, 2 hari, 4 jam dari sekarang', 'id'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 hari, 10 jam dari sekarang', 'id'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 hari, 1 jam, 40 menit yang lalu', 'id'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 tahun, 1 hari dari sekarang', 'id'), ); } } \ No newline at end of file From 4064b751be4854b7053a1ad58f49246228760f9c Mon Sep 17 00:00:00 2001 From: arrowrowe Date: Fri, 6 Nov 2015 16:38:00 +0800 Subject: [PATCH 053/193] Add Chinese Simplified (zh_CHS) --- .../translations/difference.zh_CHS.yml | 35 ++++++++++++++++++ src/Coduo/PHPHumanizer/Translator/Builder.php | 2 +- .../Coduo/PHPHumanizer/Tests/DateTimeTest.php | 37 +++++++++++++++++-- 3 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CHS.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CHS.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CHS.yml new file mode 100644 index 0000000..4d5cc40 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CHS.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] 刚刚" + future: "[0,Inf] 刚刚" +second: + past: "[1,Inf] %count% 秒前" + future: "[1,Inf] %count% 秒后" +minute: + past: "[1,Inf] %count% 分钟前" + future: "[1,Inf] %count% 分钟后" +hour: + past: "[1,Inf] %count% 小时前" + future: "[1,Inf] %count% 小时后" +day: + past: "[1,Inf] %count% 天前" + future: "[1,Inf] %count% 天后" +week: + past: "[1,Inf] %count% 周前" + future: "[1,Inf] %count% 周后" +month: + past: "[1,Inf] %count% 个月前" + future: "[1,Inf] %count% 个月后" +year: + past: "[1,Inf] %count% 年前" + future: "[1,Inf] %count% 年后" + +compound: + second: "[1,Inf] %count% 秒" + minute: "[1,Inf] %count% 分钟" + hour: "[1,Inf] %count% 小时" + day: "[1,Inf] %count% 天" + week: "[1,Inf] %count% 周" + month: "[1,Inf] %count% 个月" + year: "[1,Inf] %count% 年" + past: "%value%前" + future: "%value%后" diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index 7131ed1..38cb543 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -13,7 +13,7 @@ public static function build($locale) $translator->addLoader('yml', new YamlFileLoader()); $iterator = new \FilesystemIterator(__DIR__.'/../Resources/translations'); - $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.yml$/'); + $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2,3})\.yml$/'); foreach ($filter as $file) { /* @var $file \SplFileInfo */ diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php index 6665ff3..e90ca0b 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php @@ -58,7 +58,26 @@ public function humanizeDataProvider() array("2015-05-01", "2014-04-01", '1 year ago', 'en'), array("2014-05-01", "2016-04-01", '2 years from now', 'en'), - // Polish + // Chinese Simplified + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", '刚刚', 'zh_CHS'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", '5 秒后', 'zh_CHS'), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 分钟前', 'zh_CHS'), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 分钟前', 'zh_CHS'), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", '15 分钟后', 'zh_CHS'), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", '1 小时后', 'zh_CHS'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", '2 小时后', 'zh_CHS'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 小时前', 'zh_CHS'), + array("2014-04-26", "2014-04-25", '1 天前', 'zh_CHS'), + array("2014-04-26", "2014-04-24", '2 天前', 'zh_CHS'), + array("2014-04-26", "2014-04-28", '2 天后', 'zh_CHS'), + array("2014-04-01", "2014-04-15", '2 周后', 'zh_CHS'), + array("2014-04-15", "2014-04-07", '1 周前', 'zh_CHS'), + array("2014-01-01", "2014-04-01", '3 个月后', 'zh_CHS'), + array("2014-05-01", "2014-04-01", '1 个月前', 'zh_CHS'), + array("2015-05-01", "2014-04-01", '1 年前', 'zh_CHS'), + array("2014-05-01", "2016-04-01", '2 年后', 'zh_CHS'), + + // Polish array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'w tym momencie', 'pl'), array("2014-04-26 13:00:00", "2014-04-26 13:00:05", 'za 5 sekund', 'pl'), array("2014-04-26 13:00:00", "2014-04-26 12:59:00", 'minutę temu', 'pl'), @@ -79,7 +98,7 @@ public function humanizeDataProvider() array("2015-05-01", "2014-04-01", 'rok temu', 'pl'), array("2014-05-01", "2016-04-01", 'za 2 lata', 'pl'), array("2014-05-01", "2009-04-01", '5 lat temu', 'pl'), - + // Bulgarian array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'в момента', 'bg'), array("2014-04-26 13:00:00", "2014-04-26 13:00:05", 'след 5 секунди', 'bg'), @@ -136,6 +155,16 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 day, 1 hour, 40 minutes ago', 'en'), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 years, 1 day from now', 'en'), + // Chinese Simplified + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 分钟, 45 秒前', 'zh_CHS'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 小时, 40 分钟前', 'zh_CHS'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 天, 15 分钟后', 'zh_CHS'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 天, 2 小时后', 'zh_CHS'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 年, 2 天, 4 小时后', 'zh_CHS'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 天, 10 小时后', 'zh_CHS'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 天, 1 小时, 40 分钟前', 'zh_CHS'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 年, 1 天后', 'zh_CHS'), + // Polish array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuta, 45 sekund temu', 'pl'), array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 godzina, 40 minut temu', 'pl'), @@ -205,7 +234,7 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 dager, 10 timer fra nå', 'no'), array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 dag, 1 time, 40 minutter siden', 'no'), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 år, 1 dag fra nå', 'no'), - + // Bulgarian array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 минута, 45 секунди преди това', 'bg'), array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 час, 40 минути преди това', 'bg'), @@ -237,4 +266,4 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2016-04-27 13:00:00", 'через 2 года, 1 день', 'ru'), ); } -} \ No newline at end of file +} From 002c26120f91908484ef6e346ef8e39dc711db24 Mon Sep 17 00:00:00 2001 From: arrowrowe Date: Fri, 6 Nov 2015 16:53:48 +0800 Subject: [PATCH 054/193] Add Oxford zh_CHS and its tests --- .../Resources/translations/oxford.zh_CHS.yml | 3 +++ tests/Coduo/PHPHumanizer/Tests/CollectionTest.php | 11 +++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CHS.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CHS.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CHS.yml new file mode 100644 index 0000000..1bf660e --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CHS.yml @@ -0,0 +1,3 @@ +only_two: "%first% 和 %second%" +comma_separated: "%list%, 和 %last%" +comma_separated_with_limit: "{1} %list% 和另一个|[2,Inf] %list% 和另 %count% 个" diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php index 358b5d2..f18fdab 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php @@ -13,7 +13,7 @@ function test_oxford_collections_humanizing($collection, $limit, $locale, $expec { $this->assertEquals($expectedResult, Collection::oxford($collection, $limit, $locale)); } - + public function oxfordCollectionProvider() { return array( @@ -24,6 +24,13 @@ public function oxfordCollectionProvider() array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'en', 'Michal, Norbert, and 2 others'), array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'en', 'Michal, Norbert, Lukasz, and Pawel'), + // Chinese Simplified + array(array("Michal"), null, 'zh_CHS', 'Michal'), + array(array("Michal", "Norbert"), null, 'zh_CHS', 'Michal 和 Norbert'), + array(array("Michal", "Norbert", "Lukasz"), 2, 'zh_CHS', 'Michal, Norbert 和另一个'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'zh_CHS', 'Michal, Norbert 和另 2 个'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'zh_CHS', 'Michal, Norbert, Lukasz, 和 Pawel'), + // Polish array(array("Michal"), null, 'pl', 'Michal'), array(array("Michal", "Norbert"), null, 'pl', 'Michal i Norbert'), @@ -45,4 +52,4 @@ public function oxfordCollectionProvider() array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'ru', 'Michal, Norbert, Lukasz и Pawel'), ); } -} \ No newline at end of file +} From dfcdf694c8db3d22cddcabeb28ae72df2c527af8 Mon Sep 17 00:00:00 2001 From: arrowrowe Date: Fri, 6 Nov 2015 16:55:19 +0800 Subject: [PATCH 055/193] Change zh_CHS to zh_CN --- ...erence.zh_CHS.yml => difference.zh_CN.yml} | 0 .../{oxford.zh_CHS.yml => oxford.zh_CN.yml} | 0 src/Coduo/PHPHumanizer/Translator/Builder.php | 2 +- .../PHPHumanizer/Tests/CollectionTest.php | 10 ++-- .../Coduo/PHPHumanizer/Tests/DateTimeTest.php | 50 +++++++++---------- 5 files changed, 31 insertions(+), 31 deletions(-) rename src/Coduo/PHPHumanizer/Resources/translations/{difference.zh_CHS.yml => difference.zh_CN.yml} (100%) rename src/Coduo/PHPHumanizer/Resources/translations/{oxford.zh_CHS.yml => oxford.zh_CN.yml} (100%) diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CHS.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml similarity index 100% rename from src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CHS.yml rename to src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CHS.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.yml similarity index 100% rename from src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CHS.yml rename to src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.yml diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index 38cb543..7131ed1 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -13,7 +13,7 @@ public static function build($locale) $translator->addLoader('yml', new YamlFileLoader()); $iterator = new \FilesystemIterator(__DIR__.'/../Resources/translations'); - $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2,3})\.yml$/'); + $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.yml$/'); foreach ($filter as $file) { /* @var $file \SplFileInfo */ diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php index f18fdab..2c6d9dd 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php @@ -25,11 +25,11 @@ public function oxfordCollectionProvider() array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'en', 'Michal, Norbert, Lukasz, and Pawel'), // Chinese Simplified - array(array("Michal"), null, 'zh_CHS', 'Michal'), - array(array("Michal", "Norbert"), null, 'zh_CHS', 'Michal 和 Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'zh_CHS', 'Michal, Norbert 和另一个'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'zh_CHS', 'Michal, Norbert 和另 2 个'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'zh_CHS', 'Michal, Norbert, Lukasz, 和 Pawel'), + array(array("Michal"), null, 'zh_CN', 'Michal'), + array(array("Michal", "Norbert"), null, 'zh_CN', 'Michal 和 Norbert'), + array(array("Michal", "Norbert", "Lukasz"), 2, 'zh_CN', 'Michal, Norbert 和另一个'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'zh_CN', 'Michal, Norbert 和另 2 个'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'zh_CN', 'Michal, Norbert, Lukasz, 和 Pawel'), // Polish array(array("Michal"), null, 'pl', 'Michal'), diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php index e90ca0b..fd97c7b 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php @@ -59,23 +59,23 @@ public function humanizeDataProvider() array("2014-05-01", "2016-04-01", '2 years from now', 'en'), // Chinese Simplified - array("2014-04-26 13:00:00", "2014-04-26 13:00:00", '刚刚', 'zh_CHS'), - array("2014-04-26 13:00:00", "2014-04-26 13:00:05", '5 秒后', 'zh_CHS'), - array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 分钟前', 'zh_CHS'), - array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 分钟前', 'zh_CHS'), - array("2014-04-26 13:00:00", "2014-04-26 13:15:00", '15 分钟后', 'zh_CHS'), - array("2014-04-26 13:00:00", "2014-04-26 14:00:00", '1 小时后', 'zh_CHS'), - array("2014-04-26 13:00:00", "2014-04-26 15:00:00", '2 小时后', 'zh_CHS'), - array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 小时前', 'zh_CHS'), - array("2014-04-26", "2014-04-25", '1 天前', 'zh_CHS'), - array("2014-04-26", "2014-04-24", '2 天前', 'zh_CHS'), - array("2014-04-26", "2014-04-28", '2 天后', 'zh_CHS'), - array("2014-04-01", "2014-04-15", '2 周后', 'zh_CHS'), - array("2014-04-15", "2014-04-07", '1 周前', 'zh_CHS'), - array("2014-01-01", "2014-04-01", '3 个月后', 'zh_CHS'), - array("2014-05-01", "2014-04-01", '1 个月前', 'zh_CHS'), - array("2015-05-01", "2014-04-01", '1 年前', 'zh_CHS'), - array("2014-05-01", "2016-04-01", '2 年后', 'zh_CHS'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", '刚刚', 'zh_CN'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", '5 秒后', 'zh_CN'), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 分钟前', 'zh_CN'), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 分钟前', 'zh_CN'), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", '15 分钟后', 'zh_CN'), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", '1 小时后', 'zh_CN'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", '2 小时后', 'zh_CN'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 小时前', 'zh_CN'), + array("2014-04-26", "2014-04-25", '1 天前', 'zh_CN'), + array("2014-04-26", "2014-04-24", '2 天前', 'zh_CN'), + array("2014-04-26", "2014-04-28", '2 天后', 'zh_CN'), + array("2014-04-01", "2014-04-15", '2 周后', 'zh_CN'), + array("2014-04-15", "2014-04-07", '1 周前', 'zh_CN'), + array("2014-01-01", "2014-04-01", '3 个月后', 'zh_CN'), + array("2014-05-01", "2014-04-01", '1 个月前', 'zh_CN'), + array("2015-05-01", "2014-04-01", '1 年前', 'zh_CN'), + array("2014-05-01", "2016-04-01", '2 年后', 'zh_CN'), // Polish array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'w tym momencie', 'pl'), @@ -156,14 +156,14 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 years, 1 day from now', 'en'), // Chinese Simplified - array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 分钟, 45 秒前', 'zh_CHS'), - array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 小时, 40 分钟前', 'zh_CHS'), - array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 天, 15 分钟后', 'zh_CHS'), - array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 天, 2 小时后', 'zh_CHS'), - array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 年, 2 天, 4 小时后', 'zh_CHS'), - array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 天, 10 小时后', 'zh_CHS'), - array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 天, 1 小时, 40 分钟前', 'zh_CHS'), - array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 年, 1 天后', 'zh_CHS'), + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 分钟, 45 秒前', 'zh_CN'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 小时, 40 分钟前', 'zh_CN'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 天, 15 分钟后', 'zh_CN'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 天, 2 小时后', 'zh_CN'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 年, 2 天, 4 小时后', 'zh_CN'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 天, 10 小时后', 'zh_CN'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 天, 1 小时, 40 分钟前', 'zh_CN'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 年, 1 天后', 'zh_CN'), // Polish array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 minuta, 45 sekund temu', 'pl'), From 0da71fbdfaf3a7c78ebf6542e60b7612d84dce75 Mon Sep 17 00:00:00 2001 From: Alexandr Bordun Date: Fri, 6 Nov 2015 09:56:02 +0100 Subject: [PATCH 056/193] Adding Ukrainian to the list of languages --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f818266..0ba5589 100644 --- a/README.md +++ b/README.md @@ -235,6 +235,7 @@ Currently we support following languages: * [Afrikaans] (src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml) * [Bulgarian] (src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml) * [Indonesian] (src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml) +* [Українська] (src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml) # Credits From 34ef53fbd42ee7d33999ca4896ea17c2a1cc8a30 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Fri, 6 Nov 2015 10:08:20 +0100 Subject: [PATCH 057/193] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f818266..26859fe 100644 --- a/README.md +++ b/README.md @@ -235,6 +235,7 @@ Currently we support following languages: * [Afrikaans] (src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml) * [Bulgarian] (src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml) * [Indonesian] (src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml) +* [Chinese Simplified] (src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml) # Credits From 42c1cc3421dd97a37bfc6037e9368dbdc60764f3 Mon Sep 17 00:00:00 2001 From: Alexandr Bordun Date: Fri, 6 Nov 2015 10:15:58 +0100 Subject: [PATCH 058/193] Create difference.uk.yml --- .../Resources/translations/difference.uk.yml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml new file mode 100644 index 0000000..68508e3 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] зараз" + future: "[0,Inf] зараз" +second: + past: "%count% секунду тому|%count% секунди тому|%count% секунд тому" + future: "через %count% секунду|через %count% секунди|через %count% секунд" +minute: + past: "%count% хвилину тому|%count% хвилини тому|%count% хвилин тому" + future: "через %count% хвилину|через %count% хвилини|через %count% хвилин" +hour: + past: "%count% годину тому|%count% години тому|%count% годин тому" + future: "через %count% годину|через %count% години|через %count% годин" +day: + past: "%count% день тому|%count% дні тому|%count% днів тому" + future: "через %count% день|через %count% дни|через %count% днів" +week: + past: "%count% тиждень тому|%count% тижні тому|%count% тижнів тому" + future: "через %count% тиждень|через %count% тижні|через %count% тижнів" +month: + past: "%count% місяць тому|%count% місяці тому|%count% місяців тому" + future: "через %count% місяць|через %count% місяці|через %count% місяців" +year: + past: "%count% рік тому|%count% роки тому|%count% років тому" + future: "через %count% рік|через %count% роки|через %count% років" + +compound: + second: "%count% секунда|%count% секунди|%count% секунд" + minute: "%count% хвилина|%count% хвилини|%count% хвилин" + hour: "%count% година|%count% години|%count% годин" + day: "%count% день|%count% дні|%count% днів" + week: "%count% тиждень|%count% тижні|%count% тижнів" + month: "%count% місяць|%count% місяця|%count% місяців" + year: "%count% рік|%count% роки|%count% років" + past: "%value% тому" + future: "через %value%" From e79e0491351bcb835f1c58611e6f55b728816376 Mon Sep 17 00:00:00 2001 From: Borales Date: Fri, 6 Nov 2015 11:22:07 +0100 Subject: [PATCH 059/193] Adding oxford.uk.yml --- src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.yml new file mode 100644 index 0000000..117fba9 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.yml @@ -0,0 +1,3 @@ +only_two: "%first% та %second%" +comma_separated: "%list% та %last%" +comma_separated_with_limit: "{1} %list% і ще 1|[2,Inf] %list% і ще %count%" \ No newline at end of file From f90bc6796f4b7a638bd8d06c517a3e77da0ae8e0 Mon Sep 17 00:00:00 2001 From: Orestes Carracedo Date: Thu, 29 Oct 2015 00:28:24 +0100 Subject: [PATCH 060/193] Add Spanish translation. --- .../Resources/translations/difference.es.yml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml new file mode 100644 index 0000000..efc88d6 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] ahora mismo" + future: "[0,Inf] ahora mismo" +second: + past: "{1} Hace %count% segundo |[2,Inf] Hace %count% segundos" + future: "{1} Dentro de %count% segundo|[2,Inf] Dentro de %count% segundos" +minute: + past: "{1} Hace %count% minuto|[2,Inf] Hace %count% minutos" + future: "{1} Dentro de %count% minuto|[2,Inf] Dentro de %count% minutos" +hour: + past: "{1} Hace %count% hora|[2,Inf] Hace %count% horas" + future: "{1} Dentro de %count% hora|[2,Inf] Dentro de %count% horas" +day: + past: "{1} Hace %count% día|[2,Inf] Hace %count% días" + future: "{1} Dentro de %count% día|[2,Inf] Dentro de %count% días" +week: + past: "{1} Hace %count% semana|[2,Inf] Hace %count% semanas" + future: "{1} Dentro de %count% semana|[2,Inf] Dentro de %count% semanas" +month: + past: "{1} Hace %count% mes|[2,Inf] Hace %count% meses" + future: "{1} Dentro de %count% mes|[2,Inf] Dentro de %count% meses" +year: + past: "{1} Hace %count% año|[2,Inf] Hace %count% años" + future: "{1} Dentro de %count% año|[2,Inf] Dentro de %count% años" + +compound: + second: "{1} %count% segundo|[2,Inf] %count% segundos" + minute: "{1} %count% minuto|[2,Inf] %count% minutos" + hour: "{1} %count% hora|[2,Inf] %count% horas" + day: "{1} %count% día|[2,Inf] %count% días" + week: "{1} %count% semana|[2,Inf] %count% semanas" + month: "{1} %count% mes|[2,Inf] %count% meses" + year: "{1} %count% año|[2,Inf] %count% años" + ago: "atrás" + from_now: "a partir de ahora" \ No newline at end of file From 95f8ae643c7c4236ee88d4a625fa079c115ef576 Mon Sep 17 00:00:00 2001 From: Orestes Carracedo Date: Tue, 3 Nov 2015 23:51:36 +0100 Subject: [PATCH 061/193] Update difference compound translation for past/future --- .../PHPHumanizer/Resources/translations/difference.es.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml index efc88d6..28582c1 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml @@ -31,5 +31,5 @@ compound: week: "{1} %count% semana|[2,Inf] %count% semanas" month: "{1} %count% mes|[2,Inf] %count% meses" year: "{1} %count% año|[2,Inf] %count% años" - ago: "atrás" - from_now: "a partir de ahora" \ No newline at end of file + past: "hace %value%" + future: "dentro de %value%" From 2b3bb8f60a40369a408e06d7c509d1afddc6f9db Mon Sep 17 00:00:00 2001 From: Orestes Carracedo Date: Tue, 3 Nov 2015 23:51:56 +0100 Subject: [PATCH 062/193] Add translation for Oxford collection --- src/Coduo/PHPHumanizer/Resources/translations/oxford.es.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.es.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.es.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.es.yml new file mode 100644 index 0000000..1335e9f --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.es.yml @@ -0,0 +1,3 @@ +only_two: "%first% y %second%" +comma_separated: "%list%, y %last%" +comma_separated_with_limit: "{1} %list%, y 1 más|[2,Inf] %list%, y %count% más" From dc259146e4df0cee58367cd96f9fff4a02262d90 Mon Sep 17 00:00:00 2001 From: Orestes Carracedo Date: Tue, 3 Nov 2015 23:52:43 +0100 Subject: [PATCH 063/193] Update translations list on README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 26859fe..209fe80 100644 --- a/README.md +++ b/README.md @@ -236,6 +236,7 @@ Currently we support following languages: * [Bulgarian] (src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml) * [Indonesian] (src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml) * [Chinese Simplified] (src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml) +* [Spanish] (src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml) # Credits From 3f27953f463f7c3878a89054d7af5e080ecfe3b5 Mon Sep 17 00:00:00 2001 From: Orestes Carracedo Date: Thu, 5 Nov 2015 18:07:18 +0100 Subject: [PATCH 064/193] All transation strings transformed to lowerspace. --- .../Resources/translations/difference.es.yml | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml index 28582c1..0cc130c 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml @@ -2,26 +2,26 @@ just_now: past: "[0,Inf] ahora mismo" future: "[0,Inf] ahora mismo" second: - past: "{1} Hace %count% segundo |[2,Inf] Hace %count% segundos" - future: "{1} Dentro de %count% segundo|[2,Inf] Dentro de %count% segundos" + past: "{1} hace %count% segundo |[2,Inf] hace %count% segundos" + future: "{1} dentro de %count% segundo|[2,Inf] dentro de %count% segundos" minute: - past: "{1} Hace %count% minuto|[2,Inf] Hace %count% minutos" - future: "{1} Dentro de %count% minuto|[2,Inf] Dentro de %count% minutos" + past: "{1} hace %count% minuto|[2,Inf] hace %count% minutos" + future: "{1} dentro de %count% minuto|[2,Inf] dentro de %count% minutos" hour: - past: "{1} Hace %count% hora|[2,Inf] Hace %count% horas" - future: "{1} Dentro de %count% hora|[2,Inf] Dentro de %count% horas" + past: "{1} hace %count% hora|[2,Inf] hace %count% horas" + future: "{1} dentro de %count% hora|[2,Inf] dentro de %count% horas" day: - past: "{1} Hace %count% día|[2,Inf] Hace %count% días" - future: "{1} Dentro de %count% día|[2,Inf] Dentro de %count% días" + past: "{1} hace %count% día|[2,Inf] hace %count% días" + future: "{1} dentro de %count% día|[2,Inf] dentro de %count% días" week: - past: "{1} Hace %count% semana|[2,Inf] Hace %count% semanas" - future: "{1} Dentro de %count% semana|[2,Inf] Dentro de %count% semanas" + past: "{1} hace %count% semana|[2,Inf] hace %count% semanas" + future: "{1} dentro de %count% semana|[2,Inf] dentro de %count% semanas" month: - past: "{1} Hace %count% mes|[2,Inf] Hace %count% meses" - future: "{1} Dentro de %count% mes|[2,Inf] Dentro de %count% meses" + past: "{1} hace %count% mes|[2,Inf] hace %count% meses" + future: "{1} dentro de %count% mes|[2,Inf] dentro de %count% meses" year: - past: "{1} Hace %count% año|[2,Inf] Hace %count% años" - future: "{1} Dentro de %count% año|[2,Inf] Dentro de %count% años" + past: "{1} hace %count% año|[2,Inf] hace %count% años" + future: "{1} dentro de %count% año|[2,Inf] dentro de %count% años" compound: second: "{1} %count% segundo|[2,Inf] %count% segundos" From 5260e9131a30e42c2cbe9685ed67ffb1676b3433 Mon Sep 17 00:00:00 2001 From: Orestes Carracedo Date: Thu, 5 Nov 2015 18:07:53 +0100 Subject: [PATCH 065/193] Add tests. --- .../Coduo/PHPHumanizer/Tests/DateTimeTest.php | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php index 3d6669f..2835a80 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php @@ -155,6 +155,25 @@ public function humanizeDataProvider() array("2014-05-01", "2014-04-01", '1 bulan yang lalu', 'id'), array("2015-05-01", "2014-04-01", '1 tahun yang lalu', 'id'), array("2014-05-01", "2016-04-01", '2 tahun dari sekarang', 'id'), + + // Spanish + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'ahora mismo', 'es'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", 'dentro de 5 segundos', 'es'), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", 'hace 1 minuto', 'es'), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", 'hace 15 minutos', 'es'), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", 'dentro de 15 minutos', 'es'), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", 'dentro de 1 hora', 'es'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", 'dentro de 2 horas', 'es'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", 'hace 1 hora', 'es'), + array("2014-04-26", "2014-04-25", 'hace 1 día', 'es'), + array("2014-04-26", "2014-04-24", 'hace 2 días', 'es'), + array("2014-04-26", "2014-04-28", 'dentro de 2 días', 'es'), + array("2014-04-01", "2014-04-15", 'dentro de 2 semanas', 'es'), + array("2014-04-15", "2014-04-07", 'hace 1 semana', 'es'), + array("2014-01-01", "2014-04-01", 'dentro de 3 meses', 'es'), + array("2014-05-01", "2014-04-01", 'hace 1 mes', 'es'), + array("2015-05-01", "2014-04-01", 'hace 1 año', 'es'), + array("2014-05-01", "2016-04-01", 'dentro de 2 años', 'es'), ); } @@ -293,6 +312,16 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 hari, 10 jam dari sekarang', 'id'), array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 hari, 1 jam, 40 menit yang lalu', 'id'), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 tahun, 1 hari dari sekarang', 'id'), + + // Spanish + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", 'hace 1 minuto, 45 segundos', 'es'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", 'hace 1 hora, 40 minutos', 'es'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", 'dentro de 1 día, 15 minutos', 'es'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", 'dentro de 7 días, 2 horas', 'es'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", 'dentro de 1 año, 2 días, 4 horas', 'es'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", 'dentro de 2 días, 10 horas', 'es'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", 'hace 1 día, 1 hora, 40 minutos', 'es'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", 'dentro de 2 años, 1 día', 'es'), ); } } From 415fb6bd0363215a8860a65e8f7f260920ccd218 Mon Sep 17 00:00:00 2001 From: Max Roeleveld Date: Sat, 7 Nov 2015 11:09:36 +0100 Subject: [PATCH 066/193] Reworked into Strategy pattern --- spec/Coduo/PHPHumanizer/NumberSpec.php | 130 ------------------ src/Coduo/PHPHumanizer/Number.php | 3 +- src/Coduo/PHPHumanizer/Number/Ordinal.php | 29 ++-- .../PHPHumanizer/Number/Ordinal/Builder.php | 31 +++-- .../Number/Ordinal/StrategyInterface.php | 12 ++ .../Resources/Ordinal/EnStrategy.php | 25 ++++ .../Resources/Ordinal/NlStrategy.php | 13 ++ .../Resources/translations/ordinal.en.php | 22 --- .../Resources/translations/ordinal.nl.php | 11 -- 9 files changed, 86 insertions(+), 190 deletions(-) delete mode 100644 spec/Coduo/PHPHumanizer/NumberSpec.php create mode 100644 src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php create mode 100644 src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php create mode 100644 src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/ordinal.en.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/ordinal.nl.php diff --git a/spec/Coduo/PHPHumanizer/NumberSpec.php b/spec/Coduo/PHPHumanizer/NumberSpec.php deleted file mode 100644 index 1e03273..0000000 --- a/spec/Coduo/PHPHumanizer/NumberSpec.php +++ /dev/null @@ -1,130 +0,0 @@ -ordinalize(1)->shouldReturn("1st"); - $this->ordinalize(2)->shouldReturn("2nd"); - $this->ordinalize(23)->shouldReturn("23rd"); - $this->ordinalize(1002)->shouldReturn("1002nd"); - $this->ordinalize(-111)->shouldReturn("-111th"); - } - - function it_returns_ordinal_suffix() - { - $this->ordinal(1)->shouldReturn("st"); - $this->ordinal(2)->shouldReturn("nd"); - $this->ordinal(23)->shouldReturn("rd"); - $this->ordinal(1002)->shouldReturn("nd"); - $this->ordinal(-111)->shouldReturn("th"); - } - - function it_convert_number_to_string_with_binary_suffix() - { - $this->binarySuffix(-1)->shouldReturn(-1); - $this->binarySuffix(0)->shouldReturn("0 bytes"); - $this->binarySuffix(1)->shouldReturn("1 bytes"); - $this->binarySuffix(1024)->shouldReturn("1 kB"); - $this->binarySuffix(1025)->shouldReturn("1 kB"); - $this->binarySuffix(1536)->shouldReturn("1.5 kB"); - $this->binarySuffix(1048576 * 5)->shouldReturn("5 MB"); - $this->binarySuffix(1073741824 * 2)->shouldReturn("2 GB"); - $this->binarySuffix(1099511627776 * 3)->shouldReturn("3 TB"); - $this->binarySuffix(1325899906842624)->shouldReturn("1.18 PB"); - } - - function it_convert_number_to_string_with_binary_suffix_for_specific_locale() - { - $this->binarySuffix(1536, 'pl')->shouldReturn("1,5 kB"); - $this->binarySuffix(1325899906842624, 'pl')->shouldReturn("1,18 PB"); - } - - function it_throw_exception_when_converting_to_string_with_binary_suffix_non_numeric_values() - { - $this->shouldThrow(new \InvalidArgumentException("Binary suffix converter accept only numeric values.")) - ->during('binarySuffix', array('as12')); - } - - function it_convert_number_to_string_with_metric_suffix() - { - $this->metricSuffix(-1)->shouldReturn("-1"); - $this->metricSuffix(0)->shouldReturn("0"); - $this->metricSuffix(1)->shouldReturn("1"); - $this->metricSuffix(101)->shouldReturn("101"); - $this->metricSuffix(1000)->shouldReturn("1k"); - $this->metricSuffix(1240)->shouldReturn("1.2k"); - $this->metricSuffix(1240000)->shouldReturn("1.24M"); - $this->metricSuffix(3500000)->shouldReturn("3.5M"); - } - - function it_convert_number_to_string_with_metric_suffix_for_specific_locale() - { - $this->metricSuffix(1240, 'pl')->shouldReturn("1,2k"); - $this->metricSuffix(1240000, 'pl')->shouldReturn("1,24M"); - $this->metricSuffix(3500000, 'pl')->shouldReturn("3,5M"); - } - - function it_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() - { - $this->shouldThrow(new \InvalidArgumentException("Metric suffix converter accept only numeric values.")) - ->during('metricSuffix', array('as12')); - } - - function it_converts_numbers_to_roman() - { - $this->toRoman(1)->shouldReturn("I"); - $this->toRoman(5)->shouldReturn("V"); - $this->toRoman(9)->shouldReturn("IX"); - $this->toRoman(10)->shouldReturn("X"); - $this->toRoman(125)->shouldReturn("CXXV"); - $this->toRoman(1300)->shouldReturn("MCCC"); - $this->toRoman(3999)->shouldReturn("MMMCMXCIX"); - } - - function it_throws_exception_when_converting_number_is_out_of_range() - { - $this->shouldThrow(new \InvalidArgumentException())->during('toRoman', array(-1)); - $this->shouldThrow(new \InvalidArgumentException())->during('toRoman', array(4000)); - } - - function it_converts_roman_numbers_to_arabic() - { - $this->fromRoman("I")->shouldReturn(1); - $this->fromRoman("V")->shouldReturn(5); - $this->fromRoman("IX")->shouldReturn(9); - $this->fromRoman("CXXV")->shouldReturn(125); - $this->fromRoman("MCCC")->shouldReturn(1300); - $this->fromRoman("MMMCMXCIX")->shouldReturn(3999); - } - - function it_throws_exception_when_converting_roman_number_is_invalid() - { - $this->shouldThrow(new \InvalidArgumentException())->during('fromRoman', array(1234)); - $this->shouldThrow(new \InvalidArgumentException())->during('fromRoman', array("")); - $this->shouldThrow(new \InvalidArgumentException())->during('fromRoman', array("foobar")); - } - - function it_ordinalizes_numbers_for_dutch_locale() - { - $this->ordinalize(1, 'nl')->shouldReturn("1e"); - $this->ordinalize(2, 'nl')->shouldReturn("2e"); - $this->ordinalize(23, 'nl')->shouldReturn("23e"); - $this->ordinalize(1002, 'nl')->shouldReturn("1002e"); - $this->ordinalize(-111, 'nl')->shouldReturn("-111e"); - } - - function it_returns_ordinal_suffix_for_dutch_locale() - { - $this->ordinal(1, 'nl')->shouldReturn("e"); - $this->ordinal(2, 'nl')->shouldReturn("e"); - $this->ordinal(23, 'nl')->shouldReturn("e"); - $this->ordinal(1002, 'nl')->shouldReturn("e"); - $this->ordinal(-111, 'nl')->shouldReturn("e"); - } -} diff --git a/src/Coduo/PHPHumanizer/Number.php b/src/Coduo/PHPHumanizer/Number.php index 30b261f..aced7dd 100644 --- a/src/Coduo/PHPHumanizer/Number.php +++ b/src/Coduo/PHPHumanizer/Number.php @@ -26,7 +26,8 @@ public static function ordinalize($number, $locale = 'en') */ public static function ordinal($number, $locale = 'en') { - return (string) new Ordinal($number, $locale); + $ordinal = new Ordinal($locale); + return $ordinal->ordinal($number); } public static function binarySuffix($number, $locale = 'en') diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal.php b/src/Coduo/PHPHumanizer/Number/Ordinal.php index 1be0042..192399d 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal.php @@ -2,31 +2,32 @@ namespace Coduo\PHPHumanizer\Number; +use Coduo\PHPHumanizer\Number\Ordinal\Builder; +use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; + class Ordinal { /** - * @var int|float - */ - private $number; - - /** - * @var callable + * @var StrategyInterface */ - private $translator; + private $strategy; /** - * @param int|float $number * @param string $locale */ - public function __construct($number, $locale = 'en') + public function __construct($locale) { - $this->number = $number; - $this->translator = Ordinal\Builder::build($locale); + $this->strategy = Builder::build($locale); } - public function __toString() + /** + * @param $number + * @return string + */ + public function ordinal($number) { - $closure = $this->translator; - return (string) $closure($this->number); + return $this + ->strategy + ->ordinalSuffix($number); } } diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php index ed15848..f1780b2 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php @@ -3,28 +3,35 @@ namespace Coduo\PHPHumanizer\Number\Ordinal; /** - * Tries to find a proper "translator" for ordinal numbers. + * Tries to find a proper strategy for ordinal numbers. */ class Builder { /** * @param string $locale - * @return Closure + * @return StrategyInterface + * @throws \RuntimeException */ public static function build($locale) { - $base = __DIR__ . '/../../Resources/translations/ordinal'; - $file = "$base.$locale.php"; + // $locale should be xx or xx_YY + if (!preg_match('/^([a-z]{2})(_([A-Z]{2}))?$/', $locale, $m)) { + throw new \RuntimeException("Invalid locale specified: '$locale'."); + } + + $strategy = ucfirst($m[1]); + if (!empty($m[3])) { + $strategy .= "_$m[3]"; + } + + $strategy = "\\Coduo\\PHPHumanizer\\Resources\\Ordinal\\{$strategy}Strategy"; - if (file_exists($file)) { - $translator = require $file; - } else { - // Fall-back - $translator = function ($number) { - return $number; - }; + if (class_exists($strategy)) { + return new $strategy; } - return $translator; + // Debatable: should we fallback to English? + // return self::build('en'); + throw new \RuntimeException("Strategy for locale $locale not found."); } } diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php new file mode 100644 index 0000000..5b417d9 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php @@ -0,0 +1,12 @@ + Date: Sun, 8 Nov 2015 10:30:14 +0100 Subject: [PATCH 067/193] Refactor back to `__toString()` usage Also added some tests. --- src/Coduo/PHPHumanizer/Number.php | 4 +- src/Coduo/PHPHumanizer/Number/Ordinal.php | 16 +++--- .../Resources/Ordinal/EnStrategy.php | 4 +- .../Resources/Ordinal/NlStrategy.php | 3 +- tests/Coduo/PHPHumanizer/Tests/NumberTest.php | 52 ++++++++++++++++++- 5 files changed, 66 insertions(+), 13 deletions(-) diff --git a/src/Coduo/PHPHumanizer/Number.php b/src/Coduo/PHPHumanizer/Number.php index aced7dd..3e7db4d 100644 --- a/src/Coduo/PHPHumanizer/Number.php +++ b/src/Coduo/PHPHumanizer/Number.php @@ -26,8 +26,8 @@ public static function ordinalize($number, $locale = 'en') */ public static function ordinal($number, $locale = 'en') { - $ordinal = new Ordinal($locale); - return $ordinal->ordinal($number); + $ordinal = new Ordinal($number, $locale); + return (string) $ordinal; } public static function binarySuffix($number, $locale = 'en') diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal.php b/src/Coduo/PHPHumanizer/Number/Ordinal.php index 192399d..b3de97c 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal.php @@ -7,27 +7,29 @@ class Ordinal { - /** - * @var StrategyInterface - */ + /** @type float|int */ + private $number; + + /** @var StrategyInterface */ private $strategy; /** + * @param float|int $number * @param string $locale */ - public function __construct($locale) + public function __construct($number, $locale) { + $this->number = $number; $this->strategy = Builder::build($locale); } /** - * @param $number * @return string */ - public function ordinal($number) + public function __toString() { return $this ->strategy - ->ordinalSuffix($number); + ->ordinalSuffix($this->number); } } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php index 4c777d3..b3979fd 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php @@ -6,7 +6,7 @@ class EnStrategy implements StrategyInterface { - + /** @inheritdoc */ public function ordinalSuffix($number) { $absNumber = abs((integer) $number); @@ -22,4 +22,4 @@ public function ordinalSuffix($number) default: return 'th'; } } -} \ No newline at end of file +} diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php index ffd339e..9510fd3 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php @@ -6,8 +6,9 @@ class NlStrategy implements StrategyInterface { + /** @inheritdoc */ public function ordinalSuffix($number) { return "e"; } -} \ No newline at end of file +} diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberTest.php index db31d65..bb7c142 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberTest.php @@ -17,6 +17,16 @@ public function test_return_ordinal_suffix($expected, $number) $this->assertEquals($expected, Number::ordinal($number)); } + /** + * @dataProvider ordinalSuffixDutchProvider + * @param $expected + * @param $number + */ + public function test_return_ordinal_suffix_dutch($expected, $number) + { + $this->assertEquals($expected, Number::ordinal($number, 'nl')); + } + /** * @dataProvider ordinalizeDataProvider * @depends test_return_ordinal_suffix @@ -29,6 +39,18 @@ public function test_ordinalize_numbers($expected, $number) $this->assertEquals($expected, Number::ordinalize($number)); } + /** + * @dataProvider ordinalizeDataDutchProvider + * @depends test_return_ordinal_suffix_dutch + * + * @param $expected + * @param $number + */ + public function test_ordinalize_numbers_dutch($expected, $number) + { + $this->assertEquals($expected, Number::ordinalize($number, 'nl')); + } + /** * @dataProvider binarySuffixDataProvider * @@ -156,6 +178,20 @@ public function ordinalizeDataProvider() ); } + /** + * @return array + */ + public function ordinalizeDataDutchProvider() + { + return array( + array('1e', 1), + array('2e', 2), + array('23e', 23), + array('1002e', 1002), + array('-111e', -111), + ); + } + /** * @return array */ @@ -170,6 +206,20 @@ public function ordinalSuffixProvider() ); } + /** + * @return array + */ + public function ordinalSuffixDutchProvider() + { + return array( + array('e', 1), + array('e', 2), + array('e', 23), + array('e', 1002), + array('e', -111), + ); + } + /** * @return array */ @@ -293,4 +343,4 @@ public function arabicExceptionProvider() array("foobar"), ); } -} \ No newline at end of file +} From 1c41211e6a27ceebe50ca8ced0152c0e8869d5fa Mon Sep 17 00:00:00 2001 From: Max Roeleveld Date: Sun, 8 Nov 2015 10:36:00 +0100 Subject: [PATCH 068/193] Untweaked useless comment tweaks. --- src/Coduo/PHPHumanizer/Number/Ordinal.php | 13 +++++++------ .../Number/Ordinal/StrategyInterface.php | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal.php b/src/Coduo/PHPHumanizer/Number/Ordinal.php index b3de97c..6058e2a 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal.php @@ -7,14 +7,18 @@ class Ordinal { - /** @type float|int */ + /** + * @type int|float + */ private $number; - /** @var StrategyInterface */ + /** + * @type StrategyInterface + */ private $strategy; /** - * @param float|int $number + * @param int|float $number * @param string $locale */ public function __construct($number, $locale) @@ -23,9 +27,6 @@ public function __construct($number, $locale) $this->strategy = Builder::build($locale); } - /** - * @return string - */ public function __toString() { return $this diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php index 5b417d9..9f2a222 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php @@ -9,4 +9,4 @@ interface StrategyInterface * @return string */ public function ordinalSuffix($number); -} \ No newline at end of file +} From 73e99d096f9f1bc4f66fbb13fc0a3a6f620f4eea Mon Sep 17 00:00:00 2001 From: liuxuhui Date: Sun, 8 Nov 2015 23:43:08 +0800 Subject: [PATCH 069/193] fix StringTest --- tests/Coduo/PHPHumanizer/Tests/StringTest.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/tests/Coduo/PHPHumanizer/Tests/StringTest.php b/tests/Coduo/PHPHumanizer/Tests/StringTest.php index 74331c1..040e8d1 100644 --- a/tests/Coduo/PHPHumanizer/Tests/StringTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/StringTest.php @@ -34,7 +34,16 @@ function test_truncate_string_to_word_closest_to_a_certain_number_of_characters( $this->assertEquals($expected, String::truncate($text, $charactersCount, $append)); } - function it_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') + /** + * @dataProvider truncateHtmlStringProvider + * + * @param $text + * @param $charactersCount + * @param $allowedTags + * @param $expected + * @param $append + */ + function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') { $this->assertEquals($expected, String::truncateHtml($text, $charactersCount, $allowedTags, $append)); } @@ -57,6 +66,7 @@ public function humanizeStringProvider() } /** + * * @return array */ public function truncateStringProvider() @@ -84,6 +94,10 @@ public function truncateStringProvider() ); } + /** + * + * @return array + */ public function truncateHtmlStringProvider() { $text = '

HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create web pages.[1] Web browsers can read HTML files and render them into visible or audible web pages. HTML describes the structure of a website semantically along with cues for presentation, making it a markup language, rather than a programming language.

'; @@ -104,4 +118,4 @@ public function truncateHtmlStringProvider() array($text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...', '...') ); } -} \ No newline at end of file +} From d65fe55c844434ad06acdb05541ee54714be8e88 Mon Sep 17 00:00:00 2001 From: Vincent Klaiber Date: Tue, 10 Nov 2015 08:41:38 +0100 Subject: [PATCH 070/193] Remove composer.phar file This file shouldn't be added to the repository. --- composer.phar | Bin 1177045 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 composer.phar diff --git a/composer.phar b/composer.phar deleted file mode 100755 index 502d1e716f850689687771ecda6a21be906260e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1177045 zcmeFa34CN%bth~RFhML1c)~Ies1~xTWNYd6iq)$usogTY2&ruYt+pshC8^v}m0VTo z#dbsT!3P1d5eNf(Az>gP5SFk^5;6lGCK&=D2?GgC2qEl*VZuI;zyR_0|DWZ)`(C{& zsk=?S{O0#{g0Jemch5cd+;h)8+r9V6+lDuqjp6xfZMaf9Sy*3L@7cAN{~f-fr*K8# z=t{L&SgNj83MkjhjaH$)R2ZwTt=F5C#t^>XN2P`S!r|&_voN|?X{?oNwZg7iS^wPU ze+(^F_V8Q&ySd(2tQKypFE3ZiwR&OK9Ygc>_r7Ljb#Z83KIPZ@>y1KdrBYbhSY0hF z)Ys26s>>^_Lby*U8Y?W6H=5Pja-o5y@%d7@RbDMr z8jX4bWT`X?E3MXgb7XjUx!PLUm>*iGuMOjWLZ#%7YO}dfX%1g?-8DVcr9!E4x`iG9 z@43}F$hBB1me&`G{e{afN2jWD%axWq8LHIE^Q)D)h1F`#%Z2j7N@Z^T%-mvSsl2h; zD)#pm?(QL#*~H08LmD71Rjn4YIr zDz!pmqsA&2bfqHy0BbEahl)c}2d3sGjvTbs^BTNmeG!Aq<^~F2A#|bu+D4S*Q$ES| zs?e$zwuAhIGxd!IXTuPNqOHlZJ!gA*rdG<0k&(6XI{zpY9nqn6{44@D3`n(BDHX?# z9GW^ZGci3kK5^^ZZKKnNClB8=cXaa51W3N)nrnAlbJbNlwqJ(|jmn)H)kdXIBn0qM z3Zl$Ve^T7p(=#`BVD#Y8IYOU2I5A!7-&xqZ=ixnTcV2YS|Mh^2E_&oe7hUv#iyn^u zdL=;&zc0EH|7$iDhR2*iM>kq^vf!})aZ{yMX_Q;_2I{O|cKD);UiH^k-^%jRZ{Pfx z-v@O5>kMXWwcKnTDzB%&TzZLuVR`eR(JwogM*~y}n=x`U8-73fz=l~q^bc1;!4&sVV zAjTkp8q$Rb$}=CNP*}e3E05XZPzoKPB%OHS#afr;?>+3~&0hEN&UI@`)#a%51J^4A zmbZN79lIRDU`Ggz3TDq#qkczaA*Scb)e4AZ&xhascn8#xp5vAE3Z`s?%kz2^1k3(+ z{nd{-h*Bq9#;fJ!8Wx)f#_$aagXOWi?wfNM107*(tgSn1M{pkh6AFjrE2qErlMbgN zWp7%o&zDyt2$w!sA+UVo8}|LGL+I;-$$|P>+>>Wvev-pkHkW_xs!i)p)~fMLru+~^ zgyn~CIXmSLI?A1y%IcD?dJ&XAdz?aHdGD@=1PR)aKWA3zr=t45yx7!HHe57@3EDD<@&b{4mk{vHnV=&vdR^x-@4E8LDzlw54{rb$X24z zW|bp0W-R~vZ#=4-v}P5o;w)yMt}Ik0YpqISsk|V|=UcH(Q@F6a?&f2^<89}3S^(YL ztk+^-MCPRrQy46-`0A&QI*c3!sx|AYmEqC#btv4TjkEstZCan@;K9FK^7=WVTI(NZ zt*su}XsvIwp!!3rM}G+C>WdW)%TN65#D>FZTf%h3snizEOjm#ql-=R+%0iV&aFc+Z zW?Bf#y{~w4p99*F9gti=qG3xj<;QRR$~Vsi z3{?fJCkv*MB-L@L>My_LFHmogjtR} z^Oq(Zm20*zRt6?zUL7~}hvhXd{YX%MwlekxZxX`RjlO?l0+;34@4Wwej^0&UMDMn8 z3;N7TxmqLLtHwzzSHAwLf%AfPQ=`1TLTH~f+*rQw$1e#ywG|o8t_p64>x(*^HfO$s z^51>xQ6F&B+7zuE235I1lpcM(G8W4x?z``g9LjZDAeTb9abtPn^g?Bwek?+Kg^`Tq zb9(PQ>=1Wu86xaAPM>B9Y{_N-%b6Gd;=3K}@D{)xh4ZUfUT_RQda3rAI=+#VEN{Ez3w%RQ~P*^YQtcy+Hz&OvR-erQbOy`(Gji) zEPwYiZ}`s+tbKYWz#N@Jtm&w*fA?tkc;e&Ar*>C_IU(nw+SK^sYy%gt@8 z4yv8Q5>Wf$adoT|q1sO=LM$Ktyl(|luNy*y(mc~_Rn}5GaET$r^7zsB{G21y-^K$8 zLN`@gX?#A`r}(gZ#}i-vY6sG-S2x{NT~9;#fEh|G-|~e|2i3k^ASb9CSWd%O{0YT` z<(r1y^XRQ$GF5J^q@g^;CI-vqb1HxCP+<9F*3JZzDOhb&<%JVqnu*h`2BwC3%wkjY zuIK$!@H-84h1Gx`dm%IGXUz0rS^CBPs~xLuRHi#J-M25IT{1JvPyOkWzT{B44fu2x z$fpezmOpjxyPvZaATuXxX-sCJb`ukpLl3?5*j9iX&0_L->kiAm_?4&cbs*iyE3%8i zA~h3UZZm=9O7D#ght!QQw=Oi(efqqK3YO2hb}@+5Za|)yod{zORl>0RvE#R2>6l!O zKBl~*6DKRR)_AqK&IK0Mjr^t*eT`|AEZ_dhJHGA^+88(&LIRPnuKj7nhUI0Cy!U+$ z>xM01GqW+@gkxnsBM0AT!^U#u4<4}Hfx>u7cX7W=B(bozVNA&{EDsGnJt$lMHd|-% z$ncGb{7fDp`s*fDSbpH}H=pS(Jt42w#?lfHm3lvEGJxgE$)EbH*8>&O7@{>;%CIl3 z!KWAtuzd7e{`lKo@ku!qCy%67hv!+FEdRsqnJ;?PydEA#6ihLFr)e!LpS|PK|Ju2h znPg%`U-CSqCd;q9@^LTsT5S`@?Zt*0r(&r_%j3oH+H+i3{?!lP|F;gQjpy4SRT_a~ zA7OeN%hiwGRdpb3!mSe!vFJYq8WReq}nSpLbQ-nY#` zwXKe!*6`taeLeglj4N#}uzc?y96IYTioh-|)@n4dNjn77sSja4`89*6nG3B$7Sz0|}Q%V)pr5rKGZOII6eREN#%6b?CNXtDg@wSVzlN2{+B zTBN=~C5P>PxDF%B554+J!Q5z*hK>ozy;?y$RV6%O+-GCQvVP^~AL2N4BuxfJYTf#d zjT+0>fAD9&<-pnmnjEnYM|}C&FLqq^b{eA$$n?(? zwH6ID%isL=!J32KDz=A^V^i&n?f;s8)(;)z$QH4kSx1Cosk)Gc8vD#X^|Du8=1|*o z@OV5D5W}}>>QC~7gnhd8p5>37ebyNV+L2cdGBe3|MgJz4FF}*$_^>?my^jaGsWTB3 z%w+8(18ascCVArTnlSB)<>~oL?{&=Dl)=zl1<6G!LF{|hKbG5`{d0Fals4rn14SXE z808%pJ@%31>(Bo04>_ogbJR#RU9YzcdV<$~vo)XPzlOJmn6P}#Yn~8>r=u8;#)UnpnWDh* zv!i229Emn9$a@miPxa>Iww|!OZ|P5#9Z*M>vx(^w^di*6VUT-zpp>Dg{p zF#>0Folbs}QSLDvgynbczC8?Y8>1xE0H#$%YCtP_L`XN;s?YK>AK3j~CvG=Lu0N(B zePN#t6U$HkTqQ7X+dN3BSq36fMU!VlYRKj`%dtz}ciNF^Xvy@zVfg#HBv9G&f-8+6=SD3OsClFIhbj={L{LD-L;S~@lAS_3YUJ(q?ZWBtdYQv~zMgq$x zyy__-C$1akrXe+3JGLi1{4Wntda-=qk)Qbor`I{b+mXP#+~BeN)-Cft;qcmYnk>bV zNNQR+z0-sv%Nri?m|)R%lOWRJ1fY+?oi++Am;U3?U=wwlPy)(U`vhXLre0>=3YHh& zvG=9k-%U9r=s?OLZ!_*^`5O;^SMa}V3TGONGJV{}X}@B9WLbadi~iX0={k$R|H*KW zUw^^kiY%Y~`DPG3UHKKhByPG$L%RD>%3mxmdgUiR?)Y>Yz63%_c74LS#`5}oPYNn( zH%XI#iq`GFHyOe5cc1Y$la5oHp_0@dPX3&!ENoyS!}La?lUxog}|OOMpDUIFse|XASIX@AoZFO%kpi{`pSeu+KkSOU+w5qGzzq4|nvI_4WhxN~F99ZtT>vRbBwc##xU8_G-<*qi? zf4jBK@-6TAZV>2~<+hEr9C^s*uuuSTSoE|1W%#$f^S!wMCfM!)SdOcT{xht3mhU|I z(>HqU{H`aeHBoG3wbS^n0{J@4}d;pED%1mVegFE`o3 z@`GP5zRc_O<<>h~M>y&98R)YxP$kvtUQ_f~KJ&`Ag*4)}P?C(3%Qm+BAk0v*HOt>0 z{76V%%O4@My8vIq#Az&RX4`+&nr1n_|0Qp7)GyCPo!d5A8gY@VBBJmbn65;D#z0Qx{XLz!F!|z`8%l>g2oqdR2le-2ty=6T*shSnfOVz_4UphdKz& zF4h~N+Heze9Yk6>cf>Y_2~nO@+{4-wh`(i{&GO{pt6$_;&;r;ZL~ldjJ#|hoWcf39 zJ|yL{HF(_5JB*#HgX;}+u_dUjR2LU3wQ3DX{zH}1m5VS>*iV+f`U}5x(y<~BI+QbO zOZD0r^fz~x!P{pP0?V=I?fc&jfo#+Pf;p*tq2M5Y5%Z0Bux$O~>58QF38bB9ATxDh996ZJI?a$PkZq1InapRn;FJRu#%8{@{>ru$~0P*|7P{g4{~@kDmU*i zH)AX!cQ6g}Igd~rS?)b`NzGwy4acJpglTwh#bU)ivz++v|2*UHut019$EUBYromle z;8;HJ#ZzIsOc(To@i4E13vE&ab?6-?NLfDf#0#%-^aeYlmx31nz0dSAmVbHrZ)Y7) zBpkD2n+D{PF+hBjX-h0W`{=8_e6A3W;^>2F4SU7{#JdbfmhT+++Chidg?M4p({Rov zs5@<)V|n|BUmwhm-JOZo5ngJdyvRm{<;bTW^k7G{%k1k2c&2qm(_9|@lgf!K-~EGs z{v`)`<9T2!KvO6`-%w`xchjGEi$mXYzR+h{2+wnt_rNaW3}X4{f%gnLEr^mbdrtbOMm#L!w#&pDX;{gPn&+ivVQLaKJPF#M@V6$ zIOI!cm(Sl}?!1@h?#qt}!{U1Zj?fOk=HKVI~JIJTnOl0}y z|9SAqjvjix2~QlQuY=;@p++s1FWEo(hYn(Mwh|Cyl~vgn_gz~XSYB~?A($VVkDh=@ zsPtD4)zM=)Uj4tXb9^=*JpnXR!MQM=8TcWPfm4R%uBDy94>Yhf@&wWUdSgwN-}u_E zzu0l=qL0gDL5ym}uD}1mO?z-1}D@RF|<*9dP(Y*`k15)v_<1u;y$T zVfpK2Z=?4K4yTJwVQ>-{uQQR)@|XYO*lQg|7o8#nBh|6%4I!2{zvzj<Y{PzN-YS_ZVZbeEjjken+c|TH(tX_CD6(>G7ZBhgTbKvHZxLzxGIn)@2aAIvI7T zY6qzKL&E&BtxznV`TB1az4%3P=8%Vu6nu3$T36r$2ayqts>LHc+aR z1f1S$8@5@#dEeU};efhW>PMj>F&Q&CV?&>i%pbKbvV8MbelsKlcIl#lGaEet^;Q#? zEGPcvRY6G|X&QiQ9bHrE%HeTDn}AMbCD^_mNn4*tV+91F66+%mV` z+4FasFl4#@)!7gt$suGe;K?H?a4#@$EPv()PyUGGxoeBPkHDq+|9a~`%RBz&)FFqP zBg`T+*=yax%dY;NDW5D~`I3!!hq0|IZkw!S{oO0q7fwV$nZGbLV_Ev<8;XuWjyQ#K zA*sWQ<#plOdAidVTBG`#-T6%fOvn-}U)z7z4GxSMB$;)&1F-#QBLet$@TU_X%TLX{ z^t%o)N2+E4Dpsix`(2yrEMNQ+Uk=fgoE19*?Z)O}2D7_uPO*I2z<6+cZ4T?E+C~P} z?FNhGr|)`2!+V({6*G8Et*l4X8nvaL<HYK;Qe9yhjU-M4$h=zRjjesh@?JrkXHyYgBlVrj_ z+7@1xYd=317QGw?R2!}VP>PXbM4xceUBRU_x&=hT0W*-j2tBSLSu;(A7a0{;-twrY zJjJQ7ZwtU>p~pxuUpS8xeMSnFV=rs|mBa4Lp%bUq>DquJ0n3p8Ne(z`f{W$wA1nm7 zS+4XG4o&J0^WZ-M`J%BA%b&mIZyx3NT+yYkjs)_GmMf7B^&&R9)9US@b~qlqJTv9e)V@Q0+!aT{%xtER;K1;+7ft@h48*(MpwPt4sKg#Q+it(DhukbQw6%W{9=S03ufcGg>B3S=1d z`38*T_SfC}Q3sZ*%BFiR+sCjSaB4wz2xI_%+yJwD;9q|4r4G3Bx)-qIn77mNUIWPT zMZf-%pfGL$(`hC@Hj$?o_|)4XN1ZaWnq__cF+rQ(!d#uH-c{)^sg@00mfJr1??Mc& zvt)FfhG%fL2Ys~ufJlDI*q-G-zVqVCoSZ-1agJ`HDnsq=u(HcaMx}^L8QcCKbXqD0 zEdO-wF(G5^vQ0n)+xN>h4Osr?fB4(rdg=mTeU%f-^Mk){#ANxB2R%P{hI1q|k~65| zB$iw9S4xps0`lw>%j5sJC#ZQj?9>j@HvhRlG^i@1)*B2k%MZWz%8-SeGw|(z;bW^V zq`IfzOfo?ck=A7}Q5Hs?IJO5|+KE{x$^bx72+Dd$hVHp1c&kPl6YS zbY(g8kU##cBs{man+yw?e*Cjyf7p5l8|dHIv3oePDU=<6jGj zJvo|W8WfI{JRK1FO>>a5{O$v8X?fRjoKa~gw?PA}pK1m`uQrvG<;(l;4V>NEnO`Cb zKVVAPm*qd7d3OlL=jhe}4IQ5wH>#_~Yd>y%VfnnL?0SdyB}e9FfG{mm#^(`c7_+?n zlkezt5QuLFu4g_Pv+Gu?*m`cv+G}jivi#g;*cBa5zf?VD-eQa7q9h4nvw2JYm?{M8+!SCSY%Yn1K3Ok@b#=7wj_2`|kXW5Q>UL1>r@xfH~Cvxo_^Rcn2@fj9OHa z367Q1WuB|Rd0Di+u$+9tgF@W0)ER>0POnzM#K=k{j0YRA6yC%@0t6pm6T*WY=g=2yMJ;hOvb|( z*xW>IgSo>I`HtAa!195GPXuuRDdythyoO7&W72KC_2D{HEMHxGYd8$$Lfdj@SKP1P z`w4A}<-Tt`@=4AX7uwd5dA$!JZtEXR&1L!LLr?y~{neJvf;0^aHeM`0@aG@<-2K*; zM2pjHz0sC>mXE#tcc;Cr3*|zZ(&?6-W243LpPul}cY8}0I=zB)PB-`3$0&2K{MJ|h z`mNsFt>?k?VL`zTXW2NMtJ|LhWJ*PrZ!WwkOta(nM~liQhboKJGD#aSqIirO{;?O0 z1;^NJ_e;Za;QlR*YO2Xo)>oE?2fua9se3+y830=<@wTX$IgQ_DS!`KoCOrfl*(%TL4-YwncUWsIXa4H_!OO^l zfX=nG>B^F~LD26tiOlk%g*RQ|9XX%H8tB8l3o%kb2NJ^}JYsvFw63sx{P8=U;O*UX z9$m?_H@4A`q_URju`DP5;D;ga;(W#?(*zw0H&w7TL7aA?ZO@yw!}7Mr{_wwehwg{g zrWzGfEoFNl$#;dZI?KVU?+d##o_^uv6XvtQOQ|Anv>{`8@sB5G#EhM1o6?YSIlDA% z>Kn`T`>H#ffa4be-uglK<)2i+%ktiV5B)obAGs^GJXKTs`u^TjG?tGa*!Uv{d|86{ z0`zKL5t!MTWGep?j8R!$eB;Vj9Y7SP?EpY5uVfRMFya>o#_Iua7 zTaksf3EVWi@0qH`@-6TBz;_&8#131AmzpM*8auGOxB2u-9dP8Z-vn^Z5pZ8Npe(ly ze*Bf^4m9Vawj~=XmgC>}N;teFmvNKvo{>K}rB0fa$nwR1{ej^2jzaHwUAkl}HZTM{~X*-DZX5$)GzT326mVdYRWY}PrN4L=a0&fAt^@!))Ix^;DS-ajw zjpg0%oC|>_o^_T*J+trf#z!mRSbq6sUwy3i`eCTbD^I=4tJVa|kG|@UAL8FV7~h%9 zy4pTrx%9*27%IIjwI}%(=pOD#o%L;@xVCYlSxKH_f@06~&h$gsKa`xuJ)8NR`8pg* zJ8OT%M>S`^Ju(}eKAm}KJJ)C9gVs8H5)L#$_=>kpWj;&x@H}Xc z&~&HFTiq8w8*h&XG5Jr}tl$(5ccS#%&6n#qy8+oHg+3@|@v-SzH@vOZGY=LkClBF* zkiu@bGjF9y+;53SSL!?mp@lG6^zHh_Jod@r(%PChZ3=U93*va#SZI|pquGYp zKp`5ULSMBGxHV+O_M=06yrOn+Po^*UpuKzcsZt$=Gn2Oe*dGVSVz+S8Unk;!tOmfRA7^A zPX~JXam{T{-%^<6=xVKUs*p^3Tw@!*2ea3jNRSFK=!w(VAl(EP$yg5VkxPpO+JRTPuJbwKce>#&fh+fhB|GB`z=P`~xr+PA!)DrLMx_2V1P&1r_1~d9T-o zPSzyr!ypScgG8x*;M>8fel|$Vc#Ci!@`redstY*WHH}`Ss@WHVWz!fcAVXpIZj)Vw zy@jF(v0`DQP$XmE_TYpe2`%aKP;t08l)S`;$yjw9i@@AKwmhnf1MZvydX9aoL$G~F`lQT2gB;HXqT4E3JA^7=Z@k_IoIANau62|3z8 zb|Qx1iMC0FbTt{aptUqP89~-vyLL?+*>9J@^D=a2uZ&_@*te{=MdMEO`7=Sc>FJqG z+DtQ81#}+WIew8U*pWp74z|k3CY6 zInM~EiF&*!byy%$3rn&FiGUj`*XlJ~s=4Yb21FGY*T;hkh&6^3+GfQi1*Bwx5C%PJ zf+OBjSgM0z7gn&w1W?C{pxxm1;_*VcS?CKqL7@&{$SUKK(^omon{+DZ7M`GWTMc&h zBoO6e0m8r9YaKhDV2vq9NMwsrBrJfk3-Z*&#Seig>svsjflwq@&XeWFoIWfi_$L!4 zbV=EKXm_EP_s1t)GB|q*y&!SU*V@^20~{GU4nVG3_T{M2{nO!ic5C%7t~YvuJ#MTqEI_>jiyzqA+$>#3d}1g53|0CwaI z_Swzp6U}H56#kA%l<1Dx55oFZ>MvY=d0|_HNAH(XaDxQsmr1({V`G(bd;$AzS|zZ# za{VxwKGqG=x>Xx$QOl}lL21E+tq^p2D#=LCf%K(dKS7Ym*Tl${g?O6l%P_~!npQe@ zqH+c@FeX~mIZ9Ale)b~?AmF$4r8x`}D3J)Nu-b>$VH9me?V-RiTMULsE4CC}5SM0^ zRr}@RyXC*EHrofShC|;G^`Qb(xSdgjh|oHTjF^=sNI;nU7XKB@X2t^mQt3wHQkmZy)nmmOn;l)|} z!#gJ#hC{iwzkjI6`5Tdg?GpKIp&4`l8#AFmieG-t)bBYWfnLc%lh+kvL-P)F?oLDR zsV7|k5zB7;sR1F&BqULCz+4xN2W8(pRNE7)uzNril?2iSo4n34&11!iCYBE_fuRRo zf)$VJOpc)x?=BS!5ozz?Y~BJO)G79#1wDZl^c^=!ftRwD%bl#@M+!y@;nDgGY~Z+7 zyc8-ZQ$(=3QX{zr77aBL{LL^g;RTkB5cl`p)t6*NRz!{^s2vx*#4+GnE(Wa(UK6;q z(6~J@Oh^k*<3ytgl_*j)MxUs{3+x#Qh;+k`X$l48hg3H?(nW;Fuc}QXL)KR}c#91t2BlCx3`>zlBZ>G^^N}xg0oqn= z&f%AS&t?+|Kn~)+g!WjI;ZJ0L0-3~$Ef&!d`5yLb@(SWRVn5S=%ZrO+^g2V)J_l_Q z7*d4$EW_Uc0mTVVye)K$<1J&J3{W(68kkGjrg#9V0v4|@2t7viAUT(p zvM(T>^BTZxxz2$#G&HRLZxP}wFn=6jlnLE!7Kk}AbM!|UiGdF0A<$rJ-!EzjWPs@< zVPV1Wt9GX^M8!_jDpW8Ff^n}zS@C&LtKg8biVPlfJJBaGa$Qt5H5X(#3C>GVZ`LvS z$!sYx#fi*^=i+`G>Qxt?tmjo+;RWqq+5>{e^e?l#vQOExqY+DW<21x-7%Q&pH2^OXW5%;M0lVeeS62lG}mHZ#)$ zU_Nf2I35KVGXtcJNjIAmPUx3 zwuK-<5=Y7jY5o~<_ri(tGCWM^QZ_E4Bdh-v=bV9*;iITbX1{|`(_dk_;oxn6f#5`| zEmZ1Dg*bJE-z@}xQ;391nmPz+jRt*BWVE%%3C!?>;)s}&wmi_27rPP1tI>~QB!P%% zw{VKHPXb*Yi}j10Y%T2ULFg<9;4FrQX+&`YMB)bDhsqS8daf(jUA?Z)sV5Xs2C=Wi zx~4nN`zkPwx|WT26GZ`8E8EUtMp)6$P8E0dv{oARQxfGzHc$@`yv7}B)-V( zjQ=d52s@iFVH?GAoHjs4TsEQ@hZ!gm8{P|uYD!i0mu_%VY2+swC=Bip@@|PvFtI?V z&_c7YhCOKoqz5Q{%E_xj(@*xq#7d+>v9MT&)4f)24N&04uYjVF$NU?@q3x+XnINOg zlE65aJDcRq2-`-13DoepHrHIKE@2r>W(qlrz6{11g}L=>*U9iEdA?aa4LPP;-q|DQ z&u!G&nuaV*e+yhB{=A)YKqYRP6!c8SNPzGhukF+eBTzD1U@D&@m}_#t$Wpf!hnsUS z(jGRTdLlSnY9l9>%%a1|X@bT?#|X3bI6FW9D7A8+nTNW2*K^?Id$!x?8r-m;`*zUT zy|VO7aQI9Vn_#!mQT-4V271ib>`$)2lRz5vl5ued!SO=7C{N{2Jj%yXKCxG}B~hR85++?Hu(?Mo0=T)O9%fpKmbW^KL30EQTB*U7uzJzFlc zbv^je%v*t-JD&1J2GVT_A}0KrR7wIm=RJ-o=QM6T|^J=v(Ld?^FQzbH%H7tX-@FhlmTq5M6p1zsjZ;mjVURLB-o6X6G^- zjw3tee`7=-;SImc;Mi=4{d2>!aJ82keL`y1Qk&YLArG<0_annH%pz#*orrUrNm1)1 z9XzorjhcH?*^g0ov8eQ_<0&8X*S4=z}YOU?lvSOq2vX2q6S*C-sTQ z3p`2Y38f<*q?Ix}&DJ|8xv34k~&G68K-B_2X;2> zpqrhI>LT?3qQn6}T(DXH=b2X)`w=FJ>Pp}%C+mvUJ0#~te3XN1&~?arJ*WDLYds*fiy2>$V|_;M)GplC}}>87Ffx8U6S3fBWBu3#1vCl8Muyk&f1Zff-C zfnq=`rRt$)d92c=gF@PS$JC>;zR`rYH`bL03Sg0R3L)1-uZ9p&`sE$A;1l`m6zXYfvTf>zFSt_^tG)B8 z3+=%@LFVR4{hp)^g%B~fDLA6NWQpPOi2LehqE=0ENuA9Yol@Ggxf3NQAy}2H5x{X%dXtWry5%xmyC+>xQ1WMvD%&X-K+){c6v$~NHE$(o z+xgZ>PMWM)Nep$oauUL; zPJtpj?zjZ#?tzS({g{vtq11csDKO<(nn}R=YjSTKlBV#C%O)Zb|eNE}LH z{~~W8CY>AU(bMyHi~5LL4?1WB>1=h?P_ea{%YWLj$PUAQ4tCSTZjk{+QZ0JuD`56{ zesD#?*G`{2+HpK!@>uS0L>2X{21{H=)*vwNs~ALEvk z;p6yITmW}&z~-jQ1(@hQW#tg@yD&7&7@R?1ea9l(AKN(vx&nb!aXSlqhg!V*b~uXz zmP19RCo^eAzm*Ze1E7ZN9{&Tv!@Vt%s-cdj4vurNqEdb+ObXQ^!l-r{sJk^4MBqnc zk#2xCjEbwvB1u64jzkqwG(jyUBfh)>|Ic0yUAb2&CpxDqxdi8@A?7Ouvy43m8QUSUO;48c>sGa-`bDB9^?W_s1mZyYOD2#FBTYOG5@tSjEUaOZ0P}S`T?z!Wr$}nbc{mA;4L3E=;|DLW zpOB+5-F`_)DP8UWl5YnJ{t#^?KPrppZNQU#QZer7n1Wqp(MT;GSLZjyJiJq`lhr*{ z8O`O?h7FtQeKMBR-a&y=mFn^ex1iA4<$N=s0oNF47~P~R4v;1|Y$1(C8_>bsg&l=K zZaX3ED+!TG`l*c#Qd%S>)knx%jK;@X0Rt#(AnWw;2WRoj-fliobh#&kn7cq`q3~Lu zNFLs-LB`RK*iH^=q&S?3NCumu3`nuh<$W?U*pm4h`*2KltqIbufklvuii>tIFwmBw zLD`mkr1Qb6WMH2J2+SA^L;=iMm2Xet8xEu3DUd5&j`5VweF95a7ZrdyVCdfAMT+gPa>M|To#VJ?7R?oc0bzZakZqD$SGL? z^cjhd96@9k_%}ryjss2$qR(FIZ!F@cuH<`g5tPO?Y@}L0GuNum>CXg;w}g25!YV9K ze}k(2z;Iz7&blAoR<%%&f^tM(aJL6XH*g@o*;VH1cCBF#8;(fh?HpEQPDz{09Pnlh ziAt^cLRiW|QZW`v{nx?YEr(}uizjxzszuGE70#*DBAW1ud@2j2=g-97&WYK@{rKyE zr?WJh)=X6o{6LK)vsa3bPzw=RI``PU`xPQePeZznWY78|K^bbx)T8DgD|_Q*mA*b z0K^eH0D23jR;oCA#N_<9d8ZHAjYNTeW6JJJGAwmg>3_gdf2(0uTM<;r&PECZ2v2mx50o zISeIB#|bgpb*la#9g7tl*(GBfoB675C(HzcUW@|WWSVeU*q-4y17LbHMhdFBgC#dp zqc)6vi_^7&xW2MV%&gQ)F%6kt7SGCQ=p9V%rKF!aFg17U#5DPSZgRY^t8nf1YqoEvy(uTk z-NXAxT9#H~r*@Z$2M*kN$ZP2yZl)h&GZ2rV)*0CPINZ zOZQZ8eFqvr4_l2h{D6~zd%A()KFmUqv+Hw^D%b`EgUV&Arn_tlpA$IwY#T|8lcJz& zS{jVB8;Q6Hzm&C9+>dV)Q6-hACD=xSl!r-Z$VR$A!rlgoNq0*rD5wdA1@1d9lx9QI zI9MtJt4;83LGHTP?Hws#@6=FVMWo;%-1r9bmlh+^Cee`ci+VUC301s%cD}TCMC1k5 z2s`r?Fq0t~D)!GdWrtZpXX0(fM9?cSdOS8H898YtabLkXKHI#aG+W%;Uz$C2W&iB# z4zxVmn62Hz|8Ml;*U%MsnR+-odsS)g?&Pa`cJ`lbl9?#eP=*F643l4AoJ{k*$8PVX z=kE9wSC&`~CBOTxxU%=2+2XO=XCaeQUxWwvWVYC)VRD^&XPpE>`m6eNr^v3om?>$_ z&LDU@yj;6x_i7{fJnGv(VF!L0Dc3kL&|49x@iXyjN>W$*&|q-75odPqo}nv4<9qj{ zn^)2z7z3(8aq*Dnpuo?coSIc|@(58eutnCCAQ4iUGm{gk&GGOC3@oJ*QVj8z9zN!<{G^-yok*6zdc=?T=apA- z`iO8h&!{zitXRYGH^=&_wjnpsaMFH!)9HAiU+-)Sn?!qO8}eV-a7ssdff~m{MBA37m8A1bGDiYFd1kf~C2frp%Joh$@-48C5EL1z z_Bq2E{65l2O#RfSTR1lz+&~+63>pKYyg0nP%lYNG=Z9}C5t_UF#guy@o zQY`tx6h22_s4&IrFL7xV9OvBFTHgS0LXEbcWAYf~6BaVYlS!4`JyvZ_D65q?itfhM zju`|_ytcjI2xCoyWI46incON=T-C%BhT-^O95cGgF^NUWvEhLMhKk2UODs}+$+)AJ zqNJqo6r}(_gLyHG1#rr={C$2a%U$x z!49aW=%iMev7JyWb9z)8wd1~n%>d1epGKpe+yZ76P(+!nb|D;5p*K0xwIq~>H_CCx zf#_}4&`>cw3Dw9;v`A=>x3~3gwlv#6QaDmuJyR$hgQUgbUC_*C=;aG%rO!06HN1jP>6^ebhaNxuo zA$Nv*+TNyhfxj-Qo zk;B(ZnwAvX?&QhAo8na^SF65(BmZ*xHXuOOc*T0&Yv|eXO5zONWf;}#j?L)W5%prL zV(xrbG#%7-nk1u=Kd9Lmw7f9cJY2yoQ_XS%SArzEM`@e-rL+1o{kLnaImB8QOEB@S z-EJY8EMPs;<6ncGVT_$Kb-T*y#PSJxTbuk@UI0_Ic!K9z`Sc8~Cg~!1aQHTKP6&R9 z4vpg!o1 z3MyRHSMh5rD**2zp5^s8f*|eiExCaTR4S42AY*0SwKQ;XT zAL$)AjHaD;us|&5o0!7lhQ?P(<2ATz*&{I?@@J;osJ^nQ#kv(XZmyJf{41KNL`Sv~ z$NUmZhpovqz_{w#>;4sWYNgy<(M}Z=H`-9`@>_=3M=%mRx%)nS_9s$XpTxmqMuL-O zz`HUjot3uW#$ocp8l*iWP<~3o7;Zei?N{|$sVFxaLGMIvxkj_eN;Yv0=J$+og*^aHmjgqpD!4KXlN{~Aj=w~N?~yS2nPk}Gd(39#^5-^Wt2#cDeG6{ zbc)t6_5HlMq&k!i-B0M}#4Z&reHhC@>cz;&k*T8y+K(QD^ZqD2mi8ST zA>KasL%<`ZcvK3ep!mc?Fd?r!i{y80Z?s@vp=)RZDFP4{XqdX99Mjj1OsX{<<5E#2 zDVi!Sd3*Y5WaQS-gSSk~O;0@SmdWXfaeT2~G*#~lQXw~1#fN2`9pTY|^vm8=UC(U` z7B||ECDTaRu_;>8dfcE>5`B}A3{KzNCb)E-e;eTp#AProGOVbYQiC2U_CV7=j7=uM zp$t0nY*QtMA8yL@D(L=;h}82IMqRt&Wrz%-OOf@+L^@ehCWkt|DT@R52=~%AR9UDl zRpDRKMrAJp2AtAePywDQ!<{%Lg0_~D2gGuA$S+?Tx{-TJJm2+Rmua9lCd z#YAjB43I9+!EnHu=w#J!J9I)ZmHbojD&q$SR@MMCK*54q;ZZ4GB1T5WjvP8PdYIG9 z_ycV03Wh5bus6H~v2X-*a+9$bnRf9g_9sVe$=9M>F?<=np{27`n4K>(ogO=YeadrV zhsISqCNU)8jj>nlg`kj;I+}@8r4}W+Ugou+$~9f;LN8P%G7b_WS)Iq-ngV}WN<(`) zeAlTFttT2GvOaiKq8$olDxD!y%BXno$SOD!8ipr zRHIZ>uP;Xi2W)a!qF&L^b}n$<6`tRW&GK17j#ba{ggbeXW;?0dPTIEct4>M@>BvRH z$VZh85aevmFukh97sl|wL^Z;+SfDuIi`cG!@3Ef?KPcrR0HU?y(rv1YHfw_}+P7Fg zRpWNmL#AYdiuNg-52AdGr@ug=1@1XEmf&2ozI6sLs!VPla2o5S%GtI7Ol3|)0~tD( zqCr~07Xc-IN=ao1MU{Y_QOrSZbGj0q4ciXU=tK5JTO+YZboYyljoPtb_H?>uQP)Dz z*nAx`+Gt#bxy&3VWN5;=5G##7Hb;%l9Sl!~o;X5N$;aGkX`TZtD>eQgIR3T)C$uHz zQ>7!~c-rIzy57PPZUm=R72m2Gt~3TXYlxp)K%AbyYPT|_|4G$6JfKH}b0IqWO6 z+>g8)e;BnOrx}KibT^{(lg)GdY`Am-RgNi}W`?#I=Dp#BK;P0+Nv1}?Sx>6BahySJ zIaGZpB%pRijWG1%QB1Fv97lD4#9SnLqOK6(%5Z+^a!N!~V#@i1QRX}7myE0JC+j%! z^yIR4U5CXij7&k*|7{b6+5*Wnv9@X^BC%7u;W;!gxGFIsNyZX#cgxV2=g22G_v3VawS8y4IXz>s|Ex;iK! zeifkZOo~z0P12hX6LT%;EUADg5gNoGvbs*IDV?X1BOHWz!g}Osu346$<}msTdysxb zC$v2QL1B<^LtgkKo?t0v-7gm-tkHT|hlXz%WTXuRCDd$)9)luGHib#mIy0mDOnB#E zERVADVU*W!)MRrp0@4-uNs5`fY=ybnF5pCGe7{ZKdQP)D3%GaF(Q3-oiy{xR?FSFh z)M^E{Kg*`NazPw6rt&XjOvd%wSgE4e*ZnRvEE}%ibkzief4mVv0H$Q>`k29FwAnch?>`{bez1-*i?3 zC=KL~*`#z&5x6+zB^qNgQpPV7)C_)k|2lWN`D!dT58ToatbqF3{pGA#Ak;z0ymF6= z+#vzkX1Sp9g?*6c@f{wC-mIcLq>-(+YN|FV;-wV5gF#`x zs2nxBexH1i)Dm&tt SQs?AC_jdd}YOs6IE9^4$sGkgpVug~;(BZKx3*nb64CU2z z&;`mgr=6)vTvf1bB|MRcW?D(@H6@kbB!i#XsDj`nP(XH40?RmzCxWKVozO3Uk@x}# z)$N0Tg*p-pFQ(juq(kXeM&6|mv?NH+&e%Fyks_+=q=V($qp%brb?>Kk4UDzGoCDqs zz$HI}t|^P7KH+$k5t@)|fr5t5_~``%4qWnPgey!(34x8Suj6uKEYI~?=8LY$&vj88&p(NJcq2b-R0kzW;v!S~nMUAO#>h_|HQVk!?rrkwq3V8Fv_VBLysG(k> z7DuB=8Av!h_BDJf#}V1xMag4=bhnK+L$Fazk&qyzX#AznnYLb#&lA1K`^*NS?P+aW z%HqAe>NbG><*iwq3L!klet^+By@{q;W55pDOHZ+0LkKPjZ^)W$A^?mNF06^bw#|Uh zLbCbS6`k}T$ZRHaWRm51451Ur|41yfC;+-(Uy;oIcPF5t$2+tnLJSW}0)(y}==Z^D zOfdqF<%=;>VU&YD7?z7?2M(;(f5g0}>v)#ybU9B{T#-9=rG<{3rC#Z7hv-2=R+_^yna_c6q^Xn(4 zT?mYhDJ~20+D(>J5PPPAwOU>m>Jo?tdwVKO$6&QjisjY%e3^T4i_7?raF4$7aPHwF zhbQos^72dwJxXk~QqaoYIQ9J87%R5bz(2({7;5d@#t}qB3-&RTcnYuRV}x@+YCYFJl)-@y<}?TqhmU4J1r5ZOH&*Xmbc7ln2z!Bl44y$b;KHHTb`4Tw{LF0}`eJ<*$xd6K*0hAhU_e_Hn9npmPpvR^jwTI zca#<32l1tFaZy()#slEPSDevNDP%{by_&S=W8<$!MkZ(GMyIDop8*;>Ed7$UX097S zQ%FQ0!Cg>4)fANs^M+hkXx0&b!fg^&y4EaM>?4fM7An|+#*{4Ve$;F%|4K)NOe=DHE*Gzgt z3PJ%c2g!Rw+S`1&F$79xTCr;|5BVB`6azH%Xa%~ccRKcTm`do;reeW~h{dyQPDKf^DSay_IFafsE8jU; z16$I+)ts-YQjf98=s1~+b=$v_WmGJKZnk(48A+7Cba^`+WIk|1GLFiE5P%e`EJ_F@ zavM-Zgf*Lq;*E*o)*iT%t^biyN;|k6V;u#kdwaPfLN;_N7n;L%1?!A$1=r`cjQ5P- z`*v_jfCBb>%Q*ueA$T5Fn;bbbb!28@npP9u6;q3mgg@-8W^H3XsUv47q(7utmOkVs z`Ci5bON+W)(Xbrkt5;ry$DMm9gGTH#htwqv;OL0EXKQD9Q@L2IDOifJI9X|$@Tccd z@Nd*eeXg23MuZw_)|N?+gH@LUjUzMRf=83uZ8DZ{q%)F)g(di{g{`D@JqaMG0L#aE z!)IgR!>B(>fb{Ex2+8v;5hD4VV1rQ&2B(Ri!-dY&!Y?Vp699H+>Jd>oQR7X5$!H7v z(`~Oo@OWk@3{9)|kdn|q;vF2(*-@V3d1RiBGse*OEv#S{SNpg|jlh9@-FEe1pF^k8 zlB9U>ZYb2R+ z#xS{$yv_0HJF4}-uind=y%e=3X}hN`K#Py$r({-ic2%AKhK-JFtm=e$noPIYUBKp) zGEQ+@sjRLptSvGvNJOma82H%3Ia+~UDl!z3Beyk+v> zc($D)XoL-Ki}4XSAtGjcf3ms;A{9?o`QKW(R%eOezLZ?R^jJbHbX9IebYw`YQW5*` za55UA;usHmFFv)<)8xg@o_R>76Y78zC#0lQnrcIUUcEAxbArae#R9t0bkO{jAy{WQj4wu25ch zktb0=C%xJt)itlsF0bsfERkG90{sqOXhWc(!qm(oC~lpEvN$e866APuDY(S`huYbF=EE3SDA z7$Mt-30x*c)1x6{q#`FiPh*wD%m3HXL{{FpkV`f5ejIm`z30*iH zGN*m*uw%Zo-@9S^qIOAeI#!GgNZd{5 ze5#91)^NmQiF=cn3^Hn)e6WhsGaYwsC=t-oCJ-yY;FzytJ8`*oD<_Xh$gp>1xDFIzAUa=DqH&}v9EaFYosf2*Ge{#99O1x9Zgm)>I?}uVeA>nuL|$9p3?Y#npo@H} zVPg=SQp6a`--%?fXPfar&spsl7IK{9F<7tVklP1n(=pQ_X8|AXM*@M8Wf;=aJ2#LLF=T%_7E=t@xo-Yy;u4QBFPd~)X&v2pT`(=#NpU`qz{cE?eS!FxCk+Za zBI|=I^=6B%+4IB)EBqkF5do+30kDRU%i6}8K&Y-(TW2C5=Q?3sS zw4|IK<1fSU+!Y3BpMA2grh|56)MPSFeWAYEWxmOsmu3$}`Xe^JL<)ec1_+U1e>}GB z=EEsGf#v7n96$5i0c}FQN{iMM;u!1!s^CiWu$RD5d2H+oqZk=tD&6=ghmu1anH}zIi+mkUrr6b?kqYK{uGM+G2<@;LwYOt4PK_bD zwnT9b8aVE~F?#|bDdz1Pw(2_BAx4C4IK#NZKoG9$X3PZ-kz^$?DlV~HsXbJf&>$`@ zt86=kXhCo%W5s4i;p*)$g+$nsK;$BIbqO143K0;uUv-?#ta#$M^G#88A3W{|qW_(V z3pCOM76RhvZgD7(i@8d;h@=2dg|~)BFvsO;5?Vh=%SfF`El+s^#v9Z-jTZEWWMEP~ zvN@GZ?RFXSe-8U?d9cr6q%T9x)dh}oyQ`sz69s+*Bd#!+g)H9Fv^Fa4x|AbRy_lQ( zFfUZdOo!AWUa=;3F2D z+gMOu?C5}tXkn0eFfOU1VRvdg%~bjc`-!VM>*Og(bqVc@gGB{-n>WKgi`MCsugyhw zm%a;hp)9yyQ>nYQfqWg2xJ>UMy(E{TTmX@_B6@|T%rD*{3(Q1u9z)`~=@#wfe`3(XrP@i;PAWD1p(s%S0kuLfq>W$+(*$x|bw2vmgem=n)+wI0W+W?= z;ER>y8QcsHCG1qau?Q<>8DYC3(m8SVt_wVsmjAkFXwEI~f|z$M;kO@$ed1k8y0?BtA^p8x+eBk*Z{E_32C4I3Gz|9L#Y`Oh$a}E3?O#Fe>o^Vpby?sn&Q? zHCC`bbm>-vCPG9m>f$jCurW&7_7wgV;sC>oYdU~3yBvJjx!Rs zkE|kyG17kHk7U#+nmKfRGGyplic)#~VX$>gH=}lK6aK0Z^&pmpKMdh z4rsCKVGDJscq}CO%Z)e~GTr@-5lK>vk6Y@!e4@}fWU%1)xuC<}{m~gFAzXQ3jRn{- zXz_+z;D&B8;gPYC+DaF#F}kf&AObnadn)u_S;o+n$7R6Vc93^iQ?RGNX}uRB?bIZ>Qmc zYgLjV%0TGAgxK~AMGa!t|Jl}0NO9d|&ke&&15P$nHj}f( z^@KJ_0=LifWUS=yAcXwu@b~g)*l?m2mcmUpXF7Xr?IdBNm>fLI6MeAoPXXf&JtRcYT$bo6_bu_fB<^;Q0qE3@9S7I76_YXp$cICS z$c_PHKVT^1{Jm5U+}q1|gGMx4d)Z9h%WO#D}th5FX(JZ^k0j{~9C=JYC`J zS}3XEq+1-_71PgKht?y38PArWa+HgL?Va6UZ@^dUgQCt@IYVt-g+8_eZpat15fX8u zW)%@1?BJ1*0e4H?IyQq}bQ?(Ru4qZ>hHrh$q03g0BAh}+jx~lxkNA(1sF~k22zQK{PT`*`ve~D0IgN8`SG3!Xbf1v3v|PMzz^!==nIA;lTDSJBwqGJ+)?<$YiwJ zB4NN7Yuc4uV1g#kKEt3CZXD~tDL77GYeqpLa!23`aGTZFJpBbK!WNntpO~7S7#lr0F+Nhb1*=Jdqs#^*J9lhO1?^TE ziTZ*;0mFiA<^Bc6A~3L+>z=AvFsNu|#CqmBAW0 zb|SyCCn}ZoK_rN5fu1>Cl|#wcQ|?7ws;}ZYq5Njh6I&L}t)b?L>bi^;=%}*GP8oOU z74DMYuGn0GSzSh)rULd<*XJOn+E#iyDb>K3TFqyu+@)P8F*J5L*ZRRQU3C`bZ^-t; z)YA*QSsw0}u;q;F0e1prmUUUlqtnkZdGx!moDLNxmyG%BKpn6G(8G}>jHWD-?|5*c zovzs<=f`t1weA5=wr}&?bQ`UvaB7f9ls8<6{isgE5!*LC=bUO=>}(O805^xif-JAc z{X)pG!JPDsbs)uqwQ4=KU?ah%)@syOc}1b2Vat{-1(nr0jEc5~zE@f_uFqI=j4?!7~d9{bwmfP4CsD!wXdIz1maUrKO!Lv|bQW>2x# z0c$%p#mF60x`Wp`hbta6g~2P+m#Ta4^P2K~wQ{MflDpC~nB-aP<{DDMY7V7|e{wr9 zbS2rWyHuDS8^Ett8J;0#QxG+L)UOEnaNvm&xd4~s31)zVjKwZcym2gI4J3xb#h0PsWYMSUu$wMl?5JNmlRO{7O)~IV==N~KDB5uhKFT@}&wodk z?HYskD1WamT~fI|Lk}WstRu%6Mu{cps@jMIe@rSkCg4Mo{U<1u;A%*PpHKymAi}5` zy-f7}x**I0XFy&&3b2gey`+LAP{DMK?~; z?_J4HObotHjg_ve0%uxw$O%`AqMYA+LhBAt@PVsH`4ECyk^h9cn#6V|HfXfVZ=76yQ+auvyH#sZRNIH!CAN&f#is`A^n15h) zWb!F`Ek$Kf%DGIi^hcRM$?}(WeqC$f0N`Bm~C+P@l8=8+dcC_Q$;aMnPU^ZX|>_OKvzI z;q%8gc@rE2ePKlTQp9Vn?8I!xm#eGMu%SX~xbQnYPIwT;2Y=hR$WtE=^0V*L@g^#Z zNson-G=Sp@9q61{L$vqCxoH$AKfR*tEze#Jfqgkp57gb~NMYw`!Z94Eyc-JSxL;XG zLLVj0qj?hu8h`^*EqA#mMtQiTg?!f>8Nu-oN9U%G965>|O=C|Ty=h`@^6<>j(Sx|? z$|)5M1_{Y1SHcs@cA!=o4Sh`Pjhi~HtZksAUHG+7c4QP%OOqBr!Z5!O$O~j~++`b) zeNk!njX!~rRe2|t#(2ou>&is=Nr#juLrHAxF$kPJ&oK*=UII+cE_XG-Gs3*=mHQ2NCEZ*0`~ zohuFgR zisL#F+?40#<_TdbbEB2)cwt!WuF=z0(yR~BP$i)44!F{gr0xziPu7Np`U?nW(^T2( zT4@q&d&U3`vBG?kdl!!*8`9J{To@_R61ztA(qGz`>W>#5*XN*eWgRD1Y{zu>)lM#l zK)-6?9ud6MQG{#Iu9Wg8<8|C246kOmX$mHzo`kLO;39hfoQiW+j@>#VKNqo|hjw{! zh#PybGmU1e{9da=$A=CtKj!a}v;0U6`Mt7iCk4O*!Bslyyg9b6w6DM_@$7R5exnRq6n zX$TMQxw{CpggI6CcThK&e%MnAm5)s6)1waw&L;!fSjKdiKhHHoFCQ&=4jL5k%6k8&?e&kE* z*z^RPsB=@(M{b@NJIZU*WP!_SIl`_z3oGETDUa@x#<;;|yPDrK7Zr z=$(CKQ43$QPPi;*yE4Ab0NVZVL+U@^u&}?eZw4a}y(#=JNHD#7gBc=pqr65uU zO63idGP?D6bcIm35h*e@B<(F^8ul{Jr&nYJ_h8et#B8yJOHr+sBYV_!V$;11P z%uPJ~=)~a}+}$ed#31OLow1UxqAnOhHnbTp7x|g~4iOskX*v@M4;m%?M8q~6nm~wL z+ju&RX+w6#hMxLhf~v^_G@$KlOTDzMNBJ+|1UOlRIs#i?HYo9{ZX-}>a8T@)EK?}p zw37_OA_)V}9W#fRGTw+zBuh~ivb8unOYLD8D+y&;ViI!h1v9IS4M@vuMo6iTDs?PmPk7XD9Bb}pTT4k@jf!^tKmC&a|8-@x8uy#Tz zh5NW%h~fiKE#OL}r&Q9`{Zu>XY!KAOd$v|h$urR~Eyk%46zJ>v`QRQYsk?%?Kek>)EHVarGdgfho;#bdV*%r=i-v3DPKD^+o7rkt>H57<)E29dnj zEM;^XOFV!=&KtG*`_9TX<}{k%XKBLt%X1Y#GkuP2ASoV?J_z*ZFpiAKxXk$ba8;Ro zr5q2-33`C0L!gNags?#>f)YLl039G5jgDQ#u_)d`+jg;zd|hd0x7Z85fO^OJ&U|Jn*&Ud!wx@h3m?c^98Ze~K{%#)78mp7_jf zRrGK49=sco95d!;ua#t0CK{_j<%7@ROx`qk_-K5{N59;*CpM}EKBZ$hcZ{lkpo4j9 zRd@D4C25s*TrCGtD*od3kh37&K9vyKq`Guyh)R~P$uCj=Dd%BBB`Lu1%l#0o@LIv( zvXL|=13!;5goV*C0PzJr(zlSEoWjSQ#TV@A|W8mYAROr0^u2K^c;!b1%>^|Zz`V|zG9sZwfg@V=xl1M*D8 zfxum$;eF7=oE;j>Z;2fq;`a^*CZw%(TTdPO@rS zj|_?=3|J<#ux}MTfz%C+fMyx^3Xgs+2n8G;NFCWf&rRx;FM^6)gsfxS7+Q4$*Dqi| zBLE@kISiF3*hEUt_OXVbEaDy?h|1v1bT1@EuBgidlwID39oPcG#cE5Zl||TR07+jE z7vExxb)53dC@#Mkt#6Vu1S`ONBp$0HglMQk`rqnMc;I}w`G z!$c!&6fx?hr*XKwgzpm2FAhLHSb&;aw%Vph|7k6IJM z4H>1p2v*Rb2D*>};xDKc$@henJnU&ALy3-0^PQQ0NI#9w9uqma!0Tguii|kKfB}R5 z;V4-B77IkH7{0W&bH0<~dPcCw${oQxNI#q?t1FFUR0wt+y;d9tZNiFGj2WFhqt(6= zJi;a@3CZS?5$i|}kR;M>%SD>M8@Ju zkYhMYU=?GeCR{3-A%H8E7El|5FbRqLm{Gv$!Jv4}qssZK_Kq@e9oN+%v+$*B*gV)mN<|Ch8+-)|_29xC zfXE}VrG8j?`CF2jgG3`f7@;D+0hPw7aa! zZvi96*8-~i6w*$2_@TZK4m$=A=JbmZ?uun?iV)CIY5NgktIug)(p^=z z`^n2WSB8-$pt!8%wjoJNwLI&2l4hmN?gak93ye2GQcMPcPb)}27oJ%ba!tk^^blbd zt`;u{xrunWG&(^w!&Km;U5EgwJUxMw1L2cY3=a9Ehd}aY38*%$C|o8I>LYupsR`<0 zq~i_#3Y6wJ(YsH9%My^oJSWZKebPU_>O6SxfXN6r5th?%Y@IoIFu?%V&Gl&==AWS} z4ub1ot{}%9UZ0-w$YA|Q__!EDLQ9eyG8lz5e^j2sG*L?p22I>R)ov_Aj-N19TcpTN z*rWNyGT#>GWuIRz3lt5Pn{i7BbYF`&S;3THr$??)a`~6?5fopzJ_i9c8!o?IHz@34 zdoOwx8dL-j{rUh+E)Ob&AWx1YS1}n)?Hqf|Y0{R`4`L7z6%hOd)8h%SmHL4lFWaLE z^@-+Bw_GMLg2Exi%lsx23NQ1+$pcOWLWyZK833mD59|9!cs^9vDebNJ$pO<#=zW7X zsD#Tyr>qJVsP|gL6S&+v9zQ_gs%bnP^G`b<1XK~{hF9YEf}{X?e}GX)@DCuJ9N-O7 zLC2jED_C6>MM@g$0$?k*+ae{sik*vp&_sO>v!^SCM;}P@%Z9*8*Dp8k z4NsupFE_G%MQFyJTNYbrm!;xXhVkTpHN3A!gAW^(4y~7?0qr5^Ynvgj(XOjgPROX(`92qy%)w2P2;wUjUf zRr~yiy!gGKi^GW9eLKL;>T+t@HlL1e?7qK@Jb80zpo{#K_XzG z(o9qaeA~XPy!m?NpE&)l>PTsa;dt-#ejK$ z1?k4u5PD!H!%Z8Pr^^?||J1u0bmJghjGz}3b_J8hF~+`){I%M)g=aFw_A9G*+8oO* zhs_cF$ViYHS_mi|1em--sM;BO={-XVc`}(@?PV3WP)@b%q1c!xeCEWLV*~( zA$bX+v`FXc6=9AZGuacnwn)WVZb#7RTo?p?^Y$cwP%DV5ssPF-IgsNs33)(f`H~S3 z6gvm;3Y~W!+OPc>*eWbrWo(Hel{G1%GQD8TV9&gJc@hV}>|LkFU~1x7Xv@r^3*o@- zBP>sto&@VqJ_*x@U77-r;yZe8!%PvGPZ*Z`XFR!~8I#ff<5MZ}o;1W0F%aRE93$%x z^#$7x#CD=zgDyRkKhchMl?M`MYF+zF#$padSxnGJsqoeF!kj z1ZUpV+CPHxT=m7QjCD%eEj+nWk>kJiUYuy2|{lv+}c-8OhVrThL8^SEQ8{H zsiVpH4NNvTk&@1YEymHYiOztYh{{yvCqn|!n6`ovN{a|E>y%zm&eM(A5XVIr<*DI^ z+-R_lAglAG{e?v_?l+-8&9vRgfEL)CfBGhws@q)epa7yvfw3_p?E|?c1^2R|9LD8% zj94%hzZZTd_3rr_AZ9D)Z1FXJ93WmylKb8d8rZ7$07$4Jz~rDajLecnP+d6z5$J1y z-~S?6cx)=4?6t>dz5Cz(UTza)kUU-hn-5?B){39E*zqmwfHc3;l9Hm$-Q(zSS7lg^ z@o5$>Cfdna)I&vF=FD&xoz7peNyfdc$%uSSV&g|{lX@pPFiKZUf-mBi8=ffK{tN>U zg&giDOsu_=lfjYuEl>W?6a;ab9X z5PsadLGW=#Ww`UK;3UDywah%4Bm<<{2Aoy|oNucg6mQw!W9Js1ryNu}Xl8Vy)8Mm*1p z0aXy^rz#Tvnkq%`p%Kr~QpCIXqxJH>PA63`72 zfp>*2sqqQ|q>p?3*DItzaK=nl{x-NegkNIi-tyh$yXa^JhN?I%+9D`MM9;ZU?F0M% z2SI&Z`hO12zZXjL3{S=AvRMD)6q5wWsM17};3eXA4b}^q{*n3%PG7ZSAe`VA(?$<_ zaK7A;GoO=#N&Xopw*vpcB{_1OFHm zI_a%ZhfeAKlE{kQ^gO(EKAvy5T5jS|kKs3Ghc!;~o;& zN61N&?W=8+aGJV-f|TK6a4A-c$FzDdujBqVtuN(=n#(&N4JUZ~$N5Q%Y2EBL|-jfhDJJv@MJoD3yZE8ef~G;MpX5mN5_Ku+{STB*dy!Dd<*_nba31k!5#;rjJ{?o8})gEjf2nQ}VX#Yt?$^Lx%8=|LX7*0uddUL}UdqkdbyT{)JzI zEfEnm<5LKcV!E;*wBOk$G6nlujao8$^U?GH+ zqQPF9ZzSO-5Mp9{K{4At>y0Ykq6Fz^u5ST^35tN^Bilnp%*`5`CYQ?B@~HkT;6`_L z2iMJ_O#1;Og@Y3+jFqpeZ)+XZ`3ofZ^=oMQTc~x%wMb^*@bU=H^k9q*P%>&n+a7#7 z4_e>cy?ghM8L07wtp#HCyMGxz6xPTcAbJ_&IM{rI{=U8Y_1*hfe?TGWD`^@&_XtMc zW@#&PPFlx~zmble4#2`Ut?N2$f(;5@_l`Q*t@PkosR(gNo7u8yt^ z-eGsIj+V8)I!OA!HaAWmU&!-pRr}rIo5hE}wZ4S+ z;>+8e~<9_U1S&^p>7neSEy`lc##2z%bV3ROHQM9?CAV0szI}ebFJ^}W!gWq362m>=Pwem zwhV!e^l@}xweo8nYP$n#m(rS0t)q^O`cYF~YIje&vfOryUC|RGP>YTxW193w$*2U-ZzK5_5J>EVlp?w)yd=rbU3R`0Qs!(nLa!TU!*`!;Htf7M8>9aX^U=4T zZARLCZBD{f8fL_IpKU(uyfzzLeN9&n(;Q0(gzO#o*bb~!FbK;frC?Ns3dd!1T02&2 zD(e1&QHu636gflkszjt2iIhT_>@TZDlw^cPWfI@Do}ZjxAxz+}$%e}2E&tMRa(oSS zad6qRMti-iZc}(kt=7;o62c~ZI?Kblae(l0D2~TZv1Tc8ud@@mv}0Fm!`2UX)*emG zkNSs$-sP*+)(X_d6`aIxSHO5@pLXOFB!>s5BOqI zCD=mR9f>^M`PDmpcbhb5g1bQxBBUa#pwji#=?EeZg;UV4*0;-FFW)C@&IYH5<6o{} zZB@2vz}`x;&$f-tkgv`FxJ#NjH|n}PS6HBc7w;2^F(Dmb+1EhR%ZWgoNP7XC;>|tk z@!95XlQE9Vc>FT%h>!6N+!TL|yP_9e>ImY(U&WG8@JmV^3d})D@r$-a ztwhc{H{0k37)~=YR z04BlKjNFaBFL6G@kMRUSxn&VzeyG%zle4zPMwW)WX~gOYQ&V1M(vEYpZxXr*av`Gi z1qd7RoXc}ww?IF+U(TUrA`@1?=CgtNsv%8C=&Qn@rFC1^DHJq_=;3ic5G{ z@xlVEYAZ9f$5fSMr%2=UWlrL>rA2ZPLB|m4GzK9|wg)aSnZQ(7UeqJe90(esC-%^8 z`v~7xK~vQ(D!N*6)-{bUr5~mQ&RoTCQeMLQiL~>vI9*hI+DIhBuFVz|Ds&wb2AG8c z0wm$46xTZujUChh2{pmw2&RyI?Cz>BLQEwMQeU`vH+WvnaIE8fM9Gei$ZGtwIfPPI z0r$~{(hDC`S;LYJuP?6PvqzvLud(=aH-R3bU%JPoV^8~AJ0IZadx^|8+r%cJfPb1^ zh!&Jrz!9t~njdH01o~VOdKg~_0n!{M=zKp1R}uaPh{ykv>Sda(@uPJ#z;KR2!cfbkTw zYxky3(RWGBYnYPAu7r*E2yRS6`6g;|4vq$hKy4{m8Mpq@?K&*}Ql1sAtwG8HCZLyW zG($>hC5HDM;dgMuQDWzMOZUh%U2m2li5JO8ayRMpgqjbZh+FkR`Zb1FCRn|z|`T>oeaoR370}V$6Am|`;!*&T_8535P&z(^DLaMa<_hNDkrfp zNK;F5IxU6iGqE5WS@>BcD5YLm^2h$A+%^sg#JfUXkdZu9ho?A@u{F$~uyO<&OmXl_ zI+Bi?y945%>I7igsG`rB&BA&@*Mx3pFF{|A`g-Zgv`f9}U#-(k@U%zv6L+dp0bf2A z35FZ}ak>Hu<99$AEg|ISC?k(VH9i6g%n84bf zuC97DE3b7G-#p)bfg+P@xZtVX#4BGyHxkX*R!;*)uVrp03hs2F>(!Ci6=i4+D7hK6 z3M@%oW^Q8!C=^M6(kORqQk|C((YY~{*80|F>w3b=!cnukrGP)bLHHwTgu`4W5y=bC zitq`FlgjR7-6J$et|~pmY`9HmCswv?TnzxJ1h-=MMwmkO4Nb5|tNQ@JXuSUbvl>0z zU%R?`gnM50cZNNLd7ZK#o-P@Nho4bZ8R)V=#9U#7*ouC%!idq(3NC_QT3VQbl_8!% zqF8OcpkXkW1Th!hQ_V70)B(}8-V!bd^iH0m(2#gz+pHG+D|jw?lrlit zP(8;-!)shGBkyjv9)5=+(`XtBQHm<4^`f(e544>{v!b>%RL9j-0;n!qF_P2+2C<;V z;ty62HWME#vJh-$CX-&r^{l6mMa_UsyoPYfdv}4|h&w9u%ZMZi0Ha94Ny=7Wj+87D zI<4;YkRbHy{^2RS<>&a{5dS;G|9brU_V@mO`-j|F*4iuW?w!^>NqNj8oFOLQI6*ZK ztfsus1kR5taG9}0Kd<{H56S^Phx5+<4v1c<@DoMQ{rKw~jn_t_-c9_X(ra_wptQPYzTDr;<>*KF4P1SApgZ(!UK{#aA56o=s$hzXp^PNjHP`)~w;i%493 zR#E5eC^`F0`1*6^`3adcDQ&+^TO(++Xc?`SJ6mFh#DuR9f=GTZ+(L)r&FtPOVrRgT zpc7b5F3*ub&-cbNBKz;fmlIBJh}l89EsnL$0Kb*BW-ggC=2?7#e`G4EwbTp@uqu*K z_$R_@aWf4$GoR<+C=bVKm>epstvnR00KDq@Z9X0tRbh;hy8gnZNl8nvM_e}CA@(Xs zTB_ZZc5xwDpzfmIX6?JVudOTb*BjpKQ1OTg8wQ_3`Ac3`YZ0lg9Bur9paJrHdmcy8S(D-OH};ah z)5|mLY#{C`8LH#p|p$2 zngAvyp{c%ogrvtFNG^X69s70I16>LK&lzWY2bOx@r7T@*{7h!+EbyFjla2F*G zo};7E!Jg z`yQe(?K}3AeI-1~=NrC=n^H92U4qxacgu8S6GCt+D%L^;)!DL8ojb}(DKCw2cc*0t z*xZPf_FwJ5);QB_8@ZsUgDF^K9Bc z&D#hIoyRaOJVB#=zVmSVT=0k=LLz6{Ye~>C(jPloCt^m8>uJ{!#kXBQaE< z7CH2s@$eks^ZVNW1P(olc@iSlo-)y&t{ zFXO7T4x4ae7M|?J%I3zNS`@#pwEakpZ*FZY(cn~a(RsYT`bJ}1{VOA|`}VV`b8ogG zPBPMt$8u>lP?7(M7Xv!VfR*8!)WWOaa}!a}%E@ZYrzPaOuS@JddvuB-_0n~S_;GO9 z&Cn=Gg`#?w=#1+q(}=W1*ghpwJXn2`+Z>@L)@(8J=!z~|n$@?_l_{&I7;U1SG_7NuCdbZf>@stRkhQWs^?SYo7k;i zpg?-1!=Qva6oRNarOO1kE=JAj)~cH zs^WKA{pHhT2+PBj!`^6B%3@GAwFlpY2aEQkB~Kuh6x{zd+AMGT$1DV@8&qkjKgfui zzth4Xr|ET?*qg@vZTiDabDTkJZf8n~lC zFR8^A=cKM3h?5hOsJf$ZJi7j?9RP~=5p8^nC_IUm7H1H`mx`6DP^s{UoLpp8B8GW# zAl0*?l|)ZG3@uixGb$DvSb)a@;LwXV7heT9K*OW}4f*}>kqye^Ju@nCALK5Sg55W?mtrHI4{ z6jJq}*q~@tRJWa-j=@;uSzHK+fHU|2IoFE4OLs~9N=&1}$%R(#rV+O7jZwHA*`Ib} zQm6e$JiFwUe25!kHIfBR)V)xG=BA&NoqYxCl~o=o&7f^%4_rjWl}sZT(5$? zPTYqA!f+XfK_9c8ws=Wl9v{Gmhg+2))>_IW?xux(fjSem1QO^uoy6KgUx_1+)I)S( zy+9>?qzh{313pq1D^@s~^(E&~%}#p4kP7#cILx`l-T&v+?ceOD{?J#q#V@|Ue{X;P>+b&k{r&xK04wP+=^28( z7nk){i9`Uj+4JIK3`6ny{WdM4Rpq@LY%%e%4RAUb1;4N~rEn?iOWZ&EZ0+erwbMd_ z=3ZekJTQ6jfHO2=ZWFA(E%yZa52W!`$xjlfbRD)5v=lOxRRQ=jA%3^}$AjhWtFKnl zKb9oygdNI0&vW6~g4RK?dyr%ev16EvjHQO3VnE@dFYAanuwxl+zHY>N0$$_jGJ6yXw{z>mC z>US2}u2)K<&I6sx!<7g8`{C_`Cx+FpP#rX=BlMahqUx&Nc*aP_sH-d%*jj3u^2!^stsZLp`u6nwqf$g_gq8rCl*`5 zA60tFOEQH>&Ty4HlIkoAl;CPZ_KoQeLK@{AZ-O{?A{RypKC4^f)`MH)hn!#hM*GVi zc{hIe=;LtCjGYS|mrvuGSj_TMr=QdT+jQ-v6jN z3PSVLV1>nR6{&Ml=oX$hN`~dte%^aWsvXQh9IKy1LaF$h_&!!wQAkWp6Yvb}>8`0} zIUjX&54??;7`k||pV7(1<<`?{q)ak3^5P0NEM?ZO1!Q8MQ_sWp;s4bP0(-}}(>PIB zsDx2Da_K-R)vLmw0dIWqH$wweW%s3FHm+FL-UQ9bWtU=6FUV`POU-0%e?`< zPRADLyV5!j{N7}{5MW5_&ila;AEc}Na8TAe`c%*qla)k}Oo6C00#qy00AOL)lK-j! z?gegWTnWJk6fshHb>+{U@3&QO-s`sZm+$Of{kruI|2%uQ-~Rvp&;R@CE7Y1}6XA&u zm%sY{_QR!>YaTG|6u-p6V(i_ZGZ_CwfqjD#3Mx+aCP!zHv673V(F_pOL@Z(P2rYYQ zADHk1g;;sARF}v*ldE1tX?Q=Dq0{H35l~8&TY*KGr$DU;bdM~w|8;nF+1kaeU1zNa zf5q>A^1JCEH9j<@rDRqCX*o6$3@a|z!ni9BSWvqS^hj~6)8;Ym_eMv!mrPp91{Z8K z@dMk=FAU;P;)im7P5L+Ro(9o%u`^^2f3xxH{W?h;N!{HK58L}kX4supmDS1|n^smP zPn(R*6r1V^E@(31)R=@C=}+)!&`ZHGcotDXh(O5VP6)ahxl+jaA82GygsJkvLQ7HS z0XJ8vN!}ac9D?An+G|Q-K&WF6*f3@eLL>xE^?Rrg!ve9=8C+Hp4H|lO@yg39T00K9 z*EXlA$@{P>xED1{mI(I)$`IR99}h={elejV>rsza1|D5dm{2k*S7aknyshw57qA!F zFIi(QczD$U8sg?88nW_?_PcCaVWHI*I$uXE1H2}~WF2Tb8e}wzEPEMx7d-USsGBH{ ze3cq=gJtss8A$b6vuP8CLzuPIcECE?9?D4InJuG(JM4JQ1r)(b0!pLyI-zce$;dV} zQjsgQ-VmLLzLw8pA88MuPDhicq_~{BDilX&L&#alnaJ+LVq1oRFvghq0%H8ejaU-= zW@C$1X59$LeaG8&v+%8NJvg#;i^21YxCq=jd$kB0OFMI=3(Js0SbC?n7hf+p#!|Mh zB>tGYMsCO&H;68c&1B9ML`@8~VFiyFTI|aRtFWO_H<9omQr8d{CR<6oa`^Ko*#@OX z+{zS|42(Q$l~<5CdAOjt3{WQ?ib__v8R{;)vDh6e+pK)G&x_j(s}(<;jI?oI0+BHJ zF7Tf`6m~E^xV#207#tzaH;xjG4z|KQ)YwExuh_=?fVOI4ZDUI;%uky&cQlY=$IVMc zlVAV5KmIaGC;PiA5Jq61M#deV+JYbM?|yar_V;M22GKD2xD`(oy{je`n}fYg2%R(} zI^{q$I|GDo3t5RF`h`B~iw%vGI>CMi6}52^0+Iz7{v~0d)=vA7Mv2%Hu8i-rk%I{n ztl$x9;27FS3@`C3*)F3>xmjU@8cQ(X{uA9Na4;bZRueJlwqWFWXu;|5^ucfp7YL*E zSvs+QEXLM|&36{QhV7LVyiI}DBdcz{j9dcoqVo^%1|>;y7yvpYbq(i4^bqN2VdaNrxV9VR+Yfe*cbhKBUr_(w^&QwIP$@Apt9@9?~L`I>Nq;ZEF$ zc_IDVQz0cpGQuO7p;F~IcE&YkhysQLJSagr66#Z-Nlqp|khMq1fSuczfrUFFve-P& zLu?#qLLEC~(ZjY8P&v1?WG`c`YIsuO(b~t?ls8_zfHSVnJ zqmcUdB2LI={I6>SOu$hnE>8&qVBU%d(;PAlAi2{*0@B98=8w;w?`#}A+xYolYxCL0 zZng>fEl(kT;|^3L9}r2I8Wt-pl9S-+LjYuLMFr|pR$iM3kdQY&P(Nw@LDYAAK+KM* z2qq0Z1LF@(2P2TsgiwsJ?lM`N60MSLv6r}zO(t`Y8(Fbui;Jo`OxyFcy|lxDIq*Kx zUGw9*xPQ5*mG7?)!OW!yjtqFGb@xuIi+q1-A>KoaRnzeW*N9ch2oN@kBVbYSGs>03 z;br-}5k|QMP3&Jpb<=X(ljaED#`wTzroyRgWccA2W8X0`tak0g*98po?T*|x4$xVW z*$A>{*>)RGagUBKsB(ohfX@_~a)?nl!_H~ZQh=?r=?Z^h(}hs84{L=kpH`e~X6WE4 zO}auz-SM%Q*(9+k`QB`AI_I2%aZtnG`ci7+7R^+?EH{{gvbpm+x_$(!d}t9!vy{}N zAq7>5=LvpKA| zTR5Z?c<>{Uhvme%BDgDxlxXFNO~{`nXeF4gyDq5cVlG4xlb!q{l}RY6uOn)PNim-yGP7D)#q2fP7%O@*8vYfw zvD|$at9RO#EHf%pYW+z)Y#4oESr@Yg_}uvzQIdF#$X}whQzQuwf1i{$2#qN7-nA_G zDd|~O7ZqlDnr3aOQaDKKj)sFJ8T2Rw&8o>jtuaga-@yk*=hw$Pa6hf@;xE-@VI3?N zHnC};?EVA_jS?53gNihspEK{I*iQ=yP?uuIhI`UUhn6TMeN1{s>=v$aMJ=Q`hE`nD zZACgZF7d>gus1N|NKh@QmlY2o$%2Rg5Of&EQK`t)I_ z&>>c&g}QE^HFm3&-MTh4C=&AwumQbw9VHtct+rl*M8?_4!GNsNI2?>NQUMu3#IqN& z`+9(C!toOi0SAf|aRl?wpu~9=p`DX>D1M?-CbzMmpLJs4BF9)%PGE#6H7*gl-6`;A zo;e^_ga<@}Iiy583o7%ul?q?H~fE|jO6@QsKc(*D7t_@6APNa#n0p6 z)QCqP#1sB<)c=DFgM0|AR!hELLBQd0HPY5VD~5;=Wu@q}-YljzUwP?tbC0j--Ory~ zTopH3SQtu8R|?f)*uP83=wzu4)uS~{1!uN5A*Jtv{>+09n&lEMk8rZ3w!jV~-PZ4b zt&?upk_u^Z3E{(vekDoGz!^rA6FCuy2Yh^k+z9v-C=fZX_1XEEH^&1!8K+360`s%j zb=cAU6KBums@N}Z7S(HK)W|b%h@cSLFklbGPcwcWWdzC(5U?>ny-z2WBfP@}fNP`D zI-DLF@s2{7mpp4AFX-6D!yh>P=wku5){J^1mipxDG}w%Xm6jekCzCTs;?%QHWL&G3 z@sDtw=t7_MrQ{BU0XjY(4k6D#;LgCIBWTLY7%B}aVk!{0-Jzvi`jmquOLWBwKVfC? zVn_saMX6c|?cSAS=mZ6vQ`<|$GvRq`9tPSQox+I;CYvNRGpJJwV=lLsg|#d?1Om1- zG+(Tup;IlQWj%jqxiNoEjlqLZWz3BLU@moD*|1Wtk@X*_49g3It|iQZ$O%+JkxVF# ze%)(pvD7ibV98kd&KP)DA7<{|(=hHkk;M1Kj{r{El+M~H%eKcD{m{yfKd)sw_wMJMx%9mC>KiuJL(HamMi+ZcO#aWM|RGi_AXJD z5P3mTpIfEYZDX?tLn!y^j9l%==r<^jX5hl)!lO>AICXOF;=?9>vqWf=Ta zhR@y0CM#+uq&L`<5#u3~h2$=O(Y_hSlBLm{E8c|k4f-TX2+T3bO@lt1Aewj&o7)f* z@L{F7DjU0^xZoSJyW@s+sz#U&eX{mYEUI+0fCP9SG8yQ^cr1}q;r>flQSnS(gCR+8 zqyDjrnu>IKHKwUwxF)7Dmn?8Z+X5mJ-eQ+cuh5QSBidQnqE*;bLyg^rlb}7iE~r)S z>xf~kWEy&IDswI%Q>AC@yFM}CHh-a`h-Fh!n<;1!_VsC%#IQo){$exCN1ds5_eOby z2BE7kNK?xMH?4l@=w>HWFcw5{YU>)P7np#lh{~avjI*XL4|~&X!8Ao@n3j^itZJ$@ zAng4$e-9;9=P2E8vq$m$wV=;5QIV*=0OR#Tta(?e;*6UT3i!z?`O zqilgJ9?(?rODFI__Q3UEF;w~1D>+w8fT3A*Wi(fAZniOMp7s6G z>zsB&!j>k9i~#|W+T}{fkGvzn5=3yzv>m;eeTWcED7cXRf=R7~5(%(B`8U++Qwcuy z0iQ#;c(PL=?Gl{3eS&`kzWT~l?4*9rV@YM_V3hNe!>_jFu3m`zbj+|H{#{gQab_rq z%{GdFRuLJ-h!m5^RH*AE>z3FKoO}?AIu9N^;8j8|FgpVc)eG4o980LGH)Asph;mZ} zCs&n#R8%cH*Jz&txKh*qlWHcIvHQ9TGNOnxwkQ#%z{zOgFjSOBjdGeV4tt<9?ehz2 zqahURswlOsbVZ_K7=vGH5Gl&jDAhs}+wu#Hw2HV0V-2E?VVlV>I$##YO#ifbX_B-E zP6trov`L>Osh{*c=vr8ddVzTS8@2xqAUz;Pse=Y(rP*AEGMPZXqur zGC#R`gPBYt7<-$_r z&Z15matUv{ZRq7OENYN8(37?6z+e*-n5&&_8Rg7+6JvSId5lxE){Ii3ulW*1!dSz& zx%)>+&fIEsZ2k>TA4v-!%0nYO2NiYn!Z2)yycGRucX9(?G%q2<&dUvk{t{@YFICaP zvM0D-;rxf;2=QOIFap(OWMu2B(tI6G$(`X_C=(3jP>R}V-x{|NLz+$C2`oW?ycJHB zjU;t7DDzi?4rH!0xGo^7gwHG9YwQ9SuAv9Rx7KaI>l#MH;7EB@*ycNxR8_}oX^1w z+%9gRGS)~Yuf(0~%o4mL*yf8FjcdbjpJep`hz%^zzT{j3B<4BC)qWLLjm+7GNk>U^ zEbUAT3Kor1O-ZeAZUJ0?E+%geYzaUVV7O(<`3f~TDWR^~I4431ehFK(?_^dULJ}wX zQA(iNr9=(XU)3(4suaXR4gLsbvdZ&Mp(ajKL$kuu%}U_kMX^f;ag+Wmg>#xNXkjKh z{fpt7zRBP8U4gBQT^%iX3|+V_{HZ_{ARCC!W&ov6woO9j%k^3tM(kK z=7+eaF~l`J$1E2#cccQ9OB%`$z&G!Tmr);^rDsA7LTZIPa79~COeB(pP_3fNY z*LsudN1LE&X`BuA z8GXh+lUyG!kWUeo#7~~wA^}CvxiPf^v0X@sSN>%RsjCha1PwWo3aCXshsMb2fpRF; z6My{!i1PIndf}**kZ9^t977c&7B^K{md}%MQ{kZ##*(G5$WFd!KMADkP|icOXJI+G za>q+PBQSiacRqQc9hAI~^Yl=*lFXLMXd1FAWe%u4sTlMs2x^uvOjr=C#Lun45SKI9beo{@%{$qG-81nuc- z8nj;ulw@-ligA37fSsWzalM5FD@?+*yI|XIcC#`HJ>tUfb)8a4VJi;O9WQ?(^xl& z_@{HZzLXIph{gKXCqJJ-`XgIUEZ-_Rgg1{8$+G01wLPy(p)Q1cGIuWv08XyOPhhwk zQfP%p*lQLCxGPrG3dLdu9td)OG#ZW`?vS0}YUmS0q%yQ{g!ptAixB||dP+tO;tpEN zz|`Srfb0#lg=$E{a2C8JJU!3lEAVuXRmW(R2FSBQVx}#Ok3PiO@YytXm!4)R;)(7~ zv>jf~`k+a3XMCp<>HW+)5uOHGRk4-)D};n5cYAmTht&XK#;lf7`Fyv3f&HI;h1Q2B z@r2n&1L?1_GUjqtCu=h!&hrbMX*m>)Bc{!0b?# zXjKvaWLGH7m+cW6bL4?!v&Vp=>%T!#(f`<Aw|65!M=A>w7Hc;V(j*Rt1K9oH>*Z3V^Sg72mt;F z&V}fr%@et%<5W>Gohl9~U5pNy!kWI!s6PORg z+$^SM72-dmd5&T-RI+K+2O8pSmawGr8@+y#C3y1ME$kPvH0A%o3s%C{$GL>guTXXH z*Zs?P&I?8liZ;Qn5@2T5jxVhWYg2_?OxK2$KGXxW9?qc9wZ zNMp9i_Zr2&Z5~CyOPGxj1MD>*SS?W0EWS9H3SZH6#O8$kBZg8Se~i!Src^1iZB->( z!A$j@2Gy!DH5|f5V-WrRqF8!U=^{$&d8Au-jsvEqV$ZaD4jM2*u3EjXiVed*pn-NZ zR&;{pO088sAwmmcJ!bcT6?rX~NDA9pI$)S2Zg$p?hp|*pKwv~D?nd)TG7~L5v8{{> zzR0sHaJTlCZM}WzCnbDhRx@g=IfJ2-a=qS4oFkOv7)j@%eB$`bi}Q-{+eZ7h{tYJ_ zzg9Jrw}8wxfve$d?k?Ji1zjxauso51o0{PZmpBE+ta#NOkMqDli8UbNJ1zCWNDv=~ zGHdwm6^7PG5-i^P^8szUG~g$lOs&om?W4x4v}Ti?O54U*$0-`|vt4EITI6v;YqIW2 z)i0CwN)0F~89tds2P8yJo$p;POmVw~rrJ7{W08ogqiQ0u=G83%&{j7CkJ9PKKXoU< z_Txo5Dd7rJAmHqo(Py@N0Y!EA=*=LCT1#6@#aWT>I^7-I^w@z+$!@ZALN)UnwJJqt zRsMmfl7d>8Ty^R|GTO2{+O&Y3*cF(uVomNs)r?vJ-X$ysNt?=BG}1HdFA??s7N?0? zsBm_L_~T~`81^F~ROLS@xzS{EwW))^&g&b{Br(q-t24IT#^b7we#LaMlBM3hLAC|2 z*Yr#l%{R->%YTv&BJj*=Z9tpPe*vEaSy)B^OQL$_s4#=K)%r1S#WAXj<<5#sdcVFz zjR5$`m3kw%VcR1M8r`|G$Na<|l0-s!Fw>6 zi32nEKZB4Vwn$Y+P()F40Lr9jV;#J>jw`wt@R2J!iQ^%biX=6T0tTBVX#o<|o=8pb z+N=1J3?K;u8WE8#$wU(YYcxgFr5j_ImR$X=G=NG+yVr-$b&T)I^`M++gzbFoe$*k?HKiT}Lc`4K0^YfQ4 zo^L&0dvx&V<N0~N94qFIThx~_yO`$wI2Z*wXE^>O>LbDEwn9HhF6R-G6nBn3j z%4BXXN>=Ue7Hk^upcZfnP1ZYV+B zfvqm!2XGD%;_5QFz%ONorbO|%qMeo;h?h|(I&H)|Lt^PD&-Z$f<$JZC!hApvk@0@q zqwF<}7PXH>Dty$>^-rpGan|(#&5Ry1kn}UKX;lXGPo>l{JHo*ZZU^OJEt_Sx&hA!M z+skl?z!(m@=MhpjyTr2t{DY^H;We^#Q9@h$N8%f0;$-DBYt^=O$QHBQ=-{xrVL%Xd zad7%1E96HQGYq7>Kbl4ept9Zz0|xQFe+f$`TRDwtQZ3P5;1oXUP`m?(I0bp*%M~F_ zAr}A*L5SCYF%np1zI6DH0**Nr5^5{3F;T7x8`=sE2bYfqtn{9*dEE-`2mm^5wCWxY zP)=ND48I5d>e$D!pG)CF_3gD6Pufhpf@|a))rD}2oepw)nXk}pdu?a!#q*tIz@dNn zrqh-$&^2g!`1?CpmnvNvvXgFez9m%WJF$Y8XqhicHUP_q|P)DHhe=!cGWc@>#S9-v}h(3;m?WuzFN(jS06vg%vHH!cz zGb^7@?j*#pYBFp8mju@`NKv(I=B*3#OeY(fHktklI28 zrls@Y+oyW>6i#gLWG4+K!`J;wSjUn_>d(m^!QIRJ{SPusXx*x!Q6jl))gP#uN5}>R0Z-RTWf6`I4P!E8v)spl-s7#uFCU%}Hop9+3keI92q=yn9ZQhb zdbs3TngE6&87zXV!_iIPXsfHc8?$6neRADC#r$iA}kKqKys3tZd7lP z;43{-z180!w4oAevocrqK zsc-+RF{TNB^$fhna^oo0&oXM%LsA*){N$zNW7=sh$WfxOx1KzI3R~EZ8#q;M*usv? z!n!;hog#N%+dSWT6kK080BqVFo*yr>Vm}%sl2otT2$* zBrom-Hp2(U-e`Z=r6NQ=efCt75UTE;1PQBtBh;opdOgNvJlTN|Ar*2@f3#qWLgH=$ zQo5qSVnu}DeOMxN=}ss{PPzD^KAF#$DZwDjmm}U`*^zoxtnYciyF&WMoi^^cx*U(s zwXDb4WCH9Yo8WJFw%ls3uB_0o${DY&I{g4w)H9DxE8^ICD4buGh{4iwT8}O$T~=8D zWjGNY=@h0gchti^1|^FSi%tl`^~t=a>Z5?~#$l;MS<@2rz+=Bvnhe zPWVj-Nel7GCYk~FQ_MH(kkg(qCGl|;q((=LtiXqv`TU*NhXv~SBkV8!$|fNz2O0_I z`N^`hzQf%lg9`@7=Ljx(4~_*uHW_#FgM^Olc;cw77@YwpGNllxs#G+Nk*upuofTKJ zX#tyvO9<6GJ&^0Pd8_x{-R>WI-IG_peslMo+%=sKBZVXLM|w?q)^jeadZ4xzL*PX* zObnyrH1GkYsYz}dde#aFq0t#S9(_!a~UXzY>x-C3YB zeAJ1c+1c3ISlit=VB`|UX{}Q7Ip~r>3xYtuQFl5oes>)C=XbZm?_Ynd_|jgwhfib2 z26ObI_+1eqwV-H49rqP1zNG9*H5>HD0j*5?*4UuCyoi&MLEg+0e$q?qQb@|uL?z`ppf2g)}@4#H8szC_7B)M5mmz!5t#E06Hs#a z`3pYk;9vmZZtENDTn$u06eyFtK|2UUUcx0g?HJ#Sh=sI6>eb4AKnLTRkQcE6Xzu!Qm1=K8O93$+^?6yU zNB}&|rn(V7#EMI`YlQUV)861R>(eY|S(+KN4;Zbc$3Gfk?3c@VK&NP{m73%P=)un41@E6D)}y ziJ(XOXB{;S1Z#!c+kh+Hq$HHk1@G?@fgv2Lt=@R@gYXc0TRl=DbXL3IxrqYj{>wlH ze(IfHC)L73yjEPj3!Z>TrY&>h03iW5K?nmZFEaTuX(osiC-*qe zfnXd;q+$QgDl|oT*k9JQEnq0=E@svRB zJU{-pRi!a8Lf&F=neqjHD@T-=&E$QHp>9f$_6cZ)&WtU;_nqpT3` zAXn@F$0%0tc+Qe7Dzk7FOIkWF83!o2$}(}YB4OmcN-b20c?<4zG@M1eLv=$*d8G94 zraz@pfYV_WLko0fIy(YK(b>L$+A9V1Spk{34&(s8F8t}}3=zeWe-uAC!N&-{ zynq`fSDHYFRjs`ouxKf>zI&r(A_`4Ys+G~ci;NNOh$i#ZumuFbgw?)O!iuZGg%{J>)O^T|f`) z%?wsSPV=F1n|%l`3KF(|uq$aGf^oAb(4i~=Ze1Ua4kkmtzN9%C1ym4~dY8Y-v^)Gw za0(?4n&=(d3@)oYI&7c8&xT*kU)`5dkR+JAC$CUT&kreEj6=a${c+#~upQGnsgJjpe*Y4F|^t9x+m`y(1C@6*Gl02#S%owRk{K%3@|-tOhKYVSi-O1;A#Xk(keLR z?WvHEDci1L#*;IIyG@A><2{#0c4kpT0J}5&%EoXH${keAl*>gX z1gp6OuEBxA*(JHR`B(T#M}7EyUsVj<5~+7kyLaBtpvwEOnKleniIP$aPD7tznln2M z#*oVDBRhLKE5L5*OacblOv20zfR$CrdT<29bs-i?hX>Ukonv07>x07SsGRg6WRv@rqj>H5up5o`{4#2FraH7CyyaeGPOihG?asnfY zJydREypbG4aou=Sp)J!B!`E1se|j6=Mu(8|rhFgKT=vbuA_ulG&xZFl6bQ8$7QP6p z0G*6hWvGIv>pwX5o`Y=#d88&h!SWgzowti}Iy|}J*G??4kskYs1F(D+vYc%gH&Pw+Mo1FpcQZ=A>#Nl{fy;b;?UZ0*Kb`MENLWYAOw}awA7Pe(A%;!TlYxMAyyON?eWBm?F z1XD)UVObetDYk*}KDjm-T*bb?ZFMb1gMj5Sg(`oo!XE}CQK)j*)4(O^vX*^ zGyjMwkK&~wV0O|J%u3Nj{7@TWffHo{hn}UJ=~+3_$TsP&F!m(_=)UP#e%Q4mEFadz zxL4XnBb~wHaKZ!|_*f$~G8RZd#qObMDv>*`8Cmsf`%{*Hq83O`@9tMsV@4c3_Cg7@VDz7$&xWMd( z8_r*Lp!*O>{@aR;xLI0uD&GzxFoLh6XV4qbN)8WoNLh)aSGY%uZ{&(o{=yv&bgb01 zA*c0fo%z-SmDGxFt-=`TsphOYw_n}nJ`(qahku17BT%*R%#Vz^B4HUS}S8RUB0k$@3CAz3BY{pILY!MN8mt3-hysNzSjhBPv04YSK&g zu-sAMLh-1ilLp0^00OnSInD|k--*?wv-EawJUPo{w6!Z<=qZLNvnafP6Oh*&Jwlb4 zOBxL&*_fL}FQQUw>*!b5O2E$KFHBX9Tv`7dc(v=;i`Fbl2 z7-5zkPST|mm0Mp`kI+}GuUijruymt+I*(%7(x;eGWeO-t5$Ol3U}vWU)DC6lziQq8 zCY#tNIp(UCh5E)uZ4m;3T18hVI`4<6cEZ7A;xPohY{779QNX61Wcw&snh%Cg=t(RM zRGb`L`$FF0RX@WHS2gmI(LOWod5Lhxn`mqgTi#y3@Lg#m9McTVG3}!}9VnWlE$T zUQgtJ%FCsL;vW)M#&b=mRjBIT(Rg zoEb+|+8j)Lc{_*=!t=2TV_?!en&&#m3Uo3nVu7qCvQc|YaRq1*|0{UTV3OWed9D*h z(%|5&*pu&+GB8zm9ou<`XbQl3?1`Kd2Q(@Gu+$e14;I0+6l}P-rSt>SIt`~}Wmy~3 z(d@mN^Go&Sy#poBSK{^NoM5Iko2h!j#eRMT54ydiGu^HY!1VY+imXQHFkt|k2a{*5 zR|Jssj}3&jWPE0WXKJ3;LqIF*_ARbxH-R4tJRt(`#l>QTNaJ)QxK9urOZ@mn^kl~m zNCjp9vL}MN&(I@ed0vO8@J2HW#j)=8v@e$Mz_^I%zSh7B?JP1|TaV}}K_(cOA2oQRk?1 z{*LhT6GV^E0>KSplms(}&!NA-sH3lJqiJpdVpvgO5=`$&g~!6u1&_`pR_6T0(E33) z-ZK-I1TYpHV@iA8Q#@T(KMad29O`IIT8EHSirfg4CDcXs?PxgT*`_m|Y*uJr$216H zwJ8rR{s+y43_HJK^00tP9aQ!T`pfoE=%`pEcKv6I*Ro43Q!u_q{4Cx0CxVu!{r zfHs{IDnme=TFAL=>Iecl>n7No ziz^-vuW_wk>|a6e(U$GKTjN*Jh{ntf@I5hUw3wNa!$a%P>tu?rkgzD{AO)g+w8OL0 zhfPcC85Xt|CgnIwN0ASkCu;Y}b>_9X@I`5kd_HrAMB;!r0f}=@mTyI%yfoopUsUi2 zU>S_p4v~q9Tfab_gieB+&{{~ygYtwem3}~C{oS?^S*7R7T4@bngsR?qj622DI%~;L z3`M9Nwo;F@rrHF>*oFYl<@Um=@NaUtAX%t(wGg)Ef!}Pt#{5EtIILnm$ZrU}fnoV_ zB`6k=<>$l8Q{<0O2Atr32#h7}c~3;V1R^lk2vrn|K>#A8mR*z#rHMdc7-pCnqNRZ$ z)-*e`btJ4c7&PEPxUQNfqWMI?Ds3}^Gl|Obl77l*yHK7^eC>KNWHN8_%(0u&V&>Fi zSNYt%gKg)!VREfO)*zS@CecdK$FAgHqsB*us-BrzqM+1aQ1&Ho)!l^D2-9&@%c zcvV0U0Bx(T5EBNJ$knxdDj{Ywj>i=|*h#wHaNEb#l#{ba=+(RdAx>4N%HS#1R) z>Don;1QOWe=aWLNk=I5$VU%9H@PQkUWr_Y8^i||4t^A|E%B2=#7@ED25bfYjO&k$Z zWZl5(ZOv6#R7D(nDH;dFkuV!8PZI?OYY0*pCZ%eTSZ7tBM+bsC-ePYFPbe>&;Ps`_ z{@TohV2N>8v}cg0FbF=bpn!Kyx?lo`1u;3!*l6C+`MAm&p=TxHrinJ;i#jsrK$ayK z>RwY80e~ihi6p87UDF@f8`c8w<|2Y|YeG;_5{|`25<(Tw{#TY2Cd1gs%dN$Pf+y5dN1`If-zo$^o(b>QvTCQ#0VzR3RLB&Zkgq)wg2`4YjAY(LOG3Ge_@Ky*u=%PA<_B5#ozbtiyr7B)3}9M)%sQm zea_A(hh$tqj=z2EC)Twp3>c{U`(KLk*`oB-^gb&_|GAg~_w`3GV^sp)9}VALN;wtO z#X9Rj7==s>F4ENe150LRar3+NiugDp{Lg~nC%wt_)Dq7qwyanrXLhfN!D4 z7^NP}shze2{q|anz2X1!YWq#b zl4_G``AbF;hXFN{2)3?PA2nl=A}13V$QZazJpp-lvRPxufKx)0W!d#0<+$AJZe$tY ztoNqBAenk$Mh2757?lj?8Dul@V3Fzsjzj`Xx0cdSGzp<*XlB8M;Zbw+neINwiujrE z6UQ2xfs-AE6-qg!;61OYila+wwb7ur^oyYpGP@^4k3wj|a6Y;JW zweS7JhOf!V>&-Sxrh1;U%5m!f%_tAbJB-wlZ6+R zNS};3=`nW{$<^G4fevY-P|c_f07Z@hNoOg1s7kp)2N56MpICFlUn1AQR)8WiHy4Mr zw}K>HzE-D>&fHEs=MfhnAP~$^>K(0MK+Mqlv?*A(s-Y(aVx6$SAQ%+X=F6mLx6*tJik+lMSzLrUY{!qOrY8%~h)tVK&x%7p6`^fT!@jmy$WisDUWP84rj z5N9qsUUx1#fi`oAIGFm!20*~q<$hiQXf|O~AG+!Ub|d1ih&yJWMjVP>;c%{1l(2Vn z=)AjwVuo63Rr^}<$x*MWOChkAa2d-8+Y_l|wW5=Xg94?Pe6Ad#4r=10d({l<4NeVl zI2Cxf3cR7=1FUS(?OK~wr~BqM)3U~hzX=>dc$RI>N7EPHUREM725P4>-?#2TN|P+{ z4@n`NOE&Xh*jbX6@b(W+y8JkC&ZQ=^cdjd+Dpb)d=sUCIChIc_KUK-e$g^8p8731O z&y3j)v3Ub&D z2-w@6rVonjXy#@DKxWn`m@Uvot*)F~COItAXn4zY4|~{R6bNnv3!%UU>M`W7p9i3I z+DG?|f5#~y8C;L%+p__L$I9+NoE@M(8A?CCJ-hjg;v9<$ye6M22y)J_UQ?)ONvGYrmaS8RHe?06dz&em`k*%7+B`|W!aKc#S? z1rejPkcbvK*qB@v6*N(gha&nB@;OM~>B-eno*|vTcZ4!T$BfIvd+<-$TDcPo;yc)# z4yEOd!)sD;DY64rjbbH;XhkU0+~o^CjTiwQ&(gGDSvp0KK9Cev5v8FNnK-z`GD{I3 zHC%wIp)*~jC$Kir12E0z1YH?9Ihsv!4rqe9t3YKmyrn&jAu04PLm@a;il!h&NdL6H zi@!iz5tW0lMc$!FM$peqVKyxU6!R+8kDe6!X`z@o=E~BlkolmNNNjd__~X$Hivi9t zw4MOP5LA^$4Ih!@4q+L@ z>JY)C=a|lh^=2GP_Xp<5lDG>FB&~r)H@q8;w~e600BRusiTbG0IuU67u--7ExrJ~< zhv*vTnN@l9Jacm_|2Ze09@=nLVKo?^iT;U@2doYV+8aqkZtoCQJtYo)uyL-qO?(d6 zp-gMT;bArR^XpSAYmT`ED9FLo&&rEMw@26G$?&3U00XYhGr$J!_g+Vh+efP{>fUj7 za$F@IrG!~%=N|Gt?*o{1+IC+Lu3&Jo_zFm^r@YTqP_2l$=wC_nJd4oINvieKkiK9K z2s7)X@ft&?$%zu@hlil>IhNHTYXUN3-@25K4%C#ks+)<3}l?`DG9h^^UJmDY}St z9vi|z&u~8yZ25yX;#-+s)@IE*Z%GFr%u;iK2A!W@zbhJCj`&gLsexkV3(BQ&f_&7e4~UkjM?O zQZ%fKBI~DE2KvFQA0?JrS-J~Hsr(AY{T31KAr6*y0+`qQpp|Wln%3*fh1V_>8%(|v zzl(R1`459TRa8OM2ewVv=rq^|U6jx&9GN2+Q=HpDtp^lap>xMim07rX*<7diYCpt5 zjX7?*`6E>P1j=IqJ}jnyydU8iyJD-tH&$}g9zz~xP>wy6943Tf;7RC1z`P!A)>#-s z#$u&eG)OMO(Ls=L;?lC>+!1TKw@t5It<8md{x1uMUo+$0<}Y*Gvxijcawyy#4POusH3AD5uODK~ zyAmWdZu-bIG5>8 zM?|;hEm0c((YC)4avFEf4U(xZ#KsJLKT71#(l~Vu&4HjY^|ndkJ6g?0BMZw*> zG8_>px%9DOO;^R}uy6X+mdM9bzA^zCW10IYfe<%xh%BsxMH}x`N{w>NYKBn*wG<@) zYjo$hogQ56fny_F^P{Ze(@P<5@fx<#KCV(2=p8s~EZVD2E9P{$C{uZWH6NPAeJ;zl z=(4Xi0HsZOV0$63Q*f}{%F zim_yk>XvV@*fPVWiDqjSv?wvBDrs>NNGC^?t~pk?)0cAcJxJb{-M{rmLs%c6v>t)g ziTT(>aiA7Vu6=04_*q!IAJk5pTDULPpJp|lC14BtlrPafYcIzes`d&a|3IIb-Vi@oTJO`(+7O~!Q;uET$2Haoii>1j7S0O;?1h931)KXR#?)f-0 zWg0Y~lAEPn>}Xx^1A@B+9F%bv?x!C~Z`9(yR!qIVqyDqq9d3TJc&VlP~|0gZt8><`q!&WN<3L$PvNs1w@LNz3$_WjQt*!k%}^HmP!crQ zO5z*oM3E|j#fz7|=9*;;#85h9>~1RYsyDqzakl>njV2H7yD zQ`{PPvPEh)<0B!YvYF#u#meIRjX6mCPJdhxdt0I8c4K-Ya}zanRh z`%Kl5D+9dHrQB8eTD!n}V_>kKM?9>Q@FmpIiC`9%%T;JVjeinihBPc(Y!=#zQ4E9( zlZjcJ0U0gwHJ?9*ujtG&mH1TWv?nQIq#=A3_y-Xv@(?%x5p6}&jCq|chEoVdN>?mc z*J5Y%%;8!JxZ{#VVQq3W7(wG8b)XqK;Lj@X!>;39oPMy~Aov>eYn`+jo2>n_zA4lf z#W33fR(6oCY$Q?5jq;}GBbwDDF#FuBpP4Uwj}>`>={N-nU5 z-ucHy$Ab@B6nW@QkYl?!f?RkGK$Ibq*+9hel~{qGY}%XcN}#u3Cm}7}AtSBAt28|k zR17v}#^x|{7l0#9*GcDRICjk#Xx3N-6LbbI(FU}7U#yhl4f*3kux?(oO3_+MyV-c0 zt|2_8VL5%S0{I(Zp@_J8197<(LbnUYlF^rUTE7br_+7wojFTQ0Y`IkgtemSr+WZ5a zo}@MK(+^nMRKvkA!bMN7xR%}-<|b^=4>C{(#eJ&>`HL{ioH=@}5n+pxjn0%wutg!% z9!N#7N#yv9k@CKUj7%TkPD^7ZKr+>_;nX4-S%^ix`0_aR?ZaIJo6GgyxX&BM(ogU5 zaCC|*PLEdZegoGu!MJ>JEYhmGKOw4-aO=yeJ-H5m@+>s;jJd2eaLQm~<_pk-kL!Vy zS@;A67Km6#)(-Y&*}@qxO>ophh&dy~STrbz;MWq}L5&7sLWTy63!-#u=NSnSI!SEn zKNN7Ye12cBEK)_o6rckwR1Kzv9gB$|3KDk(Q2BtnM5M@ST8Jg4rYBZ5)PU;g?iYPz z^fU=N;aqU$j=DI>BDz?``tTg5Jv){{i@f%fOoMb_o;gGU@xBwtzl6kv;w(hOSZ!;e zEdY>O6Hen6+O{@*>I;RA1zsNcYUm5dwltpHP<24fx{L9tRMSWr;t4U5ugZr=$dPsd zdZfFL#?%WQ=+%?SO97;k^*OR`G37jTQ~Ce?4sM^_6|Br-bd4P&LS%s=vjc>l1+3Uy7haxKhMO zItQoq&MA|)e3f<6^erZ))?VD-POX|EH-AdS1nof|a31&TddCAd$)n2ZX|H|ueILt)DaUV<%^H=K9nQPa2} z4V7^U5TCOzV0w)$c4|*r^p}deHjw6ICAD{4OYPy5)zro-tf$!DTwXq~piEFwvWgot zNtrdgBN3EH2E|d2o4nWnL=)r|(f~O1+KbJfHV(GeUOd^w67Qj7V;(qS6Yvnfr%S&? z6E*!Uv|-F<=v|jtd{D(j{QUav-8&0y%nXqqlIAIex#X3q+x*OGj)ve6shmbowDBzr zc7u}}R20u%OFYm*`xNH8>q7<(PliXs^RaZS^Wi)ADB7Z1@|Q8ZLGU!7ZWd$Zy0G6! zYx|o+9S$zz<6lwJ$s4{~!7H{nLfMXf+U9I{(SNrhkK=n9gT`sA@Y%Z+c^8|KSU0rf ztJv_(QB#k26PryY=d!AM-+ue;{ks4@ir3q$bynU$y<(M@u)~ZIXrOSx);%5kz^(}w zs=Ynk)3$F7ywyj&(J{PxEH0zK_g!^N?vJ|T>ywkgFVd-uy3igLqK&!f{&7PLN!kQh z!#M6V;)Snsyf_}R_+k|+fHBKhjv#{}5Hk5ui==xt98ajW%3Q501oO z95)g67!bv2`5|OILmko$6&&|^q-de1;d_``RCvVKG_=UnSe@ZuJU%}lD?S~;{V)9} z80ezo1kL0Y#Jcc+cU(UjK-LXUh`&+`1=CI*gU$qslsqPYm7*xIN?w6_Y+Sw>jE0wt z_rNUhUsawxKp8yHuhBK{V97rK$Yc$?KV9aC2gF0tb`&(I2&_uvR#$T>2XBS8OBaQH zs;$$l3g6VG(>X+u#K=mS2LO*k zHK9| z!;=n|z6rAq#VzY?f+uYWLA!E5>tFe9qJaD~{V1x}ZT!ESxl&h0ml?rP?Zm zmuaGT{@M!D*C)Cs9X6DxkBF7_hMm4AV;l`pJ;4h0%WYfgl|qa^%z7x{XPFXN3&ON{ zGC;Sib@RLi9GS34aVyLc)L&e&36Sb2l(kkc5R<~=8%3xx5mvmN2Ll8p3)};AZYSYZ z1*#EdBFs$f2t`JOt~xwuI4vjVJy=e^!<{bRG$Ak=?+AE}XO1E!qLuZL3!(mZRjT&q zL8c5}>XRsZ<}JAbku>wiE>|)}dZ~Z;2J>yNKYzOYe0O8#fQDT#)yWVEnQ+PTS2#Uo zb?q+c&H=~`7&4DMKE&I>g%cf{xBn@uL<4oe%weLxM6Ds#EUnWJ2OZ*X+AI6}QYT3V zfY5h}@Da#eD6-!Er$2Z0m!3R-y7AlpzTH{*ZRz$uVM;m&jD`U^ZN6pX#wrpZ^~p=D zYkTMUV*^f zV^kgG_W5xX>}Jd^@Ve4OA$|%-Yu{f&8NPcTSN<$$3|af4`PJ+CtB`<@MD%jb#ck3Z z7XGhy5!RtC%P=g2l+c6&akNq+12l(Yxg1?Gb=rtu(++hiSQJieLeWfp1T1xvu~E9D z3SEe_=ZDQ_2P8ymFZ2Kx_8v19fh@{M(s_`QARRG*wS599TK3zjZaQ#-Q z`>p~3Wq^0ft&LxLGQxCp_WMKYn$?mK!Ab(f4RqhQ03l4n-2j=;0~2p5j>bg3Y>d#rIl)5 zDh~mqGC2blx38_URZ&UULZGhpip(FU&PguXNM-Q0blIl3>lzhaN#hDy)K8CtDw!Jq zqciy!;IwP|T&7wH1|?HqYHA9efJ^lS1jMSDz!bAs9iplLxY`iSWl&lu9g0~1$87rf zXuklBra6sCwqkFS5DA?CqfkiA!+o19rNMOdJ67yL3%)4D*l#n4HaFcd2m+dNYf%h# zsLi;D7Py{p)LMk)ZqW*UISv#764JeN`{$vYGz1970Vet_ z;So5KTWC^IQYY-9Dq!E+>O;@k?lbTe?p`u0_D&@x!GTD^6Tud*) zr}B5z&M@k|O$Fi)Sca>}v{Pksmlg7C%YW5@5nLnFrTA>y6Mzt6?L<7wI@MKqpVb(# zu(QT0R9+MFi0(3F2*Niom+=9F1cdwI;sm)Wg~!CPMV_QkOeNF<#6g}P!b%5Gb^q7> zrOq-1zcw)$X<3j;>EQbHF2 zS)LV_b@@z4_C2Euh~7Y`Y5p2S-Cv`IX);HCox;L)#m!kFV>8k!wDVckr&*B-urzU= za<0~EZd6OAVS>JVlFmk$1s}}iPBF&`kU;-~fYl$JKsHaU3J24O93sj#L_IOG_Z@trW$9 zYG3JsY9EGissO+qJ_DpQ$!(4(p}1S*AnO+5vj4A0E|Gs8!y!|NmkICSavh*%N)Kj! z-w$(*v57%P)1xI8P^);P&o>=66bpg@oEn#Q86HLBV;HNt_SBNi8F22fCE#BmPW&EZ zN-$a|m+}L)A@$O6?VMy^B;Pxks16@MkHt8Zi``ocHfm#I@04&?JD7^`=+x$gSO*1r zpNs6Yv(G>x^P`fI%-`AZK^wAC`=J{`I$*E&+I;H{i1w>JX)Tqx`9j-c5seFJIEBqi zsD2Pv5y)?+GI`F|OmIhXf*WSdNj6RtpfhwV9{=VES3issR$kHob!EArEu1|`a%x5R z_0JuX?8G?z8>Kn5O#kNYvfKO1?>H1?7IvXg^4cpsaLhvS(%QHPOIzM)-3I^?1`rWD z-E^^W?=7(#*=o!ZpbG|T2eSSoQeas8TWLS@3m!A=ddj{iJ`}blIkVMcQ1~Y9N)e3+ z#ebZA$dNgPF45QbA#dg4VZIxJ?(==2P32#5x&lS2u^u3mGRLW>gP#%nbgJS<%Iq4> zMxkYfo_vpWvM0w+xrw%M@`@0(`Oie5-Rr|=$Qi25zKBD~tU23!dt~)KXU>YM3M2t?}@`{=dF!09Nx-s{>0Bk0!$b-9XHR?AbBOvk4hmK@_utQK#D6 zI^6cFlv_5^H;*bz_OamzbQ&U8GvI0K$>v?6mzAk&lg~MOJrD|N>U;-~LPrOJ*{Ut; zzv=#B!3ta$n-s@6Yi{2Gs-ZBLLAJR8JNb3Q3K7cI{fmgY=uj?fAj$#q8HzB6mNJ}U z28%nqyp%Jy(?8LJg;5k=(XP0xa43BZp+Ch#y=*ad0)bJEli@8_{HLQc+%(a+%)7t8 zdsmQ2XNa9VDb>aaE=j272%0=?}9WWNavTt#MTnN^mz|Q#< z$nj7V0O};ol`z(>SffxPR~ZBF17cK?N2;|ne=S+!f2X1tKryc9xzyYYO3$nrYV-0< zWzFldud*R$jr3UJt)QpdVBv55FsOz21*hk@{!~g!S00zEq-;Ll-+W#HLFgYZZQh&D zE4`7Pi$?mB)m0f@;`)oe)P<=um8vQm%+P*<$)0-}0R22Uyl2S z*Qe&T(Wd@znOA|JA47tJ$p}U!NNuXzL*uD7KLY8#NE#SXtxbs~QVz@_e!!62zu_wG zILSHNLm<*=H+I+gQ~4FXR51!5MUjom$?9qf%C;XDEX99C#gvVm-OcCEjG@*ygO!hp zg)xAp8qr#zPF`-$-uni!tvZ~BdR-h?ktV@WNUW4CSUWx*uy9lFe3xl*BBd_DE)Rb( zhz)y2jZYmnkerUr#`+|q)q$*aM%Ne*7YVBX;RoEP`Qkqgo;}}ry0+ydY~q*-ALC38 zUBX6-O@STTvdFIFq*u~^j)y2iR)*vqTS}mAp|hweNevOMI?%c5$e4m!jerKM>CzwV z8a|{XZFLm^9T3#%eb?q%mZP~w$@Y`&14EL7%}1>Vt#9vsefPdde6{3T&oFlM(z@wG z1S1~}Af?^Ft}QpBk6Y-q_3iT4%lD;x462R4fmAE?SXm$b0>%VXLVewrQt%RKg>45_ zMU`D#OCu#D(0C->w3m}9(s*%w#aLQcW&eNn-nFf*Bs&BB&aaR;bR^OizI0ELVY=PH zfTx+zhJf9j1bcX7BtS7pj3n%4(sO?MdEa%Z+umCUo1RQ^;^dh|d)Ka7weGcQ)hh0g zVJ88X!lNIQ0fiNU&c?0q<=JIXF_2td8Q+N;;#=E49{;p)@N(zn?~h;YFt0_X&3<4Y z7%v5LwV}e)$I{=C3c!N5Gh*q6_~eGXpZ8*40Rp&YT&wDBJ{&^=e@K9kDvxkH;9?E? z8g%goch`p)_`5H8)`9>|9IAlThIkg>KGwj zIN}WPla`fVZ@t1k4~nvW7+j362tUqr4{>D!ssjNW@dijVaKoha506oF>IOe9`lu@{ zWq=YI%I2jM*5fTqsMQZ)l*;wXUx4UwuFGr)k&tv3D>;JRX)IDUfb<+APYH~E)FwL} zZtuR}wLt29n#M;r*zQgk*P;G>W%;7p2APuzI-UU03GR(q_;bX68h zTd)&Y7At*H(}$!9Ymc&#Ep?o zz_>xmTHqKGS9t_J-=UwTl{07RssqozspolSk?V%YO*hjBHNkR-~JA3;W_pLP_ei6JH9}01ZQEJKBhPUjmg(J zW?NkrD=@_Ch`19_W*HaiM5jDb-=|CgfTqaRTCGPZLCTM*hD$1Wmdv55quuS=2a+a= zgraUA%%X}&RIcPLtt7odA3cCV5``Hbt7Sf);O=O$@*6m7#7Z!)owjGH**D2m(o-a+ z$@SK#^Pk}*cJH_;mpbs$`-4dw1%-HQSrR=;I)U}>*(`VxYB^Ig;)1P)C*;+O$hnpi zhCGn~DP$oiP>*gQh((=_DCux?h|^00l>MUUF(oORg1e|bX1|Lfhy=}I6us61ik1e@zMa4sbQw>NsmD-_(}Yc z)N^ru$uISVdJP_9;I7~zidGAji|)=(J1@8PehL*Oj-S8Y+1=8$b(A8QFz^`?$$d;A z=nq;Ur2{=8>1se1Fon@aOirUiDkno3Z_cbD^)$DDUJ%)9#$&v6lHSMvC*u2Kr1#}?!m2?gYKq{Dkbu|3>R z1C!rvZ7SZe+Cot{laSu&AZgNE~k-82ZySE@SCK&uU&PG>P0SrnLxU3y$1W4aDgBKQ#ts zQ1Tb(IJo=_h0UPXwFPTSTGS;Uli&yabIXcVERs(`l%{u{RrXrJ79-{zv<-$}X}Zo6 zMU{`naBoed*HoX^fMbNUE6W_eoSaHbvEn!X28clOeB(?DGLqK5aR zVlW3X|4+}?pyUf;*K5J0M!(uH3|!s5Mw>0YVhd zu+SHJ)xbhc4+lIfzfe;XvB5%(4-s!)tfAgcycmA%LV|@l-b${HSm=X8?8jU$2FHfh z9$2W`tzi!rl}#5z8(fz|Sv4=z_3rRwFv2BV3pM`z#rR$CVxgv+7vPFb7U5W^`GMT{ zwNTUVap);&C{AgccYZ;W@`!}xKp!9T7iwI5ib5w1B9ZCXrBP4tgzPC>*}x3Xt^rHhTdp)+F5Gbo%CL;((h|)CHFqJ zI$umzzhSjoMna#-70({V03aIseYiA#@Q2A40qpdnv=W>i+;dq+#^X|7uN!8p-kKb z7FJl_({E+G%RE}GIhtI zt+I~=ppu8;eMffi5I@{R^8=ixJUQKzn@)RsM8yohduJ* zIV^m+?;XxC;p4%XM87ss7ivQ9RUh4DxJ{@Om}(Y&Rvej~pw5fdBDaP8&NSN|XnPHuYg@juEhxl9xm1mx3t+#_fc?4z_UjDTuNMbaMI}L~!t@T&OH5M-MbHtN54V34 zPq9c&%@QQtSQY|VMbp?n?w5#br?k1PQlvmB6AhuBOD7YnH*EDr$Cy5$KI27x(J3t3 zF<6B~dT+9gGD%mkE`6!r)5dA)uYUW>*T4Pc@h?xG{_^zeU!MNvm#6>u%hP{aW&VNb z?)rm7NHl!>)mLwhX4>B%@`kuQx6Qv@#_Z5s_clU)_wTs6 z@srm`|C0?4Zn)5n(c0;Lih1>ol6eFx+#l%KZW(+HqoX3&81{Q@!H-enA0Wo;!}^g+ zF{>S!r@mAcQ8=p}h=zU^1H!~79Xp(8m-+%L0aHa&VAbkOP}Fc9o0KB5PLV*^{Wut& zozK=OhQx)PS+_3|c}%{W@g`gDk?Hl)>(c51d)G+^v;m3VgCW=2%g+#IbizM@TBc?cnASoiZ{B9_x;q1_EGh)GUX;t#E|tt@!W{jA`AjM6bECGCN^|PepJ3iB?R1B+^wktD}{qtqfE#c#=c!jHAeS7 zuG7Ajk+nPs$%UmQ_AIflZN7?o4aai8st$q4wupa3OSl*#@^FR7R*iHCP_M>L{ju;@ z0^>Z)Lr}DR>r0j=fcbOSZl6%aiMg-oz$2aQg2cLykmE9pp^r08ST!t(3)M`BTFNSt z5<#4Uwb~9Q18xfo$jArr-8IMN92xQ&gX!4U6Q+LOp%WZuO(lUp>oiHd6pyeLNx#M- z8l~oPyw90{=$`cZm~G&5TfDR3bQ@)Yv&qb%gv6N5=7jZw=jgZQy5P6Ddb|bu!*G0! z#7kX`Kp++~_9#l1#shDPpT0UR!sl2uSx48dFBJyYZB zv-5DN2CfL5BL7>liezr>O0I2MUb8Z5{@Rhgw!G#A!US73ZMw}3`qXES#Rm}}U_oGu zbVrU&kEA5cx2>Q}?d>YrS^`pEjMRoXxlxqx)SVVjO2G|U`l zOdqzY58nY?tgsu=9xM2-nDxw)$>^oY<4x2fiADi=p8(c}`nAXNz~0 z7UXgBKNEtZ%r;V{q#Krrl^+{#;lAC{=DGTgi21SRH(3Lt>VCUF=!A)3jtb9@zK=%L zVhF2#*Z%ffh9q^8=_d|ziSyn}o*eWHo3)}1IghenG5hlb>4V9D1e-l~?# zu?@LD8IC7px)f*owz&5?JV8+>o`|4V<`ufgW}8%7(!6lS5z93XR#(^r+ZPEQ^ljJ$ z=x2Kprt?_}!BdQ^53(V$VhAscZ$CZS{^doFdIlK>BP>|5NSz$ieZ3N?QAG1R4@z(bK!S?3HtL-faOQ4RbhK6pz zJ>X-^E$3Y~ur;%;cjB75PbqE)%}2TmmYwz#4%4}e*I(`GVr=^ShU~ADwm1vJJM(8q zR3-AITq$?w{awI<%7R)d8=8i3Jc+?OU@CZiIEfF8zViZcSMnjA)B{p*Ribq90gWST z!Hb1>e&b@W;2b$%;;b1j0X*&!HNAYtmjzH!H!ArTLYPZVq}CNqSPfo{zsG*XU>elI z-sDci3RJ1|`y8FR@^@rA5F~Tcm&`bs4aDsceX0_XdOF zHn~wi{FB7sVzxA;I29tnHK%>pXkeGN&sqNtye#~~JU?(7JF~u0b*bSRA749EwhOf} z>bnO&`d8>btVZe^tFgEC1gFW=*BIMdHPx+@+^_frjb3n}q<}+9B_1M0ZZd#(K&y(! z!MzfHN4><Tssd$rX0gQa@7nDs8S$gnfFdLAZ;x(!)^#ID?uPo-e3Y-X-nc zHMdh(y)C@?2jR=aMs%P24)+l0iQNY)0R$e0@o|#Y*4Q}g!AgdxWVY%vm|FrDQ|(!` zBZ0AO%mqp>jp93uk`E%El#~OwF>FJNO%w0u7K+BmcX))%B?1%7)Q<>yN&O|u_zN$L znIjSia_|DQlPZ*r`hS>Wlao|#I)(7J^i&MpEn znwDrqw6)j(s0=C^WS*Nz8Oa^f!s$q=crT4!Ngrq;WYHcI3j&By86~W@ncIee;J^RMxN8mZ79>MlW| zq>Q#R3|~c5`g6ga?w{EsVuWZ!E*zP8$lr(`;MA0&CyO@TGAu=3NTPGL zRlf&c++Tz4;*^8l2oVWYILSMisT!->@PwgbhLYiY!SNZ{h(kLi=9%b}V!|(At!9>) zQtP!MF0lUW4Pj2;r@}h{wRP(=e2&eXuu}2 z=L?=1I%g!sxq4i++`AB01k^B1^y`o?P`$x_Vp!ALurNh(%eKJBz$R!^!mRo^Q=Z`mc=mrTKTJ$djPD2^$nW(pr%_U^jGp)NKZ@;NqpFqdO#L6@SJfqSbe)zBjGv(I zZ-@1-BTfH@Gr!nP>;~IaErCOW$%YA&f2EmA>E;T*rj2I^HZ@7DB@Nl99b))&PY5Y^ ztRFgSsj(_NpENU~7Bz`qr2b6vJay+?ZriT7KIRXE=jQf^``d(l$87X5vR>rd2wn)m z$d+VuNi{~2Qj~Y(A~_u0yRe>_6BW)eX^1hrQ5{;fe(74L1dstA9Jb~;qv|W| z|I;}z2c4@adxB`1E-|thuz^09tCMyVU;{T@Hd&|nuygx*B_Z49t}^)M_EhIzSe;b= zuC!dKS&9m_Em=qz=jRjpgq2+00XyhHC#PcXP{9F~iemd(M!WJ470yV^Nb= zSd?xkLb6qsZ`_F-dp;h3D+zh8xnm4NlmloW2PP3Q{3K&2%eGo5eoI#TH1DU0CP_+Q z!^%BfE*DKKmDH^KK5v}HS<#I4^Ri8Y|9FRQZfz>*;hQ0Yv1lLnj^D&To8X8okRr?C zAlPMz&zgJI#)HWsZ9~8#HeLXneH1ySlNLWJpfSm)NhmfeqZUm9%SmQ$&C%T-HePLh zfBbUehi&M0ZX$}0+Oo%cFZmc-mdR5*D4OAB_#bz+*z#%C^7vqTe|KY(FTToOpd1Vi z3U6=W4X*}IjOHY{ehzO#us3OfKbd%`_-|^Xk-aR7GwniOYrfk2E}q|P|BS@}_mdkM z_D)#ulPSN4F)cUq1hDqktlt;B=01C6D$j*0h0&%dg?k!?Mqynn+YYpRT;8!1zu+Zt z_*A!ilD@e)t>>@{4V*e7EaW-7yuS2V-QXKu_Kb-lzseL^KD7vDXpn;#8^~srx)~V` z(1JP1h0-zKp%&G#&ty*^QG9v6wCr&PsO796POzZ-F!ml~cT#?}zWH`uI(3N|obkk- zht8%JM$OWe%x^iDAcIid|HVHGAPJ9PP9e$r#<<4%uOO5~y)!O|8zcD}nfgc=85{b# z7-br`PyGsYTaG0+yHnLb>+6u^S1)k4!twsb=D%$GejDQb`|W>&|H&?8*9S>Z@%rq1 zY`eY9R*Hz$SB>cGr*mjvz1J{sZ^9!nS2 zx`bQ)!qxJ{cJy6WfH!YxJvVpkQ$5LMIVoc%^HBzk`YlfQ#nP~3#B zG5wuz%y8KM@=H!y`?EHNH2YP)P0U(Ik_>a|tm5XvFch}!lUad{BIXn;WI-dBWIE+= zsF6i~O6LAsWyt^+#Zz@iGD-r9qRlc35-OWUNdN@}&1_%-im#sRN>Jn?d))G&k;&jo znLl-vg(JfTrQ7|k$t5wW=P|fb`*|}fY{RXs4f3FMh4|2{`xbjWAV=N z^c`+R06pc2b=-Ys@?gI=IA|!VUujukosh?qt0f#$lA3MSE7H}H$ux0X+GZ}>r418; zgZJ_`#(?R=j0@8jp&u7wF;0nENj*R31mW+r7q!f^&ia29(?Mn7hiXJaQQh7YhC^(Z zXOn>RqRVla6ialn=&xMEtTM|Ve(Q3`^%s4iX_=CJBSgl5Yy9rmDb}prDvFDR0Ww`?+B$Xfogw84V9{Wn4s%;$LEEB@ z0jr_^1PkBm+2E(_Je#5=0lS>L@&T|6PWr$K7C0gFY*l9N+OI~G-vSO}_92iYk z0I+TZRGvEzXO=0!LzUIU;Ow1lI@!>JrX`#MXV2MMW~2S-~!a#Qq&B6~hBPyA$AtN663Q?3mf`z&W_T`vjOLCuD| zWUuRIET)UvIJhYQ{3q&W?Sm&g5zjqcUymWMbx#A;l78811kO;_FXe(P)3NeJZDZ#( z^^61Jic*5 zz7p$6wBs9G2f{1yc$2!`yCaJMVf}zos%2MI2C4|CJyWO3w2Qq5U30Xk!75z}%M^Vz z4(_ezj>1jx_0JANWm2WbUqZqio)iB3mf5{)8WsUU8n>i<>+wy;Qe55B_|LjQVLv1Qr%HB3E{Ig6+MTVnIyFiK~a>Wc^qNes!oYdp5aj^{4#kDf%7rcOuaLB4HF{y?} zWGU6KxuyvnNW=|RMQgWZmhaZ^Uh1~_DH0nk>!@L{#=vD3LPU7dxS_6_ATT~Y#L93V zPq73ix#Gl$6eX$}sHHS6>M0A?20ii;UxLS??oGT5*w4_;R_@iNVM&kHya(|^waH-& zvdD3PHg2axDgl~{;mbZ~vO6X_IFcu0&#ek?iHtQk>sfhKUY$7aFG(3C8*Fv<0gJ>ii zeICf$T~Hr-i^N9wbRinlf11$ z#PZq>z21ine}(@*sF`@o+<4*9m_uBKK$TSYE-bAXXHGwzq6?m^kd6EF1%r5OI%m%} z9z_!?ZvHKcKfuQ5_jJ+uuk41qX)N%{{{j5?-=quKYLh~txVYnZ{El}Y9b@l@aZt9j z?P6TI!k@T21{;+8>)}%SKgaLlZ($82bK$B&Ec!&^YJov~R+D292Cl>$6}Q+f_o-Co zBH`V{KNlA=_sxM2c?zw|)q?ejr;8LP(M1bt;i2+XxQflXkUK%BMy&9mKNinM!cAI+ z)Q42lW(TQ4#YO)L^cF;te){Z4QH((A3Q(IqC#LZ@6>dB_!i@m#Pw+Zz*fV$9#o|UD zDMM}YvHAD(RAe8c+9T)?+#qY6@wR(C_)<0wwTDY=i>R~bYYe{R_9kjydN%^CS#-|! zsGWhM-(Q_$u|pqcPJ`}0eEn`Xo8RpG{KF+u_kf;ojR3KG7yOWxZd`Ea%?gRs{In!a#EC52`=4zyJQnAC7S;J1+>(lhnQpBwV<4PcHmqt8l?m ze~c&_HzKTBJ+>fv+?5beS)>s6JtTp_8o-sZfg;rrA-vf7u>0moqSnVDZa2l{f8kP0 zf+Pcl#gkytA!bvj74k1zfpE;&bxFSVh7Wq0S}1Q%wdlj$TZgrotsMm>VZ zZOKgyaRpiE^NL$|#mtC3os2K_`c}P2m8@WxPneH8PJg<_5r6D15r+Z1dtpID6lC6O zZ6n>{7`_<3GYnJvf*LbiLh_N3^(uKpNm^P)3c4AYG9fKhJ!;R^Aq zvq`T{jB@LZA4eoX%0P)ZNPmc!+Iz$>ae-^i=d69FTtM{PLLK_?AQC1y=>e?!&=5`@ zvAy$o<5w8Hp5FuZTc}{OC}zikM!|4oV0E-fxS^^jRfP`_@AAZ|_J95HXrucdz3!hM zcYk}l_Ne>z%ay;dTv-i|i7gqTp5+-X`opDqw2IP|dAgnUf0cc)t9CIR}H~+LzIt|1uf7x93jbVh$hP*dO8c-VnZ}jzw?UY zkGjk3gY)yL$u8ya!QBifaW<% zJQ`G>e^3vOO+Fghx%Rh8AO!&)lwVMrc~;p1o*tx>T{J&YxQ{+Kxb9A_BUxEKwmWfc zCsq9*yi2A)4?gVg=}N%EB{H&zrq=K};4*>ERo*L`C2o+%)1%W>hSaHf_0=j*q>yx|qyMi$v zeMk2>w4{OgH}^9P41V{S&15KbrQhAeGxl7l>a2H>>YXfn)c;X(*g>cDfGe$}e81>O z2efUYI3VlYz#825h+GByEiPA`EB=5$1w`Xp=QRT#*e<)=uSWF@|&<1_|lf4^hDWS+b{yVJJY%8*S6_acPct zk#c6Dp0yFyCb#rq>#Aux%|pc?VU^p^e|S&ENT%WwmEAwUC-J5FIT8G{cc0K&8? zK`#qR-g-D{M|iP9daG<{Oi+Gepxk0kss=wkNdj7FI9b*g)C{p@f_XEHt6V(@e4i1& z{FD=5G@TmqJkZr27%-Yqs$#_BDpo5!jv`?;l?Ap2gIWAdlt3AcG?gDTB029)8<;v0 z%sPeGDXqPP`afWSh-{^335V+5qJzy4P@9)=m`u1H4AbiiK%olx*MY*6eGL@iE|myD z%E7M#hdUh^AR(6)b|SJ{>a|tLy8<=6D63#FOh{B{%my{JKxP4#rh$ay4cNsK_Q}qY zxT6fc)TW&f6-7vvvY2J6xr7_hI&hPH6n^7dfli;xpH25dDlctZT%_J%0a$>mt*yIQ zzG>P{MR1|3f!Mm>JNu->eun;usszqI^oSs!b?_Qj%Z4Vt9A3{lngm{Ol_~wkWUs+|%aX%NM&lo3GH|A8H%e z?cj%K@Q<|(_MRW^?QXx?W{ZEyS{PW{Tj7*d+V;0uTZiWmJK=tW^GP_YnSs3X!#*J1 zd3Buj_9Vy3?)JvPOF5JIBu9ylv$4CgL5QCKEr#^xJFi~sZ0~LzzxwxmA}ov^Uih`7 zah~DT*3RL^^IaVgh)mUmCq#)+2&=6X#Nbbd16;G42(vAWBg8b8b0NI~Ti>szK7-yKD^&MA6}~kw`JW zR;#|RgUU69e#Ke9@!z#N_1H1=p$sw>Vv-vg2%xW;CZL0o=;=Hv{L%cmY$7thk_QAm}!z^ja)zQVm-PJaMd=iTX8$Jc88vU0!jQ|NoF{My^CqFX-tr8 z^Q+(_7HG9M8uoK^JTjKTI{tkP)EW$nFA2>^gxI%&!9|O^v zw|YfSJ~p4%4UcKtBEa+TDqN1!0#aRag(U2_gSvybMuqZRlAb9ZWj18eLzPZclhuL4=uUg^r*p;nm7!?x>&Zz{qvT3 z5F&kGDP&;pD`-#brw5@N5mq;8K2R4ULvtQmSRqgr2yY8FG3gr6@lgW5uc{pK{cMe)&{teKAAJ8sMXhGyG zrEm^WkvIZK&>29w*X)n;-UrRE0UVlLh13ilHb}BR>e+EL)>Ch6Xck6yEW=*CxrH*v z8cXTAJ%n@zH=8*^h6 zG-Npg2ca6u3b4$XzXi8K)Ar_gbaHXcv^YSzHs?zpSE66x`{aXg_|fRrW;I6lb)Z^o zyCn%(h4}M4n_tj(Ac$?fZRc);p!fgn z{sk8>hQ)Nlu)6zKE|7|{qwpN2I9UtwxRaW$A!X0cme5GG<>p=o?Dn~<5*?EE)7K>7 ziMx@qLUZ8Ql58FvUj>?N?kmiHIKW}jct`o09Xg1pxw3I~hU7Zbpm^BIsv9oRy+-jn z1|B?=4kU*7v^>W?0G@>?xIBwda8@Rie?}sa>E|~)h(0H>jPsYX;fY3C7zoz2;u7O8 zIKi%o`*yaJELpy0`?qNiqL1`}FvpWW8h%1=oP zg{o*!LWq6QBy`BYvxU)2jl| zvST-C97EtuMyZ*c>epmSw@=zy=u(H{V#O6ZAn$qVS0sWYD_C3pM@m7x0*p`?3aR%I zzhS?0$r-BUbS}x%CE!as zNQQ=BQ-sjIg^Ps0j<0(CI)n7E^-qWkz=^_=X?eYsjUio0@BFLiQ{#f%2n{ID<|AQ4 zCVi(;RR;NW)^p>se4`9OsYTF zH$?^QgHR6dO||qX^d0_Lx*CuUb^ZInNF7edPU2WyjUfm(nXjd%WRo^Rz^n zjo)W2LwzRMipXBU_pyg_9k-(DKIM!c<3b6Z>Q(;0oQ#6{l2*ZI7GBhy0Tw**f8un* z+V%utR~A&4pzi^&*fB~ZId8VI4ErwVMoN1(CbE^}{Ul0-j4Wc~qgpW9dSV$Wk(R;~gu*%v^HKW|kT?&IwxzN+8tk14 zGDZD^Otwt`-&e!j_=C9-B&h=nv;{945r;t!C6_`JK#zP_H=X>f%!b1jSKX z153I{COn64kTE{EjcqD(E(xIX&RL^C)nb6oqYXkyvXRpOEzIooU{ZI3i}Pg)QQWLZ zxZT)Pdom_XxY%cHTl{S|LgVOT4n*K{mtRkh5Uwd9Nu-G4Mqrq%kG@^O0|R0xZC+4 zZHG;FIhbAvxg~w|8B#}I=%eDCg&By(PZIC__z+PT@8njuWZp+0jyg(-%Nx`umjbG` zeF^UsU0@Y()ED_0{vQ1#2BItgz|X{ud}Vj9gHqucqy|n1>(8T@gC>aOO1m72PU1x2 z5lVh+fTY;e+U!Vr=zVUkEu+mPK0H-M6_8K9h?yrNd+O>GGiCBv7>QYuQ zEg8w!G^k{ar0cP_)P-4<@&_r5@|JZSt2!ZNzknVGMnr`e;?gywR|eB(?k_DUJ@w5$QEr42s%RoT5z_aw!4ZRAs(H?(3qg)t zwnVpNO!aF?E47?Sy>W^J;ov2&ucz@%+7vYe*1GBvy8nWvrD{=gvc8_>F?&9PDH2I3 zOC#GYN4*WWZ*4CF(aC}{X^=Rkj&ZRMFb#e=v$g$ z2N_hpqQoe@J?K|P;VxBM4o*g9-BDL#icW!w~P;xE;EOm~!N zuFkFJomivPo-{EV=Ijur9~qLHzd{|RQtvCnG34s%dfWf#;|!pV$f?Ff*quwL+S!|I5O!asn15{Hi_SA~_4Ix#+s zsUThy(rP8bA?LaISaMauvCx=vddqS{Ix$*MKI#jkg~dk%&c3O}ZWQWlZu^SKL zzj#6Og_Zz+AaWX<{0P!#;fwz91IDe6?7-q%S?b)c$6UpBoy)A)x);I$)4Bw-KFKK& zVNEm?Tx44_^PDGinVar((dI%8g;qtS@BwXcorMguW z2SJl;(75&sTBbNAks@0G$oebMzNpGFxWlMXZ%2?crZXL+R|yvV3$S25$Aho)G0&PH z`NHtq!s~9*m%!kJ{zH?p1;lRL6euB}#<@QE&R|5fvt2IFFsMzn%6GnO_-I*m6B=M9 zkE|T&-svf5lI>pE8}5KNJ@>EXZf^W`yg zOAx0l(Ez^?t!6O&sBTDtf&qE$@jEP4-wS!G7$zSje9=4vzHdQ4G5nty@Y^7xv-4nK z%&E**NbWouH*@O{Tb-Sv$IwuHZ7=?hB6Gx}RxL>N!&G!LmT2y63Cyrq(}EG5&y_zu z$0o=IZ8Qu&@sb`CphSs7IqlG&%6{0^7)s}6SBiwP`dDrs#-j7VJrrm8SL&$gVDP@P zqU~hU&2&c4weXc0?~*>?gz$j2w$@YHaDVg*Rd%YJZLAvU;C`~I!~mLoFDf=TKl=8y zW?mU|;bjK%Js~=^!Gh}FPkLA9IW|8A63}N0j*8E=7QgVia9UOzaOw8txR1i@Bm6J1 zElQj}WEp)x4;OcR;>MJC#+K`qWCJ!VT`caT9}8qpK#Sz(QxB4dQ+!oxlg#MIGZiu& zUE2VYcZXHxBwQ)tXSA&Ss{0Iybb6Lirmuv{keB=@`4s-lRgWp=yF-~zXQe+l!3Fev z`;EC@pprXph~x_%DG^tM%NRMyBwqpYZt)=m<1TnH_s?@taCeS~WH3&(Q^y$E4k@=m zu*^pJ3)562w@?wF`YSUb^n6yvEPEbJ+CbjO_9(y%Qn^Dww~>p3f&ZjaX?j?mSI^c!K?a93j5;lp@+rKTF%NPb_U z^$qeyurgW)G2y9 zj!kNGSSFz6!zbB?PwYc*uKz1%B~U!w8+|`KJI4{*&X(Jh!n_1%I8Ae%%86;-SOuzY zT3;2mU1_mPGluTyvIT1&$6@5gP$0HK1e2o|5=;vyT?O?Ll$L&i%Uxua(nz{WcvH$P z*f79wY{-%1drG-(IunN_{w!*idfo|oL_;X*Yd);AW$r5_AhP60h6>kjNgMESIP+5T z8f+h@P?I_&VAP z4SkpOKN&x8EgVn za@7%i51IQ(!+?uqA*mk&0_!HIYf@bw^FAz-i_in#gdgEGZAMCMwDN^W`WU+e1~UFY zQ71|m|CO^gC52B95im=2l__f#a*i7Aw6A2}@}iHhTsuJ1U@CN->wJUjF(*7hoOSIl zVcohSE6U@WI0ad0>tN`DoWF#x(B)$+#p7=*(50z#lD^TBYVwlkO(v%&0rg~K=*Taj zdLUmEt5UhDiB0)DE+(h|Gw0MzRjtYQmxLy<>W~y&wOgY=^+tDvQ#L)L&y`6Cl!b51 zyuemqj$-VnYP6*%fg8RgxrMdjqg+-fLJwB*w?UC8yJUQtG~Lw&t_W4yfeR5Z9v@p{ zvQ*_E?@l#w%VbIlEXtG0C&I@$U`CPz+wrSN-;(-S8ytpHY&UR$zfQzKF5r7L-jfig zhJz>_qGvfOxyv;qHy6ayL-%D4%5*ThzS_}ZX|gY=dRxH>HmL9zN+t>IM6N8`!xQ&y zvs)BEwc9)slVq~?1~Ls-6>2ySC-1?C2jj7y6WBMO;a5o$u`=iPoK*ulMNBs31W<~y zSbRV>h>~M3wFSY`%bNhf@pP(fI9cjYQc!z6fvZX~J;9b_EohV5N6g2wdEkZ?Q4}?4 z1kmN5nwnls$`ItlEjEtnsfSeX*(S53AP=0Tn1}-cmetcrc;CR=FAQIOeFjd%n$%@u9s?*NHBX;M53yd zOZXEWLs+s%f3z5yVxo@{xGVZtCZ#Z*wVb2KTfu3s(X{866BE;~;*&^hJ)Z3SLOs;>86Jjt z62~FZ5<3VD#O85zmO@PKXv@WEeSK?tbBEWkdidn+ zLmU#8tt)422XiXfv`&KzoREDHU?QV9;vG)&AnbA2vl6sd7P4{?G7F6s*mfHcprRX_ zo}@IdGa@BvdC{ACsbNu<35O@G5-GCI3R@Krxog4ED*3!SX;EDsWv^S`aK$O}1lFQS ztoEu%*~Ki9=zSoxyO#}XdeK(Kvk&Z2WMw-K|L9@D{Mk{~TWpB{!P_IPOyco32HD;+ z;U`W;ci67RSI)+vgXm5Mv9muatNnz4ekET}_R-f^h<+Va5t5V(z zB;{9}7JU*>7m!J;CGk`6hy$Yk&=8I_9iwD7snj!UtussQi8(`|p9E&tW|(Y{Cdz4K zO2M8or@;gN!tH~+6z$Zk0WNS)<;JMLqYLA}xuRdw}bdPx@P9Mf#7!$88QGp*;-y)(p8NH-lRB#eN3sw=DY zwXGnD>0wh-)6}hVr7G1qG`8;QjBdN&7lS4!*BQ)FtOa-#oC+IgpJu-+E|cl9Kr0eH z(aH8&ibYU05nslpyJl7qCRrI>U*awIRWF{zzmaprn>%!_07I2vz$PiH@64Z#z7PHA zrl@yC3im399?OtTNeTRj=IQ#I>`nk~c!_X0<+aEN3)G z+wEatYIKWM5NAhOTuqY_(&!o3veF3nvbqo}vPDvX!T}Ppf!u0}h%AoI{Ybh5oQKko zhB&Hm*Q~J-$Q+x<>`U@$85$eN#sP3x9}$lNhYS~fVGb)&tw+Lc00X)Q*O&Xu+>^KG z2CBEQQekG*$%M?!?RIrGN+0pscx@PjtY8r_s*WSDAI&O1y2XATa9Jq#V9Ro%8yK~y9y&i(3o2{lM{pIK_qxe?znm4NWd02oj1at4o7{m zG5e6)j-8?94t8;v`*WGtydXg9E)tEBY*{<4vJ+gkZw8}BzZsJ-PsL4Z{wXGdmO<6v zZyPUs4+iDG%EHD(E_(Zvy$;qo+`9^UOYXqBWc8w8C(0dYpc;-;@rf;4Dag z*~g33Hi#BXE?wFR;cd3Y&&DsQkBUJfykT>+0Lz{HTanxFok3CVkkYj+oio#|)Gujg zS;Adp3KMS)&)N^Ahmf*jc5d~8=6W>{&Ny_@w`g$Jh$<3yH)ZO)d6H%5DNDkZ*G+DrG2o+-xBFP)3sx^ieVdy$Z~yGMNk& zoIoKx%rs^M8~F2gAVv}f$85Q<)6aYni-%!Z=kN3)zAdHFu9{!sP9pdA{rvqGrAMt5 zp3^xdRWg}iR4}$fuNv14yr|?~1RF|=#t)owB(KgkF{2d&E?+EYSiugos4J(eRBs64 z3fI;w5qc8?!I}s`@_^upgeA}N>=2niIfkwZQ#V{X$(zCDHYQ7M8EoLQqy|lMCqBt6 zg~@Mfq!CJRDxb#Q}94Mw?e<`m*;AwwMe+wd1x8(G7x9=-tmKUEHBZlc(oCd;5 zDl%@O_nM{#J1~keam91!WP_Bh3%}0HTy(D}o-N@XohY&f69fpmh-rejMbH-!MW#Zf zSskI5R5WE^_9lBteif#S>c+o9NgRF|4X~Aq!%0IaZe}r(C~?|hFsU3cab{%9io&dQ zWhz6Na0kg##HsC;a|sl>O5Y9JT7hk4ibZ5aWJ$Wur;7p1$YuzVpd?SY@srF72cBK! zO_$lLkf)*{%`1rMpkKjv#A`O9sImgB&DlBGs@{&|B;ys6=OnVe0;F|eG&tNT;5k~8 z!{kJ1{*oM>e5^W574qU(Um54R0xCpBDM-48bZdg>IW&dT;wKrIHk|m-@QHR!0f{0k zTw>CTF%=v(32bVrIhAZqUB4041|_iK5*p8MNzd_dax^j3CQuoXM8H^W;L8M9wm1|Bgj)QwKi78B^}a(5=?Szl}%}rCOZ#l^n=1c zJGRK2aG9Y#ouBBO3rXry=@C@@-zZdJ)H*d~FGJ*#P}JD`BLE| zvGoHnm@&P3<*J*L{0a2085}F}&~|K+N6+OB0 znFOBs$1XGlblB|@_qGYH)=##(lAUe`pVzVL5SDC}@%z~75@7$pp0i`&CTD$GRR5bN z|7tC)Glyv6xDmpA3Gv-T9ppIlPAT{SJ&v@MVfHv+%}XBWH!>QvO5EU3&||U-2etsS zN?F89F>0C9VP~pPohCL^ION`$Xk%nrJ7h8Yrt#;uaaE zu%jj+9u9s+HeXBbd2Pvy!N~xp?s2;SZ~c~Ag7KYp{GXsWt_E$L&t_NC^+%7+aGTTh zyEVLj~@WhZW3nef+?~UHGrw0HGS^R952OG{Y= zhB!9Vm^}!7Gm^{Gb8H4D#oiX}v5Z^#4I8AtAzpQ?Vj`V4=9FJym<`&s~qe|HBX z+0TV4<#Cc$@8o1W>04rzNYmwTG`zgN?6Un3Ch7+Fh0PF3KEpUI{5@!W6XXkf!&lR_ zv+?*0d%P60{-fFWYIqW)tlJ-acyxUB)yCmq=f%b3~4cyjirKR$VcgNDNs#OfZ+Fg&I-J;xytz_)hU*FI0L zC#)AD`UF#SPFY(Pr$jX~d}h#39+WB(q0)U5hxE{-v9$O0nR;S@yQCN&QXQY9FjIvm zT0#zjqPju)hzCxS2PrFOFWkGxbxe{#P1!DLzNO|MKZXk9n2tnS=}Ez#fIV2I1Pf$nJvH#LyW=!XH4%3ojgQJ=>k zQ60pMWPNO>CBlL}9V+yapUPgj9(niqi%N(%Oe)cJ{!Cp!3)LhDsNHV26YX3T>W)N; zvf3}g20iwKGPrA~OnSQ4CR)Q8T(ASvJErWu8cD z=0!_?>RDTlj?#=`Wq3vMZNh})le(KwzyQI+Q-uzwuDXq!0CPy@_|JW$yPPV8Q0vQ6Mcfdt}o>bh6Ln6pb{7#dE^1cb!86 zxVG>uO}O*0ZYZe@_h)}Cz7AY)7q-rLP_mj)dTCLX2Jx2T*V@p1f5C~AsK0r_)KpjF4JYOhZgibc<9Uzn7O!Lk z{wp^QVP4_cW;mFsInN0ow_M6oH&32-1i+k`{NIw(Hz2z~KN7ixwMh=@I)!YKCQUdj z73C@nfVK%|f-Rfcm|lI$0}F-XFNWr95&(nzreoTQL&R1a0KD3kM{bpPimRc8F#+xs zXlzmger;!w7Ll~6))D_FJkWKX&canwCu*q_vx)LT5{5*EEDeKxU{zDmv0F?rKra~r zBvmaE5DU$SF$nwwdPbUfbBJl2r9YGz+7IdmMEZgfllj^^N>O-`%(PG+GH8YLS&X&< zg9yG$>))g_n*`Y8OpeuR24QyNB#rpAiOjFXt%us0=kG^-AJL^s%>9-7^kEVjr<&5j z#r2-{q8dM=y>F4*^1(cryfUzHw46!_oRqpKioaB?^KfnVSzH|L-{I7Y%^jK`+qqH# zxTtY>wur<~b)rPjzf%X&QVR72KNg0FUmIrA&vz9k>_t$k-`Z16WU#MfAeZ}^Wk>d< z9<{PbIy7mi9yE1UqkFzeL7L5Im zKaMWOz5ZYVHB=kRGo=^m$7yZC!<);~@#yBwCbuj`2=l&q0as%%vHzem`-iP%ARId% z8UfsxoSb9VV=D|B_7Ps-DuDPHn8Cj?vemcGnlB^{a^jgmr(vtcVSmfF)!X%1;gSS3}G6H$OzOxo2WZw)ZrK^e){8J@(#OA zmem*Ee4IeDZ%-yjvTP%s-P-6x)qd2*|GvXcWqd358`k1jDA$z^?kO%57()XFdNsyuztBNJ6K*W}}8p z*|jzlGZiw+E3B>ICza9Q0(CU zOJ+HuDPT;c`!xZa6CeD1`3G~Y)HR&ZpX$6_FnQa*c)hd}K9_xs1M4|b3DH(q_upZL$t%NKjc+yC}z`z7n-;32vc zE*H~XogF58f*o{rSUMFU=m&)bC`!LS0CT|l0|PKD_zaBad(-#?qsJ@>-HWE|CuP~% z|Mf@Njr|S@6`k+aKYsl9W^MI5{pgKs`gV@~_~`AItB=Be!EV2x9_;G7-o?eE&f1r& zD}Ncn3m}O2-%Hv#Q4h!~!y~BYw(s}$u7+z7o<~d$nTiJ1uZ~dLTy*l9b#wI89^kPx z`AVM1&{W;-E7ak_8C|rUk+`lMarRjlG0)=B+Lv$EI*uJ6^Ud1XpI5*8--{iP6H}Bd z9Ayy32G(PVmIqtmkSiVA$DfSMh+vY6+CM+P1XX9fFZ|SgN3x2(2sA24RSSy-*=I+9JxwIq&+!wdGGAK+1U#-DDDDy zJsVzNk?pHEkU{?G>e|=OKi~k;nOp?mys|RH1qR^#Gs zq(fiPA{h%k#wfEvSK>a+zDcHv%o|3>6uKOMhu~nJb4!*sx{AeUQpqMpQifwZlj)k5 zTy&RpU$cPX*Kv-m@7AR@LL8l$xIv7|iAmug;#Q%DHzk^FytL1^{vQ;y(5HvX37Z2ZaE zQn&RlI52fnBBc)8tq@+q$`$n-9=76>AXphp!asV$B~0CHd@=qwz(vCR81yzyia<|s zogiLGy|MW84mgGOi6GfH^I@Qs_TBUfiVYlbMq~LLgso-Sv@tom=BdjNkm*bz?W5Ug zr~P{LegtH-;v|@!IaqIfFTen`(7YX2W5Wa5UI=xD~eh z8A`EK42IS8A}qGlHmbmDa#X>6Lf$Q|OJQ2?J66LmIFXD3HwfD;7dLGwW@v%X>NIrA zDsoOE-H6%*&fW3Z@T4jLOYJCzt>rJK%h)tTj`0^$5rb4Ln5BQx8yV;=ITe7)jSdMu zX+K;7*^b2&!$}Ivjg@ios}W$ds!n&Q5S-X+E-DpS@rKPZK|$_K$Y{d}{!UF0_%K-2 zn&(P`>;*3T%6_jqBd1THNT=dfkfX%x>4vJHB;_?Uq}bFoqwP|LgtoQrGM__MGjSM^ zF#V~!r!FVNpS1Onsx3uygCrw%Ji~R1*4M(Swq6V_ui<;0_dX1m(5|i)lE^t=Yl_q-{(;O8F# zN@Xc#xWm%yn@9eU;w>T!{>6^&0;h`Irj7~N4u|(H>!mt1TxW576m+A^6s4Yck9|gK z7qodQfIQSs$_ChLR015OpzhOr>$Z*d``EAK}FN~Y3?|0$0d;#s_?O0Pa)>Gz&s;{!#$ji#f+we zNH&4|131s3jEYtkoe0|7J5vnNebdkQTQt9e-JmV1rkTibAO;iMF(6qQ%sVz7tp_a9 zApKZ(x~d<;HVYAMoidzoRRYbvCUMcYay0;|a%FZWL+_^xmi1DK*vx6SjY4d!O@MM=cKkR-C=h(wBMPC3p+)#rzHy zTiq{oPBjn#$jl;Uo3hJXM9L(;pm;Vnv}U~j#{L^9UG%YkaeX!%z0v<{BZFjygJ&5y z-eNLf*vNTDniehP88kFdh-8S#o8ouTx)S@#MwPb*gG-#cjM1vVc76meg$SO`@X{(W zP3uA=;PDupwh*G1vzCfR!?Wxp-sChtgBLx?tl0@OKe8uzJP8)miUzsRR9%F*Aw=Z| zt*JOXd)O+_3O9;mi+IO?T<<(=3D4j=0vH~aI7R;6DVH4jNyK#)H%wMgYOgABNzGzF zKLL|w*{Z;m@CGBOfCxMms4RhnNnuP?2aBd8QicE|ziQ*12AHEo@dMTpM^vY$@0bjb z{DuQ^vNL^&lkPZ=Ke@@a`Q-yP(ArobB}<w_wy8Yf?^9Q z8n;q|VTD_#kipv)jZ*JKJO%Ju`T64d89fpq$x=-g*S3Wo-EyXuHizcgJOO=%9622L zwUdenNnB#-#MCZsGjqp&g8eLvH;k@whab&#PvZ?diZ}{P}<#I1s9eO-n{^pUi zXm!59S!D(ctBqekOmrQ9yfmJE#zIuS^eo6}CKu@;f#8Y0#&f!rURYeW&2>>~ z75@3DuC66<&4^@E?2lcYrpqW=Ag~F(Bp-z3QwaB@>n4{*=GNVwd_n}*W4Ems!LYPR0 zLDJlrq@$QJ^Znl8D;uZk5TFC<1IQFXbmkU=)k$59_4WOO?c*0ayW7WGdq2J0-P_m# zmUMow0>oG{IEG7fb74?)xg#rz;thfn=8Is;H4upytG0l+G6?uE^a-O2ds=G8bh0*;&+MWLy6&`)xYCm~6p#3f4O zYymB9!ikI{D8^fIj}4=sM)w(E>jbtf*d+lJf7SuW50YT*D_$ALjrKjMngf*%9GBs% z(5TeIcAEaN#*tG+*#Z$B3`d?vkiN1lCMMxMZ2ji(Q~u9a{GYFRxL$~17>Slv17L|H z5V?z|R6E+SMGo0Sr5+BDW*1fx14Sh!;|aSY#5Gjz^Ss-z77kT@%>k@~P zo>R?D&hw1ToDGv*k*1ta96y{~V7DeK3NuBxS|WrnWzN@Y*!p9E;TBWLS<$7vgwK#5 zqH3ADDa^N&>Md61NW|E?_(wq4DqoDzqfSz-~(({?1ES;4T+U*|L2EPB1#>S7#TEY#b9&p zNcQ90#sAVUI5NMrun!1XM;MYZg^pf0b{_&Y9)z3E$w_k4jur1sfA|N#~ zmUyW1V5Q4yBK81_0UY~*nmd+LUpUo-UH8#+igh+^uU4_mlRY)1S+hJ7(@`bIzoXop z>}zV#anYjIyPoorLS5+&lkh<6!?357?o9nVP64-Rm*EFgENX=%L@LXT6Za{@2|YuR z4aC~|+20RQ&TiVmfB3U5yt}Wfxb2?@C)Y@-Et<@YU(XK@YfO|YArA!u3iogk z33eL(cruMoiR_6=-wK?t!x9+z8~(gM?7kkI+CWKGvTGSokd(O>QU% z+Pjp4PYQq-KuF-m(aF*F2niqnoyG8Okwe}ZJSL7K#qEiDUk4u?Y?@;QX zw!U~0-=Cs_;(2(*QI!H!*QV9l1OW7GAp4j+Fcm=D#K8<%jDUBqM|!=wEOu6z(S>jT z+LK3sJN(DyMMuO`wI@#cs|v5KuMegtJtPB4G;+>sA}=kSjba7KG=PxRqEuWrWu}<0Z>fHmcz0M=&3hD|_Z$Yzh;_E9E^a5#C;IcY0v2S_d0nXoIe)PH|9 zCZdK+j#i2~c~9OWL0*jKJ}5i83D#9cj&Bd(P2$Y#7W@xjh$xcLQdugThH7qTMc4$> zp$kkb??SH06ShStEp1kIls2qiDfGv$H7j9XX&&}8Ly8JGu<|M-R2b5TXIO&YEB}3h z4idlLj#3LH;5zX*)dEf>cSG1Tk16S-99mGBC08ja!x;*> zUQJ`g)|$N(u!yjcWR(bulz0cz%~L)MC{p`S?F9|wg6cZb)Sb(SLuyKr6V4SLRcCzK z?aq2<(^MNSuHlFWDC(*0Xa!)T+QHFB{}FX_3pC9#^(ZoqA%6w0Z~g zg*9na^33hBimBc0K+>-$l4|W_^;I%14vf#>jd!~U|DFskdeH3MF6y(RF2wsmzbg*V zx1%u(G^uPc-ppBwR>S+Q=zZdR?piaZE1Ct;L`36lZb`BRv+Q*iV*|}nHDgbXut?xK zuEg{pwb~$fIXL@+^@yMWUNel|OwPwg*Fn6oMNg1nmTHymL75`p$}Onm-&cFPPEu?Dz*W|J+Sp`&OjeEu6vWj-M9AY1BTW!ZLr()+;ZCTmh4GqVOWh`nlBJD@)QV()DV35Qe2TKqdHy1x=`tb z1^XxTpAbxUyNkM?@H6DvWrIVueYjH0U1v>6Fm-!qdFSATpLpBFB$JZpZX3p6IpT(+Bk?0WfJ<8jONFX=eAZ@7xfZAe%Lxe&2;$f%O94R zy8K~?wHr1eAfULVjTfL;N`pm~iVMi6ABS91#8n=ys-3>qayptUv857#VN}|VZXS*v zet6h_*hUS0Wjn5grVn)~guVao-hSt46o@Xhzf%|Igf~RAZ`$jQft-~C)5{hbZ%bd& zFQ)jSFTe!z8~$ORPG3*B7((B~C10sTfNbucL|UH^^-cZt#WWGG{MiAkO3_aWu2K%4@o#W}U)jLI+ ztIXVx1X^O{p_;HDfz0MRbS(!6g$*fNzV(amY#~y$l{V(4ijwgHd>B!$ap6`U#h?%v zM3p#HqF5^L(67a)=FCTB{b0})q|kL2#9_132`h5B89K;`y7sf26eh!MsT!ee2akW*)eKrT;L!->>EmF{1F#! zbbpc3B0sNw$Llv%R;Bm~%dpvpU_9?bJRx<~ltOYsvp|stD+E#-yF00;kPV?8mJ(3( zEjDzq46{%JmWqlcwR#U^8guph9X8NVC2vN^R-u>ws-lxQ;bV%5m zmA_m@WDKUL?oE~8KJd3VNoJ>fxo`}TxbAZjXAXTBlmmU{#HJK?2-ocAf!Ywx!EG|S z@&@z_sTs&1*zMHu3DgQsT$oVL$bpj_bJY!=WO$&*@__P>n$c}Dt>T)j-Q3BCoM?@` z2*HdKAweJHG?o5V>wX(Cg^UZ33YcGkBD{EqRobQo03dd^GROiwFUSOjg3sfCC8YV- zMVk$xT~4yXL~~^%*HgDiLBd$~%Gcm*mw|*vLDe=R+%%K>3AbR%SgV2|@?;b<6Bsd~ z5Z(uS@SI4H^92gPPMG&u#sAAOU8>jpR1pEs#(XBxs0Siy@^t%+&}?o|Y;5 z1zLL*waVIS0Y)Ghe}8}dZfksrz{~Vta5nha{UTkJ!z{%5Wm1;vyH&BG>*>HpkKYP+(KKU!3G9+|?-AXk_)@5!W*s*U14s7ck~>qGt}CLi2xeh2 zi)~aGT*+D+lVJLA8rHf*vY=g6)8CUo6MoB%5BapwMFxGToQDVmo}tPLquU2=Jkh~y zoc@yT7WJQN6pDC37vnRy0&8nxN5F{K3i(z~7pyOT@x?hD{V%@gjZpamr4h(Fb3lR! znsrZ-XKQey)(3sv%`I+_-!QRH4fz=u>fF^w`Dz#Ii(-Dk1w(3ji0Hc^XE~-qX-Bqj zq3&A89>gumTC}HfWnGk079gL#Zd-J@^jXu^1=lA`+YM9Q($OxI($y1nRT2Iz0vq?t z5?uGUzTe*1`Ygmq*nwT$g%=ztg|#-WRAXC%kGi!xkU|kyD6IfKHQbAf0cy;NcGG*- zU<_EdcprOw(Btw3-Yiu(^O4hXV;0{-nIx&&96r-3wV@O0r}mpSVrMj%iJLgiho=ZT zTCWe2O3D72Xng;HVUgs_6Cj;9is%qdHawCDxDREaU7G;CJWdilY5i8jM=tmveogm7 z>o)V4rqo(`L|!l;vHrqaB}UozC**i#heHV|JhNMKmkNa3@vLbvX>fa%`NZf; zuFORutc{)BEc)OHP%w$_S)`LGGNX#qK;SezzaV@aF%=SLkTMpl!J{>~S0R+Wb0%pS zhbyPAwYGK+wl`nx9sK+8;r9NWk5i~bl&t8!B=^gXLia05oiEzw>X7HJcXqcl z+8%rY2Bp9YtuB*}Fi?S+5U!8`McSZo<~GzFUY{9ZQ~N$I+~nW@Lt1mwT*4&1R50wc zmhDN<^&UMQ6uCK{pq7ptil}7nW&^7}L72;G{c^4V=IqZ*<@Kua?a4b?14MM7$*H!8 z&q#desE^XtPkchbGs4Oqq498SNHWgD*4K}J`wxPbQ`x=3+9t3P(5K%%3`RnKlSTfr zboOVYow1}*(jQ)&+SAyNO|Ui^3J09?mHggnUX1OUC7hnBU0LUF%J-T6{keMlvlK3M zs%q5l&ua8(nJJ3arRMykTt}`?!5@vnir1ha!wd6T8L=92I`DmMJOU>pvh=}Qd$C9X zAPEc1^E1nUlrSp|wk)_C=ObzpGrE1HFjtezlkj^~B_ci!NHOi}D=a3}Lt)nCr%#AS z?c5tu^e`sy*PNlP(Ti)N?=_$9e)wD!+o!O(?DkR@BP7N(;+%vx5L2ibJZln#Nqpy4 z{(CNIB!>@DksS;CHBJ=6FxSUcau7QFl|ApCF3od{FT`94FG1-rVo#r0F3ft`6j%Ix73nOEs;ILq&tFZaekc;EA|9v4oV1nldh5Og+sg zR%_uiayl!wFku9%u9(TLXV!{`HRW6+%|r^gU}9MhSmo<&FyegmE?$e978zRoGAa+< zEs`}6U$Y?(=o1^^NV>hyqx&AP@rSobMMMq>9t!uetnexF$NHQ+!13z2RtRBwj)S0s zDXz&*kIkes;>87rNh^&*L6JFNm^#}lOK*Z^s~H@O(Gmt$|i&2awylpIgoc6{|EWDe)w?mqzD7HHR$xYdZTh)O$C|%Yr>3M z;`Wt=w>8u-o=D6_PoyE_I~$&WHe(3cPuQY@wXx=8_I;T2;m=@VO&e=poiiDyJw2HW zuc+SJxB-Y0i6`75Cm>wn$KLpmjS5dN3!|_N10QZU`CFIDvX)JpqvnDH``a4_Aup31 zaQibbbgMU$V^bU`wY_Yp3g$L7L}_Mg`8r^_oR)=jSj9yBK`XmqSkAG@Yn>5+j7Zf7 z?}n&L1t$D}OQpgGs}dNp?s5J&$e?(ga3wJuZ_PnkkXM4Sg}hDd%|5b+a1N*E`<P7JhVfmb{eW6lWJ<{O~4JRm7lgBnHF99`4Xq3OM+H{DQ&+`EG6h# zYiFisqp`0#W6pfisU+Uo;dE6mo2U=6A&1kF1n+m(!;60MrV6S`f?=Mh@u{KO2>C== zGU)bR5QdYP8yK>73fIVib04Q~Mciy}OvJ`DLkNRPHJ6BA)?%7U4c&A! zQBrt7p`a*WlXZZ46xb^ejLLoK!qMFO7E=(8vIW)*y|Up^o2}&bcWew(x}Dm_$YG)~ z^pT8%OXHy|+i%|rchr8xYJuASY;3(FDO&i@9`k1#mmh@zmAx<%0K_@73#9G8CnjXR z)Hy(5Bj)COTGgr;(j<0u$#iR4%4SJSu5!NnzryqaK$GwG(6f_z41a>uUz z9@VftG#g6{TZ19kd9nm|L6A%Y!IUeMdj|>0NeM1QfcyeODh@byXhn#Ru?{-6N0uo- zl3EHSJ-|fuA_^L~O@)r}l(=dUU&)NUOD{w)EG0mOsnm>xF_aP_ z#~Oq0)G%eCk9>%BB89Z4%1;SW?EP(62^TAfBqMhVwVOnkO^)U2n;^E<=^-{LFMD>{ zmwau{k8l;V)U$N{Za-Oj%wtEPMfRo04Q{f&=;JoZq#N2qIWXLPMo@SH1*O-logLYi zC7Fp;yw2C)=sp`k;2?VTJ3?C1G>m1i<12bCc&2USyeJ#q7WRD7xO{0I30ad3%1+PjIe#w5@ zex6J8wZ047Z)aJ_(h!a~du?{q<_qy=aTK!deNTK{4r4Bl@xzfwow_{EBlhg5O+SgE z*pvEri5}Dh09ACK2qUe^u>nXZQbWJ?PCPSrgG z0rWRhq9GUhN7>!>ZZLU2kk}MbP)Mjh6QYrnD9k<4WMKTEuo9^aenlj$bnTP{5WKMT zl`Q-CxxHo5iSZ4GdCSw@HbMP@vrpRV!bw{3Pi^x8MqWgDzUfSjQ$V9*H_Q!h0-*Xg zn-plqxH*=OF9*29E77g!L%_-ma6Nu0Uy5M<#nCX~3LZIK!w>(={QrbebcM-IOeokV zO-tIR`4UbXL8lVrG1jClq@D1qTWKw=*f*)mFCuw!?x;*=4%vZe2N~T`;*(Oee8agR z`DAc$y1uTCP*c=V*L68yiLivcz65sKA|vfl1!`4NR4EqBl(j#@ZPJ6{3!WJCPI#y& z!9$^6c&w9X%Q{dRo2-&uO(YzXn$d*M2}Fz zP^@leslOGi5pen6uQl4_U^P~?cy*yjCEWF^aGh#Z{&^>@aVxPJ1Y}`t5Y*5db$~$N zt;1+wELgkf#u&QfKUgAm+C0O8!#r2m(pZD1yoS=pkNUGd!rthk%f;quh|17E3cig6 z9Fz)dt=<#jKh%Hb-KeHPPe*k+B2FWIkFd&Q`0g6pVVza@ViLJ?^>KT9#I#gh{QpKv znx+Pd@1`h2@b+SGDl4Di*}2@$Y%3AX{a(?xOy>@^;X+d*P(1A%A9|+u=We>~>wem8 z8Q2H7MtwTup}RLo^NYWVENt1r+s7qYtOZ1GFK*rGv$*LV(y+_4!I)UQf(u}ip31$c zPfI4$G(mS&#WJXRIq;KJvNA?hz=4#$Q~!Z!Gko#_f>AbymDZYq+O*spO*053;-byX zZDkE;M;LdPB^o5QFuB6S+B!PqitNJ~HVjZPKI<*ExcZtm+#*5Ofub(dzhfiGsonp2 z^J0hq@geRRO;QzNE3DgCkzHHWwwT_GPI!sPbNJAm6+vCya8eB8`YIo;ZXe)QY|}dc zL&DB@)EH=hQ2aAP4b(vzK9qxJXh-E~^5rSz(q8)bvh_qn*jt1WPbI%CKq|l`8qn^B z&GD^HVE&AYcr5R0%5*Bc)T(p?UHUL%XA)uED2YNCHr$k>8fX~HAEX_~8fSDeKx`zF zWO0nL?~PqR4347RlHVK_!CJvn7H!;;NaUGQ~(EER+P+fbr9IrmmB^ zjk(Iu;}#NXEA^1mrPW6&0}8zK$5^T|p+G7@NC`wOH)Dt9a3MGSmljS{O(sL$EP=SL zZ<#0DNeotx!U6EjyB}SJb+ps2Wb{&07Vi`I3>*;q6k#f<&C}S%vCzNvSAs@=B$5~G z5tl}HE)z|2=&3ABUhqpKVzK3o2|Pqx1rgqWlku+xzqaA6+r=hOggPG7pawu5n&e4n zGhn4QJ3{$TL-tN!4*N-y{A(N=Q#a#I=fMcpL2qIRR@a1c)XXBhi8v3QNgXvJDg2ZS z`YL%UO$PeE17fi}ViVIkD*dFBTCUGI=5;-q^d_yJ=O5nUDoIay%{}8q@z7=nai5%{ zWLK+u(7OKeypnl@poH7n6}kpMYpq1-q!FtF8t z1(0_J1s*o>^FB8SjPyvNM%y;{8QWTGEnY?Oafo#PbKF_Pq#$)oTBs(nh72?MSW@K> z;3Y@r`vX9PO{^*Mh)_h(^3NW&lKU(OB{>b8t@mi4XaqAwW=LIY2@|fNIM}XNqJ~ zKYm3HNd{}o`bw^MVb84t}kn`~v-a|!G4?;8$8St&rc38{;A?EMY^c^;hfuMo%rBG3py zL^&2I#QOvvCNu8~1`otsAAT5d=J*eP0{PMU;#rOLE#m@cU)tHktG>-KHa{C4l0i_E zEysEg?3=Bv%5^?DCah4p&ysSgdP=aU^KFiKeS`shSyz5YMi)lQQ=sW&yo_xH>_d-c zr=8_5rjJl;Md8Q)a=oAASIC_XAaN~rWIds=dh;k3#F~Cn zKT}t0p3+aV$dh82sG5{S_N$^MN5zN}gzOQ6V9_U}^Zc4;#ds410}IQ`8cCRMy4!@U z+qHxPCSK_gr;zz3NormKu=A$>r4(Pne^Dqctl z5soKo|A^Qy{&@DSqED{Qn6}nnSOJLo58WOX_=t?$h;5?+@P+klY)eBx4x7iGS|(R) zh9K)UUWHK2;nGi8;fkZu$WY1J)R&NIW@AMrAsf#NNab=v8f`dAcw9)zOCXE8aTZX> z==sP0kG*egi0e4g{=EE(5y2U-1(F?SlO?ufjF3$t0Sm}UUXa-l4AR8FkQvZr742_- zpQkQ;JAGybNlvmC?Z(VGr!Upj)m7D1)zzI(4}Sbp=V|9N&Ae!HkEjYG16+s_%t^9F z?LToB5u%0zAD{~YCuBfMrVr^NAh3Y;{kZMn|TfGKXKE%bI zorrM(U>5s5A-^^FTQZ4p`8?(nNoziMrDp7}=cEL<8u1xT`Mae~8WB95_#j%T53pb}- zE(V&#k%RwBQ_f4&|9hk<|G2rx|E}4?vz*{{X{KIR9*^vF{zqj4FVbsk;_q29Y|m~l zwZ-o&FB5VrpMFEVWl3{I(lfm4o-)a!HKA~lpimSdhVw}Mmjj8(7G$dgembBXTzqbr)}c;V{}ah{iE9RFZv2`mPn)H+?jF!%lx9Ae)kW~WL$m?Zp6P2<$Med0Lo=SbBDD z?3h`{Mi;rdMu$@WAuPChmJZX2f4yhe$|AfOS(JJ(#b$P)jvPMH^KEg#1arpij;guz z8jr5R>ztql!;F?x?ap3-(wNaVd&kuhpe%{*Mh>6?U)W!1cc2N~>qUfs4bwKk*9j2~ z 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

}>@Dr!rksYVqKw8)x^6}jJGb7*p%BQVyG-DA zGJ;g-X9+qMULt7+3i{#xp{5MTAvcqv1mnSie*K!+8w?~n;jbX@HK_Io-}Jpr0->=g zFvHb80cniWY;h4<;cN~)@q&OF2Mnzm zP>s5{{zRME2LwuVZ8Pk*Y>VfDNgEIv1Rulrcr>`w6c~oyj-Xet*1aRR*8o&Z~jf6W5r3&o}B0>O{+`vR1hdS;zd3!lzoA`M`mD`=eW|7s^ zKWzN@Xl?K4;pQWu9GJ7K#nzwf?rv=Ddr?x`l7x#9L@LUXqT^-n>{?Qa>6TX>Ey&qY zH8_$ap-C4{j2-hfRJFrAxFN(#3$v+APLr)>EV=Zi!o5d?=5ZG(8^v-<*(QB>PVgF! zq3*30myqJ>Gm@Aq4`!L%6l1k8uQvlhICldK6B|440f;qdz_ii)gy<6hLl>^ZWnzAE zYUkiQdgQ}gzyDi&yRy#B?J7=g;hh}4ErR)P#Mv}FJ#{bb<@NZ*NoU0$;eQmbuRkO2 zt|Y<|Z`0SGtUvhV@GzxnQh=AG?{WpiTy+yeLgwDm#8b>pqJ!9anMcz}j3Y@Ssd72I zJn?=%VQ8NK_{l_9bL0g#M#Dd7Xf~BA^ApDv3=~1*bO(BMX@jd#M(huNkOK@+Za+lzppRh4~CUgrqjv^IXu|h z)ewa2%MZwBu)TXEA4xR$0h*kba9$si1tEB2D6;ppk~m*I+}`cndC>XflOH;pTb;#E zVvA_#)1}UX?apH8k^#k`!j4w>gtQbO1G{|K9qJMUVLqMX0_#~4XNYsj;`*0rrCyxy1R=Q+d#Nk40`Oc@m z>zoX=6z2+x#Q{-{nz&+v$BPl0V($A`iY3z^acNYGmkqKg|D_F^YS`AYR_G|r5RkVV z&bw9ou$u3DU|y7ePX{@GC&P<=eB)o^TM$@-xUgsr7uXwMTlfaGRb~1htIE1r01KnW zL}Saxwv(78&5R&&gTtnp*Zr1*hb zljLIZjnN292Qfj23^TB~aV(CLq(}c&upKBc=0{2pX7xfsonG{?tMB2KL^`I;q(hd5 zxFmR>bWpqn0FhG?6-A-CqFdEqaC0Pza|~kJFo0p(W+VVX64A{1M)HfuR*qOjSO)rT z=?vTZAnxnb^LH@Tg*jE@+uw0YlMeq8Gitc?3AJ4-HL~LT`3+}Qt0xnCbH7Mtpx#mY z)igVHVp8{?f#qiHy`Pk5B(yO$Zo*+S{0kQJW{?ikQ_`3#(AE`qB}^A%Z*jch;%wME z2_pz!qHYZ{X~}F;5t3R#Z+8lmz@w(OwPsx3cFmeY1&2`ejH;aKS!u44ZQ2+wUPg{@y__l4R83EwS$`(y5^4qtX1tFperw z*Uk6o)Dex1Nvhc45;~Ie3Vsh`q?i0$e_Fl}Pi?u)7U!`iCz&(WR*xQp#Ee2ZcIUOo zz?FGX3B=^)`3K5A&woNg;j$SeF`9r9-eF@eXsdqCJZ-*hj(&cDlF0dXL^8VAG^75B zVydP*MHkYhahCU{sSg3GvM{3>$Z4A?Xs<@bvpUUxk6gvzcjV*zxrfm7^WGt}rvc3L z?l0ZzpPd}?^P|DVmHgOYHg@x-=3n^*npIG}ifx8)``!LITyQC$%H)W%RQPcB8Hvsd zbdvTm`9P@H5cbjPmVdPNr=z{~?>8Q=VS#@x2YwM$zPG=-xxODie1S1*`QPv1lz#6{0#E{R5`Npjed<7M)O6>lRmYmPK9yi+>YiZo*^jJHrDDfdKmj=8E>gGUvz z11`*KKEA(t=gzwUE#RzJ>ea35O){5vkV||VV)}bcNQHmkW+>BxnGN5MO&aa$P&lGC z{zBaskX1rObfl{0HYK;6OsD{p=nZxorBiyN6-L&Cnil>+|G?9_{Gicmxu_ z$l*GUlSUvKKFUsI96l+~g>YHJ>MA_w<31Pl;sSAzAxtaS@-J76oPGCeLlH|$TqFHG ztd?9PUw-*p%`72-fx*%pfkfMxL`4x<1biv8;TaD6LxSGcT_=(iF&Tg!lgG(n<|WVr zFuf@0SGszQxpe=HNp95B)BYy03q@jTkKv?^fGs`i;T%p8wxW9H{E7FC#e>}n4w2z} z&exq^{ccV-$_$^7m&?lnfGhyPM$M%07i2Egj$l?FO<3lifkhwWM@3hqn_!M@7G z#f7oRM&L)G&P0k37kfb*AxcbJzYFw%qZ~>6=%jxvmxx$(fLm~FDGavVB_r3P`LG*F zUmUE06QF%_an*axM2%9QvVd$L55Z#q!VwL?M@QnHURk-L|Btl((KD*!ULma9lj!4v z<^U>#*0StL?%kDXay0UQr%Zp8*c?sL{_;HpNW-Z+yy%@lLB>UCS4yC|Imt@ei85ZD zW;ap@OGk`>X)^f0%~8;7BzZ^pid+A9CJ#xzFfQOM4wBR1VKYf_1Szm(b947;UEQtBNGI(uByyc4v@^FA)L>c-UTq}b#R*je7FNpNfwE`Z? zb`NlnN;rG>DX|b)6&b6*Ehfgm;TLf%G~?Lad064?tezZNl_Pm>TkCMab`(X_7!+tA z3T(t=Y`T3U{)}5IbLa%eh%*Vpx-*8ruSqa;9eOs9%?F)(Uw3|e_e-p5(h6x3SeIo~ zZwpYd5s|c-;faOgvJu>D$TdD2MBSpa1$*Arkqk>5{?sk#F(_gAilBV)TiQ{}PXZ?R z57n(=1g!Pz&%cn<&N2CkFu`>nX;-$I7Hxzp0+7sf)L(>)z+NqO38z>KK41CO%D>Wh z@Dt! zh~tIG$;m*(Mr==kMpVbh#sd1d)c`PiX&rKEZFMDh2dBP1BSwA?%s-SBV(fw6o9f3#B1+w96jFL zd%U*4p0xJl;shz;&xWr$u=(>aF;XaD#?A+0VP@?OuJ7YEvGwoQb|Yj_)nfjms}Zi4 zIDUb9pOE!>q`9Wrn|reV@VBw0$GtPo3QiB>{qk>PGdKc`nEdhJ*%`CS91lmd0pYiD zv}FA7F!V6nu}Q!8Rah0^z|xG&{;;9;cZG3FvvT^p2f?g4STPMCPx3kY*TS%y>N%x8 zX3%$`cF%6)74`ThfMKo z&Jj+JXn0EZ>U7}Cz)N8`NdL7gj2rV?G;6Sv|6%Ro+zmCzyZ8kU!J|G!vgfPhL}E}d zU!P!uu_sp$b{S;AdZ04c<+upBX~GNKKev7Q@7JJWHfYN7v+L7SAxi1%0@@vOgM{x) z4+wURYrX*ijL)5~pacsTeERG&65$-&)nI)n;)z=b7i7smZz4A(3Cg5uT2dHmcfosO zBL#G~(q~zSB=zjA)H3jqAxvQ4u;UQuJxRK}4~ZJSt{MVJSaz$OSX9Zl{BarHq1VB2=z^_%i$3C$F^CG<21nK)vi3x4|i>JKuPPhgm=bx-105*cuSJdTWFgs$lNB2gOST4ZxX9;6QCH zBWzff<6mq!{)NjCa9}O|Mb~0lDR2d@pI}Rj4TsAcOrA(FvG|DY7}pdqWk~>UCs+`) zU_=3@@&cm?FNC~mqY&EaPOpohefAl_`han>wo7$|MaMZyu#`!G%nOltvv-gShYUWx zQjrm*1>DJl%WD)Hj=Gw8{zJ0X4{)fHjjV`~h?e4Dqx$<3P`wwf6 zo@_Mh$~W4gw!Q;U-m{y3U``LOKwHo?;3T%kP69S@`hXQuaSA-J%CYSm@#KDSJ4O9;W<0_>lz;pQ4BG zzrS@?iuQHF5V7-V>^ng?JD%6x?k*p`zWZ$T;FVB5m8KbYk2rz)J7Vp;WKfgFTTZKL=;>1M*9FxEkR5s z4iN{w6D+0Jg=u26C79Xt7mRAAQmLcB0Yx(bXyJk!F*DzT(;=C>7WOW2#ta`apu%|**gqf2EIe~eLHPbl&KA?GD z;b9DitHn`JgH$&a6;?G>)5uDWNxN?5vB|Ln{F_F2YXFBIHaS-PK)To9J?Ge374SU< z41eh3a%BZk4XO^PoI1jg4OF|k2D0#Z|22T>zWs6WaQx{ZELWdmSq4(iRtUbW;(z%^ zS#Ve(<4xU?kI*yIw*8v~IZtNz-E8fuxBct znG3Nnq4*sh-luY#V8LsNL0``X5eO*}jE!%(e@vUlK9VydSjv&4qHCoq&S%X3F%r+w zzE(lEH3)<+y#4$gyNINK4isYAMCHU1j}``Hh?qD064J+|-~w1_evkN} z;vQgIHU%x6P)OwLvIG8)*x4e#Yu7;}dU%eal}IqXf-Ya=J!8e;OvDKR)0`S`K7Ntu1s@DiH8y-dpaPe47IaS5@|%KP_{6i#ir`Jy1Mgd zZ66129)}DTyBpta{0Yk>!9>cl@`a-C%ysYl2zLgU3xB z(5u(IyS#9hH9xn%U)bMY+21eqFDX2MN&W1O*zT{F!9kMGpedmJ`X?eZgi%8)NN`2h z;Ik#9x9o$RC^CsNn<_BS3#d5fm;P;Wp+|0{1#vP)~(nI^j~`)hWieGg6>sx}T4 z%z9XF6UU=tPDY}2CJdy~RkMp?EO{@jqwukVbq+3w?}*?q6jy7otRe>%<0v0p?4U#4 zMS;c^U_aAC)M7VR#Q-@9l)RI^^aYM&kPIl_vdP98qfM!I269XlTBU$4wk;&iGaL^H z__vOc5*6;1%QGP$9(1tz`9cw)Mu3La<~UFVLPV+$gx!k^fLnp4F6T8pVSsc;WzI(I z&EO6FRh5au!d&Lk2QP$`ryMzGkult>bQW3Em&~$8i>;Gd^qM3DLw<+s6YGE2-^G89 z9&J9}+*ik5!VW_x>IBe$8*CJD2ImB~6M+OxArZaRXzrW8V9j_)40Wnd9x9>|v`uPg zo&=|tf^y(kUfPtQA>yd}b`d%wpN~|b7b=8)Ht(8goBn?L{*pMr9dt*jspbJh3`v^D zDy0^k*lItt>qG|0WTI!2LdNcG1pzWyKSBk)D;Ma2;biOd_{zkH#E(sifv3x!6t9!}HpJy)9yPBAHmf+PhRf*sT3N5Nd*oY7yv zj5B^pwH+Ee*_hYE&q(y`oXTNuWkWI=sKnlGF~f^<-Cux2r7H{)sy?9jc~pJQGia51 zzTu%AkpLyC_zrre<$qk17(hW|cNTPmEy9e$^TEixShp@&%ehH;Vz&F@?s4Jm7wShW^yix`fW^{}-HWZU&ks}kjp2D&x1J7H_O zY*V>ELG0_92WKmyBk6(@K`xB_2p-qPE=^h!bccqy(T#r-6^CcI@Zhn;@zahjUcY`% z;-;i$NY1-YCGCZeN@6%*yL8a5~Av5>P$WTf$&bBCzzL*7B<$6Rrsa{@; zsz6p$mQ$>?>%D9nU^LX|=1U54x-hB1_3Mw5JuvrPGV=n6*BgA}RVbTVWs=kUl z9Poga0qR};T({kZKV7OpYj#-FR+x8?*$h*|;;&7QZW2;CNfj5-V|T$Ib%CsFJ!G@e9MPA3#%+QQrhDCY^7QT-I1*mrIZpRhOLVu?pkE2tMczW&{50HQ$za)-RA47 zU}@YPR>onK!sciqz#kLda;f`Lw9^+Fb&dEx?o*W3-6AQG{A8vGtPw}9M)rHDi|h0L zXmGp;>e3T5s-K~K(`F=!7m=b1DB+nSMMdF<1HKiLf@0Ib!sZ+lq)>f^(6dy=Aed@} znIOb~3E|3uglVPwRD44cW{Byixv(JM`e*&~#5a;EUag=?9XXi;j?NH3#>QoHnLvwB zx|PHloGm}4M5{T=U>PEb=HhruH3A(AbmHVIsd@%z#Rg+uHK+0>RSJS-5@LjOkk5@+ z2BRSxW@L-BxgK;5ubzIkG_Tj@4EHGq2^9$Q-y}RNob6r0hIN;(iiB_6}vRx*TW_ zW9rtn+D}&}2k<|XkbRz`MlQPJYg~CCl5@3_HG<`kJp;bj6V9)1>~5_+`Uw5yO?j{R z+pO=Z$@qhYTy4=Isea4=Qj0q;noexk9|TafMF*(*F$3t^wFgHG>i-C{lQ-oclUk--XlxKbl z$GC2&7CMAm5}}-{tMz`E1OR+WS`)-I;6pIlhMio+h#aZP!L_&9al50LdVqy2?sl(# zj(GUP^$_Ki{4A1*SkWK)I9lSTY|`0TI~(-I)=ij_Z*daM-zCYU)^W!23;}ueX%kxF z=oC(zeB$i*C8KKnkPtD3lZggI_5~MqX3rp$-gx^odp8;mJ=RXZ#VnfDGU)<=!p{b0 zgR3_rnb@-hFG!GY00*7!YT!!#9;)mq?)kaO-=ejb100UaVN(AUUi!aDbXsDpvtZ){ zH5tB?t|FEwTdSmKHRY7g77P<|mdBNGYYZ6jc7v@Vn*$ceUW8)SJPX**@F}1eA8jsq zWQk`f#h1V5Q?TfrV};l{1IpQ?E`y{YM#thCG*ZU3t1fIVeV;loLl*HF<71d8KKT6b zx49L^2)Ly#Ethf7wie=&0`}f^u}~Rfc71$07}5VPh2O~$GzC-MM5wLpJ)Fq5(T97V z5LcoXiz60B+cBOB;wb3?-L5H-S7KEI%HcVw*R`%Ib#3n1b4%SgL8PvnHHA5uP=6;~ z#uW$(imJnbi_7~jE0r>T~RH{4mO{l$VyrNRu z>2*SFU~9tQlZD}J$m}=B4x7^5f{$XE)?#LjJ`AYi3~{iF3)$8%Y?kZF|zaure0%8vf#LMvXyT zMmew8lC*O`EFo-L*Aa*k8!H$RuPj9d%q))>uq-=hJaqV^d_}754X;PYQ{d6N@@`-9 zW%3;>Bu#d|20t`@YhZXq;wgN~)~u<5fnCagk6^h#1|)rndJZNF`wlbkZmUX!aJz{> zO2jKUYB(|PgBaEyA83QLg8UQ@{#DT;cOXbY;;883a+FMWm5h12Vf0kf^Y^ znzB}6xwfV@cw^0!W~@xL3Gffg11O16j22bcVa*w(1)wGsueJ|dRN9|B>{^Ak#ueZh zW+W{*xiPtGs3AxL3NRvVOUg}c3Wu_1YYPP@H@4fyF=p7)rqP~4mz1tHir(oLgIwTmz*UVK8+&9ZGx^5&@-NGleb)X;RY3Kv~XX=WNp zSvwO5iX{>PnMj~T*(z)xioDpYq|{og+6`uo74}~AK3`|js`2&tl-1QNUTqlghirn| z|DV10Z;R_j(uV){r)Yb~)i`luJ3F(_wVuRTVw1!>*yaK!Gqd2Z7~0TJpkcZpi6_Z- zfA70~NF^Perg4(pec$V4cH=(hNTpJ#s#GeKN}4)v)hrRq%(Q@?T9rN1TdzoWnp@BS zy4@|_*AMpCgEIFheTU2WI{1 z@|-EMuYr?`^#Ou$p9?LPu2`}U+%vs)WeX`KuOn4iv=1PbF6rdNHJvSs_5;L)bo233 zBn`Y4UMSfI?sLD0ZZV7HVts)AGJf~N`RwRAs^wyRfSw|22=DfTx9yq^7A5<@eRX~| zzK{f@3%Mf~>jSiNb$pCas_QzKi}e8lzn&nI-!+{}rTW0^TwO3}@ikylsXj0-&Mzl# zCrHQ&dS5?rc1rhwwL1{uo8~n}*LGGfugs;JU?=nSH^^^_J8l;0jiOi+5VR|Vjp6e= zwr9S@YY5q@&;-7}e|f%xU@jiE&McQbk@+jKDz1vLJ2-!vL$0Iwn|xI`r(x$2m)TLU z9_`s6AcuD8{_b3dKcdnd8j<$$r{fnvz0+^R^M5(VlDJ zq{g z@c!>YMR<1Gh2R88oxq_(qN^TLC5x@lm89Am#StIUZusin&c!J^{S5cGqL29H=QR?+ z_!gr;r|Mgr=1|X$6y<#a;vJE|BDhf`O#y+3SA?IkXCzTeA}%E@rY+%9@G}oVA~gwa zpe22QC)^^(DTxt+RK6|4FB6J5+<=G*9%(?lCx^2$R0*l=F>AErxqi9b(msGl-*>+T~aNxS;s+naCnG}iBYBb2{CBXXH(qnnIRxt>6f#6D|E%ZT)MRDv{y*o??2N`E5$CK1G0b9c3ZW>=f#2pwy$VYak{9>r3LaI4gd(x zzo;w6h9=Zj(1g|P7#y(V%UwCpiLuQ4OSqxTIlPmSnOw#lT&71fq|}0(I~DB^+*Dp$ zBidE9QuT$5T)h%0AzD>~i0}1DXw`ot;$nl$x)<8=SL(z~CA@)Fudpn9S^lZM0*W54e*&oqUS93tBBVDwL<;u-C~{sU92 z4M%iAU+5mTNU7~tQmmA?Ar0e>C0CgI|~rqO8hQV(>(0>=UsrP;y^&`ruyw z0*wk*qa}6blqYNxOpv{BjHeIH# z&2fDm)*OC42V=9Z<}@T-Lx7lUHEt8BB1+0Z=5>EchK;`%JCQf_b_B`0(c z2%5*Q29SMW$4XT+N4Hf26L+0|$DSzjc9kAep(c`mU z(GBm=)octd(mSR$euUcL{UpA@0=V{o9w1)f^g`_M{GHd5rNlmLaSd4pkSSIug38x7 zhKntxsOOD}G?6lHu#_5q!2Aa2K(gT!72)nQ6$tjy-KbggmPhOpVExvz9)$2}#hF!{ zI?T)ofx;kSQ4Z9UyIHWBx!6a4R$(Kj+Y%5lEvz$K!xdBi-~|CoktMW%3Y5C$?B2ef zD`Tg1Nrr-IhjuF|qt&dlp}~N?Uh<&R&;Lc?FF<=^W{(GEkgMKt>d@Fj7KYo4cUs7A zR^;83^djnsFjt~pa(C#Idc8X|)88)ibe4vyKsbrgbHkk#si__SWCV%$BMmV^uY^5- z*A0j5S8#S}Rk+)gl@q?yO1R^~=7BIGRQL%<(lhuG^<+&LHU_(1gv(&ENx~8mWZt;# zaF&u0a*`_$J>Q%Zh%bZK4!|S3cegMkJ#~dBbj9|)R~|C6LT78B-oOYlOE#=JHf;Xw zn|_V#65Awn3iPgg8ek%Mqd{qX^Lk@?Qvv0aCRF+rZlXR%5Ov0_TL(OBhRpPKAuS^v zO>Q8MAXCTFlQo9|2rCy8NenG2PAwF$CSt=CB)mZ9k1DX-0#!qPg3izaRXdr+qS2km z-PH>?4T$x+27m!(B|Co7Zi!(W7ur3lE=~xVE5}}f5vJo~`10`sbe&vmLY={NC^sfB zgHEgs`pN9mCbJ}S;3mlCMh*0b%fEjz3Sq&XB(x{_( z@5|HkH;*1&o^SJ@tP%U(;A6BaN6nC7`O}r3?{g! zyM6sxPq=xXOt^fOsBNb%A#9S&^J<$(tyrAH`(T$yW%$qv>gp7OVt#?6CCJN-`@ZB9 zcbtOdyc9idD1R3-U~x%=PljsxNEseH7rl@4g4h8cIaj55+F7VG>uB`{uZ?W)t(6w- zmqI(rpUPyljkr)GWqW4u)tCFvzI^d=dt+Zxo?@a&Hw@=bUv9qq9A9|FF#ob~;JWxZ zPAxko^~m+8z$K+Tv9uWNY=?89+_ISQ6V%Z@=fVZ@c5>`vw@}nllZ!P%hSn6Iua3L= zfHR{0)kFfT%*U}x=4^H(wjuO5K%ZXh#ZXU0eb} z7Hz#a7U)z=HOoiz&XrEhI*T1`*^1JXJ&Oj3E!@D!2Uiub3@JGD-Cq8gypUByLoTt` z&8<#;AeCH z5{z&d@fu)CDi~F`y9=eqr{@=pVZ2-SI2>!_B@7f`H7{|W>F3WjpS}9~K7Va)Kq_$^ zVEt|T3Euyy`~LHdSL^uluu)}wbL%Vl)~NP$;~Uia7_~awV@IC#(rsmtTSM>`wu6Nf zYFXA;gZSG|n%}pd;M*JA(%Ae;{P7*TjwkH`(hHREk*J$TPtrW&eOZ|tv17?rk+6b4 z#}}BuaWI{mnPovRfkubp(0!;62m5r+rH!4CKqdLBwNqipb5}-Oe`dp_CP8__$n0pA z#7met48s3`9&V|O2|?>lc>B%>%MN?4@xfOeDbbunt;P%+%j|6o7YmL1va(TYE1}(} z8_B4KRRaRs)p%p+RnSI;LBfqT1zm+YpxHaBMBv_dI<+jmQcmNtP9e201M|5!L&~F- z>U#us4S3t>9P@j?GxJ#pzmIHI@FNKxy<>ol&1XlrZu2N`g^aB5YcKs!hZU^3#1VaC zhE~um6+qpV_w*GgzKFdU4fWpSZ|I=adTIGjR6ek_VpR8v7I0_sFmR@fY3c?)S-GU zcMh#9Zy1FRJmD0?x9KUXzyvi|cG^nyw=kKzDbeU~MUc4X>$Nh$`r7~)Tx9x>t8tI+ zz<2$!hR8V2Yl@fOXmS<}GVSOhm={=*^~XR7WvJlAW-6Ufilll744Mbtp7BYHqe zynL&82%kGgP7ru|pn)PCFkS|&+s`hrB#x;t_B~dJKtDCx2NALojHDJQ4P~n8c&Brm zAw!7@8wVQVu;{09aN2Xl7g*_(rB|Rwr&wTcqM}N5&EYXTmIQ;>gx=1#nk3D=BjJ7; z;N?Mu!xOpQ1a4?}cDw!y@KK3^DOL&i%IIM8$@h(_){5Xl`X~PwBjsy~C9)uc3dn~4 z`aV@ZScy9PKZ;kWpS#E>u(@F+N58eLRU8`Ymwa5+?eb4FHza9L z9E^ZZe2w1aNnOUQ*ZA4?X`QgU=tZdBzb1};0M_Vbj1ln5tO7GqxW?f%=;hG52vv2P zxTGVOhK%!Jz{X#ZQvQ1ZJ_%wMp}KYxBR|_{2$>87eC!R;NdnS4W)7{3OjWmuOFTr1 zM6k+$uqOjH;Vm%=j|*rN;dU`=z-VHZj-{@+@CUs76_N7a3ouHsy6Duko4D-Qfm7E3 z`WW!Z$_Ba6<#6f(Y#dq_nQQ76$2+qES$%VUj`PmbyT19Clv^JXP$l_1=}IadI+WfC zBf7G5cwHi40)zrtaISPR--q!am(}T%nOfk5z&7ipcev2kcV}+uJCx~flEN1I=Cyh* zj1!)KXegtkyxl9&M~86k-HSHBCEd25Ox8CG3Kaskpj;LMFVyTn(kfo6fqUZNzA^=` z_7&>k8nW399L9T3ug)&yL~Y?WHX~;*WTdQ|#a_bxO)St;tdEs?inqezjSy;`tg<3&WIcAu1E1$pHH)=; zd_U674;IHnBIzpl8=gV%hCb4Rls=0076qo|iFySbUyiP3r;3CeAl^b~B{n?>YNF{U zM%ZOMK?&G$xXejI-bL$jWhpOqhxGjn>2N9*jd3-WisFz7bC>p&PAieR!hSk4eblWR zYI$hJ;djWh5FBEN;YJuUoHmBC?&6GaoS_TumF)0H4biW0^(-LciY~ykF+zO5jB$q` zv0Cb1uEde(sUyh{8dYYVx~Z>XvB1)8eoewu50>JVa=bKqb*5FdEqfq=U=4Lh#8Y{? zB;gf zYI-|2p{4C#TdX100)eEqpG>OSW@;DrPJQ9(Om?t6mBKu}n z8V5k)r>OX}M4S$TlvRZ|R`()jZ8z6q1)VkKxFZGIxTYW_$O)r%IcX`(qI9}Aa`^Yr z+30BS)uYKHgaOLXxgItnjS~}+a$jMY=mUYRWX?tSheSZFLPDb_v2P9)Y^(XqR>Yhy zY_Z3mwzA>Ru$17VoAUe(P~vgm@3?g3v+*2$64UqXonKW$_Q}oZZ8b1v zf_eqE@Jp;I#4ZQ5u%g0+ zWqWteaGYdlI(NedNvKW8q@z-FwF-!>AVo}I^kvN?yie7qaR8$H@QytpCBadC4UCmg zwd|!u099Hs9*9Q65J{HmtQ)l``j+pMz3}t(D_V);Ce3m2r8`lQ=9ha^w~2#swdVfi zTRk~qBcrdwe37o6kuNrsHC=CH>jS^S$X}GsKG^fJqO*(?o0vsFdi+Iip?J*!y?m{9 zTj#aJ3`qLj&ZnT0I^QnP^~-m8`p^Q>X2<+5Hn`PlgL<`SppdLLbyDtL!V;TFfid_R zK@~kVQHm6+&_n%c_+H8XJ=wIdavIrEiv45UA$~TQ1IM?MYhBo!?Ng*OS-a2U8j#~3pej{sN!y0V3hb;M}~RE(!N|K zx91dFO!6J|S9MjpB4O{N7q9prv#}1IK|;K3-X**a?*`gUi0_dcjpLjd6I$pRmAY|u z5!Dv$XVtsa2S5VJkSlPuFSnJf4qu&&WrJ^j|Hb_$sD0w zU=(hD9^I2W*l97IqE!~qS3(bPUGiSr1I=J^xk!sta2qWxTrfJ=_p-5- z@F>=4-3@;ClnsYs7-JQsLV(3pvQ*46lzg%wrUoZ*tsmw)QV_nOA?xO4?De7F!Dq{N zvDcx)xGw_p37IWnti$YOE}(tC8&%ta1qoKWp`lfavcG@ z4637M?c33zHU`E1i#ik>imo29CfOa@tD-Qv=BMubCNYk?EXz8hjuJODhy1>sS&?<6bM4po|``mNXCps!7eN=31 z;wn`OCVa-2++q(nceM?ouR&e$mLpeij~DP=%DWo3I`1hYTW{Bt3HxnJ>r6j>ck7NT zES$ER4-~tK6H<~!j^s~!cgPBRcODJa*4FL~_U-`1@RX3TcfZ`*o5F>ne8K~KKJun4 zZZ)*>?$D`(Tn$|&*vS#S37S_(WQCI~3cJ?fer2PI61iC;Z&o(yrM`-KY^aKiRoZau z>LEqVcPkss*#JH)itl}dATf{|o)^6Ro zDJPNFbbt6)v6fM)#aK^)^{Yb9IZ=#m6^pQZ!BSql$xtkv*{L~xyKqR`ZBU$G5C`Vc z;*i64iwT2#6r9dximmdVmVB$d*^Gb8Z8W&samxJJne>QEhqJr&jIYxKVmc{?D&25z zyzI1YXRGL?9U|PGcZs~2er0L3RUWDOlWj5mvg&rU7~5R7%<(Ge8BCKeU~}RI!Sba# zJ-_jzDfp_51()aWbykgv?Jdhw)0X$N3oc3f^G=lWOa9I=NrX-Ol)lUCtagt~&^Xl& zGnth*;*A>yb&9rPGT@yy5k4TcRVSRLB7_cmrXL1m$AbX6n94-ZGV@YMR%2%O_^hn< zL+QRr+>1yUR|DwN9QW0QYnA$77jaz;*u`B!i3nA#1l-e{`VeSjgEBgQ!_W5Gf1r zU%f$d&tLv0k9iEge)R;WZK7OZykpRX0OTmAbOPx}pXCoovtQlsPE1{cvh{^Ei2#kt zy##Ir{B)=EI^-uc)vTTxb4iFX2(Ahj1&TCuv&V|`EmQLM9{r$qgdsQpHs1h@DmO`>ewcqq|nIYk_&E{D>+ZDR4H!8@r`6D*tP>6f6eIJ zD{uH2{jU}d8gj!jI+Y&G)*OLWfqdK zK&xg;P>R&n9~27I8AE2s54-OdXipd_N@GiQZSc8ykyY}nfk{_nMLE` zR{#y@30ZOCZ@vqJQ^1Z|r*}C^(RiU9@2G%w`V~KF6gpI{8}czldtp3lr+Fo_q7vQ6 za*y~b&lZe^5_0B;fzev&l9e;Se-yPi)O<0w5&W{C_~?(gE~~NhH(%uL5Z+Yil99+N zRFIXeJ&(P`$umj=>3-%lN4=+}aG|n-YBMo4bR6^rA=_o}-JZsR$WV(;qBNSkoJ_Bf zWrdMMa7m+6G+2*b$8uPBX)d z^PdcF;NwWLR;LNl85>Klw-a0;-_v2?^%qyjVLCZf{VV0YwvEEwTTqammF#^XMjC=2 z2@(CCAgHB;3~|#AYD3!n2Ur!?qw8YVBsa&O|GUZgsZH7P!$Jptx|?Me+L$q(mnC56 z@$_gu*h{Zue{k|WmqsfR^dslO?ZpoVvndSK_zFCUXxfg>j~j%hArxAQpLJO21tE#b z*S#Gr&H;BcY`*h~{N%r}D$`m7!ViiTxT2Hs_>R#crC6EZ(m`HPgL6fX27A*xYkvFD z9XuFzewUQ@AvKKj3nHNnCHWMnG=c;bGYEB~%7$KbPAWK4L}K){^j8~}Mr)Zs@6ANT z{{Mf#xl&yWryRx)%6E~2xWOtL?saD)e`vL|Lyg&AY6V`<7aUgyNTrCs8Z1Ar%AF@Z z6UjrgABpG}NWx4pG&6^Q>Bi4ju;`v6^-qxsk%iQHQtgI{4(`z-Q9*pvI+!N+sl*w; zU?@Q&2n39yn2v;x1p&1Ou2|J?C0Z@$2}T`|sk9kARw5{d!kzE0J+LjALdrH}RMIeE znC-7Q2qyGq9-`+r*j6W>zn8u%Sk;tWbi!646<$Io42_+yiaZgcrF!`VE)6-KA<RpE9tM*$B9KP(qj$dlN<9#SrI+?t)^lGypikK;oe>dY6?+7uAh zO*)e4#PoU&9MM7bgAqvTJH`(5CJ&6dq=x z8@b|NlE0ib8l!sJ{g5VUC^2e)Iy#?Mtu4(ET|At-)&~mUh|9h-#(N*XMySs z4(rfNFH!Xsnz|aRv4aP`Y3H=(8j<(H3|}a2ff1I8U`b0s-S9;JhWq<7gf;E&OQYUs&RL zs|VoMly=QZ-JUBo2MWR0luW}s4+mN}`~ivMl-AM<2PL{WgB?Cxd$9HZMCgzpWzI{) zvs!vs$sS}n$KsAx0ZW_(dB+qcemciSb?yTTcs*f?3L2i@YKH5+(!_>|6vlqu@n7pDiu`KUfd10!J@pT+C6 zgcR{y#rCLVJ*8X8e#)xruB;&G(ctziDc&WB_(b^GTzf1n_ho-Nxb6t9o`aRTz%*|l zVywajq5}-)ZBd$U+g*yxH+pPfS94c{aisdS=WwC(VFb}_!)um-7M4ti*x6CTNF*_g zhl#T+#t${Rl4nWlP(M zJ8~-b|ARggLMNfXSUR%N18qR>G@aQPD09U;fBU+sSNTnn}SHwWrwD?RONXs@;^rvrEcfY;2H~+)y zkM1JpKJI58;MZq^j{xQ){e)+|Y8i+aB#>ElURCiLK60&=>N6yu)|pFken5niixM!1 z88bqg{+A*)YW7MsbP=~H&EXOW5jsbMP^58%p=CZs#DTtz@uKQ^!;!VogPG3RopqR zTJYbY203@EeI&|oxbl#M&K1GHY^Bt#qFPb2)}Ok!LE10{Jl)@LNSho>4t1bW5nT-A z9WPVLj!4FPj&0d4MvuLK_epH-gj1xqAfKznPu1vQO9mGJ)f%Z7;rAM1ku+DvC5{Vq zaxifE^l`9z-e-CZ4DtJL(r15I-8~q+eK7jBMbk1P3M{|>e*neqquuU)e zXyvl{;Wu;VRem&EIWKVXnWybZn#ypD$7i()*v*`BTgbTvrH?C*+)t-2F?Do)1LFa% zemHj5vwLmvxh$C{22Z})c=DJ1_03ICH(i&eFTZ~A`OB|gJl%it^2N@p?e%9bUhQZh z9O<$h8afN;uuCrrD=578O_fwI?-Zn0KnSk5Pze*t_Z z$L`06X3Zec6{_;l|3#M&;NGN|z&W3i&>13}FE+NZSpX>pnb-DSPws~E(9O{PMq z0seb6F4Iwz@eQ!kaK>w`zTXK-2br}IqO$-qnwa*z8WoA;FGgkb`XhSLs^U&w-K~}* zVckNanpQ2BWcM?s{7WmsV@llu_R+&9@BW!amJNvNzp>*H;(Ho^cnTrs`|36nFiFvW zB*NasPcMGKe>Q&^tnC{igwM^eDM=i{^^%J%?Y=E4TJ^~U#K9G#@zL4=vh|GE@xV6VG#6RAvq~dV< zzvMq-QIDJyqqePGyoma^@^Y?Zj8sY-OkhUwIOtnyB^iqx4)7=K-YfQ|4H)IDzhY6NT1xckf~6@_XcNIIIqP+pIr08=30_2 zCC17`9Kf<$Sut6!OdTLJ0O?lb0F`wvmJEIKX}Ue=YaT+~6p=1u2uSGgbZ~Ncd2yfr znGe3+-dwil5mk1)(QRb~>$7%t|N8@6vE?{ffqR25o^8Iu&fPcbo6nviInVya^Yv$& z>WWb5xrPD)XkquQsj}~!f^o5i)`m|Paf|b%`)?2-8rpda+wPHelOqo5k^)DCM4~Q+ zD@0lhQ7~Mn+&qwbfpYUAm2xu$0Di|_D5V~%0r_k3B^gueMn=g$7<9wp(m|4<@-(1PdA_GssL>0vNz;zV<&7u}8R_ei*SN9J zcz2cCuQx-xNWQ=DbYTfoMy1i)Uvf*Y-dtSEe4wksaeC2_soqkbIBC#SQ;95Yr6LP} zJi34X6NKzw>HPTqCx<5o)9Lv1@gn6K=%d{w2W5ZzO{DDCN>z7m>g&B)20^&mL=Cn{ zAzqD@PbP!FE(yErL{$MX?boYGQ}KRHnv0lVuUt*voL^1Lkbk-Zo+QuE>hM$OIJf)z z7MBv`es+NKVKX@zSPi*4@2hPby-p+~$j&?Far57swq=x>u_*>XG<{1qr4p5*H*jX* z=Tf4+Q_KlmwkQD;DxRRYUHQ6`J79n9J{CIa^EME@bADKYtn#S2po7BEiYSR@R+ z-1B7CsZlo{(1-^x*9ww3{P?M#8FuKgjjQAX+IG5aD zk1diKgmrHHl_OXwCbT-W%zcAuTx>DNkcTH}!07BzVK1D1qsQX&%HSYn;R}P7+m7-Es}(a5M4%Tw1``S&CckLs4%WuCv1}f{z~cI!h&3-ve*3mrS~n zgp@nR@ykP|)9A5mB{BY@qc8+il#H%7_|c=S&GlDbyxe}ik35-wS^sile|zK0jlV&y zxU|Sw02{MH`zExyWHwY9>^2uVXR?FDaXI<@Ic|zR5*eXwdd-5_57;lXDUlkKS2Bpy zr$uF{YH%XaN_A9Ca0$8f7#EE3b6av9cArM+6I+E0m)7y%hm&^$E+d;S)#(6qmeCbnfi$~mZFtH6ywwz2h;(##}PG`87ga{XDqx4x|@iL9w;WK%A+V+ zqZd07NPxoHIq9@a`p}Kqb6l>IuL{YZI2#U!vh%sOSDr9Tg>Xjg;dS&_lL2f}CBYHW zq$jgSaA0ci!{qV=&ZhJUGY=-&1BBh*3n~|ePAaiB1h#5_2Hkrd3nF?>*vuACOU5X5FcQ*<3LZ=Lb(kut0y|6d7jaF-W(L?BI7Nwtz2XP!~i zY=)N6Y#Sgz=S_KlG>criDxq9W^&AN8<2@<978}8EB;TbatfQ(l8wz^o@c=4}@vLMX z-%1M-R5jJgoC8)=*`Zj8s!VCMd?`dk5hAOSuB2Xm$J`5X`yS$fDcU< zp$ml#sr@8Mx<~u;bb7aFmny07fupARaE{;*fAla=&qnpm?SylDvxUQJA76&?) zP)p=wozHY1d`nmCX$#%gWLhQpP+U>qg_@-hNT_^Y3gxw{hI05R#;9&tmEjXv?<*wK zWr#Qg+@p_deI+f_VJVpA{<_?G*-k_Ys%|WELf3+EQoOee8}?mw-xyb%oa1`SOL#jF zMs_^@5&t5L9UHSaQ;5D)DUy`}4#L(F5k{&jvyPF#f>LeUATCr9=?I-H4X+JXez}6# zY8Ye`%v)?6@TbT|`qsAMlZmNdmrb;fYf0MvumvNZx83wJ?6xgNR{gAwxHnsW-P zk(~E7icuV345VZ>?NJ&5i5AhqTC|sim>w4EUqpfT;h@U{O!&Hael0%~{dVICKFT>x zT8o9F-f3E~XxzG2oRP)5}6fDcGf%GDWs{ z*KNuxt$cAp$ZR9pw%p3_i73s3ou0YXB9R-3eCm|-zIAuS1Wf;|w^%>*^-KJJ&GOsh(y*B6{<&wTD9Yw={P#?o(FaX*a)u6X1TwvK?g-KQ-}j`j{_ZKL zA@N#Je^&)1smGT%Vu#Q>{KLnp#Iu)s&t9gWdi}UFK0OjLZbHBAF|Zv@yR6mPzO6FbEB@TloQy;WqBxMV{QByE1>nX3~3fe^ON>}>89;C{+IBd_Y6C@zt9{+>WTXJ?t zXGy=@VXN*$bypFqB@W8+Dg+TI<0JD)v1Ec92f#cJ0TnlYZNx}Swwo)7Q`9^n{8}_} zz&L8p5m$bN3g`s}+POzRyVdr#uMp^PHcmQQZ`~x20n85E2z3tof?GEnNUnEqIQ42W z8xunq)v*2HW~5;8NMY@ft{5j0w)U7G@TQ z+8j!O=Q1IpjgSUQ_=9{JD4VP7KES36_sBXy1SJ(^2ZMc+Rfppwi5zUK-M^qp#@&Zf zMa9jT*((cT3(5X>+|vRgt5#f-0r&xPu_mfG!p<3&S%Z%sJp6d{;NM0M{{$nDyA?V( z7IY@p?7llg!L=E8Jf#gw=;Aww|^bMLo2|uhp zw$5(_KIyc@wA?|O5)xQ1hzLS$>R^-M3TlMy{w{zh+YqAd|Ax+3lkE=a$Fft*O;XUf z&^hrNG)~otQUGFE5rTSd1baQN4s+-Eh+~pRxKh!+LgJVbp6a;t0XnQ@jxj~nNu0TEbM z;N^5YC4z8o#AH1{Pd7%OwHt%1xNV;QfFQ1ANw)-Urvk7;Jj2buUWc2>_Dk$)%@DWt ztH%~;9^|z42(b$av5R4&$n_(eOg7DE5mcxFIrx%w!fa}1 zBUv_u1%2zYFtpg0;VYL0rC}T<(9QGX$ziZskot`cip}zt;nr(|ucxx#j46*MtbE1< z=`*rg7_LJ?v(!0)a~5erR&3lD29MW&HP0i2CDBOKXNts}tI{-E0#E+gSOQZ5i#QXR z{hEr|Afbe*v80z$k)%6BQxR6s4CzsYF;(*Rk`yEj0!rwNhY6JwfCVM7B6^_j6(f9v z@TAjRA{=oKJAx^2eJGO)A;jbzts5+%{_ptkl19kE;JfMh4^!+O!4l!*yv-q^<$`OM z&#x|Vg)%+s;>W@P321&dW!BDT$MHdV8-{CVM}P1lBjPba+=u=k zYHT9o34H%u%pin^qx~a^KB66ah$ZzqIMA2_N>&^iyCPvPe8%fy%@aO{g$_z3E@KHv zDVE>Kgd5(w(D9X$nay{nC~2%S-9C$BV#v(sIRO zF=rQRSo;dk9`c~+YwOZIwecYDGS%lLnkLuGeifJIbO#3`2THvNL&-~p4qHQWv%`|R zgXHkyt2DCwK@BWN$8?6G<04EA0%wX+)L-TX{EcZATcG;eEdSghuV91;jry@uCu#Dq zXp2OXSlH$_MX&Ka^|1e&)g@KM7|+9^YCC#YuBME_&nq}r?Of*^T*4Vr7_d3C!A?QA zFDK6q{)Rq*bh@GTg?g?BFO2F5v`&2K3*72L^*EUprmrwh-NheflS^DE#^C}UJ@Z)^ zxsu`!%uGlKB@b;1NGO=mrz?%cQ3oRnK#}@H0ThDpJBvqMk;ckCs_&qkQI@(jT~8rV zuEKlTen{c@0&9DYf~U}Jm-@!97IdGMLIl}wdqpDGZ)~LNV237>gF7G0@6;Do!_`4w zgKie%eqf7#RYEZi#yW0yYa&zH#rTjI>&U80a`c%0CY^%5*?t}iryM1Pek19b7=vjL zK81rob8bm-%U?hRMtk|IK!Y{R5Td zT#<0xN0i?R25C7KAp3;HB$5E09s&Osw&9=@Z3QFtsqdYnepCcE22R^LX-t!++H3Bc z4uv6cez=dAvZrgVFTiU^IdyhYZG_egNZoxK`~=JbHu+{0?{@xuO9SneZJ( z_Qe%qB4oTooBNXi)@SBtk=B`|r_X^|`MO|2{e!9Sy#EGhNt8252lxY8NcIRh@0-B6@$@@pXLz@nA8F?07!e^|a$BNv!~d20}=hj+0QTJ7|7F!Br!~H<6NbaO;IVU z^Tun0LN(r|d7<&muKX^(@YZk67oC?icou8}=a+c3c?VRhU9&8TvO2k#)m(fbH()Y* z3awkb7io)P6)28_u&|v%&=OcEe8xJrcuszd;%&TySSS)fm`ceysB8fuCMu@yJCLES z>HBP2sqZuJ$Ksniq_!s@^tchbNQox#@d)RrS>5 zs^h_ru`RM*g5_Y$LK{Nt4`UIUj*(*b!!2S1&S9LMB)yV zvDUfp9?$H8tR3HDK|GtT`p~{Fu&{v*$ZB8(KwPqb%DM{#a@2lZTL7VxZgty&jhw4~ z;kpWzU}CL`{t>ULR=G6emjCwEg~2X$S*>hPYQqQ}o=$MEZT7AgV}Qtn=)y^T??Zv; zyPkwO?>}Ql{GCwLANt_2OJ1hjJ_vSSZYC|21fJ30RP0Q!#W6h6VkaQ0_5ha+eEak6 z9{%n#v-aNF-r8q;>93HbosZ4;cR&1vckd4Gb8T+p<5==?nftb5&|nD=XyZrZG0|JR z;p*W-Adl-q{jh*63Z*+l0-&!RTL0XXsw3b^HsIi|I70rr4RnHEkyvwt1U)q$105 zHgQUo8hl*4GfX7E`Unl0JZR z7+upE9Oa8Aw`6=VS74XcSHNF?JIuQ0pkad8LaMCY#0dTyT`xLHX#p8V7I61DK?@Ee>Jp?48%z-Z#QqbbW0)!aW2u=7_$&3`Yz zD?#icRo8A}e@|=KRQ%&G_tXH2AG(p^In>N)yu;=a-YWh;?GzKIXsG zmCBtKFs;52+3M8-eCu|)DEGi>V!d8Et(?STb7BRg56Y56+Dk3Kwuaxuwu0-h=rXHE z%e0fv-0ppX0Z~lZ0ckS^h-|V8Y?V+{VS(bsf1@`Hvw(TheOH)QB#W`dg(-SxCLVsx z#&2mZ$L#K3R>gWvx-}DZpo_r@HXb*Oa?MfI*a*dxW@|l^$%Iiq68nsK;!&IN173A}2@} z#f&@9vah4)FGP&H#n<8ngpKew#sxdD%cAnt@l7$&k)aPzv9ok}bry%rjUATR)LURnRt9CUh8{9da78#ebz`u( zpB>@+;!$r2z(9%K&*l&BgOA!2{r>ta;C|MHrOY|n*AP3>jX_eUUSAz{ty`zJt0=yc zLOB-Vs>LWG*8@YT1>=+2Osmi(Kt9)%_QH}+v2eY1WLW6BURasMePE&Gdccy={cvq3 zmg%fd#EV8lMXFP>EmdFOv_n~81%VJ#7*&iz@|cJ|@h;ZN3z#!(+jyytsR0JbOWZ}J z!jf}QvAhagR4T8`7L|f!y&P_N$&$d4cD1rXU)`S1Y|%&L!mLkV8z4)&+Dq02#W~>$ ze>Lm=r10Zu`9*w|tL8q`jiIA?2c{1r6#9BP`N!3`oCX@OI+l1J$o>7xbIZxHs0+&Z zOBC!F)qM@4FRzdeb$)^H%a<2inTS5QX=n*}K|?~e&(HNj`#LscohPXLB~wI8#-{mz z6&e$CP0YBV-Kv7+FdKMD<2T!f7txPLE4aBoetk`vEc~mnqFjWNVdb8Kft6^>RB8dF z=dI(I{UE!=7r;&mEgzxmhg=t405?r7;F``xc_ctAxBwm)9A+mGIECr55Mo)h4`#n> zlhAFU=iW>jz`6rHQ1jAwB^Nd`)&#phUYEXThnG4YTX&x+%C(sZg`?ii z{uWc^0b%$?T)!`mbFKum^8EDnwK8?v{{MGWv zdJW-b^$qtRo0oyhjhip% z3{Kh3B`?_N_;T#;moRIRCl6kd>E!I{EDave&WRA9G(2_|HcXllQN|97g#smypooy1 zHf|^+KzM*6JNe22LZ$Mnm^>Yu2h&u?^yqXZjC7-)o#K6R0sE@c7D1P`OWlG)>)LC; zJ<(e&A!qzPIqML&k}hwn=2&1}wbaGCgzb=;SQo|){m_Xe0;S_?ut8DGp*Qd>V0W>M zP#sDW$891dEarOzndt(S`6Y48PY%0*VSwDluM44x-MZQ7HsHqY0k13ox|A4;qw@W% zey#gn+9ta#o6DRY)sq&(5DxikP|+y>x$iC0l{PQjC2E7k7Z#4A=mi^Smh9M9Fk03& zq;84#_U}3ant~V+fWOPH$_KKD5fE5?n;fUSmbEtyu|UriO(z1j#{gFtyALwjTCu^@k>k z(=+6T$#IpbGY!JKy>AZZdtV(tMc!T}xh$$8pXUoWF`vDx-nS0qaDPqT8y*^EU)8)m zhp3bQFEYdCh8$%)uhEhsJKrO*Hk$l?%17q{bL|)kU*ZyBMEa|u@w0BS)FMInmtKO~ zHK%9s79^R&&*WW^Djh2$`g@ev8s9THzBi~kA~7~>=U$6e$sMHa1%*!mo*Z)$(qGAr zG_-XJwI0|)v%sANiWfeGb$WA5ni>6E*e>*Bw{{L*E1sJrcHF@9ZQj1azuqh{P=|%I zfPG4D#81eU;B`xvr*-vUv|-Q9M>nbLm2{=2nXit2(^kCY&=D};bxp{DP3JVH*PteY z$$lTLxv>jIuZ{uh9Z3&lpV-K2EKwZr&&Cmhli#&LPgTdbq zM&GwlU(ssi8ewHJ|6+WA%%kJa)B(lygkdY0^ z19=Unone;P0&S9nlYM&4MNGq!bnfA^*(+L1=OXcB@6KsqJgR{ zl@z!~$0K6}{%L?$E(iMXyrjcg>K`1@3B>LX|4skou&_#nbwZ*R`a1Lw9kT8JYVfL? zY6c(fev5NM_rKa$e>(Vu%xA;yztgU^Zr1*eTkr@J0 zYy%&7l-s&6>*{M%;Zn*2DF76og&G1BDKr-tuR|+)(b0L%wZ;MO#k23nwA!K!F4^@a zoNy#|9=grMu5R|}JijV|Oq$e-6TD_4Py=w4`5;sgss)lBO)pYp6|Jmv?d-cYDSJyw zGA2(%dAafKw_{At`7j&YLChd>>cGyz4Oa8jy?Jg$0a!0g0w>ar#i@Tb%bV8s{mulAp>{|!uo;L>R^jSIgG5!of8V0ps|q>yUod^&oo zbN|SRixfYCSQB2l82D!$dC5Pdim?}($YVAeyd5zPlAdIfI(RGToz7EQo}qu$95NiN zF{HNB>$Sn~u4Z0IkfcWqox8Y6rnRctJi~QGw3lv_z&9nou%P9c9t5 z$=^~aRrZ?a!&xyTP_t|67U+_ZfF~F*TX>%!;hHd{@J!;(surxK=-@7jN~T%Z{qs9k)N(~ zohkWJx}1h*&)xUp6stX&7fi9in6q!(gNDn~vpb15siQuu5c~p%it5>yE2yxvleaVh zkRb*0j(?X>ILxnDl27ms3s-o79sgO!h=t8{%Jpm$d$GDPGWaUBT9no%TZLliM9a}rM~3_V1> z!AAoOFF&*^rZRwlG!hx%HOMbgl_^mi5NLy5r3FA21J>sX4F`AhID)Yt7Wx>|i&JK5 zx-+-~60&3W1|Mf~horiiu25D43MQo$jA?wyvuVw*L)M1Dri{Up&}ez(`rp9WokE}9 zZI9>Yr|9+G*7-Ty!-ZdaOZ}O+jY{mgv?JA1Om78Ra5I*}(;I;n+_iNhfhVv1zDUaP{u!u}~wE6DkAFBhz^QHB zT%(sn5lpWc1+P4|koI#J8$6HR_R%LN=kHtOQSNeF{ZTNL&IQ97yeMv!<_6 zSro^6PA+Kf(H00Vq;BXRhRCMTx>0bTC>>oN2AqkGwP=1|20KzCidFy(p`6B0p}Cs? zloxpUb$5v;<5VyqG`~X@+|w50)@*W)#LVxIE|im&leDi8u?ALmDBs&i4S9xpe2#eSmK>({c1^64 z`b`89U1FW0^w@}$-LVCK{%EI+!mt{2H9I$x0UHKL4t^*f4C`E%K(kXQ(0cb8iT>txTU zDy*hE#)psvGFxx8gIiv1#*05Ki04_DNdo9?06+5vY$XbEaK6M!{IKMb?)2(-G6g#o=HJHm$d&kXGQZ%y9gJFeRx@zt-Pzmo z={wkbxEOAVVq*QBpN?@iEz&pZf0K^AuFgxz`Mjt9gj%ZK)rdq(kc=b2A*~SQN!Nrf zhtM5TkOmFqBX9g5odHm*-l$3uA2z6A+*R509ycV8xHtZ>ymXr^1F7l@y=_S6g-WqB zFN*fME{xHmpxEsQR989r{xET8csV&QV(X7j&)*!JI>n1mHd{JjBjgL=jG!osiU@Ck zrwQ@YM_b);$)5oG3bqvZ^z>jpe?q^Vn9dIpk9U|nD*KA3@1=XrBjbCw1}kMZAy6`t zgIuO~C+Bzv*+>f7X~)<8JALdxtKg@C1qsfS2@5 zj3z0ZQCv_Z6jGx~#iOR@!I5#}sxoDgU0D9YrJU=fRi*3XeDs(L$TwHVumfmo=J#@M z(gyQ~t`0ZR16*J~P#{?5fZRCo1D=N8K>WE%1mInma@$!ui+6MFN=GR1KcUx^l*6k&gM~hlAM^M1A}U^tvNU*)I7J z6f(TyYKYf>&%c{oTp)V%&G_(uh6Qf_@$tqe*hs?6Oarp2puLcDv&xvP&3CZ(HHAKu zw(es1aNlOS?OoihdTXawRqb?&+eqMz92oqX20oa?|L)oVmzodG4&GsOfIBZ@#iisf zjeZF{uMrpKxg){9re^L8^v3wLPwqRx7zTP6oTIMA-9*_^E{3Kvr9taskh5`RaTMio zdODshRt2i27l5bq`O=K~Fq>w{VUDn7?#3kh4~LFd^S(-2t6H(~5l$5-_CZ~Ge`w

^UAuoao*j=@x!am$c-vF~7Q^L-r}?}-G(4xDsDf30h~BkkX!J&{cx1?BVLd%R z|L*D{8#ieTup5GzF2XTyroBp_;5+v{fkcH}ujr+MYO=_#<;oJ#szFTAsc!Cvy(-2@ z_PEfAR6KXc@e-XD+(M}+r`hn=;EW#1Mdl#+;WXwTaO`b}b%&+9+mxpY&8H=s0?p}z z18?56)!SuI9n-MERP?5H;eG7hEG4{t^#&I;<(;8gOpH^yYz!j4J(!%noIcmtg@ak{BKqdw^eRloL$N>yKb*j!;fj_sufzsq z!PZR-o1)>Nc3o=otx8NGWmT*N$n zN7ejhj9opZJ3&|w`>bm@8JEd?UwvpwhTJ=HO4(sBOS>qBgO@7m$|Z`OnPyzsWLxon z;fe?1r#s)YG$^F2zKtOt#N5sukQ*emv&J8`tYi_ZcWA=n=rQi~wt}6SxDzta zQ5Sl~-kmm9B5tS#^^b_z3u2jQW|0Q#h96dy4hEiQ;VYXyhu9E2<3;4^E0pava~ldu zBG6o|ikl@iaEOCVmt+0JGdCCPK`1_Y?24KL6UIQwK-_tSo%|-jso3Pf4*=>X1OyzM z&c|xz@?tpjlCIc&Sug7qgXmn*EO(1}aiG1{ZfMo+Zsz>MyHa^?{*j!m`Q>avVyrxr zw+P*m-Eewq_b<;bhHDH;fAmNjH1`wumYAWFxRemW`q^XXQhTEXWuxhOK)A=V3q8bV zt#l_V;niehf;b#oZPd4qC+BJQaV5@?()q~Wh}C1PEoOJni&)*e)rDY<)EIzdi?=a! zI%aBQmx$%&vwOw89tksNo-|XM^CL{ms*EBU&H0`*T54vr`M;V8eGX)FASOB<3c(D9 zR3?`bIkN~uT6u+E-ohh!gb-mc0B1tdNdA`$wAzVLX%y2BOVxO~tU6 zW@+7EY^&yj0uH98vWhnU#629GMtc}0e^D)Yp<^b*P(n0}R8&&>$F(^6XnoRei7t;G zZFM$0l-BRRMNv7n;^wILdQZ-bZ;#IqEKU_Oe+Q5C8MK@HDI36Y;-{y!S0qpuZg0-s z!qvsUwBZTz@O1b12nkUgc-Pk(9ox2xS!0GJ$y;tUMt}=0lM!$^tK!;Ehnt+$F<1zwppf11koJ^-3b;q>YSa z@QxO6!+JU~f=|M#1{Mq;EXmFY5>dwQkRx$^u6HP%RRY)9__DetpUCKQZSen(JA=%Z z8F!(eY^4MWGLknxF64(aHiZr8Y~dzGD&=!o%_;LS@8wusK_2AUJItzQx~O;{LJoU% z{3DoU_!Cky4A)XD8&7`9vO^L+;ObDUG$cw-pxnI+C&(`o2BPSxM{$Gb$`68gBPn#| z^nL_SraF$Q!&6dTeVm|U5eX~^i)Wr$EYUIaR#X;G?_#kh9mm#|u2*(8*0-O0wg1J} zo13pT{`N}Ny(Y$`K5NfZEZ=A_QE&hX>Y1OrNu;H3xc>cz^Vt!PfpcpC|HGlPs6U>L z8Al>Ho>9h55c@GH?LJ0KseLP)Qi(8N&LNst)fldK*90g65-$D63)+(_;KgfiCakoR zPA3@}s%;zdN^llzsp3tuKx$MN&yam~gsv35uQGOD&r37R!`2oRwrJb{om-iqhzvn& zBdkDpP(sDag)4-{w`S2W=Pv9mamw02rzS&jE|ZMD%BwTZg>W%inbBi0CEeW6B{E9b z%ccb3Q$hnKGFm?zw}KilMe9VdflE@T@`oj zt{E0#-;b>q{k{2(MT9PFN_~)n_Z1aY2b>iS;i@WG8Pq^aNU4KSHL|NXwM`hVW0G-( zfhxJH1ie5?e1I!t`o}khGrU-qPF{7XY@v3H0&c@u!tnIVlfON(BW?|6a zf6ULPd;AaA?$z4KXuGGr&Ls};Swa0LscqncKVJ>uVl>3 zZjg>4Xu!2>jvqh@j=kZ00BG7nsd7z?egKGpSp1U+nU%R3-=JL0~ea z(q4JRb{?!9UxS?1;2g)Do+9-3Q>bN%;Rv; zAL>>$yQ|Xu$}~1sx_&8GpNmG#;xM)1NO+4rX^(?oT+R+1gMzboRf6Xi@!$ ze!4A>jFzLs=_D7;&@^Xrq?Ke)bMATRD-l2+D;Jgg+&z=>~j zDc^-?ygS5T@W~;9!Vxa?_$R{*&3%s9oObW(-CsVr@82bMWjefs^*cV}hUN+U^4R;l zP!+7vM@3h}l4>CW=OHqk%0)iIFX%dUAcIes=;HAQ^H1)}kHKm}kMA6nyO?riKcp^? z1qI?#i(bybrqj!}U|?&M6TG4fegIEYd{(}p`NkTV;lXrdT=`L0u! z&I1y4o_F-QU8@e&)xH0mT-a4EgB389wWy1apU^2B0Q~Xg+np2K-hvaq&v}pq9Af6B zC0FTwA3cP$fn~6GkwgDH&(Cv`XaQkbS7+pac{t?HFk>>FeCNY6wu{Q>3P%&ZoWrw= z)i=%`JVJDdls@1U?8Qf<#U+Bwc)&f07fB81cxDA$z8x!T19f36EU{9g@Ze0D8Dc9F zp}XM&bsHp@O+Y&Ln5gPDEO#LgPQTs)=FO7G7LW^SLj@1#L`r}lIc-{4w}&S;@9A$y zd(D1Rjg_{{g+1mVIVh)N0Ac(B`3$RJ$mLQWh0<*_Fy;`8X0se?{or;M*fo*4!E-|S zj^gjpPNPzaNxxCd4m)AOmz8yMtk72T+~lt2c{7105bWT>EO&TuNm&`-OPtwB;dBc#c5p!Zto$d;np!pdM7XPZxo{oPvq4z) zSR&u|bW2nA2eGlyEYa9XtV%XFE%Sk@s`T%(#iL7_Cni=)Eorh%ZW3G^1=4_A5G53Y z3>D9udS!bwl&MZB$(~~Pe5fNF-eAjq^7dT~M*Y0?TRP-4-G<~EGW8mO;U_cQ&*pW_ z(}RD$OI7QSUTYIt1aWvpAN^agr+}CFq7-ZK^LJlQ=>Jn!CImke(j`^#YUWqg@z#b= z^xzaJM0Vz<+`B%WL8Sm>x1Zzk5OD!PZyvULGK(+NlHt8tfVe71+BtfzuJqKHeI}w$ z4=xX&$$s71mM6U=_qnm#y+I{72rn$Vg|7R)59h!tv*GUE4{NVK+WYJ?Oikj=@2o{- zBMLi4oeuy!Jh{B&q=qn&&S$FV?psuvX$GlI1+Kw3Q_EB>kmsLaE}?hcvNSiUAnVn? zYJg7XBbr+6dH`sQ%;%>t5^*;&(Vxqm$oz$OYm3_YS0Kmb!PV^a^NE;rGP&;KS?|cw zp|LeQ3X|TsbTD2A7W!(Cc87DQY_Yg$i3Hz7fAs6KDPpuBD*!P##xfhrC#(uwcLlG7 z1o3o;qg@e(u-%kc#PpU$;})ZsK7qVRN`H~AHUNnr?t|X@jP(-{Ve%Sml+d%TyR5O{ zp7O9U)zE7Rw)^P4j9OAaFKJ|}Y^d`~Y%}!;wve_$npTDIYRD|#TEKKR3Mn(ot`A_I z;?8R9jD5?jY1loxkL1{Ud#^tdBlPZPc(eQ2A710zXP#dKJ3_flEVonw>{WLD*bCA7 zXq1+=%<@>rF(^)ZEcO_VZgFxLv4bP5%ZAvOgLqa5?tXhP`X>^ouf4{W9aR(+MGzkqSt5W9LvF9D$7RaEqIQ-FjI&JOUE(1 zl>yK71T@z8wYI)KNyEl>z^T6BVhQLq!Y;He3_rec4?1pKKpENF zWU$JTvWTECW-`CXmK-Agy`nD6s^Fq2gCnsSJsU z6#b&()>X~H?Akm(o*d?Lzr(Isg+qyY{!`8ixtf{dmY1nSR&%nHBbxNKFsyMP7ewID zuWO!rk`l0HAJO3BgCqDzrAO6#QFN$pj#?PrqrE43oF#Y0Gt39{P*Llv{?!s`?MP$o znm`%RiE1=q%E|f9K9JBLxd6jMjVj=5bmioHera=DFsK0!Cp(er{_E|{{jXl`yn@A! zZFandMPg1d6BL*oV*Fsr6KCsc0*NU=;K+Imjlu9^3SA1>A{QCz5Hoi=S*2av7%jDF z31T6zkefnF$xOz(Um07KccYY$HTzf&08-OuGco-nNT&*cl2P-nWw&1l9}+O^YVaXj zg%)$R_zq-5<$99pqMi557qDhlE82S(J99Zmhx7}9xLUTan6~n_n)emWFrc-ogRs+n zMHA8ovaM$EM7ju)_JY9kH#^>8%*g8>n0B#06TwghG*R9=u9R1zUbGe<1Q+Ye(HsgZbY<$Ob;IFl=bpLt*ZkKg-GC zTHbWh>FCDFP40&XrFrQYqy7rAlq@n=k63FSw}~X${L%GXk_8f%qLn0g?Ag)kh*3FJ zOj&;25Zl7orlF0I#eXp_qAAb~N|3n$s($Qhm|_vu+%6(C)8vsscWq&N8N740ox(AA zbY}h47caM;?{BR?`OEs38~fWEUvB)((P4_*;r>3?c>DY6NK!m2(d5i$g8VRxZa-B^4nGLJ9ezOKd@%H^hA9-DueqaL zQdg99Ndn}_Q+MI$_lyEa@0b7 zjbiQ+>pEJoYC)y#AgF?y_oW_o8hkiZP8UZv%zOK3aM{MtW4B4eb@ zFM;4JEjI2Fh?J>2(aF_*Sm(SQBlbaTP&L+4bqtman#gB8ZYB@FraM)pMvyMs?0;-* zQi+=PLt8~BuT1!gE2)PIET11eCdvB zrDZ9cS|N`3pX(LQs0ap=)CUtkcE5gjIKIHW_gJ=3L3zS_W8)CM^Nn9O!t9V146uWW z6WrN}5WrNyez1?^dzg6X7zK2fi&O54#$j)%Y$Z5Qj=oa%q?P`!_>oN(`-0bXL1l#& za<}jl@^a8e=!RdkaKN8dq_?e`@Rq@PPp&r%v7Q7aEADBFK7vX32dS9SUEm_D}yM2sAgR9U2 zH)~X=!q|V&jK532`kD|e7A)JtYsiA^B9i8r z(DXa-4MY6YwMM(zM3ZElo?+8xBw-&Ye938RV~C;)a&C zRE4(J>)!WJ-dTsEZ%AI}5(rg*P=n$vuaB)KWl_ekNNbGjDx99zan+Y3AdM3MdH)~s z?*RZY$Uu7pgIex_{*&mb;2Q3p7Lbg6SID`I2y4v9;`Oyw^63C*As!{qM+~=S zpYfinTFnqB7hPlVkWi2jRBz|kyunUyTnJ9mSTgEn8t7hwHn3h1h#t%GPU2(TvC=9E z_Oif9(I!?TvpJ{(8oP-i-dMC&eCI*N`^K&Fv|57D92Ei+Y=3J7ZI{(R1nHWmT_XTq zI?9Nr(Hq81m!?^Yh06HAD}O$nAe9!bW(T4OFK)r`E{Vxy5gM`Jerznw}1v!oC@Ly+xKXSRM-Y!DSEk3>aZse zU?#eAd%lh))5Fs%oM_}nvf&-_e{yiG z5%FN>$gouzSq57oGz@oau6?KhSSt_Z%s;AE!wmj*bn&qdx0cxn)T+6*Wn*D(b@VCGgPvRLO77wy zYS19b!U@gO4t!tdas|pr6pT!jFz;-WF3Rs#waw$P87Z!|FbUCS`I<9eJsJ%0gO_YH z52bI+9Q}h~4Vqj3w;2nE+3@p68j=51K*La20i^N7F4k{15?t~2D640sUZaNer3Nre z+N9d8vB63E2ok>R&VBu8UGe!R%QHWVEF-rQc|Cu@i(S7ynC@}<1AI(GDjYM-;o+aC zm%^Ojg_61|*)QWe+AEr&gk%-&r(i6$bQT7`%*vK($Wq0rNOad-Y)^ikd_KqSd?+fRfMk% zr*WvLl591@8;v63kSE7i_fohbP5_au7y7J_@z+wolJXvt2(M2$e{rXhLV~2_HpcP- z>273_9#3@#nBSNHj83lTzTy&Yx405$j8d;zMo*7EM{>{u+{FN!;sF?tnFK|>HS~9w zIC!j-n2}{|uNs_Wvxx3u+q2uD;zE>jzg|HE-yg__4iw|!KQnupjU`7Z(r0014THc@ z)pJhd?o)FJU}6|dGGT;J790>s%K%#dB%o^WdVPYlvrqm?DTU@FRoDj~|50qdP9Z_) zBgwl1oeNJj4qZt~wtxBaElruvXh3;68VS3I%p(MC`~}EcCVkZtCtHnAcAJ!(L7O8W zr@nPCsW60S;x(#b>{?-` z{tfIw)+cMU;0p$wvoE?w)QnDbxSk)}2xDB#7!CVL2RM!JRS$?k4~dB|j1bd?ljOUa zpN_{Ds}CRWk9wop(9OCbhg0n^VGDMJlO9=>JUFZ=2@DXr47qiDA?!!z66q|VrMO)O zHz-Vwrw5l;v+>&C)d}uGvKtkU!+>)JZ&f%un8LOl;Vy;I+2rU5&hmrHOPC#~0QSRG zH@xO2UC}T&IL4ut0j^e+<7~4_xYhv{oqdN(a_}2hec)CfyaHrs+k@}YO$^jX7^D9H zfxZAcw~oPkPn;KB83gu|SC)Gu2emliMgIL#sa`dF-Ov;xBZciY3(cLnV0=VsPiE)H zlP)>xRHVEcT%-bLAH8INTc4^poy0}AZB~lsSp!9S-FRJ` zZ?QsnC;KJ5?#Cv-V(WxAK8X==q@F~u7@pzr$G{+*NtlS&Dk0-JZh7V9TVRoK?MrNQ z9$cgjJ$I%wdCKVw-q21MnGuw*jqNJj4wj}WilcMQEt{ov0E1mm{?)ngx5;s^rM7+A z;sXxy7f-w+7gFZ7CDIxLfaeX7olwbqj7i2|*Bg#KIlR0Ur)r}e++~_ZS!b-YF3XFj zq6Ak?d=c0bo0YjMdNx-yKPW7JHEtZH&}bunc5G26e)PUNc}Rbw(s|hsXyug%Th=(~ z1!C}ivU3LcU3ve834;i*EdtyDo%zXwI-8xp<_sdnB@=!*gxzB0EE(~>rX`*G@^-Ix z4K%QxIbanHf6E$uV-lKdom&HjtS!uE&C!l)u-wghZZ}-^biRd&@Td34`#Fc@4IOs6 zkE9y2eMaEhwL(L|P#27J#yRfHM46CRZm+qtbxH$W*5to3nJ-S=oBBlQblKCa=fbU? z{#Td(sq{N8in?is%Wiw~OZM7|FVSfT_?C*MhTA8C{Z4~jv?sh-aq#akvNy;idSi)> z<5;%iqznqSX1SbRbLH~<5_2-xEjl)rlr63MQKeK2ctK<-=_;Y4r_0%4+ZBIK+8?!+ zFCl{>gW&;VQ|&V*jwah@f<{Vp=9MHc%S=`&zM@N?TDaI({_odW3p8!|vI?2_ET1ju z>DAfAc&154^|u=xmO7M%x!yaHhae>n{VSFtjHX%dBoR$E2Mu@!S#w-8Hr!x~qsq2} z#X(SD$}q+(;0)C8M#M-kOpqQV6<-52n)7Z@vx(8;@sC)iKm~F5RU=3v>Tq*OilOmR zON@2MmjcXNW=ZQ4Twc@d^=A#qejf=UN~ZKF(8`8$W??;rx{Q;_@{#1B4C_eGRg&S- z`aUS!MM@vho6HclhFQ(KSFQ!r%3s#8r1Ohqo5c__MS$?srg$7B2X}JhW+6^ZbAq#n zr}T1x(Edz@5oGFoWl|810u|eK;GDX-Dg$yhCOok|t#ZOc?UV$xWVH4~FNr}Fm{2>I zH7mF*4Z<1ep(0vED{2ogC{KLzdn?VNqRI?EAqyK(y`<3LtwAd>iyQE?e(7i{hO)4- z+2h9g%M5y5$JjMa zgKi>|yOMfPu_-5#nI#N^Lji|u9nhlb?SM0+=Kua#*Sx` z!&T&I_e~G2phrPWU=uWHt}3Y32l@QHr^-@8H>tW>>F(?@&3aoEmLVH-w@i@c;ntDv z)!x)Zz23Y$$u64j)OWgqp%S=`8XK9%UV zYMW&3&fauy>eFeX&ffHn#MurWLDk(NlKgT@Z&cg(5sq97t%lhTXQi3kBVzRDAgu+h> zz;@tM7uaI@D4}4*8weh6+RI2Tp)zJz`RIUkQs~!d27MLe`@y-YXS=IR&;?=gb6n?) z&~1s6|1b39zbFtn_pRiyqx+Uo>p_q#A&TiErCBs!R3X!Vu_6FXA@87?3K-1{NHyF{ zt(IYxqhU2lE)!>aOlW4{^_tp(+hG4=pnTB~*D6##99R6IdL4oot-k(MN39KEzI{DA zea>y-lz0oYF;iA<1;zs7l;oCdg|e}DpNZEGLxN!@?j<={Y^_SKjLyhXhgMy__O_}l zYaXh;$yD#uNjqs$4Orr0Sq1XF<({8IIYnVN7uh65&xI#-U6t4>C${ z=%lw6c3^0wU>=V_?Y<}Zbb>0`37dvgRK_C7U>3I?E?i*R8(y3}Iy=B6oihxKr(4`d zfU8ygV{kV%vx5v{O^Yg7^gy3yGfnxbKh(vR95efm6X+?pd(9Y zPyUf7<-LyD@yh~+FU|-5<-8$NsqcSsr?ILeK5GfSx| z@su5UAfW0$m{vzIK}Cqn}L2quB#h;B_9aeApE6EHizorg68o~Wb*mUFl?(wT~8V`TK2 z;~Epu*sCiTuj9$oH3vAyf|M=UuYX2}vQ00DR6bSZLH&h58Oi0v8FYu$HiO z;;=MXglG0rUz^P!l`+!q593WgTe$UaVBCv%1igI^63P>7xY|N*$_8^@oKNetY>sZ8 zwHH$BZ)Z4qme6OvNqfWs|9B<|Tx5-p-}|&~_92{DR=UbqOz?YyJ3CVQZ_hV3PLWD@ zdU@yGVDs7Mc;0{Ua$|e@CH0D^R6PR783Ij-j%Q~*m2JZBx}geMx0k+2`}WdVsUf6B z9LJm4`FG>#+F;d}I6$96LJMK=Umwi>>#lBgfp9w6_^t|i!ZEn%^2N0#M$Ip@G7ZQZ zE-*I9;%2ztNt<7e zUmR5C${HO^QW_?OE;Hl$rh%p_emr}AaNR9sy_&XV^@|n;>tL-izkK*W+rUWD;gOK!7oC?8&;YFsi&%<3 z>@EJVEbi+fEsrjs1@-3K8g6gwyn49yFM4z`f`tjJ-#%XO4TqQXEW-ToYtR6^unLP7wL{3?=pgf>K#StSRTRJt zNg~ExX6Nec>;PV&PBGkK!Ve&^K@+ZTl{-Ghkd2Rw`){qxuP&GhZ+v9dJVjNATqFQY zL%>nQ79y@>8zW+6erdH($$G3G!>3ht1oLdCA%N03umNw``7r5gnG?Bk){Xta2XnbB zOalI_WxB84(Yu9jT&tcRo}bRSZKETTZoS3S-bB}3Qc8>5<3yX?7G=URi|N=+aXcL( z&O^LrYQKn(jvgx~HR!QBw1{3T*1$8S0)x0w{bNC&SqWW;tboUE(*Wh_FB@iQVbB;! zg9vtRQt1C-?_1m2x{`Fi`&TG58Hw0{?Ra{onZz~*5_8%ebHGlz2OJ&&0@MMCkp#Be z$^7>7zI9o*y|)lH>2%K-&vek3X9-Z$Wb)evdH*Z0H7K zKp4#*udGBho%4#8fC{#V_r|uNq6566I`RrAh?STdj8|Y3S{A^<75R~q0QK-=5 zItD*myHMx7*i_=FuR;O=Mk<;qh7j$^AxR>b0#Z=KBoug!JyWwpv5|lltpPN~pEFTj zv6)2GNPW_VVm^p3Ss)2{4RYiA{0z3LW*z zCd~+}eNnVb3jUzy2Ie(GZzil0z}somke)1=rfvec8>is@^;V_WS_^g$p(h^x20#i}H1ade z%~%AJk(*S0U1Tb3J<~`W_pan5ZX=BPUBn4e`Qqa%AcYkQ3Hmb3&|>uP7?_NErB6T+42+w2&^6kxCUGRpULO5Ajsif)2a-_359peSO~W!86Nf2_{PjTNF~aP zJ6n(LKZ@#VEJfs#|NA@i;>2g{^Tv2T8wgE(kq!UNr7!9EVsd&DLO}&6=&-f8wnnqd z(&XKQ{MRgJz@ESwatmLSj-g{pm^kuP2}Jl>QU{Lu*b)5=$zk0fC)n)@VXU)ln)<C;+C9`F96ZI+yOznz}FE``2VvI0GcE zjrVMs#FHzpe*RnEg2{SuZ%UVz8NN0W~dG9ER!Chsbb^-Ji#p_;;BVJdqb> z=)0kM=gp9%5jdhN&9diJ2UFEKG;Pr@aJhRfp>5P;J#j&?aT@mw{Kx`Mg*`0W4YlgZ z+T?8~-HSv>o@d&BG`h$*;3kzf>jW2wPt$(OvQ3I`S?*e$xU4WuJub^qQ;u??@w`}8 zEpEghhsGruMAp5%g99Y<6`xOl8-9C3Bxe6ZT{z zu6+QDDotq$glQ#k@QR(Sdl^|`y?v1B4Q!L6iZb_6zxMvlVXxb^PtuZ9Ly9w78~V+H zkQmO^=4lB`JY-P(7+rvn;`C)Ss3va>%_u%VCHk*4DP>kIc17_Ry5K`>8c#`+i9?O` zgtyC3P0x+3@KbyO+tfXB(z29@9fcxEcPx@T3bmD!f&0yLCeFFWnU-|f*g%+kUH$N} zsrr`6=!X7hn7}K*u%>6lf?M&#Mua0jN>Pn&pgy#u1c&r)pY9p=$NX1RIo%K;ecH5$XRS$c3)*OafP3TS}1q@pC4^pj?}!JtN~{ zv=8n}XR(pUqh&E&%hoQ7$`8xRzWxTO8tYimLZy3v3x^6P{X?YM>0LayKN-Hn37swi zk5f-=8)wYL`O*IRYdC${z5hy|PAp3Cv3xt3=(oo#cxIozl22#$=_`IhZYC}G+1Hfm z<*tO9K_b%~=pxVYusP|SyG_S)ChJ><3Nm}IB<>XXM;~a254E~h3Zz(_wuFq{k$CwS zG>T&6Js`i34b=N{f?%hJgKWP?kQHJfrD=|Hw;fB|!S&za=?)?+jTnz;42gXhbka6t zR;&(LaSV&=WZXu5uR{Q$dQ=`OqrB2PIXFn^MKQuJFf>LB#pc%n zp9eTPh8&f#%0*bZ%9U>ls4oJTYz&;<7e1{58AZ+1@d+s2(4rK_gfWia_9Z73-)cdM z1x^@Oi@P~6&S zAfv5+-hG_O01}%gXtKfJn)%wnwE3ZKI@h!}9HTj%=eUclYAvX08&2SK)I09NHTF?; zA&GxQdXAH0H?`I9GckN_GMriSxlpA{NlsNz3{ofxIiPE-kFvgxk9M z84OYdpRI6e@L6jGSS4IZwm!}Z@(q!J@TCjkv`XCO06ZdxoFyuIdK_57x1-_Zh4V<9 zps*Yc1S^Z`XQ7QGI$ppZc#?B5X`1)i`FI22@(bI@h83Fkp^+M;4aVyjEwENevEEun ztv6lsgta}qZ;U0beqeJ8h!r9~z@Ii3Jfo}&)l-cEB)TJ)$c8PkU05z{Vk%Q)Dxg6f zy{}-!)`mKasmeMB^}^2wr$ux38(!pB832;MeHs8D)h^BuBmy&sup!|H5uKS!ffFz0 zov!01m0rsQqN59Y}^yPJt4+dP?Mib-X$trz)_L*8BzFR$%@8u zLjKp|Iq`a4M#5bV+H$d;Ak?>nk+q+~I00nioYAPD z0x((0sV#9uW=3%2a*hasTY9q9j@NS-=HIYsM?ALcv(__M>WC8oVR1VppA6AEafh@E zeS*G8EJBWi07;z^s&M`;;nTa^V6_@*ymVV|aEN@B$QQo}c^Ov!)_76T?_{S`r%s42 z2lm1&9rv5~C`{(oSJAKqWGa?vx$ArG}t+H*6G7L~PlVV(;MlKsq?_tY(Ihf#HMQKTxka0-a1p4_uTqEsecH11i?t5+F zwel{wiVj>qO8-_`wMwS#NDDz~`m|*A+m9t?AYm)UcFMkiH${z-ipd?zhOw5h&p1= zmL3k&SKz=d#v%LZT4;yMJSQS~qJ+PVX0^%0H4!7YVI^|FP)Al{B}@_Z#QD7rGu#U5 zmcR@6a`z==TL&4Cuby=Fjy^oN_vJ4OoxP>Kqq_@uk^hyeQM_Xe!PC8^kfgw~_qz|? z+*#`Q{@-6d1lqyO5+AwW#}UPanzCQ!WxsqgrR<};?4wW?GSzK|wk!fM*Km?tg>?`# z#n_mc{2~0T_Gj`UHKRQMT(lHXv-+KBwe>qkaeGGM(j;$!j*>00%9{>ZytOFBq+A)T zn0!j27L&IyJjoeK8pP~hX`Rk2{>ktFkYreR@}NnkTFyf^@iFNhPu?w;#PqDBW#VG; z2$AnpEN7No>LPO-i<4OJoA*xCz?0;ySM2EZ66l1eAdc*C0ZSWcmCKotRcJ*hC9R!MNGK$j8~e5S=DjM`rY%ju&Gl@+ zH4BlqJ*A}`A688xVf-J%K>@|=VB*wVI6J*_hz!qOqu#e7dChh>lO<wfth(qEthRiUQf#CCfjqwYZQ}BBQ@)(_|9E3<~ZOmi8i z^zTbJA#uqWd`Pmu%q|+Cl&@E?k`A#Jhl1Vc->PHSj$Rmq?e)?@Xn{pJl4@SB=FbdU z5|uQxKBB=}5gYAuc&5Brk@Ztv1F*^Cn~WLf1rWuGa6uH706e;<&5DQL zYR4?*9-6k?ocOI_*x?$}a>zB;nQ~Kam+s&e0!d(X!~p#A zE}Zh>1XKPAcGp}>KL|Pe5GOW`=fVY&Oc^+&bIh0);25oxrh;icZ+nnkmR4-a(4*>2 z%KUOGY-L!sRI(8H5HlPLyG=zo(Is;CO>SgOCM$6Hxp zzTZ(C62EML5Yk!0cnno^JV48z%RZ@Y&2oe#C zbYx*ID@C~D4lY8;+0r}ez*hpF;rNW#J|T$08h}vYFLBx94EJjhAafsV9KYZ`*bfae z%;50LGInH*MH9Gp7JgZbhq9L@Cx4q$zNvw8n7HU3;`$z6N)m%$u#}gSI@rdD*p5XZ zN5q?$))$ZqYL;ZEYbTbo`qj(kCj6#AAyJ~xnc;Rb4wYR?MaJDWKs5su@J6$#Kq0Z1 zRrE>87hiNV;0i|o3Myx12TL%PQ|IN`r;IBT93s!Nw=z<^2J7gKV}GeL?_LreT@({4 z#0rQ;XX=qN`=BN)+ySCG=SbBD#CAyN%OZ%q0fLMjs(iDBWoXDO3wvkU(t-#o1O8=3 z6bDY1aQo+4xG02d*H4)u?6}<8noLsi#X(7$tmE!B;*Eehen{|q7BY$zV~f&rMybHo z#)3(QlI1c9sOA6)c_{2TcBP>kW`l^Ybp(MnwcRt`{-snpjoRWslaUD(I;l^a4Si$6 zMPf74hn2?B)Xzhkl7Tfk<{y?i`39PXyPIC5Hf0ku-OylYxRzP*Hvc$G2 zT4E>>m5U{k06Yh);f;Hov;G|xxuw*yXMe-x z4}}fWi*ZYnkZ4hA28-_2*(EY(?&+VTH*TxVj(OIdKvOseQg}Wt*>)U_^(vG29?J!( zfE-R+FIHcD^K$!7p5GKXO26IsGq?&oubn3=SS|c_@%N7o`jdqxKcAjno&Ss%X!U1s zg@wi4AD7?UU6_XhmRld@dUoal-uG&o#J#8=#R8H! z2Pjaw>rIUe1$Uv!hom6`A~U(M4!F%{;Ru$Du{N<3NbZ-~EZvT|<_!OMTUe$J8PESd zc==(_;a*HOSP>GcEr)4}*z_l=6}A~j%)6QztR5vGDZH}BAeHu1vzo4sPHLT$a?RI2wvZG6^hIU%XOmB(x%zMtVG%?f~QcbjFnX3cV?9^d%pFlu$kE) zS6MJ2I@7c}?ce>_+5Pdq?=FIsE`2foJD#j-(?eu62E^mWqc}q zu0bVfWTtVpIx5YY$NT$77%}0druPkx+^0N(SnZZ;pJ7Y}vAu0PB4!Z2m@rTzpr9E0 zk0#WIeke`Ie))Tg!b0(n#IRY-(iJLbGXeZZb{e-p-%*C-ra#lU_$9ys8KN9!6~=Gk zh~=jf1KOxZGH`Oj9QJUM1&Y~u5JI&|6!?x0KrvdO@6fr}!{yU3y-h`&3jEX|7fcBp zK(rU&lJ+y%{o}8#F`&e^`^HGbew#66f{`Vxe3C;o*cZ$i(FaamvH7z8=Gx2ezK@L6 ztP);pFp)8Fr0A=?x%L_uK!P};&xKZTFo+lXc<)WnJpQ4ko1z$?8E(NOc7q~@?)R%D zkv3QtZ0{i4;Q=zJBkoeb5$Y~J?!&|;@AT3Nj29(I|A+AE420%|jZ4H}r@j0mM%^;d zQs?X}eX%gVd``v{uFJ6KLSjV;xDa{x0EY&F8ad>kZ6nQ19l$Mj`})gQuQt{lYUOgd zuc2naWDX{Z_IZc!0dzA4UP8~u$>PDz&WpYA7YMrCy}$T}C5WibZg=r-Z=OI@F$5s& z8ap}xu9off^aY|VaqhEYHfI6AuEtv8&>$7P_EKj!LL%q*X|eT(-*ZR(%e~git&Q(6 z0-x9ZtBpUu!j~L47l&Y#*Gx@jw6{YE%VC>eLK}E4B0D)qc}bfd=#(W<1H^YY*KsaE0tw_`q<+CT!j|2cbBzMUMr6S#-l}0uiMno5 zI+!wolZZQd-JM$0ieiOtmB!hQ-DJ1uGT#9uVfEKYALT+soohE#Zn6l>OdN<+Edt{* z-bT~aqUEjK4~jf9n8U~m*orJ>-=AuFvO&~XnFPG}kLciX8E3TbM3{;y0s{~t=WtSl zHzfz#&kpW0S$n?!&FdF0$X0Dq_*d44)b|w6s;L2XG6cy8G-FM;gNzx)sw4x%D}@%yjv>fxz^1;}&#&$(dICx? z{AM>V0ScM@aB76-nixb1BViHJH)C97xh`=v)M^;9=1<*0_e8F9a)N+D3Y8$1NaGyc z$XFy(3spfCW`$fk>*9LF#GIEjlf_PA`6NIyw9$hXdJ-c^G4ygB(=g-BmkILq5fi6S z^w7APn8>1iM;efbY3-GuJRKqmid&60uUg4!Q}e|ukz!5>@lki(5%7aw2KS*pWbsHIL>nX+`5!j$pXk)woWSz8$*+;mz#rO=2U(D%l{ zKpLi6J1!w)=jx&HxK!mlA-}c*Vt3-t1oL9|GVAJUscSVBi@gD~Wrxshk(V=eg!l|N zo0Uz1Sl9(OP=4WN(c62Yy<{sya;Jx<+3X#Ojh3Gjg7eBu!ah9C zE*}9%*hDCGORc3Iu>J`qrNbxf+E1mo@K}(P_T9v~ky0yTK@oIhNOg--fJ?}nW#bB! z%L6$QdI2HU9194Lz~|<6peDb_d2Q#1QC|dhXdkHpVQ3RkpWt{hkAhq0WZ&F3=1}&{ zMtvKnYf`iwTdQDfr8$QSaw))zIogL?h!KacPJvYCy~*kDi0B2!_^8L+u1EJ;6qJ=_ z-oxC8YfTWGIPT-3O}Q7=3$6FABA66e-?mPMgC3Nzjs4d<8{7Nq8(Z5O%znBKtnta2 z@40r0f?OY=zX>`jIm9vT;8IPj=lkFl3C9dR>3Z_L?+=;DE>kR2>J_@fwCj^gO@tHB z@qgQ&ASD0b^6)3@;&A0SjPR~dqGNj__sP-YGj4^K0aJlT(d{)qd^_M>B*~jV9k@g( zc|GZ#U|z`!Y!L^%mo|Gj8V)C$@UTq!$Ni#RT5r~1RHL0KIv+8yl7P#*a+AZSzxy$q zc7Xp=p|H0!9Gxt~UQfs8a%bu8lZ8Frs48ZA<5{qvfnkX~12|+aW$L6zwR6zQV_zZ& z;^&9)v)+97S|UN)VH_L=Y-jbGEKtRE1{z^Y6cf~m)#I)xpF>bgZ3qn*UXDOtftRDX z9XVcs7#;+oBM23~ouzCj%ec)G7jqiB1;Hcpb2@Qkdk!x`G2WZShjpARM{h(?o<&(% zk#H|QdN3kJ0IY^lbpj#o17y@@_#L5{O&rboL0|6)XWEf%bYBrFIrqR(6yIo{N-ooN zrs3tcPE-17ngL$vi>)V`RA;p=E}$k|;|uJX zb{Vg@!;@C0jDZn0

zvJPk8)tO#o^*k6wXc#DA&J>sZf6#QGCQP2+Z%8dCroiTyAM?E zE(QdH12^lvhMLq6|5+#>cL4&c@E+~dQmS{HQ>7@UX8iRMyX{F|&T9R=`3+Ewp+dNd zuQw466)}#0@=r}O3{+JEy?oXISUyz(KeVqe;dD5^V1_^(*U^^iaY(9~3tUzr*URcF zO+oKh5Uq{!fO7XYSQU0lT;<XT?%i$emRm3xgh#jwoLAUFPQf2xLE#0)uY}2rg|hA7Qd(A zmNYHH7QrJbI8R^Joh4Fpz&y`QmIuGevy?kO^)D`Xj`Epnw>a%OX&tGe4^p9{219{Y z`v5yLZZalNsLd;wd%C&jI)}L)%`KU9tqk5?Oh%W;{c&^Cc->xS+O|fHgl~<8$Z9y= zc!&KLT*Ae!NQ%Vs&vjq11)_Bge^|IEQSO}beHgbNMFroRWm~MKomIYfI@IQpJ(2R7 zgY?^x~nv-XaD>;=A4 z40E2Z_2hJ~dxj(eSp&eF;OSQ`EsA}g-hON6P|V2U5$d$1xy7r)@#0aRx2<6VBUi=c zuDK7pKfKboa-VH+NTdf5b|>xhp9K!iZ-NH|5A}5BqxiMLBIS zs{Q~8z51{-q3afkj9WX^YTpZ4BCjXUctLAhOd_z-s*;qD`F&c9y5jaGh_j{v~?;U%s~mX&$i1$?j)AlNHt zqwE~^#1cvrQv`a>wl0Y05z;ndeUQRA9k>`vZ zApS$JSkFcSi024_TSFKM5g&65Vp(tcj?pFI3Thn*6C>bmoamzPlRy-(B{V~@BOAcwU`>Z9$86H^V)6l9 z!*2&F85hi(jPr^nKRdB))k*>Vl~_t2f769kl z&HJ(59}zc9ZO9f}8QS9Fd7rjquJq@;+M6&=V@TrS^uSF$CjSQ(ki|9cG z$oG9Pf4suBK?H{458gZrI|U9%UyCd=!e679bl_LWJ`;YNok~Bkz|11~TnG#HQ~FoL zKZf}6Hb$LJu9;w7(bxv|WOJ@(J*w$|k_W>@+$TRAVey+7PuR|g3%YD}d~w#F;AAK- zF*U|ymXHvn+x`NC!wc2fiR)M*j^cLGUyCPJABek@cD|VbFUkeq-WRRA9mb@Ipwmj| zK@G>OZDXy#DX}42BpkJA{+|;|ZB4=MME4~Dxk?b4roe?h^;TJOG|>aKy-WNw7NC0oG^<*# zDhOUohOf)1{L()(0m#3jeV?>9J=F%OgQ>8ZY)WUtlh)z`upHHqzyAF5?&KP&lL8Jy zYEX;-Qc+7(q1%JerS}T<(N6nmdnr?x?uo`13j8N@`cC`xt2I4->T^#`j%*j<9-`ED z+J9L*Up#6(U+J$%ntzZ+MH!!p;R#DJ)RqJ?DQ@3u5t;VGjh}{MCPr-0>v5HI<8zSJ zHaebKX$nhIk!tps((lEsb21%1qW@qfY(#R=dx_kO@TdS6SaGW8i4sCrpR+8mtwsWg z6hYfTgy1)I*^C?E)KJ2Y7NF-HkC!>1Wf3a#x_#=N0P`v$g~fJFj68fJHZ&=NXl;VD zMwGC|6lgyS>PiE|T|f%d{b6>PYmG$U>(A~11mIO`@oL6Jm=W~aTY$cGjs+;P;kCXH zNAU9Vjn(y5BE^MqRfvlr^^o}sPg-Bd3gM5hAj0aA;|(VUp6Ie^kNL{!J6<~JOO>n} z9mck9hF@Ns80Wub0du;_K1Jo=SFwtw==;0Qj}R2t`2Vc_^Plkq7!09}^%kBy{dsvA zFZP!7@9E_MH`vPyzmqeCvMq}{12-tzo;I3b3M-UXvb6CWhza z`wa&qs%b^!34=QugT2X)dU5d-+RM1bQ0HP^`7Sw#x8`yCJi<6{8e3Cm0Ct0FW_ewQ zyIGD>jrLxFFO6x>30ASfB0J53EPJe?{8W>#*pt8QPo7^MV8!t-gwf#5$C`QnenB(v zkZ+F1xRW5W5(jaea%&*Y1olkW5a#>iEqDxQSTQGvP90muSO&DL)7Nj;*pf3oL9U7a zR~HJo!~&Rx2jKAeDIQ=oTv)-;q$Df{b%eA0ybPwwL$$^iL0f^Z25q*8&iNAD)QTt8 z6EITcypQ7NG&;v4O`JW)gz`KDg{%Mc16j2Yp9-U-1=_>jzJ1GhBI9^s9J7%m1zRLj zFG8knMMNz#HYCXVQ3istzcg-RN+5@8+S#EEf=_7_r|O4tC|vJ%NWfeD{=p{%i{9nM zw~jnM8)eSMPei6!YsWp<*GjX56eux{=8Iq#d!6roH5nhUEZErs=w}3lbQy(dFk&_v zO>6>KR;81Kua}?1wo^OFT(ak8gDFGu=_g1z^Ejlgv~8V7;6Y^A&;$6?jpA;IDYyh< zJB9#HwC&#mCrLqxWCZEZQ<_MP*P(a9bRMB=s012mGl&hHBxDpEOQBHh1n_nF>PsD5 z?X0zW82se{G9*SzHjtn`y6a=$U(*u%O_~bqnbY^Qmzck!RSzMVVBS09Q(wyfhD!ld zD5%k7>0(#HvbbnB2+IP?Xf)8w6n(a8C?JR>tU4iD2Aie?8(BHtB7p1wZiYO53ew3I zv@)~bKH$vPVOAEgW}ENL=+#TN>I!=zN-AzY_>SbC%*KUlYrnw>HyqA@$wZ8BI6C|G z6pj-ZV2h6=1UoM3R-%+1CLfPf@H|V9Y95961UvJu+e@G(w~Hi(At)Md^}rx%&3>vU zfNelfmNBqcMJ{2*x@99_e5+*UG+e+1PJ_eY5u!A3anfhhHx6*m?(ZM9wz<^cZ=n4x1_o_D}W=C~XLC*R@2v)jL+x=x#B|gb? z{OJB8nTe&xUgKz!fz3;-i88(d4;B}5;3pdsWuQJ(5gh)|v`YRR%4IT{`qjBM{_#^# z@cbNE^ugDr;TwuH&0`w2<#S7LLMMbK`3{W}OZb;JXX-DyPw+sCq=wEBZQX|Lu;WFQ z7u>C}sJifpW|Z4-2=^$qg)#5@xy(pNLB9u`yn?NYH~^E%EXAJ%+m%#FO!WzV)D8{f z2{vNcpg?K-d~E+e8TESj8FwB*5eZ`z4JbTC`Gi+8U!jI;0R@E{dp43fEL0{X!d5QB z-E0zGZR#YfP#ELvbC9wB|72snseD!}b#3j27V5xbNOOT?Kb~#Sy!+$=hqEql1o-O* z_nDgK4q{Y5dHe*Y#4Q}rh{o{HrbXWhmg+S4NrG-Y4Vzdw@zyzs@P^Z_auG>(Sv{}v z9bzQ6FcbRJe`&cMknm+7rfGTxJ$5@q8;v}|?As3XS+%j)K+}r5B{qSDzjD4OAp$;& zTUvRj>^Qjt*MV62DmY-a<7Y@N`qLRA*TPWRC#Q)1K`gyw(NR><@!mGFB(28SV1W`N z=rAB$U5X@*?r7iTX_q#xBYyAztFPR%$hTEaN=1y~pTm4tk_rg&>8suL@Zhhod1d$q zJgO(fn`5ANTwvj^Vu{cE7|1_&I|epr91s*@<$|Z0D`YelG^;!FL4aW0GJ_c$8+CUu zdULz9$>obF`xXdI=DlTpADGVemNa~mLO1lpgJMuxaa!8KVszKPcr@fmFyL?fP^Gh5 zkG1|*tiyk|AZxKgCzja6evP$W8W2w24jIUe92?iJKWk8?oJC zW3tVV02McaHaz#HyEPl1r*p|RL})`;y+znH?id)_1zUU`L5UY`TC7A;11yK_eb|1tY{`Q>{(XKBlOvPIdRgBZmMkWLPSi)z4*9$i9^#P zTp{xkS*$~JbXcbpou>iIVlGUQ>4^b3xZ6cO!7JNEd zd5pY^twp!h`HJp}#{o-$7rZA)UM`5Fx*m&sjlNt_hLZpYYBfR5BgeorIT={YMwRf0 zWhE>s)4#RV679bZnPy)?8UkPRv2TN4CpdGW)}~nfTrSnZ21}w8s5SH?PLpVwnUa3| z^WwHQxQM&vz-&R^E3Gf?Gh;MkBpD5C4G0+K^8r*mo(gMX>I@4(Iuah9tY3ee;G&ud zlCKiZvZ2`tEcVur5;r=5JyaK zF#U0#c^#DKTIaA|AbK4wAiRiy;)jUg2fiT)9Z$7Xg1}%TL_nCC9ncAbO#^u|jxvRt zB=D)H)zEqhijC_ANC`fD4;Xg zSUoQI7XMDW2`M_CA7P!&&Y(nt6cBTrU5i=nKroI1cFzU>0P zkfjU3{Rn72=#lVnPJl>q&Y$FjJ)9j0%X$yGrxVz2TksQlZ}t+Kg&s84I~IWzvEWWf zHyGbp0Ey}h^-4nmKQXPejD9tpN*E15t`_t=HY^_HYd>kvQFcf>AW zLWHIRQLkgT*LsLy2H`GQZ@^siVwSWM;hoI=7yuEL1x+LEFHSw^6tusP$+Ftiwty*b z$`%t%LDpf2X+R$?f2uT(LAxoH658cJ7@Y4kQdfOY5Ji%dZbs;0*zTx;_PX#6eWdXL z>mQoL%x1TMhf!FxJ(epO8s<*sAI&QMjbc*X(){gwp}LD#oyLSaRb7lNw2!SIUvVdh zu+aX1wg_t~QA)B3+^VvemkVw=wCnpIAL4G?R2rnkfWh_3 zDpA<I!=u` z5>*a80mJjSLC+{hgfo5-8*f?Z2r>xM&IL%_N|X@fZY{1u1_eFSrcmkJQ6Ul&o3J7T zoa=$%r*7}Vqwm$cWVu(ngHc-}p>t+@w!3B3Y*>p^&>*5^hf{Eg6?jS6m)IO$;QYvQ z*PGKDRlPb5Tl(A8RyS(t+k371_gepIXXbd3*@}h+@$xT*E(fu74`QpV`mdD!QOIf? z_Q+q}U#7Z$C7F#L|3~W!-17DH+yG{fIf-v&4KP}<@uWK!i*1VG!>UW%EJfzb0e;hh z_R0V~YBL&!_xvOrbT_IK>kh&jL*6Q^Xk;Y+^U_sWeB6!W;r_X^RpmK}x`^KSsBBdT z8ljVb=`mamgYah8SJa05b%7rx)&F?E{n%VaRjuB{pyG*>2NPiDkK<38w83pKvN!Lm&tRvwdu-<+5pp} zww@PllJQ|?HVc^Pvs5ZUJ*`t>M8t!TYr^+9GksK0?rs#5;>OCeBS+GAuXfzGQD@tGnT&mKRF)ApdZ@ zPl0~Op!L7WySOrOZ>ubc(n&2}Go*05y;X6c$iL>e`9z^;Je&;zaZNm?8f@sw!UyUS zMX}8E`Po&N^z5~LOX6PiLjj_P@aVlBFK@twQ=X}Z?HbzH5C{AeXFbF&DXC~ z(qZ)7*DaSf^FJ%ESFUhFDM>iAW(*UgBF21n>#pW!A+6Wx$=}W4{Hq=6nzrYYb5~n= z7MJ4OmK2HJ+T!c9P2+5PMe>jA*pwr5_A)ok<)3I){Rd0N6>`655)%v$RBqfki>T1^ z;33Oau&#)Hp|zw4Tev0z*PH1HxIQA)Rv0`@bV6$V@jpg#tuV5WPN(JfiEI$b|bLt~v*K{zsGqDYDc^0F=&=Nbr?KeG-kABKpHa|W}3 zTVa}+<=PP+CZ`{8ZGm4=qK6(39G?uw)& zkwiT$$fT0s1q%T?6tiDoZ-`U#$P@U1DRF<9YiG!o;~^%XXjp@9H7PK{eDeXavNp4O zAKtXYt7*MuuB9p95#voX`WQBVvZmDe2Q?enPKDdSDT80T<~W#bT-@fU;0$NKv;0KL zJ!U`?c)?nWlAbL$l1yP<@kEDkF0Ti6QlgWJa&@PBu|&NVP+V&O@rq zFDZjkDxur{=h5-umtTJQ2mbzLPQe3iS!k~@yFxOo>D0vrK^|ff#tu)D2q}1!Vo*K% z_~{9RT$m%|PL7*rSVB^D@XBK3JL-DWnu5TupkX)W&8GUT%nLuzb1)h>BMp4s*%`$Z zYfaHtGLr+$-;0k!D>WQzmZUu$UiG~;lJtvEaYau_os(rsjHa z`voT9o&g}PtqG^b72w|*=!e(!M)fFRX0d1ZRwsq~{K0Ve6BJAFPR_O(-puW;h_>oF ztXV+HWJ=X_@pG_u7i4v`m3)DGyi*s+*CSv~ihlt{zs;1NtnA`$-#1?{aYj8-)=t|O zcKWfe1FZxile7^wLJ^x?^vkaAy^F8qf#~hm0}u76I7PbXjTK) z7Vd`|;_@a8AOAG$!Qahh$HFyi!%1eCQu@nY;h>;(gEjCxKrZVyp$%lE(+`_L$nGA|c9(6z*AHjhh_^mkJB>qlEi?VIlyVb6W0}J8Q0e8h-Rg3xoV{JNA zuj$Im3nQ}c9Ipe|T?w%dVyo$i1~I4*k6tij&+3w&3aTgKt+Ja1!cv&ed zabjDK*3SBf6W_V$9VVHCeWey3!(KPQ=`}6I5{}>=Wsk@gJy#I|=<>-W)AGH7`3CbT zR&;Q)M8x%*W;zV!!F1XcFrqDoI#TfiObCY+FQ~392wBGzz4YoM?T^AI;~wEz76SW8 z{40?Xt*p(sd&(eEkN5%~VkY9156>^soE%{=4K*wL)ux#iS0)uS?|tgo5%dusW|&mO zk-WJ=5(j)ilQmWc=cBqJN<>pycovKsq<<|g2|X%!kM3gOWUO9iN+++N70X^i^y3Eb zXrZLxYn0}?j5Rj-Yxd^#hJ|@`#A9@-Ki_G`m=s?}M$|)grPsbiI^C5|I1$hsqJnQ1 zk05GBX$#)Cgf70u#}0xn6OLg6n*!h0Hx0@`K(CV+oir&?B$1*io;NI-w?Zl8x3{&C z$}3v@RG7FIBH#Ac&{LFH>@n`fBVKs;wjy{sM!;+eNAYAX)IEUfhAQ!_Y~)10ims~{ z7a`0nQ+oFfI==irUp!jaJE%>$xn<%E%$GLUo!$s`U%T0a={42Tu$6n{Bon5BWXfCv zH<24wE-#Esb^9HpsC}F&^RQll?rK>2IyHxytmlFsvT!w(l;PCWQl`Udx1u3VxjQIR z41ZOxsA!!#R|8r$@Q07r_)W91U6Y1WM6If*XncxxN;*i?%*s7T%v1!1lj)qws*`F_ zC?qd)+j7=GFi!>cO9q(Kh1xXuiOFJ7pe+wjIFs+*p%?MzycEajCHOo4Y90eGkbe|k z&RTL>mdB%bw2A**mz%$oMUz)W9=du}8^lXKXTn+`ix(p?B#wJ$$15xF>YU^LoWBw1 zuAQP9wokZPiBK|JDK1H(%40`NwDnX_2>_8#Vse`6<0+JFP)*fHdsF-H6{zXPKN+NJ zdh!xh`P$C7m^B?G>s`}HQpr0I(VqqVjjslavi6I~QE9Ot3XhE7NzL>%$kKrU23z); zVbu2^?v|+lHgv6-c7ezuj@2|>MTNW-M=Hos_N}M=cyy~XkHdbzOlZ-1>`z+)B1)Ag z?*j^Ho(G$+F%33g*+Y{0IBUVyRaRLAfgp<0DzWyfUcRCOu>tbvhHv=_h1Uj#x35H< zCCbzh`YdXB&Iy@0%UTc6o6@9qCh9IQ5*S`;x&|VAxU~@M z+4S`~B{NYCMPrScB9KP!oKuXC9~8HB$BR`aeq)=eW_zJ!CG*M+BFK*VSKir?5_phT zr4Oby78AWFabFUG=?WldY3PR(2yxe>-QAnVA=34Z z72ilwdym1G_tLQwm<6;vZ9TyKnxu}bw8Rv2$yFz)R(hg?Q67lKvwM-9I-fwm0Dz{M zrsVe(04UJQTx|3+C=PK%*Pa86;RV%0^2q>BwQH+$3#Npr6Ob89 zjqsidDI#4hsAR1InBvhhWo^)sco*H`<0dZ}PMP(B$A%B3zvjb_JW>7BPN)S8NnQm~MoTpr#Vl6Zhd9cq29T*dv zT4@SvR%v23zQ!PPT}o;!K*Z?a6DAhFZIQ$&u0?Q*hjuDPA?b_65FOxVqB_h{Mrt!- z=j^~J(PL;pf**}>JQ7JSx)QbEp^~|NsNBH<|C!w70k4nz#j~yz9yTG_jZp$7vE za>O*6DWz+4N15q#u~9+YII91_2&$KOW(exbh@b?50GWp4qD)6iU)2H&ZP5!IH8yIf z7W&K5UJ!jPQbIWo7DH7n)3dGiuga+$Bp=VM3N3?&DTF(bFZ|>4ET8`;@-1&h)+$(V zZ_c~Coq~Vex|!8(8mcp!&|spHCDp1Ca{vvLw<7WH-d(+C_-FoJnkkS#Zv~%(g3=Q(N&YtICA?f0*%Y*&YEKm?$sRj3 z1(s-&+sC-j^kg+$5iYaky}JGJ>cMz;b~))0yY22_%-#BLA7h-nlLW#E(`C9-w2bNO z?Qv%;hBv^)O7oi|w~jYjCWC?9H$7Ayd5tmD6&q}wyrv;Bk=1-O{Mb>`u$uzIuH4x6 zwJ8-r2Ue7gVpjlnD-A4(ZPVM94RP`wRl~l|r><;Wn`)RMYF(G1g&?>l-ktb;I|1*! ztg1M6k1QT&{vRvg{Z4xuK9g~OGDQBmJUkz1{ds{pgY%JHz{s!%ltM908yL2+u2&iz zrIZvho&*b3~OS zFC{_XF;eb=sYRxu3@3RG={+;2NHk7oulr@d5Mz6?5{6OPyE4-b^t$lxxIaKfda~<5kmV@OeJfa$>nz5JM5EooR3?@?tlgpY(5SSUL6L=1*&*Bmf*MMGj))u5Wb z(l=B41G(7!G^R)7BDq{52``CtRBi`^Q*Gp)8IDBG*DOjJB%rwqC_lR4wDMyqlU{o&`(IltO9~v;sAaRAQf+ zi`IC4rgZ$8z9s)&o$55A)LP|W1IENgL$jqOZ@1BmJJ(7ERmL@>#*LlC#G3^RV@Mgg z-9)L_4yqZ`sPTUqQW0>m&;@pS=ZM+a`@T1#Hnr6qA{d5h<^wRH;7&KFBuqw2EXYa08kWedK$0!ga!)?|W zcN<*mq)e3G*=x0v=mz=_*}@QP0=aC`ry?LfRl6z{s5O5S77x9uf+dayd_kx(CTy=| zf34ypeh6j!7AV-jk;?4!@<5XhyF}iL>m`Kqt)!t>+F^7h>MVxC9@kb4IXAKfuB{eJ zpPtOxTP2+#M~hr#l3KZGcF#{@S03j#y@rSSg?e{dZEQ`aSAt0(lqdI|Ro$$piHvx~ zDw~reqA6^>_<~rW){|T>)z`Rfw~cHR&{?c!BPuinU600=?|Y;7_#Y`P370=?(n@2` zY$861UQ&t}%HNWA!W1x~gFLm5r6K4u_P8+G1gMc5_M45s$ShKVTnOo`E zv%$;ZOZ`nF73XM;uB-$p-ZX+RHma>+aP%=|)~)S@E5ZOlM=f0pqj!fj5vY6HUw!Icr~g)=g|eJ#y2A3lka|oUCN?R_-#4 zc=Yz3K-5h;83ky4LxFK8S`t9uq4v-&yM8~Mh=BA3m_L;Tf-;(U!^$LAhdM?GSvYs9 z&AYwxQyG5)r$C@ZLBm1N^-D>%1a>;=bZ*nbeR2?3-><%25Kz*rGD8|@6vO5&=`*Co2&LKPjK;y@HT%voTU;XU@ z5l%DQ<}pNKRCKzFXrbsGqH>bioF(&3J_H3imcY(^$Pc~U3u&l%zsVvYi~q3* z+BeGNs`QQkH`H?4(Je?1F98D-=2&MNd;6=m-4U;5dF-o>`a-4M6RvDuw<=5?&|+5q zua>>Mt}AqiaL0s&q!|O5kuH+ezP(Woh5=7n$Dre>qxP&)k{?k?%b0~nXJ;?>gU9PA zb@pfcW$|$+1QsIX8=Fip1;@sVud=A!6KV-*wMwS}3xtQ(wj-|AfKwlKmloeVIqF^M zbwq+!Sr?e>b-flXc78;2i$8~k7vgnvS_@3*JqN5n}+Mkt(r?G>aOZNHo>z zenX*V0}!eAca>`jSEVuqN>y6vd%wu^lVq076Evc~Qpxp?EVb&!U849j3zI(tCf)s{?6TGhEzz}U4cUJDpbDQ{8lP_O8m!VTEPQC# z;E0VB^{JYQs+)X^t;>>#O`YJ86|v%}bh0_}vq!1au>ScNAz#m|6D7N<(pHxh5%7hI z7$wORg7XpX)d|7RX4qjV-WV8kSf#-k4ttoxtw=-WP?w=~69W@0Vo>tESVPMkS*pzA zZYmdSsT1kr1*XURQL6U)gxJta`5PSH*3 z+)pn`i}Y{fpqoUFr74fpQoaK;bEbZR*8mA&qA3D7V&n~*^!1~8N3Q=%bUIE?RwQdp zkNo8A`MaXUTE`{;=5{R(kDY|WxdDE%ggC?UOaxDm{{TxCRbVS-+W3~Z?2>&|Q9EHD z72=GeilGF4WVkY_SKLEer!+m^WK6N*4Ttlou2UnXz16dR7l%ZI=~ANepPIFQ81*OJ zgR@@Yv}`Ug#(}uoErMUPknEd+=?h9})C2+Rm=GD?*elcNXB0fg`&hFD93AS{;d-gY=tCK{Z7x+pL%M{!W zq;XTc_g+dzK%(`O1B>g?RGHyKS3RrOxq1D1lG5JFfjWJ1DP~!SokIkqBaNE=Q+~6i zQP$$+4v>^5q52y&TSOmo+uHCQWtv<8_5$O}(&mv&KyaTF8)g(^9pMoFyrO83r0PXNag& zlzs_RM089)+?=2U^oHs>VCj3T_|31_3E;%>*7nB!=65@U;EQKmK%5V_HecZ zR=TsZ#l!O>_(=SpRe8Dds#0e-o=mTVeqL{_ufEzyyU}X`ntLf~u#;(3&h(_A z2V>wa$IX2dHQ2|rD(GYN^{baJUaqe1ufP7&mO~7uaE8=*7LP8^FX~}dt;f!0sJQ*| z<*WUz)wMsaej8Rx`el8dB1DD~(T98qlKy?2xoB(K8(e^`?U(;&V-1hC-fRV_SHSQV zu^0L)k}B3ii&NiTd%pR7wuar&;VFWb>Z`EVvW`r;wo-1LVjs~JN3Q`H#_>OgHr4KXX0zR<4NVrdnUy@Gd; zwT$tK^SP!XI5q_8M9o=B4iVr`5rc*$;b&8(bgqCJ|Uw1{20{XopGm zC2lNeQ3*hRdkTgZywPdtJd#}!zCUU0{$=o{g`mB#;l^gUduEgB4=yg5<(Oyvz$h`s zjv1fzB(Rng+w%kF2;w~ZgMHoY%u8+4a5`;V?$aLNgd?Hl#t13FMNNWPwlCqiKJO*w zr7iKg!-6D0>bze-b{b5zGgugkJ?P#Y3Cp~LF5=lu2Py33ct3TC(0^Q@SQ1NcbYv*d zo6z-#Mc}!FMV#^KA0lB!1a-Ldn=1!phv*394IAYN;+hl0T=0WuHzH+`Vw3*FS89WdwRLy$K`N=g*}qen!(T_sMuNg9?6ygWU!LT22hee$NGt$S{+|;}4>Z_m~8J`DZ*lOG+w$ZK7l2$65hBH?ecb2KX}YtJ{<{Ie5yW4u#I2>owtaStT^q%XWe(w848=4rbhnxzaq~ZUNVBzla2Y<`L24B z(zPfOF<8@}f84{i8EPI|TGUi__;kmf9UyX4vD@)JR#slD{&{}~GyT&l8%oA!&OmLh zs7}V=4oNoU08Eg~!at)WSUrR8zZK*6xn^9W)D=1Gy^9#mfU8zqEAJ{NnV+so`I)rr z~!=q+>Id&3^8e2@l)=SjmVwtY1O5&T+`J8ff3xRZpp z7BXopf$Yc z4ZNYH_MIi%d$@UwyApe?@$h(paUry9%o`{XIlDNPyoUFr{(1Mkw6QmrEZW{2m)H7Q zLf#gV-+pg!2qSL&^iA0g0l*m~7##1D9OJ@@{&AnVBJ>i+Q4b0eqL7aeZ;j2?5%ycd zrPeoC>}<4g9-Ot0IvsR2W*7m0KqO~#@5VJV9n^ii`AA;@Vy@?6l*n-butBLAV~^1= zV(gi&0NqIo`KGuk1iC4`QklDk@hN5p)~W&;uIQyWz$&@Y`iMBl+0Mex_E-PtC&{LW95WC0_P$))+k3dT z_lSW-mF~c!^UjieYx)JWT*#+_G-RxEpO5Ft7*s;>fU@L*sVcxdTAkj~$x=)9#z=?^ zJYIeajeGH^3*e3ymRdgm*A)OjXoinUvos1JaDJ(^I>u)>17&C5KRff}CG-i)F8}i2 zoERxv{$!n~G6s5AXya8fd)sml*Q!gY=hHmPpNdC6%m&Wb3b{(%Hi@elWGyqaoFiH~ zPO-__dc-zlvj;&z<-m+>H_vd0QU3s$hB$YS)g=rXi1AQs8IM(h)-TR3aZAlu??!yYr2eOC(7h8 zy%Ca)ASE?|Xa*DRsb%zGEDNp2tq0tGx50K9mD}#i(Zp;?nQMjIl-pvn+;GI>n&yDp zbFB~a+V3woOC;SLwGM_zwh6nFy^u?A?KkIxLtu#bf&Kx(016w@kJdO3(~~6@{Xgtzne#DSay20Z9#k zixS2@guJJa!_i{cJZxRCGzYvT*x4JeFy>kvb}7;?d7lZS4x~C3XAK0Ut4(!pV56sg>(;Fq0U~X)D=a6l^I^{t+gnM#3 zg3w9H{xfAa2MiQOQdt^9DPN38N#O%Xru|^){?dKX5b9e=g??;8-?BcOZ0GNn<-gL3 zofh`94_<|uw(n0GVqb0lWSbSVE!wl+=@_;p`L2rXLhd`Ql(qalC`=bY47oqVpxlq# z{(QXMq|64P_5(E^Y|#4qT#j<8i$-G~%nBT09n9q5CVH-{L z3}vh(xPaQY16ow99=06Z>d0|y7N94k*E2TUX`W83AX^L%#eq-*#baC_B#IR*Sgr4dR7fG$ zVU5+^f&+*hEwxwhg$r7qzTvEsjwCICrX-kU2s;y)_rQU`hgb3t?W9c!JrtN|%Cmip z2pW++oOdre!Ew=<@3LDC%J>ux*>c$JH^58$=46ahnPD?VmUHr0UM#?vco{gJ~E>K5`RZeomG z{7~Cv`0lU$uYTTne||h1yx&`6AkY9i&%JN@*dLGV57;CBDSP?`Yczfj5S(MGAp*-x z&z=|+H4J`X@lz}3R-S1PJU_XW)u3p8+oEB@C=_nU+osZ>>|ewA)VSy#u>N@esE2UkAw7 zcazkr9fnUe*lBd}Lx;aAc;o)Sy3ySME*FS%H5BE=ozReRbrMobofd4V7FjBYia9A8 za7;I7_QxP~!nt>}?nMMFR+@t`1kK<-y;fM4&&s8>W*M@L5bpr*YHwd`TcWm~=F80INo^umLD-kRk%p@QgI7T$@*vS^v&z&7Q z-=G!waG%ChRikp?7wfupirZYnAR{>(aZlAd>a@3>Z|(oE`Q7@ha~7ICIp?16|W3MQ0)2zCDk=z-cVmzF7Nlb2ju?9-10aUP~5d3CSnB@n*qfn(#A0 z`+$fyUJ2#n{BOxBr!OP8;yjFi>S+jqdfjo`C3OOO=7DXJ_bV$qf85;KUw`>(2T+|K z^~;96J^zd3q%bsx2K}}Fr8^J^wExZK_RcG`m>4?HHkp`6K2z)Df$6U>eBDAA8xd4f zF({ia<{;W)K=DrjbBi;|L}Bs1G?&cd=NH9D8$vtI9_ z^X0$Z$3M{&KAWW{k*c~w{91R4+_~-}|1_>-1zp%S3dGS~3z@}59Kh7gWEH&D3mYyZ zsClZkh~2i;VOnCY&MZ@qVR&DB~g57707Z*eaw zcp97tn-DthU_Ck;9{waIJ`^E&wDc$uYP^S~gr2$X+55lsj^;!rPs0uefvvVvRN#Nc z&PpOOLe7^yeR*4poVEGC%Sonp3(Hw0=ELE|dsveP+j88gV|Q;uz`~ghl5qtxFh%v{ z3iDyrY6VbN&c>}q*kcH4&L;BQaU8_cy7SQ}pKe>;?QFdGCWt$mN`vSy5KWVc2F5Kg z6fhfm0#{kzg!Spw%k97H?`&+XZm;4e-a=lBz}vYzV2$rYLMppy6s=Ro##Tt-E@5@a zY6NRoaIYa2Rb9wB{Ut0a@Up@qVB3ReZ$c%q7*X4v;uKVEL6W;lc)=Bsg*Vfjufyul z?yOuKK}__h&}our(C^p}!z}Rs%NwobO{mh?JDAq$){vEz-uSS45g-DCQ)3B3Daxo) z9p+X6)<17G)rfUuQ7Z;UHtNIoH9$sN7si^dvacEjkSsyKpF6F3K%8GG6#nTZAJMF$ zRnCM%CMK&yz-|7{DR!NRDIiTj`NgpSk{Ry;aDA^Yo@6lw1x{-`r@XL-)#dQ>XAK1= z!%`(|%pMuGfHJ67=kxJ`XoMJ?KAgj6&zn|ob%)#;gkXTlDSd*__k9{_F~!Y8cmbj~ zJ3Q`V`{l_?Ley-WJS(t=>&kK>KtGaw3Mj!<>&&iX(XrTlENyi_(E#0x(Jp|rG8vXt zgI0KD5VOrh8}}eC;Q)X!C45v#MY?AObK~GR*J$UrVW*K0cDBq|X#gjd<%A-ydf8AqpAT>uwr6v4M1!qV)y7>@5jL(thWjZLJuAd0im8V!Br^?X7G$hx{?^)Sr0bJ*xCYT zgZ9u;e7S}|2C`ud|Hnx=VM0Z3L?c_>v{9*#d#?OuZct=h&xk#s&xO+fa|r)R zaaU40TmN5bKmQnNCl)9Mg8CB7OW7sDT=w^&KJD*IsLMWdwHF(BsKHIa*x!Iyh2XK% zm#EN)w!*;Tqhc^_TKlzWSW<^!IL)Me)g8eiN#8HnH>iOsS{?VhhSux5Auj4VkPIZiC$tToaO4-svU0L*l zgb%M|e-(zVfUjdik%yHm5D9p_LTFIpz_8d$i1-bQO6eolWm~TXONNSR-X&vhC2K2n z5NZL`Q;etjV)3;d6%-_6cQD@MpC8;~NE2}o?&^%Amc5Sqe***czEt~9eQolExHN4; zJSPprC{HnaEzJp5vq^VHgvM-6rd&D4dA}0}BZIbLR5Frrrt>MMQ)ogyFN|-5i_g;I z6Z{mof{Z^G<+!m*qM-mniq@cBo)Bh- zn@m*G2p#Fm-3KswDL|dnbb+Ga)EcG}3L`M-%1IT-A&f8?y&9eB+kaqu=<))PF|TQG zrh#W^P@@Qcfvni14^MG1Fni%Zpc^>v<7+Z!L?XCi%WOiI7cy%NHM$tW%OY!op79CY ze%29hr@vNyYK_7j-h&O5u;MFFI%$mF%7f8PHJGgK7oG#Zbmm3fy8dal$y0u#L9ds>9|X2 z0znU-%2m%?@=zN@kHFrC9SSBLzNL{0P{I#!gHqj)N+czGG8tEHTo53KCeTu_YaX5g z;i7&jJz%AxY3k`%;|b_xja~R)pt)!Z^B4*0IS~B%LbX9no9%T03${+dIvwak7`n^q z?iug90(NoW!?P>UWB`J_sYW;i0LM1t3_`eyH>k`^aLt3F3OuX!5Um^UW!=23PaT{s zucMSVn+y@=s*)J4hXYZWrWB5qTsQzdd`R$IST9Rg;BI>eujJc%Z8EB}x=!gb=1tn# zh81N$H;$WIv&>hBe4Ft$Mh$|)5o-V;a`>j~DM<`*aUUGXYSngQxOzpihq+~HfvbKnpVHSaf_zd{<7}Eoll`|P#4ghG{&eaHm zA8W{F#rR)v3O&#c27%vprOw(Jq7czwW*5yqiu%NKC~Ly&$X~#g@L$xjpiea*=30y1 zcfb4N(>HgY?*6y}op|?0C@60vsWnF;_?B!d8ZD@8_{?xb@N$GR3a__c&}oe7&A9+QVlbt{FV0E^1FNlWilKZ#~SJE_mnbNw<{c-ki5I&@!R1Drvt;u zERH9OQmTL&Mt?;bTmR^L;Qe)ob>bz&t;H+ub~P{uKd>5LIph@iB0&4XY$Vmm&zjL@ zVQ+j_l1Rt~W$Et13bIx#JhcQ8zx2OOWwAod@mM$6*^V4YR1gU4hJGAxt0w zQ-$P>Kr7$st%Sq#E)L~w_fC56+>Woa#=Q>6B=UtE*EEVvmcb$%vdwH%48zz&KlCS3 zFag#EuG{u3{lrcHdcxxA9Bmi6nh)OKH>f4PiHS+jpw$ZCXf4fQo=It~pT3d$$}7w> z)`02Q9-ZwY%5St!!QQ~hfL8MwihK0(a)J~~Mh8(c62Uz7Vk~>V_M*g@$k;JCFagXi z-)Q{q$KR0#+AW^lD@hT{C-L{%p+r;>uoWV%uxzGFV2;zUfzWJ5V5v?9f$oJR#zPP7 zZ@Lg&a>N3MropReUQ%Ql!Hs^0~+hOH@Pf@%12<1B5PQI<+b zh}E}PO}rIwC_ub2;e*PKas)Vg5y6Au9=yN69rHWm({F|&MQUJCP6tG(o1s40(US$q zpktmHnHc>yAt#pLaXPDDuT;;4dX8s9B4s6YbAh!&9XTZuXiz*j0az;~Ek@FWhjqN+ zmSDn#2}UGghc-?o&%#~G^(-3PSmZed@%-|D#~LWbv7OTebWT*c*%7^EvQpN}&@iZL_|@%FdgOU{}ngH7^qf0%%!Ki*`gJam5Lo8;zplCo!V+*lhW z;PqsXldiCUC?Br{K8FjaB?ALr;mA38Pj(jO07!!b2xU+H)Lt5O-{PGoZD4!5ZSqU* z0(g)Ymi`rzbX_?TEwvIW2l@=~%Ck^GO#*NTamREF;wDrzoymKnQ^-d*9;zoqbDzVl zKymU(9EcE3m=XuVD7Zk_?uZ9j;rbA&O8cqCY9oaMd@%R|(7cNaPeCLHXZPsvDQ z?T5+-=aWo^ZZn+~AE*RTlHLFxPzB%!mQM!-NWKoYVN>ZM%o}R1USXS5HL*2?tLt6N^ zn$Zq)WIILQvFj6;VErBU_CYd+9gN<`Zejm9vb4%QT78_!e!PI`fZ8}nfJ#-%JCUyB zWO*cWq?YVJOW;2TFwDZ3WHA?Hy=w=WtG2N^IC_rl!m8wD^ai(#M$sUub5JRo*{Wws zvV3Po-P5tTnFI^@LU2r3NTl>S&X8~rIrUdpCd}jw;1+qu!#B=FzJ&YYH)9wHJ>Y0y zjutK!NcytIDa#D6lKB}bXa-l(4#Xsz)EAAS(osl@VY?JFt48h-*AvCfR%d+9qH)sw zxvZdKUbJIeqf#0unzcz&W193yQ*J0rpa-gAXl+7)q-2)uS*8vHioi3>NSr7xxPx&H zE>3_i3b~wP|BE7LFnMK~WGC!dJ=-F;NKr#X&jMUws8w4e$-sJxJE!(BZgDwVDY=L0 zFd*c%?X@MgeFbshn%Bvxgu8mj7TMCrZCKVFE%nI@XROXnGqtJ~q*-OUs?=5!4c+R~ zOC49{yo&~+(g`KE9&HS+BrCj#13z#+?jHB{&#{3=NENgv<^Oag+kkBb;C} z-AcN|El5y5X_f&WK!aCw(J#pXd453N9LWt7TG!kYbBjme&DZzm5b=*39WbehZtI2= z_u`9I0mTiCckm5XuK4leck-Y&UC1v!&TFj(_Wqc7a*iWaifYf-_JrHlJ;;B4T@M_0@9*5|nVN6tW4rLA1noOj#5zvY(daO zJ%_fjjy62mz6);u3|^rAY96u2F~Z)-{(oJ<3P)j|31O(qv?d*CAAl)jByU=7ro(It z@7oI4yKNk~Y2pK83dExNWMKu{is6` z!?y!Xw6a&dSP+^8{slJ*HvG5YNl~dtH*@f(NI&>b>5aG*zl!Zz=!K{0J9f;pP{kYF z;M|hug(0c6o^HdJn%=7;vNp=G!(_+$pLMQDM;C^7O5{kh```Vg%1yQe(|z_!Ev-V`6q>I8j`=Z>!PC!+dDN>z~6c zDz;o|5bqX;oV_NBrM%>4F)5uDKnvsmu2n8%b=JiW1Q#cjlZVF?q86= zPj1k{+5fNE1JuZnNWT5~!~4LN_FeoZ-)wT=8r6(5oG@+xc@kiUGZoJ*`Q7JZA|2%e z(8S2IsSYfQkgiB!i}Xib*cpMbORY^v6ef4?*m7c zBN~+jT?NXni9WF-E=!)LhxYLuPhUyq8=lKRpTG`X3~hm<)ypbUYrrch**WbW!7#c& zYXHeW$X;7%M#z}X2N_zm#}imR2Z_-?Pc&2yw)S7(;iSq8qby9aM*z$OS)&G*5U%fA zh(m!57cjA`oUS7yB_1^@V-8BkG$xW$piJv48PMaol&T{YCnK58F%$;1tiqCBcQ5+j zm4LOo5!t=@zyjH8KF5oGGD5j%os_=jOXwo-S*_lR|YNxIdkN`7RA z@qK3Sn%Kp;a%2MRRn1$E?tgi&_2@qC9hrtnvIBnX8(>8y7y;!8a(;9PEfCbD$i#v3`?TBt5IDh>5*5wckiE|M;;cXE%q{Qkjqkm=yG-|^*GQD4 zN*6r&r!G(oah}o;gPLme1+GeLNOQ5Rm)nwsgWT3*k`cWjgfd1BO;TP{7n1INLyAhG z8estKmC)zEBb@U9sa_Co9KVl~0*@Yj8A^y@CmNTG`3U4`TO$0N*yRC%|E=~HvfZ|A zq~ie79dq0vy8Dj$KG?)_0Ih1Um&X6Yit)f+Rzw1KLuHdpuux)!X$ZpY$Ebn0sLdCz zkmm3E)fby`4c_Kfc=yeV)o=GVx4wTQurkqRu8F>eiqH2iFkpyKF6+U2Dn}hzVxSu~ z)?6O9rTI|6ad|F|Rx9DE!rOf6(jLADtT<~l<9-O9xfMN)eX2WMuBo7QRxXi@o!!MXRoAn&pu`vC!LWiH(f@m8cVxNWs+}GOdym9N|$c@1p zx`!&lj`Tlnj4lmB*>WBBkC<5vOGQqHy!PZOio^4`aR(=NlgSD4vxcxeE8Io(1N`q0 z|2xWxi?%2fL@tR=&=$Oot*^dnJ$$r)<5B2|4-bB?4~KmCcmAGdyxlpJL)4IAkihRF zx$=FSL+JeXeHQF|`LMO9UqwYk2e8SqLcawNv$l47+CLHBbH9a*FaNF0VteuK8~b;I z$p}VsDr$VW$#hWb4z=*h(ZH)e##lLIVuUvM72a^TN;bD?Q$c)ik%SRaj#6~b{t{L$ z0=Fdl@nH`rkw`uU0A>NE7msl0b_iyY7J9UH)`vD&ynGFRZ1Kt+e&uUWRPkzO!c4Hm zOYLR{`M-+~GNxCETPxn{1@rmKnyA^!LI1xldkz8Zg*%z7;#ewx_t3N%9(m6Th+F@Y)=8h(6iEIPCOH_=-tO6boxPfL*y`^cHRr;t9MsEfAo8=ka|@Q|dq| z*_Wo0O6$)KmLk$wKoKB?uHnbNHrE{ni|Z|+oFFz=J*18-)5heWz*s|v{LM4~&cs8z zB9;s%D$}Rgcc(Xk;aT%vx_@6m?fE+b?EQtzRV_^%HgxCMv6)(IwY)|WhI{d-wRj=c z6fuoJLc_j%JZvqB5yI?O>8PUvw0_0GS!~Ih=#7Y=NO;m4FxzbJbpvJc5DG;t=R`S? zVpfou92^Uoq7{)3E^%ph-xqcNP#D<0n4~ORMF%o%s53VxP-++na;FX_aO)%+Q{%CO zM%smyoHDC}5t7%RmW?SBEL-!kQ<}SYL?>|B9NBu=n3qIjuJ+kNUOe*hzOa+6M^Kvk zbW9?@h@sV*M5`?(y6OOxtoVhuJN{Zch3Dxw3?DGDVVpy7IeN)2VTiC8a_6!oqu+M;B-i)fJ;GC_7>5E_d@*>Jp zagfg|6>w-_v9t)A!5J>m&DvH9rc)X^trETiS+-0QKoh2&!uIbujzXhK+9>NsIM^~k zo-`o+iA~geZ=tNU#{xPKssq`OeGvR01E<*Ckp$COx#(gkN_of$LSKa~upzJGuhUUv}3F3@oOJD;lpDyU{*IRPutZ%Ft>O;Lqwz+0;s z#pS2kM!e%+Ec|hD{sWzrNC+=LL;5w=Z^S|l8`_$XaWQOB=W6i+C}8V>I4!E%qAxg{ z^b<#}A2D`lz`b{h5E^BwU$FL)Psfc4QtB~M;6oBSZtJ#zDms^0>tVxR&z#5FcRCyH z?+?#$j^2kSe4Fi|cWVwCQEnLxNQHV02qmqOr0sdZ+=*0YgDSfR0c&5FqUX-%8guG8L-!wg%GBotV} zh!aXlc9ufI8c}2mBHi%IV^ZR@lAI_cSeXYrM*z2MGk2KRlZGII zP$gYe|LUwF6w*s>BDVn(DYsMfWadcRbMoMR)uYXUV5ZlP2vG%k`)r6?HPz^&ssNzM z%?lmuv0^h16hL|ffus1*UrPK_Y{2YL)yQykS2Crf0pLOan~KtDJZfq~Kp7_@@3BVx z2~L+JPBJ;g3bZpUm8fh9+hkZKm3NQ_)>L!9>-2?M>KpPX1R*$bGOJykE!Npsh`Wd? z>kjAr0IqDuO4Ya4pz%+Pj3VI#aF(0&u&wo%yt+<-WL4AcU1LdF1Y?k#7G z@g?0zfe3e`v1{!UZFbsPJPra-td4Z$X}X5kKSgMz+582l`l;YSQ8!_nRq!MOjk7@{ z0Vi4yCy7gm;D0sbMiT&|DFf?&EZ_ARqFoD?DCYPAtTlZk{z9)s8?P@IRi|xOeBJW- zGUDr2`YSjq5v#^u)kan&%43E`s#RaU1y^4qHIj&Wr$jdBN+4#(=|Mh}bn*X8gpN z`U55h!7mI5I?NdNv(kBw$Z?#4p{cMXiKGa<8HTwdS53#xfQr4*1X&Dl4IKo`jIF$Y z?z%BJ!eB9!?pafW#tRJGkuC0ZOPAw^*2%ZZ#wH%=w*>IOgs@SuzHwv`B!#n& z-}ifOE7+$k$lA4+mzI`Vt;|{g29?m5mPml$_oh^spsZ@nUCGlAgS9fsRZ$nU6J^7Y zryMa#9P^T>)W!)$@RlObf(jK3(-;ZCVZnKOK?qt<-Z4;4STs2f+B_Y>>#c!m#V0B% z)h!wX0@EP&Y2e8=Xve+bv3^L@XW^dQ>Tq6|GXfJ?6&+i$UfBmBrX$)j^i5ejNK>|0 z1w1qe+@S(3st?Gy{wiX}#ePt(Yji1~xhPXzLfO587;zGQpQKx$lnEF0hQ3l|&ke>n zyG1EiGvJFyI#wB?E@)kxTvTZ3#7EPY-$2 zC^RGVbO$Fy>T?E5LiX33(N@%x2wRIWC5T<`jPy{-R_mCBb!Ug7(>CiBb+%T0o7>>! zw;U4I`veN0=9f`$G^)C?gtD`(VjfwAiIPoTtc|!K@OhlCkW>=bPOC+#)NteH>&$yx z0+CezXN(|vU~#Mp@GtwCxMFI)?X904>zny9jt1;N zW~t4TQ54M$)eJwhXHJmfSjiHEOPdw`3lFA>qofpnPN2*@v-NGJhS(w(YK?#sG%R6XE>MPqn9btQg280tj0DUx8N%nJU$3w|rbd=l>7t#O*2`++Lye75Slk9dF^L2daO?pkZI2ws%Q z$yE@~#2}Qcz#-C|r=x&yCBptTSp^0QjP(SYLHd zj8JFc>c|!f?ep(R5s08UA-;F%?4iPbolB?G=13Y)3`A^}OuXdb4V>AiONO!=`EorA zBI+u?4gMOXi?Ae|k*ENr9wxEPP6D&)SrS6U@WNne{s-Yz4GST>_0txDVgsDJ8rlFo zEdbpE8_4^dYNT(Ar|^=Jl*rXIEf@_Z&e44Bf+f3d_f4HmOgS&)Z~!ieNGz-+G{V>G z_82-e4g^FF>H{sf_)prnp>pQTck%pzs%X+Qxz@GF<5h$BHNLTJvD~&e5E7HyLF0YMU-GEgPg`8%}q?!xB-cC{!qu zl*C+x8T5W?+t|V@R!Jw3A7((s>wBV>rl6P!10j;L3(5-wbXqmrL=!sDwy#+#g2&m8 z^665`{zU>HHN>xc3*gZNl{DjQMlDR3N>rBZQ*5(#R0#J-nu|Yy@oCEN*oqK?$dVf! z;e>yzHN!cVnTjz_C`Q1tYi11DD|3}32WIl%d&szG#k2tadD_(xf`z$#d7oFx#}f0n zzLTfz)e)E-C`sI#*?T=rQiQcl$vwhVg$Xe+{lx_BSkCaT6y3IiO)QcBV(BWZMKGC| z7oE)uuTZ2y7d+bJ4{~#R@8I&p!snQG3b3^;cdovF=pe@ra;Puwjgdxu0U3by#>+^g z-iJcao_~PUKVRUNQ*I=$A_GEu;~nm@XR?Oiiba|u%m%64dHdcPgC(#N!q27oWIT%G zel*e!7Jx&u9;P(QF%gy%v6^L)G@8aFkQxAD1BJkQ#WN|p8HFV_Z)X>D^n`ChR|d%p zTd)keGh)=L+(M2EJD~Y;gY+QEJ(?hco1OE)C$l|rA>-vH$x3s!ZgW=qv!e3K3WoJc zu^Al!m4U!#X9s$y6L(keNkaNPvk4CFIo7QFKla`RO0MHN6Kn9tq99S?*%fSQC9faH zL(PCh&p$}~V;VCJVCebd^Z+D?0Y^R4Z)Te8=^phDfZ+UxM2qqtGadT)~#E&Zr!@2HC|~8$bb=nC|GAz>W+|qO@cOkXenzT2UH+io7l& zR{YH>s+e7md-}=dJWx;L zYWUK~*iH~I85!O+*@>qMf()P~c1XRz6z`&CZeYgPYi;86BOz+s=GD|7^NG2tIj6JX zFsv!SN_IWj1v8WR;!IfT)S#2-&SH@%E=6!Hb4b*U?}R3s6UX|(5*5T6LR#H^5R%U{A$6tpj`v4RVi72B9NI5OL zfHLYawiW(J)?$E67fiO~Un&V^&QPE@h3VeV4?-vgpv~??+eMidS4Tp>zwK9RWn>i$r0Rgs>hZ8XFAncA$0XZKxc>8E`?&c$69o^|uUP)oB4eEL2^} z0?Ro?qXa>$+aLB$Lh0#{OA{bOc-U6@gluTPd!by1-aw2OoaC)lixrJ=$c9!AA<=2Q z<_0q}U}}>Ebuj#)5!fM#l(8f5SP!!8$I1U;MDU>zBuE5o9ce})9tov1Um1ymEKt1- z>*Io-a#h7j3ZVp#HCLmE;gZNBvblMtWReDJF;dX!K}lN{p){!zJafelo+~dt4cO{G zJPHhl2rNLwNHhS6Akp9V%o9QEU|x0O+;>C8ARMw%#9j(gg~lXFIf$7o2+kjnIpJ!X z&KKT@-ln~tV|;TlDe69I-$~Iu@xePmKZqYNd8k;3%L4B> zqedw?=2jF$wQcjfExyuj%@#pfm3XmF1zueiRkhJa^R@AQwN?y~c^M0aBr1=XD})Id z3(zerX^QKx&JEP+>kO~+3}b&7Izim%e6;s~H>_wq2!C%C6&l4V98ss!dRLn~M^}(7 zJDH`fHc#Wej#_s~O>zrceJRaF zX)pmxw{@XY?Sc0YmLBkKuB~|qA@H~k*2X?^CS0-`TW|pNmp4RpyS_Yy)dK{jlbe$)WV5|~_$v5IrMitFc79adI=i?yKe$vtM5~Kq z2QMv^mP-02>ZGBCVMuWi++?NL(43)>blF8G!x?r8c&wKal=iy#@b8yfBYV)-VZ))M z4D|JguMq8om69AqLC9CQuBs^7B^e2A@Z_KXu7R+|Fwn!goA78q`fcyu1UaAtLA0k5 zN1Mg?h+}*6`5KebziB!btbJ!3CY`U&T_ff#uDz1R5{(_dQ)HuV5C(v)DB5 zYG*QFmE#<`N>69u?tT)blD6?=NGRhlMmggxN|8zN83liVDt2=;R;5&bFY3(L z+(Bp?WqRwRGaHg)?YUB`;a*P>19oYpH0zmM6a6Tx>>boK)uUX+YVhHpYd6vtaq)6u zPZ6K!6v`O~^91j0#GGr?3|u3|pY}>a35dx4RXCq3$soT&iEFKg^fdRDszK@kxSM$E zmugg8UkeQ8Ac<~RkYu%9jR4bWqNY(^CwAw}SBPT$=V(AOb==Hlmdve2)3fIY>Kma{ z`u@Vgne_7lB!b%M0*vgJ(0#ONfaB)2?G8pr@Y?SIa;4$cwtrFS0u(*)V%`DH(El!=juzWf}`H zs-UpcjW=C}1Nve20a^Dkrbd&s3q9r+=FTkS3vH@FWFktdko2L@XgV~B^mh`Jl8-%^=w9TU-59&))j~J#D)f7!|x8;x&<7=)e3(aD)#k+j5 zDpBY5sJxo3Hr+GO#du2zs1x3j(QdX@dBtvI?h*+vdedjYgnoKdfoL?S4&VwPV`*4} znP`Lhkg9`9l9(h8cv}@<35^QK;@+U5zKz?H>#X(VE%ek18zy35Y-o(TAMLKn=8goO zt=Bwu5-vycz1;j1F4{pA>e3M^9&o+F#bETv0LD}V&q#tXGbP*vE`(Gjzui>eX~5GgnkzC$yaTIcvsy7@IJV8WvAcCx;O$I8dXx2njuX z9_}>8+DPAiY_$tAU|^}rt9&+FXdFyl>cSrK1P*Y*(kfS?L#3}aYEbRTQWjNu*otKQ zMt6;0#PX)L%6vpRkS3|YDm3fZdxjwB^N{$`H@Zs{Z;;Xnx3N2nBUa^()%BR5GZ>)3 z4fU{Mwe1M3T~`pHjpkkkesOWsteYS|78~*r7?+S*x~aCO{DMP8VClxyjrE zZef5Bv*z0Ab2@Q;`VuQzJ-(E%f;nsPq*nz!h?sBUN8&iKDZxptF!#DN-*fSvC zUUf;j5WJnaTI7^6?lvxRTfC1Ub+($>JT0PPMy3^6w!Pp-qq-W|Wb??xbHe9p3k|po z3##T}l@V+k+jIf{%1TJ*wAZpkMy$)R?R#<_LeW$Vp=1Ytc!1u^5#%TIW^=82#FKy` z3ULwA;aE)&e!+aEHq$8P(MpXYB@!4tDu67<4&5Z%vq&va0;p7`oSPd}4pwv#o&YLr zAKWZBuLaFlcf)113kDHV`HfiU&55V1=FuQku@)~JR7?zM)wfm?w*y9`qPL^?)(m66e6x5Jaha1mx#Dr9tnkj1&vul5Mxc_D*5xX>!7hR_P#o7M>1CNdyp)52o0 zwgr!3jSJDSS{I{SwHBa6@fFgTcbqtSr9xR<lX}XLmc9|M5YInSyP_=Fg4RtcIJ(SAA>=b-9c!02Ek(iJjSCeD#GK@*~~jvBdfrGY323KtlFrns3M?8UI=I0*hIA=x*I z(lSp6jOn7*M#z{Y6{=RZtFD!=o<*z9iVN>)2KLA5wB2$@nqZC|qNAa0EBA}5aKjK& zdr&w;T&c&ZXrPJ*=jU8yJP99#wApH~7J~YL=rHO#+T||si~|~(zJ;v|++CxSuu+0z z%~ZW%DE6U&8XL3Ye+knV4|ipG{8Z_y%zV-th60m?A%R}mhAP$~Z&$0C$SMoV5p1J$ zIaw*R)Jv<&yh$2p!W2D|du;iU#S6=_`?5*8o| z1|lYwZM6ukal$g}8grq80yF{M1p5uO;$AX+IJD&&#$_z^<;)T0u` z&c%%G*~j)*U4nFGmrEOT&|oAIEL2`&7h+19ri1r(@7u6A)p zh}@b5MMuuy?e*ZqL}jOE^1}4w^7PcHh1|l0<@wy=*&cAEUIPTHsaPgV92^(XmwWav z9;QK&)r!qP1yu!3B)#wpQ{xKUx6xG5hGb3LxLk!<(hY(rVZ-2=X2%8qc{N0!7an3K zZ2VTiB@FSApbv4dvT#604~v_V9O^_lfXhCd#*!nSLRAi!%VsYl2SAB70)aGQhQ0;8 zEXNc_-Iof!Qbo*SLme`grN;1K5yIiNm1zhjXnlrVYoQhzz$<&g@;25PBYV1NF`1%8 zn}g;-%}&;hZXvPJSWO^&L(~P3lx@*l-U?FKRCBCf*g`p)&F$g_1!}KB{_^Hlh0d|u zw>7I9O$4AKPHZZ#c;+iJfzrSA*)X|pyElZ1w?(^wp{5mBCy^Ul z$E9>7LD(Z+e)yrGp`qcFm8l{l!v}|k#!!UB?zHx@8mvYqyURGIXyF{WB&<}Uz?|gK z9UUGbvTJ7x)CV4b&xV@%<1+;j3$Kw@1FX~FM<;UBZ*r2(_*z)l_L|p?~>b}4(^grWDuR5ca#hc@au7(lNFp+A|;Qh1w{({TG8Gij;|9-BZ9NbvUD9(MAB! zw4r=O%vSVCuYVf{jjFZ%yk>;WCtZxqo(-`$g}fPO7BMQzTnDb)q?=nfrvc4CtH3k- zG`oU**#En)A%C#-Ck6NRWwT&{tjz>`rpU=^0*V&Y(hGZc^HFueLAl$09auz((?>80209fzFQbUWtI_Srx^Ozz&0Y`3CiakAM`C}hS2 zT!WcY<4IC0&pt&3{oGcCA`b*O`8L!oLTs>CMs_>RXnnFgiA>NCnpTE$INKlTE)7N_ z(6JF1@D^L6C1xnxM@O6IBEZBDGgQasR|qu83}XsVg{PA$U3 z9Z1>avalqTSCw`XMJk+0gmTh8F|#Ppq0}}o(a0!F&Pv=fKvv7*szikt6F$AvV~2kY8r2#J`c`-IuhcbI?5 zZO8{+BwOn(L*!FU)keh>eW`gbkn;_jR_tC2rmD+qLdgS?#aJ*CK!sEbK&cYKNbS%w zWK6Ka1dLv;u2xzle`*cE)f&9Xg>GNe88uM;T*l2F;WLaUUC5Kn7+PU>kciOJ9H`1( zYfE-;AQqp*t}-|HQ9sTu!p3sILo7Ubsy3v#wp~^0^v03C0S+x(5IV5851u*|+|O6= zWQPYEQy8bn7#`D>_yHA!Q@|Z6Y>!nIKM7Rj-P$PD#c=>9>Vr&2_wo*ve&rErdO#EN z=w9s`F?j!8cy2F315>At@d<&@^boNCrUeBZIhd(`b-y=@Fq>Yku_e29vEmG)Oj4XhHWu$M!t-Do21NcA3&MGy?d#0H{bwfIcDTEA3?AT-Y@N+pfkrbSPR|3g*Y~Hs|bQ$^yUi- z*&*#Rp?DQgiA=%w!>+{{{niRY9Sx%Evaq)e;*CSFu+$XmrN-b2?)e&2Vb=%gbh-tk z2L&_^2alJ^U-R`ctaB0Re2q=ajD@6-pFMB&47-2g72d1P(V5l)6=O#RsOow_d)? z4ry(16!NKvAx)wNF@&7hmJKyT*ND)}J6DB^W4%$VOoXG-fEfp?z!v45F0Pb;;yerw zl*@JR*qWq_H?}v|YSnEHMv+#gKst#vsQs_3nlZzXv%#_)uw(Kg2xtgD9c;o(`_=X4 zMq|EFAHz(h_TV^P@N#nEV#vUlfT zBI(ST;+9=s6pYCM@kRR~%&_R#5Sq&DL{7#uIWI(&+g(_pqCdY;XE4eT$7A+{qQ7dl zm3sjet`fNMKmhIWQxAtRK5ZH>)M& z3~WIVNZ6XFGN!6F-LC3x5BRhmn#|t?u-ogq0i6PG2mDw!@G`Q%HC?batP=qzlQoHW zzc&s|rnspX9kxjd3bLX=r%0x*KymAB7PnOAK^I_Ax0f&p1}I6dhS1y&Bm0@9jINLh zB%zv@^Vkdx#b<6|u$@6%OACTgu2o&(21ONxq@sQu&rrR^tfSPLl6XyG zWI|cs{8FUYhE!F&c);_a*KkVa>wb>`5~>o|4q1`K{L-@n<}>J*xN)>xYc(L+SrdWE z#Hk=chzlqKQFo&9f{;hhPE=M86Nax5ak5Jr%C`9p0lG2pY#3vSyklQ=Ua34W=y@(fx#z0eY3H2T%VYL4XJQdaO5O7!hZ>l*>rM zYr4Gqj8HVAIioKS>6+mb&dhJUlwTc!SSvIW^RxjU%WLs1Ye?i>K4=5a86Pq59g0E) zN_a)v7R%zI8_IRUQUci?PXPd|U#VDOb*?&D?rJjiOFu@eh$@qsmUx{H%3ivtiz=In zDa%hyoQ{Q1b+m0*yVx+|xSOY)I4Nb#)?C>isg-p^(TaCVnmQsttxihhr!)Y&F;*HF z@uozZ+7@YfkXj6n*|I7khJ)q8&6LCe&^IZJ2Lk{H^s>8-{b1_)eM?JyiYC$Nxr3;t zKb_rtr}zzu>HwPTD>l3(eUQ?`d=It>bjG%#UDO~wd~c3;$7;gN%69wpgo#VPIfn(5 z)?KAXbf*E$ESk5SsUcXIyfssUS{G>y<-;1r{GB+I`QQf7ZBsNpa9K}>!OO=kx{4?8 zKq1~v#v6sby>#!?)kX1VYSYiX&|tBwgeZfqgYQPca4;oi9C{}10(Fp!rYvG}<2*vB zaY#25}Xo^2uy4ZpL#i>cFG=`s!RQSE+8m> zN93=yd^Tjn{2ES}oOTs0!nrvHB-RlLGp54C?otkFs%S2axZ2mso23FO>5SdP3bv?9 z+kwRm7RZ1E(Xkq7XA+7xZ)%M}j}Y8qn#7Ta2IoY-kBK9AUEHencBWQ*Sa%rGc6)^o zspsRNI0d51B1PBx(feDK;woppVil)3xO}*o3!vStf5PQYn>jUka>F9ch!r!jC9Qhz z)svq)Op*mKS0T}^3CC?B^F{jIXw6C;b_GFOxV!7*G)mW->StFD!1l>kpb;gmb;GW{ zaqY@5!kE}rZC=)x1PI-bRs_aL(u!`Jd8ntf?PPNX+X!-gnyK#l)8tK`CWTevf^!iu zp&K;Xci4ELSGF2GpV@S_Kt~Xo?b0@up5- z_LF!unBrj?f_v2JQ#3<2VQmUGt>`b^kTkuEtu~)b0W;zPn)q>gXk#!5(vbi#Dmw&l zTO2hjr)#F}(X}*Tv z*^ZoH%%hPFgpTxqT$<3f*+?Nc7A7UT#MA7On3r6W_@Ev0XctN;BYSf2E1>hV-ZKOB zuq%g6J>eYq3t$JZsRs=Rb5gg{aL;&J7AZF-lA4;*;2xn`yOx=?E14eKqGn%`As(nM z2D`Z(J6EgT?M$yB6z-PF9wWtl8#BJ)G0|o^8C`KR-?9OXGh}MZTunI2J`cBfZuAQc zd6<|R!J#cz>y>dyajt5Br6o$Tglh$GVjUJi-O49xh$Q6OB1=yPC9ssiU$H32ERM5l zaF%G(b6kp2VtnB>#&qg}&2L>CRWm4Zq{i4thn8 zWq0gyA*}q2Fi_R@AOc>LPGcv?lyLP|Ev{7-ZW)1M3J10jFFodzf0RnX@=>zHS>QBk zQ&bh-1HCUou-+9c4wS2dq8bJbjw<2?%2FFbo9&J6M0RPdN$uNfJo#tOe4v57T zGc@4mF45lD5KkcuL60&1iX-7t5G}+-nEvL9IJ&?~Oy(xV1f?2UN`*um6!nV3%ahVsMQE+iDR_3wE$R!vM#E@?y zyn-|peGg;c0T14j`H96joNp}T=W`1=e3k3SP?NGCb0Fj z17mPtS4Z4jNj#LpS&#&hBh`p2r`w=XD4Qm(0ZTB@vO4pMbD4Q!e?|?g=1Dv?niBr9 z##+F7w$iWn(E-?{sL5q$+K!YQ!n-D)%kGKPYEPj~?Hh83mLMqeri3U4m#M)O;WrMi z7!sgZVEMr*G3wuv5XeyWhtm|A$=WgpuCnQ6{SRP%ivS@YFqMq>wxxrjkOs?bgn>25 zB$-vn1Mr#5R?1JA)f!tE!6m6dQBl;cax{T5&%zv*OcO`P7grNeXE^-UHcg3A zV93J?JWy-m3n=X_Yv>|v<=K;Gr1N`vB}!Vc2j^UQFaqZyo(Bc{RVQ0Ca2*sgcSVWN=Uxw zDd>n`S;GDC^|Hit>G3Yfn9q$V-;3MrbvqA`SEeBj`DWnt;?5I%wD}u_{uL9+YPvEFI;Qda=IUCyN5OOm9N> zH(v6XJH%HUp0nAlN(&b>t8D5!{M-6A{bo_;R*%$PaR>kl!lJi|px@vlR*XyeirJ@! zvWK&m9@uYI5Z=l**2myZIDMm`>dcMk?ivt14=eOhY}OFaIv|1F_8v{_;9-P5ML793 zvyedO>&{dP!*L$r$rX$VF=`k@Fg#!lHYayDn)D)HnNctwqY|(o{OM)cJ%9x`?PCpE zh%tgl4{aP{Co6wNLoU>WMN6qB>lB>sYa$jrYlm*hbN(72tiObF1?Nh<2J{RZ$5x$J zuQeLzr(zRNH|6*c+^tvOn$z5VQ&fxck3+Uy@i^?DICW%bXu)m6&rkW=Fe{WeVB1tH z7B80-%1wVWUM7i4qC6xyEUZv1Tpyan^+An@>X-;e)_sao#gPHe5s)=ogthc+)HdN5 zu}(qNrbVfQ#aRtTLaC6MXmHabCf3JfgJP47!MVX?!J(rb+#pu-N+5e0+5zk#SVyCr zQ*XSSbZE@Td)!8AL_mI*Aak*G2gT=Asg7aH#IE7&tZxZ(CQMm;J7aH<>Pu1(Y zfLC^ACObI^4chtz&78XsNcIH9!Ra1m?`fknL_lesCMpvmISl<1GN~|ZQ$$$X`P#Lpjw@5%q8`eLROoBK9Tj^RdZRL!Z<6UAOATj4wkG^# zwWmi9saP|Djz}E5t`s!7R?$O%fDLk#(K%!s^kX{5a-YW>&7=e2gf6D2!BrBNa1c{= zzY<$w4>xz&KyIm1-%#X?@N%_}HbR6uM*&HqO{Vu)yyw1qO=f&0Xt&C(4caQya$Dzd z$7DOP*|xc;*X zCQGA*OD7t)Za7#9f-CJJtfBEj`~dFlUh$zvh@ZF6f1ZX(a@m2HmoaqAbR7sZx>Mj{ z5ofLlvROR>SQ3j)gXXYo;O=)i6mX%ZYsU5^t^nd#g;uO%9gER!6!$LnAKV1dLF-_? zF%?G4xIIi`A5knSwqio-`Rql z;!+klZN-C~PcXqcPNotBdxar@aU*0S-rwd$13C)?2K-^FV(-Ic2-qRwqaV9~qktiHB5{^;oRdp*q{10&oxgMoG*)b(i^@UIvb#fh6d|ez2BeVKR zS|10QoN=DRl3cBng9iGk^s)5_zgx%n|S?U(1BEdtX*S7B#blM(@V94lPOscn_gN}9e}ZsMv@~kU-7~cIIqC(Q}&8*g`%>@ zt5h2NmZ$~*+ENeBDIgRr#TZsfPzg}To|9F!loH1n?z@sDy3u90%zV0(*!_|?x(qg| z9+*e8yv-W?#yB?{e2w^)^8lhoZo=^gcDuK1@aT=Pq}`l=3Xa%H$2E&+mbqR`J8WW- z2^&b0Krk6ayLzcdVTEy(PWxIZR}=T6-jWuevZBn^YypmHKgFBsY)&=k4;+uZqgG)N|kT+(d3VH$Oj_Tg=_J z6vkJRj91{k3k4@-531(VovCqah#*yY{kSC*a_vf$-q5sWfgXZNtV^F!5xa@pa|lNV zJa^f(RKspf(^!+&kJ)-~V_o!1t@xyF9s%sKb(dFfQNN)gh>bP)asT#b6mQDxi0f71Om^8>5DgzZ zcyI)_19<%pdT>5K+?=!vSbG4zMU9XuBFKyWAcH9?K{+Lg{g_r~g&A;q6QTsySvJZ~ z$IXWB#9(Vj#>$XVJK{X2T87Fz)+ViD6O@dRhtc*e^}xa~Q$CfNxj4a58p{rJ)Z801 z#jmzDq3>Mm;i?#mmmco#_3WkZZ2`R~ zUlK%^SGAzbm8F=#R&dJOdsNL6GN&L^;ZFOYa~q8Tlgce8)QB-ZU{%@L;>NdQRZ=Q2EuK+xg);1@r=k(V@X**u z%^U0qIsa47Hd<>4SJAcc!G3t+0@PJ{=fr&rH{GgLE7#WM3?~n$!EVV)1E$BV;yz+l zpbICo`Vctj`1JuEPs7a;+)XWdbM?#(wHo=%a? zRjw4bp^)pE)SOakZHh&k!#u1yCDO2H@l4%Yh%?NE$~jL~7eFjWNS5f1dF#z(D5 z{WQtkZ1$Q|*GbCGfbhNt zh69mEVr!Jmrx>5TmaDIn z0T4zr0Ze8pDmkXL3>oS0J_sC*IqHMZ+h)Ij4nuS)HsVwJD8qAX8_Esh4;10QOc~hc z!SO?FQ^+jAJECN#1ct%zq>gK^+O>OwnSI(4Dxgz@e-vj({f83{yJ=`u7mAjPlf- zUc1>Y3z*CDX^j#D!W>)W;x8ZQMcPweHn_te8Bh_yv`N_hP(Pn!ZFTNJ)(!b z^$k=j@j$yPDwW>2p3<(V_8pi4Cz6!N`&ZS5KlfU*x30G^YN4wkW)Rp_qoB?f8JVf% zaI{|raCyVP`T+J@60zof6?D8odglzPtt|Q8Fh3UYfIluJSmYxTIC;`DsNDpwB}b%( zA}Lt0z`c-1@j1_F=Of-ff>`A|d5Tjryu|`@BwB>UE4FRp4mIDG`ep{hXR5i|=N*z%R9Kh0)GIN##xqY7?WJAe{R{9TxU=NjOnh~w+n zqZJu6rRND0d{)Xm%VN*gSD#&&K&W$;>kU;7nLDliGe5Axk`(5pK-WraqY|v5yLhX%iE2`HcW>e zS3|W+0|WlGl;MWDmKc4@!}B!S!=!Jve3Wzc_NMZ2K<|?al&1wEkMJ6H zw1w8xS{0}5z!?qdnIKc6wY9}lx)p!DxXLGT3>!98?*7mXh8NQDRy|Xb;wo?g_Ku*U z8g&^{Ky1|9RN|`R`Eg@(NLOvS=)znDIp&X>$S^f=14x_F&9;ud$sMO)^3TbZ!-~Brzz|MQj|* zx>}mbaG@hs!@S9kj^uQr(JN;RVph2Zw zHABcWZ)xjQe|?WM9zC!2S8sL4t6EKGeYg7k7PdX?_V0ev(d!uP%~s=9_qwX}yWQ)z zu5fA^b?Ue}tDk$1OB(uYSW>{AoBQo!HphO2)6?zY?NZzXcRE8VTCzNNFd>Fit7 z>V&?&#f`Rm8gWt~YT&Kr?urIVnKnw?BrPuFaU5-jYKMhd%iwTpmAIhWP4#a%3EZCl zZc+d|U{*R=dQ`pTjkmOTQ!%!!A>dj2t?hYJ|E+0wIH#L>zgz9*U2L~}P7j-JS06bK zc`Ijj3L$PQwxeSN37#8M{jPAwSz?-~WHC?p zF#W;c3*TJF1QXN}qMjH{Ckb&B5oh$Mk5d5gM)4N#Hxu70<)_MT9hnLJW@1~euij*2 zrxqq~8&9!X^((S%uDKcZN?1JWtB5O#V_-O$IjA$;%+{#W`Zu{jn#ot{ID#g2ICIEL z_+C{RGdc$R`6f6Xk@()ifePp?`Y_1W*qbJPMCK%KX7Y;4HS7empqe3;X%+DT(+N#i~ z>H-XG7?s~WH*PE!qA>)pl4U)khYn}4PwC642ypGifU11tO$HH53o>Gss`((Zv|tg&y;CgM<4*y24?e2%J+0YK-eiO+`RvBnm__L@*hN zLJ%uA_eCO598`i#5l9X$6Vp?L`HoPSp%aA3@_KmzUO?H?bA>_(DcT~F$zvwZM15@2 zU;ad`5dw<$6`yy)=ydVQQ#jnZ(85vqO+SPbMM>rIbS|$AE~lp#f2=J8JPYxN_Rwj# z^@Zi)ZQ%2;Y@FBD>OO)$cc#N>yYR@ZRV2BsFxZFd6MNBzTYe^&0mgxx=iboi$&|QI-g$bGhj#kX$qHJMwZ^J5WJL z0u{Ki1e4v0oRp+0VNY*5H61dg+KQjW;pPV&AWZiP>bR&kRb8#Y%TpadEJz$EoI}Ju zyOHj>b;u{GQk`2am7S?-9W{dzYQqn>w?vYD<0Z{ z>e|4#Hk3>&=Ieyj8jfGr8$4ZR^Mg(`B)1?Wj3-Dobe$t&a%+gMR`brtx!H<0-&(1l z9}T~v3vIO80FAZr3}&bPY!7Vs2`nS& zroosZyRe7><7h@X7fk1|q@ctHc@#>w!9AZlJ>zzv2vztKHkCV)hb*RXo#~S}o=Qcm z&2VBZ%AXFE;<9kQkTf`jyEG&{pO~Q;C3`!7F`AQI+X3v{0SZG`TzABy;Fc`n)9f)#su_hNU$2s6s z@Jv*4h(iYHG+?Q!bQWS^dBAoCRrstOYpxfv=}(Un(I!fM7T7rVxiGlP-9-m zj%1Z;?LdLvJ;K9bRJxaX3gt~)zOz>LO9+Uf1&P(6F?O{9XQ|t928yC-SD!b+Z+3>PGNcAP+LjojAu(qCD-0^eAb<=0WrQBs1yM`|S!+!aCya!dftAsmmas^j zOppNV1cLLrBMFoau$Sk%CP#Mq)T}f4O&71=rgDsgQ-1v^+?ulO&5D&5%Yy0Ril`ij zg;XyWVVX(Hieqi5KNeDdu8!45wOBD-Fjq+?e=?y=71?tWF|udPL$4nZedKlkMp|9- zCW_$wTD=NmKw-;Y#W+~C#cFa*I3Ur)5oai7v5Iivnt7J8D-x!7tk1EI3$(M8v-=7n z$Bj_R4IGT3B@aYvtdv*O4+D}i4%s_td?8q8ncEHQgB`(w@Cb9ur~{UO(}}4lH-Q^( zML%*R?*wA}!11|Gb3kpij3WdMZ?TRm%3z-X6LR~c*a(89brb-aP9CMbC;YQVKR3o7FBr8 zPVBOqX0fnh_xW|ONhM{kp_bisoKs7>ew12v)0MGW()289*P^idQtu5gNvz(KJcD{~h;5vDQ*#mOy&*<& z>P^j8h1`wtRbhiRmYiI)+-*$}h%!`qLri5?nwq1e(i`BYXr(FH36scb&O~ZS$qc)fDv?^!^*;EGLqDqR zcG4kj21_S2WbnS(D$@14RI!_Ww_8Du>8{10irq;AyNYx@jw*IH_U$UVclS_=o|b)2 zF1|dy94%Hl(`IrqVV$Vf9^gi~&PpQ6aBpDJ3dUfTQjRtgv+7K!3gT-iUKpLSg3cDL ziTuRWbW$UHrmOv%*pfHc8|`k53*ftLNDV&~{_#mUCH$@kVG`!WF^Ll&9wvrgY(b+9dqNE))E%|o0pEfZ+ zCkQ&*RpN{Rv)z+0=_w15g_*rumC$6~$7-4}Nxy}iRYWep_COiFGG-%s z8iBK`Pj@6&sl2wvNIX$OnbcGU>B%`qRv{r>YiiAg|6xaVOsd3m01A`yQN$;alB#Iw za(Sz?Ch_#eC5o=$JvuQJfc!+l@XVK5>Owadz&NOI=n#f+GXT0V20_Lq#4aGC^I(kE z^5OvGsIhtUInDu`<{6Ik$N^FuxkN}^aPr{^BSGvfQ?*KyOWd5%1bN!UUYSQ^>qf(| zee1;Cj?H}1P|qXE@fLRXVwl->)Hvzu6#?c<2l;vhHyF6Ez#5&WgZ#Nk#Qj~bmmT4l zKj-nm89cDZy}P3s$L?HWOIr+9g}7GGqv~BcDh)0cKMi+P&8Kc={jQaVm7)OUw{OUViTN&O9DXOpV}<0JHnq^x{~aY+YuM> z`SNt(^f_m<5lQH~3a(7x28|Xx7E*11OfN*mXd)P|Uv^uKG+Xcy2#C9Oop<<7FS;nA zy*wYry**J9(qMV!w5-@1)}j*}$>&Yl$7f8lUGKnvl^qJjz&q^9qMSu zemYZD-enF{ood?L8N~F+yyF{phDqrPSJd^~me3w8tzGrbFg+!NR^_V0{AVgmOH~|x z`&*S7Pgq(g=)_b25}h;IEgd{F5#_0}-I=J6qp^9h6I5h&p~gf7QH|McIsrxIu0Yod zbGdm4v(XiYhD=WoKFHU}z;qV3IU=;x0`3y4JH4VG!M~xp-h#mMRHjtDbasB$aez6C z6)CP3S@qzhwTTn6oSBqwrR>7PJ_GL?9J#4m=*B2Ib!sNNRbFu%)RBrXhgbai`~*D9 zajSc=Qhr*zGX%7F_8V>5f*zM7QxoT+L`6cX=1x6)#wl1W$>lMSt=_})`7_>`dabpU z4i+bunc{kR)luhVdQlHj0V>ac29CFsO7pO;s+MpOQ*b5(0M&VgbgSekL>pXj1g=U; zh1nEzJ;$R@l9GH8tPYE_1L0(I6Z2Cp^^xu|J*G{iGy@QwIirk=b*oXMdFiZysb%^o^XCty>s-9IGlpB&YLPEt@C2#9xgU8a^pf$r6;r?-u{OR zbFtPctJCb65533>Irv&>ORgvQjSi`lPot*5lj*5^q)4 zqumE7gtSzBhpf0Wel1p>iKzfgCk?>q7S?D@R}!2@WKGU*(WO>wNNI?U98CtvVQnj{ z3BVHZD=zwv1vEaO*YyUi>u`~BeuJFhBHcXndN(YcV2jtVI3SF28+GbMHL zHQzZmh=jC-XHVy%L?9s_sMfN=o>}G1%t*Vg5hu>RIL}mT;O)TEsR;d)7TvR2+rnj_ zYu0ICm+Xnn=6bKcT0y{A^I$fN`wnG0;$O%vv<0&O7ws)v z=R;TY7`MeSTAX$v72$Y))m!v&<^gIJfT*QF99RP9v?@4AE`M5ms*SGOX@tx|nQ~y&fCMb4?fWkQBSt`Q!60eZw1pSG1IBN18?OtXB#f^3 zj-_W7rjC_#1a8BQxL=i)+l~vz1XKi?qYQ$%+d=EX+w(lB5L=VL&p8W|@*4V0@9FE~ zxSFF8MxmpmpLOLV64KFX(bW}4Yaa?DLnib2)EOW^U5+W}ZL*|;S%Qv-DLu}%OxFK-Nn z&ScjKpgq^M$8aplx19ivStM)+Fs7`v2PokAo-w8wegnmM&xbYzb)C|0k zpzp@@&jbJ}TnIL)5|F6)S6j}~cwW-fO+)ZXsg%+MlVZ>nM8qmQ z;;bsdbknjs}~*9ok~k69dFN8qtz@|oCfK{Q~vQem)gRzg(99E=y>>2nr$I!l1cxcutO zY70qAGs`aIz>8|Iu|ck&IdfwtX!hKg04>Scb-^!Iuy({4c&cH@-#OMu955_EGme+R z0_-3&^dnsNvk2S9g+Q8_WT7zOnhzGrtF;YtE?&7qN7l=oSahMavhDB(Qc_`3$UPPd zOjRgeH6+qPF-1@+6k?FqC>lC39VQcb$M{r0iYMoO=%r}Kg|Ubcmm3AYT4I<^2Nj)~ z4wo}i*;DbY_`;c~HYX`gbzj(`u)uU=d>5FV$Dx856L1}2M#WtM`O2FZ-Eo)-8=Fx_C{;d!XwB`}EwbJ$rTxnS@-6_~>gr5tPyAMOk$X_h4~IP;LBm&g08wO*`G zEX;thVy6CrewF|;YU)oQ)}!tiz^Mz|artPu#H&Qj{zre|(dqqf)`4ho!l?rZg9!PY zhO-voxaGLINRqLLrk1>ma|@50%aeN1?o{dCWt={JAl|^P1}?^!aR4Hg41&qjca0(T zGkCvhc5%+x1=bI+D^=gb4V-J(6QZbPY zI_lw%jyjHHNC=@=uAPQl{fG*TSWF|?(P7)b7aR3}lN~;M_|VWpBhHGvYYi-x9eN1y zhwU2T65!EdbG5dapipd!aa`!B^0?&gvNU+K(JF5_J4h-mRmVTNc-qxNCu`oL8(0^R zkx$=`y|D|mmiH*bj4jq2GkfKu7c%se_L3c`{8ll=>#OCYS81*_v2bDQ%!NsN4CU?6Xo&p zCR`K1Opaw)r6Jy(`KRy7{L0&Z=iXQLO#jZkiyOFQ5Y9B~ zI5y_3;-)2B3V>6+b?C0NMdH4UO{gmaci+9YSA+gfKYQSJj{d@_Pnh?}pZp)6ID+3J zfAXnMWaaa-pExX^zx#=k`20Ze@Fx!8^XM;3eBv%i|GdusCH?vP@(KIH24R{O%;z(i z={mHGik49Zrk&YJ#Wus_9Ep6RqCO?iO+lR_V{~TeZMV}xsyNfGM||b;RlFz z^5-(3-}sM9MwVk?`3ydonE6;wCNs}3;{g2w{NlXuaBC0J?#*OA;5@Q_9>Vi+JHg9j zzHI+?z7N3hyNR@SpqYXf+se+iUS1~ip@Dh{d)t}Jzhpin2u~ss~iI%*V(y zLwJKWnfKyty~Z<{R|o2i`YO_-tw_k+h4#otiIQ>HFD_^^3<2oSh z>>Ib$u0{_}kN&4uktphI{-PYS z=Rfn#mk;5`;U7MLzpaPnclN!C{MYhdzjoKPx4$s+`uro;|4X**!fV(3>(}zHOYYG> z)cN0r{2PJ`o6!1!oqa!tU%G`a5%BfD0%EVdGV^#QvvwHG0mgTXzWTM9myY4d8GX6aAfiTi$r)$(@~j6?|T}@bXW93NQZ@{_O1g0#dHs-Ng47 z?%LV+Q}Sy|e!cXI{E>P2Dt=u*e_JMV{gXiX`Qz^a#7yg*8~@~oSpJj9bm98CJh_K; zwcgH({xOqBUw!TRGkEgVfAAl6cCPK5yY}@T|9U@&_VU?bRCo6z|Lz;--yc54zXuQT z@9{DGUHj>MACix|7vd_geUi0KZzDycoI$bkht-Idr5^}e0}~nGh|wKA*^e(N=%!nOQe*U-DGjm_6v_dkF2p4(f!*T&y-+`IF?eqVFn@q794uH!xYc-!&J z_B0;7uRQdTIk--Ann4})-mY+EAsC1{u?^`&X4m!q<^qtq_WyziBE$BK{@!tjomZvllwmsm=&SJ( zU)Z_t70`9(zF!gQD*Sg266m$b-g{oC^xpF#-VeMUHsuX81ufWVefwJe4GsE*{I`SF zy=K><5PQUM$a{8L_b86t_|NYFxi}`T{~0QK{xk0tenGQuCsp=jM*rgc^*@j&??m(O zKF`j;57y7SVm!^^2`ETsBNNcde z&WrhPDmDV4zZozKas?cpzse*XH$ z@c7!pZ{XWc;@c~gp7G3A8^{gn{>S%vlJ%;xW;{BKX znarQ!{d;)-3f`Z@`{Q_j0?+vROO$=R7wY|efQ9$p`d}tg!uucL{ST4OSASn7^BKIq zg!gs4zk~PR28@2ZAH@5A!0)s8d>rp4-am==-$vTI@Xp}%ur;UGm14;& zRnJ-_lZdmjG9d;j7KUz>g$!#|T*J+g$m zH0q6|hL0Ny%+0usC0roUf;qj>Y?aD2Z)9kAXi0|}Vs%|YU;EDyfDTgTo zTcs7j&i^6wrL$h+18S)J{G$Hk@3(Wf{SEa02GWvVe_i?e z@9sH+!zQ>T00(1cU{lFte)aZ(lXCPnRo-*tT%7o?Y)jq%CxMzb_Ne*R>yX8BqjX~W|x`9dz2!y}ma%d5-qszSKg z&G9xMFno}C7=KR%MbzcU?MgV6j*J7u_~V(M{ehFKwN_JMFdD$>R{ijJE|Yl}Wy@8! zC=O0{#GFMxP5NL%lb3&{M_7m#p;EWH0xE@seN$BW;oDE1d@ya-2%3-N^5`HeK;|E0 zx8jTXJN`I`o>{)_lfya`^EwvB*|fzM3g z{KWj>AsGhy_AD1S8|%yd)iTUv{~)uxj4r3=WU;>9$Q;(y45^g zu3*15^MyOq)1ODVGES}F&eqHwx5-yL-pt$?eqZ)8#{dm?VVBpN8{obYCln0J{|99o zev{IE6COu?y$)*~uqr(Xr;_EhQu%Tw^DmHRYZ;|+F$l-{zf!-~)UPLj8*T(G`O90i zG9zzfURN-ei(6aE3^RqXkGkv4<&wYBT3`3;%h(BdDwCPWoFtxTZPOngzmR(j-9_pw zXzKjw?aQqy@O&!saX^IFs8yxGmv38^)DPUgtW!R;2e2bJG)OUC=)J72GOv#*{HvLF zkSdpJPx;GNicQ?d4J)cprdh95*0z=#nar=>CSgKYhhM_=(15V+XYRd2JXtdT)P9Nx zgSfHM4>D!4cPyGFVP?dAhJg1!inMIWrClcR#2x3V`jT}NRu_-!Zq4kw1G2R35zQzrKxaZtN&;^2XSS8ZN;`U#w9IFCrX`BxEwbWZ|+Xj4)No zWd0{BRbz+2$d`{Wux(C4>I1N|{^^{ND6Q}Vq&nl%4)OXGUse|g_;PI8Xs zi}N_=;a=z`-+%qbLjl-z@Vd=xeSCx};vuNPOyx^Gr=bap`!?wt3F$Bug+MGgO#c{u z|NJ=C0Jmo{Ur`lgK0lGk&?aYo_uoE-T<0@|%rgGwGYj}Om6^-T;`bE(p2l~+e*KPr z`yDQv)tf2&p2AjM43irRp4v^UKwQ}*6>=ulVYZXryd~Ik-mv<4df|FonGb& zKATwe*D@`9dQyKe^OQVY$8TarTs%Bge>VV=zkI;kl;=g1@=#9|P(2N4OW?8I6+Br5 zL<2$9uIeL>4`$wBwdK6PZ2+!m!*J#R$__>TvfQD}J5i3bQn*x6PX&Ea1Xh@G(55o* zDdBrnuv8e4e|`|eQR%TnMw~kVnh%*l(tu8e3u=!I%&UL_G3rT}4-Xp+h z7=N)A0N3sTAFvmhOW|SqhQB)DGXOlU3cg1&cLUBm;M7oa3p8t5tzkW3dpv2kX%W^z zLc?fTmy+%1IEgmw0e2Tsv%xy#K*(YleT#U?_BTM|A}|a4=k0g=<2#NO5#?xerLyf^ z-KJf%R-Yhn39Z9=4E3k50Bz*0 zIN^`)f!%rNo}qh(28Rv}ogSJVS{!;}s5Dd^dS>W_p}#lu($Fss{iC5@9(rZy*M~km z^!cGL4t-^4XXvisA05sPj}JdQJU6^Je0lhp;hz|OVff?2zcBnu!@n~8`QhIg{{7)U z9R9zC|7`f1!+$w^`$*5o{Uf6zhevWFGb76*PmXMj{MyKGj(l$9Uyl6#$RCXS$;h9L z{C^|g9Qmt}cZ~kc(f5tsH##&rJGwaf_~?g5*G4O&jnSt^e|+?(Mt^4XuG=zl-@ zOQZi}^i!k1J^HUk|IO&1j9wr8^UTYhyn<_TP@ZH1^4{ z|8?xMV}CgIr(@q4d(Xjp4?b~l_25q&eBt0P9z6Tt%!A7hKKJ0yKKS<@%sli158eIH z{SRGv=-G!p_0U%y`gafghllPwboZh69Xfs}e`x;D`9n*GRt{|(svc?{diu~u4*lGr z|NGEwhatE<%4gV5hprEOedq(j-f(mH>hK3fypi#drI8PfY>YHHQDLTpn*=_;*Ivg? zZf$Js4PO*h4cv8(0Q%dTYqje35*Jul?FL&0jZ25K6i^VO1<6#+%g_la~R;4bgmt4Clg9RV10k2il6`HEz3ehF` zD{I>|(6}3Ns!XoFep$Yy&0a5V?;^iso%Gjezd&o!RU(Dva0C6W3ZNwn6V%*A9XVds zotj{CttP2_s)gA8b-$#3cB@SnQXjjmN{@+M)f6d{xWXMq^in7K^wnCtZpBWlJz>nn_wW z{2~Pd`_t}=2DYw_Mdcx4MB_*!mIU=B=eNa!;Y^^uA*yr(HxX~)K6kbKwfC95TXLbP z@Aa-KR&033y<#0wr+@#^@Zl9W*^`KTDhj*x3=W~#r&gL+1`$6yCCfsVX zCv*WRc+@0@MNH}7Q4}cxtzcmH1Hxk(1m@fpN0fXD&fo{EVmc7 zP``*EO#LzVnpBPc{a&#VaMFJ78BEaA($rwkc)exL?SN9n(fR|PGm&_`HJO$4b7D|lLoh_-^^PA$)lyno z9>Bp-%3#(fA%Rh}i~=czLg*+JnOby7O?$8&wjNrTP3QVmo!~eP2VKSUs~|qj`*K`6 z;E7Ug0ZopVcn%KU7>i#2QZO97UY{rt)q72?(ecX1*!`$oLDryIhCpSE4O-4|TrJX$ zfYQ=lH5lsH2lDGd&HcT8(3#1X${z`LwQB-2qk=hNxG1x zY+t#tT!k)!i2SHp(`>)sXMUl-`^(kleza6SS0#s3ubV`-%rMCkVr#MintGx*K~vWV zI|3nAK~>%fZ{*-X7dDcF=mZ+(Rqd@~3#wkVk+p__I|vj{Bo2eN{BIba^4enj?1>G8 zMlbT78HiY=QueFaq%WJ*;tj&FFMGakzoM{W+U$udFf{oU@TOu3^!jwIx_(}nRHWDU z>Q)U&vyI3N^J^(Ii^?^J>+anZk`$zZ;fBUg4FJk(=>a3@B_E_|beJ1$-86btO{#s~ z@e^L36iMP=dv;Ybph(E%nstMt6T+?#NrWJHK~x6f8%(M*Vl@HrEfj!k(TUMnpP6-A zfr`cFrY_1I-9f=jfI%+Q3kEy-s~vPoSXADgv0bjlbP`T`!8fm$o#59o7h1DNkj7>N zKZMO>@^E2;IRl9Ogk#WByqf|7C%Zs{QBzR(8xvUY%)&BEB%0x`j(CPp6A(=agKbSH z?GDlQc%Zct(W#@qcSS{kwb~cg2K$)_GFRvASV2y!ib;@-WCh()gGB2@lEk~01EC`- zQcjJRb_$;n#|fMjh`bnIY5Cc)Zd2MQkQRM)aWYR=NN(S1Jtxp_y?d$b1fp6|%KP94 zLk-x;Vek^6uZK$mN_w@q*57xmjNOS7_ce|U$`@lu_l{AdU`-~E%y;V6PQ`XgSdq|4 zSEZ}anh1^y*DAU)sL-Y};yP*FUx$|M*R}ME^$7Las%UDmjMv%J9GoaQP(Vw;hMFP* zvDsixg(@~%3&TKT7YcQt=ekTqEOo6xb;1|AlI#f#P-|7F=3ul!D}O<@awA{ma=L{1 znA%tHz$s5*&EksqLSW8ip_UvJ1fSUwicpnCNvbYQ*KqSss1^qNGNFj$sr78neT^Ou zM-_QKakU1wkkux3&cp&%#N|hRX+X}2V;^P($ZvZf@;b6M5x^W?aUQ&MJUX4=6gjkN zwV8AV$L03I>|{GGF5IGO2?3LNzz3ahFk zI;>e{3p56Z(225aU z>hHxi2#kG{4xZ*E0r25gt%)wvPcIH%+CR`o0QdJD^`6rsPU;4Atd2GH!<@Q>I-lqp z5VQvRSSx*n!=|uDDK2m$LUY?{bVE%6U?K*X1HeE!LlV?|aHJ23Y(zrC6I~PW5pZ;z z5?4e-(D#9KFu1A(aFKqQaA!o^8H=RshMe`pLMnzl#Rah+#v&ECz=^LP%?qJM8!>R) z>shKURVQ)v>^4G+Z1S1{j-!)HRk}a)V2B2$2h;MzLfB(tpdPfe;ai2Vda{Z!Y8kB% zs8gT|_7-j;5Yh-?15}0pISgYJJyNbNE4dK%yv-7g17dDPAyP;aC+HHe+6ix%D&4&b zAW4}98JiEpSwi|$bvS0};^qnrSG88d>%Xr7ZnZJOcO|tT?s6+Db^mf%PH7;%6~ha!uHnXCl!bvsjC>)Mp?8uyFwbGWli7K15`lZ;#;LsBSSyD-vr~GZm z`l!I=fV<^Got0{#OYB5Mv>oH787O3ra8rK2_w2KJ$Rxw*6=4x%-|rpshRt}B`B*Ih z5Z0X1p;@ovn;NSy03CsK1q=mqgCbj0wl-QTC}1)VfiFw47YKYF{Gu*7Uf1Y zR?NI>@P9~3?5Z?Z zvsUF~{d+_4X=Sx>fam~ILFH&8ajm>bqBd+xT+sG5LXj8JHMLj_K$GcrCA25B?rauS zZNxR2W?|?^-av-aEX}D%3t=yizczlM1|46tVC-45I|v~wONe3eWVoDU&ne9TENS{T zDvnh@nR)?9&5WQ=sIEp!h{jCFwA~u!GV(2)c$D>971e4oSxV3`0!)cB>=%mu5n!vt zp!WcVlFiRpPBM$T+zVA(gA6t;L*nV>2R2=B300^$IxM3FuoxS9i!#Lq(-?O{LShJ( z0S$;Bo?$#zaB+`_b9_ zSq;`1?e=1>c2``*20fJG3jvIXQy^I<?1*Sjx^T?6&`Gr$+g{j30 z%d>L}Gr8#lP}$I6f(fh2o>1Rcuv}1kE+7lp_JAG=eF0y}Zbiu9U{gR_R)ypl_b6nk zXU3Y@#98yPO3^!&!7?hLpWqOd*iFR-f;xW>cT~iYjqMac)GKI{=M6niq>LR)zpgN#|<2!cz&FayVedms^PTQ;)RHYgf0ys<~6tkt9dEUkQ8kal|!vUl) z1~tV$TAFAT3@RV|NDz6pxdHMJ4k_Gwg$aPDa{jY4H|I)>aPi$Vgf0O9-5yhb8 z*%Rt3W(Fb%WFPRxAbI$!Ap%{mK{ZZc&CU}btt#J=n*sBeIW*3%s07ts~uRl$G*#i=6=Sngy5fE6dl zD`10~iAP8a!;16?g} zTGhrzd5wm3rkmMyZ=W&dDPMrT14zLE8a3A{Ks*l$7bQ>#GhHS(1HW zmz>7$#FF|!Sh9$d&{9(CzX$fpWB~SpZdXR5$daO{;=5K@r6JVv%2?v7hey2!9_THL zTvVGdSbys61h)EOZ~4;2K6%o2Ny+C}GNiIF2M^bvu6S`ih?iEWrm!I@dqdDvHJjwV zOW;0|Ik5tve+)g9$_hwqlqazh%S$iB%B$3{e4N(M2f}r_BwMy7;W7n#jvZ<} z>+_~?wVQLp)ehU$s@qwTT5993*U_5FFg!axvFu#aK-ClRJknN*6 z@5{{=rY5MJktxhph=raKX4*q9+zdHjoc2u8$R%O@_P7WJQh&&M+G&7+S%fKXyng8U zBw25x+1yr|TZGpNNS>%wTAMI;i)A1IUwB{$oUJ zN3o--z5!xlzH3b05)?vnfa+}urUS|#6b?8w)*beT$vNmUX~!mBqDp%Y0c=DWjs)pEiE$St{f$Ce|*;( zl))vC5xa#C?;sy~12=xa(|y^hX^yxJ%I3Z3fXs5)?+Zth{32zC*)SD}r#mjeOSmt4`SN9S2`ul5(22gp%8MA9ynlQ&ni*tr z9goAz$VyUvFOMt;&(%#yTk(R;wXz+Lym;j06~+4%`VW3$ z;vPxWaB~&~WaHRD60VyJTx|9v@p|S@u$I0uFuV#4;i?Gv;|W4smrM`0@n9=c_MNH9 zcaQ~;U`Sfd)dO5mc1p#rORoN<#(A&9 zm#Hqccpu5sHMc93v1*4e%>F9rC*{SACy-?UA+Um$G(Du6>8o<`?MNu5dPar6qgO6< zg{p#`Mhk(BElNfraIaUaO5;lH`^3r$6s|&QCW(R)sB@tVKIICglmG4tjrio4hoR^^ zs@(+PhLYe4PFe)sJZ}-p&}ZWb=JQ4qa699sI7?|Pl+Vsik%f>-UK`wm&xt_XaHuKV z24R5I7>!GEJrI>7p*sOZ15W-W`pYFp3Cc2iX8~!LB=G|jmVY8a48jtvRn(>3!XTD} zD)6+F(*`*yU+AidCizm6Q6j$FSTBQ)FTT&b5JNU?-^rvcCC9y9}fIizu}N=0lHg)MdTPCi@U-3U$Lo>;ft# zucEtrV^dpqn87aD9ZS_UyTvngkkJ(m?m=H;If36Xj1c0Sa;6UiDB9)&Sz0_edbNil zl2oO!cbl@~rK*nr)1DAQj^VG$k?v>-NCCyc9cnG+tN(R64O>uSGvT0uMF^i7w`R^rm$Hz5J^r?Gi325-r>>08ZVe}9bU_}>N0UT!NpLUju=fZ-y%E}>U-b?lZ)_n@&>Wb@pk}@%ZKr4 zi#sr=v@%+Tf&uj`PG572I%g*rDE-ID*;|N8s}0_95}KS@?pYiUQt!^W&$+NJ=@UCH zaXIHlcP807Eig?UZEY^m6z!)lcka8a_t0p`G*MFW$VhP^6#`bYpW=;g%c145)hC#4 zO+86K{7g3o0WS{+xv|;aV>h@<#yl_IUCHg-vQ^CP2Y)+41Qna6B_CLJ|8g6QM5TE4 zr0#mK6yiRAuPq^(Ca3*umjKlmGRq@PJ(~x4g08KF-0ZvLI()bHJ?gl`nbnj(jY_tP)jk=rlb@az%F#f-5)J>v z^8|1a!vI^vPERL@L2{AEo4S_vo9Xcgz#B_R2!*@8iG{z>4On%%>}wg9KtIx_L6>}_ z&U?ak`qvz0`hj>6X_!vg1Uepv_qsl&lNJ*sNLtDsmf$)3Le-}DMMe(#hH3A)oO=>v zv@*FXFe`GL=7b3#>-S&Dad-+ikAr}?+##B6<3+Qf(qpUV$#e&*cT+3GiOu7IA{EDT zcXT_G+5N)_Zz|if!h5pcN~g8WPinf??-#(?XCB2VlRP^ZH%*rTorMG7_+}xzisRKD zkCe-#`)^em#IAm~^iGe*OtJA3pd8b|H(L*$a4q{41~RTb@|-BSvP=}#x<8O!-6;2l zh=nF8Jb`U86M?n#M4ehFi;|LdSxP13G+Z{RIV2=rxwpHP7Um_wD9q1C&k6||MP*nr z0p>Vphqq^7n7Jig5huce%8r4Y|AfW4%pz+Y2g7a~qk3n12l+sH<}G_#5)xMmof+FCwyeu-JFo*?R0NdMNh2t;CEnAn64 z!nTvK2=dBVJroT4k`-5cr{06IhW15BBZ37{`T^s>0VT{__l*r})-8P?GN>xJz;gL? zk_-d&Qb+1O%rR`(lLb%O++s17*2OGODh^?EW=J^X2zS0`yJ>DZ;>FJT0H!XM{Bs_< zknw_-2#L_HN+(6L651kjxSogyx4AUaJ2#4D!(30EeuRJ=Tu)(5?Se@5Ln)S~#`TRVuvd^@W9N9OP`8v#!5sVDq9XXFq`sRa)Wexpes5*mUjmp%EpWpjq)D;tsT zy{**XA+dsTS2YybtQ2)kF)Dh71|mq*=JZfVWqM2GLZOSG_%Oq6%v}qha}nmed`)KD z0Y%Qni5vf31StX5rJI6DXw+l_!Hu8eg9Je&LzpL99ZgPFRYDz_r1H?Lt6_WU)+LpwfzTc-mEY47^VDs~4x$99CBA&+L*-g@$Ahzt`P!eZY! zj+qVM;)EYXP~ZjSif!Og?LPXc-5Y#~HRJTI;G_<|$w1bmf`rK_R9xe*I4H^OKA@5# zec{6RC;k*iv0dy9XKp6_y`>$+1W3XKoQ51L{Rc=K#c$skz`WAffCUHAqE&*!MGxsj z7)48?poeVAx6<}8E;-&m9VqR-Yv<;fI>*-g?vir5I3D- z%6oKWK`#_?WV*buvoz%QMR@+L#K#*pQlaL)Qt9gcn#%T{v`y0{A$Fm4jBuL{*APc~ z7!)b@Z{X=a^Jz~W>+->9db;?qr}sM1sY`1)(CMG_^d_5|mnS#r_+cRo=olWX^Uj}lai;L6Yr7lv>)J1Lk9)EiA#mLr z!AR!B2qMcn>B!BAo)FIE9vQ+leDtvwxjD|uWs!cOn!Z@Hjw(TBU8?q}$pxyY%YT6i zDQvx{j>bH9tI#K`u>8|iUiQ#AfW!&pCd@p11n#?#cVT1DG?s{R~+&q8{c?%U9qW%5{klhdV6F0&re5( z_|6IGy!{?8roN$u0||5d{^RQ>&Fv|0pOE7`4`j9dNu!wDqJw&fkNt#mN`ch%!T+62 zkFV2bJ36?=F5pYEMVR7w&Do}?+yj(P%R=l8fnK}jj7W2yHQz^Nd#HfmVB{5tR-VGN zcJJQ3t!Ix`xV&p8wiI5z-^yVx2i&`f?O6rbH`srF?7%k=z&1#@k9N?QAq)<&{l(y} ztZ-=z>&Ju9;ViL;aB2je4PL!NULsTJSR|d=w7#wk$PxL$RBkj~0vWIS z1=v<%2BKSUr8QzruY2^vXmThqT%!q+u}=b7O_HzP6J6p?Wlh z-)j2Z*@R4Q##Gh00aw_5I>d&udk9^0E?J`#iLdNUip<++Qip`Cy)c^y$fW7kW?b~e zDRHuDCZYc#cv{&7TXm4QWG-w$mLZj0eB72xx4usPDc1)-LdC+U!!UI ze_&{*!RWtz`*FT#I*+lXKM-~jBAuZ22jDm~>_M3p(HYulwtR%h&H7}TdtA@P;eB)P zAzCvxdNYScre1WsAvU--01LHdW@d|RdV6e%w%lRK-r5o7%H#dXYn+@+heHxc7dJ9E z!=(i6mdq*ONWg)Bt^sY&&penV+#a6|NkI&+2pr5Nwycdw_khj>3Cv+Fkz@@*iEy5f zW_as$B1c#BKH8w?>)t@j&G`S0KD>}U z1)M;cVvPTI!%%%Rbsn#L{;(E`6q|~DK9nZST@iwpV=>A!X$i)ye?F5e1v~+<(~eAM zGLuS*b!kolC|ehq#)!_&nZ|GczX&|q0atLsZX%idnBM8ud(MqKXmE+VcpntuXX0Q5 zPlyhO%Ye=CABI3!Jv(m(UKp}!q%cm?lf6X@B!_=mJe>^^D_|oP4^BKAS5>$(4^5;) zU1FW_Py1t;o}kX<+^Fm^0@3+SM9|Vj0f-0M`LM}AXrSZ_aJ+R4YM`rj^tVr*eYN>y z@9E~(Tif4kKG;3vFwt~(NbqvAU&iZtIBVcA<%cRNF1HBpnCF^z{HyZ zF(-llQkr9Frd)igEA3HV?$m7*<;?!6d(E9n+-NVF6SmVC6mAqX zUdu8ouKMLtWo|EAyrR-BpMbFr%8ZltD&VZPtm zjvTX!p`50g5{DrA-fHvGmMW>g04s<4;Xoq;C zV-~*1s)gqVbi}LRhX76p>V+{0`oRMoCkk;|Ra@Ws1joTnuXm(+ndIxc4MDSQf@GTX z-_w1#0Z@61)m>ptiOEhHhF;F+Qn!D)VBD;Qar=AS>fEhH&Fj8(cKHRDC6;ltN%W_@a5O#F#LExv{5B9~t$%3mWWL`Mf+y~pFY;Pdy(U~iVR1KQqS z24rw`J7B}Nd7uw83v?rHc3Qk<{7iVqD3jdx;MdFPMU7mu;@#ZiYO|m+yxK0NkPo?^Bjk=cD-{i`C zxE7+qgx|$naBgcKeQZ_f>>Frg6VhwmWz##Fv}R~7t?x5<(6hKikY_g|3R#~&`Uj3I z8jnpxa@1o!WD(y>XOCpLUxZd@M>R9+x4H)ZjtqlLk+k}gU%5-r$^LL2N)zrJ>E26! zTFT<&*{7J`hoiHR&j1n5D4^>%w_?1=W2!!dI;W7dMV9eWrfLZc6|Ul^I9&$2%vYsj zeqPePErDrg7{GNv+BgywI4$ z9gM1o#mRix=?aHBLDG1EdNxqGCLc7sZ~)~*yA2|(eCcrnYe5enO>H2Ukfxp*P3RK( z+KL@gm=ZeX00~!+?IDZtoN4xT-=F$4AHA0?K^8R%hK4)j7XStq*Hng@q zm=J_njrx>K;?jeZ;S&B;=%cj*V>}a;jMAo8@8U|Vs zHYtbP(1!RG@;>AoS)7-BI<|mOE;gAxAL|z$%gd4iw1zgpMGuF*r8z%nT&S*N~L z0~cD(ezCKAx_kT*Kjh*_xmPi_h`v6IyK5Ar>;bD=m7?-R&I}fTo=?DMqOuP;APM>O z*$16@q{Bhw*oLAUEUD+)$`rd$V%zqcK~J$G0oBv7o_}4(GF&>d@~?P^kaIm`HSs`F z5OuWAr6E;|vLXHQ9reXoB+7%`F_EQ?*JLI|Ypxz)3*Q8BgcA09v(;N&$kd|Xg;-jR ze!|xLE{?LI#uMhwY}%|TL@r_=IuD@2=~UVbF0GzKkzHsdx>y1Z!NFvO1vLjIGMJ`s z>g{ND!LvH3G6yv)TO+2_%xGD$UZnK9qGWYNnF>2H^zNDoFFTCUKx@XY)^76U@(Nut zz>thMI@#|uFB6{G_#@0n8*0M9xqe?afajq$3xJ(W4kx+jOf-rSJjWMNBiWxK+8_qc zqO)pIeF&@&qGuCf`QDf6^`>uwY8lG{Kw$@A1ep4#3L2aFMt5WS?me-5U$H;eM zSPv9Bo>l-v@4B_k>FBQ-G>EkqxFSG#Ft`GBEjkxqa3lwuZXcmj+yuWd_|M^uxHFYR zfMvu0kK-|M2F{6|f*WaPRbh0n%kUhV^==IRbErB;U*_kS{<;XL0S_GQ6M+A0J43`g z^WEJTWm|ylAJi}U&&xSRY>T4O<;AABO56u^ZnEla7p_vj&_H0NawWD7rQ<=(h2)M^ zNrmKC_16tz$GXdku47qyTpvVm3*hdhT}o{8Aawb-2v>Kx#(RZy5Yb4%fAd#sSWO$juUVnPitT@0e5TB0jh?Rj!JCG9u91^t?&x7 zUG=0lS;KC3>X|xATX=JG#$!3CR*Y ziSQbJZ*3uJWiIqLn6m=U23#VrP`E=h@t-y7Sz4c%DOszLdsL!DUj!`*vDHvVbf`uIgOvX&3Mi|)AVWaFB-lsq{{PE{0<&OT9D zN^XTV&!`OtqDy6jFK8!}r99rWLwK-bUpH{1%gek^m?2qp+93DXrv(E~7!o_}MTm-< zk~?#&yfi|*ttk!`{o~}|>@9|~dcEL`ANTYck!l61_=Gu+I}t^vsm1UF;cLrC zT9xYhv_7});M2h!47$ddxp@kTD5goB*nIHgrwuCGMzN22@@H3XJc zaAV&1O*+P@yEZ_>R#<<55<2wh;P$WSq!i5un+=KpIb+2NORAU2%eEE{!s3~mcN%^> zjQNhHxER_P@}^}K+VZbs~rVl zL|IeOFC>z3HpLx?JOC&(n?zmxIR9ev@@F!Q7#(t21m#cgb}-_}!;RrfQOFOelBP2_ z;CBD~5SxBpBvpSjJyncm?rJN(s;c>Ffn=Ioqr6)Xj3Qu?3a;}`Jld&dNm)4>;2*Rz zS3w;;xhm8#Z5=3e)bU=*hl0cfr z>!=5px0oGz`Rq6(Z=L5YyK#d$tHU!C`j|5yD~*|8;*R%WEHldmZMKs+>nu_>}=a|hXV}Q4XTM=JP zn$Zg7bz6P(w)X|I6)ETGdoucOK?ozNRfqqM_$?94@Hw6RO_7}W4wO$%m31~y%0c5) zS({{*A2p{teqCl=xI?@wnHojwvl~e+ZRRbyY*Usde!9K`+Y`SojHwB)Qw*(xt!ZcH zJz{GfSSzgE-@2-3AjDBN(_aVNx`8b7~<#M9aW(At6;4b@>tLv+O z5p@2>Lua`-9gRow-Q&xLW%`^?5azi$u;L!L;NU5jMCt+5q(YDi=?CS#PlY91F9`#M zu*zghc0o({Qxz-uXtkY{c&2&ZZL|mJT#6lI;>*E~`(d+}T?E|fx!lTxK3J93DIcAV zhw^&aLo#<|Xu%r`eN~sT&ls%ewV#(2IrGapxy3Cb>ynkt*JkJ7IyvKq#}vtqtfZ`! zjdN0F6HrniiBzZ8^V+T&G44XKXw`_A?HLZ%LWGj4AYu64u>L2ekT|+16{a^FtYJ`{ zONRUB4;lGrLX6Fct{(jFb2QNN-0x7!lpaBPu_ye}G$uac#PAzMP0d^m3JL%i;(9Wb zM5Y-4WC(&aWh%#Do~+X};(eZEo;~shwuUS9Rigq2U}7p8(zGI~S=kSr{D3(~UWd#& z2+L_Z0mVs6b`hkod5UBkhTgBOTw(-4N(Uw%lasx((Hms2TceD}`0wjYu(|_LN6Js! z`03E(p8$hCWX=xK456yWkd;ov8g3fn*X$sT1&`OqIs4m>pFQ1s{BUq@@XK4D-;%5d zTcfqm?IHGotqpf2Pn-YAiR(;!H<+rMR>PlpjKIsx$Z@uXrYvv?)rI(5sYK z3`J!Hq%3Km)lFj}p;dO1Wl8BvbC`dS=lntgXke_?j~3@EPkE&!2HUg}&k4izfrp+V zkKO)qZ!4A}#ESKz&Y0C4ocURiwSpfE%Q~#ru(q^4rB!>FtaDOg7i4n)&v2f7E+tM) zkG07p0iP>l2u-mOVfNL#7o#_#HpSSmet&W{K3bDKq3$4ZK*6Ei^m|giKV8y<)X`L{iN9|ll>D}MIr%upLTq$rt#2|OBUCw2qjw7Ygx$%}%&*_ap*1p(7mpEaROv90| zT6rJm$+iE3m%Au*uR@G!22!h>F4Kt|te%W`^)`QBmr1m~MWQ-3 zK8_E*k+1ApHc90-TwlToHLD?=3O;sv6cd}lSH5EWfE~8uQ^yUylr&C=2*x^a-)zaj z%_D7%-RTlMc2H|EDj+j_pVZ+Z8;QB<$yyk%8KuQsEAS5?0tO9cxcL(XP<%&kw{s|o zhcG(kr7&yRkU1Jlxo)lKg&wIl$Bw&MQ$wDL*MkuU3~`gX*}$-ecAlcx|8iCs4+OMJdtLYSnKxY;S?xD7je{K2g&IH>74!9_^ zp6^^!(E>uTY*SK)X+i8k?1z77_#jGwIXYl<3z9bAP|J13pM4oe0nC8Xw?j&&m5FsD zP>tbY0`#4a8XsT%rxI&hPWgKd%Ap+Mni+^70u6FetpXMC%ZmvJv;LJKR=WF=&L#6f z))f8)l_)L9%+A_@-t(lL**TBP^(4Gb8@FI&2$D!G1d06(mp#3Q{Pw(x#SPJBHHiW} zV5fRMVt2S+^4#BoF1Fa|L7|mm5eBWaY-34h7ywx@$)^hiaIKy3OM&z}>PUfqOq(6} z)3w+#-S!d%Z42X5m|-too6*SZhi;t<6Wmv`Yk*rN-2oEw+bWQaZ|iGidZXyQ*H|Tr z|H=61+KJ(%*)RB))7u;$K{INjjrIymn3oW1g7UGf=du2D+$$v z2d>@C&zj4^5*4fBTW$ebNP^ zZJ74URll&ihu5fU2+e6%S=^|aaehCu)0P#pGA_LScacCo&No&j9xke*J?uNCx-f`a zesNYQpp{8XBAM>l3Sv3_X#!pzVAlRo1rt$`gzR87Ap$4L5uh2>XvW4yR0)?}6cy>9 z-*wKb_uyoDqyfHKg1(la)6G?j?2SOU*KpAHwcPAnG0i}`Mn3f+L+FyQK&(jtnZ!7f zb`2U;umQd{9MGdJ<6c7_yvzT@W?hHpLL*-I^>cGILdRg6c_s<`=qiv}dT&`*ou#Pj zFHX3W8XYYb5$u$Qvc0cr7|fPt=%>p|-Xn=BVn-cVBL9@fY8lhVcmquJDH&TCrZvKV zfQVg#5zOE0?A;+Et|=3?{murP5!SvV72Z`FfFmt8Y5Y-fazUf zN4H6kwc+^mbb1QhxFlZD)=K>N7K`=l22W3xh=N)%$eWemUB7cdyg40@kK1+WyE`OeeN=P2<*mtM{fO^}!8a3A2wEW-_wYsjaDGG-m&Of)wd zw4^1eqf;oGA0_h+qE=^9aFa(KklfdJotu&~wB2d^?P#_w0;`n()@EXsziw<2C2zD5 zC{7J;46qe+U5!_$RofJcv$v>cBRuU~_u_=vn|^R)256D(Gd*#CU| zX8aSMcSh^~{gVH=wf?VrU))`P`3sZ~gNOF^-|q3s#4G=DZw*G#YT@LL!Oiga<+c0& zGWm%+yR32klBpOrgn#pV>$iK)9zELLda;Mxc}(S*9G_z$R&eK*ZULEyddf>tPmQ=L zxSiWCi91X)@U~aC@Jd21w-9HQm?$^I40m^Na4-ugwRR+OyFR!ryWaCF0gBy2`sWqT(z368wkxFolcLoMJg$r$tJKN-8{Pl z+0%e3y-rk98p&onY2WcYpS{I-n$*FBF0*XfJ<0`Xtlvin$aFVX=xRzrgcQ;%7>aA4 zy(M1ag7jG^8$h!C>tOE?#Lm@gE^Ydwt707hl{9RbR4anR(m=7Mx$+XyzKBm{B!)NP z7k%;a(`#Sg?_K;|yZhJGYjltz{|%LniJ*OW_Wa@2^N2wXwkfwDXni9uCA4EzWC1=I z6Y;M0W^X62X-8?G$T)Uo`1+063%-S-iG+zH$qF$%)$yCt>G?4d<)tDOHEP80)qDV7 z!9VE*!13nv9VIol_)He8s@9Ne$lC{TM-!GXCI`N{o+h`LYzFov;uR5HX=1Jnb**3R z4x3CCE(gsBczZZLHt(6I)FK4mkzdWZQ{%dZEpyVG*Wtavu!F?!a={;P3JeMp4g?9t zr*a!u<KTq>iaAl~|19}#^v@`@0 zpzrqwpJ5$!DA&j8FYors~*MDCqQ1FK((Nz2wfFJ5)~$!pMNfyt%0xB^B>{&Kj={C&%Bn6r&{JonNZ< zGh4n1yClmUoZGm9+sKdi$D_j*^xqVse&;tRPJhE?eHDh*oQkXftFMxy5MJu~btV|W z*uUD3EFw&~1v*aHA_1=}H;~>5(J_P3{b+ctT)4(LCcUG4+Gz$DUGVW)w!LeiTR`(~ z6@c7&2_WnFTEH*?utQP}L!CaDS3f>8aq?UlJsH!(B;8m5Y=1;|pM!;wqUf+pZ{%x0 zH50(9fD`I1i%TVLvAWkfK5cCD4^TT;5JB7Oa$h9iurf3UP!5w&w-Tp`uphIN@&4rX zWPGq8CtutcZ2g2cNL(G@QWIWNymobVjmMozactwq)!WP~hV?Se>B+fih^1zf(DI;*0fmNi#EE_ylDT%F?S`=^f%kG^ zjr-*yPPB;t>N8)Ua4S}&tDV=?C|=upLCV3!n_Kgcup@IW#&2^AeI=#DkipJoyV-X2 zwwsGAYB!dw+BK)6;JVoV%%9?0y^X&lh_bIA9seGX04r%@ZXuHW1;+PtY==!ui&3%^ zGV#EjA9r+R_ts~h?OdH5U7h(aMCsF*e-}f321xUS&`bS2vr9+&4-^dO4a;;U{Nfrk zRO?Z4pLs-4aN^uKZq&)++VXW&g@cZ%uTn!7IxSf?X|5fq?aEEp)&JG-qxMoWK0rvO zKOnQs#d3{{rRmB{*4`As^iuL%g=LO;jdz@oR1vt6)d*fPX;xkaf86Y3@hz6bb$0VY z!dCrs44UV4*&0dvoXxU!HddsiW{<2I9foilH zmV>M|N}DXLh74z!u!00D%6u=c?$FBGihxWE_lS?t)xb*CWEQp5=~yPxWl2lg7E?LF zL>?=U_qm7!aT_0O%gPN}BN849SGmUq0kMKbQI8$tV;mMmPMvjoGi)YgLPuUL!lER% zPe}7rIA86ESg=Fj_%fb8CSwRjoMM)B_zt2t<77+7GT;i`Yc3kx(CrOv!@(3xkA_14 zFU>jcM(pWMF@_nluv*E5)INcRqHHBaTqJi{dV+Z8m*7Is)j(?^=_u41#ca5Y0O6Kh z%ixtum$8IA05m5ht*odid^mn}{s!ZUt{`Zclq{@|z$O_#8FjMzWMO8^q!~fRAB`j8 zhlL37OQL`H>w!J|l$ag6A8q)g2TSKP64E zFbaH+&t9+LK+b!w-h4qq+;*F#hlAcW#8X`Ef) zsfvnu?hGj665ZA_Bzc1&GaP6rGvIOLwH0dI^Q~<&SEr*1;`?v5p7Aucg(^3|sqS+MDPOT{ zO$o4U8P)8JNAQQ7jWB8|zCDDaU6W6RVau5J%eVFz-;IQ7=KKjg?x4_AY9fFSAENn% z_9=D71}zywc9@6?ixhl-j!^iBmTvzmjed3nyw5|9Bv)q`H*Vg~W=qGOou+xR0qms) zZd&6c+I)(%#h8bWqpjc?8v#8JwShmUrx+s3!f!I*3{ZWqm7%Jb_?Jq*>fWh_ z+Y@-^3kkRm!2m(eX|0!;#wDBb?ePpZw#jKPTwjCA>rxu1>hahN-&epg7BI^40ym!euN+SXGKa>OL>@O;|>ZMB7Mp}80_5R9-#Z-E*HB%^`+hE0#N9d0utk3W^DbwoIrJm ztWd|0BkC$<;yA7c$eOVn&A#6}J^;NY2e|wo8^PgyCMG10aBcNu!cgJ00X3S(VL5vu z=}Q8$W5{b)YL9W=wNydVaXLC=Gefe*8UT`_Jb_aRNM_zpxHo$+vRG#v-uyFnPi(IL zf80Q^{_@kcFE_52Z?64fm1)p53Ph72#<~=Ikx@#65+-RGX;FZ>8T54glc#w!&|oE> zEjQ|F=qHl}`W3}DlT!Nv;E@XgZ-fKcnyDp0X=Tc*H*6& zKEL&^zXC4gshDM5H$ZuIDCiiD2RWM@jZ^ac+He!ILj+mvEFx_IqeQ`#+lo55a%K1SuYY|-*|JZj@TD$tNBUqt z0rzx)h7%TAUtgV|_dW@+aRtD*#C`iAuRDch5={n2P)#m_!M3dT=1OLJ!9DD%qpLA6 zQS=>R5Di;jB1UQ7lHeITjf(q>iMEJ!ClkwJRr@=4uqOp1fs|r;M5^!=qglhR!V6&n ziBJ|p#r4}-4Fn-MjWF7YCIeWi*eNGfaN|e`n;Xpldt*SsS88M9XBP8M!7(;@6&oVc zTaqr*2626i0M~Gd&u4dB9rqz%*;tyZrqX}?NWg-KE~adX&>yDP6C|JZ8Ifiia)dZEM)G)?wIC)O_00z|}$ zTN3y0u3)WYLhDdNGkODV7;>Y<5ic)|x4Q38H4S~k#>F)qZ!uue!co4^agxxxZsRBg z#>~`Cz~a+SWtNx*Qq4+htLX2kp{k#u8{8w*Wn70tqCLMB2sQNKy|;(=^Lcp*OY$21 znq0dvymymD*nC}C;QmH!hbVI}ttlWN##guWx_P!~KZtgIdYp(QG_+k$6g_NaiUVgD z^&5jerdh8ioVW9AcQwdi)~*7A{$Jba89=!<91 z|FpNg_08tb`ehD)rZ#O?69ybCZ19!!H zCFn~s*2{aUnIr0~DhM#DAW33_t6{R*0Ru(QNi327DH}H{=Q%YYo;%oJ|L?8RG%(HpPrmY?w}1g4Oe%jbSDRS)NHa zf59jNF=0q%%2WxT;DRe6vUqi|StwK(;dGiBi6L{oh_#X*CSx77a+t^CJ1T8~Qn^Xu z6Xv>jB=C~rqch})H7VW;hocy*aLF|z!g$j{ew^GS!~rUy*`gL9I!EH)26xJ_=|l6% zr4kHC9>a%Vh{K)7g0g1~6+mT&^O0Fl(;bHCaSk9b@es!0D6Eb|TTk0&fqZ9b4G#u0 z!XuzkngTo*jRuVFDzrr2Wer8e$X61Q+GJC0q5rgV4{^BH*vuu?FQ`a-EvUp7uI1*o zzs9^D;Rvj5&Jgnqwpg<-;ai^}`4N?_#E)*M#Tq~R{cv#S{@~`p_=lTB?MettYxHpV zYJ}kezUP1IpYQb#$B=6>nVG#M`r>>M8mELEKg352K?rh%I_k()y~BqvS(C|&F)9`m zx^zh04NLWr93xVL;&>~7;WBxA=g$5AbDQDWWK4J_+&+Rq&0y1{8JL7qPp#;c0g@n^Rs*p^E(^wY_ zJUk!pYT&1Dq=+Ht&%TJ@=-9oA(>M9}5mQ4_l&)T@a$ZH{DG^?U$hXhreLYp z{EEBoksB|AJB`;8u+ISno9GAZoORR6F-n?>DM0{<*_!z>bXE$-ri<|ga1DTaR-F)w z$5masJ7C-@QbU&&m7Xkeqtyft(^6mAyOKc)&Sa~i+J)T$s2v5*I=Fh@d(j1spi3du z%uI$%lMOC-5sbgqM$OLnjw{9vGy8O-I`y!YbeO!(=&x!Cr&An&zmJJYQw6s*BVJO0 z1*3r)9kVs;?wE%@&IbA>)q_%ov$o$#5lA-fzJxs5VAVn|=&$=h_rh!fI~e@F0ZL)G_E-dJ zc=ccqI;3TKh^bcKkCQW8Md8PY<;cEj28?;KjLtQ@lOe=y$7(oL42opDL@BP<=i|wM zOZ)_jnZKz&1WDzHMYt6l6*5?*KOepP#nDZSWs)(I zELATGu@`K>2`jTwB~@tuy*+3#@#4VC!EZWbBvQjlHOGLZhZ%IB37{NA=9JRGotFJ0 zP85*A$KYkY;6Ra%BQ?g;c=X!tW5^XleVcEvS>X-xus|xGL)s{stvUFZzFDBOugfuM zQOv!M-2oac4J6V0Y8`O(0!0KMVNJPDRNqpK-9zL?DSgYkBKN>^T*b!nT$YvzCKloJ z1hadm-ER7@HmPZirsN&d_MALvoINAX7s8 zy6=R_wKPDyKmc1Ql=35wr)S6}m6Md2-Wd;2W~0Lc4S;EIfp`zNV6Ah7#0%+0QMNGkdeJzw<*+- zJq4knn&@igE#<@RgDTz^NBLYd0R^F9IXH_%dcNlE=}=x18Elv8df9iXZ*>C8C+sa5 zE zIv-e|PMm>It5k6uERFwaMxLI}OETI&;wb@=QE%FeM+VC+2Zs8MH`wU$YC4<9Qba|) zjg9ZNo`3ah`|*oE?ctaF2aj765t;2x^~`eYp+~JF;}1mzt`!hu z(rCla(HpTs(ya`erJy8Ii{5SiLi^=_r75w=Lc&b`dnIMQbH21wHgvuxQ%Dg1^b9`P z;hyg3+k@YTBlN9#28xx68nWJ&*<<=Foi=0r1R-*?W{WI=!#YjH_F2OvNRh$*@pN?Z zz+@||3mXnW@YLaTE__7y)C!b^# z$})5k^AtrCKPX<_!;`%Cds0TWlj|?~>n&MPScZd-=0=F@UPM#XnadoV&(4snKPM>? z+Jok$sa|^}gOfF!&4b908WlhYaQI|G>7vz3J(4QVeZEnPQ4I%4YgCHoQld82g@&lb z3q!ACZ|x>A3q3HR{Noy5h)$6gWaLTHbEF5pJK@@)o$q10zr5=%)}hPznY0MMJvC^K zra?9k^}zWs^R$g{*6)|*&~U<4H_G{q4IB}plT>0&*{@;%NwOd~{2kYz{Tq=k`YcXV zR+(BzN}Lc=Be#u?cuME4$ZaHcGYR8?DvwaW8X%061~W1o&M)cweEcOSmGTel(3zD< z&XceklSleWgA~hpH9Gy{2 z#k=u|^f|ZUxG3=-U)i9gb*TD0yZhc(is6(Uj3$2+M!pN^5 zFt7T0^wT!Dhp-(Ga+Be4Hmz8N{5k9}>q_Ezk(3hfH=|>p*~$A@e<|vq)#pjP&avdj zWgise3XPZr1|SVVI*ODVa*7Ln$!rMijq=8rWVX@3H(WS)i{t&rrz+c!^M{P_O*FlP z;W{(hjIcNtKCwin%zk3tc?oRv9pSZ_ni-;DJNcj#mF z!pyk_a{IbOx3%vZoL0Jdv8QhL>#l-#%CNd~X=H8pQg)XW?K8-)FUTbY+T@EzqsbIy zd_=TI#=w#`o*x3eeu6u$9cufBNb1@!QQg&urd{!%szkIgjF_Q}r}4S%3{q>aghDlZ z&?LccLA7qVZ7_Roz%$JoV7J{4#28y`Bj!R#c8>h15aCeefx)DM$(o>7w2;zr9mMBq z!tlo4-q%|%e)sGl_u34O##npB+qGAIr7PUSi6f1@ry1CBWd8Iu|coTph3B9dph<2X&vxfB|d*2LMEX(q2RIuhtYe$dc2ita_mN>OKzQ?o^vsA%INn z8|1878D-f2wbzGJZc}Sw!+vaV`Y!zsosf;00Xy!fNQBT>6VVJLDHKwN`&yJZ3q!b{ zqQmxlvRP`qkv4Z!2psq$-YT)K3Z8f2Wv5JZ_i_jYghhq zb&W?;?XK_fe%>!Pb~kWW?^XQ1_T|;TO_0!+EGk0*dN!2>TZtxSDT)q$c;lpsh=URd zJrz}y)INH>3jzRsU;{4HRr=!WPyndIq6s)!E-;~>q}4V{adOmlybrjpw*;TCFN!!Q z^vE4CM^EnF_Ekb~KaqzAvqZ$x63JC$-g@mjJc@$1tEgBzaK1sC{3i0Lopj02s8%ii z`-iyRsH3xmmi^s?xg&)Zc;*%o+xrkZnxcfU#~$QMf>^1V(FoeF2PL?jF|#9@D<_z^ z06vnCYK&qih#SMb<0)!s@_oSp$e#u*Ais;NyVNAZu~hRWG=cBSw3?(HB3h#yVPTEa|XeAWsBkYdNrNW2P=m z1KKS;Yb)8@z+j%k)L+?8pa4fhtE!Ao&<$BIke(_zog~__+f_aA>*~QKcTz?9%^;+A z6lzsvv135CDOXg0vxIU}8t3 z{WeQ{7ptKQA*WoTe(>-1sy5P#r5k#<_0_k(?P)>MhXj31B+_Bz?#h9l5ZhDhnBx#G z3P!K>XTqi6Qyqt&v$6rEnJ1xpsBqKqNH1qegXfyhD-j{$-M`peQt{0_IuR-)SjxeX zD9xxnrYblTnAOBEeeK5o8WkO^Okcbe%$>Mwhzam7@<#x(h$Q;nse-aN8qS-@WjS=1 zuW$Cw_M*nJIjBTa8L>xoF*5NT4w#FT4JqlkhqKu0Mj7r&Eg-Egw(D-bk`Lh)-TUf9 z3!R9a=Gkv^ipIUOsazv+2fC!riD7h^aq7|mT^WuKM<+9!eJQ80V>3Kg=LQ|=A+1d0 z+}^4E=F;GrE)0@Zj(1otVB2U1hd_@Y(#LO>Xo(E`B*DtkM=a)q8S+UvEXFhCmeocOfaTkRyx5{WhwT5P^P4YKL%4W@QNw%!}~EM zu__3sxU6%CpISHK>%PY&)S(H}wreU7IRWl`HhKeH%o%F8#Ayi3>PEL<=r z{&L%0dO2l-2NSrD`DE*nxR}s)DA@AtCeWFjYBemDwmhV2@la+S{J~YT&9? z_2z$+K-*}yN+z|eI%>GitI|dgQ*57`(e8P0q?L0>oWF?qgYMDMb>zp3W*(vr;~zPt z4lY5JXP9v7PBB9@AWj^f;Uba=(ia(B$)+@AxyjoUPm)y@j7M5H6o<|1yi1Fjoi8@q zQrrBUPFQ>%B%?<8y1!e|vL$ z{w%b~=U=rNrVDMOO>RP4;t3aDe)(lSl;VHxkr{PNJ0@!O-Btr~_@RX|vBO@J*4;Op z8}u#wK6tXZy)C&xYV_u(1}(n4h7*W|_t&`V@f9@Hnw`HWEYScJ$Lh{8%tio3r>*as zR->@;)U!?+F~tVe7vy6APTf}lMs)e(1sm>aN(A^aE zoZGVcgYQ9Q1rXX5J85k)NQ%QDkVsf2Aa!)DlYs>NQr8Dkkq!}Ga*>f%&p-@ImEA!{ng2#OL3G_PNT2#^P6_^kXLAf6)KrHF+=BK2|V2{>zkDELgDx2(5{quu~kj$`8x@g zW09rGk}-f!VIbn7n)dU}_?X8JAw5ugpa=eH{yJ8}a0D$vS{N2QcLNX^s7i-ZUHyxs z(Esf!R|cgt{#xrI;nsdy=PZ}Hs=|HBobxXhfsBGD^|D~=OU6!WJv6{;xHkAy zHLZHZ;UMQI=;&R{6d@Kgi=(ja*_~GEopqAXO@in-jFRJFcjzbu6g(E(A%{PVP9cWf z6c0AeJMK=ohVOO^A|i%E!O&AHy$+pm?no$A&WF;1-GqrmL$6`hY8YzyCp0s}T}XMQ zqRGarw8rq%L`MLki(eV4I&-5|bhMI(UJxhGuEC#Gn?s|J=S6l2mCID=l^uJHeiJ*P zcyS7FbqSvFax%^f9X{X%T404C|qZ!ZL%SMe_3=RL|V%{Y7rSXsp930Phl3 zP5U91tCh+0f@{*aF(|JL7L1l6jU~^dx-nBH&cnzqGyz~{n3?#MvE)<@RyGm}HAME~ zJ1)~!J)_kpV6KVkr`W8uijUo9qgbMCf3&lAsfxHQ8lY82@ME!bc;Lt+#2(S; zCL0F?wV_niNF*sdTKMfbPU{=L;8bqaiskb+Tx(N(#DZE2E(_#3*#osqic@;o#mPQ_ zZi=I$k*Zt{4Y55D1$lwyt(m2C)D&xIT+qIxm!U5mMdZRyr%S13ZD=IWnWfK-bpYytIw>rFHMvT)q0gSyvocx8BMM-HJ7^rIk+-Bf%1sb_i1RWMwP4r9 zVG3SLBl?h!25fv}{+_he@Fztlt;HlJT^RE+>lj-p{1{}vTHajsK6Rh-4pp*lQ&}^* z1Zn%12$Vd<#_G6Wna>7P1# zWmH!kh{s>O{~=!l{E2p-fl5KNb!G8?8Gj^m?V)DoS#U@}6a~IR@aTX?-)cfnGH{Zf zeK6f@-XTR7PSmzIy9T%+)9ZqFTKV}jxnZ6&Gp}LDO)fl{t>3pRS{C0?OBN@D1hm$0iuSjUX2H%fpme_nh98+ zrkY(8IaFk55Vdk1h->s=0wek%b)yTpkv{W3! zPNu(D1;Os#a44EL4%S`huI=KcG*Zt2iFRy;Yt&Am3BZe*B08Ky6Y;V&Udii$f$mL6 zGN?j0(U2WQBGw?cIhpBoV5)3-B@g0ztbk=b+_$YGAz0XZZCH>7NpnJEQ?i$LaZ(r^ zs2~Uc83S#LUq6Es^gLTAKdj&9 zN$T;sG2wj>rfjM*II*flt@@HO_Cj;&?Hm})Nd2NRkSNX5azjHqauK@<<)Fi|HZQrB z*F0vdL*c+BWq^-a?oK8RE6m6RRIIWuoXkZ~9dX!f4>@L$WNp~)m4dLmrfRJ7etFwZ zNpKN7zJxo))9oo%TI6zxD}YxTmjh3*aD_zpbzWa6H;9Ls9VF$E>@AeU{`LECn6`N_ z+S>5#A@rXow<-lwDf|2iTVlUQi6JiNJ{x2IArxn2V7GOD@*0QM^L|krpse1GMoRY4 zX`BhcJzwD)Z^n_@l<_OOw}1WXE4r4x?}MJLrv>^z)^Eur?|M1c`np^$-<`4Is*j!9 zy4lMj)Y$okD1&VA`Vd^nVji%Q7%R_hMQvKJ4o5*rS_g49e4$kna@Isit_R3~pNRx;I=eKNC$;zg2&oa)t zxrTu1XA&AxdYw77*hy}WtRyCY6L&!SDA5-0Bi#c~$`oveh#<-obVIk>6|4i_Kz-5b z=y4=ERhZOc#6BvgC{(5IO6)+>WIwBchCsx|Fp#`|cZCPRzUEb@1O}2d{6P?)GhA`7o*W#EkDuFB*!`YCw3_Y|;22a@@rRF}Z#{VN z4Cj<@Z+)}*d=o!~HMpG>0@Sv?R0BnOsHwR$3Q>d;^6s_<|NAHOSS5H>piX9yP53XIKv9X-oXTJGn(r{-=Ch~kVdow4rpBv zjL%d@eIW{^;)j==%W+v)6tPeZUuYFM@^!JJlP#8oxjH|_ZdY8cnwo?-I+v1=stl?> z)H5kuVicAuig8I^x)wK$y{S*H!S4hle_af+ZOpJiux4;ItLQXf@>3 z$lO&6?_-efx@Vz#ve%Tg2J5Hc8-$c=aJ(D}#hgsdTbs!*b$;$*K5!Qi8$8n&x-0)3 z?5^e}hny}5Vq*0KR|=<-s4Izv#2jhtQY?g*y3ENt|DZWzNrFN!=>+={#vV+9e)_+T zH36m!0`^7F)R_yBQRQ-91hhDh9CR4j-SK2iF?aiV^i#T59t1N#Fa%z_B2$VSO7j|J z&ML%isS?T{tP>`aNN`4G2`asF??Nt6{4R$_0U`uAA)2r^DfkkjE{=>003KN3OEFNw zgboL?#Mjd{&Dd1=Vi!#^;%k8$Ux3o0TsA!ZKYf9Do8DbB-A8vQeuM0ID^w5W`h(nJ z{!uqkJ?7Nva?4Yd3Apr<&yq_^SS@)y!KneimH`CXb!NN85y6S*+{ zC1VS(gi9xA9XncZY~=X_IjBD1)k7%kwHwcq5w`_zY>+?d9>ci%pq5CeV+GmzVFR+B zrjS_$>+j;kQ0JW2b@O4gk%HaCc`ou*jzeJU0-K@gur? zqN&glC5nJ>LpA5MGFW>zp4~j2UbFZrBCm9RK!3SJ#ecs{XaF1UKfF6swv$6-x@8mL zdH59pYhVVa4H0Zc(o%mUgqR}7AowC0ErYbRv*XzFZplQ?<=L@JQwB{1wBvIpW>TM1 zp9>xqG@^E`eyE`SCByWpeBJwYt}s&XGExNV{beg&FNDENtt8Fb5WxYPzs%8U^&6`J zFPn$nK)W>-=^V!vp|W=qAyS^&B+BmZ#6QIpw;Lg+AgMJIgX-36ftUMHT?r*m|MqGf zLFFz+9U5~C12?;l4#s7!D+kX|;&l3BkqTRV-k%c5k$v^k48CAm3CeL0! zkm9zXHGNgGYo+vZ#xOSC`3od6o=x_-=8pG-P>=9&1EH?BncXdZieDmN%f&hVZiXQXIVfT%TUU}J;FTVB?xYZ|NjuhYj~ZPX z&!RiwD1Yg&Itj)*-S}DK%GnV~QRDjFh;^xN*i{}!Z$d{JRh3>>uy*K2=ztecakwKG z(72aFCXBAg#!(Y2YqUX$4!g?hhy`%8IGJ~1Z*)2=WTw;+4KyM_Vs>5QT`lfdkWQr5 ztGCKIw9-NQ@Z=In&-AI)&;=ys{kd|eN@FyrD?tN(r>00(pLy@KSSHcf%1Z5tpNZg` zm$@tM@+Xp4o!`<|4z8{hX6~x+qXL@iN!JYHT*w=P;c;)49F@Y2-aLod^sdl^2Fug2 zs1e@!{n5dJR9=;8P553!R`(IzH~4wHmnN9TiyuMwv>uWk@KylFmglsjHEdSS+Fdap zVHrbif}MVkyNW`FzV zhlmkAEk{*xVbsj9bF?!0^okd^3RRxty=OMD47zG%f~3!@WW`7#@1x)cz}rr7;vu{> zg;aQ6lPu1XT6~iQEiD)2$Qy7K8mFROW>rcD$3uw%MCzuT)E9h`gC`IWmtVDqGzz1+j(+3 z?Y<Ya9HV;vAmO_v+spj|Lm2Mq6Fw_;dwywx_Y zq&!8?9cdx8@^xCS3w$>|h3j52Jma-M7Q-ltPVGa{wU6#_nvsD%h&n_8i7MCWW=vz# zf?yY9Ukk!Y5~5h7ec@rpB0b=$7)uc?8wDbM$+W6!HV{Y~QEMiLUAv@CALocb_5pg( z;AljuLGEo$6)5i*#z;HC$r|wmkA~&qoChI{+dZPJhF;-^YqVvoA$=sLjjgLXPY-7& zqhn}0t^p)HR|d%h<8EV|7-(oAujF>>4wFn8Al3iqAU!tQRirVjlu%~6nCv1HT(6u~B;sDf)%K*jV$;rXtp{4s1#I}&K<<%KzaesT* zM!AFmluqeY+$j$xbyUOmejK^c0v#^jU;LPIAsl3vNjL~j8-NoXRdGgVl5x zDj7W_VR-@Av;~u+9qy zioyJ0+H@{Qd3Ypc(o6M@kH)9eP6cP4T^G5KIsHs6s7)BO9oU@O!xf_} z!(*JftlzJCNS#AQwD(MvrDH{Fw^;f?b9sI&{grtbKnV%xIDshY5dNOI&EiI&4j=9f zY$K$=5NATai2Cs*${YEx1bp}uHtRXw%J?w@C9O2v>R=Q37F+f8+siN(Nn*7~DvW4V zs%VE|ZjB^3XibTY9*K(v1;_u~#4rU;3{&Kf9P!USR5u!!wj^n>a+C!gO)qrfK1VyI zzTaLEQK1!!q8%o#rcuOi7*IwGfjx&2#xBf*Z?l4E2_6v(h6bnlhz`2tgV7o>OLU929z zdID@j^^%z6Qg9$JRuJFJCLNYlFM8A>)o80iXw*!Cv_O|9eZt+i#SJJ#&Tc;8h8IJd zQ*26#kthmWLpx>&Y*`dyZ5a(YM?MmEbqR8ei7Bf~0dcnZ@izF2UH7xe4`X#Z_b34h z!#p-a9ckq_BC-Ug_S0Bj2nVf2c;OlmUWsPt>T>d874y0x4kPCW^=s!BaZfk216qeC zAX2D#MRmdFA|$6L3G0xJWoS$7L3q(a1x@VCj(itm@k5KKT2C1t&U=R0R;}nUcZTMG ze5>xgG%!_zwOFqvQFO$EayT)lD3pa2+t`Hb9AbB#J5>0j2k9mj&~^*w<3EfL81w zdXwBox9GGZi;ejMkW0M<(oSc+VfsjG6i~Z}ZGKSC{1U$}Kkq|^yWHR2BM|6CWkfvsvqd@R0Et<(*a#Fra`{0y}Dw>Q6bH1I3DaAU| zIdUdQO|Dzoq#+i#`kW*I-13xqDbkHQG)#pwm*d_lH5^d0LtN-fB2Nygcpc8!^>?%X zh*Y>oUv@)u64qRIU^sUTYT$6QKhLX(kI1{=#!jeo;?!d^4wdQZScB9%M_vm{@a+SIj^0~Gy`MyPKRw{2PCk^XT}VzU8{euyYfZh< zY7Wg+SA)>H(3$hC9?O-_FHB~!PW6a6E^OzOtk)piP^_uK}242I)p^C6P&ZsZr(o5Yulk;plPo{3GOK65F5v?tq?QO-rt^c z$48Sk`TIQl*1fe0Aec!842w0;gqjY8T}1JWp(JDD2DI0_d09s{ z8PoOW_i|{1LBwP_zEz0+O(sywWKFo)AHKk)0V%pRIG7>=ay-Sc&F3d4*jXlfmR?T} z52rtJ{lc2r80=<2Q|@BB5)4T@F4z`GBaHD%jc51s!)%*o0@2ssMBnl>iP_K;uk{z`2kKxc8L% z`I|MK$yUE^3g}X`p5o+N1z=JyT@PAT?Y7WIbRGd>ob~-=^H0ydeX;j&>(S=7PhLQh zF=`cGzIyij;nwpfTie_Ch>%0ugq259w)@r z|I`#kAn?iP9hSNf%9FpeTE3^jUx8GztwA#njp>=S>3RdfCZ0o)hYzO07MlhNSSAVm zfPCng3&q5+ABqot0gAoaSSs@@*-*<(8z}jea5#5)c15yGjgV;NZ;;_QKM>o}V1W+Z zDQVEAHemqCl=Y&XlZaN9YJ!$4Bn-r)#0*>tNpNE+usykm=5-oaFLY6`0og7g%527E z3E;C;8&GrPLdSxF4!JB5Z<52*s=?2=*t?1aVqf{~b_8R}wmQ+GH@y{GT<&kb>3y%h zZDe09#OMN`E{0>n&0YPWlPt6lza_z347XwivbrAl$S2ELL>vr|h4Lw#C^ z)10aoqZ2HOJ=Z3HD3Vfml5eBe}VceT1_Kmf7`|+4Moe+*Nhk;zQ0wxa;=~NqkU$zc%Br z%$>70WrRS){zFV)#(y<>aXKo~!!(%!W#t8YKh*VIYO%ab z+TzsfJtrtC24U79LmC^m1G(cE2=oxs30F9_h9wp%?v(6~3@q~32q&6pe*CofSeZf= zs5ao%#gk=XSp<6m%4YZq+rUydqon9sRQWCx(@1>qdyAhx{_XExKvL~r&2u>G&`x(I z)*@BOYEE}PDPF>H53zwK(>Ig-uxXo-0N@~riu-SIyMb(}U@!pNDkQbmHn5rESXsaD zEEkC-+++DrKYAdJgbXzuYp9jbKQm)bZw5Sl)F=Db>WO%qzgr3UF2gki_or2 ziMk3sju|aQ{6t}^-(9F16}(1JtP6gw9z6iWWa^UJ({WP>H5Kz-q!$%4^*BYUdf3&n|?n&Mk-Ny0pD^qK1i_Z(JQ)~=Aw?!3P{8x_3Hy^;9=VL zF6WKN&1pFBR?Cna6c|Zrm$Oj`K$2k$(kc#2e2zOocZPf+H;SR7wqP=QJ9&-3rqltJ z?*B_S$S8im`<9E$(?bjwogp+1pTX$-LST8QN(mG!jlN)0PCJ`xbWgGoT8g!R{D7>_ z(sGhs)0TWNl3XClQi{WkhqmdxG{g+$gz$St37uFe+hpZPBIHGTNJSZ9Y0Oa;T8C$+t^FQ321%22353`jz^mVL-V+iyC8>}N~4$)0Ht@Yw!dB&4mSZ_eTpHPDxSti6{40sn-Lml1wWk7qPGi|HE z<;>%#ZeBdaOt7@8XLSoLkvEG3J~84Ol@y>DvehUGzC6@m@`9!U!=2@A4U2G8!TS|V zPUr%ewOQ*tu-fNqo!#=9FJ6xL~ zc9-Y4TYjc#k(qS4KS6WM8*+n_8Z)$g?eggKO|Ou}!gt+@qJoSbNC(7ENr`$2Dz06V z0}|xb1kId|-eHU8mlnpdk%qe?glQ0!l|dLWy0)vtRZ~QnV%aSTfenaCNnYw?Coi@WphB6vE?oAc;}X+)o#H(4->*wIQBy_=4?+7)s)V zdshpsmRA(6&%^UVRx3kQtCeheP@p!;8Us@T7KAGGQ{eY%N~y9k+N7FLm^pS`@vs4k z!g2xHEMd|$lOLz2so|e*&eJdnS&AVL)u6~in}qke{}d}56@ zMu7M2qdE?H+15FZMFy>9gq0z?^7a!xZFK0m6sAmu^#keZ$^Z@tw}+#*{XVb`cSb6f zc8@4Ig6Snpr&CYhf_%yIwQ~qqwxl!D`;$pmG_d(frzI-yiZY47%H#=DI&noDRB4v% z)a;wITb6LP)aEX3>_4gmug3)@jzm;7iCeJZ!bvd%D;ND3d9~wuopHB2egjx z`HH)_#cb<#E%hIqDe~kKh+XU?-aDM<7q^7m(so_pOO;hgfH!&cZAxP%Q$VNUQ<)5jLcPLayf13=?PrC(AIb- zS(@ki#N19jW=$8glhg4VTwsPf^wx%d`SaTP&Y!<{`RNze)^2=y?Qa|-ykAm8_~VKs zZ+33KydjvZ-yhHRMIRi%(kDQD8DpKXVl ze7LcOfbA#h&>V}3=n8U%(#5{>H4xn`gqfJN~X-jv#*^@g3q27 z&G|0Vi$!xkB`pV-3JaZ%EIGk*MNt?&i6hiBvZ_lWR%G%6PB5FDuCi z7$(R|5{setkwxA5g6|%wQ7iAIo4x!%Zr{qv=oJRAv=z6O=H-T3HJzH=`^bL$)_&02v25WCRA@52}?n%UByFcIh!?(Dn`61|-wz5C_=EdV@PdA_79X7FR zxyRdko6nzb{t53shd1Ceep$B)*^@`OZaO@|@^Ve1cr)8Soyg)Zz~p~5%c3vs%hv>s z_Bo-1cpiXe1_>|q%!agt!ZI9B%Lym}h-+<-bicND7t~IHwG@ohD!e3C>f9gvnu|sH zaE~W;U(i4}0|o*v-svNLsw`4Un`+cd=4pq~Nu##C6bN|9zsbQbsS=4qzg5RW3}Zgt z(HkU(f(flT0jvEK%}4hnV3oC_t`~jCtQ1P}EOl6-j z@A{y3mAgSElRlTM3ULW?D2atP@V0Xrf)lzFn0outgVC`ZT!MS2M+2*3*HDgsVsau6 znAa(wOVY-M3$VzPr*Kp9jZekGbEy#lD;EXyQQXfwv1FBS@sQW4WWVmpW`#cyPxsou z$jKa~bK^};0W##B2oQAp*)I_g)rTt24QXAjcCsl=2=FNBd*r>5o`N zddz?W-$AbBU#(dXOqrao$$wLE&N;BDR8;vgXA%iCSc&j@jvBP(rN(UeSmg5fcrD4kDEoS;#knrHa^!zvu zQFLh$0l?y;s~A+m7LyXdWKLO)K<-VVgc5|3^q%eW3a2eWg4@&6JXy}YyV+809mc`JX5sHqM zrhv%2FbLcQut-;3XW}GmRExE`TQ=y+j zZz16cx@*sTkwJ|lN|f6CuU4vsF*AyQHTHAG$r9>}R(nGm7LZ-($;F*9@EQsc3JIrcs9tq4AKd+*$@I~X8{!_e>#NrTF9 z`2X2^|FyP~ByI42uHuv%kK`)AE?4)=ew52D8HBB`F)#>Mwb!_40Rl7y5+ez_JYC)Q zu+KivUf^EIzHj`<%=1eU*xgg#x6SmFbVPke3tFK+&k**92~uB{R!00 zMfL{#7em}#@^#G@XNYm}jEyKv#k_#;fq`M>4;vWNsPnCA-5OFQ%zG!&8YYfoN|1;`GTNN+xp1OV$`Huj zU2z#!d+>wq|0IpOx_B6jORU07q0UWGt(IqR5mC(71-1a{C1RjUl}^*q#k#XzngE}! z&nfXOQgT&cl#HcxGLeksUIwhT(o?n$B5A@HC6ss3<3$ffJ9IpT`DkLH(kBvt+*YR< znM9-MZxPR~&-7Kot#Ya_d28+2&Y^QgQI`>C_Y#D_h1!0a9EZ;hIiV(Btvc}s63_|Q%EFtD;Izp;y1dgQYOPC))B6GmJQ!vc&O*P&@mhuyz6OWIniU!+|kF*g>Z!_A$`DgsK_p z)m0hg^tejkk)&$bO10)VvQH3E>;`x;z1JE~!9dD7@pHPwPI-@j-U5)pU2EjIFKHm> zgZJ_rqfiwwya}KOWMi8NDIV$a+Ixdbof~UwYg)qrS~Rtl5nwLa5l@FLqb4%eVPvcT z4@%c7ir$32URm;dUz1<@Rr}!O?&i_aS|h{3u8YwrmZI1Jz$WMk;vP>k#7n`;jeJ@Y zq(#gguYCjm#%cBe7p^fg+qi!5t55a!F;tP} zZ3NlKZ=T?%G46dhvW$+5e5dz;veQ+m)mnXe*5^^69Hqg zM);f$pM6rPEogI!xYkJNh?!mR(Ql4UWFJVCoKj}y0HVkuLqmKV109(h^*_VbO=0II z?7~2I*BK~ua7Hp$ugX@gsR*uxzdm=y&_NYjpBn(`70c`k zNgpCiwR=V2dHG%sDJf@$eJoq*HVh?~{8~6sI!@&xBA{`;4!K7DiY0-H4gwUCmnnBW zlv)T~A5|LEiy@oV2xt^hEd)L~w#8zgm$0k_NT%V60R0)}M-p_Rcw=H{D9I14?bmI{ z+nqMVTL?PQw=pmvhMwq`u*od}C@G|{wf|lAf1tZ=W*0+K+(Jn<=QMI6RIu5R6ma1M zmF0x2W{`9j&%;%`L24omS&^uK@RR^Ykr@Fj`2$1BFELvbpHbh>_2_42dNK3C&+((! z!pnsQHb+Kctm>}FiH0S33f0v4Z{WSNYMT3#bv@t`x0<{JRRyiBc)@4*B8HYf0a7@n zB_^wXkd6lPlkQ82yW;JVQ=GbO9{&1Z^%%Wk5;|OaeFHq%W+SFw-ys3&b{k z{fAErZqkYV8A6*v_hBIWZ;X^0`8JDg5%?=T4a?i7Bn>78=O&%I<7B z$}W01AAK=^(m%*2pfN?}D=QIhDJmup(Wz_rLQcDf!L_%3uhUcAu+WRX9EW9} zWIEQ>-=WK;?4+SssjrtKV5!~G2`}L?9n8|oxW17RnAlLt?ooxr=&you2|fjxHgj84 zw&t?Ey2YrPiYRKwBD;2C|@|ykRoJq;5`nuSxyv;Ys zi52C%=~T+{WKz}ag9D>d*xQE-1jyd-w2g*H>0qR??SG-LHx~{!h`fa|^>DaZL2o)u zaubZXXWWus_fQgFycZ2U7^N;i681HTU{LC3fYc6AZ|MXG5W?38rOa!#w^Xxf6;^6u zawOguOJ*tY3_!(X6Mce8Nhum7UZHsWuvDlLC{m~q-sdVrosmR%hL?q+;^_0OTI31J zRVjR|sv3n&Mb-Ebmo$E!2t?=sHPySYkA~+mLLpr)mPeXE7XrcK#b31lbcBq;ot+nu z7LDfHpAIMQzIyhc`E31g@@wp|sX07CE#xD0A3gL*cJD7jjnmfWeZB=Kl~20<*=_=R%xS`C~XO zLqMDd7a;{R)jls_o985(;S$Tb5RMcEOsooJ%m^XbEF^4MuRjQmHw5-0eyPrj21x-B zrDP?xksfl5y150Rd?4v>+=P;I4uk)KH%v$#JD<(88HUuUt zWa1HjpWZ+WX7uEyiWcm}lbi8GJcS6uv$RP5PBWdJPcM7{lAhLhcsTj$VT;~TV-iid zqol!Gg)2*)XjbO{fR(?y2gcN?@g1f|W6h(*Ie~Kgzt;Hb!Gg_M|1~NyCJFM4Kx-hu z;QC~8*~3wi3G?V4jr-S^h$Yq|sm%tELceg&+yB46BM<_h)wY4qYvD%X022I*+PwWDa0lFD*M*i=e0iZLRUixLIi|XTF$1* zm>9E1;p$SG1GtMmKZ>A`C~VigGTCIe_^(SFqw9~ji1K2JeVPZ^<42EvzxwzQ7KdBC z;{mL(J)Eo`o(%fqrKP?8SPtgGr4Pw;fdK8}kJ&kHnTN|Cr<=!p$w1GGSkB?(LXVj5 z6B}Iq%{aiA>a=gYy>V5%(; zw2)!41fU3uUlBZ4XmAeBkhVn*=&odklD^ zAOJ3*1+NFd+mwQ1CuL;BNzkd0Xu>xiF0c~d`DC5WpP!)2khKZwUpC%VQ-KbH5=}rw^h3=qt zoRt{(0RlvM>n_Hq)Xg=t|FWHRcef6HZ0)zRPB+`z-~FMpi34c&T3tNfTgiUxU?=JI zL533ht(}86+3r@>+If@xv9q&@eW5>LLkL%|?(Q#jUhQpn+IZL5+1P%)NsHt;>h0_v zWZRur9T*td!EVL|4OFL%dRy76_Ws68KyE$nY-8(ZWofH(utS(zyZc!y+iUF~bT(dZ zxAwEW*ZX_B-8P!v1lXO<&KB*S_N(^J!5Uh{yR7{K9jkmf&u|e$dw+?=6ua!lm)Kfs z@3XxY{-Y zI)SMNM;robZuj5!aT;Ux`IX&IxmtJwJUzPXD~zz^6D>})q^*?pCEC)tE(U`dJhe+h zdN4d21tYn=zmI{yTe-y7Oxob5hM0mvkXFMxY^)xSCWGlmA;PQPHEOFxx8#&rUkBsv zzi97l;1uW6tk8*yz0jm)Yr72=yKSwF{SIal50c)pIqUx|YhjjSieg!E%X$zPoegY8 z%&ew6#qE`ZC^~fWYP~tCsJhvH{(2swQpWFY4+D)b7T7%tkFpw_LeCWSFrGEv(~+ww z62_?JdomhYg5*kZh-9z+?&Pih8Yq~4hDoD;vsQiu#)mIK=9BH_BUYt$D#5ytIh8Hf zj6yC9S)gJX8vNkDu7Y3D=vN;2R4N}Jm9Qw{6=38`x~HZ{rOOeHo?lXmVv%!&`zU*~ z+N{g4BBlre335gH%5`5pOs$0NTZLGRg{_n7&0q%8QUOMpAf%zN!Dk-tiIA^i=VRn0 zOSr8!^Idi<#HpezqYO;Xkowq^4bmfP)#6_ErK~VUH?1uGsP=d~8Y`1YtcR}xVq8P6 zjtqwQ7Zj$z_`!J)9;BzCk$T#4>&L5q7~?eEX`PGTMg9 z+rXQDxj&Ii4rp5Mc|c9|$N_U(QeiDH#U^5;lR=Sn*WGs5m8(?9sjZO@XbQ%L79<^$ z4e?_+LJN8_tWp1p62Kyq=xGrO4>{kBNwj(pK6z-qjI>%o!h|erfdfuQKaxRH!XT~L zbX+2-^E#xhB~EID4eGM2q}IJ~E$@QLJ|Z9;B|3WfvjP{|ygD=b1KbIvZ* zN@1wFQyezDvX@D&yNya)voNHS=_yP^AI-AgJ?HTZ;saxjYY-iwhF5q*U|M9rh< zGE6uYSCyv1v^Yy;=PtmFEhpr!D-x!!w^?7Xw(UrV1z02H3A7dK=0?~?GeN4RU@cNn zW2(|Bv|IXIMTm+*)$M^9a#|jQcLA6(V33013yR79K!>!tQZWb*#N^U~Ud%oWoNh@+|j4IDlh zbRiik;;VCLutDxZ+Du(>_wf?C^f{{D<@c|5Yh27(_*3Tz3>M+0Vc z^{cZ^$u27iL}D)7R*iVd1Uba3^5pEQ&1JzN2L_&np(B?II?PS~EL{X;ic%GS4#fR#LS{)0`gA z8UcYYAgKw!!O3bxai}YzF4*7H{RQArz*V3Wb#F98D1_@;&S`6uOT|f;XJyG>QZh4| z0Q1G-#KqbuT5tdUy3;<8HjDilO#c05fJ0V_Fq4@};aV0&wJFnU@?xj4BD>*xq}6V23wm4VFL(YYxJ(g#z^@uX2sUNBAj z-hCylbJ*531aT7^N+d?H3w8DDIu^$w;B$K_)QH<6ZiQ9U3{+KeVavpPo(b8)u!C&4 zmSu{3&f*EHgH|V}iySERi!-A_L>C!S~FC9)^MBwYY#mAJ0} z9QHhJ0llOdig4BAUx)5z(H=HlC1pXCX$nHTca)>WVJua;wT7X8tJvxKk*A+Q%>m(o zpd!h#;!g$Bn(vXx=P>i^+CP6O$7Ah*z$OTRIJsb?JTxp{ob<3mtMVpDT4b9{Rqi@Y z9H<|d0!CLh$sE_8LG6Ne$G`%YI?V*V-}-TVp@MtZJm1NofYsaJ`e@oa4|z;xU=z_n z*dEWtt*0@{^EW774}TtxJ|K`qcY4GykwpDj^Zw+4c-KiuQziM9q*?cr#J+ZHhb zQ75CDF(OfywSC!tYv^y@_4ZwcF$txPC{06AYNJI$C>z`}?xq_mO2}cqf69x1wKXcf z0d5mI zgAyR&cTirz>L}YCpqlnLT~+5gA?<=KDm=O~R0%kY9hQ}sn4aICnTg{rZgL%vGy`A_ zr=E2m5B@;9S=+nY;)c~d)LaZ~>2{b#jCqwtOsD#ooSj|XOfG!$Mh7GziL!j9zdAnx z)~C%5a!Md*?#)rRjcC6Xeo7BbITXU)aRWc38b(0A!r|Dy zx?veB@C$U{RldwYd;gVrklkN&Gn8P|=+{OZ*DptdNpCv+2te2-`W^=j!>bA^+)a4> z`wb#tlatLlRW>e0hz0d;LF)L6RPLNeQ5cs&5?#TF8bFdT3^gRV4PU{3SIA(F{byVl z1ZQ^mAl~3t!H#VFz+^cZ@qt*^!4RA4gVV5QU7i9t>Gq%2tr)nXXv);`^at)DsNAiL z5HJ}%J-)C1t<#+5q5nSHphGqL!3g{QI!nMCn+hX-qD2_1v~H%O6A?eEuw4yw z!sA7W4!|4Qv5I*gFbno1r+?WO`6`YV42bxUEQOP|>~r#%b|Q9ePQTrQDaBkcm2pGw z_Jmt1I;U(D>y~T7O0e3?S~%&CzF=1zP7O*FDitJab8pUgwW&KK_LMYIVCY=2&q}u9 zk(o+%!<==7V!xF!1B>L4i{H~O0Oe%dW0~Y7ir_>XWA)=_dy#Up)7m%lu-a5{(LeQj z&kQk4*AxZnnaH1bGT^if5G&+BY)SwJD2Z_PMKT>pf(0*!iKXEr2~Y(k=1T4`%TI56 ztN+zn{XZYA{*NPE;exYiEBQAMzFdCD)t&=4B#1I^>h4b#&b#38Ma8Z=WL--Z8$xeG zqQ;d9L?}f<5SoLEloDq_G7d7cQfe2A0v-$#^ClGGF(B(b}|XUpGqxyc0Q@*c-}c!Y(`$hj0h@#u>h;ZGkQ4jNQ{bId8f8?kIv74Rez7G6QY*t!Gf!07_G#1YgA zGb{OKtYE8yLaavAlxYpBO2bZY@RR3e!%2wQn3RlPOL#i#Bsxxoh-)}&KqLb|xv)bD z9Nry?KrtCGQ5w#L`bs#@K6fSu7zvngvpiWiV2Q+JJLwYSVsLtjGm7Qahkn??p|#`Q$x0Ql8JUW@Ix@m)GFNLXZ>zto#VKy6MT|(mfH@oK+38&yd2X`;4Wqid`y>g;T@Xv6d=cAcCq~ zl_+hzaC7<0*gRR2D9Tbyh_jjrA6e12No!>aP5{!ubnU(C%?8TpHoibmQoQQ}aTs#YXJi>K2e-2puSxyH3IYIo-aLU;J4oqHJ zI&OdG=0^ej&pHDuc#9HJsaea)m6PWOm+is_D&~`k1CaX8;JY5kF?*b!#i@?j5*sMb zkpMkHP$5`^1E2}yA z&6JT%fdXBuEvN91VsRNv#2~dqC?ycgy3=K?O00@I=Cu|gX(1VPfg`C6@3{Ct&u533 zc9@Xjuq!Jm`8_W%O}DTP;UJI4r|atMjYlVN1s~eK&u<2or#vrSjZ!Fmaozr7c!JlJ*6+%WXuRS0i%hd+6Ny`6oe*x{+A zTIACO#z0nzRdUb@mBc2XM*=P87**7)3bb?*wcp zV*SNuOgq`hc)9xu(eg-#vS#0om@Pd*N>X$MC`uy$VH{j;r0b(@$2UWFM_ z`xoT#ggGwmOVQmX;;$D5&8+eK4v5MtNbs3@lq#ks$F4(M8k*UO>L6#}h zGh*+Rd0!T)3UFD=BL6k&$a`(Qh}4rOPuja%OHY`H;He$Q&*DKk_(T%&m z7&`$^*%&tSV6y(?q10c>vM)375Q1`7Olt)PT3;q8eQL<@(uc1A$IR$xO z6}i*fNcd7XDwfceBmd?bspO>VW9K3r2$Q$cM{bdDa8P3T`gjQj{po3weEPtDV*_;` zp*C+D*hPQec=r}rh5VCai|4@*2Iyeg9=;!pN5d;P%zo&N2b9z{S5XF{XHQ#$L;#uW z*bJLa>B)Jb#a5qEdiZR#ur)Y6uuAW_r$vWd2BpaES`GuxF@eWK4!Q==z=ncngZCtm zJA(V%3MxuDiAZcH`VzGW|Fv>I4iDveL6AEBk0kPe?ayExcX&3Q$d<@cI;ahD#x3T- zP!4QLIyjj0QV1I$z3B}SBq0>-$wRHD&giN7#l&P6y@XyD?Gg0fMN?eWnS@ySv44ry zB|#O}$tp4aVjaxU1Yk60<6liKKxjY(XU!)>AAIn%t{Q@ocu_?20cv{L2biucCczV_ z0lyEDJ@GI=00!9CvAA57Jt3lezp{k&PAGW^6`zzu$|RtQ01>_ybN793a4AbPqw|ER zi$)MINX|qAq#wohf7*;NRkX-B&mb~b9{ms<7|yNaI7KE#40(D0F)r~>u0yKHjY~MN z!>(LbJ-WLRvsmGF(0L+wSJ!MsGoYe+f=}!_P2Ph0HK#7o8Dy3aGl$v(bKXVm5ua6Q zY3_-b@$78$wn6*rNY8&akOuA%rWq@|ZS;qy4JJ5K8LRKEM_9Br-syx(i$!n0x&$#b zHIsyx9kTfZqZ-Q{#S_XNw51mm`J;(0}ujnbKJBO91a-Fom#(nqU`tw=8V#34)MHo)d)Z61Vk??S=i|^|N%2P4FKkil!mO zT?n#ur>R&)d=ai*$F#Z%i&4Kw6%_-*67C~n;m9K;4sjL`CaYJK=nFRABFFf|0Gd9z zI1hpVPnC&TWYtw1@EIUYn%x8B7h__*$G-X~2&>^I)nn(Rzkt5X?U> zi4F>M;35J%QCu5n7ji3#iW!Glnk!NXN+Tk2<)Fw5HIsEl@e>H_n>WQzKFO4@#joNZ zlhs#Pq;x-CosEVc53w9X2K6Ddz@abp!VehGm>kJwAPmy!;Hn=uyV-~lV``TMQxe(r zU|>>6TT9uVb`+};Ymn9`4MB0bU0%WvbSKu`cI&#+kCzz3nl-8|h7N-mpK-{tdX?)C zUSggi?F9OBj_u3I^Iq+`*lVbqw+2I`CQy~X5M{3GV=XM5i4MU@F@k#qCJwqAfTas+ z*B*pkWao6Lt1Sf(o+ByYK!rr}&tXz(mZ8Gr+J*$6sRb56`L9bre40aSG9;wmn>H;z z5&A-^<#q}SF6k2pqG>-NIW~KH-2Z#ThD?~z@XHlR#SB_O4N9TP9#~YRg;Cz+Xkx)) zs0BzXlqV8qVzPKFIl5ofas`0e79p2PVdrJARi*0s0HGNnCL>h9G+(R^7#glTsaJ_& zWyw0oxoG#uM+Gc%rRqQd$sk!4iixkpK7y!-IxbFSP%oCBN#vv$@&7dOD$@r>oSiHw ziJ{8rHHAAMW*Y)0>R+)-6L@5~;P7zf+JZD&ut}os9~fA6fn{xZT5a>8PHs-9o#z*n zmE8Pd$e+u!9`g%A4K6^P6WHsO)G0}MalkrpF2ubBktT*QVs1tsrf6Nwt7t}*{B;hC?aKwvoW=)^Ftr*E+~wX+tZ1aJdphIu(ag|R<~-r<`JO0 zg^`#_Lh5(!*dSl}B|~G)gqKobnrad?_lrgnpdmOklQsE)dN?nC9Gp%e zaFEwukK{LJ9^*kibjj*a7&}U}$|%K=IK)Jp1$kc5D94wh6DX*}R2K(i&`uLBj7TX} zR*1DQ^Sbe6$^$&$#dz=|gd^wXP!YPg2kbN1toeF>?>^ zwi@CrvfpSzSu}9Q`Z{j;?eX}Z7cb&}q!B#gOo0~l==ZRy`!E`xei-+z0|erXZIRWd z37@TIIz89du`t9XB6Nswyx^=4fJDV}btsNR-Gz6o5O##TW5}#K! z_*~IczZgz2#aJ0<2u58hdO3riRMIiN8BQ(+XMj!g(cy+{@XA91HgVs{C%QrYMIBBY zR=!KeQ!gp!IT-dD6k-7~o)kpt&1Ai-3_O>FKk6k4wh|J9QS0Ov4BnR06*dRvjd>9B zNItngd3qlSYoE%w1{U+mMo1%E*jkmIvlrU18%}srz4|UJ58~RWa!x8xZ%n7zQkWrO zdm&)#42(C1FpD8 zFkhR2>vbMoK_nzQhW4F|XMUV8O4zdp<}=Uub}mw9b8< zle!$-#lYTsap~d@9@mErrR#+-_0BE_Fq6$8MIMPBDGR24>#ul{ z(A7s3dq{WXtX-L7FhfgDuej?{T-N$Bx!}Vh+bEU20CvF86MI>`Q^P)$Dq#YMd#sk| z-ay$c7LkBayBF8<+#BzuPPDnO-Gw#_B6r@^&1Ri&gO)eEm-|IIfCXLM^sJ^3D#>0} z>YczlUnW;qLi568%$Xq}5*4d);WwuwhDyXv8v!pL@vw1$5I#gfkDHDE_y767AU!jj z<1Q9<`X+^C=~FCMg!g|dyo6no8cv-`k8xmK{}E4JalxJhB8azy=?29ICgF()7Lz`k zD5zM~10#a)o5x+e=}I)IoBzOJg)FJ`A*u@&Df0E8a+nQy2;fb+))g_q95a$n_{U57 zkfx<(_0L%`a$??Pf}mR@`eDwpc54)mb4qoqc~_|>uvLd-KGaskRl2;Jk_+ekM;d9#3H!r9{Jej zx7D4_`LA=R>(`KS-<_<0rVE?y?g$M_v!Z0RiRZH>nai9qGs8p<5C`H?gxbO)KScb8 zxQ~JkPvFalSK(LiN>YX=ky|!llkE#xke(uh1<}%QDx*MJUR}&s}U|cGl($nE+U}la8xh^(%z-+`+a1?pYu8V=kY?b;*MO(-P0N@M=<`Cs= zBxfIy`QSfS;QszGJZFm2k@?gF)0IpliO#~(m?T|P2LO902qG{%NX42S0C%}NiVcW2 z)MM@p06O?}D%u@W!38}iVN){!fzuN7oROo_DdCGBrUJx_w-%s=KW& z+-rJ>G178LT2M8>?zVq-faFo(8b?!1NkkXSULN&1OlH8m-I|V^Dr$|#y^r#9vGP)M z;aw>8G?&AnX755;t!|Q74h$3jbUP{OsuBl-?R=5W^<xl#9_bi1bN6Ii^{;T~i=Gd< zR77iYe$ZMgA{kQjjW9PC9t z(1R4I(MRJzc1yHJDsYW2iu?yvy*ZfRj&Y>X4(A-vjuH@4VBG(}gGV`tqV9AkbQ^H_ zRAHbZv=H(N9sw?dKe%Ct=-b(q#U>AJ3(w@hg*;G2rDmnHe@-)d8K*-{Yn4Z@(J={U&5{O>B$5k|`+U6l6xcQH8~1;D)WN+KRF4fmqW zt0LoZDF6LrRiJ#XBHeme7Uw74^&sGF=)<#4ojZ$iYni695IGU6_J(sgpy3=Bgm;mB z?Cf1Ze48*g5e10y0#nlL6j`d8^pg(0ZCI0#PfOUgOcEj_5{0O#0I||C-xKY`79`b7 zDupOXawiRND6VD6S(~BV2TL-+1sg}$wu2SzTMWcoHYz_u2#`Cj7XS5Daq?hWJR95b~k1LC97QlRUJ7@@UF8^ zE9>!PNou$VQ_C~f!=%pt702vkbd9wa5*nNjhOCC+#@-f2(jG=w9*(g=4PFb2GD-tm zXd$)`A%{KW9gH9(p%#Np&Hyj>fkGqtTiHUXBk|(#EgYhT^9`q~iK8a;KJFtP0U6c^ z8EGDHSdYRc-shemA!l7p944lt#yK)*AmHo$?W32tK~#tmXp%Msn#88qu`8Zc%+U>@g2{)Zvh;?C z83Yozc=~u*Z%#lzzV~}SlhJOBi>DuRk75N6hhrwK2|W$c-9- z_Tc$5L|jk6dio`Kp-AHeVo7lyWJOgm5#pqeqwtAz`vgw;{^a6nMBh=E*YM0?e&G=8 z6}>{?HIC!ss*3m}5f|CNWRJf78s2*dghj+&j`B?P*VH$=GUX^l(aZ$dV{-HR4m9Ek zY-95#j5=DxsAxt`Nc(jnj zeDbFc&=-90pI{VneWFK*C;ez-08Cfl4OubacZM=h7hhM)io1GYx@UY2on> zC@%|efK#x~vhS1DtTFr}t?+O}`WYjX<2Z$NEB4UVId5fN3L(>RlNU;_`e7Sm^Wi-t ziV%o2&|l~jLRMumQS7UO%N79XJkx6EOsFPB;rNCgq&m<7X@U=Vv&hhUic^F$Ab^C` zs%NdwHz`q5$xyf6(#v+ZMQJLl`6xED5tG+Z8jP=GLI)HUo>|&nhT1sfi%lMx%kxId zm%J)BW`#Miv$@{;MEZQFv(LA}I>*)D-wX?*cU#ge+`h<#$mb9UMG0jpoe*7{V0PYI zAwCK0{s@0~#6aC30ThypCX1F?nnu8>s^L!`fdo)-kY=-}VmX^bfhTpLW1mDu=c%9c z*s8!L`I~n6mUaWpAzeD%Qs7jL1MaSjA{lEks=8fWKDn~j$*e|U9-gos@pqEIi2 z-rWXw%sHJDO{;cW=0d}t&Rk{eZ)NESKP-+#fxAkI0B0n`X`^d35LB0Q_z_m`sq|Mp z{6+FnB|5C;Qy#kT<=`Te-RKSJby5uA=~kB%7i5ZqF2j14g#A&SQ*yPBp_sGFwT4Kc zye;{CO$Tp}V7e$w7Jq?cb@-%uxTuD4f<>jJl7CYcG};&aO_$y7@JGaM;3!Nw5ENPS z%po}PliK7mGySdxyg$vC&V^P%L|anGYQn2j`S?&%U3?>24Ynr9X@Srep*KHqG_}w1 z8`hcb#v;gws9WT*C~$JAy)3O#vZ!G%0}s~xnOY}WeY0sSctPP_kH*YfRlSUbQZuVx z3x>|j8v!AShB8|2LIsd4SK(cgM&VaLn$xep`TF+{W_c2mjBDz9%dCIdDc0-oSwvtN zfvsnUxMXA8|IZuP-KR+OJ9rPv?7Z(GxEFn1p7l{OwVhlJm@EEB5=$7S7cl4vp~z<~5>u#Z}CUiJ^fR#X}htZoFpC(Q1u(?#9pE3v^9y7)nT+oTA>V+A5*f03&l64Kcm7Y13>EJL;-8y;z!+C4mftCP*Iq?2zp#EhwLtgXrDDiD>N z)~WseRgZ0Pu)?);EZk$1?a>6x9@!2w1Lp~9J`7`HO>!kbL=4uNNOLLopp;sA2EUl{ zacCWh@G2HF&M=+kZn^+3<>4e^l$XN7uSnL3 z;hv{Bh^?=oR`tPsCmba2p1QW!LuWEp^OC}CXP3Qm_PW9gv%cQ_V`uMZbN8T&K9*V$ z>wDi<=?>KYRpUH-1_{;i626-urE*lTfDLmPDtI~ncYS^1WoLWyXsff2eK_(%^aT`9 z6VrVX$d29pQcfM$5wD@&MqRA;saXuORb;=*BT07^~+-yMWcRIm3^wl}i5D+TGsX z{qd;#<`r@y{jrN#TUjh+BS#1Q_*4eU4IJ5c4g+=D+gl0$$gmbBV*r^BtZhNWi7Hf% z>=(L}V>~ThWW3Nou-t6|z%D8?o}!o=e-2~L$W=~9)?wI*{H?3?6o1wa9tA~f1*P-6 z=Ud_wHIUzd#o~L6uJA4=pIE_$#wmAl1PfJP5;mTrS*QWr=U8MhrSCaX8co#tB5=v` zzNo{tOrQj{V3HH8(0m)l-hoK^CRoTU1Nw^4c65mkUo$$ctQSb8lqNf0Pl8iCK zejJLWk&heydm!qqvEJb4>c$?k7$S$+o(M;pE=kCT0^{)j277cjUbbJgQCy~av^$FZ zKE1iR-U^eB3IqIOd%5`K`=tN+um37LI+!XD2>7qMJ=i9Hp%v9JzJ-7i=>(2@pkXGF z#kjx8AOm%Mc%6kOm;^^~(MG3-_!j^|m9)$=0!&vmd=_#nPqowN3h&-T4`e5IB|Gj- z%%Kx{=3UdZC?gWT=eHw-qo!v&6kw#C^nOlHVrY@}gm9%FK}ra1(=G(GtREt(+(%=* z0uo*=WeEe>3) zGt9nOd&F+Hk6zA zaB+%Q5@Z}=gawb6o`WQq553{X45Kmu(MQKqte!YlJqci2LP=VC*<^G!MQ$Km5sHhA zaP!dUWFTX9Iy$-GttNW;mv*Ts6Rc}B?qO1)k<)(fatQ;+Z~jT{TEeLj3@jw#K(Y}- zQx8urZ%&B=Z+GG6%fS_9J=ZJh9}!2$5`bdQ0tpvEnHA$Q{LAB^E13wc3H%B;+XT?Z zkkm*sCgI39j*Q>v$3rkD4isM^NOj`U8h#1x(=(7>i7qM%QnWqSs!U}91x2)h(?--Vc^hHM*&RVQgh1@a# zaoR9?ke?3&sy1DYyY6L@p`+ppY6Tg-`nlB(flUB?sRsx_R$Ko*UrHj zTE)Ap{R1Ad?#tHpHk(>PhNqXi`@}EX*xh@x-+A%!AbYvHy@_3m?0FlQwVrRcwJCIJ zW4qOPwUTYNUbS8jyZvkzQ1+KtOtH&;eA(tJw%5Y{Hkd(*-PqXOIoQYJ3VOMJ5UT#z z>9$w0)_$i;f^6;YzFJu#IZ*@90R;7S+6slF76OG4K@k!Rk}d$uHrp*ML0({Zc5=hF z_K%MOj@ANyX)NzHl7_y-6uX2#!Z8553P(gOa!QL#~k67nC)yd#z(YMfh9|*rI~Atm@vH8Q6S;aT?;BM;Z{@p7u`89BSU>63hB}Be=jKu!m81o zDT-qaJZt`Da@p@+H@|)a~Ez^xnd`O8kNTz!HU+(~a=?Tz{fyxWv zs_wMg9qFLk`>=J|yM_zQrE1~68!TJlQ$Lwnsr0Ciy-LrVAS;YrlZP8JXu8mIKq+Yy zOuqZlkK#R4!uHjs?IIv~c>1CDi+|t}w6k+?gsj!MBK==z22!A@bESG$B_>g@f zH_ziJ92TUUbUrY#nJ_{Wq|5emaUSCw4lE`zHv#N2Sf=IV7C=otJIWAZ(oPCGig2V@ z(a(!F;PTrWaEYHZ;IBB5{rBPx>_i>mZ2(JeHfbh#%a)SI#T)BV-FP#idy)oR7cI+= z#er^8PdQLgS_x2BV!SZ8e~W?LQU&K=P2VMeqXy(skjijzjJwc}Ji|5CTT^v5nbMTk zi-V%dbRLmUPR zZ|e^rOKtb#&MDSKP}b$4{C7^t_Agj7i{~1c`Oi6Z6#9ne&Y9U=lrnXDxN~!L+#kmm zb6SZ74>_^pBSu;N!f;yNHd_Ud&b|`x3=V}A0@w)ZqY!n=ykwxt`kk=!2K&aUTC0rS zfoUPF_!k(8Vmvk^n{!B87VJkDXQ(CZBx^Mdh05DBrAA@wRDyOJNI?T3E)kq)cOJn~ z^O8aLRQeoTF^jdb)!8m{NHzR3r>WB7_y!{;=8Q5R9aTbZjF^^CGb;Ef7N}qbP}rU` zKvGlqt=trtBQ(g_!aE3WSyynveulf$qT z;j#J@m0@4WbZItlYX(j$aKg?g^b2<=C0Y$IX*>WXw&CC!^;s^q#2hFrGqzNJ2fFcu(_`q?w5ww}h6g8%En@S7E^C)Jnu#7;l@G>=EfF?4K|> z-wAgc$^iqRtICGlW20Gi{9yA^-qvz5Ds=#1DsgSN>Dp9z#zi13NJAtHodcE86Ti(} z`Po5N^^q(ZICus&&dLG3giAq3=TGIyGhI;3q{qe${Nq=1so32nJ^&a$P!%fwgezb0FM;#!h&+nU<>mkG23BJc}0`hH0lac zmezymHUO-KDJm$nPd3cBan3i^O&YW*v1AfXTfvjeDL&y|A3lzuH_7$>X?2La5j|>K zY#d&}+eFeX(zT;N_g1D7%DY03lOicr&>eJCaPOkjYRI(_yanGiJffiEm zV1GHn5OJ}uka_ZL^(mH3yz&wE46*F$Q*0}C5u!QWLOd%v0t#x}JoY0WzWY)*0jeVw zu|blI!}9ijj()~{8oB~TTHij>@}BhNCDbQ@koYReVw3IRsWnIgKlfhYCH>JGJcg(G zLE8s=UQ0Km1)#}k2cC4UH=bP{AU^65JGD9*2d?msK8E{3<_Am9u>A0M8}OobnKxff z$p~Fm1x-0runKt&>VZ1zbLx<_tcv_(K%mVnZ3@9)P_8f{p$UePm^kT%@h^@@xmW=M zR!_Nt8CsrloXd6yL(}6eGV#=M{cICYl|7@Db>i`P-o%qKzk!KI77pxTEF-uJD^OpA z8Eju~G3g{0;6HEVUUbUbHD4#cIqJ3%d(%QR3xrx@4XmD@4`1YGkIpKxOE@>EX!*Qv z2n3%!HgkS^^M<2t^G1Gt^1P{@HHB4FdDfVs(ghV%Q&b}IDp4YQ7JkU9r6_@*34#a$ zKZo5MR;=B}c_RBDIgpK2*2q>HYp|xhZn~3$WKAcO7{~C`{QT`wx}Q@8=&Nc#yhyeZ z5Vv+};FR&Hg7C$xKGlNwv^KdR759d!&<8zh+tyfs83s>balKJ8!iJh3N!y^4UVns;H1zr5;^ZrFs>->D9ECg;`O_ijJVv zSZidk9h?y05jI|IcP4k`z@cWsOm)iKSN3H-D(=6i{XZIC^`>6Q#}Ib4t!m6z4?gJV zOwOC_TRAv&jZ+u%Z!Wl!$D<66T z-z(}Qfdw;4nM1%gzv6OVP$@a|fs1Tb$DKlrGMLfAPIIzk}7005uXV#IM} z{EpZ0(VJCgC+^OAH8karX4ULM#f7G*?>PHvaoePq(_5fynps*M5uto^JJiDGB(qJ> z8CdLbd&GE~=F3bZK$^5X$im0^Dpel4;$CDuZk5|Rb;WZrMsj!W4+DFg3I7X1Z z*lg|p*xA9-9PSQml){4u|41POtQw~ZHC0vyLAM3tLi8656ER_nBZSl92=PC9{^n?> z^{Sm3rQ*3~UEfiIt5_ew!|p+v1Cta0OxXKStuU_|_g@}>>Zwg#k5Fr414k#?n@0y7 z!7PE&TNntBW4x$@ak4OsSG${?EgT1_K;$X{35Id>-s55$T>dsVZP{fg&|4Y_5R*H< z9{xOJ{xMQEv*WuVSt(!ISt_?jf*(=B;~yb1S9XYCUE-)bXuJy7qWeaaU~7&0)BDJ2 z=V{$!r#2oNmR?~`2R=R#g`zyzS7mh-ok+#sY^wv4T<}H6#8kq{vOQ=AV2bGyrfMBbgGM%L zw1~S`u!N{>);uzy(Ye714z#j2k+x1!|2GZxs4s;9NRtMooq^*~4=!*^GsZ=R^9)b2 zBsx$AX;2g9B4GA=!}CInW{RQ_*&7X1_vS!pxD^vx^9;?*RzcW)IWDxSO+qSy=kDnw z={C$qbyUq7TQm!(`#XjX8BN6vm**dKv(4%kOU&gRft(JN z!Yz#xSHx*!zpZekLL_;W^XdBH8dj}tCRA7%i6dP zV5X!iLqQX9_pF42cOzm^h5$SQgwSsfr9zTmqlECEKLoPaT>K*X2)&4V1#z4Z$Mc`? zKTp4tpYmT26>qSIrboeV-Pvdt#9ZtS%e)rw4 zUwrrL+b2)oefR9w-Wd#=UnN`Bug87(3j4p_Aji(-gJ&$d_SLfo_;>ktOraqhfPVxS zHiJ0gx8l=H9DZs{5owGlEx0KW9Vwa15X02VsLYU&Y%-NRA<_f2Tc)`01#&>XtCcIq zf)3<{K11d0<98@*vVmO9(yLF^^Vw{?7T;!u#9Tb`8&6^(%;?sA5R5IgNiP$>uHY_c zC+H~hVR`{6OWNpVzSdlg@sTk}B3e0Y4H*&3LhN&tDz_m6R`^hoMNd_^2qYQKLIr`O z!(I4N0`){e8Ru6EN77!VZCQp>u6(9R;=J$w>f)|=y6hh^ZFF|Ll@v4YzTy;VzWw>? z{N3Q0eEA2=7o@Gjp}NW$lgtC>uE*~zZWM<`P_vKxWDw}0kZ(VYUELT8LD@Jw4mmlm z!0_L^lctt3S0G5SLR}>ZDTvfoyzC?>9aOaia$`H@%Ar=8^v~B$aigRn%vlA3ZTPI6I2;FJ+g*_^@ z^z5W%)xp&;-wt07u}gxJj{VagdY3o-00LU;lW~~2r(jMT&lVGszPOcY*lR8sW}dtm zN9-d0v#yQ~oe98I7Y75mm(NsFG>lXIZ0H6^$W@}1satU-w}(3xpy`n1XXfSM$)QxM zPt6zbaBpbZasZEnVvVjGPsK?AEbLDuJz;haFobKg%5$SHbmv+Sip{=>JEEdp{aCs=;Xu!?;S*) zFl{9!LMRxx%$hE8;eX>CnK`uz@gG#ZI-BGJEK{EOEp}#s&XQ|`S~&-5(JY%rl%9jynGjr<{=I(Vgmbr7K=G+L?-QYcUd!B1g? zvCk7I{~4SZ*78`X)WNi~95oygUe`I-u9N=VnJaHDhDYyFvW(@G|`q`jd&3}C8>?;AOdV95^X-@SZ7-G9omsz+anYDiE)XFmVuve*@ygWhM`OcDFR4i-x*9%ICoMb7( zUNhh|(8}{Te_S>aN=|&{Zk1E+H$5}r>u&+S#ws+sO|w0f*);dw_c$Cji2Ce)A#Ki+?Zr$-DvGGM>k&Mt}BxU)iT20TI^||EDSe2)m(TF8-#}>3vZ>g zoG>nYK=I^tGRfu{hEzqEf9FTy&uTUv{?uIi%Qq{3efFUFc5pTM<)*dy`rVfgmi3lA z%tEfD#oGkV0P3KC-#c>k_Um_&$(O;Vyy>j;Z8c;FT4IU~sZL$WvX~iPl*574^_b3RIWwqINu}Oqyog* zZ#cv853n_UUdTt^c!3)Xhgi6|w&EoK*pG*2UM8aJW)9kHOFW1Y_`WqqKl;ht16=gQ zs}JNdJIN>jvBZIufL1XqLJ4*k2j~nGN2qWk;#!23LdI{aBYlq|dOYdxnZ8L%n5d3; zI?68C%Bu6TTJ&mN`Gj6_)uDRT@qMtgR#Ps_)miE}f(aZHQU>{~h83huB$5aYBJdp! z2&$+RhL*`23aiMma_Io&(S^{3@G0~G1CPZ#6biCZ@TnWW(&{8? z#+cQ7vMYSsY#_k84$vYth%A@u0Q@gyO(3s@(ZnW5vYf3m6pT4B(E2NovMfH3a-;DTww~D_6+=j&knqLBiBGZ;Dtr7ZqhnX+x{7K z{3ot{gQ*o^X*wb`UvQ5Y_NN0-RTdAj`{GaZIqX%TrcygVT&qd*n2Z58EadGsrXYxE zoMqMlkP|D;Dj%KTrlI2=?)PZ??X4JbUmhN={f)ERN`!fC0P5zsufPMj;7P79JHMR1E^^$nT> zq2>(-u`+6vn9)a;19ry^DYx6f>-ZallloPDqO!1eSB}=M`@ZKco4R5p`>L*Bu%GG* z}Cf$s}fN5pnMC4k7O@E`SMHBJ z*xB80AN{b=#U0U-?KtjI+PBSJ_}J_lH!EFLhkIU=XlFUX07aqa_@UxLVL#4L`LSPh z%Z~+6TUdT&JxMEFxc0`X$ti-$O35iAe3xZdf~OoLFTd7vJ}56Y7+D)gl2+X~qbRGt z(2c`uQmVg_P0N=OS!>B5kIH`8HhVQ>SR%#yfg)I_r<#vd$D1P2!sx=Lm#c%`pG-{E zMJ(XKct3X{9j}F_k1vwe=p9( z6^#i{T)L(E+R0)e44q=RzFy*aob;3qginFx!R}&n=$TMcGfmmZ&Yf;X&ct$&yf&&V z5_J!=U#$M&5y4;q=`A&Q+(A#5>x{QP8^MFM?5X49dR1Zpq*rmPTR;@41}B2IX8#5i zlLUz@V_j7d#P zY_3Sr2oVWk5ePDI^W^y*3<|rGc|J>Eq~;m?f}!n6whIoimkQEd;!BwA{R? zYQn#LViSpxQq@ZG`IZfp=|z*Kstqx9J{dYNrCC(ffPK2fP*;uyEmZjL@ZW@o#B3Gh z=T01{Ig@>h9A;*=oMcb$q$-%-M{;|*`@ZbsN~U7-f!snMiQ!ym&Sz~k!4Sm2wb;b- z#Q8J3FV41nv1F^lOgNnMuQ$|Uu3^=$R_9;7%lG( zIkE0-dI`PCUtN{^1sLTLi2{|mQ6Ua#aWxM&E=Lm_IzWiA{z#_^3ZNzba;up@;Lktq zP>`1)1|{7^sdVj~Pxf|)21DScF$mE>7ZzxcL60*VEXzmjquzkhKb2#Dcj{{{!_XWY z>af_r&DH0hf<&62XbuiVsi$;6X4JtM?v1-U9dhZ7=HO6L?&`&u$=%!_^iT$Uqs^NZw_|hXYdl1Qu&xKjZ(ftr=M$kL^)9G6^;ThRgvl{tX@W! z@B61nk`lcOTr89&m^fyb;U7OJz^GktfDcasPq!RWcuI79cY!SWh_SWk0RNGC(1A!^ zH5lTm;RXXGkDl+hHrjG4P<%uv?4t)r4=8VV-5j#$mm36FU8b0>O_9NRgH2LKx^lSH z!tmgtZ;L`(i+s#Z%gaNOM#M07drTbRRiJF%2;djl)Qdwv$}esKV5#O(PWY4b&E2k| z+K=tX22#bhfxFIxnh8aU5z}u*H`x{L_(9P0kybs6Cid_x;`_CPp4qMHf#g1#Se0ZC@FfQo5kSmfSZI z35na}U3;fPm~ei`I20}`an)1CAaFzpY9PI)h|i}GiI4|V#oPPp)$&57Jk5PK%F9!x z$OQBk7(Ey?!;?M+vh3JSEiUH~ozPxiqU}5OO&mqxCcr?T$~NYM_DNcg@4>hSj+)Sr z;OTM5A$5v{mQ^|oXbI5hKWvT1y^krjage=3G7enw3xb1b90R`0b)|cKxrKL~;n@g5 zU$}%2-*Gb$8%jR$c0xdt@iPwbwrrgJ_Cd~#bkpN2U;nt%XC(>c zkO71rGhAhJ>{@2Im-CuoyqAyDH!SC!%olxzy>|=@&WJ%ECq>*T+IYuwAOM!UNa~<} zp;n%HRb8&0{5I_h%cZdH5b@Wn{Tl9JR7I~`ts}A60<&(Jz^PSeH8|)iaf)AO;FMd% zH-6Xr>DPx34%gPcYCimR`N8iH^o?PN6Hoi$ydcxh9^%NWD?ITX^7gIn&Gj|72_}Q8 zElJAZ!%L`e_)Er8W5K3-#}hcZDNxcFl-Hb-mY$>S*^v|fy~qcKMxZl^#w;G#ZZ>vC z2pcg>{mgQ9hV8;rpPIDK%9AIDx^*FG-)R)5s&`NKIkrZZ$YZcQ82${efYLZIS#2{! zGR1}O>RYr=df$Ool-zF$7Np?Dv4b@BvpQV$1!&^4^AF}_^J?G_DQllMY;(>(yT>fn zE|vfQe`STbygI-Eh_A;!&^H-A(4h&NS9XFRyP>zjCrD{NI=DnmQD)g|bzCV`u$brl z;{t2PeOmg-X8^xe+3t>K)wgRj4zK|>o=7asD(5_Mdm(4T6mE1;aq%&grqGzS ze;Z_9EQqO5_S|z?-!a-nCP3*w@sJsM82?OVso08|Bb>vbfe-8umUrtzKByMr{Xu}n z@327#;-0~DhEGE-p45fja({BtyQWDS$h15dZrqG7K~=oNRyM-)^s>GN1fKXJU+9_# zh#_lX(-$HTgb0SieQBt~d()6cirmY>-)3KZwLFkP!f_;&kUDRd2bMV{A{HcNsn>`Y zYv7I>Im-Yb0!%SOaB`#h?7O!=9j?85ph7tUjQxUmqn6;cfee;gb|7VbyIyd0nN-MM#oNc8Sea`!JMeZl+7y3%nBaev_9ASZHXu$SG46Cc(z~zC^x48$&{{2A>xnYIZnNNZwvUN9I$I*AldCN!dF%z8##B% zG>zc@8o|pkpipi`W2l3s$TQ`pR#$7ATDe10sDq|{C3{Akadsm|6Jn9;ugyJjI74Sq zJA6(UTL6MO={KF;;AE|rNpj*@0YmH_63}0k0 z?hqjuR%$R!{ZGYZRZLpQeW4o9*FO+#Zn1NTLgfeQ=n9H9um2U-2x%}#KqOwL8!Y#r zP}6Jmydf^6^*0$!_z254x)r#ZlQk0%Qp4_IJo=!^s=BNQ&4wp{LXKQ?@3u z**~F^-e2^xGOvcOdV(%SxkAd89uf~-Pt_xcj`Rmy1wuY*QztiL#INErS}2;j^&}7; z64oXmju2ZhKH_4^$pQW3O$lX;(*o;7=5s#2i$V@#3fvcszRYg`JM$<@@>@ly;sRWG z62d~OII}n+i}GaxHF2>fZ#j&~<3EH+WCn0>k0i_lR;iD)cv$xPy-Tq@HK@Bd@U&5o zF$shw?zx(;)Gc53XC*z9MVCIyvPQ+az0g~$6(6?n58^zLKE^;b!LAE%kmt7sSzwd- z-%QR4dCFZ*`oF1&<28Y@cp_j-OHZ4P$23cKG|iLpp)S;t3mREOyz2cTFq;VoRdfNo zxg|n-lrNt_g1O34;YIJxaM&Mv$D6pV1@9EM2iemg<-Aj$O^xYz+ZuDzee7Ezw;h|B zQO`x_mc}sEbx!jnG?f`qAhIVoaGbog#cgR@Bxp@9fSCzpWw|ZDWHb3I^dk&@(3o&L zc!X0TnH*nEZT}6{(XmP}Prv8wQw1g` zWu{}?U?F=u(xs1xMtz7x!nC)%ZSf?_p{IB?awv?oS897{Z=K*^4Mg_^tYQoum!M(} zdK=PUzOs!L$OYfjvvqo>@K0lnSrL$$z6o;^Gdci(6@kx*>*_PiH$kyHfLN^M0vYq& z)$*8#m=BWnzWD(8T2UvA1<0blu#$dA8g!sW1|Jb7y2t~fPg~mz){N<*OT;9Ba?8 zd%!Rgvn?<5(utJN6qAHO<*QF~wJGpQ@G&wu_{%5O8hXr40XkuW<0rt))$)Yg+${*z zSD$*X$@X!W(zlhxZG_7;>_en4BG~42@RJHipF<{Wc%OdL4L_$J88NaEQ$eij)Y=r zj|eH^P*i_GC}8aJlP=I!(Jxl~x&N_ZrdlPDMI1?$L6uVy*u=Csonm@O*U#K*oD z{GqacS)SPA{s-j05=~^H9cZo?Q@BqR$sZ8BC5C}SL!f8 zEaRr<(dErlrXN_(`xu4|yqD;Yz{JUU*c5^s1$O%C>{PB+<*$TK5JiiZ@YP;5@eW*% zU77?PaF~r$4iXgx^aiCQi~vBue}yDgIswlzxi(Rn9#L_su`;}SbTSbTcqll9igofp z*cbuPF%^P5j9_?Aai2)KW{ISsUxsP%neb&+f9e8W#6py?9PI9Q+FkVdF-4S%W$qZ6#4OLJRAvTeL$qx{3*B%6Yw9TQ5iQ8; zIzi}`aUu(g;$&f$4Y^&nOw0WQ*VlaumYAR~mf0D!8a+eYucU^nG|z%(GilR~1r}P< zw{zOrthEA7_T=bd3>6K@sz+bO!E~f+J3f#kqs(cafn*7ZeFOG<(UXg@b z``lf*o{-4?emHu?+Z5~z?b zn9~%Q3EH6Y#klgu#f$xU*pc%=blY!|AFHrij3F_T7U#)0?lA#0xz<+KLjuna3IT?a~JWT5 zwF_%AG)z{&reWf6BowbFL@Br-bXCm$!%{#AT>1K8X0m%mff4?06U4pNnDu_~>3q@3mQMdC0675-rmhnjAHj_<1bI2rbPThv+_954} z8-ST2>jT#X80|uINKWuU^j=^oc7|M<^b1$v3y8w|6#Qb^Na5^X+}E)2dVjyYb8yt^ z9__UbUhcGBwQ&$i{RPQ4UM?+*(wPy-2Qbj=R1W$w8eV?%2xTNzp5Bay3~Y2~78Y`x z3tTm0Crq?QrF2g_iDJ&w=R+K$DIHv^q(P|UqXMEJI-Qr5;Ak}AYrq*uFY$~O@=V+T z2vs1ZK|H0;>z&S@glgT?16et$6(Gf|vw<#-a#$`2M{?XGakRJ=6Bi`m(a(&YQWCrU}C?S89KgM@TeyLL5wW z%yt~bstGJ|C4mqn4(k1jlPN4Q!0WL!r(SHq-^g@xPli{(OFx)Ud%vAs6C|QUNnM4s z_B$EcD0Ex7lTv0Pb7b5>9wkhrWG6?84iM?uak9( ztN>RS>+cbUKg3M&Jz=mcCnCIxGKnd1x!Vf~i1J7Hii4xm-VtK3dg8~zTTqb4nfn4o z3*wb8j!~Z>{r#V*_!@{6s7Dm-MC+!uJ1CV{XrE>@&s+>{guuVUa$ZLrH8mu7>f@iW zg~82?0Wwh&RFmq=yaSt(J?Fgku~!c{&mRzy>wTHXq%<`_TskVV-zAKY4OIHhqtDkd z`YdZR;}sm^;Y@HhODIU5${RKs%A z3H~?}vepV(52Z}LsBPs$P~z}>h(Lg(aSacEs2!Hx*xp4ma;VdUCdAgs)ivIm`?GgR zQ%^L+ap4sehN~b-)jSS55VylY6eL<6Og6b|M*DFYtyXN-t@8M2bni(Woky{fz(~Yw z?!@V5>t}(nZr5QWx|6%5(ZSiObQ?OxUd*O+o^wA5fsG;p_F^^yg{kpL7+8RGB!Rss zVvswYAY3kLS|KjPvT54;87Iklj3$=z4E!ib7VLg^ z269YS2g6KS?p>ZUh2+H*{dYa&7qS!Jwqm0{x3ECPP`k*JI1~i(;AlL$;DY67I`Y%> zd0DWc_hDh_Z-=?1CMI>H1W4yLgq()Y8*J? z^z|RIt={nfm;dZxpKo|F=#Q6{Roo+}wb2?l2fo|R-KE13-A1m1*GK!BLhxA2987E_bs*qa-K#FY4Z|xks$#%E0*3O&kkDZ;(m8|`zz5RB#o9*r|bzbdl zciMQ@+1c2By~!KQo}=E*?m@QQdDS@p(1YEK4H_uM!~oc<_CAH>LF;*EyL0enWofH( zutS(zyZc!ygB$jsv+;VnwV&<1-rw8pw$c11!0vQ*w)W9V`xU%CYiJekvi1*n$ht3E z+uLkvsr4Gz?-RdlV|VY(e&@x@gY4z*_GTL|pSOWo>-lzDn?k2Hwp*Q7E7@l2RqF+@ z+s}3ZWq*mq6ua!lmuz>VG1!M-{k;6ls7womwoGio?rTKl;_9*@Q^(a>ez0#nQKH?_tL zE&8~)=?1ud7n#Y_@ZL&Lbn0JGtRF#acg1B^5nZSkK*!1ftKwN|%XwUnmst@ps#!4< znO?9zi?HS7G!FO;hSxW8ql>}P_mDG}mnT=J{(S*t?d-q|c+dzl;04nZiTs+&822<_ z7hIsbU3edrnhZ+?Y5~-A1cTNkJyEPew|3NXKhbe+vX!jPuN1~ zWYa}HqMQ}VV}nVZOK(LG4`6d*iQuME3cL~qGba1&!oS7250kDyoi9E&c`A~frR1@x ze7lYmy8)k=$Sy9;qB~uUOA|AB%etI$Wdr5{tr392_C`i;DyT2AU-GpL4;$0$3Kll( zBv?(puaQSz+lnMF;)y^e94<)3YhBKhQBv08GPc7)k56 z=yh^^Ihf))uIAzRaQN%t_}9bX1764lL);y-7HtVBB`|QWE8wl-9#j~TFOIsfArFpr zc8}Vx_72{l0d>?0anQ&NIFB`neQwakvGD*xD1_DZH5IAJVVVTeafeR7o~(()|`UDiDK-FRM?rHN;|y!X$!X z{GeB1Nhz{&WhtluRjt`yY`0P>=tdYyew+PuDa|5ZAt-q-15UU?oeCthqq-Gc)(&x` zPeP6(Ht%Kha0A|?U7{91OsR6Bb|2>nP>4h9WZ*>LP~FL)S+Zp11@KjmAw6G5+~x!q zg%EvtiCdX}gdLu^C*}3Vn-}^zI3?vZ-fiyw*hTT+jFk7!yPJ4N|0AjCo9E0fr>`n? zQOL+!CCFJfv1Ry(7ED^4-(b#bbz$z5ggA{Z%{udzn?`~sL|TimZ}J#FEq<3%UpNo> zDfB4ccLWnyK(B$AMubWuFgQ9N^K_#lN+n+GU_?hjz;Qtk=zwE~_eJa1 z@dkZORz@&uUJp#E(;7ccu&b7^n%oksZJJ1J&%oQM2$mx=Dv$u=yK{E|4x25V-L%Pfh}@xeo^eGLCf z_5{+`+~M~I%F`xYkjl;vm@2JZc$6S+B4GQhrRrc1n+houPV)4*vXF!#6bdTxfoIF! z%>9G_sZmyegbbX@ve|Ih=p0yiyvk&S&9xDZeQ-L-g&v&oRNf4>qyK7n-h4!Ynf-vz zbUDhNZ!{@XumGTkYhVlS+od8LyD>y%l+I4gAEj7`&~=ML>jL5t;=v_ZP2#XFnbm4< zylo)I-=ufW4drwOIPSM+{XMl;;zfMUq*$Hx$7emb3q!zJNPq}Z-fn``wxV;b&OIOF z(P~T3KI${y>f|4QXFely#IErE?~haU{=HM#{`HYm8r#dQ9(X&(5QaV!87>uX*UBS+ zSF~1B!D9`;f;STwAgEycnHziE8zgR;OwMjDbq73heBA&y8wfqt(?&hSKM;9YjsVI^ z1`oWrz|WBoVd$^34{+T~LPNg3)Cq*i9Xt>8kejMk|AT^GYpmTn9JYUfnaOCG_3Zwn zd4KZY-U>1(XwPJ0)T|uj_=J=yd}C#cw8>ZU4+nZQ8gp1k^hJa`nC!|*Y;z!)l`Xxh zA&&?##~vsi4z=j|;SfS5_jfqFKVgA3E#PTU#RNN!BrbdIg@b5fs;SJ)fQkV_5DCx?9R{^TC0 zbJFjhV#0Ep${=w=>^|lvuP!~Mk1sz#inA)HUDBMe4irByiLEn>B8e(`5k@M>vccp< zAIG42m$8Ysj<$70N*pXV62sHRxRSRAlMZ$x?gW-BQVA2?ERzIR+F*N=m)?{|leWhR z&hb|uy`EbquRgUw6fqaD#_$)b6S-M+bG=4=Tr$zaIppXy5~2{})Y2#fblSW`~gk)c~-70HmbFG+Hl# z%zY)sSaCisWi*h!_bXiFwX6{cNlC(YAc#9h68@4;vK8UTteiyMh&k^8VN z(pW#KLHf%7InW&9c0md}AJzQ_@%qE}%?9bhD`M8O@CK-Yl91?u{$?lyCW-7x7G!7U z9*`md+P`pLHnfA5+kZMBgcPv!jU}Jej-3}ta%QFM8>1`zt(?d+rp0*00y5MbO8nr6 zu`8fG7mk{&5%}`kTE(G;H5o0&k8_`n8nZqq~G|1;P} z!ii{${4>}`;(-1c?DNlHpHB?-F$>Dg2^@%EZUbEZJ-{+~9emh439M8<%y~FOr zI{jK*U0qdOU0qG-MuV$p2mzkhI(mb+kKZEv&&_F+$$P6i8>SGoTSun@>VEiV5n-+I zY!e5g>Vk-@*iNb~#8iQWGHwnJx2K{Q9jPMVLJ(dLxd!t3B5g7r@c6kB8l2jCXLYx0 zfanaEsEwo`K&71!NR@eoPG;>uCf`*12#Q#1ZRPNn-r2>)AsUyc_Lvol;{x(Ii`oi-26uz8vnJ z6P;q~Hg}5R!k=zW3AU2jo+Zt*xdo@$Ak0U=$)<_(w9;%@>1gqJDl9k zWseVuF=!=2{To(&i^YMYmj%Hp)0Sn-(ePVtrQ6v0i@!bGo4J0(c!Y%ul5iBdN!Jkt zFUJ%d0sF)3ggbOTal#BiER;G|Eq;%bNv|(SLV7mh(oFqOfSqL3UWDLT>V)|in*hAa zsL>4RNn)Y3G?$uMi{{_vg;FfS>ZP+ z&nQ7lCQyfizW`l0u0~+qJqe#fudm1b{<+{`baf#wgOR#;xTR)jKXwB>gd;DoF=IyN zEf7u%OVue-FIsffSUV}>jrfd3$_VoHBhWw2 zCc+tDjmFiyz4r9^)?d1N8~;H&_VSkxzJlwD{*{D@NneMb1-bJO&wc?16U#lp<~AvT za%E$56J0$&{sFgcu-$e9lRxr4E}@);S%I>3TSJ`b50Hq5f+`Gex?D8D z=4fyc`22kEi!=} z@Jpx?|7Hz|U{s25TWh#UZOhN4gu@Bvxu6iwB?w8Q4w5P#*s zC<2)#&Z;wpm4IeT)i#@_-gp=$J?nE~l^b$2uK!B+gblAY6KZ{CTJeMTx^XJ3(038e z8=kRBx>}Ia?m9q{uFo{%$^<>yYw1Qn{WG9B%T707LEk}XYa$3(&@h~kdQ@XVF`-FP zsydQtr@FKOBS$<(6-mnH4|vN+!Zuf`Al?=plug?p)`P8^4W+}9HBs4cM>_bKxwj~l z`R_|d%#FUL1#Ylw=McVu`5Tq>r|r^`{lGc${w2uwQ+PJC=MeUE?k)a@?IEADae0QG zOiHY*>~B2l;Br?NuFPw=@P#W~pH<79FVW{cLA+Ci>n+puvV>pCxByd_3rv}jtW1-j zM=8$S8YS>utw>af@W?oiIH*+mA~pux-(yFrCCI0 z7&vAi4pe6ha0_aH<(c%U^$p0PWW_+^vAwzWhJyCV?+StHsdkqj!G3As>66QTn8kE z9Kgt>E{(}}CITs|DOnu=L1{HCktUv?;9?;)@P&}4$4bRweoLNy4=-z)8|+&F&*lsZ z0XI3Ek0glGIe7~O52sB4@q|Ai@84nxVu>X1E24R&;M;Gj<*(+yG5$E`mEmtYVRDiP zS8}N}1cONc;nGwnQZDim^z^e%8m3K`hfhHbHX=Zno6Jy>&5ULyLx7v60sNaE+VnnE)dJX?fw<&KE+SMy#Qo+9mC=&!yM>IYmcNH&j+Zq>7 zu=}D97~R44Aw%TOM@)jqmn3NcEhVK@g}fJtNccDzFz z-$2Kw2A0^PAUuPv&n&&?I-vl09v{w)*)u_&?Cr1ft}rC!y@f2bv%71lptRUosfd@_ zZnlfa3a8Xy>o&{B;&$@O($PD4m|WSm;}VPm)~7j zV@Yl;I9PSZCtXq-mB$oMhLNe&;q;bP2kN3c)CI5bQ8ErsPM}(elEOreg#%6aK9hOq zn0h{7) zHNymPhvR~ewwnukz7N>M8EKCCX9$__gsUzdB9+AcF}8MF&o{Zj0JVY8vps@up2&v7 zz9ienWgn<7B8Y3@`gT;!Ymvg(wn5RfXG^oJk01zw*$kL4Tt!}Qm}D10ij){6Yr25} z2aQ^5LWp%!50O{fP0XDng%TQcdQL=mnd zUZ6#bu7a@>)w-I;$2;y;3+gw)XwYFxP8J}as>LRwr%L3CRDdYggkovDLMU1^s322I z8%qesscl=LauaC!X8I8Ub-7hz&aOO_WN#)TkhLFO1S3+Dym0AGN_{O6El3=W4NGBP z$&&Lr`HoJsxH#62uE>?DSrGaG6Xjc28KVV4n#Qlk6`W1Fw}pj)Z@)n(>sB(E`!84L zxOr~NRZ`h~hMuSk1)fH2XNG7L9HeA9z%MGZ$Yc3oa6OtGZQYLMDc64A-m7qDO8%9 z?l&i0nu0vUG1%U_vy8kn)!(d6IFq|s@pOlexwJp?a8W}C#E71s%HFbSVfzR>rY6a5RW_tZ zvb4SZ)&1vt-QCXW`j6yU)V|(@8kUQHb{Pr{`Qi}KKQ2q`cXpq_Rm}?FdMBO`XTZI* zBScq23%H@K(72r--dsY8Ld_=!XRvW(nAW;^8f`3Pj}p4GNOC_KHxU>g05Thgm@b3q zxs!ZhJDGe5zev7ip!9!9(&!bS`Ut5j$uK{eBxMk<t@6PszuLF3XCt0Q6^6SeIyC}bEtkteWNq3Zglc; zfcPj3A*r!@12(Pj-r$u)FwaUSZ5qr;3U$OQs!J;OQW8u`!NC!l9C%CbRB^s-)(w(S z03sF|h(jh&S!f4b?Md9vMdZa2HV#?rX-(YE#}O{DaNffSO(<`Q@Z8wY zLz31%Q{BA)DS$URqy9Jp<>O)1+Wrf!ut}VomR%py%jHPDF9n_r#$?90_9o%gaAy_a zTM$bN1!k7-e<@|a$A|Rnu>}Elm2;Y6)Z+;obrk%Q6vXs##fYIs&O{{dD{rKCIygox z++20fKK3$GE#LoIiePi_>gs}Z9w_v|TSwA#82@&~`sn2N>g)m_jRb%PI+~5s)BY<2 ze&lmsJP-$QOVtO`J^~vb_3w&t{9*{_5fEcfyZc=7O=>VM<%oQTfP5i2k3njn^5JNu zn&nHOa3Y5J35Py?_<#X37HE=aJcEe_W~<>#2Em+_HWZ6bPKQ_sh&-iz_x+s|G|8sV zaf=c=3Yei@Bb58#h-NN4D1s4aBZ}d_3~&nB4!jY5UXV}>OM3clUiwmGKZhIbq64=q z8H(b){wrAya@XL^V93A_ilfgJg&urM^IZ3Gwl&o?+xyti%k=lMa0^l`?y^#iF024fohgnljzex4z-{bMB#5O-9#(Oi(;MCbt1GYAaL9bclU^O zYh^I@20G%fESR&r!jU{Y>t^Qn@zn($z8&MH1V!FhJXWZ;!6N@soU^->0WqCtq?vDb zebr?iY7CwwN4ez3c8*c60^1{FS70+@r2$g7JiiWR7f(Ra70=&gW1}k^;=6_q6w=&~ zG%RX*EI=OOmRN=JZ4bfyl$f%v%6`tS#+TUm#io+JNV1csh7;#!iPLmq()qNLvwh%I z;=;qj24`h(PQXIG08>9!k-fMGVam1RSc(cU-bc`lpA|cF#gJk;odPwgWw`f`at?~goHPTN zCdPa(}Rv92B!Ci4n$fWybIdBT)NyOvX5K7qM?qutV-M-?W| zj+LS4=(HgMKPLdPZunNtJvkLnIuW_vHhexAJ_QYH#nm^H*`fJT>tSoj=sQqA>vd=9QkXg(HMoQ?oRgkTCNgzs92vS})&S z;2vaGc6QHzZldHiJoSQD&5DkM`+l}Y_~GGvJ)33(9k;Wy-W z_#LH-4=XvA&zddROnp7a>pQ2tt8*w!J-IGrgR$ikmq>$=!7N#ZVk-*Go@i92CG5&F zt}dXM_xHqHpg>fej#hewBQPPfw}=NqWB;pZ5C~?d5y-^xlx3 zrerHJF*M@EIoUkJw(=t3)HcSfAUF9ajB=vlYm2FwjJ-#7qPEUMq@FbFQ;@3;hAKt+ zB|+Ab@I6zZvgl5!jJ%{Ezcdf#BMg#1zgHC7gH8QcV$ZM2ApXkXna53QYyE}SB6%kgVOQ!~rd4z5f zo&9(SjKL1$S>ffO462Oplx=4|d*Nzbn2{TEP*wP7z)%Iy77-(P7!6T*bZ&s3+@Iry z;CKK<+yqX}m<*xO{GSuU1g$ZdN7ow-6ihJB5<;{pzyL+RP!$X9)g}H!e3s}`4OKPR z-+@h80KX5J&gW_)vcrrCLn;SUk9CN>Xujg}9;Q+o7Jf5s@-}WX(}9oqJQq`WOHmo+ zfglLm{3*}EV{Q9JwTVL-nacvF%9ttxO4fdYG=1R%T^r@$O>PXhp*A39(XhiwW`U}L z3KR%Ycd%#apmiqaLOOMNdc+}dy$Z7QUW2y7xik8p-v$Qg%%mJiIEKpH+t99)mo^v) zs-(@M(|#|;y9_#r;+9GQ`oFewoPmW7IXAJp22KpjC5L0>0{{Pzh+!Pd5Y{BVaw;zI zXA^Ye)mkIvtifB+b5ipo5Ou9Jt|+@ZL!eV8a3ji28cY{G$h$upO(gH6R#;%uXuMoh zByl@PE$O?#n)<)NWM>q36ZNi1xh2Whb+!bJ7D!m#5@q8hrv%;>X3`)?>ZnOh8KEpN zM*-G|snnUQTxjDrTGK^S^7hKLVtn z&J@xT%EWAA{@0mHlKZ_SW(?TNU{*}DMcbD|h4Cf~xe2jB`;IhF2iFZ}Tt2REx@s;? zRi89_RZV7=3Cl{>r!Jput#x%9M(4-fP-)gBX*;Nk0;Xq*~_X zcjZ+0a-*vkc*c_wq!%Y9)g4F+JyrfDwT&f2LpmU1pStNvjt3i55jH_@tQepAvN!(u zXZi}=eNx@sukP+_tXH2NSN9+O5#B(F025o3oZrgX6|!8iLT3|k@mqqh?2r56FVwqI7*ZB&VH(HY z$GhfuMjj8Ut67?^KjQq#w^7Z7ySl)hozCKkt(t9<|H82i2S$G1Ek=UvDSHQj1!tTie@xDI3CX!o;UJLe6TO!g%TpDFH%nBny z%)J~AQ->mT0Q38o%)A94Y>-o&vu-pwnUjJ~{4gB-46FG%PDqas!cLnA5-i!Z;)tEH zg5t`0Ky7iX^Y=BSpS*YE$KD$mVy%C=2_`H8U&001P&TyKZi!sLMMu6mF5npuYZ>Ec z;vB3kE^QK%l{FKofqzu*w>)vNwU z{rB4P@=a^0+kMvAf4aTi?Jl*rcmDo5Ro-y1!#}z@ya15 z+GL^&lhUJ*C{Guqjnw)BND`rFT4{2`SukapAQ1SDI&PRllWPbHVK}Y-6uwTM;_^w= z?XGRE?(KEE{Fyj-V22_NmUI-+(Lg)f8aTOum6&5utlh}myuL9L_eKIjUDpVancWe# zAoFP*2%npHXQ~0{DV}Z9`oX-JZ)elpEOJ2sf^-u2(?qbyu|(>Tqe`iXBW{=wg9DbG zx{LGV0XG&;N6eK__7+FoSbfT{8_VBf+zr6wK0^6|G*bxeL`?>yD2`;rL9{1!rMeF6 zDc{yM%8RZhqubFX%drEScQJj?p(kMrwtV+dGP@G1F1vWeT$gt(AHf0n0<}FrhBm>e zn}APs=cvS|sZ$1#Z%+TVBjK}RG7J|vMsb`!T-yq2L>V6xvu#BXo@9)N#(>@&5t7D466^k1uMT4!(g-!@V*xXXMjD1}*6WpRxz(h4l2Wedv8(SkIH)g>joZiPz zd2<=}LE};~Hr>qCVzCLvFlf$+GcRx^)Z)=jlPsqkrzQ&%g&0osnR5=4SVPcOi(b}h zIY=^~M^q0U%Fd7b{BLlT;kf_jxkukrLb$M~VBh-ij}P$8JEiiiXL?R&30Q@g0G=(9 zeW0jG9_%U(5k$>gruw zUXA*laLOMkGCDy8a6h^u6zAC2sjc*690#p%d}DLZaF>ZSHwc_M@iwel(=LLEOpzY$ zl1J>Cx)E{&+XAYSag4ZuF1y;AcvGrs-Q3ss$ zPiRKS0=^`CQ30)i?RV+>gpDp{r*@l3j~PT_G>Z-2c2G^h!ULh`4^?{gH%8Dt;brZ4 zECfw59(!-e9RRGBs7#@ja4C!BEX&zyBcPc?m5F<-Ns&=>ukO{v454?ku>bBMULh~g z0~3QwyeN%r_GKTt{0di}1zem-oxSXjeEa20Fbu)TCxjR9=@oODI)o>*Z(iYKe?ea7 zYtWq1xpGz~K6fBY-+6}fP>{7Tz|>q~-DHvPly@q7#1-Y7H*$S|*s@3$oIPL$bH}Qn zSJE@P0z1JgJt@7o9HoN_4dZ-p=yDaQzA)Y69nd34et#NkOLc%I$Qni`$&0jN3xpM50-v$w^!9Jb|w;pTnsa#EY=3? z3%X4A-pce6!)1Pb(Uc|ZY_os^sXTxzQmwTzS^XcOh2!!n8fTfjj%`Tzf?O+vty%rGG$=%*>}%oLWfY4uXoyFBvFTAF<7|w<6N1-0 z_9)Y@RHqkh($hp+kW=C3mROV?-Kle3N*JtyYhpqaOTuVxKdfMJ6#_APE|Jfx7l!}; z^Xd5i$b~5HDP7qS>qc}1VHS~^1R*#*Bj*Hg9_X43>~q&qKGoGKOs z7RI}yLO7^Z!d-Bz@v_fz8@WeK6nr|Ck!M{~Qc)z`bO4E4)HP#BN`Bxl0-fAuB>(dQ z04nOUXmyWy^SnO-UAQU}pO#Ewb;%KCC{Y~Qg>*6VB(+=>XOx#D*-ik!bk)oO%1D}c zjmYCXxSD)Iu<1Y*i-TQt0u^&VGIK~MmA+4Ah-x$|MTG9eK`Ut1* zb^Hy^osd0Z{`VFzA1^hgcAP{JBm$j9EgK6 zZGs!Hr-#TB$=O88jY+!f!Cca|#g8}LzSjhc%B1>4$h?=$)^7D0I%=)DxJoyEDSs{- zh9%DkIvn1pam^lL@~x^cZkk3Kas%s}t~9kmh$D)dd4@!iFqNTtsr;p|xw7sD`yf+C zfgbvU41xrsbQSL52P5eyWDmu?N$3|m!rn^E|?ZfEOzw9WK|-WDALU@O6VVqzX+B6#pmUnY^(=Q+CpND; zG?g;;f}7JWk!|SIZX}oxa+7Y96g2yI)gE&PNyz2ozh2=44j;xhg3}yyuUFmi1;Pcx zWwbpze;3ppNO=JUQn(uIcE0QG?QCxBcel2?c-03^tiPqH>z&PwXWg~co&D##9gV_- z7cIguTWi(^Wb zZ7ul~bFG14!1TD(n*Hh1(2H2!vI)uSpn}pk`lP!%=Z!d?b6hHCZvsK!WLbS?OqP|;Ec&w zafG7uINU)LE*cwP`_eY)Ey`dW^r!qi&Y4&<(>yPm1{Y0p6A!0?4dv4@+`~^1))%3W zFD?;GM8=535r6i3XE;&PCy>>OqBB^;%!zn)PFM1;a;<^8fC`RY_eLZFqc%LO819;* zfSjU888y-)32!or8w4xHL;xypJ4&6!YFVzHzMokeUc7_%?CZ;_eKcR)zqhdwYe`e}?Nje^()x z^B5I|FE4uo1`lM&K6EvM;C+;Qh}C;?`4-`w#N`%bF+5^aXGFOk9$m$V&2+XOBmOf& z%gpXsjakTgbaLG9o#I7wi3;dh65a?xlGA}H68Gi>P}kAv)iGgsi(u2tmRP?M6jrLs z_{TG76y5;~0_Os63E(+3{M(mdi8?oay}+vwX!_;VB}#%_oeqxrc$*hqAm_(-Ne}(g zQv~b3kZ`peD;|C@z@-d92X4;bz@aFT$l7mTGgxv`mY6=d8l4XyW{wFNu8NKE$QycO zoNczk;wOj`JbcTcAsF;Aj!6;ze`RK7A6W?MjWbi?T&EX7cmS%PTP8q&&{?&t@oO+1 zdOj<{)b$xjVK^Aw)k_d9EXJ_qTMTflf_#`u=>KV_+S`7z|HJBTr`p(qsM`L1V;zqn z%&zX?dv>AvVFRw&ICn&e-PJ9~v+XC<>ei3dUpBVZv6lZGB5!Z6+TNYncm}!GLE6UF z+U9dShwxqX81=Tc_bbS}4L+W*zg@9IYigr|dQYlno!zykXnFPV2IS_C3o}nP_P5yP zlkMGVwc1(T-QQSyzPY+v?L6Pz+1~4*`*k$Ch2#2N^wN3O+1g)1uSlyp-{Yg&d%C*0 z$*yKrp9A_`!dIgo0-o?_Um9(MrQ>f_Chc7;K~vv=d!Lbbm7Z1p=r zw_9zamE9Q@Q|PK6p2AnXv&;Tg@&6Lujl)>m-rC>A=K@B#yC16lu(8)!s8)CJ_An6g zWOw`7!VJ-g8fYDjpx#zTTOq0iL19Kvgb0JDdT6j(@2qa3Elkf=HhoLe-c0GA9v}WI zmN~AM!MhKO2b}464bF)Ot&;z#(#Ntpy%Ah+z|ZuliuKMu;OzdT^J5nd}V_DNMz;&UspCGHE7^aYZ(oPLy6PVO+5KHLi}|$^d~8X8<_m~ z$_hQkbsIQ{q~*Rw*8cAEj+Dba-kH{u)y+NoT()|QRiOnO5Bd&lneTk;2r2s zg7rdwI#8WcdGI1Me4mibsic;YY!rL0WBEX{G*pGjwPS?SaTlZ`o6xpC6d`XEjAj>R zBnbShP9Huc$o{O(6+R_kK0Y@$@v)38`@?FMnCF*7tDhCj^HUoFQu!fa-e-U1Pi^8o ze%{v_EBq+|>}MDF^MSN_z@OU23;fJRf&JaFzW$Jo0|VC)Jy@ug@rtT`;QDd=_*44v z^~8_m`*_efw6L7D_mRE;R?-8$9)$it7RlFg1}48^$>lGzR`3<`Ko`lt`SoBv$D+K4 z8pyyVAYPM}7nT8OCBgjBgAhc>L4TFZEpQ|g>p5Q|Ljw4J4lsmHJZJeHvXodt z5@ramgs^Yyo0f$DFa^ufC+AE${R%&%uTbrCR8w*ZNngw(O}{E3Fa7->P0k1R<%F#J z3x6V1$*43%NmZM*l%zqXBoJgdU)9=UO5UEN6tyO`M;zzyF(q$LQnL2Go(P}LOg3Oi z%3IW=tVtwIf^k`XRfBl3}1eMd=JF9{@K@+BI&Jq83TAQia_tgG<~OezW{_6+x4x z{y}_Ahe09oLHsPo`0~PinHFgZ(;tVJP2FUswp^!lNyO1euRL3d?oB&8fZZ~H!FS-v2U z6x%M~tuuw?5_3RLoh=|KwmD^0DB(dG>)*U8X{B7i%Ugws7XUM1cP`x7e@= z1)n|~Ii)sX@g4NTl=7G|Z4<^v*)Id`dx;~$37*{AK7YLZEOzaVm|k4#VWVZ|WU_@0 z!{<#)%h3IH$f1!tX6nv6WD>J;@7`Tv--r;hC7&JLTp zmjE1?XN2E?`z>5Nz43fV>ShbO$HCl%Uc~@$zhVBC~D*gYh>EN)9guUc?Xo^km%D9A0cag4LZuGcazP%`LEF z+^__al746HD2E3mSoeU8FmM3$*15L*tTmiB0#umkdw6gW47I|eay%c9upzGyK1mKC z$1s+UFL5D=R&cx&i^xBgL9_@d5(GKqm7%m-zs@e*dDK3{-@#9_FHg=#mv{Mb^83~!X<6$ zK+b|Dz}kMa0x)0P`He8n&VM%d9`9OS3*`-<0};Q%y8t}MaF_36In&U&Tj1fEJu3;E zqnN%5*@Gi99&9Dsw^^nyx4r{7IG2;uK#+lBwZ!PGFPbvYlhkg3dfVjRB0=sf&y$*0 z4$o12&T0a!`FxCD58v*{eY7ENH<<;$@;b`oEj<+Y;3)4+|d`@JeD8; zc~s4IeBJZK(cuYZ3+yDM;%5eB@TI{aY`VU+b5hw&ZzD=G%Bv-RU=g8Kj zk8C`~doI@7Px#0vgMx{RZ_0}rcyhwwEEgCw<_(iDr(GJ&J9TebXXBQYEpIkgeLI!aBv zjhf^N1N`O2iKdic>A+f_qLOI$e1*nTl8j6%#1xpR0trVS@kB#`*M~7HO*B?Dm5Pn; z%CcWk#(e<+sSS+7n=s(>;N{RALG0kErbjN3mC4%oWYN2Ht&MS%&#jK3$8@Np9yGt@ z6=Gglgy@^9cPpiWqBTc19-5VjTwOGwobEvy%VjEl(vu+#QZ*w1)!#|OpA)6@&ia`N`wWXmbct2w+8W9;VU-xCcbUWfpGC9vW@F`w? z@j^5eYQ?g>S$rte5xJMmX}06gw0TG_90s4ul*Iao`vVUYKlsCFS|@|i__AA*4LZA7 z!%7%z7?E7Dmjb6=o_}$Ww(x>N1TyuO?Jc8~SdEP+R7bTv{O)(L!@-s z$U>}u5FQF7`)&im7`ryzKz5Qezjz;uAp<+30V{+R6M#qt=be6&ufqpehmJmVtdwn? zA=FcFbY6=jlj?TR-Z5*qI{KOxqiGsWQqt5X`sn(}d@z8)Pbr}%w`CX$Kvz=<>)kty zo1R*KoD*IlS6i_DxnS|UBcE`GHc9;w;pyQN_svWYELN42V`3#ysANAk>LXC>QNQcg zvaz+pZi)M(gJfU#;y0#T9rPAYRu`Y#Tm1UPub;n{t)A}ZWfq~f>$YbDPIZX=fxD$} zLrXolBSU;(xE+Asi8pSNm}UhdLgCUw9psz zLZ%g^rM_J8)liPkDCU4>MFCiDjD&P1fdSF=Z z*gp6@7=VP;&C*{4YW4nG#-rv}El2}7#*ROC7g0Xok z3{?zN2@Z6u(4QsoCEH#5$ zl~I~LnhoVI)AY-jem60kn!lR)X|#tKv`bkZI3riXJi*-c5) z*#6(IKC4iXJUZPGHrG^pgjGeYP)WDA&6PAStprl4jRJ;zy9Z6`l;tLNax?HtwwNhs zm$LInnEDV!52xgahbe@vyjFgq1s6`zj#|*h*mtu1)Yw?$1Pzb!$w^*oNlFd!nnwZX z8@sfZxD1{22dx0`kxe4lknkJvKoM4DE6yAC=PGK3ycl{@9*{#{zB* zX&6-8>*@WB6C?!3*5pE^$>SH(_EN+jE`=iBYz0uD& z8#K;@Dda|Z>c!gpqJ&F|COJ2=G%u$_6xcF&WnRPi!UB|%Hd1azt5xM)~`R!-gNK!+rdwV z_ZAO-x%V~x*TawH6EYl}5zc=$izCb#@gyREzp{OCk>S^Seu;k%zYh2%Zp{38!7uS; z#@7Nr#E}OdEBp{oMtpE9r%h_$r1DGQF(z9dh-;L%1?HZ z6ge%5-+DR}ztzs|O$5VCU^j{J?;Hn96lb@y(z(q}xu>+Nd_sW^J(m7AST@FSb@f8) zHgs7sk%jrR&AlZOWwk`d3o@)&u*SzQb82vjMGV_T0zQ-1r~_fi#3E0*M$2f6GAVYb zu0&R%Fh#>Vu5JgWY>TF1(kY8cN@CfS$o46co3WdnZ45uCK&=L|JNU5uBIbCCgZn*jk?SDbgu0`s^gjAkn@4_5^5R0kw0 zMFtA^;-I9iLSq!;)tF=DIfO7w?X5mc9nptbiw}eEB4TJ2H)KIcFM)+5EJ9`w zwV4DWm~(j_m)IIYFhBv`r6NG~szo+aBeqmR7M;UzA~pE)y>Gw`K?I>Jzwg{3EJTA? zu%&0$X{Ch&Eq*XJcp;WQQT&WlZ12GqV(l(22qSRC;rY^M5US>!gxv^!3RVcMqep)P zla&=9iRzRDCVVH@=DiK#B@{~8q#us4VCv3+wot4*NXvO;Y*7xP?(ojxq@%X1y?FRl z(5B`g;Z_dx#SBM(UDzECg~QbgmqZi;Z$EsV!roUTDoP(<&|aBvJ~sO~vp zqjs?lPX`Q4F$RJB_+wYzp3aOTlge`n#ascqP--WF!N~K>Jw5rQ&kroqg6qnPbH5?ULH_LyrBpl#)(pQ#*BN|J(|G<*sq11hE3&#vzinrqF zQUNoXC-EXZlVC9O=AqC^(lW;GXCcoHE2fspX{+qulWl(_s}LVtva_HA-hQ=6Nw}mJpZZ z{BmWbsX1FHb@g&xp%Q(>(3N+=6?PjVfnq0E2?26Lw3aXa8Lb5oPW~CK1<|=+v#S0X zt>vH5TJY`+<;`EO@H8&ol3d@|Wdy~$OG|g(fUOQkcY9ZtLpWO;FQFv3_KdtP)!OU5 zLu@A~%~ksiWGXH)%wxBT?780g_${7Y`E#{LGv?aqU}uDY@R#w|$_ltMQn)p-));|O z>-CS(%#t^<#K`j9&h};~ne_X5aC{7(tebbM6%?G?b^h%mL6cfy@n5PF;|mxaia`QQ z<-=jv;KTA~vIi#tSqwtQ1SJfdm9QpZe}a3&dAo%kSMJ`GMC_DWBeDGiaJb${eiKw4qYrq9e*&m)=bfod|yRp29bO~pY?(qPZ z^g!B;t>gSaL$ZYlz_lZIf*IZsYajTHd6&`yvftj}ykIATux?N=FWw=h9UgV!Cnf_& z1xILPPOGQ$AvsAxC~<}GVDK`lSH(pT8PlBhEmP;~1lnc)^kiivp$7>#39tD+j%x5< zF*zv`{gg(AAPBoUhqC`OHa?o9RH4tv#r5Y}ijts|;f5!F;QVSly8Ci)eiuPY!#rOi zx*9MydpF6%0|M3J5#qA)jm7Q1w5t0L^$~M!K4z0UYi8Yi2@gT8g8$Nge%61E@Q=o? zg#REWp76BT8tG%C$9-f{iUyC*H%EXlDX3#t!UR_U5lKOfr}iZc8oH#6k{4feT07%i zN6Zu3m;PD`4QzLq!0PNBjCJF;h>gc~zZF{^>s5=RBoCC0clk8jF6I#1ne)q&b|a?7 ze7${<`1%IO`vyCGeCwwm@o+A7+2XA^feil|w4gPO5e|5!5{toO1S4(Ni2$B=SK(r? zTx7vr#gsE}I->KwK(IYOR-{_`c7ln=jt$3WFNdQ`Y~}P= z*0&fs66c~ql)fh{S#7d5#7GF1Wh9-tXTmG5VojtY#pO^spAf<7xE6 zdx)0t-Kckb)vLDpmzeCI$1|%}2pTwAsUG81mLWp>4*Ix^w%Z>d2ZW-r0~v6zKf-I_ z2!1!S+Yd1UF;I!P$Ixg%f-xk73aqfEdbrC?*H&y^8JLh4-Yh`jj07K~CzN6eXv01j zF#~xa7r1#dpuWea6(>dk#8#)zFrA17h~w!TBnjDPu*liw*%cNvaEDNh(jca$A$A~c zV_*Y3Q&qS>hw|{e4qJUj@zmRUF(M(50MUs6=_4Se0S5GyAVJ?JflIBp{`aSWK?n%R zZNcCSFlb^HVv>zn=*A&3v6kU}hLHA%?iLU&vm-S<_9Lc62esA5%%K)@sY7@$#Da*h zEMgf!{{Ue`fj-bMLP-usg4Q#rUwFvoi!XDGngeJ zHY3pFj|F_`ZHCT#!uXC1I=R0p9is`L3fUOgMjEnwvg#AAO|;WZUyYfmi#XBpBm>i&#Rxd$`#S?_QSMnzs{J->{xENv$Mqa#8ifCa=dc#&6a zRxybRblpNF52CkKZc`FTXAt0GqQyfjJ;;IZHL#yi8F$r1sx3amz3>fa!nnH-Z|8|1 z=jop{o|Xz$FTMn#cX8PxF4ONbtZ#TD3YV-AwD;`ljOE zxY~32FVtB)r>Xf?NkC9r=Y(0OrU1<*ICnyrQ}I)a5(Qf_wNRn6J%>-5kb>>i#7Yi` z2Y8TFQCJc@Mx=B%H!wwvYeoJb;mU`qr#2N=%jC5~oF!q*>oCty59{~jLaCryf@okf z48nXP2*h%@loi8cUbE|B|ENh~dcb~Du`EkGm~Aoiu+H&HA6HBq{m&S^;nU_U_QNG? ziP~<`ove2ZNjH|p3^2PA0J?V?mswa=MP_o-M}`O89Py*44)6w}D>})?S)-h!%anhm zpiIRe3H%9 zjS4i~k0uD4O!+)DK7=K14Sof1%qWH;J4{*L9_B;YxL>PQPYs&fGKLL5ji2M%&zTkT z)Q6)PsO%U!>LLPK)=~q72)OklsvBrW+}$Rs)AP~b5dYilV{_9-1TOM8`RmbV7k7Ot zSEO9UlDB{)jPtmPP|ID&6WC;-N=31Nw+{M8KR<&PI1s1Sg0-iewZC+qZLfFmKFaR1 zRT!6(@>dxsNk-rrvi!)zlgt4vX#G9mtvm64Tg#RKEtp`L*ap`+2Ut8!Ei?Cj-09$n zmc4!CV5#3HOnDqo7qSz}~s{3`*5OiCdL z&RF7B4#%K|rsorgz>>4-LcYm#iE`jZorbn1fmODfc9LT$0p>%-AJ~)gT8s9RG^U;KFlqn0rB2(cxh3)sr3sgP~jraSonNsVX!N!H3^T2 z$`OrgHV;~LQq95mdn$nGX}G^&n>6aRYjj0(n!5I7z4>UkR+S)?D(gBUe6B~rP<9|S z_-YY%InXvS3=w8b5G9EIn3@Kf#cmI-b1G`31iY0@x`?28fn~3PK^npSj9z=95QO5P z2&G|2)oXwQf*mA_=0cs6@)BeyLj9vNur_ztX)VcLr3>VG;t9fDBt} z*wQ+!1U7^w>x=>u5nEe)D1}Rq3>LvZ7@xHgDL8E)A&z{G6W;8br%HO$M+wS4kJo(!I?$&6$6-L9U->8)(5C*!VW5Mn ze;;N1Z0P^F(NE%kPjKXhizy$2^0le|=SD7?dR-@il~Fci(1u|z90g^F+XOlAZj$eD zPhTq4jmrAme+CmeWJ*JWiw_+Pg#qHt&7VnK(UXdor*5zj6>Sho96|=sl_yS2x|LLw zvF^ax5hIe?@&toLk*KhUMx7|n(qesc6-)F{nfPIpfr1dCNLURtZU^r5SqI@ z-4vVV{*{Cf}-5m=H4<{Yv>CMcnV5L&@UZ^b|_;yB;p!3KgB zNQ-m)h`i2}d>N z#NXnxXN&9fY9Z4_gaiqV;Qhf9iezn<8w_whFdYEb-P|;QpRNp6#(i039}&ia9=<_{10r-|MO*Vpd{~FuEnLBgqPCPA zjbtH+X+(9TjeW=Zf6$AhA^naNxXqkgT^=o-4S4USe{>5{dj5OKh+_Q}JZ*3y?cL+Z z3J=M`)YGpz7sDg^6W(|w;MMK^FB9P3WnNgg>B&nuF=3rbbG|m^I3kLMauMRz65fh* z_K~kbSYjkXw(^W=U58lr(wrW==Zk%OiF;BExp<8`w-fr=VczZf zk>+5#=5vuv-9dA;&Vu3!msRL|U7VkXt`;hI5yQEqE0>e_a_IA2IOA9%A8hQxfBDJk z#wMRkpR)GC_)*^`xCtuwj0{dc2(HdE0P(vZlfIjP8eA-bVqr`j12Pp|gNrwxe-M}( zJCk6gu29QO!QolaF>ZUI*Sd zvv6D5B&}h&vLNRCe~CBKaVuRIv9e~I4fB3Fto5SoPeG8eU}39%UJ&0Xxg7EG4DQ3U z;pYur9Ump>{q?HH9$q4L#n1W!ujwM;6PW^WGaNGCYNYCliKvY5kS_y0{u4d^+11^^ch~9-QKQmA~)=$tnLuP(i4s`0bQiHe=LEfZ7M|e+$3Ad_O;TcYr2syw{=6B#TH3F&hKbJnd2g zJJi@y3E;)ZTVarA0Geu z;QitJZ}RVaCI9fhpTB1iB6wv`BwpKLWD;EX6T3X}dSc9GpcS>}v7nX;^jo6e)Pr__T0Fyot%mG#n0R=LCNt;i|^r$$z>*AE~o zYr2`NH1k@rG5|8N`g@GFnXHZnc9-_?JMnR}6?TIAJwf|}NN}c;6^A3Q#&4RiDmTp0 z&AX^xzRP{J)7C_4H}X_@P77+q_Q_2kOiNz}pzufBXR#-{`0`7QUig-mb}kSae#FM@ z>SifDC_>$xLn`_GuyD++=+zx0!*S@Z`=X5i^H-1|&~Yb~f(inDb|i5{Pz+9M?R!i2 z{7)VUIv$*yAge7g>*o=a)f&YkBi@&(#EVH=;BHcpoI!pdA@r1}Y3NOnfncYDGu%W% zT*K<@B`={$Q2#Kn*(F$zA6b@!9J4IO7MfT=!wxa3owtu5iS^=mZ+=qycqFi)eXkJO zca6)?G@={~xYD3-0R&D{07osCzf)-`JvJtqm;>3^$x5WR#Ah@(kmT+p5S8XTx&tj2 zXpHwbCi<38UkUPk`mshN3MB}Mt0X$Hx{^U@kk$ZH-W@AyxGpJe%gT3AJ7w_zPh4B| zCItlPF5-p#1jl!8ew{bQ1ubd2v66M7DsZiKM@?U8RU5XDh&LS}&F8=r>*DOrLHn?g zb6ebidhA{8&Oi-W`Ut1)Jb8&g8N6bPC@i+A@LuLlqW=qBm~ERX>ZsnupR6f}H?;MR z7cuDu9UH<09p287v2)vdgzJWbbG_voVK;IYh~Xs08xPcB2`eFGbGWjC;9b6-jvdH$ z#@yu$KN=o;0Oq1nOV(8IlBpfKKSBUBo+CFpQTyGH_s&Rs5`+@%(6xT->T^Ankn{j9 zQfjtzlPg#`aakz}k{cnAl0;oSQPVJjqe1ctzL$~G_+UX05l|I(TW#4D$K^Ajsd7YE zAVi?)C7%Qf#vFQbM5@Fu$B08nHKnFL_ERDR&$me`H zkl~t&Jb@JAWWcK8+B7+U49V-tkaeOa(4>`=y^sM7;KWbD4=j0cFx&p|zF3%IxjLv5 z>|k*7a;Y=#fN=hyK)=_%1JLiaOAzh*60yAb{ z6J%dGYp7M}jk#hnCi{IM| z`7~dVv6u}{UE0(8Qb~)U!lPi?Ngo5k>qFkBuSx4rXDdv(kbSU}D#s4@rK}T9zAqRLuQ9Ujf zi7dN-Bp^U_o5t0E+|=(}*pC&b@Q?||tWI3g5zAT&?2NW;vEd6hWs5!m4RbSDc**46 zpkIT453WpZ3^#NOxG<;~D`nD*v|G4!Yv?%P=7_Ic!=67lc~|vb;p+MLQco*j!2Mm$ zTcv~U-(#+uZ4JF&5VZK!C1U$T-2&TM*}H~y8}wydH;)ydgHO;Zf}H_DdSEM8;i7m= zS`ank2+^i+0j-bAqNhVV5D%G14kqz#N=x71{06Y*7E7;iBUn%Sj6h!AuGc1R3#@Gc z1g)Q>D*GR}Cjf>+1oze-xPlH3`A@Jrh3eRTNQTeFG-WP0l!@vu5m0mw6ZRwMy4Hmt zJe4>fZsu{q!M|{2cgZ1V6O0MlWsExpE<5A3LkTpLh!8c82;pfi3=%K#ybLd&t1Feb z$6MQ^6Ib6%Bp@fLErj$z2Q44K$XVq%f}bP03jzXt&+S@Z^W4WF@Gegrjwh8VL_vO! zVyw@=i9z zQOFtFP7OZEt}zvQ=Je@L={R4aE2yXpX##h{02{k!a|K3+dT3iHMN*s83=!s9>+$w^ zpHqoCvVB7` zr&+<8ySzYp=%{{O%-f?{B_>|c5PTr$C9MqIGI80aCh&>fqn2UouB8DviqPOKkzh&j zB^*kc^WOT7+6H!r2#tzml8>?mHlW;stt5dbh=z1CHDL!M6k{krtAX((L}3inN5{E} zwiW3nj3U_&UuyPgwYGYi$-W&Kv z^$<}s@d~vf$Q_k&NzFA%dl4S+&0%;R`rW^iV11CU+z@KRTuzS=qX@ORKlvlEmB z5DgnPWX+451r~8;D;n5Bg=kzNlk;W`D^eVW3fs9J+i8^W4f_wY(Mj=3_G8DGU4lWG zrOF39RQV00n|KMn8l0(w!_wwb6!nX%G7b`qdgDai+gt~%S>OHAdSb^xQ_4XdL9sPw z(Rxf?2Z8zZT7jE4!{A#k2Yse;;GNqy*Hg*E^~n%9VZ=ceG}oFmG!qrgm6%x{mr9a` z8e!gUp#P`5!6pI0CLLwiI9ejKGMdLkvLb1KjRJ^;&WIWWLneb*_<$pm4^%&z!aan*9`9ACH6CJYhVw_h!a0=Wz=f<=yXP;PWh_C3dqDMIc9u_s z3?Kq25GetD8`^xoo!Iv>LMre>SwlS1VRFyes5xNNP>FR^ue*J+qxKEhR&P^p9|St7 z0{T;1rm@Vr&gGCdwi2h@P-5he5`gdMx*4NL#J7mv)us#dhK&SB+Z_f{u~ms3Z0UDo zrU>9l?i>|6O4}DjgsO91x*6Jj`Jd3~5$s0#fZWSNJf-c!+N9L8_%J4$0=b~%Qmdbv zmenaQQ$m{xgf>fH%2ULwrP^Sv84qdUNX>b2IYWE0ahpJR4O3Lew6eJ^ab&x3bBsX| zkSy1-$_6{=@Ve#_6DcNYl5%j}BArI{c#$S362&B$r=D;>5?fEzcR1!xXcnGs=29Yc5L&&SG&>?TsbGfMUu} z!pYIGP()2h_I5NPWO0z=nUl0&!@Hs^TRUD;?Ng9&1#yIY9V}ajwB?y%GL&Ili|#-< zwd1OdF>Vhb^eyZcj95Gnq3k`lIv-4epWJYM33f`Wlv|NZb;gXmR9khz%CLlh$r6!F zrzS>}i&8(|^2$D7Pc@LH4LH?8&5k>8rylPMibb+Wa=2st2)iwbiNW!(JMd^`aRAM< zM(GVYTendo+@wzKTUfBvn?UzhZg(?4gG~dD;vSPxbzkE=8BP%j?uO`0@zB6)9C2tc zXA~bFBhT!qG+48Aa^cjE(3GH6Jp5%b)`e7Wjv1%7LWd#UHY`^-Gw%egPteCgI_Drk zYlPRWT*X77+!CJDk87j08pU!?w-g2*pBi*FwkO=j*jqU8cd3)jJq{0IwVMtjKYU2) z-*gx_(~*bs#P>V5?x*lf7)D?{V3N7eA^R(2$Z;RDxfz4iwDyV$7}0|%RgyQ+-1G?dl_r4$w^sns}< zk#$U9uGeq_X({Ie(awfpYxFZtnTLK6HsF{IDvqV;kAh>il;fB~akOCKZjD=_G8lgS zIar&lTcP=~($hQKI+L$EFqP=3%MY;+%V7M_KXbI`bwbiw>1?TH;CLgds3{({x3LhK7CgKPfjU# z{2i~jrW0oma88ux$s8;B+>A#z^Zy3EpKkXQ zZ(?0eT3{2ZpWx)WaI=v~26RPnoAeqxoFjl*7LRP4r}aeLPuig|&UON(_AB<4Tlxm2 z=r;}K9J2&9h%$5C)@#C^%k;`fjQa=(hSY1zu5DCVE9dOeAHSU zbDX3RUAi~$PQBGxNZz#-Z~Zreq1;FEg%hF=u|Bzq1a3%LS?}y1ybaU=+y(5t;(5PZ1Hg7i zUcrE{z&n0e+&C|IjlJ|sTs6laj{1Fg!yr1XDL`ebcsm(EGM;VhJzL#hE1EZKGlmTA zBSAo%LFpt!lbc)H-`(u4Jzd?+0fk4wc(rO#q7RJhs1M?>_H3`We`B(Qu%aVqPPl`v8W)^tcnP3)u^wM zIPA!c@|tw(f8~koNgumV;G>P=+`B2o0e7Ym+(hIj5;N;J6}x5Y5Y`H{DIM*k5v-aC z!q`Sp4g#C>bhd96)E<1=K!6P@s~(ge8+@)F)RCRycLIcAl&W*2h)yPw>Y=%@DD6G8 z_Y$y?R9d5SiKpF-E2v!x9s&Q(owQ*fn0Y=`9Mk|G^+)5HoX zB`BQ{$U2zEW^`|a0|3$V&phn9w@>5;jWPTo`~4e%y2{h_?UOxG9kEdlNK8lA1aOH{ z5N|MZ5`@~(vLptB^^JhjgZA4)SJHB1g*9E!2yOj9_+3Z=XhaJkKLUAB%@B z<-)UbD_s54~rX<*{UQy#7xNk0_!Ptx>6}iHMB&xy_xWiO--P5_fJMtJR9BIX>w%mUtS{r9q7aFB=r|9wwC z{+rV9)B9iO*QXLwP1acy6@){niob|J{)>0$<~WRz`x>6uvL2^Y}fZ_>C<58q=nrYaLB(n1K2eqRP6aB4OP}l zNe!Sm8X~Mv`bd#2t*i->RU8{TyV>}Pt?Kvw=#CHFUO~GWodz3IZTJ{nGBUIHJRTmu zLnGy=(w!YiOOyzYZsNBiTX=;16b~H@aJP{371jUxlkT%ejCsn}^u)gj&)()9??K$)6Kpo^mYSf1ugVn3 z{RO=*>YE%95YN;~NSYy^w!R?_6Csi=hO~_0_vmyu#tEE^C1ZWKT^Sn}J}3)u@CHuD zl@ney1qz|=5MN~WZu`;7;pp&u{@45O+e@Dz?&R5cRwRl-jh}L&2b>!8N&jSHk_)-) zuq10I2d8zSyxc` z%Vk$%(du)l?U~l=%gYN9bGl;rhTi4t;jv1-?>hUu^7p!rOQ0i3n)MY;ubeQ-h7~;n z$7~E9{HH6X+AhL49-kuQs}oUsz9Ms1K9@1k+b-A&!7${az?GgGk+gl0V*I${)bCP5 zGGf9uS_`5Ko^R_H@Db`8ahu-@ru32k%4hIq;O&ANftWG@a-q7nQ2j}~Tv{B)%3Xxx zEsHGTI35Z&VjfBO`zVZlH-Hm3gyUAZ@+WR%A|>I9w6dA5(u`_IlelDK4e%XTy5s3< zR5UQ5y7PdVYOB4@#}eMv#7K=7krnAWsOA*hLYuTi(Iss>AXE}ZUB%%->z|&itmJyp zGrAOQoIjNn)V6K}D+TL{!wJlb3q9e!X5{wu!v|E7fi!n?dv2`b3{rx;I6zu(U+Q#0 ztNS?WoDA7dYj+T#nIVz-$E!4hP34w~DxGYz%V1YweION9GKH- zEH2sT=x$11&sJMq5U+WAY4edvi{k|#Jl6q53l&JaX}}h+F#xQq%OEKA(OYUn;RdRl zhNkM#?5E?|if+YJWkpX~f@mNo1*eyhuXfclLM7< z_i~+7G;%13AzwyRuWzU{puJ*u5;X;ZvpBeOaRR2oQF5nytr4bk;sU_-E z>$jiU?Sr3I?mqg%i#zix^N-qh@8X-EpUvaz;3xUjKIBhJ`vbMX`A5HDYs(hH3I|vq z$}_0b*vgTDRS^IlNOfPtSF}a%Qik489zg_1_!_g7E^bpihhjml`#|az1Ac zcfx7$FJ8#Srb;^g(={C*wElY4AHBn43@%?kMtl72_N~yFtz>imPDd5z zO39=IDdv|Li#dXKUowjDuqKL;0FYo?3@fSBYOWpKC>b{>lQ47GvfR?VfUk4DPj))^ zFT+k+#!v$#JmRvM!q^4D7dlLf|9bDeY2PVPrX^(50ZubylF{ZS@h}jOK+fv#;zfj| z!zJ0-FWsI0Z2mK0;%OfVH)r(ZP51?9<@j&7Roy_m1=KB(?g%gWu;vJbV^wbv$EqG!nYMcFfhVAxYB>@Oj753F6%c|nz|B_!MoZoB>H+fNRc<^@>JzJMx~CJyoL zT`4H=T1g*_ASD16bw#aiaY~|%$XaDL?rp4OROL>c~jL74HX&{Xf3gK9~SnL zn%Si&j?Z1Ufd_4|Rw=0XwVXiS?iRWyx_#Y+b4txdhma}dxwINR%zzyEOVmemhEe@7 zF>zy3!niSGx?h&cPK~xjTI*pzC=paX>!T*0v57eujLyQyMHYuXuxikykxDocAg!d3 zEIzEO+QLt9s6r6=7*MDzJg0W37pAJg-~=u#8cu8?C<#L8}`Y5ED>Q-W(CP(dPm~~%3 zeu8bxmIN1+$)vdIT1f)xLrll$f;f@{gAaV$dQnuQo#vJ9u@Vn1WmK_J21Y~x9Tega z6sDLEKuhLy0{W1vMrdHpV(f@gR9GYrgKE$IU5ZNEeZDG(O*Dt7VknwlK96( z2nGIILW6lmn5qzA#wSx?!NnHbK~)EsY63hoeuc#mK}i=yDOsT>N5c+gifRPbFtAMq zXezAIIMW($d`R}O)|!)ZA^ROyhy5ycQy?Jt49xXLJ3Ke%496Nm^K!Js1;*A-}EU$jRvZKKQz1}Gz!0HhWg8W0|M=tQMXts70#X=1l%}v7{$tr>gXdK~bV%X4@ zOMRNNOwdJh1xeO_9qWW6oxubW7EVa5guzxdDzoW)Q~AHweyC*g!S+KTy8lTA#L`Ik z_qQJk%09?|m>BF**^+TpkZ(fclT^$?*kREGks5cSTuQpYlBE$h&>1w;j#_SOZ7`1t zXQqR9QVR@-;R^gvT{k3dijAgU;Zx2{e0ZV^to=RAh|i+|2T#-9-kKN~p`tR%bE-3O z1j=H$H7NPgKg7TQwpkb#*5GS&IYQW!%kiNq88M}{LyuYG!}uGG+MjOA!*(tlR>rbm z!AI<|s(C+wEL*(`_}L!8qB}glt3v+{4!{L*QZQBsDZdK_Xgm7t6}5%@*(v8|=6^8t<^1b%M<8i@uj zXwNTHd)vGFT|7bid~Swm>(VshC$$X0mjF^Je|i&ldl*QcZjRu?<%|@1S~_-XZRe6Xob*A7YH?Q z0!0GNjE5(eZxLQs?veM#V?ZazcvKj! ze`u{=c~kzQ9YHr&kgc+_Ukp@qicK03fT&$nkRJkc7M-a3bJ3 zZrYx_!@msifa{q&N*==_5Vup%G$Ljq5oQk>OyOAvx7YLIySRdiqXb+a9bO>n%?utC zOreu91Rc0R|Ar#=TfKb^3vODLm_C8-i!L>U%JFb!Jd_?8gpqYv{A9?7l!;!f0KLgG zUYVKMM^^9U5H@1sTqhRC%K%l-EfXL>;94tiU|HkWxKYD*ZWLkYmw}H?PqDf<9A2;$ zI}av)0Nh^;@oqBK9p6n%L0>}uPdgy9C;LCF?slq;J-m3l{r$#zXT6$T-NQF5)IV(O zKiz)5U!ertAoqW)wx3k1TR&ER+1OfNs5<|SH&Y&9={)Of?JuEMq*a~o@lowPUESPdS2L^6 z0sSuFtJb!6e%#&o?&*H@bbAxtpL^Bg4j@~7yxGyNFsQZ7)s1Hh)%xnQ)$a)1Znce8 zc4t^jp{ss)+F=s=TgCsc?Qh@?FNU$UO+V4K{RND2cRy79VPmheP_6E6>=7YPcDJ7` z%n+TZf!5Io>TPwj6{1=Y6lMfPh_L4vw8K)ZcUCvi7N%!QhUkTt3h(07zt~yC;oimZ zFJMT@s`;_0t71$Gs`BQ|jkV6!UT3fSWCNH1Uml~_qOG3sQeeqiy7TXAxJM2g6y^K4 zDSjbT7i%~h=fA-W>kTWHuO)YWfzmF-uLWWop=j)?Xd`B1t&~zE^@T|`Al#rjcEk#& z{GZ9eDn1rxi3pR7tZ-!kOSfhozuQ2Vt;@m5fbYH!!f$pemK`%SSVuN92T93v+p8N} zLm%eJ?FCKMAg8RLysRhM*%;dakN#!ZF81Q;@XLB_i-o+0Kix$T7&XScpQPtAqc3tgRGN{}ec z*IgleSK+}GdVrxCjZ;54e}x+qxz)zc+G>w)wOgy=1_(K>RpUX*lKSlX2*?i%cQE>7W{*X!f(Sz0{^MK5a49an585usnoDAG>zmI9?x&(n~zY zgAo@^yW3sg*zI=pfE##`kQ+gOWd==y0b;>eI(Oi@{&MORI-)4WMA5A|_s$M(v^i*; zC1KE-p9yMiMe;7tGCK%XMSg@EFS6oYf@VVqOl|TYB4_v*!zeU}IFQ)Q^+SQosf{KI z-f@)w*Un5VDuXi`4_<+I#P*`y5<}u&uW(xrt0NFnkXhhNPNYz4H%1=v6ADgiL9ox8(a4iG&!5#RE>*=>S0<5vaaO`BwS)9mhQNY zl}#x0HJo(uVdy_s-+ucoObVTU2cYdo?e)%+jjhi7OohKcRD)w>|0~tX67Fy?W8#YO=Gfv{$gMEIo##1RE7(T7buS(cakr3 z?4W21xS8oYB|!8?tA%JMhj$)Tzg1aM_KlY212nLOUNEYY!z17TF*c`Fm4i#0#N8=* zvZM6@gxQdBg<1_=$_~FNJ@(a<3#FzZ**b#TAHu;m8%uqhI=Wqs!h_mP9MeeZNZXkpv>;~Aaoq|l8AW-V8 zBOFh1fkz>R3+-5XEoNrsr?wo4{s!aE>fT-lwj!8gQgTl^oS&bYdH>6dus^ay@dyP= z6lpFWJpTuqOf+MZquPrn{&!DO|7ie*>HD7s;C~u`|7igJKm&09OkY>yN#Gi#Jx-1e_arqr)k}VY z1FE^0r4eouM_tez{cqB?8W*l%@7TwcXPj^0gbA9$GT5s9ywClyu{PbzlJ((`DJ|T3 zNE1bXgj3ti$8NVroxfi7PWOjtld-iM_5bHv18@pk_3s<>w;$Z+M;P(9w;yr; z_hR|ax9=0jV845EKbg|4+agQyY9P`%M$O}zNJ$mM1?!t1twY1$5%XF|Xg5~EI`gf3 ztjm|j;q!+_@QNl{8QPZpcsLLC(0l|`u61;bzX=g^BGhRJotPRNxyTa|2Yl#MFy5&# zPCE#THkg}yXbr7N0K+%1QIFh`#(;E^fU{1_%lT0sTHrIp#vR1!)XajjdZ-X_DEnm9 ztHe&;)TEZl8q&SEK)Z*>vT=Tcm@HnmQB5O4ON&43sXGZ$*g`}RM`^qGG?|uw^xJu0 z**5G1S=#|=3VPZ^qP;eBnChIC-R)iu&8Vtll~|DFg_hfpnv0XLKrDu3<#CJRjFPI3 z#ARfAr`!2A-~(}QL&D}h5^#|#Ch)-Wevi=s@xK=aFZ9yk>SPi#BcMo&3zOEi_Hpdc98fmPy3Dq9~K3_ zW5I8Wk_ZGo(*i5Ynq(rTO8?v}T8s$mHjXHPnhgnWLEI9?a=`eAWh6o{C27DK)4)Vy zB9Vl zA#6SjGK577w+s=JAPA-6$!i5|0;aIPRy5ec_eMY`(}o0Nq;eUXCKPuy%h}Zgv|0t# zE1~)^s@+Tc&pXCXlemwu3@HWCwrsNh*I~T3G1f6+gstQLn?7##ez7BGV_IGaTFF&X_!tqbLT@*AGhs#aJ+X!osjoRb9x7_#LMmQ zg%stlz}pXSK{Cbo;qzq&e1MM`${0HlW?^p6h*vy&w(*xXPhJ!pvq7a+);Oh zDrr@&M;%YvHK1BHKjeiUtoRP#g{vWaBF6$UHH~^M|H=W}Y>T9tQCWBThNHPoZ6ncK ztlSfP__kB`0-dvq%Xbki|G=%Lkw~DjhB=vz*Z)ZyxjMb26B`#y>)?ery?ik31B*J* z#fJTM6D`|3y{$m91h27Z$;BQy%R;69ygG-2`I|{$d{gaS_6SrveQ#><(7Xw#XC#ee zyPg!K=9_#%Xe#$eK(Hd-TvU+D#e1`bk0~k+o@zakmzJ)536SF37r$9rOd~NVF`qbh zPjBz|N{MGxkt5%}U#ggn`fEB4-Nc?977#~`lm36SY7-m=za=^<-)=h6R>W&K_y#69 zLcqo|TL-C+VFT^M4H5sxP{`2PXy%S{Jr?h}TXPw(f!m*B=wSzzj&!fLY*zQyurz}y zNp9Y(cO-EUspKf?J>_N;(~ov|lYgW_l2qqpR~jeAxWh7r-#1*uqAr>a-&S()7c?Cu z>xPT7DIJj0I{dvJvnWXBnC`u4A__LuPqs4F)LK}C?cC6;?JPbFv3tUJXgf$J6fNbQ zTgZyoG;on(07x`KN|T$IK;)X&BOIQ?dfO^MV;mixPIB)}Sh=A&td_33>v{%mPl*tL zze^mkMej`qff=$vD3z_OTs!j^4N&LR)JO%7k+gcdUV%^rH@qzo#QEthA?MZ3Rp#utiT`8*t3U%_^KIx*6ynwQ9mDU~CqF zlgmzayOGyAu0_)N)3=t$6^(6=MQ1w}HmmKFYbO+n zeq%g0CT~I6qPKcNVcI_zf@&Qhrjv1k;{bS#a{y^lMlDJtZsFTvh;M9l!VFK3(~?>Z zEAFK^(6!}DuJpC#3&l$o3GaMa1KAT+(XBSH-cYwX2$l%vo#_lraX5~)=IhS_iY;Q^Y zd875w02lS}B%_NJa;r*HjL*H?<^S0xKcz)}0YG0)(C(Q_UDlHqG}-&s1}-yjQAF4M zJDSCk*=Z3M{NeA`mKQ$^*bM&jVq{T@Kuy5bfLbtC{GC-IC{YrR>V`tAo3TeNJrTJO zBxEMgZv8;#%B*)fB8XKeZZK)n9H&fq&cu5KYy|*tC90mDPM#fnoNPoc+O3wvB}Ei1 z>8(&+!#xUSaE%roN@rU{8eTBagBu(e9k;L))*Z-|=Yj#J zFsvBW6Pzr0rJ@T&LZ$~BcRa$$8eA3Oe4xW03}swhbY=?9t0`g<{7-oC4U#IabSB8W zoGl|E_Hy{S_#u*yzrs-?m95?=qeA{p@!=3s6?^J z{*w<&%!dknDtS@k&+D~>_svJAKM}nAF*rxZr$2$UTv#jV3_N`R$;MUZBKz`_Q@XYL zt);rcP%&}gk6+I#yqOl>423bZ7>s&yet}E%nWkSO{ZqD70&RW}o3jNg19Cn1umqAl zOrCA5eEb2X=$9Z?$xw7Yrv$WCDF#j03~+iH-(=wPvJ%sZ@qc zGtO|mH{zuVrRyWg_WV0@U;{ar5}Ti6=Qs9-@4JSxyJezQQ8cw0;T@CcrUPbuDoQ+vxzxRrB=`eonmhY!5l*FR|!(Q0wvXK_I@((ynglr~H zI23z=B~mm?Cw!`!@a>!S&fX(ya-05f2MLbvQLjURb=KZ5?ak zKHQRAe=U)s5HMBuc#fapqTuJz$Z`uy)wl z@h-`r9f21*R~c2bJ808cBYAquvxE14x(EG1BY5o-qoSheS~Jx>D#4gvBF4jPK^vc9 zeHz*JKKV3TUS1rO^^_@ZC;j3;lp)wD%o}tn-@3>C|EYy+IIZ^-^`r)E=lf)wVhB>9 zWu6D?+W1PiwD3fXoHh}Ga%VTM<*o61?Wp}+8;GAPn&8&@cZob^3E)L zgP4(yOJRl=_i`R4X@iUTxS$p1twI^OFX5Go`;PLjOYz36N$49G62P@g@_71-A!JQQr zSzHp0A2*uOp{_fVOc}2t}yTeJ}5Gznw-ELT*iv~5CR~Hqf4`$Ik zk`zLpl>sa2H5g=@*Zw>W)}%H#%7vPufwP|vbO($_DTIApQC=baoTLmYYCn)5CVY{q zjTDmzd#I-Io>{%9+k|cALd_F7sT6xe8d)K$TbmI1a|=xG#Nv74snmR@_tX@wVjY{; zTMQ6et@N+jqaU|-#1k{ir?`ZeS0t`Zb#sjf$tTxE|0N=ao4Gl6YW=t^`R#AwHZHVw z#rMR~lT5hE9cvtV^#yC)F% z1B8!LAlOdd2!yeL8X$a}0^uw;XtoGLEVjz*xCoBzU!Kt0FQ!-Jx#TA{g$x2?HEulB z1pqK>Wsdp~kE1xp!|Ud>e?JcoxESi>kuC3(dneQ>n5C-;A&vpJQ!nl?W&5F77aI?+d`> zD1z`_vo7k$WI0ufz^o02iHifx%1EPmEnKdCCl1$X-94cYg{~I&=RY zF=W*=irH;4!17$(0E?a%mIFd9+7S+*zXp=N`o&hSb`uO zi~DQxCmM^oJ<&krlbjWm1v_AH`q!hU(e55a`w6h`21^$v-@hl zEV8>7yK(<@p{@?l*Z3FiR}HG{U;`%a);>pQ9f0cSx`X_QTiJt>*hhXtU4Q8dl)76M zX!4A?F%51=jlO@hJ-hRGw*7c#_6YwyevI7|2r2Pe+fu-$po)yAE_}E!7kaN|M8Pt~ zXwEdjFZGG2Fk2iF36dNwY{&$QRk2bfEM=M`T7jwncCKL0ao#jt;4)uHj>V=v6v4B~ zoj4k~E~{KkGtfoeErmd9*e~JSMu~BF?ur!ed_M=BI1RQ|yXKz0ED z@}j|_p!;%zepX^Mx3axhVLTq=j%7K$j74?a;KgYRwI+hrMd*H0LigJ^EuO8eYUrLE zf^a@k=DHszW9Ng5@IB=M@M13HIslo?t5D4rI8*>EqiDboVkDFGFwSh^5$9n)SnerV zN-dfNrrr+fT4hB*;;YI`q^SP6ix3(BBVjhOCWhPlg~>tX8CKyd&o*^qoDEiGlq&1Q zL3nSzDQ1F1X%H-U5_CFcOb?$s;o z2s*zRFfZK*kYSX3*uM!hPRvkLLG_0{Pza3i?Q}4lPa_mv$9~K4>LrV=Pr&R#Cjs$$ z4i zNEJcSdP~Ir*ATt94NtkEYU?J-2irbSYoVNNUEe$8{h6oR;oG%J^Z_5pVZxAx&E#wRvR#dF}SDqZMhsT3TW<{}7~43E0U zZ|e$G8|)Jha=O;ERRWY0Dlozl-E+CDs=tRz@&HHzHWA7`kZ~JDb$<&A7u@5JGCdWHx6Uatyj00^9K+f!SuQmXP>RF3jSjvj&97 zTH-D$OP062MVN`$C_m|CurXL47lB&?`YF>~76M|_K7@-)E zjppJtI7>=8Fq!FF9+ZT9UNGZwIq#AQE)|(*HY+EJO;IS3ImnT9XF-kVk}CfRLSXgP zWZApayX!zVfLbZFX)Ef=h3-;X_RN z*g?Y+qic7?s3c+)`2yY_h+!dLluqpz;vKP=Rj5!SV8tRj`N)|8l)4Vk&E=|sM#3Do zZE8MZ4a^e!v9gZG7CYww7ogxxm|!&v2Q_$EVU_JpD)q)zrO~Uvh^XR8?p!7B*^$~8MSsfO8BFRCsCMd>fWwr~H5rhD&B4}M3_}tL z2qk5x)sc*&5k(xrL8+@>k6%GaM*x&L7b+N^5!5SjQa(i zcqu9@y9QSu%d9r|QW9Z_*}CdlFfbfLM7!!Rh=Jtlj|>g0kSIs_0epOQP=0fHSeYQ+ zpQ#v20Zb$g6png`K7p?S#%oE>VmX#ZW+*u ztlepkoo3G5(n+Ts(Uk`tCD& z2mJgcuIT;a%YQuFe}?;rpWv%(rUV=iPiFumx>O3223uU!4ypM{oEx1u2r-KQ*)^pl zc&4x{T0rB3$mA0N zQQ;}NO^xJ`6>I>+iCLbWR^DqY&DCKk3ei1mU`x=^ott`8Qub~FgE6F(h;&gA)$npU z|DD6eX~8lFV-Rr=OjZ3Y_?OjwHk+21;C=%WC|_RBmG^%wgp4ceoh|NAFc}3u^}FX- zmd5JhyZ)h>$wRD=pW%YkMD;cIUEQ>xTC28}c3NYh+Ax{MBFJQ&y|4BT_n+)N7x8If zbx^hg@eZ{9@mZd=zUz)hIDoqqZlm#IzH-0)yZkNE|GXP?K21#l=O$xWNqT zVEG6tzds)5a?BIiiGX{1mDXP@w$sVgWos}R9KsD%?Z94tW>1hdW&l5}dvz$#khfiY z2)QK=+h@-6@zwLu)2pdwJrBv879}?rC5FKGZ}Ad43e0j@`WIIrQg$U<#nyb;Fs&6( zMP8sz8|%Js{^jSV0itfyfPW9baZ9YO+bT}6tHOc#rvbf(gR}P^Agt=o{d0XCV}&!_ z{qEbWjcXTqZ~<94aTFYvc!0XR>%+_PQ(HR!)mnOci*c_>#^Xd-y^Ae>sxKLedy)ecYPJ zAbN*nDNa5U;lgfyaV2TSz*bAygZmqw zWPiYZi0lbgtI-HA1MEI*oJivm*ybaD3U;%WgU>9u8({ABt)?yy2( z^lLK7j|VuJ)605x$EYX|x$Sw9wdH)*zSX$PmEauSc6SI>D)jMJ5%Rh$FlSgxiT-9k4yU6&m21`L)1YV^0<=DQ~^pRFw{eEzrp{xAQ!`A>iIm;d_Dzxwa3v(A64 S|Jz^w`lF9N`ts@5PyYv%osr4_ From d2904ae1e1ebd79c7b8224aa31bd5aec8d9575a4 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Tue, 10 Nov 2015 09:57:10 +0100 Subject: [PATCH 071/193] Added composer.phar into .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 4cda1c1..a3f78a6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ vendor/ bin/ -composer.lock \ No newline at end of file +composer.lock +composer.phar \ No newline at end of file From 6ae62cbb6bd19e003b8c1490d6071449c75da27b Mon Sep 17 00:00:00 2001 From: Borales Date: Wed, 11 Nov 2015 21:53:15 +0100 Subject: [PATCH 072/193] Added phpUnit tests --- .../Resources/translations/difference.uk.yml | 2 +- .../PHPHumanizer/Tests/CollectionTest.php | 7 +++++ .../Coduo/PHPHumanizer/Tests/DateTimeTest.php | 29 +++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml index 68508e3..58b6daf 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml @@ -12,7 +12,7 @@ hour: future: "через %count% годину|через %count% години|через %count% годин" day: past: "%count% день тому|%count% дні тому|%count% днів тому" - future: "через %count% день|через %count% дни|через %count% днів" + future: "через %count% день|через %count% дні|через %count% днів" week: past: "%count% тиждень тому|%count% тижні тому|%count% тижнів тому" future: "через %count% тиждень|через %count% тижні|через %count% тижнів" diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php index ec79772..adb5b53 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php @@ -57,6 +57,13 @@ public function oxfordCollectionProvider() array(array("Michal", "Norbert", "Lukasz"), 2, 'id', 'Michal, Norbert, dan 1 lainnya'), array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'id', 'Michal, Norbert, dan 2 lainnya'), array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'id', 'Michal, Norbert, Lukasz, dan Pawel'), + + // Ukrainian + array(array("Michal"), null, 'uk', 'Michal'), + array(array("Michal", "Norbert"), null, 'uk', 'Michal та Norbert'), + array(array("Michal", "Norbert", "Lukasz"), 2, 'uk', 'Michal, Norbert і ще 1'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'uk', 'Michal, Norbert і ще 2'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'uk', 'Michal, Norbert, Lukasz та Pawel'), ); } } diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php index 2835a80..5b1d83e 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php @@ -174,6 +174,25 @@ public function humanizeDataProvider() array("2014-05-01", "2014-04-01", 'hace 1 mes', 'es'), array("2015-05-01", "2014-04-01", 'hace 1 año', 'es'), array("2014-05-01", "2016-04-01", 'dentro de 2 años', 'es'), + + // Ukrainian + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'зараз', 'uk'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", 'через 5 секунд', 'uk'), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 хвилину тому', 'uk'), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 хвилин тому', 'uk'), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", 'через 15 хвилин', 'uk'), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", 'через 1 годину', 'uk'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", 'через 2 години', 'uk'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 годину тому', 'uk'), + array("2014-04-26", "2014-04-25", '1 день тому', 'uk'), + array("2014-04-26", "2014-04-24", '2 дні тому', 'uk'), + array("2014-04-26", "2014-04-28", 'через 2 дні', 'uk'), + array("2014-04-01", "2014-04-15", 'через 2 тижні', 'uk'), + array("2014-04-15", "2014-04-07", '1 тиждень тому', 'uk'), + array("2014-01-01", "2014-04-01", 'через 3 місяці', 'uk'), + array("2014-05-01", "2014-04-01", '1 місяць тому', 'uk'), + array("2015-05-01", "2014-04-01", '1 рік тому', 'uk'), + array("2014-05-01", "2016-04-01", 'через 2 роки', 'uk'), ); } @@ -322,6 +341,16 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-28 23:00:00", 'dentro de 2 días, 10 horas', 'es'), array("2014-04-26 13:00:00", "2014-04-25 11:20:00", 'hace 1 día, 1 hora, 40 minutos', 'es'), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", 'dentro de 2 años, 1 día', 'es'), + + // Ukrainian + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 хвилина, 45 секунд тому', 'uk'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 година, 40 хвилин тому', 'uk'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", 'через 1 день, 15 хвилин', 'uk'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", 'через 7 днів, 2 години', 'uk'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", 'через 1 рік, 2 дні, 4 години', 'uk'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", 'через 2 дні, 10 годин', 'uk'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 день, 1 година, 40 хвилин тому', 'uk'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", 'через 2 роки, 1 день', 'uk'), ); } } From a68dc7326b1991161e423812d454bf51f4c15d5e Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Wed, 11 Nov 2015 22:05:48 +0100 Subject: [PATCH 073/193] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 209fe80..d632d9d 100644 --- a/README.md +++ b/README.md @@ -237,6 +237,7 @@ Currently we support following languages: * [Indonesian] (src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml) * [Chinese Simplified] (src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml) * [Spanish] (src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml) +* [Ukrainian] (src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml) # Credits From 586674beb69e1c21b3ad67a81ff4f088c0d7bdd9 Mon Sep 17 00:00:00 2001 From: Max Roeleveld Date: Thu, 12 Nov 2015 21:27:14 +0100 Subject: [PATCH 074/193] Added example for localized ordinalisation --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d632d9d..656d560 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ echo Number::ordinalize(0); // "0th" echo Number::ordinalize(1); // "1st" echo Number::ordinalize(2); // "2nd" echo Number::ordinalize(23); // "23rd" -echo Number::ordinalize(1002); // "1002nd" +echo Number::ordinalize(1002, 'nl'); // "1002e" echo Number::ordinalize(-111); // "-111th" ``` @@ -88,7 +88,7 @@ echo Number::ordinal(1); // "st" echo Number::ordinal(2); // "nd" echo Number::ordinal(23); // "rd" echo Number::ordinal(1002); // "nd" -echo Number::ordinal(-111); // "th" +echo Number::ordinal(-111, 'nl'); // "e" ``` **Roman numbers** From 0c377f003b8599bf31ff0f1c9c4050873dd4363e Mon Sep 17 00:00:00 2001 From: Tomasz Kowalczyk Date: Thu, 19 Nov 2015 13:28:40 +0100 Subject: [PATCH 075/193] introduced dependency on thunderer/shortcode@~0.5, added shortcode removal utilities --- composer.json | 3 +- src/Coduo/PHPHumanizer/String.php | 25 +++++++-- .../String/ShortcodeProcessor.php | 55 +++++++++++++++++++ tests/Coduo/PHPHumanizer/Tests/StringTest.php | 47 ++++++++++++++-- 4 files changed, 119 insertions(+), 11 deletions(-) create mode 100644 src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php diff --git a/composer.json b/composer.json index 6ee9669..3491ff5 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,8 @@ "symfony/intl": "~2.3", "symfony/config": "~2.3", "symfony/translation": "~2.3", - "symfony/yaml": "~2.3" + "symfony/yaml": "~2.3", + "thunderer/shortcode": "~0.5" }, "require-dev": { "phpspec/phpspec": "2.0.*", diff --git a/src/Coduo/PHPHumanizer/String.php b/src/Coduo/PHPHumanizer/String.php index 70983d3..5e6d6b3 100644 --- a/src/Coduo/PHPHumanizer/String.php +++ b/src/Coduo/PHPHumanizer/String.php @@ -3,6 +3,7 @@ namespace Coduo\PHPHumanizer; use Coduo\PHPHumanizer\String\Humanize; +use Coduo\PHPHumanizer\String\ShortcodeProcessor; use Coduo\PHPHumanizer\String\TextTruncate; use Coduo\PHPHumanizer\String\HtmlTruncate; use Coduo\PHPHumanizer\String\WordBreakpoint; @@ -14,7 +15,7 @@ class String * @param bool|true $capitalize * @param string $separator * @param array $forbiddenWords - * + * * @return string */ public static function humanize($text, $capitalize = true, $separator = '_', array $forbiddenWords = array()) @@ -26,13 +27,13 @@ public static function humanize($text, $capitalize = true, $separator = '_', arr * @param $text * @param $charactersCount * @param string $append - * + * * @return string */ public static function truncate($text, $charactersCount, $append = '') { $truncate = new TextTruncate(new WordBreakpoint(), $append); - + return $truncate->truncate($text, $charactersCount); } @@ -41,13 +42,27 @@ public static function truncate($text, $charactersCount, $append = '') * @param $charactersCount * @param string $allowedTags * @param string $append - * + * * @return string */ public static function truncateHtml($text, $charactersCount, $allowedTags = '', $append = '') { $truncate = new HtmlTruncate(new WordBreakpoint(), $allowedTags, $append); - + return $truncate->truncate($text, $charactersCount); } + + public static function removeShortcodes($text) + { + $processor = new ShortcodeProcessor(); + + return $processor->removeShortcodes($text); + } + + public static function removeShortcodeTags($text) + { + $processor = new ShortcodeProcessor(); + + return $processor->removeShortcodeTags($text); + } } diff --git a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php new file mode 100644 index 0000000..51aa18c --- /dev/null +++ b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php @@ -0,0 +1,55 @@ +createShortcodeProcessor($nullHandler)->process($text); + } + + /** + * Removes only shortcode tags from given text (leaves their content as it is) + * + * @param string $text + * + * @return string + */ + public function removeShortcodeTags($text) + { + $contentHandler = function(ShortcodeInterface $s) { + return $s->getContent(); + }; + + return $this->createShortcodeProcessor($contentHandler)->process($text); + } + + private function createShortcodeProcessor($defaultHandler) + { + $handlers = new HandlerContainer(); + $handlers->setDefault($defaultHandler); + + return new Processor(new RegularParser(), $handlers); + } +} diff --git a/tests/Coduo/PHPHumanizer/Tests/StringTest.php b/tests/Coduo/PHPHumanizer/Tests/StringTest.php index 040e8d1..4fe4fdb 100644 --- a/tests/Coduo/PHPHumanizer/Tests/StringTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/StringTest.php @@ -49,7 +49,44 @@ function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_ } /** + * @dataProvider removeAllShortcodesProvider * + * @param $text + * @param $expected + */ + function test_remove_all_shortcodes_from_text($text, $expected) + { + $this->assertEquals($expected, String::removeShortcodes($text)); + } + + /** + * @dataProvider removeShortcodeTagsProvider + * + * @param $text + * @param $expected + */ + function test_remove_only_shortcode_tags_from_text($text, $expected) + { + $this->assertEquals($expected, String::removeShortcodeTags($text)); + } + + public function removeAllShortcodesProvider() + { + return array( + array('some [text] containing [shortcodes /] and [stuff]with[/stuff] content', 'some containing and content'), + array('some [text] containing [shortcodes /] and [stuff]with[/stuff] content [/text]', 'some '), + ); + } + + public function removeShortcodeTagsProvider() + { + return array( + array('some [text] containing [shortcodes /] and [stuff]with[/stuff] content', 'some containing and with content'), + array('some [text] containing [shortcodes /] and [stuff]with[/stuff] content [/text]', 'some containing and with content '), + ); + } + + /** * @return array */ public function humanizeStringProvider() @@ -73,7 +110,7 @@ public function truncateStringProvider() { $longText = 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.'; $shortText = 'Short text'; - + return array( array($longText, 'Lorem', 2), array($longText, 'Lorem ipsum...', 10, '...'), @@ -93,7 +130,7 @@ public function truncateStringProvider() array($shortText, "Short text", 10, '...') ); } - + /** * * @return array @@ -101,11 +138,11 @@ public function truncateStringProvider() public function truncateHtmlStringProvider() { $text = '

HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create web pages.[1] Web browsers can read HTML files and render them into visible or audible web pages. HTML describes the structure of a website semantically along with cues for presentation, making it a markup language, rather than a programming language.

'; - + return array( - array($text, 3, '', "HyperText"), + array($text, 3, '', "HyperText"), array($text, 12, '', "HyperText Markup"), - array($text, 30, '', "HyperText Markup Language, commonly"), + array($text, 30, '', "HyperText Markup Language, commonly"), array($text, 50, '', "HyperText Markup Language, commonly referred to as"), array($text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup'), array($text, 100,'', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'), From e9087c8667ca77b707eee1c9c422b3cffaac6881 Mon Sep 17 00:00:00 2001 From: Tomasz Kowalczyk Date: Thu, 19 Nov 2015 22:22:04 +0100 Subject: [PATCH 076/193] removed empty constructor from ShortcodeProcessor --- src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php index 51aa18c..ead9472 100644 --- a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php +++ b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php @@ -9,10 +9,6 @@ class ShortcodeProcessor { - public function __construct() - { - } - /** * Removes all shortcodes from given text * From c995b2c6e31224d8e751c05359d24fb3176a1b12 Mon Sep 17 00:00:00 2001 From: Enrico Date: Fri, 20 Nov 2015 18:10:53 +0100 Subject: [PATCH 077/193] fix german translation --- .../Resources/translations/difference.de.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml index 8585f99..46fa38d 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml @@ -27,9 +27,9 @@ compound: second: "{1} %count% Sekunde|[2,Inf] %count% Sekunden" minute: "{1} %count% Minute|[2,Inf] %count% Minuten" hour: "{1} %count% Stunde|[2,Inf] %count% Stunden" - day: "{1} %count% Tag|[2,Inf] %count% Tage" + day: "{1} %count% Tag|[2,Inf] %count% Tagen" week: "{1} %count% Woche|[2,Inf] %count% Wochen" - month: "{1} %count% Monat|[2,Inf] %count% Monate" - year: "{1} %count% Jahr|[2,Inf] %count% Jahre" - past: "%value% vor" - future: "%value% ab jetzt" + month: "{1} %count% Monat|[2,Inf] %count% Monaten" + year: "{1} %count% Jahr|[2,Inf] %count% Jahren" + past: "vor %value%" + future: "in %value%" From ecae2fa1da5f1fe7c9c58214b2872097be304a4d Mon Sep 17 00:00:00 2001 From: Enrico Date: Fri, 20 Nov 2015 18:14:04 +0100 Subject: [PATCH 078/193] change tests to new translation --- tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php index 5b1d83e..02d7c5f 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php @@ -233,14 +233,14 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 lata, 1 dzień od teraz', 'pl'), // German - array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 Minute, 45 Sekunden vor', 'de'), - array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 Stunde, 40 Minuten vor', 'de'), - array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 Tag, 15 Minuten ab jetzt', 'de'), - array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 Tage, 2 Stunden ab jetzt', 'de'), - array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 Jahr, 2 Tage, 4 Stunden ab jetzt', 'de'), - array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 Tage, 10 Stunden ab jetzt', 'de'), - array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 Tag, 1 Stunde, 40 Minuten vor', 'de'), - array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 Jahre, 1 Tag ab jetzt', 'de'), + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", 'vor 1 Minute, 45 Sekunden', 'de'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", 'vor 1 Stunde, 40 Minuten', 'de'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", 'in 1 Tag, 15 Minuten', 'de'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", 'in 7 Tagen, 2 Stunden', 'de'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", 'in 1 Jahr, 2 Tagen, 4 Stunden', 'de'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", 'in 2 Tagen, 10 Stunden', 'de'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", 'vor 1 Tag, 1 Stunde, 40 Minuten', 'de'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", 'in 2 Jahren, 1 Tag', 'de'), // Turkish array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 dakika, 45 saniye önce', 'tr'), From 867200e0be5072b02e3b0a99062e82d58921e32e Mon Sep 17 00:00:00 2001 From: Percy Mamedy Date: Tue, 1 Dec 2015 11:55:16 +0400 Subject: [PATCH 079/193] Oxford french translation --- src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.yml new file mode 100644 index 0000000..d44e036 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.yml @@ -0,0 +1,3 @@ +only_two: "%first% et %second%" +comma_separated: "%list% et %last%" +comma_separated_with_limit: "{1} %list% et 1 autre|[2,Inf] %list% et %count% autres" \ No newline at end of file From 6e96f1b3155688b3f27f51669e5720e31642254a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoffer=20Br=C3=B8ndum?= Date: Tue, 1 Dec 2015 21:23:51 +0100 Subject: [PATCH 080/193] Updated the data providers to include danish. --- .../Coduo/PHPHumanizer/Tests/DateTimeTest.php | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php index 02d7c5f..8de8a95 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php @@ -193,6 +193,25 @@ public function humanizeDataProvider() array("2014-05-01", "2014-04-01", '1 місяць тому', 'uk'), array("2015-05-01", "2014-04-01", '1 рік тому', 'uk'), array("2014-05-01", "2016-04-01", 'через 2 роки', 'uk'), + + // Danish + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", "lige nu", "da"), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", "5 sekunder fra nu", "da"), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", "1 minut siden", "da"), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", "15 minutter siden", "da"), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", "15 minutter fra nu", "da"), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", "1 time fra nu", "da"), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", "2 timer fra nu", "da"), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", "1 time siden", "da"), + array("2014-04-26", "2014-04-25", "1 dag siden", "da"), + array("2014-04-26", "2014-04-24", "2 dage siden", "da"), + array("2014-04-26", "2014-04-28", "2 dage fra nu", "da"), + array("2014-04-01", "2014-04-15", "2 uger fra nu", "da"), + array("2014-04-15", "2014-04-07", "1 uge siden", "da"), + array("2014-01-01", "2014-04-01", "3 måneder fra nu", "da"), + array("2014-05-01", "2014-04-01", "1 måned siden", "da"), + array("2015-05-01", "2014-04-01", "1 år siden", "da"), + array("2014-05-01", "2016-04-01", "2 år fra nu", "da"), ); } @@ -351,6 +370,16 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-28 23:00:00", 'через 2 дні, 10 годин', 'uk'), array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 день, 1 година, 40 хвилин тому', 'uk'), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", 'через 2 роки, 1 день', 'uk'), + + // Danish + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", "1 minut, 45 sekunder siden", "da"), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", "1 time, 40 minutter siden", "da"), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", "1 dag, 15 minutter fra nu", "da"), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", "7 dage, 2 timer fra nu", "da"), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", "1 år, 2 dage, 4 timer fra nu", "da"), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", "2 dage, 10 timer fra nu", "da"), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", "1 dag, 1 time, 40 minutter siden", "da"), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", "2 år, 1 dag fra nu", "da"), ); } } From e3e8f0e1670cf3b546e0aa1bdb5a65c9a9f16cc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoffer=20Br=C3=B8ndum?= Date: Tue, 1 Dec 2015 21:34:05 +0100 Subject: [PATCH 081/193] Adding difference.da.yml with danish translations. --- .../Resources/translations/difference.da.yml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml new file mode 100644 index 0000000..de98b09 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] lige nu" + future: "[0,Inf] lige nu" +second: + past: "{1} %count% sekund siden|[2,Inf] %count% sekunder siden" + future: "{1} %count% sekund fra nu|[2,Inf] %count% sekunder fra nu" +minute: + past: "{1} %count% minut siden|[2,Inf] %count% minutter siden" + future: "{1} %count% minut fra nu|[2,Inf] %count% minutter fra nu" +hour: + past: "{1} %count% time siden|[2,Inf] %count% timer siden" + future: "{1} %count% time fra nu|[2,Inf] %count% timer fra nu" +day: + past: "{1} %count% dag siden|[2,Inf] %count% dage siden" + future: "{1} %count% dag fra nu|[2,Inf] %count% dage fra nu" +week: + past: "{1} %count% uge siden|[2,Inf] %count% uger siden" + future: "{1} %count% uge fra nu|[2,Inf] %count% uger fra nu" +month: + past: "{1} %count% måned siden|[2,Inf] %count% måneder siden" + future: "{1} %count% måned fra nu|[2,Inf] %count% måneder fra nu" +year: + past: "{1} %count% år siden|[2,Inf] %count% år siden" + future: "{1} %count% år fra nu|[2,Inf] %count% år fra nu" + +compound: + second: "{1} %count% sekund|[2,Inf] %count% sekunder" + minute: "{1} %count% minut|[2,Inf] %count% minutter" + hour: "{1} %count% time|[2,Inf] %count% timer" + day: "{1} %count% dag|[2,Inf] %count% dage" + week: "{1} %count% uge|[2,Inf] %count% uger" + month: "{1} %count% måned|[2,Inf] %count% måneder" + year: "{1} %count% år|[2,Inf] %count% år" + past: "%value% siden" + future: "%value% fra nu" From b7bced0010443bae7a6708249d626fcd92c3a72c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoffer=20Br=C3=B8ndum?= Date: Tue, 1 Dec 2015 21:40:14 +0100 Subject: [PATCH 082/193] Adding oxford.da.yml with danish translations. --- src/Coduo/PHPHumanizer/Resources/translations/oxford.da.yml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.da.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.da.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.da.yml new file mode 100644 index 0000000..ecf652e --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.da.yml @@ -0,0 +1,3 @@ +only_two: "%first% og %second%" +comma_separated: "%list%, og %last%" +comma_separated_with_limit: "{1} %list%, og 1 anden|[2,Inf] %list%, og %count% andre" From daa04e8f395e7e51b724f48b4d45161f3f199e36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoffer=20Br=C3=B8ndum?= Date: Tue, 1 Dec 2015 21:44:04 +0100 Subject: [PATCH 083/193] Updated the README.md file to include danish. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 656d560..2d3062e 100644 --- a/README.md +++ b/README.md @@ -238,6 +238,7 @@ Currently we support following languages: * [Chinese Simplified] (src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml) * [Spanish] (src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml) * [Ukrainian] (src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml) +* [Danish] (src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml) # Credits From cc07afac38acf9f59bcab72963b5cec66df764f1 Mon Sep 17 00:00:00 2001 From: Nantiwat Thongseng Date: Mon, 7 Dec 2015 18:41:39 +0700 Subject: [PATCH 084/193] add thai translation --- .../Resources/translations/difference.th.yml | 35 +++++++++++++++++++ .../Resources/translations/oxford.th.yml | 3 ++ .../PHPHumanizer/Tests/CollectionTest.php | 7 ++++ .../Coduo/PHPHumanizer/Tests/DateTimeTest.php | 29 +++++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.th.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml new file mode 100644 index 0000000..69f30e3 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] เมื่อสักครู่" + future: "[0,Inf] เร็วๆนี้" +second: + past: "[1,Inf] %count% วินาทีที่แล้ว" + future: "[1,Inf] อีก %count% วินาที" +minute: + past: "[1,Inf] %count% นาทีที่แล้ว" + future: "[1,Inf] อีก %count% นาที" +hour: + past: "[1,Inf] %count% ชั่วโมงที่แล้ว" + future: "[1,Inf] อีก %count% ชั่วโมง" +day: + past: "[1,Inf] %count% วันที่แล้ว" + future: "[1,Inf] อีก %count% วัน" +week: + past: "[1,Inf] %count% สัปดาห์ที่แล้ว" + future: "[1,Inf] อีก %count% สัปดาห์" +month: + past: "[1,Inf] %count% เดือนที่แล้ว" + future: "[1,Inf] อีก %count% เดือน" +year: + past: "[1,Inf] %count% ปีที่แล้ว" + future: "[1,Inf] อีก %count% ปี" + +compound: + second: "[1,Inf] %count% วินาที" + minute: "[1,Inf] %count% นาที" + hour: "[1,Inf] %count% ชั่วโมง" + day: "[1,Inf] %count% วัน" + week: "[1,Inf] %count% สัปดาห์" + month: "[1,Inf] %count% เดือน" + year: "[1,Inf] %count% ปี" + past: "%value%ที่แล้ว" + future: "อีก %value%" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.th.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.th.yml new file mode 100644 index 0000000..02dc12e --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.th.yml @@ -0,0 +1,3 @@ +only_two: "%first% และ %second%" +comma_separated: "%list% และ %last%" +comma_separated_with_limit: "{1} %list% และอีก 1|[2,Inf] %list% และอีก %count%" diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php index adb5b53..4a50b6b 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php @@ -64,6 +64,13 @@ public function oxfordCollectionProvider() array(array("Michal", "Norbert", "Lukasz"), 2, 'uk', 'Michal, Norbert і ще 1'), array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'uk', 'Michal, Norbert і ще 2'), array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'uk', 'Michal, Norbert, Lukasz та Pawel'), + + // Thai + array(array("Michal"), null, 'th', 'Michal'), + array(array("Michal", "Norbert"), null, 'th', 'Michal และ Norbert'), + array(array("Michal", "Norbert", "Lukasz"), 2, 'th', 'Michal, Norbert และอีก 1'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'th', 'Michal, Norbert และอีก 2'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'th', 'Michal, Norbert, Lukasz และ Pawel'), ); } } diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php index 8de8a95..256d8a8 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php @@ -212,6 +212,25 @@ public function humanizeDataProvider() array("2014-05-01", "2014-04-01", "1 måned siden", "da"), array("2015-05-01", "2014-04-01", "1 år siden", "da"), array("2014-05-01", "2016-04-01", "2 år fra nu", "da"), + + // Thai + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'เมื่อสักครู่', 'th'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", 'อีก 5 วินาที', 'th'), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 นาทีที่แล้ว', 'th'), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 นาทีที่แล้ว', 'th'), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", 'อีก 15 นาที', 'th'), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", 'อีก 1 ชั่วโมง', 'th'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", 'อีก 2 ชั่วโมง', 'th'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 ชั่วโมงที่แล้ว', 'th'), + array("2014-04-26", "2014-04-25", '1 วันที่แล้ว', 'th'), + array("2014-04-26", "2014-04-24", '2 วันที่แล้ว', 'th'), + array("2014-04-26", "2014-04-28", 'อีก 2 วัน', 'th'), + array("2014-04-01", "2014-04-15", 'อีก 2 สัปดาห์', 'th'), + array("2014-04-15", "2014-04-07", '1 สัปดาห์ที่แล้ว', 'th'), + array("2014-01-01", "2014-04-01", 'อีก 3 เดือน', 'th'), + array("2014-05-01", "2014-04-01", '1 เดือนที่แล้ว', 'th'), + array("2015-05-01", "2014-04-01", '1 ปีที่แล้ว', 'th'), + array("2014-05-01", "2016-04-01", 'อีก 2 ปี', 'th'), ); } @@ -380,6 +399,16 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-28 23:00:00", "2 dage, 10 timer fra nu", "da"), array("2014-04-26 13:00:00", "2014-04-25 11:20:00", "1 dag, 1 time, 40 minutter siden", "da"), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", "2 år, 1 dag fra nu", "da"), + + // Thai + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 นาที, 45 วินาทีที่แล้ว', 'th'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 ชั่วโมง, 40 นาทีที่แล้ว', 'th'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", 'อีก 1 วัน, 15 นาที', 'th'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", 'อีก 7 วัน, 2 ชั่วโมง', 'th'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", 'อีก 1 ปี, 2 วัน, 4 ชั่วโมง', 'th'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", 'อีก 2 วัน, 10 ชั่วโมง', 'th'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 วัน, 1 ชั่วโมง, 40 นาทีที่แล้ว', 'th'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", 'อีก 2 ปี, 1 วัน', 'th'), ); } } From cc2e2d7d72b22956c5fed1ff541fbc14c94e9751 Mon Sep 17 00:00:00 2001 From: Nantiwat Thongseng Date: Mon, 7 Dec 2015 19:29:46 +0700 Subject: [PATCH 085/193] update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2d3062e..424119b 100644 --- a/README.md +++ b/README.md @@ -239,6 +239,7 @@ Currently we support following languages: * [Spanish] (src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml) * [Ukrainian] (src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml) * [Danish] (src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml) +* [Thai] (src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml) # Credits From c3704d6cd929e676b1807e331631187bcea36ee6 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Thu, 10 Dec 2015 14:31:09 +0100 Subject: [PATCH 086/193] Added composer cache folder and move to new infrastructure --- .travis.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.travis.yml b/.travis.yml index 08dffdb..5713d80 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,11 @@ language: php +sudo: false + +cache: + directories: + - $HOME/.composer/cache + matrix: include: - php: 5.3 From 3f252ef1a717a841dac1316f835494ef82104cde Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Thu, 10 Dec 2015 14:38:14 +0100 Subject: [PATCH 087/193] Updated master branch alias --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 3491ff5..cca989b 100644 --- a/composer.json +++ b/composer.json @@ -36,7 +36,7 @@ }, "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.1-dev" } } } From 91cab52a30464b974c286178eb7906219ae515cb Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Thu, 10 Dec 2015 14:48:52 +0100 Subject: [PATCH 088/193] Renamed all facades in order to support php7 --- .travis.yml | 1 + README.md | 180 +++++++++--------- ...Collection.php => CollectionHumanizer.php} | 2 +- .../{DateTime.php => DateTimeHumanizer.php} | 2 +- .../{Number.php => NumberHumanizer.php} | 2 +- .../{String.php => StringHumanizer.php} | 2 +- ...onTest.php => CollectionHumanizerTest.php} | 6 +- ...TimeTest.php => DateTimeHumanizerTest.php} | 8 +- ...NumberTest.php => NumberHumanizerTest.php} | 34 ++-- ...StringTest.php => StringHumanizerTest.php} | 14 +- 10 files changed, 126 insertions(+), 125 deletions(-) rename src/Coduo/PHPHumanizer/{Collection.php => CollectionHumanizer.php} (94%) rename src/Coduo/PHPHumanizer/{DateTime.php => DateTimeHumanizer.php} (97%) rename src/Coduo/PHPHumanizer/{Number.php => NumberHumanizer.php} (98%) rename src/Coduo/PHPHumanizer/{String.php => StringHumanizer.php} (98%) rename tests/Coduo/PHPHumanizer/Tests/{CollectionTest.php => CollectionHumanizerTest.php} (94%) rename tests/Coduo/PHPHumanizer/Tests/{DateTimeTest.php => DateTimeHumanizerTest.php} (98%) rename tests/Coduo/PHPHumanizer/Tests/{NumberTest.php => NumberHumanizerTest.php} (86%) rename tests/Coduo/PHPHumanizer/Tests/{StringTest.php => StringHumanizerTest.php} (91%) diff --git a/.travis.yml b/.travis.yml index 5713d80..1f8207c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,7 @@ matrix: - php: 5.4 - php: 5.5 - php: 5.6 + - php: 7.0 - php: hhvm allow_failures: - env: DEPENDENCIES='low' diff --git a/README.md b/README.md index 424119b..c6a315b 100644 --- a/README.md +++ b/README.md @@ -23,11 +23,11 @@ composer require coduo/php-humanizer **Humanize** ```php -use Coduo\PHPHumanizer\String; +use Coduo\PHPHumanizer\StringHumanizer; -echo String::humanize('field_name'); // "Field Name" -echo String::humanize('user_id'); // "User" -echo String::humanize('field_name', false); // "field name" +echo StringHumanizer::humanize('field_name'); // "Field Name" +echo StringHumanizer::humanize('user_id'); // "User" +echo StringHumanizer::humanize('field_name', false); // "field name" ``` **Truncate** @@ -35,14 +35,14 @@ echo String::humanize('field_name', false); // "field name" Truncate string to word closest to a certain length ```php -use Coduo\PHPHumanizer\String; +use Coduo\PHPHumanizer\StringHumanizer; $text = 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.'; -echo String::truncate($text, 8); // "Lorem ipsum" -echo String::truncate($text, 8, '...'); // "Lorem ipsum..." -echo String::truncate($text, 2); // "Lorem" -echo String::truncate($text, strlen($text)); // "Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc." +echo StringHumanizer::truncate($text, 8); // "Lorem ipsum" +echo StringHumanizer::truncate($text, 8, '...'); // "Lorem ipsum..." +echo StringHumanizer::truncate($text, 2); // "Lorem" +echo StringHumanizer::truncate($text, strlen($text)); // "Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc." ``` @@ -51,14 +51,14 @@ echo String::truncate($text, strlen($text)); // "Lorem ipsum dolorem si amet, lo Truncate and HTML string to word closest to a certain length ```php -use Coduo\PHPHumanizer\String; +use Coduo\PHPHumanizer\StringHumanizer; $text = '

HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create web pages.[1] Web browsers can read HTML files and render them into visible or audible web pages. HTML describes the structure of a website semantically along with cues for presentation, making it a markup language, rather than a programming language.

'; -echo String::truncateHtml($text, 3); // "HyperText" -echo String::truncateHtml($text, 12, ''); // "HyperText Markup" -echo String::truncateHtml($text, 50, '', '...'); // "HyperText Markup Language, commonly referred to as..." -echo String::truncateHtml($text, 75, '', '...'); // 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...' +echo StringHumanizer::truncateHtml($text, 3); // "HyperText" +echo StringHumanizer::truncateHtml($text, 12, ''); // "HyperText Markup" +echo StringHumanizer::truncateHtml($text, 50, '', '...'); // "HyperText Markup Language, commonly referred to as..." +echo StringHumanizer::truncateHtml($text, 75, '', '...'); // 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...' ``` @@ -67,41 +67,41 @@ echo String::truncateHtml($text, 75, '', '...'); / **Ordinalize** ```php -use Coduo\PHPHumanizer\Number; +use Coduo\PHPHumanizer\NumberHumanizer; -echo Number::ordinalize(0); // "0th" -echo Number::ordinalize(1); // "1st" -echo Number::ordinalize(2); // "2nd" -echo Number::ordinalize(23); // "23rd" -echo Number::ordinalize(1002, 'nl'); // "1002e" -echo Number::ordinalize(-111); // "-111th" +echo NumberHumanizer::ordinalize(0); // "0th" +echo NumberHumanizer::ordinalize(1); // "1st" +echo NumberHumanizer::ordinalize(2); // "2nd" +echo NumberHumanizer::ordinalize(23); // "23rd" +echo NumberHumanizer::ordinalize(1002, 'nl'); // "1002e" +echo NumberHumanizer::ordinalize(-111); // "-111th" ``` **Ordinal** ```php -use Coduo\PHPHumanizer\Number; +use Coduo\PHPHumanizer\NumberHumanizer; -echo Number::ordinal(0); // "th" -echo Number::ordinal(1); // "st" -echo Number::ordinal(2); // "nd" -echo Number::ordinal(23); // "rd" -echo Number::ordinal(1002); // "nd" -echo Number::ordinal(-111, 'nl'); // "e" +echo NumberHumanizer::ordinal(0); // "th" +echo NumberHumanizer::ordinal(1); // "st" +echo NumberHumanizer::ordinal(2); // "nd" +echo NumberHumanizer::ordinal(23); // "rd" +echo NumberHumanizer::ordinal(1002); // "nd" +echo NumberHumanizer::ordinal(-111, 'nl'); // "e" ``` **Roman numbers** ```php -use Coduo\PHPHumanizer\Number; +use Coduo\PHPHumanizer\NumberHumanizer; -echo Number::toRoman(1); // "I" -echo Number::toRoman(5); // "V" -echo Number::toRoman(1300); // "MCCC" +echo NumberHumanizer::toRoman(1); // "I" +echo NumberHumanizer::toRoman(5); // "V" +echo NumberHumanizer::toRoman(1300); // "MCCC" -echo Number::fromRoman("MMMCMXCIX"); // 3999 -echo Number::fromRoman("V"); // 5 -echo Number::fromRoman("CXXV"); // 125 +echo NumberHumanizer::fromRoman("MMMCMXCIX"); // 3999 +echo NumberHumanizer::fromRoman("V"); // 5 +echo NumberHumanizer::fromRoman("CXXV"); // 125 ``` **Binary Suffix** @@ -109,66 +109,66 @@ echo Number::fromRoman("CXXV"); // 125 Convert a number of bytes in to the highest applicable data unit ```php -use Coduo\PHPHumanizer\Number; +use Coduo\PHPHumanizer\NumberHumanizer; -echo Number::binarySuffix(0); // "0 bytes" -echo Number::binarySuffix(1); // "1 bytes" -echo Number::binarySuffix(1024); // "1 kB" -echo Number::binarySuffix(1025); // "1 kB" -echo Number::binarySuffix(1536); // "1.5 kB" -echo Number::binarySuffix(1048576 * 5); // "5 MB" -echo Number::binarySuffix(1073741824 * 2); // "2 GB" -echo Number::binarySuffix(1099511627776 * 3); // "3 TB" -echo Number::binarySuffix(1325899906842624); // "1.18 PB" +echo NumberHumanizer::binarySuffix(0); // "0 bytes" +echo NumberHumanizer::binarySuffix(1); // "1 bytes" +echo NumberHumanizer::binarySuffix(1024); // "1 kB" +echo NumberHumanizer::binarySuffix(1025); // "1 kB" +echo NumberHumanizer::binarySuffix(1536); // "1.5 kB" +echo NumberHumanizer::binarySuffix(1048576 * 5); // "5 MB" +echo NumberHumanizer::binarySuffix(1073741824 * 2); // "2 GB" +echo NumberHumanizer::binarySuffix(1099511627776 * 3); // "3 TB" +echo NumberHumanizer::binarySuffix(1325899906842624); // "1.18 PB" ``` Number can be also formatted for specific locale ```php -use Coduo\PHPHumanizer\Number; +use Coduo\PHPHumanizer\NumberHumanizer; -echo Number::binarySuffix(1536, 'pl'); // "1,5 kB" +echo NumberHumanizer::binarySuffix(1536, 'pl'); // "1,5 kB" ``` Number can also be humanized with a specific number of decimal places with `preciseBinarySuffix($number, $precision, $locale = 'en')` The precision parameter must be between 0 and 3. ```php -use Coduo\PHPHumanizer\Number; +use Coduo\PHPHumanizer\NumberHumanizer; -echo Number::preciseBinarySuffix(1024, 2); // "1.00 kB" -echo Number::preciseBinarySuffix(1325899906842624, 3); // "1.178 PB" +echo NumberHumanizer::preciseBinarySuffix(1024, 2); // "1.00 kB" +echo NumberHumanizer::preciseBinarySuffix(1325899906842624, 3); // "1.178 PB" ``` This function also supports locale ```php -use Coduo\PHPHumanizer\Number; +use Coduo\PHPHumanizer\NumberHumanizer; -echo Number::preciseBinarySuffix(1325899906842624, 3, 'pl'); // "1,178 PB" +echo NumberHumanizer::preciseBinarySuffix(1325899906842624, 3, 'pl'); // "1,178 PB" ``` **Metric Suffix** ```php -use Coduo\PHPHumanizer\Number; +use Coduo\PHPHumanizer\NumberHumanizer; -echo Number::metricSuffix(-1); // "-1" -echo Number::metricSuffix(0); // "0" -echo Number::metricSuffix(1); // "1" -echo Number::metricSuffix(101); // "101" -echo Number::metricSuffix(1000); // "1k" -echo Number::metricSuffix(1240); // "1.2k" -echo Number::metricSuffix(1240000); // "1.24M" -echo Number::metricSuffix(3500000); // "3.5M" +echo NumberHumanizer::metricSuffix(-1); // "-1" +echo NumberHumanizer::metricSuffix(0); // "0" +echo NumberHumanizer::metricSuffix(1); // "1" +echo NumberHumanizer::metricSuffix(101); // "101" +echo NumberHumanizer::metricSuffix(1000); // "1k" +echo NumberHumanizer::metricSuffix(1240); // "1.2k" +echo NumberHumanizer::metricSuffix(1240000); // "1.24M" +echo NumberHumanizer::metricSuffix(3500000); // "3.5M" ``` Number can be also formatted for specific locale ```php -use Coduo\PHPHumanizer\Number; +use Coduo\PHPHumanizer\NumberHumanizer; -echo Number::metricSuffix(1240000, 'pl'); // "1,24M" +echo NumberHumanizer::metricSuffix(1240000, 'pl'); // "1,24M" ``` ## Collections @@ -176,11 +176,11 @@ echo Number::metricSuffix(1240000, 'pl'); // "1,24M" **Oxford** ```php -use Coduo\PHPHumanizer\Collection; +use Coduo\PHPHumanizer\CollectionHumanizer; -echo Collection::oxford(['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2); // "Michal, Norbert, and 2 others" -echo Collection::oxford(['Michal', 'Norbert', 'Lukasz'], 2); // "Michal, Norbert, and 1 other" -echo Collection::oxford(['Michal', 'Norbert']); // "Michal and Norbert" +echo CollectionHumanizer::oxford(['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2); // "Michal, Norbert, and 2 others" +echo CollectionHumanizer::oxford(['Michal', 'Norbert', 'Lukasz'], 2); // "Michal, Norbert, and 1 other" +echo CollectionHumanizer::oxford(['Michal', 'Norbert']); // "Michal and Norbert" ``` Oxford is using translator component, so you can use whatever string format you like. @@ -190,35 +190,35 @@ Oxford is using translator component, so you can use whatever string format you **Difference** ```php -use Coduo\PHPHumanizer\DateTime; - -echo DateTime::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:00:00")); // just now -echo DateTime::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:00:05")); // 5 seconds from now -echo DateTime::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:59:00")); // 1 minute ago -echo DateTime::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:45:00")); // 15 minutes ago -echo DateTime::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:15:00")); // 15 minutes from now -echo DateTime::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 14:00:00")); // 1 hour from now -echo DateTime::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 15:00:00")); // 2 hours from now -echo DateTime::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:00:00")); // 1 hour ago -echo DateTime::difference(new \DateTime("2014-04-26"), new \DateTime("2014-04-25")); // 1 day ago -echo DateTime::difference(new \DateTime("2014-04-26"), new \DateTime("2014-04-24")); // 2 days ago -echo DateTime::difference(new \DateTime("2014-04-26"), new \DateTime("2014-04-28")); // 2 days from now -echo DateTime::difference(new \DateTime("2014-04-01"), new \DateTime("2014-04-15")); // 2 weeks from now -echo DateTime::difference(new \DateTime("2014-04-15"), new \DateTime("2014-04-07")); // 1 week ago -echo DateTime::difference(new \DateTime("2014-01-01"), new \DateTime("2014-04-01")); // 3 months from now -echo DateTime::difference(new \DateTime("2014-05-01"), new \DateTime("2014-04-01")); // 1 month ago -echo DateTime::difference(new \DateTime("2015-05-01"), new \DateTime("2014-04-01")); // 1 year ago -echo DateTime::difference(new \DateTime("2014-05-01"), new \DateTime("2016-04-01")); // 2 years from now +use Coduo\PHPHumanizer\DateTimeHumanizer; + +echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:00:00")); // just now +echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:00:05")); // 5 seconds from now +echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:59:00")); // 1 minute ago +echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:45:00")); // 15 minutes ago +echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:15:00")); // 15 minutes from now +echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 14:00:00")); // 1 hour from now +echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 15:00:00")); // 2 hours from now +echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:00:00")); // 1 hour ago +echo DateTimeHumanizer::difference(new \DateTime("2014-04-26"), new \DateTime("2014-04-25")); // 1 day ago +echo DateTimeHumanizer::difference(new \DateTime("2014-04-26"), new \DateTime("2014-04-24")); // 2 days ago +echo DateTimeHumanizer::difference(new \DateTime("2014-04-26"), new \DateTime("2014-04-28")); // 2 days from now +echo DateTimeHumanizer::difference(new \DateTime("2014-04-01"), new \DateTime("2014-04-15")); // 2 weeks from now +echo DateTimeHumanizer::difference(new \DateTime("2014-04-15"), new \DateTime("2014-04-07")); // 1 week ago +echo DateTimeHumanizer::difference(new \DateTime("2014-01-01"), new \DateTime("2014-04-01")); // 3 months from now +echo DateTimeHumanizer::difference(new \DateTime("2014-05-01"), new \DateTime("2014-04-01")); // 1 month ago +echo DateTimeHumanizer::difference(new \DateTime("2015-05-01"), new \DateTime("2014-04-01")); // 1 year ago +echo DateTimeHumanizer::difference(new \DateTime("2014-05-01"), new \DateTime("2016-04-01")); // 2 years from now ``` **Precise difference** ```php -use Coduo\PHPHumanizer\DateTime; +use Coduo\PHPHumanizer\DateTimeHumanizer; -echo DateTime::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-25 11:20:00")); // 1 day, 1 hour, 40 minutes ago -echo DateTime::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2015-04-28 17:00:00")); // 1 year, 2 days, 4 hours from now -echo DateTime::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2016-04-27 13:00:00")); // 2 years, 1 day from now +echo DateTimeHumanizer::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-25 11:20:00")); // 1 day, 1 hour, 40 minutes ago +echo DateTimeHumanizer::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2015-04-28 17:00:00")); // 1 year, 2 days, 4 hours from now +echo DateTimeHumanizer::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2016-04-27 13:00:00")); // 2 years, 1 day from now ``` Currently we support following languages: diff --git a/src/Coduo/PHPHumanizer/Collection.php b/src/Coduo/PHPHumanizer/CollectionHumanizer.php similarity index 94% rename from src/Coduo/PHPHumanizer/Collection.php rename to src/Coduo/PHPHumanizer/CollectionHumanizer.php index 101e013..0f55792 100644 --- a/src/Coduo/PHPHumanizer/Collection.php +++ b/src/Coduo/PHPHumanizer/CollectionHumanizer.php @@ -6,7 +6,7 @@ use Coduo\PHPHumanizer\Collection\Oxford; use Coduo\PHPHumanizer\Translator\Builder; -class Collection +class CollectionHumanizer { public static function oxford($collection, $limit = null, $locale = 'en') { diff --git a/src/Coduo/PHPHumanizer/DateTime.php b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php similarity index 97% rename from src/Coduo/PHPHumanizer/DateTime.php rename to src/Coduo/PHPHumanizer/DateTimeHumanizer.php index 88b6aa3..310d2e4 100644 --- a/src/Coduo/PHPHumanizer/DateTime.php +++ b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php @@ -8,7 +8,7 @@ use Coduo\PHPHumanizer\DateTime\PreciseFormatter; use Coduo\PHPHumanizer\Translator\Builder; -class DateTime +class DateTimeHumanizer { public static function difference(\DateTime $fromDate, \DateTime $toDate, $locale = 'en') { diff --git a/src/Coduo/PHPHumanizer/Number.php b/src/Coduo/PHPHumanizer/NumberHumanizer.php similarity index 98% rename from src/Coduo/PHPHumanizer/Number.php rename to src/Coduo/PHPHumanizer/NumberHumanizer.php index 3e7db4d..33a530f 100644 --- a/src/Coduo/PHPHumanizer/Number.php +++ b/src/Coduo/PHPHumanizer/NumberHumanizer.php @@ -7,7 +7,7 @@ use Coduo\PHPHumanizer\String\BinarySuffix; use Coduo\PHPHumanizer\String\MetricSuffix; -class Number +class NumberHumanizer { /** * @param int|float $number diff --git a/src/Coduo/PHPHumanizer/String.php b/src/Coduo/PHPHumanizer/StringHumanizer.php similarity index 98% rename from src/Coduo/PHPHumanizer/String.php rename to src/Coduo/PHPHumanizer/StringHumanizer.php index 5e6d6b3..9b0b5ad 100644 --- a/src/Coduo/PHPHumanizer/String.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -8,7 +8,7 @@ use Coduo\PHPHumanizer\String\HtmlTruncate; use Coduo\PHPHumanizer\String\WordBreakpoint; -class String +class StringHumanizer { /** * @param $text diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php similarity index 94% rename from tests/Coduo/PHPHumanizer/Tests/CollectionTest.php rename to tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php index 4a50b6b..f6b0c2d 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php @@ -2,16 +2,16 @@ namespace Coduo\PHPHumanizer\Tests; -use Coduo\PHPHumanizer\Collection; +use Coduo\PHPHumanizer\CollectionHumanizer; -final class CollectionTest extends \PHPUnit_Framework_TestCase +final class CollectionHumanizerTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider oxfordCollectionProvider */ function test_oxford_collections_humanizing($collection, $limit, $locale, $expectedResult) { - $this->assertEquals($expectedResult, Collection::oxford($collection, $limit, $locale)); + $this->assertEquals($expectedResult, CollectionHumanizer::oxford($collection, $limit, $locale)); } public function oxfordCollectionProvider() diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php similarity index 98% rename from tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php rename to tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index 256d8a8..b66d834 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -2,9 +2,9 @@ namespace Coduo\PHPHumanizer\Tests; -use Coduo\PHPHumanizer\DateTime; +use Coduo\PHPHumanizer\DateTimeHumanizer; -class DateTimeTest extends \PHPUnit_Framework_TestCase +class DateTimeHumanizerTest extends \PHPUnit_Framework_TestCase { /** * @test @@ -17,7 +17,7 @@ class DateTimeTest extends \PHPUnit_Framework_TestCase */ public function test_humanize_difference_between_dates($firstDate, $secondDate, $expected, $locale) { - $this->assertEquals($expected, DateTime::difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); + $this->assertEquals($expected, DateTimeHumanizer::difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); } /** @@ -30,7 +30,7 @@ public function test_humanize_difference_between_dates($firstDate, $secondDate, */ public function test_humanize_precise_difference_between_dates($firstDate, $secondDate, $expected, $locale) { - $this->assertEquals($expected, DateTime::preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); + $this->assertEquals($expected, DateTimeHumanizer::preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); } /** diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php similarity index 86% rename from tests/Coduo/PHPHumanizer/Tests/NumberTest.php rename to tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php index bb7c142..9377b9e 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php @@ -2,9 +2,9 @@ namespace Coduo\PHPHumanizer\Tests; -use Coduo\PHPHumanizer\Number; +use Coduo\PHPHumanizer\NumberHumanizer; -class NumberTest extends \PHPUnit_Framework_TestCase +class NumberHumanizerTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider ordinalSuffixProvider @@ -14,7 +14,7 @@ class NumberTest extends \PHPUnit_Framework_TestCase */ public function test_return_ordinal_suffix($expected, $number) { - $this->assertEquals($expected, Number::ordinal($number)); + $this->assertEquals($expected, NumberHumanizer::ordinal($number)); } /** @@ -24,7 +24,7 @@ public function test_return_ordinal_suffix($expected, $number) */ public function test_return_ordinal_suffix_dutch($expected, $number) { - $this->assertEquals($expected, Number::ordinal($number, 'nl')); + $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'nl')); } /** @@ -36,7 +36,7 @@ public function test_return_ordinal_suffix_dutch($expected, $number) */ public function test_ordinalize_numbers($expected, $number) { - $this->assertEquals($expected, Number::ordinalize($number)); + $this->assertEquals($expected, NumberHumanizer::ordinalize($number)); } /** @@ -48,7 +48,7 @@ public function test_ordinalize_numbers($expected, $number) */ public function test_ordinalize_numbers_dutch($expected, $number) { - $this->assertEquals($expected, Number::ordinalize($number, 'nl')); + $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'nl')); } /** @@ -60,7 +60,7 @@ public function test_ordinalize_numbers_dutch($expected, $number) */ public function test_convert_number_to_string_with_binary_suffix($expected, $number, $locale = 'en') { - $this->assertEquals($expected, Number::binarySuffix($number, $locale)); + $this->assertEquals($expected, NumberHumanizer::binarySuffix($number, $locale)); } /** @@ -68,7 +68,7 @@ public function test_convert_number_to_string_with_binary_suffix($expected, $num */ public function test_statically_throw_exception_when_converting_to_string_with_binary_suffix_non_numeric_values() { - Number::binarySuffix('as12'); + NumberHumanizer::binarySuffix('as12'); } /** @@ -81,7 +81,7 @@ public function test_statically_throw_exception_when_converting_to_string_with_b */ public function test_convert_number_to_string_with_precise_binary_suffix($expected, $number, $precision, $locale = 'en') { - $this->assertEquals($expected, Number::preciseBinarySuffix($number, $precision, $locale)); + $this->assertEquals($expected, NumberHumanizer::preciseBinarySuffix($number, $precision, $locale)); } /** @@ -89,7 +89,7 @@ public function test_convert_number_to_string_with_precise_binary_suffix($expect */ public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_negative_precision() { - Number::preciseBinarySuffix(1, -1); + NumberHumanizer::preciseBinarySuffix(1, -1); } /** @@ -97,7 +97,7 @@ public function test_statically_throw_exception_when_converting_to_string_with_p */ public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_large_precision() { - Number::preciseBinarySuffix(1, 4); + NumberHumanizer::preciseBinarySuffix(1, 4); } /** @@ -109,7 +109,7 @@ public function test_statically_throw_exception_when_converting_to_string_with_p */ public function test_convert_number_to_string_with_metric_suffix($expected, $number, $locale = 'en') { - $this->assertEquals($expected, Number::metricSuffix($number, $locale)); + $this->assertEquals($expected, NumberHumanizer::metricSuffix($number, $locale)); } /** @@ -117,7 +117,7 @@ public function test_convert_number_to_string_with_metric_suffix($expected, $num */ public function test_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() { - Number::metricSuffix('as12'); + NumberHumanizer::metricSuffix('as12'); } /** @@ -128,7 +128,7 @@ public function test_statically_throw_exception_when_converting_to_string_with_m */ public function test_converts_numbers_to_roman($expected, $number) { - $this->assertEquals($expected, Number::toRoman($number)); + $this->assertEquals($expected, NumberHumanizer::toRoman($number)); } /** @@ -139,7 +139,7 @@ public function test_converts_numbers_to_roman($expected, $number) */ public function test_convert_roman_numbers_to_arabic($number, $expected) { - $this->assertEquals($expected, Number::fromRoman($number)); + $this->assertEquals($expected, NumberHumanizer::fromRoman($number)); } /** @@ -150,7 +150,7 @@ public function test_convert_roman_numbers_to_arabic($number, $expected) */ public function test_statically_throw_exception_when_converting_number_is_out_of_range($number) { - Number::toRoman($number); + NumberHumanizer::toRoman($number); } /** @@ -161,7 +161,7 @@ public function test_statically_throw_exception_when_converting_number_is_out_of */ public function test_statically_throw_exception_when_converting_roman_number_is_invalid($number) { - Number::fromRoman($number); + NumberHumanizer::fromRoman($number); } /** diff --git a/tests/Coduo/PHPHumanizer/Tests/StringTest.php b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php similarity index 91% rename from tests/Coduo/PHPHumanizer/Tests/StringTest.php rename to tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php index 4fe4fdb..6a49635 100644 --- a/tests/Coduo/PHPHumanizer/Tests/StringTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php @@ -2,10 +2,10 @@ namespace Coduo\PHPHumanizer\Tests; -use Coduo\PHPHumanizer\String; +use Coduo\PHPHumanizer\StringHumanizer; use PHPUnit_Framework_TestCase; -class StringTest extends PHPUnit_Framework_TestCase +class StringHumanizerTest extends PHPUnit_Framework_TestCase { /** * @dataProvider humanizeStringProvider @@ -18,7 +18,7 @@ class StringTest extends PHPUnit_Framework_TestCase */ public function test_humanize_strings($input, $expected, $capitalize, $separator, array $forbiddenWords) { - $this->assertEquals($expected, String::humanize($input, $capitalize, $separator, $forbiddenWords)); + $this->assertEquals($expected, StringHumanizer::humanize($input, $capitalize, $separator, $forbiddenWords)); } /** @@ -31,7 +31,7 @@ public function test_humanize_strings($input, $expected, $capitalize, $separator */ function test_truncate_string_to_word_closest_to_a_certain_number_of_characters($text, $expected, $charactersCount, $append = '') { - $this->assertEquals($expected, String::truncate($text, $charactersCount, $append)); + $this->assertEquals($expected, StringHumanizer::truncate($text, $charactersCount, $append)); } /** @@ -45,7 +45,7 @@ function test_truncate_string_to_word_closest_to_a_certain_number_of_characters( */ function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') { - $this->assertEquals($expected, String::truncateHtml($text, $charactersCount, $allowedTags, $append)); + $this->assertEquals($expected, StringHumanizer::truncateHtml($text, $charactersCount, $allowedTags, $append)); } /** @@ -56,7 +56,7 @@ function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_ */ function test_remove_all_shortcodes_from_text($text, $expected) { - $this->assertEquals($expected, String::removeShortcodes($text)); + $this->assertEquals($expected, StringHumanizer::removeShortcodes($text)); } /** @@ -67,7 +67,7 @@ function test_remove_all_shortcodes_from_text($text, $expected) */ function test_remove_only_shortcode_tags_from_text($text, $expected) { - $this->assertEquals($expected, String::removeShortcodeTags($text)); + $this->assertEquals($expected, StringHumanizer::removeShortcodeTags($text)); } public function removeAllShortcodesProvider() From 0b0eeeaedfe8aa4cece409d3624812861691eb21 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Thu, 10 Dec 2015 14:52:46 +0100 Subject: [PATCH 089/193] Updated phpspec dependency --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index cca989b..2a40401 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ "thunderer/shortcode": "~0.5" }, "require-dev": { - "phpspec/phpspec": "2.0.*", + "phpspec/phpspec": "^2", "phpunit/phpunit": "^4.5|^5.0" }, "config": { From 37ad62f903570581cd350a19017405e17b2160fe Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 13 Dec 2015 14:44:22 +0100 Subject: [PATCH 090/193] Removed deprecated class and marked facades as final --- .../PHPHumanizer/CollectionHumanizer.php | 2 +- src/Coduo/PHPHumanizer/DateTimeHumanizer.php | 2 +- src/Coduo/PHPHumanizer/NumberHumanizer.php | 2 +- src/Coduo/PHPHumanizer/String/Truncate.php | 50 ------------------- src/Coduo/PHPHumanizer/StringHumanizer.php | 2 +- 5 files changed, 4 insertions(+), 54 deletions(-) delete mode 100644 src/Coduo/PHPHumanizer/String/Truncate.php diff --git a/src/Coduo/PHPHumanizer/CollectionHumanizer.php b/src/Coduo/PHPHumanizer/CollectionHumanizer.php index 0f55792..c68834e 100644 --- a/src/Coduo/PHPHumanizer/CollectionHumanizer.php +++ b/src/Coduo/PHPHumanizer/CollectionHumanizer.php @@ -6,7 +6,7 @@ use Coduo\PHPHumanizer\Collection\Oxford; use Coduo\PHPHumanizer\Translator\Builder; -class CollectionHumanizer +final class CollectionHumanizer { public static function oxford($collection, $limit = null, $locale = 'en') { diff --git a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php index 310d2e4..03fa3df 100644 --- a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php +++ b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php @@ -8,7 +8,7 @@ use Coduo\PHPHumanizer\DateTime\PreciseFormatter; use Coduo\PHPHumanizer\Translator\Builder; -class DateTimeHumanizer +final class DateTimeHumanizer { public static function difference(\DateTime $fromDate, \DateTime $toDate, $locale = 'en') { diff --git a/src/Coduo/PHPHumanizer/NumberHumanizer.php b/src/Coduo/PHPHumanizer/NumberHumanizer.php index 33a530f..ea19aa5 100644 --- a/src/Coduo/PHPHumanizer/NumberHumanizer.php +++ b/src/Coduo/PHPHumanizer/NumberHumanizer.php @@ -7,7 +7,7 @@ use Coduo\PHPHumanizer\String\BinarySuffix; use Coduo\PHPHumanizer\String\MetricSuffix; -class NumberHumanizer +final class NumberHumanizer { /** * @param int|float $number diff --git a/src/Coduo/PHPHumanizer/String/Truncate.php b/src/Coduo/PHPHumanizer/String/Truncate.php deleted file mode 100644 index fa815fa..0000000 --- a/src/Coduo/PHPHumanizer/String/Truncate.php +++ /dev/null @@ -1,50 +0,0 @@ -text = $text; - $this->charactersCount = $charactersCount; - $this->append = $append; - } - - public function __toString() - { - if ($this->charactersCount < 0 || mb_strlen($this->text) <= ($this->charactersCount + mb_strlen($this->append))) { - return $this->text; - } - - $length = $this->charactersCount; - if (false !== ($breakpoint = mb_strpos($this->text, ' ', $this->charactersCount))) { - $length = $breakpoint; - } - - return rtrim(mb_substr($this->text, 0, $length)).$this->append; - } -} \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/StringHumanizer.php b/src/Coduo/PHPHumanizer/StringHumanizer.php index 9b0b5ad..3cd85b3 100644 --- a/src/Coduo/PHPHumanizer/StringHumanizer.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -8,7 +8,7 @@ use Coduo\PHPHumanizer\String\HtmlTruncate; use Coduo\PHPHumanizer\String\WordBreakpoint; -class StringHumanizer +final class StringHumanizer { /** * @param $text From a5aa9616a0924cecce0096bedd9eb818de97ad65 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 13 Dec 2015 14:50:21 +0100 Subject: [PATCH 091/193] Cleanup with php-cs-fixer --- src/Coduo/PHPHumanizer/Collection/Oxford.php | 11 +++ .../PHPHumanizer/CollectionHumanizer.php | 6 ++ .../DateTime/PreciseFormatter.php | 4 +- src/Coduo/PHPHumanizer/DateTimeHumanizer.php | 12 ++++ src/Coduo/PHPHumanizer/Number/Ordinal.php | 6 +- .../PHPHumanizer/Number/Ordinal/Builder.php | 4 +- .../Number/Ordinal/StrategyInterface.php | 1 + src/Coduo/PHPHumanizer/NumberHumanizer.php | 31 ++++++++- .../Resources/Ordinal/EnStrategy.php | 2 +- .../Resources/Ordinal/NlStrategy.php | 4 +- .../Resources/translations/difference.no.yml | 68 +++++++++---------- .../PHPHumanizer/String/BinarySuffix.php | 60 ++++++++-------- src/Coduo/PHPHumanizer/String/Breakpoint.php | 4 +- .../PHPHumanizer/String/HtmlTruncate.php | 16 ++--- src/Coduo/PHPHumanizer/String/Humanize.php | 11 ++- .../String/ShortcodeProcessor.php | 14 ++-- .../PHPHumanizer/String/TextTruncate.php | 7 +- .../PHPHumanizer/String/TruncateInterface.php | 5 +- .../PHPHumanizer/String/WordBreakpoint.php | 6 +- src/Coduo/PHPHumanizer/StringHumanizer.php | 12 +++- 20 files changed, 178 insertions(+), 106 deletions(-) diff --git a/src/Coduo/PHPHumanizer/Collection/Oxford.php b/src/Coduo/PHPHumanizer/Collection/Oxford.php index 47d89f2..055f50f 100644 --- a/src/Coduo/PHPHumanizer/Collection/Oxford.php +++ b/src/Coduo/PHPHumanizer/Collection/Oxford.php @@ -9,11 +9,22 @@ class Oxford */ private $formatter; + /** + * Oxford constructor. + * + * @param Formatter $formatter + */ public function __construct(Formatter $formatter) { $this->formatter = $formatter; } + /** + * @param $collection + * @param null $limit + * + * @return string + */ public function format($collection, $limit = null) { return $this->formatter->format($collection, $limit); diff --git a/src/Coduo/PHPHumanizer/CollectionHumanizer.php b/src/Coduo/PHPHumanizer/CollectionHumanizer.php index c68834e..2858589 100644 --- a/src/Coduo/PHPHumanizer/CollectionHumanizer.php +++ b/src/Coduo/PHPHumanizer/CollectionHumanizer.php @@ -8,6 +8,12 @@ final class CollectionHumanizer { + /** + * @param $collection + * @param null $limit + * @param string $locale + * @return string + */ public static function oxford($collection, $limit = null, $locale = 'en') { $oxford = new Oxford( diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index 7788683..af50f8a 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -31,7 +31,7 @@ public function formatDifference(PreciseDifference $difference, $locale = 'en') foreach ($difference->getCompoundResults() as $result) { $diff[] = $this->translator->transChoice( - 'compound.' . $result->getUnit()->getName(), + 'compound.'.$result->getUnit()->getName(), $result->getQuantity(), array('%count%' => $result->getQuantity()), 'difference', @@ -40,7 +40,7 @@ public function formatDifference(PreciseDifference $difference, $locale = 'en') } return $this->translator->trans( - 'compound.' . ($difference->isPast() ? 'past' : 'future'), + 'compound.'.($difference->isPast() ? 'past' : 'future'), array('%value%' => implode(', ', $diff)), 'difference', $locale diff --git a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php index 03fa3df..0bac0a3 100644 --- a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php +++ b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php @@ -10,6 +10,12 @@ final class DateTimeHumanizer { + /** + * @param \DateTime $fromDate + * @param \DateTime $toDate + * @param string $locale + * @return string + */ public static function difference(\DateTime $fromDate, \DateTime $toDate, $locale = 'en') { $formatter = new Formatter(Builder::build($locale)); @@ -17,6 +23,12 @@ public static function difference(\DateTime $fromDate, \DateTime $toDate, $local return $formatter->formatDifference(new Difference($fromDate, $toDate), $locale); } + /** + * @param \DateTime $fromDate + * @param \DateTime $toDate + * @param string $locale + * @return string + */ public static function preciseDifference(\DateTime $fromDate, \DateTime $toDate, $locale = 'en') { $formatter = new PreciseFormatter(Builder::build($locale)); diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal.php b/src/Coduo/PHPHumanizer/Number/Ordinal.php index 6058e2a..f9d8619 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal.php @@ -8,18 +8,18 @@ class Ordinal { /** - * @type int|float + * @var int|float */ private $number; /** - * @type StrategyInterface + * @var StrategyInterface */ private $strategy; /** * @param int|float $number - * @param string $locale + * @param string $locale */ public function __construct($number, $locale) { diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php index f1780b2..7e12f10 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php @@ -9,7 +9,9 @@ class Builder { /** * @param string $locale + * * @return StrategyInterface + * * @throws \RuntimeException */ public static function build($locale) @@ -27,7 +29,7 @@ public static function build($locale) $strategy = "\\Coduo\\PHPHumanizer\\Resources\\Ordinal\\{$strategy}Strategy"; if (class_exists($strategy)) { - return new $strategy; + return new $strategy(); } // Debatable: should we fallback to English? diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php index 9f2a222..4ae2c53 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php @@ -6,6 +6,7 @@ interface StrategyInterface { /** * @param int|float $number + * * @return string */ public function ordinalSuffix($number); diff --git a/src/Coduo/PHPHumanizer/NumberHumanizer.php b/src/Coduo/PHPHumanizer/NumberHumanizer.php index ea19aa5..ab92ecd 100644 --- a/src/Coduo/PHPHumanizer/NumberHumanizer.php +++ b/src/Coduo/PHPHumanizer/NumberHumanizer.php @@ -11,7 +11,8 @@ final class NumberHumanizer { /** * @param int|float $number - * @param string $locale + * @param string $locale + * * @return string */ public static function ordinalize($number, $locale = 'en') @@ -21,15 +22,22 @@ public static function ordinalize($number, $locale = 'en') /** * @param int|float $number - * @param string $locale + * @param string $locale + * * @return string */ public static function ordinal($number, $locale = 'en') { $ordinal = new Ordinal($number, $locale); + return (string) $ordinal; } + /** + * @param $number + * @param string $locale + * @return bool|int|string + */ public static function binarySuffix($number, $locale = 'en') { $binarySuffix = new BinarySuffix($number, $locale); @@ -37,6 +45,12 @@ public static function binarySuffix($number, $locale = 'en') return $binarySuffix->convert(); } + /** + * @param $number + * @param $precision + * @param string $locale + * @return bool|int|string + */ public static function preciseBinarySuffix($number, $precision, $locale = 'en') { $binarySuffix = new BinarySuffix($number, $locale, $precision); @@ -44,6 +58,11 @@ public static function preciseBinarySuffix($number, $precision, $locale = 'en') return $binarySuffix->convert(); } + /** + * @param $number + * @param string $locale + * @return bool|string + */ public static function metricSuffix($number, $locale = 'en') { $binarySuffix = new MetricSuffix($number, $locale); @@ -51,6 +70,10 @@ public static function metricSuffix($number, $locale = 'en') return $binarySuffix->convert(); } + /** + * @param $number + * @return string + */ public static function toRoman($number) { $romanNumeral = new RomanNumeral(); @@ -58,6 +81,10 @@ public static function toRoman($number) return $romanNumeral->toRoman($number); } + /** + * @param $number + * @return int + */ public static function fromRoman($number) { $romanNumeral = new RomanNumeral(); diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php index b3979fd..1268bfb 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php @@ -6,7 +6,7 @@ class EnStrategy implements StrategyInterface { - /** @inheritdoc */ + /** {@inheritdoc} */ public function ordinalSuffix($number) { $absNumber = abs((integer) $number); diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php index 9510fd3..b9280f8 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php @@ -6,9 +6,9 @@ class NlStrategy implements StrategyInterface { - /** @inheritdoc */ + /** {@inheritdoc} */ public function ordinalSuffix($number) { - return "e"; + return 'e'; } } diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml index a2f4ffe..3e9bac1 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml @@ -1,35 +1,35 @@ -just_now: - past: "[0,Inf] akkurat nå" - future: "[0,Inf] akkurat nå" -second: - past: "{1} %count% sekund siden|[2,Inf] %count% sekunder siden" - future: "{1} %count% sekund fra nå|[2,Inf] %count% sekunder fra nå" -minute: - past: "{1} %count% minutt siden|[2,Inf] %count% minutter siden" - future: "{1} %count% minutt fra nå|[2,Inf] %count% minutter fra nå" -hour: - past: "{1} %count% time siden|[2,Inf] %count% timer siden" - future: "{1} %count% time fra nå|[2,Inf] %count% timer fra nå" -day: - past: "{1} %count% dag siden|[2,Inf] %count% dager siden" - future: "{1} %count% dag fra nå|[2,Inf] %count% dager fra nå" -week: - past: "{1} %count% uke siden|[2,Inf] %count% uker siden" - future: "{1} %count% uke fra nå|[2,Inf] %count% uker fra nå" -month: - past: "{1} %count% måned siden|[2,Inf] %count% måneder siden" - future: "{1} %count% måned fra nå|[2,Inf] %count% måneder fra nå" -year: - past: "{1} %count% år siden|[2,Inf] %count% år siden" - future: "{1} %count% år fra nå|[2,Inf] %count% år fra nå" - -compound: - second: "{1} %count% sekund|[2,Inf] %count% sekunder" - minute: "{1} %count% minutt|[2,Inf] %count% minutter" - hour: "{1} %count% time|[2,Inf] %count% timer" - day: "{1} %count% dag|[2,Inf] %count% dager" - week: "{1} %count% uke|[2,Inf] %count% uker" - month: "{1} %count% måned|[2,Inf] %count% måneder" - year: "{1} %count% år|[2,Inf] %count% år" - past: "%value% siden" +just_now: + past: "[0,Inf] akkurat nå" + future: "[0,Inf] akkurat nå" +second: + past: "{1} %count% sekund siden|[2,Inf] %count% sekunder siden" + future: "{1} %count% sekund fra nå|[2,Inf] %count% sekunder fra nå" +minute: + past: "{1} %count% minutt siden|[2,Inf] %count% minutter siden" + future: "{1} %count% minutt fra nå|[2,Inf] %count% minutter fra nå" +hour: + past: "{1} %count% time siden|[2,Inf] %count% timer siden" + future: "{1} %count% time fra nå|[2,Inf] %count% timer fra nå" +day: + past: "{1} %count% dag siden|[2,Inf] %count% dager siden" + future: "{1} %count% dag fra nå|[2,Inf] %count% dager fra nå" +week: + past: "{1} %count% uke siden|[2,Inf] %count% uker siden" + future: "{1} %count% uke fra nå|[2,Inf] %count% uker fra nå" +month: + past: "{1} %count% måned siden|[2,Inf] %count% måneder siden" + future: "{1} %count% måned fra nå|[2,Inf] %count% måneder fra nå" +year: + past: "{1} %count% år siden|[2,Inf] %count% år siden" + future: "{1} %count% år fra nå|[2,Inf] %count% år fra nå" + +compound: + second: "{1} %count% sekund|[2,Inf] %count% sekunder" + minute: "{1} %count% minutt|[2,Inf] %count% minutter" + hour: "{1} %count% time|[2,Inf] %count% timer" + day: "{1} %count% dag|[2,Inf] %count% dager" + week: "{1} %count% uke|[2,Inf] %count% uker" + month: "{1} %count% måned|[2,Inf] %count% måneder" + year: "{1} %count% år|[2,Inf] %count% år" + past: "%value% siden" future: "%value% fra nå" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index ab6ac36..f818cd7 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -29,9 +29,9 @@ class BinarySuffix ); /** - * @param integer $number - * @param string $locale - * @param integer $precision + * @param int $number + * @param string $locale + * @param int $precision * * @throws \InvalidArgumentException */ @@ -41,7 +41,7 @@ public function __construct($number, $locale = 'en', $precision = null) throw new \InvalidArgumentException('Binary suffix converter accept only numeric values.'); } - if(!is_null($precision)){ + if (!is_null($precision)) { $this->setSpecificPrecisionFormat($precision); } @@ -49,53 +49,53 @@ public function __construct($number, $locale = 'en', $precision = null) $this->locale = $locale; } + public function convert() + { + $formatter = new \NumberFormatter($this->locale, \NumberFormatter::PATTERN_DECIMAL); + if ($this->number < 0) { + return $this->number; + } + + foreach ($this->binaryPrefixes as $size => $unitPattern) { + if ($size <= $this->number) { + $value = ($this->number >= self::CONVERT_THRESHOLD) ? $this->number / (double) $size : $this->number; + $formatter->setPattern($unitPattern); + + return $formatter->format($value); + } + } + + return $formatter->format($this->number); + } + /** * Replaces the default ICU 56.1 decimal formats defined in $binaryPrefixes with ones that provide the same symbols - * but the provided number of decimal places + * but the provided number of decimal places. * - * @param integer $precision + * @param int $precision * * @throws \InvalidArgumentException */ protected function setSpecificPrecisionFormat($precision) { - if($precision < 0){ + if ($precision < 0) { throw new \InvalidArgumentException('Precision must be positive'); } - if($precision > 3){ + if ($precision > 3) { throw new \InvalidArgumentException('Invalid precision. Binary suffix converter can only represent values in '. 'up to three decimal places'); } $icuFormat = '#'; - if($precision > 0){ - $icuFormat .= str_pad('#.', (2+$precision), '0'); + if ($precision > 0) { + $icuFormat .= str_pad('#.', (2 + $precision), '0'); } foreach ($this->binaryPrefixes as $size => $unitPattern) { - if($size >= 1024){ + if ($size >= 1024) { $symbol = substr($unitPattern, strpos($unitPattern, ' ')); $this->binaryPrefixes[$size] = $icuFormat.$symbol; } } } - - public function convert() - { - $formatter = new \NumberFormatter($this->locale, \NumberFormatter::PATTERN_DECIMAL); - if ($this->number < 0) { - return $this->number; - } - - foreach ($this->binaryPrefixes as $size => $unitPattern) { - if ($size <= $this->number) { - $value = ($this->number >= self::CONVERT_THRESHOLD) ? $this->number / (double) $size : $this->number; - $formatter->setPattern($unitPattern); - - return $formatter->format($value); - } - } - - return $formatter->format($this->number); - } } diff --git a/src/Coduo/PHPHumanizer/String/Breakpoint.php b/src/Coduo/PHPHumanizer/String/Breakpoint.php index 48a61e9..23d37f1 100644 --- a/src/Coduo/PHPHumanizer/String/Breakpoint.php +++ b/src/Coduo/PHPHumanizer/String/Breakpoint.php @@ -5,7 +5,7 @@ interface Breakpoint { /** - * Return the length of the truncated $text depending on the $characterCount + * Return the length of the truncated $text depending on the $characterCount. * * @param string $text * @param int $charactersCount @@ -14,4 +14,4 @@ interface Breakpoint * @return int */ public function calculatePosition($text, $charactersCount); -} \ No newline at end of file +} diff --git a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php index 5e011b1..629347f 100644 --- a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php +++ b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php @@ -48,16 +48,16 @@ public function truncate($text, $charactersCount) * Adapted from FuelPHP Str::truncate (https://github.com/fuelphp/common/blob/master/src/Str.php) * * @param string $string - * @param int $charactersCount + * @param int $charactersCount * * @return string the truncated string */ private function truncateHtml($string, $charactersCount) { - $limit = $charactersCount; - $offset = 0; - $tags = array(); - + $limit = $charactersCount; + $offset = 0; + $tags = array(); + // Handle special characters. preg_match_all('/&[a-z]+;/i', strip_tags($string), $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); foreach ($matches as $match) { @@ -73,21 +73,21 @@ private function truncateHtml($string, $charactersCount) if ($match[0][1] - $offset >= $limit) { break; } - + $tag = mb_substr(strtok($match[0][0], " \t\n\r\0\x0B>"), 1); if ($tag[0] != '/') { $tags[] = $tag; } elseif (end($tags) == mb_substr($tag, 1)) { array_pop($tags); } - + $offset += $match[1][1] - $match[0][1]; } $newString = mb_substr($string, 0, $limit = min(mb_strlen($string), $this->breakpoint->calculatePosition($string, $limit + $offset))); $newString .= (mb_strlen($string) > $limit ? $this->append : ''); $newString .= (count($tags = array_reverse($tags)) ? '' : ''); - + return $newString; } } diff --git a/src/Coduo/PHPHumanizer/String/Humanize.php b/src/Coduo/PHPHumanizer/String/Humanize.php index c58fa03..548acf5 100644 --- a/src/Coduo/PHPHumanizer/String/Humanize.php +++ b/src/Coduo/PHPHumanizer/String/Humanize.php @@ -10,7 +10,7 @@ class Humanize private $text; /** - * @var boolean + * @var bool */ private $capitalize; @@ -21,9 +21,9 @@ class Humanize /** * @param $text - * @param bool $capitalize + * @param bool $capitalize * @param string $separator - * @param array $forbiddenWords + * @param array $forbiddenWords */ public function __construct($text, $capitalize = true, $separator = '_', array $forbiddenWords = array('id')) { @@ -34,14 +34,13 @@ public function __construct($text, $capitalize = true, $separator = '_', array $ } /** - * @internal param bool $capitalize * @return string */ public function __toString() { $humanized = trim(strtolower(preg_replace(array('/([A-Z])/', "/[{$this->separator}\\s]+/"), array('_$1', ' '), $this->text))); - $humanized = trim(str_replace($this->forbiddenWords, "", $humanized)); - + $humanized = trim(str_replace($this->forbiddenWords, '', $humanized)); + return $this->capitalize ? ucfirst($humanized) : $humanized; } } diff --git a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php index ead9472..db2a9f6 100644 --- a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php +++ b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php @@ -10,7 +10,7 @@ class ShortcodeProcessor { /** - * Removes all shortcodes from given text + * Removes all shortcodes from given text. * * @param string $text * @@ -18,15 +18,15 @@ class ShortcodeProcessor */ public function removeShortcodes($text) { - $nullHandler = function() { - return null; + $nullHandler = function () { + return; }; return $this->createShortcodeProcessor($nullHandler)->process($text); } /** - * Removes only shortcode tags from given text (leaves their content as it is) + * Removes only shortcode tags from given text (leaves their content as it is). * * @param string $text * @@ -34,13 +34,17 @@ public function removeShortcodes($text) */ public function removeShortcodeTags($text) { - $contentHandler = function(ShortcodeInterface $s) { + $contentHandler = function (ShortcodeInterface $s) { return $s->getContent(); }; return $this->createShortcodeProcessor($contentHandler)->process($text); } + /** + * @param $defaultHandler + * @return Processor + */ private function createShortcodeProcessor($defaultHandler) { $handlers = new HandlerContainer(); diff --git a/src/Coduo/PHPHumanizer/String/TextTruncate.php b/src/Coduo/PHPHumanizer/String/TextTruncate.php index dd99238..df11ba0 100644 --- a/src/Coduo/PHPHumanizer/String/TextTruncate.php +++ b/src/Coduo/PHPHumanizer/String/TextTruncate.php @@ -16,7 +16,7 @@ class TextTruncate implements TruncateInterface /** * @param Breakpoint $breakpoint - * @param string $append + * @param string $append */ public function __construct(Breakpoint $breakpoint, $append = '') { @@ -26,7 +26,8 @@ public function __construct(Breakpoint $breakpoint, $append = '') /** * @param string $text - * @param int $charactersCount + * @param int $charactersCount + * * @return string */ public function truncate($text, $charactersCount) @@ -37,6 +38,6 @@ public function truncate($text, $charactersCount) $truncatedText = rtrim(mb_substr($text, 0, $this->breakpoint->calculatePosition($text, $charactersCount))); - return ($truncatedText === $text) ? $truncatedText : $truncatedText . $this->append; + return ($truncatedText === $text) ? $truncatedText : $truncatedText.$this->append; } } diff --git a/src/Coduo/PHPHumanizer/String/TruncateInterface.php b/src/Coduo/PHPHumanizer/String/TruncateInterface.php index a6e1bb7..2f20dd3 100644 --- a/src/Coduo/PHPHumanizer/String/TruncateInterface.php +++ b/src/Coduo/PHPHumanizer/String/TruncateInterface.php @@ -2,11 +2,12 @@ namespace Coduo\PHPHumanizer\String; -interface TruncateInterface +interface TruncateInterface { /** * @param string $text - * @param int $charactersCount + * @param int $charactersCount + * * @return string mixed */ public function truncate($text, $charactersCount); diff --git a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php index de3d8e2..1ce25fc 100644 --- a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php +++ b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php @@ -9,17 +9,17 @@ public function calculatePosition($text, $charactersCount) if ($charactersCount < 0) { return mb_strlen($text); } - + if ($charactersCount > mb_strlen($text)) { return mb_strlen($text); } $breakpoint = mb_strpos($text, ' ', $charactersCount); - + if (false === $breakpoint) { return mb_strlen($text); } - + return $breakpoint; } } diff --git a/src/Coduo/PHPHumanizer/StringHumanizer.php b/src/Coduo/PHPHumanizer/StringHumanizer.php index 3cd85b3..eb158f3 100644 --- a/src/Coduo/PHPHumanizer/StringHumanizer.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -13,8 +13,8 @@ final class StringHumanizer /** * @param $text * @param bool|true $capitalize - * @param string $separator - * @param array $forbiddenWords + * @param string $separator + * @param array $forbiddenWords * * @return string */ @@ -52,6 +52,10 @@ public static function truncateHtml($text, $charactersCount, $allowedTags = '', return $truncate->truncate($text, $charactersCount); } + /** + * @param $text + * @return string + */ public static function removeShortcodes($text) { $processor = new ShortcodeProcessor(); @@ -59,6 +63,10 @@ public static function removeShortcodes($text) return $processor->removeShortcodes($text); } + /** + * @param $text + * @return string + */ public static function removeShortcodeTags($text) { $processor = new ShortcodeProcessor(); From f093f86db7615c500eec48b8b0ddca60523bb8dd Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 13 Dec 2015 14:59:28 +0100 Subject: [PATCH 092/193] Closed other extension points by adding final to all classes --- .../PHPHumanizer/DateTime/FormatterSpec.php | 20 +++++++------ .../DateTime/PreciseFormatterSpec.php | 28 ++++++++----------- .../PHPHumanizer/Collection/Formatter.php | 2 +- src/Coduo/PHPHumanizer/Collection/Oxford.php | 2 +- .../PHPHumanizer/DateTime/Difference.php | 2 +- .../DateTime/Difference/CompoundResult.php | 2 +- src/Coduo/PHPHumanizer/DateTime/Formatter.php | 2 +- .../DateTime/PreciseDifference.php | 2 +- .../DateTime/PreciseFormatter.php | 2 +- src/Coduo/PHPHumanizer/DateTime/Unit/Day.php | 2 +- src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php | 2 +- .../PHPHumanizer/DateTime/Unit/JustNow.php | 2 +- .../PHPHumanizer/DateTime/Unit/Minute.php | 2 +- .../PHPHumanizer/DateTime/Unit/Month.php | 2 +- .../PHPHumanizer/DateTime/Unit/Second.php | 2 +- src/Coduo/PHPHumanizer/DateTime/Unit/Week.php | 2 +- src/Coduo/PHPHumanizer/DateTime/Unit/Year.php | 2 +- src/Coduo/PHPHumanizer/Number/Ordinal.php | 2 +- .../PHPHumanizer/Number/Ordinal/Builder.php | 2 +- .../PHPHumanizer/Number/RomanNumeral.php | 2 +- .../Resources/Ordinal/EnStrategy.php | 2 +- .../Resources/Ordinal/NlStrategy.php | 2 +- .../PHPHumanizer/String/BinarySuffix.php | 2 +- .../PHPHumanizer/String/HtmlTruncate.php | 2 +- src/Coduo/PHPHumanizer/String/Humanize.php | 2 +- .../PHPHumanizer/String/MetricSuffix.php | 2 +- .../String/ShortcodeProcessor.php | 2 +- .../PHPHumanizer/String/TextTruncate.php | 2 +- .../PHPHumanizer/String/WordBreakpoint.php | 7 ++++- src/Coduo/PHPHumanizer/Translator/Builder.php | 6 +++- 30 files changed, 60 insertions(+), 53 deletions(-) diff --git a/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php b/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php index 97e08d8..4bf48ae 100644 --- a/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php +++ b/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php @@ -30,19 +30,23 @@ function let(Translator $translator) )->willReturn('10 minut temu'); } - function it_format_datetime_diff(Difference $diff) + function it_format_datetime_diff() { - $diff->getUnit()->willReturn(new Minute()); - $diff->getQuantity()->willReturn(10); - $diff->isPast()->willReturn(true); + $diff = new Difference( + new \DateTime("2015-01-01 00:10:00"), + new \DateTime("2015-01-01 00:00:00") + ); + $this->formatDifference($diff)->shouldReturn('10 minutes ago'); } - function it_format_datetime_diff_for_specific_locale(Difference $diff) + function it_format_datetime_diff_for_specific_locale() { - $diff->getUnit()->willReturn(new Minute()); - $diff->getQuantity()->willReturn(10); - $diff->isPast()->willReturn(true); + $diff = new Difference( + new \DateTime("2015-01-01 00:10:00"), + new \DateTime("2015-01-01 00:00:00") + ); + $this->formatDifference($diff, 'pl')->shouldReturn('10 minut temu'); } } diff --git a/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php b/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php index 40ea0f3..1ecf75e 100644 --- a/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php +++ b/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php @@ -62,29 +62,23 @@ function let(Translator $translator) )->willReturn('через 10 дней, 5 часов'); } - function it_format_compound_datetime_diff(PreciseDifference $diff, CompoundResult $dayResult, - CompoundResult $hourResult) + function it_format_compound_datetime_diff() { - $dayResult->getUnit()->willReturn(new Day()); - $dayResult->getQuantity()->willReturn(10); - $hourResult->getUnit()->willReturn(new Hour()); - $hourResult->getQuantity()->willReturn(5); + $diff = new PreciseDifference( + new \DateTime("2015-01-01 00:00:00"), + new \DateTime("2015-01-11 05:00:00") + ); - $diff->getCompoundResults()->willReturn(array($dayResult, $hourResult)); - $diff->isPast()->willReturn(false); $this->formatDifference($diff)->shouldReturn('10 days, 5 hours from now'); } - function it_format_compound_datetime_diff_for_specific_locale(PreciseDifference $diff, - CompoundResult $dayResult, CompoundResult $hourResult) + function it_format_compound_datetime_diff_for_specific_locale() { - $dayResult->getUnit()->willReturn(new Day()); - $dayResult->getQuantity()->willReturn(10); - $hourResult->getUnit()->willReturn(new Hour()); - $hourResult->getQuantity()->willReturn(5); - - $diff->getCompoundResults()->willReturn(array($dayResult, $hourResult)); - $diff->isPast()->willReturn(false); + $diff = new PreciseDifference( + new \DateTime("2015-01-01 00:00:00"), + new \DateTime("2015-01-11 05:00:00") + ); + $this->formatDifference($diff, 'ru')->shouldReturn('через 10 дней, 5 часов'); } } diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php index 4a6a699..926a166 100644 --- a/src/Coduo/PHPHumanizer/Collection/Formatter.php +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -4,7 +4,7 @@ use Symfony\Component\Translation\TranslatorInterface; -class Formatter +final class Formatter { /** * @var \Symfony\Component\Translation\TranslatorInterface diff --git a/src/Coduo/PHPHumanizer/Collection/Oxford.php b/src/Coduo/PHPHumanizer/Collection/Oxford.php index 055f50f..13c0fbc 100644 --- a/src/Coduo/PHPHumanizer/Collection/Oxford.php +++ b/src/Coduo/PHPHumanizer/Collection/Oxford.php @@ -2,7 +2,7 @@ namespace Coduo\PHPHumanizer\Collection; -class Oxford +final class Oxford { /** * @var Formatter diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference.php b/src/Coduo/PHPHumanizer/DateTime/Difference.php index a703081..b99124d 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference.php @@ -11,7 +11,7 @@ use Coduo\PHPHumanizer\DateTime\Unit\Week; use Coduo\PHPHumanizer\DateTime\Unit\Year; -class Difference +final class Difference { /** * @var \DateTime diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php index af77a35..79ba44d 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php @@ -4,7 +4,7 @@ use Coduo\PHPHumanizer\DateTime\Unit; -class CompoundResult +final class CompoundResult { /** * @var \Coduo\PHPHumanizer\DateTime\Unit diff --git a/src/Coduo/PHPHumanizer/DateTime/Formatter.php b/src/Coduo/PHPHumanizer/DateTime/Formatter.php index 8b0ec7b..48222f9 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Formatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/Formatter.php @@ -4,7 +4,7 @@ use Symfony\Component\Translation\TranslatorInterface; -class Formatter +final class Formatter { /** * @var \Symfony\Component\Translation\TranslatorInterface diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php index 9425d8e..0edfd7e 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php @@ -10,7 +10,7 @@ use Coduo\PHPHumanizer\DateTime\Unit\Year; use Coduo\PHPHumanizer\DateTime\Difference\CompoundResult; -class PreciseDifference +final class PreciseDifference { /** * @var \DateTime diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index af50f8a..46a1b80 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -4,7 +4,7 @@ use Symfony\Component\Translation\TranslatorInterface; -class PreciseFormatter +final class PreciseFormatter { /** * @var \Symfony\Component\Translation\TranslatorInterface diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php index fe12aad..880a456 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php @@ -4,7 +4,7 @@ use Coduo\PHPHumanizer\DateTime\Unit; -class Day implements Unit +final class Day implements Unit { /** * @return string diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php index dd33269..dcece2f 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php @@ -4,7 +4,7 @@ use Coduo\PHPHumanizer\DateTime\Unit; -class Hour implements Unit +final class Hour implements Unit { /** * @return string diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php b/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php index 97b33df..1ed5ce0 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php @@ -4,7 +4,7 @@ use Coduo\PHPHumanizer\DateTime\Unit; -class JustNow implements Unit +final class JustNow implements Unit { /** * @return string diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php index 096e0c1..2a6c895 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php @@ -4,7 +4,7 @@ use Coduo\PHPHumanizer\DateTime\Unit; -class Minute implements Unit +final class Minute implements Unit { /** * @return string diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php index 8f94e68..4bbb6ec 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php @@ -4,7 +4,7 @@ use Coduo\PHPHumanizer\DateTime\Unit; -class Month implements Unit +final class Month implements Unit { /** * @return string diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php index 61c95c7..ce8ec27 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php @@ -4,7 +4,7 @@ use Coduo\PHPHumanizer\DateTime\Unit; -class Second implements Unit +final class Second implements Unit { /** * @return string diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php index a35f188..f20bb65 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php @@ -4,7 +4,7 @@ use Coduo\PHPHumanizer\DateTime\Unit; -class Week implements Unit +final class Week implements Unit { /** * @return string diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php index d2185a0..6c01607 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php @@ -4,7 +4,7 @@ use Coduo\PHPHumanizer\DateTime\Unit; -class Year implements Unit +final class Year implements Unit { /** * @return string diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal.php b/src/Coduo/PHPHumanizer/Number/Ordinal.php index f9d8619..c507951 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal.php @@ -5,7 +5,7 @@ use Coduo\PHPHumanizer\Number\Ordinal\Builder; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; -class Ordinal +final class Ordinal { /** * @var int|float diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php index 7e12f10..e6a686e 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php @@ -5,7 +5,7 @@ /** * Tries to find a proper strategy for ordinal numbers. */ -class Builder +final class Builder { /** * @param string $locale diff --git a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php index 8361d90..7d967f3 100644 --- a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php +++ b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php @@ -2,7 +2,7 @@ namespace Coduo\PHPHumanizer\Number; -class RomanNumeral +final class RomanNumeral { const MIN_VALUE = 1; const MAX_VALUE = 3999; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php index 1268bfb..7cda141 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php @@ -4,7 +4,7 @@ use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; -class EnStrategy implements StrategyInterface +final class EnStrategy implements StrategyInterface { /** {@inheritdoc} */ public function ordinalSuffix($number) diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php index b9280f8..54b3f08 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php @@ -4,7 +4,7 @@ use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; -class NlStrategy implements StrategyInterface +final class NlStrategy implements StrategyInterface { /** {@inheritdoc} */ public function ordinalSuffix($number) diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index f818cd7..ca13f8e 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -2,7 +2,7 @@ namespace Coduo\PHPHumanizer\String; -class BinarySuffix +final class BinarySuffix { const CONVERT_THRESHOLD = 1024; diff --git a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php index 629347f..42f2d15 100644 --- a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php +++ b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php @@ -2,7 +2,7 @@ namespace Coduo\PHPHumanizer\String; -class HtmlTruncate implements TruncateInterface +final class HtmlTruncate implements TruncateInterface { /** * @var string diff --git a/src/Coduo/PHPHumanizer/String/Humanize.php b/src/Coduo/PHPHumanizer/String/Humanize.php index 548acf5..e09896f 100644 --- a/src/Coduo/PHPHumanizer/String/Humanize.php +++ b/src/Coduo/PHPHumanizer/String/Humanize.php @@ -2,7 +2,7 @@ namespace Coduo\PHPHumanizer\String; -class Humanize +final class Humanize { /** * @var string diff --git a/src/Coduo/PHPHumanizer/String/MetricSuffix.php b/src/Coduo/PHPHumanizer/String/MetricSuffix.php index 513ddac..c61bf15 100644 --- a/src/Coduo/PHPHumanizer/String/MetricSuffix.php +++ b/src/Coduo/PHPHumanizer/String/MetricSuffix.php @@ -2,7 +2,7 @@ namespace Coduo\PHPHumanizer\String; -class MetricSuffix +final class MetricSuffix { const CONVERT_THRESHOLD = 1000; diff --git a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php index db2a9f6..0e61794 100644 --- a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php +++ b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php @@ -7,7 +7,7 @@ use Thunder\Shortcode\Processor\Processor; use Thunder\Shortcode\Shortcode\ShortcodeInterface; -class ShortcodeProcessor +final class ShortcodeProcessor { /** * Removes all shortcodes from given text. diff --git a/src/Coduo/PHPHumanizer/String/TextTruncate.php b/src/Coduo/PHPHumanizer/String/TextTruncate.php index df11ba0..75b8ef7 100644 --- a/src/Coduo/PHPHumanizer/String/TextTruncate.php +++ b/src/Coduo/PHPHumanizer/String/TextTruncate.php @@ -2,7 +2,7 @@ namespace Coduo\PHPHumanizer\String; -class TextTruncate implements TruncateInterface +final class TextTruncate implements TruncateInterface { /** * @var string diff --git a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php index 1ce25fc..eb06d9b 100644 --- a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php +++ b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php @@ -2,8 +2,13 @@ namespace Coduo\PHPHumanizer\String; -class WordBreakpoint implements Breakpoint +final class WordBreakpoint implements Breakpoint { + /** + * @param string $text + * @param int $charactersCount + * @return bool|int + */ public function calculatePosition($text, $charactersCount) { if ($charactersCount < 0) { diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index 7131ed1..ca8ddd8 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -5,8 +5,12 @@ use Symfony\Component\Translation\Loader\YamlFileLoader; use Symfony\Component\Translation\Translator; -class Builder +final class Builder { + /** + * @param $locale + * @return Translator + */ public static function build($locale) { $translator = new Translator($locale); From 484ff81cffc6de16fdbf3d9e59dad58e1d1477c8 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 13 Dec 2015 18:10:03 +0100 Subject: [PATCH 093/193] Updated dependencies to handle symfony 3.0 --- composer.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/composer.json b/composer.json index 2a40401..5673922 100644 --- a/composer.json +++ b/composer.json @@ -15,10 +15,10 @@ ], "require": { "php": ">=5.3.0", - "symfony/intl": "~2.3", - "symfony/config": "~2.3", - "symfony/translation": "~2.3", - "symfony/yaml": "~2.3", + "symfony/intl": "^2.3|^3.0", + "symfony/config": "^2.3|^3.0", + "symfony/translation": "^2.3|^3.0", + "symfony/yaml": "^2.3|^3.0", "thunderer/shortcode": "~0.5" }, "require-dev": { From c0d04f26b7e894f347087216c013cf11ae26c317 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 13 Dec 2015 18:35:59 +0100 Subject: [PATCH 094/193] Removed allowing failures on lowest dependencies --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1f8207c..e54e070 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,8 +16,6 @@ matrix: - php: 5.6 - php: 7.0 - php: hhvm - allow_failures: - - env: DEPENDENCIES='low' before_install: - composer self-update From e2c5fde7f5e53ad263e6205735195096669e5b72 Mon Sep 17 00:00:00 2001 From: isnani Date: Wed, 13 Jan 2016 11:22:20 +0100 Subject: [PATCH 095/193] improve strategy to handle prefix-ordinal --- src/Coduo/PHPHumanizer/Number/Ordinal.php | 9 +- .../Number/Ordinal/StrategyInterface.php | 7 +- src/Coduo/PHPHumanizer/NumberHumanizer.php | 9 +- .../Resources/Ordinal/EnStrategy.php | 7 +- .../Resources/Ordinal/IdStrategy.php | 19 ++++ .../Resources/Ordinal/NlStrategy.php | 7 +- .../Tests/NumberHumanizerTest.php | 94 ++++++++++++++----- 7 files changed, 122 insertions(+), 30 deletions(-) create mode 100644 src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal.php b/src/Coduo/PHPHumanizer/Number/Ordinal.php index c507951..4868b09 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal.php @@ -27,10 +27,15 @@ public function __construct($number, $locale) $this->strategy = Builder::build($locale); } + public function isPrefix() + { + return $this->strategy->isPrefix(); + } + public function __toString() { return $this ->strategy - ->ordinalSuffix($this->number); + ->ordinalIndicator($this->number); } -} +} \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php index 4ae2c53..470e87a 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php @@ -4,10 +4,15 @@ interface StrategyInterface { + /** + * @return boolean + */ + public function isPrefix(); + /** * @param int|float $number * * @return string */ - public function ordinalSuffix($number); + public function ordinalIndicator($number); } diff --git a/src/Coduo/PHPHumanizer/NumberHumanizer.php b/src/Coduo/PHPHumanizer/NumberHumanizer.php index ab92ecd..b2354a9 100644 --- a/src/Coduo/PHPHumanizer/NumberHumanizer.php +++ b/src/Coduo/PHPHumanizer/NumberHumanizer.php @@ -17,9 +17,13 @@ final class NumberHumanizer */ public static function ordinalize($number, $locale = 'en') { - return $number.self::ordinal($number, $locale); + $ordinal = new Ordinal($number, $locale); + if ($ordinal->isPrefix()) { + return (string) $ordinal.$number; + } + else return (string) $number.$ordinal; } - + /** * @param int|float $number * @param string $locale @@ -29,7 +33,6 @@ public static function ordinalize($number, $locale = 'en') public static function ordinal($number, $locale = 'en') { $ordinal = new Ordinal($number, $locale); - return (string) $ordinal; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php index 7cda141..5b7ebb7 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php @@ -6,8 +6,13 @@ final class EnStrategy implements StrategyInterface { + /** {@inheritdoc}*/ + public function isPrefix(){ + return False; + } + /** {@inheritdoc} */ - public function ordinalSuffix($number) + public function ordinalIndicator($number) { $absNumber = abs((integer) $number); diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php new file mode 100644 index 0000000..e4ba1e4 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php @@ -0,0 +1,19 @@ +assertEquals($expected, NumberHumanizer::ordinal($number, 'nl')); } + /** + * @dataProvider ordinalIndicatorIndonesianProvider + * @param $expected + * @param $number + */ + public function test_return_ordinal_suffix_indonesian($expected, $number) + { + $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'id')); + } + /** * @dataProvider ordinalizeDataProvider * @depends test_return_ordinal_suffix @@ -51,6 +61,18 @@ public function test_ordinalize_numbers_dutch($expected, $number) $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'nl')); } + /** + * @dataProvider ordinalizeDataIndonesianProvider + * @depends test_return_ordinal_suffix_indonesian + * + * @param $expected + * @param $number + */ + public function test_ordinalize_numbers_indonesian($expected, $number) + { + $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'id')); + } + /** * @dataProvider binarySuffixDataProvider * @@ -164,6 +186,48 @@ public function test_statically_throw_exception_when_converting_roman_number_is_ NumberHumanizer::fromRoman($number); } + /** + * @return array + */ + public function ordinalIndicatorProvider() + { + return array( + array('st', 1), + array('nd', 2), + array('rd', 23), + array('nd', 1002), + array('th', -111), + ); + } + + /** + * @return array + */ + public function ordinalIndicatorDutchProvider() + { + return array( + array('e', 1), + array('e', 2), + array('e', 23), + array('e', 1002), + array('e', -111), + ); + } + + /** + * @return array + */ + public function ordinalIndicatorIndonesianProvider() + { + return array( + array('ke-', 1), + array('ke-', 2), + array('ke-', 23), + array('ke-', 1002), + array('ke-', -111), + ); + } + /** * @return array */ @@ -195,28 +259,14 @@ public function ordinalizeDataDutchProvider() /** * @return array */ - public function ordinalSuffixProvider() + public function ordinalizeDataIndonesianProvider() { return array( - array('st', 1), - array('nd', 2), - array('rd', 23), - array('nd', 1002), - array('th', -111), - ); - } - - /** - * @return array - */ - public function ordinalSuffixDutchProvider() - { - return array( - array('e', 1), - array('e', 2), - array('e', 23), - array('e', 1002), - array('e', -111), + array('ke-1', 1), + array('ke-2', 2), + array('ke-23', 23), + array('ke-1002', 1002), + array('ke--111', -111), ); } From 8741813adf54d44952c295a55227e24beef4b350 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 24 Jan 2016 22:06:16 +0100 Subject: [PATCH 096/193] Removed dependency from thunderer/shortcode, added changelog and upgrade docs, CS Fixes --- CHANGELOG.md | 5 +++++ UPGRADE.md | 9 +++++++++ composer.json | 4 ++-- .../Number/Ordinal/StrategyInterface.php | 8 ++++---- src/Coduo/PHPHumanizer/NumberHumanizer.php | 7 +++---- .../PHPHumanizer/Resources/Ordinal/EnStrategy.php | 15 ++++++++++----- .../PHPHumanizer/Resources/Ordinal/IdStrategy.php | 15 ++++++++++----- .../PHPHumanizer/Resources/Ordinal/NlStrategy.php | 11 ++++++++--- src/Coduo/PHPHumanizer/StringHumanizer.php | 8 ++++++++ 9 files changed, 59 insertions(+), 23 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 UPGRADE.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..15c1f68 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +# 2.0 + +* Added support for PHP7 +* Updated dependencies to support Symfony3 components +* Added support for Ordinal number strategies that require prefixes diff --git a/UPGRADE.md b/UPGRADE.md new file mode 100644 index 0000000..ab3a500 --- /dev/null +++ b/UPGRADE.md @@ -0,0 +1,9 @@ +# Upgrade 1.0 to 2.0 + +* All classes are now marked as final in order to close extra extension points +* Renamed ``Coduo\PHPHumanizer\Collection`` into ``Coduo\PHPHumanizer\CollectionHumanizer`` +* Renamed ``Coduo\PHPHumanizer\DateTime`` into ``Coduo\PHPHumanizer\DateTimeHumanizer`` +* Renamed ``Coduo\PHPHumanizer\Number`` into ``Coduo\PHPHumanizer\NumberHumanizer`` +* Renamed ``Coduo\PHPHumanizer\String`` into ``Coduo\PHPHumanizer\StringHumanizer`` +* Replaced ``ordinalSuffix($number)`` method in ``Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface`` with ``isPrefix()`` and ``ordinalIndicator($number)`` +* Dependency ``thunderer/shortcode`` was removed, now shortcode lib needs to be added to project \ No newline at end of file diff --git a/composer.json b/composer.json index 5673922..78a33d6 100644 --- a/composer.json +++ b/composer.json @@ -18,10 +18,10 @@ "symfony/intl": "^2.3|^3.0", "symfony/config": "^2.3|^3.0", "symfony/translation": "^2.3|^3.0", - "symfony/yaml": "^2.3|^3.0", - "thunderer/shortcode": "~0.5" + "symfony/yaml": "^2.3|^3.0" }, "require-dev": { + "thunderer/shortcode": "~0.5", "phpspec/phpspec": "^2", "phpunit/phpunit": "^4.5|^5.0" }, diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php index 470e87a..0e0664c 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php @@ -4,10 +4,10 @@ interface StrategyInterface { - /** - * @return boolean - */ - public function isPrefix(); + /** + * @return boolean + */ + public function isPrefix(); /** * @param int|float $number diff --git a/src/Coduo/PHPHumanizer/NumberHumanizer.php b/src/Coduo/PHPHumanizer/NumberHumanizer.php index b2354a9..886a2d5 100644 --- a/src/Coduo/PHPHumanizer/NumberHumanizer.php +++ b/src/Coduo/PHPHumanizer/NumberHumanizer.php @@ -18,10 +18,8 @@ final class NumberHumanizer public static function ordinalize($number, $locale = 'en') { $ordinal = new Ordinal($number, $locale); - if ($ordinal->isPrefix()) { - return (string) $ordinal.$number; - } - else return (string) $number.$ordinal; + + return (string) ($ordinal->isPrefix()) ? $ordinal.$number : $number.$ordinal; } /** @@ -33,6 +31,7 @@ public static function ordinalize($number, $locale = 'en') public static function ordinal($number, $locale = 'en') { $ordinal = new Ordinal($number, $locale); + return (string) $ordinal; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php index 5b7ebb7..cec3754 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php @@ -6,17 +6,22 @@ final class EnStrategy implements StrategyInterface { - /** {@inheritdoc}*/ - public function isPrefix(){ - return False; + /** + * {@inheritdoc} + */ + public function isPrefix() + { + return false; } - /** {@inheritdoc} */ + /** + * {@inheritdoc} + */ public function ordinalIndicator($number) { $absNumber = abs((integer) $number); - if (in_array(($absNumber % 100), array(11, 12, 13))) { + if (in_array(($absNumber % 100), array(11, 12, 13), true)) { return 'th'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php index e4ba1e4..951971e 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php @@ -6,12 +6,17 @@ final class IdStrategy implements StrategyInterface { - /** {@inheritdoc}*/ - public function isPrefix(){ - return True; + /** + * {@inheritdoc} + */ + public function isPrefix() + { + return true; } - - /** {@inheritdoc} */ + + /** + * {@inheritdoc} + */ public function ordinalIndicator($number) { return 'ke-'; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php index 4390130..c7f47ee 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php @@ -6,12 +6,17 @@ final class NlStrategy implements StrategyInterface { - /** {@inheritdoc}*/ - public function isPrefix(){ + /** + * {@inheritdoc} + */ + public function isPrefix() + { return False; } - /** {@inheritdoc} */ + /** + * {@inheritdoc} + */ public function ordinalIndicator($number) { return 'e'; diff --git a/src/Coduo/PHPHumanizer/StringHumanizer.php b/src/Coduo/PHPHumanizer/StringHumanizer.php index eb158f3..686fe59 100644 --- a/src/Coduo/PHPHumanizer/StringHumanizer.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -58,6 +58,10 @@ public static function truncateHtml($text, $charactersCount, $allowedTags = '', */ public static function removeShortcodes($text) { + if (!class_exists('Thunder\Shortcode\Processor\Processor')) { + throw new \RuntimeException("Please add \"thunderer/shortcode\": ~0.5 to composer.json first"); + } + $processor = new ShortcodeProcessor(); return $processor->removeShortcodes($text); @@ -69,6 +73,10 @@ public static function removeShortcodes($text) */ public static function removeShortcodeTags($text) { + if (!class_exists('Thunder\Shortcode\Processor\Processor')) { + throw new \RuntimeException("Please add \"thunderer/shortcode\": ~0.5 to composer.json first"); + } + $processor = new ShortcodeProcessor(); return $processor->removeShortcodeTags($text); From a498026c122ff639779bd3729c9b5bd6698a5a19 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 21 Feb 2016 13:41:15 +0100 Subject: [PATCH 097/193] Added ext-inl to composer suggest --- composer.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/composer.json b/composer.json index 78a33d6..e5b34bb 100644 --- a/composer.json +++ b/composer.json @@ -38,5 +38,8 @@ "branch-alias": { "dev-master": "2.1-dev" } + }, + "suggest": { + "ext-intl": "Required if you are going to use humanizer with other locales than en_EN" } } From 3a7e7ea5cabcef4c60f4a96df555177252af71e7 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 21 Feb 2016 13:42:51 +0100 Subject: [PATCH 098/193] Removed symfony/intl extension from required extensions --- composer.json | 1 - 1 file changed, 1 deletion(-) diff --git a/composer.json b/composer.json index e5b34bb..5cf4e37 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,6 @@ ], "require": { "php": ">=5.3.0", - "symfony/intl": "^2.3|^3.0", "symfony/config": "^2.3|^3.0", "symfony/translation": "^2.3|^3.0", "symfony/yaml": "^2.3|^3.0" From 211d0322b20f4c2f5f395d2de6199312c23246aa Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 21 Feb 2016 13:44:55 +0100 Subject: [PATCH 099/193] Fixed typo in suggest extension --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 5cf4e37..9d0b3bc 100644 --- a/composer.json +++ b/composer.json @@ -39,6 +39,6 @@ } }, "suggest": { - "ext-intl": "Required if you are going to use humanizer with other locales than en_EN" + "ext-intl": "Required if you are going to use humanizer with different locales than en_EN" } } From 4f83a621ca00e75c2ba5887212075688ee81996f Mon Sep 17 00:00:00 2001 From: Evgeniy Zatsepin <7dizzy7@gmail.com> Date: Thu, 4 Aug 2016 13:30:08 +0300 Subject: [PATCH 100/193] Fix russian translation (#80) --- src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml | 2 +- tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml index ca33639..ecbcaec 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml @@ -8,7 +8,7 @@ minute: past: "%count% минуту назад|%count% минуты назад|%count% минут назад" future: "через %count% минуту|через %count% минуты|через %count% минут" hour: - past: "%count% час назад|через %count% часа|%count% часов назад" + past: "%count% час назад|%count% часа назад|%count% часов назад" future: "через %count% час|через %count% часа|через %count% часов" day: past: "%count% день назад|%count% дня назад|%count% дней назад" diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index b66d834..3c163fd 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -127,6 +127,7 @@ public function humanizeDataProvider() array("2014-04-26 13:00:00", "2014-04-26 14:00:00", 'через 1 час', 'ru'), array("2014-04-26 13:00:00", "2014-04-26 15:00:00", 'через 2 часа', 'ru'), array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 час назад', 'ru'), + array("2014-04-26 14:00:00", "2014-04-26 12:00:00", '2 часа назад', 'ru'), array("2014-04-26", "2014-04-25", '1 день назад', 'ru'), array("2014-04-26", "2014-04-24", '2 дня назад', 'ru'), array("2014-04-26", "2014-04-28", 'через 2 дня', 'ru'), From 150a79433d79a1c202d9b765d15ee1038316fda2 Mon Sep 17 00:00:00 2001 From: Ryo Shibayama Date: Sun, 7 Aug 2016 01:59:43 +0900 Subject: [PATCH 101/193] Support Japanese language (#85) * Add difference.ja.yml * Add oxford.ja.yml * Add Japanese language test cases * Update README.md * Delete trailing space --- README.md | 1 + .../Resources/translations/difference.ja.yml | 35 +++++++++++++++++++ .../Resources/translations/oxford.ja.yml | 3 ++ .../Tests/CollectionHumanizerTest.php | 7 ++++ .../Tests/DateTimeHumanizerTest.php | 31 +++++++++++++++- 5 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.yml diff --git a/README.md b/README.md index c6a315b..a520f83 100644 --- a/README.md +++ b/README.md @@ -240,6 +240,7 @@ Currently we support following languages: * [Ukrainian] (src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml) * [Danish] (src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml) * [Thai] (src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml) +* [Japanese] (src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml) # Credits diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml new file mode 100644 index 0000000..f6dd453 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] たった今" + future: "[0,Inf] たった今" +second: + past: "{1} %count% 秒前|[2,Inf] %count% 秒前" + future: "{1} %count% 秒後|[2,Inf] %count% 秒後" +minute: + past: "{1} %count% 分前|[2,Inf] %count% 分前" + future: "{1} %count% 分後|[2,Inf] %count% 分後" +hour: + past: "{1} %count% 時間前|[2,Inf] %count% 時間前" + future: "{1} %count% 時間後|[2,Inf] %count% 時間後" +day: + past: "{1} %count% 日前|[2,Inf] %count% 日前" + future: "{1} %count% 日後|[2,Inf] %count% 日後" +week: + past: "{1} %count% 週間前|[2,Inf] %count% 週間前" + future: "{1} %count% 週間後|[2,Inf] %count% 週間後" +month: + past: "{1} %count% ヶ月前|[2,Inf] %count% ヶ月前" + future: "{1} %count% ヶ月後|[2,Inf] %count% ヶ月後" +year: + past: "{1} %count% 年前|[2,Inf] %count% 年前" + future: "{1} %count% 年後|[2,Inf] %count% 年後" + +compound: + second: "{1} %count% 秒|[2,Inf] %count% 秒" + minute: "{1} %count% 分|[2,Inf] %count% 分" + hour: "{1} %count% 時間|[2,Inf] %count% 時間" + day: "{1} %count% 日|[2,Inf] %count% 日" + week: "{1} %count% 週間|[2,Inf] %count% 週間" + month: "{1} %count% 月|[2,Inf] %count% 月" + year: "{1} %count% 年|[2,Inf] %count% 年" + past: "%value%前" + future: "%value%後" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.yml new file mode 100644 index 0000000..378f91a --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.yml @@ -0,0 +1,3 @@ +only_two: "%first% と %second%" +comma_separated: "%list% と %last%" +comma_separated_with_limit: "{1} %list% ともうひとり|[2,Inf] %list% ともう %count% 人" diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php index f6b0c2d..d759af8 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php @@ -71,6 +71,13 @@ public function oxfordCollectionProvider() array(array("Michal", "Norbert", "Lukasz"), 2, 'th', 'Michal, Norbert และอีก 1'), array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'th', 'Michal, Norbert และอีก 2'), array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'th', 'Michal, Norbert, Lukasz และ Pawel'), + + // Japanese + array(array("Michal"), null, 'ja', 'Michal'), + array(array("Michal", "Norbert"), null, 'ja', 'Michal と Norbert'), + array(array("Michal", "Norbert", "Lukasz"), 2, 'ja', 'Michal, Norbert ともうひとり'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'ja', 'Michal, Norbert ともう 2 人'), + array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'ja', 'Michal, Norbert, Lukasz と Pawel'), ); } } diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index 3c163fd..9ae9e94 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -156,7 +156,7 @@ public function humanizeDataProvider() array("2014-05-01", "2014-04-01", '1 bulan yang lalu', 'id'), array("2015-05-01", "2014-04-01", '1 tahun yang lalu', 'id'), array("2014-05-01", "2016-04-01", '2 tahun dari sekarang', 'id'), - + // Spanish array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'ahora mismo', 'es'), array("2014-04-26 13:00:00", "2014-04-26 13:00:05", 'dentro de 5 segundos', 'es'), @@ -232,6 +232,25 @@ public function humanizeDataProvider() array("2014-05-01", "2014-04-01", '1 เดือนที่แล้ว', 'th'), array("2015-05-01", "2014-04-01", '1 ปีที่แล้ว', 'th'), array("2014-05-01", "2016-04-01", 'อีก 2 ปี', 'th'), + + // Japanese + array("2014-04-26 13:00:00", "2014-04-26 13:00:00", 'たった今', 'ja'), + array("2014-04-26 13:00:00", "2014-04-26 13:00:05", '5 秒後', 'ja'), + array("2014-04-26 13:00:00", "2014-04-26 12:59:00", '1 分前', 'ja'), + array("2014-04-26 13:00:00", "2014-04-26 12:45:00", '15 分前', 'ja'), + array("2014-04-26 13:00:00", "2014-04-26 13:15:00", '15 分後', 'ja'), + array("2014-04-26 13:00:00", "2014-04-26 14:00:00", '1 時間後', 'ja'), + array("2014-04-26 13:00:00", "2014-04-26 15:00:00", '2 時間後', 'ja'), + array("2014-04-26 13:00:00", "2014-04-26 12:00:00", '1 時間前', 'ja'), + array("2014-04-26", "2014-04-25", '1 日前', 'ja'), + array("2014-04-26", "2014-04-24", '2 日前', 'ja'), + array("2014-04-26", "2014-04-28", '2 日後', 'ja'), + array("2014-04-01", "2014-04-15", '2 週間後', 'ja'), + array("2014-04-15", "2014-04-07", '1 週間前', 'ja'), + array("2014-01-01", "2014-04-01", '3 ヶ月後', 'ja'), + array("2014-05-01", "2014-04-01", '1 ヶ月前', 'ja'), + array("2015-05-01", "2014-04-01", '1 年前', 'ja'), + array("2014-05-01", "2016-04-01", '2 年後', 'ja'), ); } @@ -410,6 +429,16 @@ public function preciseDifferenceDataProvider() array("2014-04-26 13:00:00", "2014-04-28 23:00:00", 'อีก 2 วัน, 10 ชั่วโมง', 'th'), array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 วัน, 1 ชั่วโมง, 40 นาทีที่แล้ว', 'th'), array("2014-04-26 13:00:00", "2016-04-27 13:00:00", 'อีก 2 ปี, 1 วัน', 'th'), + + // Japanese + array("2014-04-26 13:00:00", "2014-04-26 12:58:15", '1 分, 45 秒前', 'ja'), + array("2014-04-26 13:00:00", "2014-04-26 11:20:00", '1 時間, 40 分前', 'ja'), + array("2014-04-26 13:00:00", "2014-04-27 13:15:00", '1 日, 15 分後', 'ja'), + array("2014-04-26 13:00:00", "2014-05-03 15:00:00", '7 日, 2 時間後', 'ja'), + array("2014-04-26 13:00:00", "2015-04-28 17:00:00", '1 年, 2 日, 4 時間後', 'ja'), + array("2014-04-26 13:00:00", "2014-04-28 23:00:00", '2 日, 10 時間後', 'ja'), + array("2014-04-26 13:00:00", "2014-04-25 11:20:00", '1 日, 1 時間, 40 分前', 'ja'), + array("2014-04-26 13:00:00", "2016-04-27 13:00:00", '2 年, 1 日後', 'ja'), ); } } From a62245a425be3034474f5dfe0cd58b91f6562692 Mon Sep 17 00:00:00 2001 From: Martin Butt Date: Mon, 8 Aug 2016 02:48:00 -0700 Subject: [PATCH 102/193] Added PFIGS ordinals (#84) * Added PFIGS ordinals * Typo --- .../Resources/Ordinal/DeStrategy.php | 22 +++ .../Resources/Ordinal/EsStrategy.php | 22 +++ .../Resources/Ordinal/FrStrategy.php | 28 +++ .../Resources/Ordinal/ItStrategy.php | 22 +++ .../Resources/Ordinal/PtStrategy.php | 22 +++ .../Tests/NumberHumanizerTest.php | 173 ++++++++++++++++++ 6 files changed, 289 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php create mode 100644 src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php create mode 100644 src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php create mode 100644 src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php create mode 100644 src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php new file mode 100644 index 0000000..f6aa4e1 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php @@ -0,0 +1,22 @@ +assertEquals($expected, NumberHumanizer::ordinal($number, 'id')); } + /** + * @dataProvider ordinalSuffixPtEsItProvider + * @param $expected + * @param $number + */ + public function test_return_ordinal_suffix_spanish($expected, $number) + { + $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'es')); + } + + /** + * @dataProvider ordinalSuffixPtEsItProvider + * @param $expected + * @param $number + */ + public function test_return_ordinal_suffix_italian($expected, $number) + { + $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'it')); + } + + /** + * @dataProvider ordinalSuffixGermanProvider + * @param $expected + * @param $number + */ + public function test_return_ordinal_suffix_german($expected, $number) + { + $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'de')); + } + + /** + * @dataProvider ordinalSuffixFrenchProvider + * @param $expected + * @param $number + */ + public function test_return_ordinal_suffix_french($expected, $number) + { + $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'fr')); + } + /** * @dataProvider ordinalizeDataProvider * @depends test_return_ordinal_suffix @@ -73,6 +113,56 @@ public function test_ordinalize_numbers_indonesian($expected, $number) $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'id')); } + /** + * @dataProvider ordinalizeDataPtEsItProvider + * @param $expected + * @param $number + */ + public function test_ordinalize_numbers_portuguese($expected, $number) + { + $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'pt')); + } + + /** + * @dataProvider ordinalizeDataPtEsItProvider + * @param $expected + * @param $number + */ + public function test_ordinalize_numbers_spanish($expected, $number) + { + $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'es')); + } + + /** + * @dataProvider ordinalizeDataPtEsItProvider + * @param $expected + * @param $number + */ + public function test_ordinalize_numbers_italian($expected, $number) + { + $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'it')); + } + + /** + * @dataProvider ordinalizeDataGermanProvider + * @param $expected + * @param $number + */ + public function test_ordinalize_numbers_german($expected, $number) + { + $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'de')); + } + + /** + * @dataProvider ordinalizeDataFrenchProvider + * @param $expected + * @param $number + */ + public function test_ordinalize_numbers_french($expected, $number) + { + $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'fr')); + } + /** * @dataProvider binarySuffixDataProvider * @@ -270,6 +360,89 @@ public function ordinalizeDataIndonesianProvider() ); } + /** + * @return array + */ + public function ordinalizeDataPtEsItProvider() + { + return array( + array('1o', 1), + array('2o', 2), + array('23o', 23), + array('1002o', 1002), + array('-111o', -111), + ); + } + + /** + * @return array + */ + public function ordinalizeDataGermanProvider() + { + return array( + array('1.', 1), + array('2.', 2), + array('23.', 23), + array('1002.', 1002), + array('-111.', -111), + ); + } + + /** + * @return array + */ + public function ordinalizeDataFrenchProvider() + { + return array( + array('1er', 1), + array('2e', 2), + array('23e', 23), + array('1002e', 1002), + array('-111e', -111), + ); + } + /** + * @return array + */ + public function ordinalSuffixPtEsItProvider() + { + return array( + array('o', 1), + array('o', 2), + array('o', 23), + array('o', 1002), + array('o', -111), + ); + } + + /** + * @return array + */ + public function ordinalSuffixGermanProvider() + { + return array( + array('.', 1), + array('.', 2), + array('.', 23), + array('.', 1002), + array('.', -111), + ); + } + + /** + * @return array + */ + public function ordinalSuffixFrenchProvider() + { + return array( + array('er', 1), + array('e', 2), + array('e', 23), + array('e', 1002), + array('e', -111), + ); + } + /** * @return array */ From 5cd850b49b1ca30811f24c5c1a9b0d6e4cac9fba Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Tue, 9 Aug 2016 13:06:52 +0200 Subject: [PATCH 103/193] Update composer.json --- composer.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 9d0b3bc..1615773 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,7 @@ { "name": "coduo/php-humanizer", "type": "library", + "description": "Humanize values that are readable only for developers", "keywords": ["php", "humanize", "humanizer"], "license": "MIT", "authors": [ @@ -39,6 +40,6 @@ } }, "suggest": { - "ext-intl": "Required if you are going to use humanizer with different locales than en_EN" + "ext-intl": "Required if you are going to use humanizer with locales different than en_EN" } } From ae4d19711fa8063a4aab3920753a01ff56589bd9 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Tue, 9 Aug 2016 21:13:50 +0200 Subject: [PATCH 104/193] Added test case with 0 at the end of the number (#86) --- tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php index 31b5f66..9c4ab84 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php @@ -289,7 +289,7 @@ public function ordinalIndicatorProvider() array('th', -111), ); } - + /** * @return array */ @@ -455,6 +455,7 @@ public function binarySuffixDataProvider() array("1 kB", 1024), array("1 kB", 1025), array("1.5 kB", 1536), + array("84.4 kB", 86450), array("5 MB", 1048576 * 5), array("2 GB", 1073741824 * 2), array("3 TB", 1099511627776 * 3), From c47dd0d5bf5ea73609fa28f3e4984a27468519fe Mon Sep 17 00:00:00 2001 From: Foster Snowhill Date: Wed, 12 Oct 2016 21:38:48 +0300 Subject: [PATCH 105/193] Force $binaryPrefixes array ordering on 32-bit systems, fixes #83 (#87) --- src/Coduo/PHPHumanizer/String/BinarySuffix.php | 6 ++++++ src/Coduo/PHPHumanizer/String/MetricSuffix.php | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index ca13f8e..4d1fee5 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -47,6 +47,12 @@ public function __construct($number, $locale = 'en', $precision = null) $this->number = (int) $number; $this->locale = $locale; + + /* + * Workaround for 32-bit systems which ignore array ordering when + * dropping values over 2^32-1 + */ + krsort($this->binaryPrefixes); } public function convert() diff --git a/src/Coduo/PHPHumanizer/String/MetricSuffix.php b/src/Coduo/PHPHumanizer/String/MetricSuffix.php index c61bf15..2e818d9 100644 --- a/src/Coduo/PHPHumanizer/String/MetricSuffix.php +++ b/src/Coduo/PHPHumanizer/String/MetricSuffix.php @@ -42,6 +42,12 @@ public function __construct($number, $locale = 'en') $this->number = (int) $number; $this->locale = $locale; + + /* + * Workaround for 32-bit systems which ignore array ordering when + * dropping values over 2^32-1 + */ + krsort($this->binaryPrefixes); } public function convert() From 8bff003a9c9d1b267752f2ed3b7b10402a2a3226 Mon Sep 17 00:00:00 2001 From: Vinicius Reis Date: Thu, 27 Oct 2016 05:11:03 -0200 Subject: [PATCH 106/193] remove unnecessary echo (#89) --- README.md | 148 +++++++++++++++++++++++++++--------------------------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/README.md b/README.md index a520f83..04d2502 100644 --- a/README.md +++ b/README.md @@ -25,9 +25,9 @@ composer require coduo/php-humanizer ```php use Coduo\PHPHumanizer\StringHumanizer; -echo StringHumanizer::humanize('field_name'); // "Field Name" -echo StringHumanizer::humanize('user_id'); // "User" -echo StringHumanizer::humanize('field_name', false); // "field name" +StringHumanizer::humanize('field_name'); // "Field Name" +StringHumanizer::humanize('user_id'); // "User" +StringHumanizer::humanize('field_name', false); // "field name" ``` **Truncate** @@ -39,10 +39,10 @@ use Coduo\PHPHumanizer\StringHumanizer; $text = 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.'; -echo StringHumanizer::truncate($text, 8); // "Lorem ipsum" -echo StringHumanizer::truncate($text, 8, '...'); // "Lorem ipsum..." -echo StringHumanizer::truncate($text, 2); // "Lorem" -echo StringHumanizer::truncate($text, strlen($text)); // "Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc." +StringHumanizer::truncate($text, 8); // "Lorem ipsum" +StringHumanizer::truncate($text, 8, '...'); // "Lorem ipsum..." +StringHumanizer::truncate($text, 2); // "Lorem" +StringHumanizer::truncate($text, strlen($text)); // "Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc." ``` @@ -55,10 +55,10 @@ use Coduo\PHPHumanizer\StringHumanizer; $text = '

HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create web pages.[1] Web browsers can read HTML files and render them into visible or audible web pages. HTML describes the structure of a website semantically along with cues for presentation, making it a markup language, rather than a programming language.

'; -echo StringHumanizer::truncateHtml($text, 3); // "HyperText" -echo StringHumanizer::truncateHtml($text, 12, ''); // "HyperText Markup" -echo StringHumanizer::truncateHtml($text, 50, '', '...'); // "HyperText Markup Language, commonly referred to as..." -echo StringHumanizer::truncateHtml($text, 75, '', '...'); // 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...' +StringHumanizer::truncateHtml($text, 3); // "HyperText" +StringHumanizer::truncateHtml($text, 12, ''); // "HyperText Markup" +StringHumanizer::truncateHtml($text, 50, '', '...'); // "HyperText Markup Language, commonly referred to as..." +StringHumanizer::truncateHtml($text, 75, '', '...'); // 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...' ``` @@ -69,12 +69,12 @@ echo StringHumanizer::truncateHtml($text, 75, '', ```php use Coduo\PHPHumanizer\NumberHumanizer; -echo NumberHumanizer::ordinalize(0); // "0th" -echo NumberHumanizer::ordinalize(1); // "1st" -echo NumberHumanizer::ordinalize(2); // "2nd" -echo NumberHumanizer::ordinalize(23); // "23rd" -echo NumberHumanizer::ordinalize(1002, 'nl'); // "1002e" -echo NumberHumanizer::ordinalize(-111); // "-111th" +NumberHumanizer::ordinalize(0); // "0th" +NumberHumanizer::ordinalize(1); // "1st" +NumberHumanizer::ordinalize(2); // "2nd" +NumberHumanizer::ordinalize(23); // "23rd" +NumberHumanizer::ordinalize(1002, 'nl'); // "1002e" +NumberHumanizer::ordinalize(-111); // "-111th" ``` @@ -83,25 +83,25 @@ echo NumberHumanizer::ordinalize(-111); // "-111th" ```php use Coduo\PHPHumanizer\NumberHumanizer; -echo NumberHumanizer::ordinal(0); // "th" -echo NumberHumanizer::ordinal(1); // "st" -echo NumberHumanizer::ordinal(2); // "nd" -echo NumberHumanizer::ordinal(23); // "rd" -echo NumberHumanizer::ordinal(1002); // "nd" -echo NumberHumanizer::ordinal(-111, 'nl'); // "e" +NumberHumanizer::ordinal(0); // "th" +NumberHumanizer::ordinal(1); // "st" +NumberHumanizer::ordinal(2); // "nd" +NumberHumanizer::ordinal(23); // "rd" +NumberHumanizer::ordinal(1002); // "nd" +NumberHumanizer::ordinal(-111, 'nl'); // "e" ``` **Roman numbers** ```php use Coduo\PHPHumanizer\NumberHumanizer; -echo NumberHumanizer::toRoman(1); // "I" -echo NumberHumanizer::toRoman(5); // "V" -echo NumberHumanizer::toRoman(1300); // "MCCC" +NumberHumanizer::toRoman(1); // "I" +NumberHumanizer::toRoman(5); // "V" +NumberHumanizer::toRoman(1300); // "MCCC" -echo NumberHumanizer::fromRoman("MMMCMXCIX"); // 3999 -echo NumberHumanizer::fromRoman("V"); // 5 -echo NumberHumanizer::fromRoman("CXXV"); // 125 +NumberHumanizer::fromRoman("MMMCMXCIX"); // 3999 +NumberHumanizer::fromRoman("V"); // 5 +NumberHumanizer::fromRoman("CXXV"); // 125 ``` **Binary Suffix** @@ -111,15 +111,15 @@ Convert a number of bytes in to the highest applicable data unit ```php use Coduo\PHPHumanizer\NumberHumanizer; -echo NumberHumanizer::binarySuffix(0); // "0 bytes" -echo NumberHumanizer::binarySuffix(1); // "1 bytes" -echo NumberHumanizer::binarySuffix(1024); // "1 kB" -echo NumberHumanizer::binarySuffix(1025); // "1 kB" -echo NumberHumanizer::binarySuffix(1536); // "1.5 kB" -echo NumberHumanizer::binarySuffix(1048576 * 5); // "5 MB" -echo NumberHumanizer::binarySuffix(1073741824 * 2); // "2 GB" -echo NumberHumanizer::binarySuffix(1099511627776 * 3); // "3 TB" -echo NumberHumanizer::binarySuffix(1325899906842624); // "1.18 PB" +NumberHumanizer::binarySuffix(0); // "0 bytes" +NumberHumanizer::binarySuffix(1); // "1 bytes" +NumberHumanizer::binarySuffix(1024); // "1 kB" +NumberHumanizer::binarySuffix(1025); // "1 kB" +NumberHumanizer::binarySuffix(1536); // "1.5 kB" +NumberHumanizer::binarySuffix(1048576 * 5); // "5 MB" +NumberHumanizer::binarySuffix(1073741824 * 2); // "2 GB" +NumberHumanizer::binarySuffix(1099511627776 * 3); // "3 TB" +NumberHumanizer::binarySuffix(1325899906842624); // "1.18 PB" ``` Number can be also formatted for specific locale @@ -127,7 +127,7 @@ Number can be also formatted for specific locale ```php use Coduo\PHPHumanizer\NumberHumanizer; -echo NumberHumanizer::binarySuffix(1536, 'pl'); // "1,5 kB" +NumberHumanizer::binarySuffix(1536, 'pl'); // "1,5 kB" ``` Number can also be humanized with a specific number of decimal places with `preciseBinarySuffix($number, $precision, $locale = 'en')` @@ -136,8 +136,8 @@ The precision parameter must be between 0 and 3. ```php use Coduo\PHPHumanizer\NumberHumanizer; -echo NumberHumanizer::preciseBinarySuffix(1024, 2); // "1.00 kB" -echo NumberHumanizer::preciseBinarySuffix(1325899906842624, 3); // "1.178 PB" +NumberHumanizer::preciseBinarySuffix(1024, 2); // "1.00 kB" +NumberHumanizer::preciseBinarySuffix(1325899906842624, 3); // "1.178 PB" ``` This function also supports locale @@ -145,7 +145,7 @@ This function also supports locale ```php use Coduo\PHPHumanizer\NumberHumanizer; -echo NumberHumanizer::preciseBinarySuffix(1325899906842624, 3, 'pl'); // "1,178 PB" +NumberHumanizer::preciseBinarySuffix(1325899906842624, 3, 'pl'); // "1,178 PB" ``` **Metric Suffix** @@ -153,14 +153,14 @@ echo NumberHumanizer::preciseBinarySuffix(1325899906842624, 3, 'pl'); // "1,178 ```php use Coduo\PHPHumanizer\NumberHumanizer; -echo NumberHumanizer::metricSuffix(-1); // "-1" -echo NumberHumanizer::metricSuffix(0); // "0" -echo NumberHumanizer::metricSuffix(1); // "1" -echo NumberHumanizer::metricSuffix(101); // "101" -echo NumberHumanizer::metricSuffix(1000); // "1k" -echo NumberHumanizer::metricSuffix(1240); // "1.2k" -echo NumberHumanizer::metricSuffix(1240000); // "1.24M" -echo NumberHumanizer::metricSuffix(3500000); // "3.5M" +NumberHumanizer::metricSuffix(-1); // "-1" +NumberHumanizer::metricSuffix(0); // "0" +NumberHumanizer::metricSuffix(1); // "1" +NumberHumanizer::metricSuffix(101); // "101" +NumberHumanizer::metricSuffix(1000); // "1k" +NumberHumanizer::metricSuffix(1240); // "1.2k" +NumberHumanizer::metricSuffix(1240000); // "1.24M" +NumberHumanizer::metricSuffix(3500000); // "3.5M" ``` Number can be also formatted for specific locale @@ -168,7 +168,7 @@ Number can be also formatted for specific locale ```php use Coduo\PHPHumanizer\NumberHumanizer; -echo NumberHumanizer::metricSuffix(1240000, 'pl'); // "1,24M" +NumberHumanizer::metricSuffix(1240000, 'pl'); // "1,24M" ``` ## Collections @@ -178,9 +178,9 @@ echo NumberHumanizer::metricSuffix(1240000, 'pl'); // "1,24M" ```php use Coduo\PHPHumanizer\CollectionHumanizer; -echo CollectionHumanizer::oxford(['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2); // "Michal, Norbert, and 2 others" -echo CollectionHumanizer::oxford(['Michal', 'Norbert', 'Lukasz'], 2); // "Michal, Norbert, and 1 other" -echo CollectionHumanizer::oxford(['Michal', 'Norbert']); // "Michal and Norbert" +CollectionHumanizer::oxford(['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2); // "Michal, Norbert, and 2 others" +CollectionHumanizer::oxford(['Michal', 'Norbert', 'Lukasz'], 2); // "Michal, Norbert, and 1 other" +CollectionHumanizer::oxford(['Michal', 'Norbert']); // "Michal and Norbert" ``` Oxford is using translator component, so you can use whatever string format you like. @@ -192,23 +192,23 @@ Oxford is using translator component, so you can use whatever string format you ```php use Coduo\PHPHumanizer\DateTimeHumanizer; -echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:00:00")); // just now -echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:00:05")); // 5 seconds from now -echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:59:00")); // 1 minute ago -echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:45:00")); // 15 minutes ago -echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:15:00")); // 15 minutes from now -echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 14:00:00")); // 1 hour from now -echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 15:00:00")); // 2 hours from now -echo DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:00:00")); // 1 hour ago -echo DateTimeHumanizer::difference(new \DateTime("2014-04-26"), new \DateTime("2014-04-25")); // 1 day ago -echo DateTimeHumanizer::difference(new \DateTime("2014-04-26"), new \DateTime("2014-04-24")); // 2 days ago -echo DateTimeHumanizer::difference(new \DateTime("2014-04-26"), new \DateTime("2014-04-28")); // 2 days from now -echo DateTimeHumanizer::difference(new \DateTime("2014-04-01"), new \DateTime("2014-04-15")); // 2 weeks from now -echo DateTimeHumanizer::difference(new \DateTime("2014-04-15"), new \DateTime("2014-04-07")); // 1 week ago -echo DateTimeHumanizer::difference(new \DateTime("2014-01-01"), new \DateTime("2014-04-01")); // 3 months from now -echo DateTimeHumanizer::difference(new \DateTime("2014-05-01"), new \DateTime("2014-04-01")); // 1 month ago -echo DateTimeHumanizer::difference(new \DateTime("2015-05-01"), new \DateTime("2014-04-01")); // 1 year ago -echo DateTimeHumanizer::difference(new \DateTime("2014-05-01"), new \DateTime("2016-04-01")); // 2 years from now +DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:00:00")); // just now +DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:00:05")); // 5 seconds from now +DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:59:00")); // 1 minute ago +DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:45:00")); // 15 minutes ago +DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:15:00")); // 15 minutes from now +DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 14:00:00")); // 1 hour from now +DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 15:00:00")); // 2 hours from now +DateTimeHumanizer::difference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:00:00")); // 1 hour ago +DateTimeHumanizer::difference(new \DateTime("2014-04-26"), new \DateTime("2014-04-25")); // 1 day ago +DateTimeHumanizer::difference(new \DateTime("2014-04-26"), new \DateTime("2014-04-24")); // 2 days ago +DateTimeHumanizer::difference(new \DateTime("2014-04-26"), new \DateTime("2014-04-28")); // 2 days from now +DateTimeHumanizer::difference(new \DateTime("2014-04-01"), new \DateTime("2014-04-15")); // 2 weeks from now +DateTimeHumanizer::difference(new \DateTime("2014-04-15"), new \DateTime("2014-04-07")); // 1 week ago +DateTimeHumanizer::difference(new \DateTime("2014-01-01"), new \DateTime("2014-04-01")); // 3 months from now +DateTimeHumanizer::difference(new \DateTime("2014-05-01"), new \DateTime("2014-04-01")); // 1 month ago +DateTimeHumanizer::difference(new \DateTime("2015-05-01"), new \DateTime("2014-04-01")); // 1 year ago +DateTimeHumanizer::difference(new \DateTime("2014-05-01"), new \DateTime("2016-04-01")); // 2 years from now ``` **Precise difference** @@ -216,9 +216,9 @@ echo DateTimeHumanizer::difference(new \DateTime("2014-05-01"), new \DateTime("2 ```php use Coduo\PHPHumanizer\DateTimeHumanizer; -echo DateTimeHumanizer::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-25 11:20:00")); // 1 day, 1 hour, 40 minutes ago -echo DateTimeHumanizer::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2015-04-28 17:00:00")); // 1 year, 2 days, 4 hours from now -echo DateTimeHumanizer::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2016-04-27 13:00:00")); // 2 years, 1 day from now +DateTimeHumanizer::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-25 11:20:00")); // 1 day, 1 hour, 40 minutes ago +DateTimeHumanizer::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2015-04-28 17:00:00")); // 1 year, 2 days, 4 hours from now +DateTimeHumanizer::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2016-04-27 13:00:00")); // 2 years, 1 day from now ``` Currently we support following languages: From 3853fdb8debc130a2438bbc8130dca0943bd0b19 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Tue, 29 Jan 2019 15:15:22 +0100 Subject: [PATCH 107/193] Feature/update (#104) * Updated dependencies, added php-cs-fixer * CS fixes * Fixed failing tests * Updated readme * Fixed readme * Updated branch alias * Removed prefer-lower flag from travis matrix * Updated minimum required php version --- .gitignore | 3 +- .php_cs | 18 + .travis.yml | 18 +- README.md | 16 +- composer.json | 11 +- .../PHPHumanizer/Collection/Formatter.php | 32 +- src/Coduo/PHPHumanizer/Collection/Oxford.php | 2 + .../PHPHumanizer/CollectionHumanizer.php | 2 + .../PHPHumanizer/DateTime/Difference.php | 10 +- .../DateTime/Difference/CompoundResult.php | 2 + src/Coduo/PHPHumanizer/DateTime/Formatter.php | 6 +- .../DateTime/PreciseDifference.php | 6 +- .../DateTime/PreciseFormatter.php | 8 +- src/Coduo/PHPHumanizer/DateTime/Unit.php | 2 + src/Coduo/PHPHumanizer/DateTime/Unit/Day.php | 2 + src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php | 2 + .../PHPHumanizer/DateTime/Unit/JustNow.php | 2 + .../PHPHumanizer/DateTime/Unit/Minute.php | 2 + .../PHPHumanizer/DateTime/Unit/Month.php | 2 + .../PHPHumanizer/DateTime/Unit/Second.php | 2 + src/Coduo/PHPHumanizer/DateTime/Unit/Week.php | 2 + src/Coduo/PHPHumanizer/DateTime/Unit/Year.php | 2 + src/Coduo/PHPHumanizer/DateTimeHumanizer.php | 2 + src/Coduo/PHPHumanizer/Number/Ordinal.php | 4 +- .../PHPHumanizer/Number/Ordinal/Builder.php | 8 +- .../Number/Ordinal/StrategyInterface.php | 2 + .../PHPHumanizer/Number/RomanNumeral.php | 10 +- src/Coduo/PHPHumanizer/NumberHumanizer.php | 2 + .../Resources/Ordinal/DeStrategy.php | 2 + .../Resources/Ordinal/EnStrategy.php | 8 +- .../Resources/Ordinal/EsStrategy.php | 2 + .../Resources/Ordinal/FrStrategy.php | 4 +- .../Resources/Ordinal/IdStrategy.php | 2 + .../Resources/Ordinal/ItStrategy.php | 2 + .../Resources/Ordinal/NlStrategy.php | 4 +- .../Resources/Ordinal/PtStrategy.php | 2 + .../PHPHumanizer/String/BinarySuffix.php | 16 +- src/Coduo/PHPHumanizer/String/Breakpoint.php | 2 + .../PHPHumanizer/String/HtmlTruncate.php | 24 +- src/Coduo/PHPHumanizer/String/Humanize.php | 10 +- .../PHPHumanizer/String/MetricSuffix.php | 10 +- .../String/ShortcodeProcessor.php | 2 + .../PHPHumanizer/String/TextTruncate.php | 6 +- .../PHPHumanizer/String/TruncateInterface.php | 2 + .../PHPHumanizer/String/WordBreakpoint.php | 12 +- src/Coduo/PHPHumanizer/StringHumanizer.php | 12 +- src/Coduo/PHPHumanizer/Translator/Builder.php | 4 +- .../Tests/CollectionHumanizerTest.php | 96 +-- .../Tests/DateTimeHumanizerTest.php | 680 +++++++++--------- .../Tests/NumberHumanizerTest.php | 302 ++++---- .../Tests/StringHumanizerTest.php | 110 +-- tests/bootstrap.php | 4 +- 52 files changed, 809 insertions(+), 689 deletions(-) create mode 100644 .php_cs diff --git a/.gitignore b/.gitignore index a3f78a6..f0bf8a2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ vendor/ bin/ composer.lock -composer.phar \ No newline at end of file +composer.phar +.php_cs.cache \ No newline at end of file diff --git a/.php_cs b/.php_cs new file mode 100644 index 0000000..5983888 --- /dev/null +++ b/.php_cs @@ -0,0 +1,18 @@ +setRules([ + '@PSR2' => true, + 'declare_strict_types' => true, + 'array_syntax' => ['syntax' => 'short'], + 'blank_line_after_opening_tag' => true, + 'single_blank_line_before_namespace' => true, + 'no_unused_imports' => true, + 'single_quote' => true, + 'native_function_invocation' => true + ]) + ->setFinder( + PhpCsFixer\Finder::create() + ->in(__DIR__ . '/src') + ->in(__DIR__ . '/tests') + )->setRiskyAllowed(true) + ->setUsingCache(false); \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index e54e070..35d2afa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,26 +5,22 @@ sudo: false cache: directories: - $HOME/.composer/cache - + matrix: include: - - php: 5.3 - env: DEPENDENCIES='low' - - php: 5.3 - - php: 5.4 - - php: 5.5 - - php: 5.6 - php: 7.0 - - php: hhvm + - php: 7.1 + - php: 7.2 + - php: 7.3 before_install: - composer self-update install: - export COMPOSER_ROOT_VERSION=dev-master - - if [ "$DEPENDENCIES" != "low" ]; then composer update; fi; - - if [ "$DEPENDENCIES" == "low" ]; then composer update --prefer-lowest; fi; + - composer update script: - ./bin/phpspec run --format=pretty - - ./bin/phpunit + - ./bin/phpunit + - ./bin/php-cs-fixer fix -v --dry-run \ No newline at end of file diff --git a/README.md b/README.md index 04d2502..d530903 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -#PHP Humanizer +# PHP Humanizer [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=master)](https://travis-ci.org/coduo/php-humanizer) [![Latest Stable Version](https://poser.pugx.org/coduo/php-humanizer/v/stable)](https://packagist.org/packages/coduo/php-humanizer) @@ -6,9 +6,19 @@ [![Latest Unstable Version](https://poser.pugx.org/coduo/php-humanizer/v/unstable)](https://packagist.org/packages/coduo/php-humanizer) [![License](https://poser.pugx.org/coduo/php-humanizer/license)](https://packagist.org/packages/coduo/php-humanizer) +### Tests +* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=master)](https://travis-ci.org/coduo/php-humanizer) - master (3.0) +* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=2.0)](https://travis-ci.org/coduo/php-humanizer) - 2.0 +* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=1.0)](https://travis-ci.org/coduo/php-humanizer) - 1.0 + +[Readme for master (3.0) version](https://github.com/coduo/php-humanizer/tree/master/README.md) +[Readme for 2.0 version](https://github.com/coduo/php-matcher/tree/2.0/README.md) +[Readme for 1.0 version](https://github.com/coduo/php-matcher/tree/1.0/README.md) + + Humanize values to make them readable for regular people ;) -#Installation +# Installation Run the following command: @@ -16,7 +26,7 @@ Run the following command: composer require coduo/php-humanizer ``` -#Usage +# Usage ## Text diff --git a/composer.json b/composer.json index 1615773..def4c0a 100644 --- a/composer.json +++ b/composer.json @@ -15,10 +15,11 @@ } ], "require": { - "php": ">=5.3.0", - "symfony/config": "^2.3|^3.0", - "symfony/translation": "^2.3|^3.0", - "symfony/yaml": "^2.3|^3.0" + "php": ">=7.0.0", + "symfony/config": "^2.3|^3.0|^4.0", + "symfony/translation": "^2.3|^3.0|^4.0", + "symfony/yaml": "^2.3|^3.0|^4.0", + "friendsofphp/php-cs-fixer": "^2.14" }, "require-dev": { "thunderer/shortcode": "~0.5", @@ -36,7 +37,7 @@ }, "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "3.0-dev" } }, "suggest": { diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php index 926a166..60f51c4 100644 --- a/src/Coduo/PHPHumanizer/Collection/Formatter.php +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -1,5 +1,7 @@ translator->transChoice('comma_separated_with_limit', $moreCount, array( - '%list%' => implode(', ', $display), + return $this->translator->transChoice('comma_separated_with_limit', $moreCount, [ + '%list%' => \implode(', ', $display), '%count%' => $moreCount, - ), $this->catalogue); + ], $this->catalogue); } /** @@ -77,14 +79,14 @@ private function formatCommaSeparatedWithLimit($collection, $limit, $count) */ private function formatCommaSeparated($collection, $count) { - $display = array_map(function ($element) { + $display = \array_map(function ($element) { return (string) $element; - }, array_slice($collection, 0, $count - 1)); + }, \array_slice($collection, 0, $count - 1)); - return $this->translator->trans('comma_separated', array( - '%list%' => implode(', ', $display), - '%last%' => (string) end($collection), - ), $this->catalogue); + return $this->translator->trans('comma_separated', [ + '%list%' => \implode(', ', $display), + '%last%' => (string) \end($collection), + ], $this->catalogue); } /** @@ -94,9 +96,9 @@ private function formatCommaSeparated($collection, $count) */ private function formatOnlyTwo($collection) { - return $this->translator->trans('only_two', array( + return $this->translator->trans('only_two', [ '%first%' => (string) $collection[0], '%second%' => (string) $collection[1], - ), $this->catalogue); + ], $this->catalogue); } } diff --git a/src/Coduo/PHPHumanizer/Collection/Oxford.php b/src/Coduo/PHPHumanizer/Collection/Oxford.php index 13c0fbc..c102712 100644 --- a/src/Coduo/PHPHumanizer/Collection/Oxford.php +++ b/src/Coduo/PHPHumanizer/Collection/Oxford.php @@ -1,5 +1,7 @@ toDate->getTimestamp() - $this->fromDate->getTimestamp()) * 1000; + $absoluteMilliSecondsDiff = \abs($this->toDate->getTimestamp() - $this->fromDate->getTimestamp()) * 1000; foreach ($units as $unit) { if ($absoluteMilliSecondsDiff >= $unit->getMilliseconds()) { $this->unit = $unit; @@ -80,7 +82,7 @@ private function calculate() $this->quantity = ($absoluteMilliSecondsDiff == 0) ? $absoluteMilliSecondsDiff - : (int) round($absoluteMilliSecondsDiff / $this->unit->getMilliseconds()); + : (int) \round($absoluteMilliSecondsDiff / $this->unit->getMilliseconds()); } public function isPast() diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php index 79ba44d..4721c2e 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php @@ -1,5 +1,7 @@ getUnit()->getName(), $difference->isPast() ? 'past' : 'future'); + $translationKey = \sprintf('%s.%s', $difference->getUnit()->getName(), $difference->isPast() ? 'past' : 'future'); return $this->translator->transChoice( $translationKey, $difference->getQuantity(), - array('%count%' => $difference->getQuantity()), + ['%count%' => $difference->getQuantity()], 'difference', $locale ); diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php index 0edfd7e..221f1a6 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php @@ -1,5 +1,7 @@ fromDate->diff($this->toDate); diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index 46a1b80..52a2e34 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -1,5 +1,7 @@ getCompoundResults() as $result) { $diff[] = $this->translator->transChoice( 'compound.'.$result->getUnit()->getName(), $result->getQuantity(), - array('%count%' => $result->getQuantity()), + ['%count%' => $result->getQuantity()], 'difference', $locale ); @@ -41,7 +43,7 @@ public function formatDifference(PreciseDifference $difference, $locale = 'en') return $this->translator->trans( 'compound.'.($difference->isPast() ? 'past' : 'future'), - array('%value%' => implode(', ', $diff)), + ['%value%' => \implode(', ', $diff)], 'difference', $locale ); diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit.php b/src/Coduo/PHPHumanizer/DateTime/Unit.php index 75681f5..bac4b47 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit.php @@ -1,5 +1,7 @@ strategy ->ordinalIndicator($this->number); } -} \ No newline at end of file +} diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php index e6a686e..86a5b82 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php @@ -1,5 +1,7 @@ 1000, 'CM' => 900, 'D' => 500, @@ -22,7 +24,7 @@ final class RomanNumeral 'V' => 5, 'IV' => 4, 'I' => 1, - ); + ]; /** * @param $number @@ -61,12 +63,12 @@ public function toRoman($number) */ public function fromRoman($string) { - if (mb_strlen($string) === 0 || 0 === preg_match(self::ROMAN_STRING_MATCHER, $string)) { + if (\mb_strlen((string) $string) === 0 || 0 === \preg_match(self::ROMAN_STRING_MATCHER, (string) $string)) { throw new \InvalidArgumentException(); } $total = 0; - $i = mb_strlen($string); + $i = \mb_strlen($string); while ($i > 0) { $digit = $this->map[$string{--$i}]; diff --git a/src/Coduo/PHPHumanizer/NumberHumanizer.php b/src/Coduo/PHPHumanizer/NumberHumanizer.php index 886a2d5..25835ea 100644 --- a/src/Coduo/PHPHumanizer/NumberHumanizer.php +++ b/src/Coduo/PHPHumanizer/NumberHumanizer.php @@ -1,5 +1,7 @@ '#.## PB', 1099511627776 => '#.## TB', 1073741824 => '#.## GB', 1048576 => '#.## MB', 1024 => '#.# kB', 0 => '# bytes', - ); + ]; /** * @param int $number @@ -37,11 +39,11 @@ final class BinarySuffix */ public function __construct($number, $locale = 'en', $precision = null) { - if (!is_numeric($number)) { + if (!\is_numeric($number)) { throw new \InvalidArgumentException('Binary suffix converter accept only numeric values.'); } - if (!is_null($precision)) { + if (!\is_null($precision)) { $this->setSpecificPrecisionFormat($precision); } @@ -52,7 +54,7 @@ public function __construct($number, $locale = 'en', $precision = null) * Workaround for 32-bit systems which ignore array ordering when * dropping values over 2^32-1 */ - krsort($this->binaryPrefixes); + \krsort($this->binaryPrefixes); } public function convert() @@ -94,12 +96,12 @@ protected function setSpecificPrecisionFormat($precision) $icuFormat = '#'; if ($precision > 0) { - $icuFormat .= str_pad('#.', (2 + $precision), '0'); + $icuFormat .= \str_pad('#.', (2 + $precision), '0'); } foreach ($this->binaryPrefixes as $size => $unitPattern) { if ($size >= 1024) { - $symbol = substr($unitPattern, strpos($unitPattern, ' ')); + $symbol = \substr($unitPattern, \strpos($unitPattern, ' ')); $this->binaryPrefixes[$size] = $icuFormat.$symbol; } } diff --git a/src/Coduo/PHPHumanizer/String/Breakpoint.php b/src/Coduo/PHPHumanizer/String/Breakpoint.php index 23d37f1..911381b 100644 --- a/src/Coduo/PHPHumanizer/String/Breakpoint.php +++ b/src/Coduo/PHPHumanizer/String/Breakpoint.php @@ -1,5 +1,7 @@ allowedTags); + $strippedText = \strip_tags($text, $this->allowedTags); return $this->truncateHtml($strippedText, $charactersCount); } @@ -56,37 +58,37 @@ private function truncateHtml($string, $charactersCount) { $limit = $charactersCount; $offset = 0; - $tags = array(); + $tags = []; // Handle special characters. - preg_match_all('/&[a-z]+;/i', strip_tags($string), $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + \preg_match_all('/&[a-z]+;/i', \strip_tags($string), $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); foreach ($matches as $match) { if ($match[0][1] >= $limit) { break; } - $limit += (mb_strlen($match[0][0]) - 1); + $limit += (\mb_strlen($match[0][0]) - 1); } // Handle all the html tags. - preg_match_all('/<[^>]+>([^<]*)/', $string, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + \preg_match_all('/<[^>]+>([^<]*)/', $string, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); foreach ($matches as $match) { if ($match[0][1] - $offset >= $limit) { break; } - $tag = mb_substr(strtok($match[0][0], " \t\n\r\0\x0B>"), 1); + $tag = \mb_substr(\strtok($match[0][0], " \t\n\r\0\x0B>"), 1); if ($tag[0] != '/') { $tags[] = $tag; - } elseif (end($tags) == mb_substr($tag, 1)) { - array_pop($tags); + } elseif (\end($tags) == \mb_substr($tag, 1)) { + \array_pop($tags); } $offset += $match[1][1] - $match[0][1]; } - $newString = mb_substr($string, 0, $limit = min(mb_strlen($string), $this->breakpoint->calculatePosition($string, $limit + $offset))); - $newString .= (mb_strlen($string) > $limit ? $this->append : ''); - $newString .= (count($tags = array_reverse($tags)) ? '' : ''); + $newString = \mb_substr($string, 0, $limit = \min(\mb_strlen($string), $this->breakpoint->calculatePosition($string, $limit + $offset))); + $newString .= (\mb_strlen($string) > $limit ? $this->append : ''); + $newString .= (\count($tags = \array_reverse($tags)) ? '' : ''); return $newString; } diff --git a/src/Coduo/PHPHumanizer/String/Humanize.php b/src/Coduo/PHPHumanizer/String/Humanize.php index e09896f..92c27cd 100644 --- a/src/Coduo/PHPHumanizer/String/Humanize.php +++ b/src/Coduo/PHPHumanizer/String/Humanize.php @@ -1,5 +1,7 @@ text = $text; $this->capitalize = $capitalize; @@ -38,9 +40,9 @@ public function __construct($text, $capitalize = true, $separator = '_', array $ */ public function __toString() { - $humanized = trim(strtolower(preg_replace(array('/([A-Z])/', "/[{$this->separator}\\s]+/"), array('_$1', ' '), $this->text))); - $humanized = trim(str_replace($this->forbiddenWords, '', $humanized)); + $humanized = \trim(\strtolower(\preg_replace(['/([A-Z])/', "/[{$this->separator}\\s]+/"], ['_$1', ' '], $this->text))); + $humanized = \trim(\str_replace($this->forbiddenWords, '', $humanized)); - return $this->capitalize ? ucfirst($humanized) : $humanized; + return $this->capitalize ? \ucfirst($humanized) : $humanized; } } diff --git a/src/Coduo/PHPHumanizer/String/MetricSuffix.php b/src/Coduo/PHPHumanizer/String/MetricSuffix.php index 2e818d9..2d19637 100644 --- a/src/Coduo/PHPHumanizer/String/MetricSuffix.php +++ b/src/Coduo/PHPHumanizer/String/MetricSuffix.php @@ -1,5 +1,7 @@ '#.##P', 1000000000000 => '#.##T', 1000000000 => '#.##G', 1000000 => '#.##M', 1000 => '#.#k', 0 => '#.#', - ); + ]; /** * @param $number @@ -36,7 +38,7 @@ final class MetricSuffix */ public function __construct($number, $locale = 'en') { - if (!is_numeric($number)) { + if (!\is_numeric($number)) { throw new \InvalidArgumentException('Metric suffix converter accept only numeric values.'); } @@ -47,7 +49,7 @@ public function __construct($number, $locale = 'en') * Workaround for 32-bit systems which ignore array ordering when * dropping values over 2^32-1 */ - krsort($this->binaryPrefixes); + \krsort($this->binaryPrefixes); } public function convert() diff --git a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php index 0e61794..22cbd69 100644 --- a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php +++ b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php @@ -1,5 +1,7 @@ breakpoint->calculatePosition($text, $charactersCount))); + $truncatedText = \rtrim(\mb_substr($text, 0, $this->breakpoint->calculatePosition($text, $charactersCount))); return ($truncatedText === $text) ? $truncatedText : $truncatedText.$this->append; } diff --git a/src/Coduo/PHPHumanizer/String/TruncateInterface.php b/src/Coduo/PHPHumanizer/String/TruncateInterface.php index 2f20dd3..849b06b 100644 --- a/src/Coduo/PHPHumanizer/String/TruncateInterface.php +++ b/src/Coduo/PHPHumanizer/String/TruncateInterface.php @@ -1,5 +1,7 @@ mb_strlen($text)) { - return mb_strlen($text); + if ($charactersCount > \mb_strlen($text)) { + return \mb_strlen($text); } - $breakpoint = mb_strpos($text, ' ', $charactersCount); + $breakpoint = \mb_strpos($text, ' ', $charactersCount); if (false === $breakpoint) { - return mb_strlen($text); + return \mb_strlen($text); } return $breakpoint; diff --git a/src/Coduo/PHPHumanizer/StringHumanizer.php b/src/Coduo/PHPHumanizer/StringHumanizer.php index 686fe59..bf07789 100644 --- a/src/Coduo/PHPHumanizer/StringHumanizer.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -1,5 +1,7 @@ getBasename('.yml'); - list($fileDomain, $fileLocale) = explode('.', $resourceName); + list($fileDomain, $fileLocale) = \explode('.', $resourceName); $translator->addResource('yml', $file->getPathname(), $fileLocale, $fileDomain); } diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php index d759af8..c36703a 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php @@ -1,5 +1,7 @@ assertEquals($expectedResult, CollectionHumanizer::oxford($collection, $limit, $locale)); } public function oxfordCollectionProvider() { - return array( + return [ // English - array(array("Michal"), null, 'en', 'Michal'), - array(array("Michal", "Norbert"), null, 'en', 'Michal and Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'en', 'Michal, Norbert, and 1 other'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'en', 'Michal, Norbert, and 2 others'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'en', 'Michal, Norbert, Lukasz, and Pawel'), + [['Michal'], null, 'en', 'Michal'], + [['Michal', 'Norbert'], null, 'en', 'Michal and Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'en', 'Michal, Norbert, and 1 other'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'en', 'Michal, Norbert, and 2 others'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'en', 'Michal, Norbert, Lukasz, and Pawel'], // Chinese Simplified - array(array("Michal"), null, 'zh_CN', 'Michal'), - array(array("Michal", "Norbert"), null, 'zh_CN', 'Michal 和 Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'zh_CN', 'Michal, Norbert 和另一个'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'zh_CN', 'Michal, Norbert 和另 2 个'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'zh_CN', 'Michal, Norbert, Lukasz, 和 Pawel'), + [['Michal'], null, 'zh_CN', 'Michal'], + [['Michal', 'Norbert'], null, 'zh_CN', 'Michal 和 Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'zh_CN', 'Michal, Norbert 和另一个'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'zh_CN', 'Michal, Norbert 和另 2 个'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'zh_CN', 'Michal, Norbert, Lukasz, 和 Pawel'], // Polish - array(array("Michal"), null, 'pl', 'Michal'), - array(array("Michal", "Norbert"), null, 'pl', 'Michal i Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'pl', 'Michal, Norbert i 1 inny'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'pl', 'Michal, Norbert i 2 innych'), + [['Michal'], null, 'pl', 'Michal'], + [['Michal', 'Norbert'], null, 'pl', 'Michal i Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'pl', 'Michal, Norbert i 1 inny'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'pl', 'Michal, Norbert i 2 innych'], // Dutch - array(array("Michal"), null, 'nl', 'Michal'), - array(array("Michal", "Norbert"), null, 'nl', 'Michal en Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'nl', 'Michal, Norbert, en 1 andere'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'nl', 'Michal, Norbert, en 2 andere'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'nl', 'Michal, Norbert, Lukasz, en Pawel'), + [['Michal'], null, 'nl', 'Michal'], + [['Michal', 'Norbert'], null, 'nl', 'Michal en Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'nl', 'Michal, Norbert, en 1 andere'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'nl', 'Michal, Norbert, en 2 andere'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'nl', 'Michal, Norbert, Lukasz, en Pawel'], // Russian - array(array("Michal"), null, 'ru', 'Michal'), - array(array("Michal", "Norbert"), null, 'ru', 'Michal и Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'ru', 'Michal, Norbert и ещё 1'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'ru', 'Michal, Norbert и ещё 2'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'ru', 'Michal, Norbert, Lukasz и Pawel'), + [['Michal'], null, 'ru', 'Michal'], + [['Michal', 'Norbert'], null, 'ru', 'Michal и Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'ru', 'Michal, Norbert и ещё 1'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'ru', 'Michal, Norbert и ещё 2'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'ru', 'Michal, Norbert, Lukasz и Pawel'], // Indonesian - array(array("Michal"), null, 'id', 'Michal'), - array(array("Michal", "Norbert"), null, 'id', 'Michal dan Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'id', 'Michal, Norbert, dan 1 lainnya'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'id', 'Michal, Norbert, dan 2 lainnya'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'id', 'Michal, Norbert, Lukasz, dan Pawel'), + [['Michal'], null, 'id', 'Michal'], + [['Michal', 'Norbert'], null, 'id', 'Michal dan Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'id', 'Michal, Norbert, dan 1 lainnya'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'id', 'Michal, Norbert, dan 2 lainnya'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'id', 'Michal, Norbert, Lukasz, dan Pawel'], // Ukrainian - array(array("Michal"), null, 'uk', 'Michal'), - array(array("Michal", "Norbert"), null, 'uk', 'Michal та Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'uk', 'Michal, Norbert і ще 1'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'uk', 'Michal, Norbert і ще 2'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'uk', 'Michal, Norbert, Lukasz та Pawel'), + [['Michal'], null, 'uk', 'Michal'], + [['Michal', 'Norbert'], null, 'uk', 'Michal та Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'uk', 'Michal, Norbert і ще 1'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'uk', 'Michal, Norbert і ще 2'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'uk', 'Michal, Norbert, Lukasz та Pawel'], // Thai - array(array("Michal"), null, 'th', 'Michal'), - array(array("Michal", "Norbert"), null, 'th', 'Michal และ Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'th', 'Michal, Norbert และอีก 1'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'th', 'Michal, Norbert และอีก 2'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'th', 'Michal, Norbert, Lukasz และ Pawel'), + [['Michal'], null, 'th', 'Michal'], + [['Michal', 'Norbert'], null, 'th', 'Michal และ Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'th', 'Michal, Norbert และอีก 1'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'th', 'Michal, Norbert และอีก 2'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'th', 'Michal, Norbert, Lukasz และ Pawel'], // Japanese - array(array("Michal"), null, 'ja', 'Michal'), - array(array("Michal", "Norbert"), null, 'ja', 'Michal と Norbert'), - array(array("Michal", "Norbert", "Lukasz"), 2, 'ja', 'Michal, Norbert ともうひとり'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), 2, 'ja', 'Michal, Norbert ともう 2 人'), - array(array("Michal", "Norbert", "Lukasz", "Pawel"), null, 'ja', 'Michal, Norbert, Lukasz と Pawel'), - ); + [['Michal'], null, 'ja', 'Michal'], + [['Michal', 'Norbert'], null, 'ja', 'Michal と Norbert'], + [['Michal', 'Norbert', 'Lukasz'], 2, 'ja', 'Michal, Norbert ともうひとり'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], 2, 'ja', 'Michal, Norbert ともう 2 人'], + [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'ja', 'Michal, Norbert, Lukasz と Pawel'], + ]; } } diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index 9ae9e94..628e3f6 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -1,5 +1,7 @@ assertEquals($expected, StringHumanizer::truncate($text, $charactersCount, $append)); } @@ -43,7 +45,7 @@ function test_truncate_string_to_word_closest_to_a_certain_number_of_characters( * @param $expected * @param $append */ - function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') + public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') { $this->assertEquals($expected, StringHumanizer::truncateHtml($text, $charactersCount, $allowedTags, $append)); } @@ -54,7 +56,7 @@ function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_ * @param $text * @param $expected */ - function test_remove_all_shortcodes_from_text($text, $expected) + public function test_remove_all_shortcodes_from_text($text, $expected) { $this->assertEquals($expected, StringHumanizer::removeShortcodes($text)); } @@ -65,25 +67,25 @@ function test_remove_all_shortcodes_from_text($text, $expected) * @param $text * @param $expected */ - function test_remove_only_shortcode_tags_from_text($text, $expected) + public function test_remove_only_shortcode_tags_from_text($text, $expected) { $this->assertEquals($expected, StringHumanizer::removeShortcodeTags($text)); } public function removeAllShortcodesProvider() { - return array( - array('some [text] containing [shortcodes /] and [stuff]with[/stuff] content', 'some containing and content'), - array('some [text] containing [shortcodes /] and [stuff]with[/stuff] content [/text]', 'some '), - ); + return [ + ['some [text] containing [shortcodes /] and [stuff]with[/stuff] content', 'some containing and content'], + ['some [text] containing [shortcodes /] and [stuff]with[/stuff] content [/text]', 'some '], + ]; } public function removeShortcodeTagsProvider() { - return array( - array('some [text] containing [shortcodes /] and [stuff]with[/stuff] content', 'some containing and with content'), - array('some [text] containing [shortcodes /] and [stuff]with[/stuff] content [/text]', 'some containing and with content '), - ); + return [ + ['some [text] containing [shortcodes /] and [stuff]with[/stuff] content', 'some containing and with content'], + ['some [text] containing [shortcodes /] and [stuff]with[/stuff] content [/text]', 'some containing and with content '], + ]; } /** @@ -91,15 +93,15 @@ public function removeShortcodeTagsProvider() */ public function humanizeStringProvider() { - return array( - array('news_count', 'News count', true, '_', array('id')), - array('user', 'user', false, '_', array('id')), - array('news_id', 'News', true, '_', array('id')), - array('customer_id', 'Customer id', true, '_', array()), - array('news_count', 'News count', true, '_', array('id')), - array('news-count', 'News count', true, '-', array('id')), - array('news-count', 'news count', false, '-', array('id')) - ); + return [ + ['news_count', 'News count', true, '_', ['id']], + ['user', 'user', false, '_', ['id']], + ['news_id', 'News', true, '_', ['id']], + ['customer_id', 'Customer id', true, '_', []], + ['news_count', 'News count', true, '_', ['id']], + ['news-count', 'News count', true, '-', ['id']], + ['news-count', 'news count', false, '-', ['id']] + ]; } /** @@ -111,24 +113,24 @@ public function truncateStringProvider() $longText = 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.'; $shortText = 'Short text'; - return array( - array($longText, 'Lorem', 2), - array($longText, 'Lorem ipsum...', 10, '...'), - array($longText, 'Lorem ipsum dolorem si amet, lorem', 30), - array($longText, 'Lorem', 0), - array($longText, 'Lorem...', 0, '...'), - array($longText, 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', -2), - array($shortText, "Short...", 1, '...'), - array($shortText, "Short...", 2, '...'), - array($shortText, "Short...", 3, '...'), - array($shortText, "Short...", 4, '...'), - array($shortText, "Short...", 5, '...'), - array($shortText, "Short text", 6, '...'), - array($shortText, "Short text", 7, '...'), - array($shortText, "Short text", 8, '...'), - array($shortText, "Short text", 9, '...'), - array($shortText, "Short text", 10, '...') - ); + return [ + [$longText, 'Lorem', 2], + [$longText, 'Lorem ipsum...', 10, '...'], + [$longText, 'Lorem ipsum dolorem si amet, lorem', 30], + [$longText, 'Lorem', 0], + [$longText, 'Lorem...', 0, '...'], + [$longText, 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.', -2], + [$shortText, 'Short...', 1, '...'], + [$shortText, 'Short...', 2, '...'], + [$shortText, 'Short...', 3, '...'], + [$shortText, 'Short...', 4, '...'], + [$shortText, 'Short...', 5, '...'], + [$shortText, 'Short text', 6, '...'], + [$shortText, 'Short text', 7, '...'], + [$shortText, 'Short text', 8, '...'], + [$shortText, 'Short text', 9, '...'], + [$shortText, 'Short text', 10, '...'] + ]; } /** @@ -139,20 +141,20 @@ public function truncateHtmlStringProvider() { $text = '

HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create web pages.[1] Web browsers can read HTML files and render them into visible or audible web pages. HTML describes the structure of a website semantically along with cues for presentation, making it a markup language, rather than a programming language.

'; - return array( - array($text, 3, '', "HyperText"), - array($text, 12, '', "HyperText Markup"), - array($text, 30, '', "HyperText Markup Language, commonly"), - array($text, 50, '', "HyperText Markup Language, commonly referred to as"), - array($text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup'), - array($text, 100,'', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'), - array($text, 3 , '', "HyperText"), - array($text, 12 , '', "HyperText Markup"), - array($text, 50 , '', "HyperText Markup Language, commonly referred to as"), - array($text, 75 , '', "HyperText Markup Language, commonly referred to as HTML, is the standard markup"), - array($text, 100, '', "HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create"), - array($text, 50, '', "HyperText Markup Language, commonly referred to as...", '...'), - array($text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...', '...') - ); + return [ + [$text, 3, '', 'HyperText'], + [$text, 12, '', 'HyperText Markup'], + [$text, 30, '', 'HyperText Markup Language, commonly'], + [$text, 50, '', 'HyperText Markup Language, commonly referred to as'], + [$text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup'], + [$text, 100,'', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'], + [$text, 3 , '', 'HyperText'], + [$text, 12 , '', 'HyperText Markup'], + [$text, 50 , '', 'HyperText Markup Language, commonly referred to as'], + [$text, 75 , '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup'], + [$text, 100, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'], + [$text, 50, '', 'HyperText Markup Language, commonly referred to as...', '...'], + [$text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...', '...'] + ]; } } diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 796fb24..e800b9d 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -1,3 +1,5 @@ Date: Mon, 25 Feb 2019 17:54:04 +0800 Subject: [PATCH 108/193] Add translation: zh_TW (#106) Signed-off-by: Jack Cherng --- .../translations/difference.zh_TW.yml | 35 +++++++++++++++++++ .../Resources/translations/oxford.zh_TW.yml | 3 ++ 2 files changed, 38 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml new file mode 100644 index 0000000..5be5bb9 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] 剛剛" + future: "[0,Inf] 剛剛" +second: + past: "[1,Inf] %count% 秒前" + future: "[1,Inf] %count% 秒後" +minute: + past: "[1,Inf] %count% 分鐘前" + future: "[1,Inf] %count% 分鐘後" +hour: + past: "[1,Inf] %count% 小時前" + future: "[1,Inf] %count% 小時後" +day: + past: "[1,Inf] %count% 天前" + future: "[1,Inf] %count% 天後" +week: + past: "[1,Inf] %count% 週前" + future: "[1,Inf] %count% 週後" +month: + past: "[1,Inf] %count% 個月前" + future: "[1,Inf] %count% 個月後" +year: + past: "[1,Inf] %count% 年前" + future: "[1,Inf] %count% 年後" + +compound: + second: "[1,Inf] %count% 秒" + minute: "[1,Inf] %count% 分鐘" + hour: "[1,Inf] %count% 小時" + day: "[1,Inf] %count% 天" + week: "[1,Inf] %count% 週" + month: "[1,Inf] %count% 個月" + year: "[1,Inf] %count% 年" + past: "%value%前" + future: "%value%後" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml new file mode 100644 index 0000000..61dc201 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml @@ -0,0 +1,3 @@ +only_two: "%first% 和 %second%" +comma_separated: "%list%, 和 %last%" +comma_separated_with_limit: "{1} %list% 和另一個|[2,Inf] %list% 和另 %count% 個" From 9b52c5dc42f10ff60f4827ff9a736b3a1a18f0e4 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Mon, 25 Feb 2019 11:02:11 +0100 Subject: [PATCH 109/193] Fixed README.md --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index d530903..c412225 100644 --- a/README.md +++ b/README.md @@ -242,15 +242,15 @@ Currently we support following languages: * [Dutch](src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml) * [Русский](src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml) * [Norwegian](src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml) -* [Afrikaans] (src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml) -* [Bulgarian] (src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml) -* [Indonesian] (src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml) -* [Chinese Simplified] (src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml) -* [Spanish] (src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml) -* [Ukrainian] (src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml) -* [Danish] (src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml) -* [Thai] (src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml) -* [Japanese] (src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml) +* [Afrikaans](src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml) +* [Bulgarian](src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml) +* [Indonesian](src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml) +* [Chinese Simplified](src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml) +* [Spanish](src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml) +* [Ukrainian](src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml) +* [Danish](src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml) +* [Thai](src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml) +* [Japanese](src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml) # Credits From 51d96575a79dfbf024ad138fc24500fa5ebd13b3 Mon Sep 17 00:00:00 2001 From: Alex Ungurianu Date: Mon, 25 Feb 2019 10:05:10 +0000 Subject: [PATCH 110/193] Romanian translations (#40) * Create oxford.ro.yml * Create difference.ro.yml --- .../Resources/translations/difference.ro.yml | 35 +++++++++++++++++++ .../Resources/translations/oxford.ro.yml | 3 ++ 2 files changed, 38 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml new file mode 100644 index 0000000..6c54c71 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] mai înainte" + future: "[0,Inf] imediat" +second: + past: "{1} %count% secundă în urmă|[2,Inf] %count% secunde în urmă" + future: "{1} %count% secundă de acum|[2,Inf] %count% secundă de acum" +minute: + past: "{1} %count% minut în urmă|[2,Inf] %count% minute în urmă" + future: "{1} %count% minut de acum|[2,Inf] %count% minute de acum" +hour: + past: "{1} %count% oră în urmă|[2,Inf] %count% ore în urmă" + future: "{1} %count% oră de acum|[2,Inf] %count% ore de acum" +day: + past: "{1} %count% zi în urmă|[2,Inf] %count% zile în urmă" + future: "{1} %count% zi de acum|[2,Inf] %count% zile de acum" +week: + past: "{1} %count% săptămână în urmă|[2,Inf] %count% săptămâni în urmă" + future: "{1} %count% săptămână de acum|[2,Inf] %count% săptămâni de acum" +month: + past: "{1} %count% lună în urmă|[2,Inf] %count% luni în urmă" + future: "{1} %count% lună de acum|[2,Inf] %count% luni de acum" +year: + past: "{1} %count% an în urmă|[2,Inf] %count% ani în urmă" + future: "{1} %count% an de acum|[2,Inf] %count% ani de acum" + +compound: + second: "{1} %count% secundă|[2,Inf] %count% secunde" + minute: "{1} %count% minut|[2,Inf] %count% minute" + hour: "{1} %count% oră|[2,Inf] %count% ore" + day: "{1} %count% zi|[2,Inf] %count% zile" + week: "{1} %count% săptămană|[2,Inf] %count% săptămani" + month: "{1} %count% lună|[2,Inf] %count% luni" + year: "{1} %count% an|[2,Inf] %count% ani" + ago: "în urmă" + from_now: "de acum" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml new file mode 100644 index 0000000..e991007 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml @@ -0,0 +1,3 @@ +only_two: "%first% și %second%" +comma_separated: "%list% și %last%" +comma_separated_with_limit: "{1} %list% și încă unul|[2,Inf] %list% și %count% alții" From 17a5ab5243ae1eec2e3d39388bf611088b8fd5e7 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Mon, 25 Feb 2019 11:07:45 +0100 Subject: [PATCH 111/193] Added missing translations --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index c412225..d53bbe9 100644 --- a/README.md +++ b/README.md @@ -246,11 +246,13 @@ Currently we support following languages: * [Bulgarian](src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml) * [Indonesian](src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml) * [Chinese Simplified](src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml) +* [Chinese Taiwan](src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml) * [Spanish](src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml) * [Ukrainian](src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml) * [Danish](src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml) * [Thai](src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml) * [Japanese](src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml) +* [Romanian](src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml) # Credits From 2710e071b54f10eb1cba11edf98b9e4fc61380d8 Mon Sep 17 00:00:00 2001 From: Tomasz Kowalczyk Date: Mon, 25 Feb 2019 11:27:03 +0100 Subject: [PATCH 112/193] Sanity check for NumberFormatter when intl is not installed (#91) * added sanity check for NumberFormatter class when intl extension is not installed * Update MetricSuffix.php * Update BinarySuffix.php --- src/Coduo/PHPHumanizer/String/BinarySuffix.php | 4 ++++ src/Coduo/PHPHumanizer/String/MetricSuffix.php | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index f0d4209..cc42a60 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -39,6 +39,10 @@ final class BinarySuffix */ public function __construct($number, $locale = 'en', $precision = null) { + if (!\class_exists('NumberFormatter')) { + throw new \RuntimeException('Binary suffix converter requires intl extension!'); + } + if (!\is_numeric($number)) { throw new \InvalidArgumentException('Binary suffix converter accept only numeric values.'); } diff --git a/src/Coduo/PHPHumanizer/String/MetricSuffix.php b/src/Coduo/PHPHumanizer/String/MetricSuffix.php index 2d19637..46d4aec 100644 --- a/src/Coduo/PHPHumanizer/String/MetricSuffix.php +++ b/src/Coduo/PHPHumanizer/String/MetricSuffix.php @@ -38,6 +38,10 @@ final class MetricSuffix */ public function __construct($number, $locale = 'en') { + if (!\class_exists('NumberFormatter')) { + throw new \RuntimeException('Metric suffix converter requires intl extension!'); + } + if (!\is_numeric($number)) { throw new \InvalidArgumentException('Metric suffix converter accept only numeric values.'); } From 248710be20fc70836c132f8124f01819d5c60ce8 Mon Sep 17 00:00:00 2001 From: Brian Wozeniak Date: Sun, 3 Mar 2019 08:43:36 -0800 Subject: [PATCH 113/193] Allow later versions of symfony packages (#111) --- composer.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index def4c0a..8aab87d 100644 --- a/composer.json +++ b/composer.json @@ -16,9 +16,9 @@ ], "require": { "php": ">=7.0.0", - "symfony/config": "^2.3|^3.0|^4.0", - "symfony/translation": "^2.3|^3.0|^4.0", - "symfony/yaml": "^2.3|^3.0|^4.0", + "symfony/config": "^2.3|^3.0|^4", + "symfony/translation": "^2.3|^3.0|^4", + "symfony/yaml": "^2.3|^3.0|^4", "friendsofphp/php-cs-fixer": "^2.14" }, "require-dev": { From 1400eb96a87ea2f8d63f9f75c40dc8afd743a856 Mon Sep 17 00:00:00 2001 From: Tomasz Kowalczyk Date: Sat, 20 Apr 2019 17:50:36 +0200 Subject: [PATCH 114/193] upgraded thunderer/shortcode dependency to ^0.7 (#112) --- README.md | 8 ++++++++ composer.json | 2 +- src/Coduo/PHPHumanizer/StringHumanizer.php | 12 ++++++------ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index d53bbe9..634292b 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,14 @@ StringHumanizer::truncateHtml($text, 75, '', '...' ``` +**Remove shortcodes** + +```php +$text = 'A text with [short]random[/short] [codes]words[/codes].'; +StringHumanizer::removeShortcodes($text); // "A text with ." +StringHumanizer::removeShortcodeTags($text); // "A text with random words." +``` + ## Number **Ordinalize** diff --git a/composer.json b/composer.json index 8aab87d..9adf431 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ "friendsofphp/php-cs-fixer": "^2.14" }, "require-dev": { - "thunderer/shortcode": "~0.5", + "thunderer/shortcode": "^0.7", "phpspec/phpspec": "^2", "phpunit/phpunit": "^4.5|^5.0" }, diff --git a/src/Coduo/PHPHumanizer/StringHumanizer.php b/src/Coduo/PHPHumanizer/StringHumanizer.php index bf07789..9cf2d70 100644 --- a/src/Coduo/PHPHumanizer/StringHumanizer.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -60,10 +60,10 @@ public static function truncateHtml($text, $charactersCount, $allowedTags = '', */ public static function removeShortcodes($text) { - if (!\class_exists('Thunder\Shortcode\Processor\Processor')) { - throw new \RuntimeException('Please add "thunderer/shortcode": ~0.5 to composer.json first'); + if (!class_exists('Thunder\Shortcode\Processor\Processor')) { + throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); } - + $processor = new ShortcodeProcessor(); return $processor->removeShortcodes($text); @@ -75,10 +75,10 @@ public static function removeShortcodes($text) */ public static function removeShortcodeTags($text) { - if (!\class_exists('Thunder\Shortcode\Processor\Processor')) { - throw new \RuntimeException('Please add "thunderer/shortcode": ~0.5 to composer.json first'); + if (!class_exists('Thunder\Shortcode\Processor\Processor')) { + throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); } - + $processor = new ShortcodeProcessor(); return $processor->removeShortcodeTags($text); From 9edceb2d21fa879e91072308b8bbe3503a346bd2 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sat, 20 Apr 2019 17:53:57 +0200 Subject: [PATCH 115/193] CS Fixes --- .travis.yml | 2 -- composer.json | 10 ++++++++++ src/Coduo/PHPHumanizer/StringHumanizer.php | 4 ++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 35d2afa..162cdfb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,5 @@ language: php -sudo: false - cache: directories: - $HOME/.composer/cache diff --git a/composer.json b/composer.json index 9adf431..bb9d931 100644 --- a/composer.json +++ b/composer.json @@ -42,5 +42,15 @@ }, "suggest": { "ext-intl": "Required if you are going to use humanizer with locales different than en_EN" + }, + "scripts": { + "cs:php:fix": [ + "php-cs-fixer fix --using-cache=no" + ], + "test": [ + "phpspec run --format=pretty", + "phpunit", + "php-cs-fixer fix -v --dry-run" + ] } } diff --git a/src/Coduo/PHPHumanizer/StringHumanizer.php b/src/Coduo/PHPHumanizer/StringHumanizer.php index 9cf2d70..5b02b2c 100644 --- a/src/Coduo/PHPHumanizer/StringHumanizer.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -60,7 +60,7 @@ public static function truncateHtml($text, $charactersCount, $allowedTags = '', */ public static function removeShortcodes($text) { - if (!class_exists('Thunder\Shortcode\Processor\Processor')) { + if (!\class_exists('Thunder\Shortcode\Processor\Processor')) { throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); } @@ -75,7 +75,7 @@ public static function removeShortcodes($text) */ public static function removeShortcodeTags($text) { - if (!class_exists('Thunder\Shortcode\Processor\Processor')) { + if (!\class_exists('Thunder\Shortcode\Processor\Processor')) { throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); } From 14ab746762acd1856ddd386023128f23935ef119 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sat, 20 Apr 2019 17:57:31 +0200 Subject: [PATCH 116/193] CS Fixes --- .php_cs | 9 +++++++ .travis.yml | 4 +-- README.md | 27 +++++++++++++++++++ .../PHPHumanizer/Collection/Formatter.php | 7 +++++ src/Coduo/PHPHumanizer/Collection/Oxford.php | 7 +++++ .../PHPHumanizer/CollectionHumanizer.php | 7 +++++ .../PHPHumanizer/DateTime/Difference.php | 7 +++++ .../DateTime/Difference/CompoundResult.php | 7 +++++ src/Coduo/PHPHumanizer/DateTime/Formatter.php | 7 +++++ .../DateTime/PreciseDifference.php | 7 +++++ .../DateTime/PreciseFormatter.php | 7 +++++ src/Coduo/PHPHumanizer/DateTime/Unit.php | 7 +++++ src/Coduo/PHPHumanizer/DateTime/Unit/Day.php | 7 +++++ src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php | 7 +++++ .../PHPHumanizer/DateTime/Unit/JustNow.php | 7 +++++ .../PHPHumanizer/DateTime/Unit/Minute.php | 7 +++++ .../PHPHumanizer/DateTime/Unit/Month.php | 7 +++++ .../PHPHumanizer/DateTime/Unit/Second.php | 7 +++++ src/Coduo/PHPHumanizer/DateTime/Unit/Week.php | 7 +++++ src/Coduo/PHPHumanizer/DateTime/Unit/Year.php | 7 +++++ src/Coduo/PHPHumanizer/DateTimeHumanizer.php | 7 +++++ src/Coduo/PHPHumanizer/Number/Ordinal.php | 7 +++++ .../PHPHumanizer/Number/Ordinal/Builder.php | 7 +++++ .../Number/Ordinal/StrategyInterface.php | 7 +++++ .../PHPHumanizer/Number/RomanNumeral.php | 7 +++++ src/Coduo/PHPHumanizer/NumberHumanizer.php | 7 +++++ .../Resources/Ordinal/DeStrategy.php | 7 +++++ .../Resources/Ordinal/EnStrategy.php | 7 +++++ .../Resources/Ordinal/EsStrategy.php | 7 +++++ .../Resources/Ordinal/FrStrategy.php | 7 +++++ .../Resources/Ordinal/IdStrategy.php | 7 +++++ .../Resources/Ordinal/ItStrategy.php | 7 +++++ .../Resources/Ordinal/NlStrategy.php | 7 +++++ .../Resources/Ordinal/PtStrategy.php | 7 +++++ .../PHPHumanizer/String/BinarySuffix.php | 7 +++++ src/Coduo/PHPHumanizer/String/Breakpoint.php | 7 +++++ .../PHPHumanizer/String/HtmlTruncate.php | 7 +++++ src/Coduo/PHPHumanizer/String/Humanize.php | 7 +++++ .../PHPHumanizer/String/MetricSuffix.php | 7 +++++ .../String/ShortcodeProcessor.php | 7 +++++ .../PHPHumanizer/String/TextTruncate.php | 7 +++++ .../PHPHumanizer/String/TruncateInterface.php | 7 +++++ .../PHPHumanizer/String/WordBreakpoint.php | 7 +++++ src/Coduo/PHPHumanizer/StringHumanizer.php | 7 +++++ src/Coduo/PHPHumanizer/Translator/Builder.php | 7 +++++ .../Tests/CollectionHumanizerTest.php | 7 +++++ .../Tests/DateTimeHumanizerTest.php | 7 +++++ .../Tests/NumberHumanizerTest.php | 7 +++++ .../Tests/StringHumanizerTest.php | 7 +++++ tests/bootstrap.php | 7 +++++ 50 files changed, 366 insertions(+), 3 deletions(-) diff --git a/.php_cs b/.php_cs index 5983888..b4f320e 100644 --- a/.php_cs +++ b/.php_cs @@ -1,9 +1,18 @@ setRules([ '@PSR2' => true, 'declare_strict_types' => true, 'array_syntax' => ['syntax' => 'short'], + 'header_comment' => ['header' => $fileHeaderComment, 'separate' => 'both'], 'blank_line_after_opening_tag' => true, 'single_blank_line_before_namespace' => true, 'no_unused_imports' => true, diff --git a/.travis.yml b/.travis.yml index 162cdfb..dd1b745 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,6 +19,4 @@ install: - composer update script: - - ./bin/phpspec run --format=pretty - - ./bin/phpunit - - ./bin/php-cs-fixer fix -v --dry-run \ No newline at end of file + - composer run test \ No newline at end of file diff --git a/README.md b/README.md index 634292b..e808e1b 100644 --- a/README.md +++ b/README.md @@ -262,6 +262,33 @@ Currently we support following languages: * [Japanese](src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml) * [Romanian](src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml) +# Development + +After downloading library update dependencies: + +``` +composer update +``` + +In order to check lowest possible versions of dependencies add + +``` +composer update --prefer-lowest +```` + +Execute test suite: + +``` +composer run test +``` + +Run CS Fixer + +``` +composer run cs:php:fix +``` + + # Credits This lib was inspired by [Java Humanize Lib](https://github.com/mfornos/humanize) && [Rails Active Support](https://github.com/rails/rails/tree/master/activesupport/lib/active_support) diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php index 60f51c4..ec28b4b 100644 --- a/src/Coduo/PHPHumanizer/Collection/Formatter.php +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Collection; use Symfony\Component\Translation\TranslatorInterface; diff --git a/src/Coduo/PHPHumanizer/Collection/Oxford.php b/src/Coduo/PHPHumanizer/Collection/Oxford.php index c102712..a27cf80 100644 --- a/src/Coduo/PHPHumanizer/Collection/Oxford.php +++ b/src/Coduo/PHPHumanizer/Collection/Oxford.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Collection; final class Oxford diff --git a/src/Coduo/PHPHumanizer/CollectionHumanizer.php b/src/Coduo/PHPHumanizer/CollectionHumanizer.php index 2af7295..548cdc4 100644 --- a/src/Coduo/PHPHumanizer/CollectionHumanizer.php +++ b/src/Coduo/PHPHumanizer/CollectionHumanizer.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer; use Coduo\PHPHumanizer\Collection\Formatter; diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference.php b/src/Coduo/PHPHumanizer/DateTime/Difference.php index 8d7d213..60fce9a 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime; use Coduo\PHPHumanizer\DateTime\Unit\Day; diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php index 4721c2e..7178ea1 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Difference; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Formatter.php b/src/Coduo/PHPHumanizer/DateTime/Formatter.php index f79d5fc..781fc3d 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Formatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/Formatter.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime; use Symfony\Component\Translation\TranslatorInterface; diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php index 221f1a6..75c1cfb 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime; use Coduo\PHPHumanizer\DateTime\Unit\Day; diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index 52a2e34..66800a1 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime; use Symfony\Component\Translation\TranslatorInterface; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit.php b/src/Coduo/PHPHumanizer/DateTime/Unit.php index bac4b47..2a3525f 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime; interface Unit diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php index 0ab87a4..4e4f72d 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php index 7f75d91..8a21186 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php b/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php index 0b682d7..ea1120a 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php index a8d39b8..1c2c3c2 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php index f860e52..ae26e8f 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php index 94a9c0c..12f3e54 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php index 9cc987c..cd0ff1a 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php index 49ae9bc..4dda1c9 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\DateTime\Unit; use Coduo\PHPHumanizer\DateTime\Unit; diff --git a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php index bfdfbc3..44f7472 100644 --- a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php +++ b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer; use Coduo\PHPHumanizer\DateTime\Difference; diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal.php b/src/Coduo/PHPHumanizer/Number/Ordinal.php index 0c34ade..73e92a5 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Number; use Coduo\PHPHumanizer\Number\Ordinal\Builder; diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php index 86a5b82..582055b 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Number\Ordinal; /** diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php index f043910..aa23162 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Number\Ordinal; interface StrategyInterface diff --git a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php index 0760fa2..745c60c 100644 --- a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php +++ b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Number; final class RomanNumeral diff --git a/src/Coduo/PHPHumanizer/NumberHumanizer.php b/src/Coduo/PHPHumanizer/NumberHumanizer.php index 25835ea..7d26299 100644 --- a/src/Coduo/PHPHumanizer/NumberHumanizer.php +++ b/src/Coduo/PHPHumanizer/NumberHumanizer.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer; use Coduo\PHPHumanizer\Number\Ordinal; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php index 852d836..6a96127 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php index 5ede85a..35e6f5a 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php index 2031c63..30ba76e 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php index 6125883..788789b 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php index 7f86ebf..e678f99 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php index 48bcfba..318bbf8 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php index 37f8122..7350eb5 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php index 4a47a59..2f625a8 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Resources\Ordinal; use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface; diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index cc42a60..b71e798 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; final class BinarySuffix diff --git a/src/Coduo/PHPHumanizer/String/Breakpoint.php b/src/Coduo/PHPHumanizer/String/Breakpoint.php index 911381b..e823511 100644 --- a/src/Coduo/PHPHumanizer/String/Breakpoint.php +++ b/src/Coduo/PHPHumanizer/String/Breakpoint.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; interface Breakpoint diff --git a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php index ccdfce3..f85097a 100644 --- a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php +++ b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; final class HtmlTruncate implements TruncateInterface diff --git a/src/Coduo/PHPHumanizer/String/Humanize.php b/src/Coduo/PHPHumanizer/String/Humanize.php index 92c27cd..a4ef053 100644 --- a/src/Coduo/PHPHumanizer/String/Humanize.php +++ b/src/Coduo/PHPHumanizer/String/Humanize.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; final class Humanize diff --git a/src/Coduo/PHPHumanizer/String/MetricSuffix.php b/src/Coduo/PHPHumanizer/String/MetricSuffix.php index 46d4aec..3a76eb3 100644 --- a/src/Coduo/PHPHumanizer/String/MetricSuffix.php +++ b/src/Coduo/PHPHumanizer/String/MetricSuffix.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; final class MetricSuffix diff --git a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php index 22cbd69..405a056 100644 --- a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php +++ b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; use Thunder\Shortcode\HandlerContainer\HandlerContainer; diff --git a/src/Coduo/PHPHumanizer/String/TextTruncate.php b/src/Coduo/PHPHumanizer/String/TextTruncate.php index ebfddee..e48c044 100644 --- a/src/Coduo/PHPHumanizer/String/TextTruncate.php +++ b/src/Coduo/PHPHumanizer/String/TextTruncate.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; final class TextTruncate implements TruncateInterface diff --git a/src/Coduo/PHPHumanizer/String/TruncateInterface.php b/src/Coduo/PHPHumanizer/String/TruncateInterface.php index 849b06b..1749047 100644 --- a/src/Coduo/PHPHumanizer/String/TruncateInterface.php +++ b/src/Coduo/PHPHumanizer/String/TruncateInterface.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; interface TruncateInterface diff --git a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php index 6489156..1a73722 100644 --- a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php +++ b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\String; final class WordBreakpoint implements Breakpoint diff --git a/src/Coduo/PHPHumanizer/StringHumanizer.php b/src/Coduo/PHPHumanizer/StringHumanizer.php index 5b02b2c..8da6660 100644 --- a/src/Coduo/PHPHumanizer/StringHumanizer.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer; use Coduo\PHPHumanizer\String\Humanize; diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index 90a499a..b1500ff 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Translator; use Symfony\Component\Translation\Loader\YamlFileLoader; diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php index c36703a..29933a9 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\CollectionHumanizer; diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index 628e3f6..efa9d95 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\DateTimeHumanizer; diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php index 9eed3d9..ae40dbc 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\NumberHumanizer; diff --git a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php index dcde823..c3f1f51 100644 --- a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php @@ -2,6 +2,13 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\StringHumanizer; diff --git a/tests/bootstrap.php b/tests/bootstrap.php index e800b9d..008bbfe 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -2,4 +2,11 @@ declare(strict_types=1); +/* + * This file is part of the PHP Humanizer Library. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + $loader = require_once __DIR__ . '/../vendor/autoload.php'; From 1b2787d28282247b3fe68cd5b9f6bf80f304fa63 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sat, 20 Apr 2019 18:07:00 +0200 Subject: [PATCH 117/193] Updated dev-master branch aliast --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index bb9d931..0ab0b54 100644 --- a/composer.json +++ b/composer.json @@ -37,7 +37,7 @@ }, "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "suggest": { From dc528ebcef31b793e1dd24dbe90f14039361fad1 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sat, 20 Apr 2019 18:08:40 +0200 Subject: [PATCH 118/193] Update README.md --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e808e1b..e157a55 100644 --- a/README.md +++ b/README.md @@ -7,13 +7,15 @@ [![License](https://poser.pugx.org/coduo/php-humanizer/license)](https://packagist.org/packages/coduo/php-humanizer) ### Tests -* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=master)](https://travis-ci.org/coduo/php-humanizer) - master (3.0) +* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=master)](https://travis-ci.org/coduo/php-humanizer) - master (3.1) +* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=3.0)](https://travis-ci.org/coduo/php-humanizer) - 3.0 * [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=2.0)](https://travis-ci.org/coduo/php-humanizer) - 2.0 * [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=1.0)](https://travis-ci.org/coduo/php-humanizer) - 1.0 -[Readme for master (3.0) version](https://github.com/coduo/php-humanizer/tree/master/README.md) -[Readme for 2.0 version](https://github.com/coduo/php-matcher/tree/2.0/README.md) -[Readme for 1.0 version](https://github.com/coduo/php-matcher/tree/1.0/README.md) +[Readme for master (3.1) version](https://github.com/coduo/php-humanizer/tree/master/README.md) +[Readme for 3.0 version](https://github.com/coduo/php-humanizer/tree/3.0/README.md) +[Readme for 2.0 version](https://github.com/coduo/php-humanizer/tree/2.0/README.md) +[Readme for 1.0 version](https://github.com/coduo/php-humanizer/tree/1.0/README.md) Humanize values to make them readable for regular people ;) From 4d62dba187d89bc8276ff6e5364d2dd9a3f2ad5f Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sat, 20 Apr 2019 18:12:27 +0200 Subject: [PATCH 119/193] Migrated from travis-ci.org to travis-ci.com --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e157a55..3de1c5a 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,10 @@ [![License](https://poser.pugx.org/coduo/php-humanizer/license)](https://packagist.org/packages/coduo/php-humanizer) ### Tests -* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=master)](https://travis-ci.org/coduo/php-humanizer) - master (3.1) -* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=3.0)](https://travis-ci.org/coduo/php-humanizer) - 3.0 -* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=2.0)](https://travis-ci.org/coduo/php-humanizer) - 2.0 -* [![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=1.0)](https://travis-ci.org/coduo/php-humanizer) - 1.0 +* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=master)](https://travis-ci.com/coduo/php-humanizer) - master (3.1) +* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=3.0)](https://travis-ci.com/coduo/php-humanizer) - 3.0 +* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=2.0)](https://travis-ci.com/coduo/php-humanizer) - 2.0 +* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=1.0)](https://travis-ci.com/coduo/php-humanizer) - 1.0 [Readme for master (3.1) version](https://github.com/coduo/php-humanizer/tree/master/README.md) [Readme for 3.0 version](https://github.com/coduo/php-humanizer/tree/3.0/README.md) From 6255e022c0ff8767cae6cdb4552d13f5f0df0d65 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Mon, 29 Apr 2019 17:57:07 +0200 Subject: [PATCH 120/193] Moved php-cs-fixer to dev dependency where it belongs to --- composer.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 0ab0b54..2b0fa85 100644 --- a/composer.json +++ b/composer.json @@ -18,13 +18,13 @@ "php": ">=7.0.0", "symfony/config": "^2.3|^3.0|^4", "symfony/translation": "^2.3|^3.0|^4", - "symfony/yaml": "^2.3|^3.0|^4", - "friendsofphp/php-cs-fixer": "^2.14" + "symfony/yaml": "^2.3|^3.0|^4" }, "require-dev": { "thunderer/shortcode": "^0.7", "phpspec/phpspec": "^2", - "phpunit/phpunit": "^4.5|^5.0" + "phpunit/phpunit": "^4.5|^5.0", + "friendsofphp/php-cs-fixer": "^2.14" }, "config": { "bin-dir": "bin" From 142689763a6aafdd9f1dfbb48db9807bbe027acc Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Fri, 9 Aug 2019 15:14:46 +0200 Subject: [PATCH 121/193] Update README.md --- README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 3de1c5a..5546d71 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # PHP Humanizer -[![Build Status](https://travis-ci.org/coduo/php-humanizer.svg?branch=master)](https://travis-ci.org/coduo/php-humanizer) +[![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=master)](https://travis-ci.com/coduo/php-humanizer) [![Latest Stable Version](https://poser.pugx.org/coduo/php-humanizer/v/stable)](https://packagist.org/packages/coduo/php-humanizer) [![Total Downloads](https://poser.pugx.org/coduo/php-humanizer/downloads)](https://packagist.org/packages/coduo/php-humanizer) [![Latest Unstable Version](https://poser.pugx.org/coduo/php-humanizer/v/unstable)](https://packagist.org/packages/coduo/php-humanizer) @@ -9,13 +9,10 @@ ### Tests * [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=master)](https://travis-ci.com/coduo/php-humanizer) - master (3.1) * [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=3.0)](https://travis-ci.com/coduo/php-humanizer) - 3.0 -* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=2.0)](https://travis-ci.com/coduo/php-humanizer) - 2.0 -* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=1.0)](https://travis-ci.com/coduo/php-humanizer) - 1.0 [Readme for master (3.1) version](https://github.com/coduo/php-humanizer/tree/master/README.md) [Readme for 3.0 version](https://github.com/coduo/php-humanizer/tree/3.0/README.md) -[Readme for 2.0 version](https://github.com/coduo/php-humanizer/tree/2.0/README.md) -[Readme for 1.0 version](https://github.com/coduo/php-humanizer/tree/1.0/README.md) + Humanize values to make them readable for regular people ;) From 43a5d2ba384fbbd8dfabdeba5abb4ea46281d749 Mon Sep 17 00:00:00 2001 From: Brian Wozeniak Date: Sun, 17 May 2020 07:00:12 -0700 Subject: [PATCH 122/193] Fixed composer autoloading deprecation notice; Support symfony 5 (#115) * Allow version 5 of symfony packages * Fixed deprecation notice for class autoloading Co-authored-by: Brian Wozeniak --- composer.json | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/composer.json b/composer.json index 2b0fa85..9159b28 100644 --- a/composer.json +++ b/composer.json @@ -16,9 +16,9 @@ ], "require": { "php": ">=7.0.0", - "symfony/config": "^2.3|^3.0|^4", - "symfony/translation": "^2.3|^3.0|^4", - "symfony/yaml": "^2.3|^3.0|^4" + "symfony/config": "^2.3|^3.0|^4|^5", + "symfony/translation": "^2.3|^3.0|^4|^5", + "symfony/yaml": "^2.3|^3.0|^4|^5" }, "require-dev": { "thunderer/shortcode": "^0.7", @@ -31,7 +31,11 @@ }, "autoload": { "psr-4": { - "": "src", + "": "src/" + } + }, + "autoload-dev": { + "psr-4": { "Coduo\\PHPHumanizer\\Tests\\": "tests/" } }, From f989a91d2d90f5d4bf4922ab9fec1674e7fe024e Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Thu, 4 Jun 2020 22:46:00 +0200 Subject: [PATCH 123/193] Create FUNDING.yml --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..4f8e199 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: [norberttech] From fa52e6223eef2f19fbd0a290432b5a878317dca2 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Wed, 8 Jul 2020 14:28:58 +0200 Subject: [PATCH 124/193] Fixxed issue with symfony translator dependency, upgraded php, phpunit and phpspec dependencies --- .gitignore | 2 +- .travis.yml | 1 + README.md | 6 ++-- composer.json | 18 ++++++------ .../PHPHumanizer/Collection/FormatterSpec.php | 3 +- .../PHPHumanizer/Collection/OxfordSpec.php | 2 +- .../PHPHumanizer/DateTime/FormatterSpec.php | 10 +++---- .../DateTime/PreciseFormatterSpec.php | 16 ++++------- .../PHPHumanizer/Collection/Formatter.php | 6 ++-- src/Coduo/PHPHumanizer/DateTime/Formatter.php | 7 ++--- .../DateTime/PreciseFormatter.php | 7 ++--- .../PHPHumanizer/Number/RomanNumeral.php | 4 +-- .../Tests/CollectionHumanizerTest.php | 3 +- .../Tests/DateTimeHumanizerTest.php | 3 +- .../Tests/NumberHumanizerTest.php | 28 +++++++++---------- .../Tests/StringHumanizerTest.php | 4 +-- 16 files changed, 56 insertions(+), 64 deletions(-) diff --git a/.gitignore b/.gitignore index f0bf8a2..e0a7c66 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ vendor/ bin/ composer.lock composer.phar -.php_cs.cache \ No newline at end of file +*.cache \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index dd1b745..2d6b0e9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,7 @@ matrix: - php: 7.1 - php: 7.2 - php: 7.3 + - php: 7.4 before_install: - composer self-update diff --git a/README.md b/README.md index 5546d71..49c184c 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,16 @@ # PHP Humanizer -[![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=master)](https://travis-ci.com/coduo/php-humanizer) +[![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=4.x)](https://travis-ci.com/coduo/php-humanizer) [![Latest Stable Version](https://poser.pugx.org/coduo/php-humanizer/v/stable)](https://packagist.org/packages/coduo/php-humanizer) [![Total Downloads](https://poser.pugx.org/coduo/php-humanizer/downloads)](https://packagist.org/packages/coduo/php-humanizer) [![Latest Unstable Version](https://poser.pugx.org/coduo/php-humanizer/v/unstable)](https://packagist.org/packages/coduo/php-humanizer) [![License](https://poser.pugx.org/coduo/php-humanizer/license)](https://packagist.org/packages/coduo/php-humanizer) ### Tests -* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=master)](https://travis-ci.com/coduo/php-humanizer) - master (3.1) +* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=4.x)](https://travis-ci.com/coduo/php-humanizer) - 4.x * [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=3.0)](https://travis-ci.com/coduo/php-humanizer) - 3.0 -[Readme for master (3.1) version](https://github.com/coduo/php-humanizer/tree/master/README.md) +[Readme for 4.x version](https://github.com/coduo/php-humanizer/tree/4.x/README.md) [Readme for 3.0 version](https://github.com/coduo/php-humanizer/tree/3.0/README.md) diff --git a/composer.json b/composer.json index 9159b28..098b493 100644 --- a/composer.json +++ b/composer.json @@ -15,16 +15,16 @@ } ], "require": { - "php": ">=7.0.0", - "symfony/config": "^2.3|^3.0|^4|^5", - "symfony/translation": "^2.3|^3.0|^4|^5", - "symfony/yaml": "^2.3|^3.0|^4|^5" + "php": ">=7.3", + "symfony/config": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" }, "require-dev": { "thunderer/shortcode": "^0.7", - "phpspec/phpspec": "^2", - "phpunit/phpunit": "^4.5|^5.0", - "friendsofphp/php-cs-fixer": "^2.14" + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.4", + "friendsofphp/php-cs-fixer": "^2.16" }, "config": { "bin-dir": "bin" @@ -36,12 +36,12 @@ }, "autoload-dev": { "psr-4": { - "Coduo\\PHPHumanizer\\Tests\\": "tests/" + "": "tests/" } }, "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "4.0-dev" } }, "suggest": { diff --git a/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php b/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php index 81164ef..e7bc4a8 100644 --- a/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php +++ b/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php @@ -17,9 +17,8 @@ function let(Translator $translator) 'oxford' )->willReturn('Michal and Norbert'); - $translator->transChoice( + $translator->trans( 'comma_separated_with_limit', - 1, array('%count%' => 1, "%list%" => 'Michal, Norbert'), 'oxford' )->willReturn('Michal, Norbert and 1 more'); diff --git a/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php b/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php index 0a6b56f..536e4d3 100644 --- a/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php +++ b/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php @@ -5,7 +5,7 @@ use Coduo\PHPHumanizer\Collection\Formatter; use PhpSpec\ObjectBehavior; use Prophecy\Argument; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; class OxfordSpec extends ObjectBehavior { diff --git a/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php b/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php index 4bf48ae..1372ad3 100644 --- a/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php +++ b/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php @@ -13,17 +13,15 @@ class FormatterSpec extends ObjectBehavior function let(Translator $translator) { $this->beConstructedWith($translator); - $translator->transChoice( + $translator->trans( 'minute.past', - 10, array('%count%' => 10), 'difference', 'en' )->willReturn('10 minutes ago'); - $translator->transChoice( + $translator->trans( 'minute.past', - 10, array('%count%' => 10), 'difference', 'pl' @@ -36,7 +34,7 @@ function it_format_datetime_diff() new \DateTime("2015-01-01 00:10:00"), new \DateTime("2015-01-01 00:00:00") ); - + $this->formatDifference($diff)->shouldReturn('10 minutes ago'); } @@ -46,7 +44,7 @@ function it_format_datetime_diff_for_specific_locale() new \DateTime("2015-01-01 00:10:00"), new \DateTime("2015-01-01 00:00:00") ); - + $this->formatDifference($diff, 'pl')->shouldReturn('10 minut temu'); } } diff --git a/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php b/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php index 1ecf75e..5228235 100644 --- a/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php +++ b/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php @@ -15,17 +15,15 @@ class PreciseFormatterSpec extends ObjectBehavior function let(Translator $translator) { $this->beConstructedWith($translator); - $translator->transChoice( + $translator->trans( 'compound.day', - 10, array('%count%' => 10), 'difference', 'en' )->willReturn('10 days'); - $translator->transChoice( + $translator->trans( 'compound.hour', - 5, array('%count%' => 5), 'difference', 'en' @@ -38,17 +36,15 @@ function let(Translator $translator) 'en' )->willReturn('10 days, 5 hours from now'); - $translator->transChoice( + $translator->trans( 'compound.day', - 10, array('%count%' => 10), 'difference', 'ru' )->willReturn('10 дней'); - $translator->transChoice( + $translator->trans( 'compound.hour', - 5, array('%count%' => 5), 'difference', 'ru' @@ -66,7 +62,7 @@ function it_format_compound_datetime_diff() { $diff = new PreciseDifference( new \DateTime("2015-01-01 00:00:00"), - new \DateTime("2015-01-11 05:00:00") + new \DateTime("2015-01-11 05:00:00") ); $this->formatDifference($diff)->shouldReturn('10 days, 5 hours from now'); @@ -78,7 +74,7 @@ function it_format_compound_datetime_diff_for_specific_locale() new \DateTime("2015-01-01 00:00:00"), new \DateTime("2015-01-11 05:00:00") ); - + $this->formatDifference($diff, 'ru')->shouldReturn('через 10 дней, 5 часов'); } } diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php index ec28b4b..aa0798a 100644 --- a/src/Coduo/PHPHumanizer/Collection/Formatter.php +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -11,12 +11,12 @@ namespace Coduo\PHPHumanizer\Collection; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; final class Formatter { /** - * @var \Symfony\Component\Translation\TranslatorInterface + * @var TranslatorInterface */ private $translator; @@ -72,7 +72,7 @@ private function formatCommaSeparatedWithLimit($collection, $limit, $count) $moreCount = $count - \count($display); - return $this->translator->transChoice('comma_separated_with_limit', $moreCount, [ + return $this->translator->trans('comma_separated_with_limit', [ '%list%' => \implode(', ', $display), '%count%' => $moreCount, ], $this->catalogue); diff --git a/src/Coduo/PHPHumanizer/DateTime/Formatter.php b/src/Coduo/PHPHumanizer/DateTime/Formatter.php index 781fc3d..a5d7c2f 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Formatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/Formatter.php @@ -11,12 +11,12 @@ namespace Coduo\PHPHumanizer\DateTime; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; final class Formatter { /** - * @var \Symfony\Component\Translation\TranslatorInterface + * @var TranslatorInterface */ private $translator; @@ -38,9 +38,8 @@ public function formatDifference(Difference $difference, $locale = 'en') { $translationKey = \sprintf('%s.%s', $difference->getUnit()->getName(), $difference->isPast() ? 'past' : 'future'); - return $this->translator->transChoice( + return $this->translator->trans( $translationKey, - $difference->getQuantity(), ['%count%' => $difference->getQuantity()], 'difference', $locale diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index 66800a1..a47fe67 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -11,12 +11,12 @@ namespace Coduo\PHPHumanizer\DateTime; -use Symfony\Component\Translation\TranslatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; final class PreciseFormatter { /** - * @var \Symfony\Component\Translation\TranslatorInterface + * @var TranslatorInterface */ private $translator; @@ -39,9 +39,8 @@ public function formatDifference(PreciseDifference $difference, $locale = 'en') $diff = []; foreach ($difference->getCompoundResults() as $result) { - $diff[] = $this->translator->transChoice( + $diff[] = $this->translator->trans( 'compound.'.$result->getUnit()->getName(), - $result->getQuantity(), ['%count%' => $result->getQuantity()], 'difference', $locale diff --git a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php index 745c60c..4e184a9 100644 --- a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php +++ b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php @@ -78,10 +78,10 @@ public function fromRoman($string) $i = \mb_strlen($string); while ($i > 0) { - $digit = $this->map[$string{--$i}]; + $digit = $this->map[$string[--$i]]; if ($i > 0) { - $previousDigit = $this->map[$string{$i - 1}]; + $previousDigit = $this->map[$string[$i - 1]]; if ($previousDigit < $digit) { $digit -= $previousDigit; diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php index 29933a9..0753e23 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php @@ -12,8 +12,9 @@ namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\CollectionHumanizer; +use PHPUnit\Framework\TestCase; -final class CollectionHumanizerTest extends \PHPUnit_Framework_TestCase +final class CollectionHumanizerTest extends TestCase { /** * @dataProvider oxfordCollectionProvider diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index efa9d95..a50a16d 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -12,8 +12,9 @@ namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\DateTimeHumanizer; +use PHPUnit\Framework\TestCase; -class DateTimeHumanizerTest extends \PHPUnit_Framework_TestCase +class DateTimeHumanizerTest extends TestCase { /** * @test diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php index ae40dbc..a0a9847 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php @@ -12,8 +12,9 @@ namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\NumberHumanizer; +use PHPUnit\Framework\TestCase; -class NumberHumanizerTest extends \PHPUnit_Framework_TestCase +class NumberHumanizerTest extends TestCase { /** * @dataProvider ordinalIndicatorProvider @@ -184,11 +185,9 @@ public function test_convert_number_to_string_with_binary_suffix($expected, $num $this->assertEquals($expected, NumberHumanizer::binarySuffix($number, $locale)); } - /** - * @expectedException \InvalidArgumentException - */ public function test_statically_throw_exception_when_converting_to_string_with_binary_suffix_non_numeric_values() { + $this->expectException(\InvalidArgumentException::class); NumberHumanizer::binarySuffix('as12'); } @@ -205,19 +204,17 @@ public function test_convert_number_to_string_with_precise_binary_suffix($expect $this->assertEquals($expected, NumberHumanizer::preciseBinarySuffix($number, $precision, $locale)); } - /** - * @expectedException \InvalidArgumentException - */ public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_negative_precision() { + $this->expectException(\InvalidArgumentException::class); + NumberHumanizer::preciseBinarySuffix(1, -1); } - /** - * @expectedException \InvalidArgumentException - */ public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_large_precision() { + $this->expectException(\InvalidArgumentException::class); + NumberHumanizer::preciseBinarySuffix(1, 4); } @@ -233,11 +230,10 @@ public function test_convert_number_to_string_with_metric_suffix($expected, $num $this->assertEquals($expected, NumberHumanizer::metricSuffix($number, $locale)); } - /** - * @expectedException \InvalidArgumentException - */ public function test_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() { + $this->expectException(\InvalidArgumentException::class); + NumberHumanizer::metricSuffix('as12'); } @@ -265,23 +261,25 @@ public function test_convert_roman_numbers_to_arabic($number, $expected) /** * @dataProvider romanExceptionProvider - * @expectedException \InvalidArgumentException * * @param $number */ public function test_statically_throw_exception_when_converting_number_is_out_of_range($number) { + $this->expectException(\InvalidArgumentException::class); + NumberHumanizer::toRoman($number); } /** * @dataProvider arabicExceptionProvider - * @expectedException \InvalidArgumentException * * @param $number */ public function test_statically_throw_exception_when_converting_roman_number_is_invalid($number) { + $this->expectException(\InvalidArgumentException::class); + NumberHumanizer::fromRoman($number); } diff --git a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php index c3f1f51..6f318b3 100644 --- a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php @@ -12,9 +12,9 @@ namespace Coduo\PHPHumanizer\Tests; use Coduo\PHPHumanizer\StringHumanizer; -use PHPUnit_Framework_TestCase; +use PHPUnit\Framework\TestCase; -class StringHumanizerTest extends PHPUnit_Framework_TestCase +class StringHumanizerTest extends TestCase { /** * @dataProvider humanizeStringProvider From fc3a043f6e03bc29e86d0cd58ae3a6b7daf40d69 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Wed, 8 Jul 2020 14:34:38 +0200 Subject: [PATCH 125/193] Fixed travis configuration --- .travis.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2d6b0e9..80b4cb0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,17 +6,14 @@ cache: matrix: include: - - php: 7.0 - - php: 7.1 - - php: 7.2 - php: 7.3 - php: 7.4 + - php: 8.0 before_install: - composer self-update install: - - export COMPOSER_ROOT_VERSION=dev-master - composer update script: From 83a1805da9a28a98a0bb932a5236becd44ea79b6 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Wed, 8 Jul 2020 14:58:48 +0200 Subject: [PATCH 126/193] Removed php 8.0 from matrix --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 80b4cb0..aa0c007 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,6 @@ matrix: include: - php: 7.3 - php: 7.4 - - php: 8.0 before_install: - composer self-update From b0f40dfbf41d7e89b73cb509cb8d4ddd7217fa2b Mon Sep 17 00:00:00 2001 From: Emin Rahmanov Date: Sat, 17 Oct 2020 22:31:38 +0400 Subject: [PATCH 127/193] create azerbaijani translation (#118) --- .../Resources/translations/difference.az.yml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml new file mode 100644 index 0000000..08a24fe --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] indi" + future: "[0,Inf] indi" +second: + past: "{1} %count% saniyə əvvəl|[2,Inf] %count% saniyə əvvəl" + future: "{1} %count% saniyə sonra|[2,Inf] %count% saniyə sonra" +minute: + past: "{1} %count% dəqiqə əvvəl|[2,Inf] %count% dəqiqə əvvəl" + future: "{1} %count% dəqiqə sonra|[2,Inf] %count% dəqiqə sonra" +hour: + past: "{1} %count% saat əvvəl|[2,Inf] %count% saat əvvəl" + future: "{1} %count% saat sonra|[2,Inf] %count% saat sonra" +day: + past: "{1} %count% gün əvvəl|[2,Inf] %count% gün əvvəl" + future: "{1} %count% gün sonra|[2,Inf] %count% gün sonra" +week: + past: "{1} %count% həftə əvvəl|[2,Inf] %count% həftə əvvəl" + future: "{1} %count% həftə sonra|[2,Inf] %count% həftə sonra" +month: + past: "{1} %count% ay əvvəl|[2,Inf] %count% ay əvvəl" + future: "{1} %count% ay sonra|[2,Inf] %count% ay sonra" +year: + past: "{1} %count% il əvvəl|[2,Inf] %count% il əvvəl" + future: "{1} %count% il sonra|[2,Inf] %count% il sonra" + +compound: + second: "{1} %count% saniyə|[2,Inf] %count% saniyə" + minute: "{1} %count% dəqiqə|[2,Inf] %count% dəqiqə" + hour: "{1} %count% saat|[2,Inf] %count% saat" + day: "{1} %count% gün|[2,Inf] %count% gün" + week: "{1} %count% həftə|[2,Inf] %count% həftə" + month: "{1} %count% ay|[2,Inf] %count% ay" + year: "{1} %count% il|[2,Inf] %count% il" + past: "%value% əvvəl" + future: "%value% sonra" From c86d1827465574cc2dc8e941609ff1e06ba26d62 Mon Sep 17 00:00:00 2001 From: Emin Rahmanov Date: Sat, 17 Oct 2020 22:31:53 +0400 Subject: [PATCH 128/193] Update README.md (#119) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 49c184c..345a7ca 100644 --- a/README.md +++ b/README.md @@ -239,6 +239,7 @@ DateTimeHumanizer::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \ ``` Currently we support following languages: +* [Azerbaijani](src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml) * [English](src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml) * [Polish](src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml) * [German](src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml) From da1bbcf027a49b101110a668ba564ae0f8e12b13 Mon Sep 17 00:00:00 2001 From: Emin Rahmanov Date: Sun, 18 Oct 2020 11:09:06 +0400 Subject: [PATCH 129/193] Support Azerbaijani language (#120) --- .../Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index a50a16d..a4c441e 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -270,6 +270,16 @@ public function humanizeDataProvider() public function preciseDifferenceDataProvider() { return [ + // Azerbaijani + ['2014-04-26 13:00:00', '2014-04-26 12:58:15', '1 dəqiqə, 45 saniyə əvvəl', 'az'], + ['2014-04-26 13:00:00', '2014-04-26 11:20:00', '1 saat, 40 dəqiqə əvvəl', 'az'], + ['2014-04-26 13:00:00', '2014-04-27 13:15:00', '1 gün, 15 dəqiqə sonra', 'az'], + ['2014-04-26 13:00:00', '2014-05-03 15:00:00', '7 gün, 2 saat sonra', 'az'], + ['2014-04-26 13:00:00', '2015-04-28 17:00:00', '1 il, 2 gün, 4 saat sonra', 'az'], + ['2014-04-26 13:00:00', '2014-04-28 23:00:00', '2 gün, 10 saat sonra', 'az'], + ['2014-04-26 13:00:00', '2014-04-25 11:20:00', '1 gün, 1 saat, 40 dəqiqə əvvəl', 'az'], + ['2014-04-26 13:00:00', '2016-04-27 13:00:00', '2 il, 1 gün sonra', 'az'], + // English ['2014-04-26 13:00:00', '2014-04-26 12:58:15', '1 minute, 45 seconds ago', 'en'], ['2014-04-26 13:00:00', '2014-04-26 11:20:00', '1 hour, 40 minutes ago', 'en'], From 2d045f4f080d30da864815b561e1b018743619b9 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 21 Feb 2021 23:03:42 +0100 Subject: [PATCH 130/193] Upgrade php-humanizer to the latest standards (#122) * Library dependencies upgrade & cleanup * Fixed static analyze errors * Aeon php integration * Removed travis configuration * Fixed missing phive keys --- .gitattributes | 11 + .github/PULL_REQUEST_TEMPLATE.md | 33 + .github/dependabot.yml | 6 + .github/workflows/changelog-release.yml | 31 + .github/workflows/changelog-update.yml | 38 + .../pull-request-description-check.yml | 20 + .../workflows/release-description-update.yml | 25 + .github/workflows/static-analyze.yml | 77 + .github/workflows/tests.yml | 80 + .gitignore | 5 +- .phive/phars.xml | 6 + .travis.yml | 19 - CHANGELOG.md | 271 +- CODE_OF_CONDUCT.md | 76 + CONTRIBUTING.md | 23 - LICENSE | 2 +- README.md | 4 +- baseline.xml | 26 + composer.json | 29 +- composer.lock | 2640 +++++++++++++++++ phpstan.neon | 6 + phpunit.xml.dist | 34 +- psalm.xml | 17 + .../PHPHumanizer/Collection/FormatterSpec.php | 47 - .../PHPHumanizer/Collection/OxfordSpec.php | 45 - .../PHPHumanizer/DateTime/DifferenceSpec.php | 106 - .../PHPHumanizer/DateTime/FormatterSpec.php | 50 - .../DateTime/PreciseFormatterSpec.php | 80 - .../String/WordBreakpointSpec.php | 36 - .../PHPHumanizer/Collection/Formatter.php | 49 +- src/Coduo/PHPHumanizer/Collection/Oxford.php | 17 +- .../PHPHumanizer/CollectionHumanizer.php | 7 +- .../PHPHumanizer/DateTime/Difference.php | 35 +- .../DateTime/Difference/CompoundResult.php | 29 +- src/Coduo/PHPHumanizer/DateTime/Formatter.php | 18 +- .../DateTime/PreciseDifference.php | 28 +- .../DateTime/PreciseFormatter.php | 18 +- src/Coduo/PHPHumanizer/DateTime/Unit.php | 13 +- src/Coduo/PHPHumanizer/DateTime/Unit/Day.php | 9 +- src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php | 9 +- .../PHPHumanizer/DateTime/Unit/JustNow.php | 9 +- .../PHPHumanizer/DateTime/Unit/Minute.php | 9 +- .../PHPHumanizer/DateTime/Unit/Month.php | 9 +- .../PHPHumanizer/DateTime/Unit/Second.php | 9 +- src/Coduo/PHPHumanizer/DateTime/Unit/Week.php | 9 +- src/Coduo/PHPHumanizer/DateTime/Unit/Year.php | 9 +- src/Coduo/PHPHumanizer/DateTimeHumanizer.php | 16 +- src/Coduo/PHPHumanizer/Number/Ordinal.php | 11 +- .../PHPHumanizer/Number/Ordinal/Builder.php | 29 +- .../Number/Ordinal/StrategyInterface.php | 8 +- .../PHPHumanizer/Number/RomanNumeral.php | 28 +- src/Coduo/PHPHumanizer/NumberHumanizer.php | 40 +- .../Resources/Ordinal/DeStrategy.php | 8 +- .../Resources/Ordinal/EnStrategy.php | 10 +- .../Resources/Ordinal/EsStrategy.php | 8 +- .../Resources/Ordinal/FrStrategy.php | 8 +- .../Resources/Ordinal/IdStrategy.php | 11 +- .../Resources/Ordinal/ItStrategy.php | 8 +- .../Resources/Ordinal/NlStrategy.php | 10 +- .../Resources/Ordinal/PtStrategy.php | 8 +- .../PHPHumanizer/String/BinarySuffix.php | 49 +- src/Coduo/PHPHumanizer/String/Breakpoint.php | 8 +- .../PHPHumanizer/String/HtmlTruncate.php | 40 +- src/Coduo/PHPHumanizer/String/Humanize.php | 30 +- .../PHPHumanizer/String/MetricSuffix.php | 34 +- .../String/ShortcodeProcessor.php | 34 +- .../PHPHumanizer/String/TextTruncate.php | 28 +- .../PHPHumanizer/String/TruncateInterface.php | 8 +- .../PHPHumanizer/String/WordBreakpoint.php | 15 +- src/Coduo/PHPHumanizer/StringHumanizer.php | 44 +- src/Coduo/PHPHumanizer/Translator/Builder.php | 6 +- .../Tests/Collection/FormatterTest.php | 49 + .../Tests/Collection/OxfordTest.php | 36 + .../Tests/DateTime/DifferenceTest.php | 120 + .../Tests/DateTime/FormatterTest.php | 44 + .../Tests/DateTime/PreciseFormatterTest.php | 44 + .../Tests/NumberHumanizerTest.php | 7 - .../Tests/String/WordBreakpointTest.php | 51 + tests/bootstrap.php | 12 - 79 files changed, 3978 insertions(+), 1013 deletions(-) create mode 100644 .gitattributes create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/changelog-release.yml create mode 100644 .github/workflows/changelog-update.yml create mode 100644 .github/workflows/pull-request-description-check.yml create mode 100644 .github/workflows/release-description-update.yml create mode 100644 .github/workflows/static-analyze.yml create mode 100644 .github/workflows/tests.yml create mode 100644 .phive/phars.xml delete mode 100644 .travis.yml create mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md create mode 100644 baseline.xml create mode 100644 composer.lock create mode 100644 phpstan.neon create mode 100644 psalm.xml delete mode 100644 spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php delete mode 100644 spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php delete mode 100644 spec/Coduo/PHPHumanizer/DateTime/DifferenceSpec.php delete mode 100644 spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php delete mode 100644 spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php delete mode 100644 spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php create mode 100644 tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php create mode 100644 tests/Coduo/PHPHumanizer/Tests/Collection/OxfordTest.php create mode 100644 tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php create mode 100644 tests/Coduo/PHPHumanizer/Tests/DateTime/FormatterTest.php create mode 100644 tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php create mode 100644 tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php delete mode 100644 tests/bootstrap.php diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..d5fe021 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +*.php text eol=lf +*.phpt text eol=lf +/composer.lock export-ignore +/.github/ export-ignore +/.phive/ export-ignore +/tests export-ignore +/.gitattributes export-ignore +/.gitignore export-ignore +/.php_cs export-ignore +/phpstan.neon export-ignore +/phpunit.xml export-ignore \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..07c5e96 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,33 @@ + +

Change Log

+
+

Added

+
    + +
+

Fixed

+
    + +
+

Changed

+
    + +
+

Removed

+
    + +
+

Deprecated

+
    + +
+

Security

+
    + +
+
+
+ +

Description

+ + \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..12f28b4 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "composer" + directory: "/" + schedule: + interval: "daily" \ No newline at end of file diff --git a/.github/workflows/changelog-release.yml b/.github/workflows/changelog-release.yml new file mode 100644 index 0000000..bb9608a --- /dev/null +++ b/.github/workflows/changelog-release.yml @@ -0,0 +1,31 @@ +name: "Changelog - Release Unreleased" + +################################################################### +# WARNING - THIS ACTION WILL PUSH COMMIT DIRECTLY INTO REPOSITORY # +################################################################### + +on: + push: + tags: + - '*' + +jobs: + changelog-release-unreleased: + name: "Update Changelog - Release Unreleased" + + runs-on: "ubuntu-latest" + + steps: + - name: "Get tag name" + id: "tag-name" + run: | + tag=$(echo ${{ github.event.ref }} | cut -c11-) + echo "::set-output name=tag::$tag" + + - name: "Update CHANGELOG" + uses: "docker://aeonphp/automation:latest" + env: + AEON_AUTOMATION_GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + with: + entrypoint: "/composer/vendor/bin/automation" + args: "changelog:release:unreleased ${{ github.repository }} CHANGELOG.md ${{ steps.tag-name.outputs.tag }} --github-file-changelog-update" diff --git a/.github/workflows/changelog-update.yml b/.github/workflows/changelog-update.yml new file mode 100644 index 0000000..e0ae30a --- /dev/null +++ b/.github/workflows/changelog-update.yml @@ -0,0 +1,38 @@ +name: "Changelog - Update Unreleased" + +################################################################### +# WARNING - THIS ACTION WILL PUSH COMMIT DIRECTLY INTO REPOSITORY # +################################################################### + +on: + push: + branches: + - 6.x + +jobs: + changelog-update-unreleased: + name: "Changelog - Update Unreleased" + + runs-on: "ubuntu-latest" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Restore Automation cache" + uses: "actions/cache@v2" + with: + path: | + cache + key: "${{ runner.os }}-automation-${{ hashFiles('**/CHANGELOG.md') }}" + restore-keys: | + ${{ runner.os }}-automation- + + - name: "Update CHANGELOG" + uses: "docker://aeonphp/automation:latest" + env: + AEON_AUTOMATION_GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + EON_AUTOMATION_CACHE_DIR: "/github/workspace/cache" + with: + entrypoint: "/composer/vendor/bin/automation" + args: "changelog:generate ${{ github.repository }} --github-file-update-path=CHANGELOG.md --skip-from=\"dependabot[bot]\" --skip-from=\"aeon-automation\"" diff --git a/.github/workflows/pull-request-description-check.yml b/.github/workflows/pull-request-description-check.yml new file mode 100644 index 0000000..f624146 --- /dev/null +++ b/.github/workflows/pull-request-description-check.yml @@ -0,0 +1,20 @@ +name: "Pull Request Description Check" + +on: + pull_request: + types: ["opened", "edited", "reopened", "ready_for_review"] + +jobs: + pull-request-description-check: + name: "Pull Request Description" + + runs-on: "ubuntu-latest" + + steps: + - name: "Pull Request Description - Check" + uses: "docker://aeonphp/automation:latest" + env: + AEON_AUTOMATION_GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + with: + entrypoint: "/composer/vendor/bin/automation" + args: "pull-request:description:check ${{ github.repository }} ${{ github.event.pull_request.number }} --skip-from=\"dependabot[bot]\"" \ No newline at end of file diff --git a/.github/workflows/release-description-update.yml b/.github/workflows/release-description-update.yml new file mode 100644 index 0000000..c2db558 --- /dev/null +++ b/.github/workflows/release-description-update.yml @@ -0,0 +1,25 @@ +name: "Release - Description Update" + +######################################################### +# WARNING - THIS ACTION WILL UPDATE RELEASE DESCRIPTION # +######################################################### + +on: + release: + types: + - created + +jobs: + release-description-update: + name: "Release - Description Update" + + runs-on: "ubuntu-latest" + + steps: + - name: "Update CHANGELOG" + uses: "docker://aeonphp/automation:latest" + env: + AEON_AUTOMATION_GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + with: + entrypoint: "/composer/vendor/bin/automation" + args: "changelog:generate ${{ github.repository }} --tag=${{ github.event.release.tag_name }} --github-release-update --skip-from=\"dependabot[bot]\" --skip-from=\"aeon-automation\"" diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml new file mode 100644 index 0000000..45b6c03 --- /dev/null +++ b/.github/workflows/static-analyze.yml @@ -0,0 +1,77 @@ +name: "Static Analyze" + +on: + pull_request: + push: + branches: + - "4.x" + schedule: + - cron: '* 8 * * *' + +jobs: + compatibility: + name: "Static Analyze" + + runs-on: ${{ matrix.operating-system }} + + strategy: + matrix: + dependencies: + - "locked" + php-version: + - "7.4" + operating-system: + - "ubuntu-latest" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "pcov" + php-version: "${{ matrix.php-version }}" + ini-values: memory_limit=-1 + tools: phive, composer:v2 + + - name: "Cache Phive dependencies" + uses: "actions/cache@v2" + with: + path: | + ~/.phive + key: "${{ runner.os }}-phive-${{ hashFiles('**/phars.xml') }}" + restore-keys: | + ${{ runner.os }}-phive- + + - name: "Get Composer Cache Directory" + id: composer-cache + run: | + echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: "Cache Composer dependencies" + uses: "actions/cache@v2" + with: + path: | + ${{ steps.composer-cache.outputs.dir }} + key: "php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-${{ hashFiles('**/composer.lock') }}" + restore-keys: | + php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- + + - name: "Install tools" + run: "phive install --trust-gpg-keys E82B2FB314E9906E,CF1A108D0E7AE720,8A03EA3B385DBAA1,12CE0F1D262429A5 --force-accept-unsigned" + + - name: "Install lowest dependencies" + if: ${{ matrix.dependencies == 'lowest' }} + run: "composer update --prefer-lowest --no-interaction --no-progress --no-suggest" + + - name: "Install highest dependencies" + if: ${{ matrix.dependencies == 'highest' }} + run: "composer update --no-interaction --no-progress --no-suggest" + + - name: "Install locked dependencies" + if: ${{ matrix.dependencies == 'locked' }} + run: "composer install --no-interaction --no-progress --no-suggest" + + - name: "Static Analyze" + run: "composer static:analyze" \ No newline at end of file diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..5a2eb63 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,80 @@ +name: "Tests" + +on: + pull_request: + push: + branches: + - "4.x" + schedule: + - cron: '* 8 * * *' + +jobs: + compatibility: + name: "Tests" + + runs-on: ${{ matrix.operating-system }} + + strategy: + matrix: + dependencies: + - "locked" + - "lowest" + - "highest" + php-version: + - "7.4" + - "8.0" + operating-system: + - "ubuntu-latest" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "pcov" + php-version: "${{ matrix.php-version }}" + ini-values: memory_limit=-1 + tools: phive, composer:v2 + + - name: "Cache Phive dependencies" + uses: "actions/cache@v2" + with: + path: | + ~/.phive + key: "${{ runner.os }}-phive-${{ hashFiles('**/phars.xml') }}" + restore-keys: | + ${{ runner.os }}-phive- + + - name: "Get Composer Cache Directory" + id: composer-cache + run: | + echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: "Cache Composer dependencies" + uses: "actions/cache@v2" + with: + path: | + ${{ steps.composer-cache.outputs.dir }} + key: "php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-${{ hashFiles('**/composer.lock') }}" + restore-keys: | + php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- + + - name: "Install tools" + run: "phive install --trust-gpg-keys E82B2FB314E9906E,CF1A108D0E7AE720,8A03EA3B385DBAA1,12CE0F1D262429A5 --force-accept-unsigned" + + - name: "Install lowest dependencies" + if: ${{ matrix.dependencies == 'lowest' }} + run: "composer update --prefer-lowest --no-interaction --no-progress --no-suggest" + + - name: "Install highest dependencies" + if: ${{ matrix.dependencies == 'highest' }} + run: "composer update --no-interaction --no-progress --no-suggest" + + - name: "Install locked dependencies" + if: ${{ matrix.dependencies == 'locked' }} + run: "composer install --no-interaction --no-progress --no-suggest" + + - name: "Tests" + run: "composer test" diff --git a/.gitignore b/.gitignore index e0a7c66..482dd47 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ vendor/ bin/ -composer.lock -composer.phar -*.cache \ No newline at end of file +var/ +tools/ \ No newline at end of file diff --git a/.phive/phars.xml b/.phive/phars.xml new file mode 100644 index 0000000..a00e5c5 --- /dev/null +++ b/.phive/phars.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index aa0c007..0000000 --- a/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -language: php - -cache: - directories: - - $HOME/.composer/cache - -matrix: - include: - - php: 7.3 - - php: 7.4 - -before_install: - - composer self-update - -install: - - composer update - -script: - - composer run test \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 15c1f68..6125fde 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,268 @@ -# 2.0 +## [Unreleased] - 2020-10-18 -* Added support for PHP7 -* Updated dependencies to support Symfony3 components -* Added support for Ordinal number strategies that require prefixes +### Added +- [#120](https://github.com/coduo/php-humanizer/pull/120) - **test for azerbaijani language** - [@4t87ux8](https://github.com/4t87ux8) +- [#119](https://github.com/coduo/php-humanizer/pull/119) - **support azerbaijani language** - [@4t87ux8](https://github.com/4t87ux8) + +### Changed +- [#118](https://github.com/coduo/php-humanizer/pull/118) - **create azerbaijani translation** - [@4t87ux8](https://github.com/4t87ux8) +- [fa52e6](https://github.com/coduo/php-humanizer/commit/fa52e6223eef2f19fbd0a290432b5a878317dca2) - **Fixxed issue with symfony translator dependency, upgraded php, phpunit and phpspec dependencies** - [@norberttech](https://github.com/norberttech) +- [f989a9](https://github.com/coduo/php-humanizer/commit/f989a91d2d90f5d4bf4922ab9fec1674e7fe024e) - **Create FUNDING.yml** - [@norberttech](https://github.com/norberttech) +- [142689](https://github.com/coduo/php-humanizer/commit/142689763a6aafdd9f1dfbb48db9807bbe027acc) - **Update README.md** - [@norberttech](https://github.com/norberttech) +- [6255e0](https://github.com/coduo/php-humanizer/commit/6255e022c0ff8767cae6cdb4552d13f5f0df0d65) - **Moved php-cs-fixer to dev dependency where it belongs to** - [@norberttech](https://github.com/norberttech) +- [4d62db](https://github.com/coduo/php-humanizer/commit/4d62dba187d89bc8276ff6e5364d2dd9a3f2ad5f) - **Migrated from travis-ci.org to travis-ci.com** - [@norberttech](https://github.com/norberttech) +- [dc528e](https://github.com/coduo/php-humanizer/commit/dc528ebcef31b793e1dd24dbe90f14039361fad1) - **Update README.md** - [@norberttech](https://github.com/norberttech) +- [1b2787](https://github.com/coduo/php-humanizer/commit/1b2787d28282247b3fe68cd5b9f6bf80f304fa63) - **dev-master branch aliast** - [@norberttech](https://github.com/norberttech) + +### Fixed +- [fc3a04](https://github.com/coduo/php-humanizer/commit/fc3a043f6e03bc29e86d0cd58ae3a6b7daf40d69) - **travis configuration** - [@norberttech](https://github.com/norberttech) +- [#115](https://github.com/coduo/php-humanizer/pull/115) - **composer autoloading deprecation notice; Support symfony 5** - [@brianwozeniak](https://github.com/brianwozeniak) + +### Removed +- [83a180](https://github.com/coduo/php-humanizer/commit/83a1805da9a28a98a0bb932a5236becd44ea79b6) - **php 8.0 from matrix** - [@norberttech](https://github.com/norberttech) + +## [3.0.2] - 2019-04-29 + +### Changed +- [9d83e5](https://github.com/coduo/php-humanizer/commit/9d83e509dacfd26250ee4c6b0f195affb08cb1e2) - **Moved php-cs-fixer to dev dependency where it belongs to** - [@norberttech](https://github.com/norberttech) + +## [3.0.1] - 2019-04-20 + +### Changed +- [380428](https://github.com/coduo/php-humanizer/commit/38042820e9ee7ccc76d66f9c480fe8b7f0e8aaf0) - **Update README.md** - [@norberttech](https://github.com/norberttech) + +## [3.0.0] - 2019-04-20 + +### Added +- [17a5ab](https://github.com/coduo/php-humanizer/commit/17a5ab5243ae1eec2e3d39388bf611088b8fd5e7) - **missing translations** - [@norberttech](https://github.com/norberttech) +- [#86](https://github.com/coduo/php-humanizer/pull/86) - **test case with 0 at the end of the number** - [@norberttech](https://github.com/norberttech) +- [#84](https://github.com/coduo/php-humanizer/pull/84) - **PFIGS ordinals** - [@martinbutt](https://github.com/martinbutt) + +### Changed +- [1b2787](https://github.com/coduo/php-humanizer/commit/1b2787d28282247b3fe68cd5b9f6bf80f304fa63) - **dev-master branch aliast** - [@norberttech](https://github.com/norberttech) +- [14ab74](https://github.com/coduo/php-humanizer/commit/14ab746762acd1856ddd386023128f23935ef119) - **CS Fixes** - [@norberttech](https://github.com/norberttech) +- [9edceb](https://github.com/coduo/php-humanizer/commit/9edceb2d21fa879e91072308b8bbe3503a346bd2) - **CS Fixes** - [@norberttech](https://github.com/norberttech) +- [#112](https://github.com/coduo/php-humanizer/pull/112) - **Upgraded thunderer/shortcode dependency to ^0.7** - [@thunderer](https://github.com/thunderer) +- [#111](https://github.com/coduo/php-humanizer/pull/111) - **Allow later versions of symfony packages** - [@brianwozeniak](https://github.com/brianwozeniak) +- [#91](https://github.com/coduo/php-humanizer/pull/91) - **Sanity check for NumberFormatter when intl is not installed** - [@thunderer](https://github.com/thunderer) +- [#40](https://github.com/coduo/php-humanizer/pull/40) - **Romanian translations** - [@a-ungurianu](https://github.com/a-ungurianu) +- [#106](https://github.com/coduo/php-humanizer/pull/106) - **[master] Add translation: zh_TW** - [@jfcherng](https://github.com/jfcherng) +- [#104](https://github.com/coduo/php-humanizer/pull/104) - **Feature/update** - [@norberttech](https://github.com/norberttech) +- [#89](https://github.com/coduo/php-humanizer/pull/89) - **remove unnecessary echo** - [@vinicius73](https://github.com/vinicius73) +- [#87](https://github.com/coduo/php-humanizer/pull/87) - **Force $binaryPrefixes array ordering on 32-bit systems, fixes #83** - [@Forst](https://github.com/Forst) +- [5cd850](https://github.com/coduo/php-humanizer/commit/5cd850b49b1ca30811f24c5c1a9b0d6e4cac9fba) - **Update composer.json** - [@norberttech](https://github.com/norberttech) +- [#85](https://github.com/coduo/php-humanizer/pull/85) - **Support Japanese language** - [@serima](https://github.com/serima) + +### Fixed +- [9b52c5](https://github.com/coduo/php-humanizer/commit/9b52c5dc42f10ff60f4827ff9a736b3a1a18f0e4) - **README.md** - [@norberttech](https://github.com/norberttech) +- [#80](https://github.com/coduo/php-humanizer/pull/80) - **russian translation** - [@dizzy7](https://github.com/dizzy7) + +## [2.0.1] - 2019-02-25 + +### Changed +- [#107](https://github.com/coduo/php-humanizer/pull/107) - **[2.0] Add translation: zh_TW** - [@jfcherng](https://github.com/jfcherng) + +### Fixed +- [#108](https://github.com/coduo/php-humanizer/pull/108) - **travis configuration for 2.0 branch** - [@norberttech](https://github.com/norberttech) + +## [2.0.0-beta] - 2016-02-21 + +### Added +- [#78](https://github.com/coduo/php-humanizer/pull/78) - **ext-inl to composer suggest** - [@norberttech](https://github.com/norberttech) +- [#68](https://github.com/coduo/php-humanizer/pull/68) - **composer cache folder and move to new infrastructure** - [@norberttech](https://github.com/norberttech) + +### Changed +- [e85d69](https://github.com/coduo/php-humanizer/commit/e85d6905a097f9ba6b2165d9998749eb113d0289) - **Merge pull request #78 from norzechowicz/suggest-intl** - [@norzechowicz](https://github.com/norzechowicz) +- [#75](https://github.com/coduo/php-humanizer/pull/75) - **Cleanup before stable release** - [@norberttech](https://github.com/norberttech) +- [f5831e](https://github.com/coduo/php-humanizer/commit/f5831e3be54ca85c9fc14ee5da00b2d6ba1143bb) - **Merge pull request #75 from norzechowicz/cleanup** - [@norzechowicz](https://github.com/norzechowicz) +- [#73](https://github.com/coduo/php-humanizer/pull/73) - **improve strategy to handle prefix-ordinal** - [@isnani](https://github.com/isnani) +- [6ec963](https://github.com/coduo/php-humanizer/commit/6ec963fb1c8ecee66feb0228ca5626f1c1ca09f8) - **Merge pull request #73 from isnani/improve-ordinal-strategy** - [@norzechowicz](https://github.com/norzechowicz) +- [#70](https://github.com/coduo/php-humanizer/pull/70) - **Cleanup** - [@norberttech](https://github.com/norberttech) +- [dac4b4](https://github.com/coduo/php-humanizer/commit/dac4b43390f320b82728f1e5e0ad45f7c68d591e) - **Merge pull request #70 from norzechowicz/cleanup** - [@norzechowicz](https://github.com/norzechowicz) +- [#69](https://github.com/coduo/php-humanizer/pull/69) - **Renamed all facades in order to support php7** - [@norberttech](https://github.com/norberttech) +- [b7214c](https://github.com/coduo/php-humanizer/commit/b7214ce3e0511d5172568aff4a4572a0d80762a1) - **Merge pull request #69 from norzechowicz/php7-support** - [@norzechowicz](https://github.com/norzechowicz) +- [3f252e](https://github.com/coduo/php-humanizer/commit/3f252ef1a717a841dac1316f835494ef82104cde) - **master branch alias** - [@norberttech](https://github.com/norberttech) +- [ae6020](https://github.com/coduo/php-humanizer/commit/ae602062f4500488dcbd119b3560a1bdd4fe2699) - **Merge pull request #68 from norzechowicz/travis-ci** - [@norzechowicz](https://github.com/norzechowicz) +- [7c7e79](https://github.com/coduo/php-humanizer/commit/7c7e79dabc0989dbaf485d46c00d9d836c929f8a) - **Merge pull request #67 from nwatth/thai-translation** - [@norzechowicz](https://github.com/norzechowicz) +- [#67](https://github.com/coduo/php-humanizer/pull/67) - **Thai translation** - [@nwatth](https://github.com/nwatth) + +## [1.0.9] - 2015-12-02 + +### Added +- [#54](https://github.com/coduo/php-humanizer/pull/54) - **Ukrainian to the list of languages** - [@Borales](https://github.com/Borales) +- [d2904a](https://github.com/coduo/php-humanizer/commit/d2904ae1e1ebd79c7b8224aa31bd5aec8d9575a4) - **composer.phar into .gitignore** - [@norberttech](https://github.com/norberttech) +- [#26](https://github.com/coduo/php-humanizer/pull/26) - **Spanish translation.** - [@orestes](https://github.com/orestes) +- [#53](https://github.com/coduo/php-humanizer/pull/53) - **Chinese Simplified (zh_CN)** - [@arrowrowe](https://github.com/arrowrowe) + +### Changed +- [#65](https://github.com/coduo/php-humanizer/pull/65) - **Oxford french translation** - [@percymamedy](https://github.com/percymamedy) +- [b36457](https://github.com/coduo/php-humanizer/commit/b364572a7a73bed0be62a7d2df382fb1ab35cd2a) - **Merge pull request #65 from percymamedy/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#66](https://github.com/coduo/php-humanizer/pull/66) - **Danish translation** - [@hyperpanic](https://github.com/hyperpanic) +- [7599dd](https://github.com/coduo/php-humanizer/commit/7599dd847f6b72c6c41f9458cfd92092200644e9) - **Merge pull request #66 from radiosignal/danish-translation** - [@norzechowicz](https://github.com/norzechowicz) +- [#61](https://github.com/coduo/php-humanizer/pull/61) - **Shortcode removal utilities** - [@thunderer](https://github.com/thunderer) +- [6bed68](https://github.com/coduo/php-humanizer/commit/6bed6804a97b0489af80ea229616d26a7224b33a) - **Merge pull request #61 from thunderer/string-shortcode-removal** - [@norzechowicz](https://github.com/norzechowicz) +- [a78a55](https://github.com/coduo/php-humanizer/commit/a78a552671dc51f4393b2806097250d0163eee2f) - **Merge pull request #64 from ddmler/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#64](https://github.com/coduo/php-humanizer/pull/64) - **German translation** - [@ddmler](https://github.com/ddmler) +- [3eb227](https://github.com/coduo/php-humanizer/commit/3eb227e710726d04b1905dfc2422370d716611d5) - **Merge pull request #46 from doenietzomoeilijk/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#46](https://github.com/coduo/php-humanizer/pull/46) - **Refactor Number into separate languages** - [@doenietzomoeilijk](https://github.com/doenietzomoeilijk) +- [a68dc7](https://github.com/coduo/php-humanizer/commit/a68dc7326b1991161e423812d454bf51f4c15d5e) - **Update README.md** - [@norzechowicz](https://github.com/norzechowicz) +- [3bcb4b](https://github.com/coduo/php-humanizer/commit/3bcb4b6c204a1d042517bb93e39f45cef1fe8615) - **Merge pull request #54 from Borales/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#58](https://github.com/coduo/php-humanizer/pull/58) - **Remove composer.phar file** - [@vinkla](https://github.com/vinkla) +- [216c9b](https://github.com/coduo/php-humanizer/commit/216c9bbd1f173213a5137306faf5a8a04cab315e) - **Merge pull request #55 from hjason/master** - [@norzechowicz](https://github.com/norzechowicz) +- [5c9bb3](https://github.com/coduo/php-humanizer/commit/5c9bb3393a682126bb8d2d51fcdc77476eef2b83) - **Merge pull request #26 from orestes/es-translation** - [@norzechowicz](https://github.com/norzechowicz) +- [34ef53](https://github.com/coduo/php-humanizer/commit/34ef53fbd42ee7d33999ca4896ea17c2a1cc8a30) - **Update README.md** - [@norzechowicz](https://github.com/norzechowicz) +- [51ea67](https://github.com/coduo/php-humanizer/commit/51ea6720069d822a9b9ef8797d708b7205123517) - **Merge pull request #53 from dyweb/master** - [@norzechowicz](https://github.com/norzechowicz) + +### Fixed +- [73e99d](https://github.com/coduo/php-humanizer/commit/73e99d096f9f1bc4f66fbb13fc0a3a6f620f4eea) - **StringTest** - [@hjason2042@gmail.com](#) + +## [1.0.8] - 2015-11-06 + +### Added +- [#52](https://github.com/coduo/php-humanizer/pull/52) - **Indonesian language** - [@naprirfan](https://github.com/naprirfan) +- [#41](https://github.com/coduo/php-humanizer/pull/41) - **russian. Add prefix at format difference.** - [@sam002](https://github.com/sam002) +- [#51](https://github.com/coduo/php-humanizer/pull/51) - **possibility to pass forbidden words into humanizer** - [@norberttech](https://github.com/norberttech) +- [#49](https://github.com/coduo/php-humanizer/pull/49) - **support for multiple character separators at string humanizer** - [@drgomesp](https://github.com/drgomesp) +- [#27](https://github.com/coduo/php-humanizer/pull/27) - **Bulgarian translation** - [@lpopov](https://github.com/lpopov) +- [f65309](https://github.com/coduo/php-humanizer/commit/f6530941c4fb5c109aa593229a3ea3da449b6781) - **the breakpoint in the constructor** - [@smeeckaert](https://github.com/smeeckaert) +- [798d77](https://github.com/coduo/php-humanizer/commit/798d77d6b864b2d46b4c2487f616ea044f08f92c) - **breakpoint tests** - [@smeeckaert](https://github.com/smeeckaert) +- [#38](https://github.com/coduo/php-humanizer/pull/38) - **Dutch Oxford translations.** - [@doenietzomoeilijk](https://github.com/doenietzomoeilijk) +- [#29](https://github.com/coduo/php-humanizer/pull/29) - **Norwegian translation** - [@dagaa](https://github.com/dagaa) +- [#16](https://github.com/coduo/php-humanizer/pull/16) - **Dutch translation.** - [@Ozmodiar](https://github.com/Ozmodiar) + +### Changed +- [d6e784](https://github.com/coduo/php-humanizer/commit/d6e784a86b6f2318394fd6b8af853e5180d3ab15) - **Merge pull request #52 from naprirfan/master** - [@norzechowicz](https://github.com/norzechowicz) +- [9d1732](https://github.com/coduo/php-humanizer/commit/9d17321e4259ff8376d5a779c0ad682b4394ae00) - **Merge pull request #47 from mostertb/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#47](https://github.com/coduo/php-humanizer/pull/47) - **Support for optional explicit BinarySuffix precision** - [@mostertb](https://github.com/mostertb) +- [a4d68a](https://github.com/coduo/php-humanizer/commit/a4d68a956478bfe84661ca1f8a6c8984aaba741c) - **Merge pull request #41 from sam002/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#30](https://github.com/coduo/php-humanizer/pull/30) - **TruncateHtml** - [@smeeckaert](https://github.com/smeeckaert) +- [0465bd](https://github.com/coduo/php-humanizer/commit/0465bd058e9b8c26bf9dc00f38fe14a8473f67b7) - **Merge branch 'master' of git://github.com/smeeckaert/php-humanizer into smeeckaert-master** - [@norberttech](https://github.com/norberttech) +- [4a6ed1](https://github.com/coduo/php-humanizer/commit/4a6ed1f15345562df1eede367112d06a9fc41ab3) - **Merge pull request #51 from norzechowicz/humanizer-forbidden-words** - [@norzechowicz](https://github.com/norzechowicz) +- [c0606e](https://github.com/coduo/php-humanizer/commit/c0606e6844a22bc5480a2527d2f043d6a52eb52a) - **Merge pull request #50 from norzechowicz/phpunit** - [@norzechowicz](https://github.com/norzechowicz) +- [#50](https://github.com/coduo/php-humanizer/pull/50) - **Moved integration tests from phpspec into phpunit** - [@norberttech](https://github.com/norberttech) +- [0a04e0](https://github.com/coduo/php-humanizer/commit/0a04e02fbf7ba37a2df8b4c3a5f0b93d0ce9f002) - **Merge pull request #49 from drgomesp/support-multiple-character-separator** - [@norzechowicz](https://github.com/norzechowicz) +- [fe8f03](https://github.com/coduo/php-humanizer/commit/fe8f03731d1349fb24df7eb3d16eeda0b5d6f633) - **Merge pull request #27 from lpopov/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#44](https://github.com/coduo/php-humanizer/pull/44) - **[ADD] Support PSR-4 Composer** - [@Th3Mouk](https://github.com/Th3Mouk) +- [75825a](https://github.com/coduo/php-humanizer/commit/75825a8ca318a3d7c523d3d489dd0547ab6a6b23) - **Merge pull request #44 from Th3Mouk/patch-1** - [@norzechowicz](https://github.com/norzechowicz) +- [#42](https://github.com/coduo/php-humanizer/pull/42) - **Fixes a typo in French** - [@Gnomino](https://github.com/Gnomino) +- [5bbff0](https://github.com/coduo/php-humanizer/commit/5bbff03cebefdf95eaa4cf9c53905c703a471ae4) - **style** - [@smeeckaert](https://github.com/smeeckaert) +- [cc7a56](https://github.com/coduo/php-humanizer/commit/cc7a56a09f31a50bf32a329dea7b65c446e53631) - **refacto truncate** - [@smeeckaert](https://github.com/smeeckaert) +- [a7cb87](https://github.com/coduo/php-humanizer/commit/a7cb8781189fb13d078530a03111bef47af8d04e) - **rename breakpoint len** - [@smeeckaert](https://github.com/smeeckaert) +- [91d107](https://github.com/coduo/php-humanizer/commit/91d1079d1f6eb88ec784d66e71c88da459ae6e37) - **code style** - [@smeeckaert](https://github.com/smeeckaert) +- [dac446](https://github.com/coduo/php-humanizer/commit/dac446bb4bb0a959fb39466b3729bc97060f4449) - **refacto visibility and breakpoint** - [@smeeckaert](https://github.com/smeeckaert) +- [#34](https://github.com/coduo/php-humanizer/pull/34) - **string functions into multibyte string functions** - [@norberttech](https://github.com/norberttech) +- [#35](https://github.com/coduo/php-humanizer/pull/35) - **Oxford italian translations** - [@omissis](https://github.com/omissis) +- [#22](https://github.com/coduo/php-humanizer/pull/22) - **Oxford collection + phpcs fixer cleanup.** - [@defrag](https://github.com/defrag) +- [#33](https://github.com/coduo/php-humanizer/pull/33) - **Truncate check length of append** - [@smeeckaert](https://github.com/smeeckaert) +- [#31](https://github.com/coduo/php-humanizer/pull/31) - **Addition of Portuguese (pt) language translation (with spec tests)** - [@lightglitch](https://github.com/lightglitch) +- [8cdeae](https://github.com/coduo/php-humanizer/commit/8cdeaef54f759d7e9a93c85cbf9e6e7b63dd6e76) - **truncate html** - [@smeeckaert](https://github.com/smeeckaert) +- [#28](https://github.com/coduo/php-humanizer/pull/28) - **Addition of Afrikaans (af) language translation (with spec tests)** - [@sarelvdwalt](https://github.com/sarelvdwalt) +- [#21](https://github.com/coduo/php-humanizer/pull/21) - **More correct wording for Dutch version of "... from now".** - [@Ozmodiar](https://github.com/Ozmodiar) +- [1f9243](https://github.com/coduo/php-humanizer/commit/1f924384c5f7b8bfbced89debac2b67b78511f7a) - **Merge pull request #21 from Ozmodiar/nl-translation** - [@norzechowicz](https://github.com/norzechowicz) +- [f5dafa](https://github.com/coduo/php-humanizer/commit/f5dafa6e721f93306496d3207e646a60c5bb4283) - **Merge pull request #18 from mattallty/patch-1** - [@norzechowicz](https://github.com/norzechowicz) +- [120f11](https://github.com/coduo/php-humanizer/commit/120f118c7051bdde9e9ea1d442cce6a70dfea8d9) - **Merge pull request #19 from NoUseFreak/composer_install** - [@norzechowicz](https://github.com/norzechowicz) +- [#19](https://github.com/coduo/php-humanizer/pull/19) - **Update composer installation instructions.** - [@NoUseFreak](https://github.com/NoUseFreak) +- [158714](https://github.com/coduo/php-humanizer/commit/1587145004b2f97b0562d359ef7c6d46e96295de) - **Merge pull request #16 from Ozmodiar/nl-translation** - [@norzechowicz](https://github.com/norzechowicz) +- [e49510](https://github.com/coduo/php-humanizer/commit/e49510dfd6e381489cfc5976b5683dba5d5e73da) - **Merge pull request #17 from Ozmodiar/readme-parenthesis** - [@norzechowicz](https://github.com/norzechowicz) + +### Fixed +- [3c3b83](https://github.com/coduo/php-humanizer/commit/3c3b830fad0f6e436a08b3f1adf20334a6a77604) - **doc** - [@smeeckaert](https://github.com/smeeckaert) +- [#18](https://github.com/coduo/php-humanizer/pull/18) - **typo in french translation** - [@mattallty](https://github.com/mattallty) +- [#17](https://github.com/coduo/php-humanizer/pull/17) - **parenthesis.** - [@Ozmodiar](https://github.com/Ozmodiar) + +## [1.0.7] - 2015-10-26 + +### Added +- [#15](https://github.com/coduo/php-humanizer/pull/15) - **spec for Italian translations** - [@norberttech](https://github.com/norberttech) +- [#14](https://github.com/coduo/php-humanizer/pull/14) - **italian translations.** - [@omissis](https://github.com/omissis) + +### Changed +- [a23b8e](https://github.com/coduo/php-humanizer/commit/a23b8e5b32a1b41e8e0d653a2de77ca090f47f8d) - **Merge pull request #15 from norzechowicz/italian-translations-spec** - [@norzechowicz](https://github.com/norzechowicz) +- [0db6f5](https://github.com/coduo/php-humanizer/commit/0db6f5d73b46bf8864b3dfc4823b29aeb97dd326) - **Merge pull request #14 from omissis/italian-translations** - [@norzechowicz](https://github.com/norzechowicz) +- [d05a54](https://github.com/coduo/php-humanizer/commit/d05a5494266fe5bc13e64aaa3c85cb58919fc63f) - **Update README.md** - [@norzechowicz](https://github.com/norzechowicz) + +## [1.0.6] - 2015-10-26 + +### Changed +- [8d7fff](https://github.com/coduo/php-humanizer/commit/8d7fff6382f60b278ddb069d9088d9d35ce26540) - **Rename difference.pt_br.yml to difference.pt_BR.yml** - [@norzechowicz](https://github.com/norzechowicz) + +## [1.0.4] - 2015-10-26 + +### Added +- [#10](https://github.com/coduo/php-humanizer/pull/10) - **translation for Portuguese - Brazil** - [@IgorDePaula](https://github.com/IgorDePaula) +- [c6a594](https://github.com/coduo/php-humanizer/commit/c6a594a57ea3687cb199183b56a232761a81f736) - **specs for FR translations** - [@norberttech](https://github.com/norberttech) + +### Changed +- [6051e8](https://github.com/coduo/php-humanizer/commit/6051e89f3bacd816dced8b3d1cb3a07c1b9b0336) - **Merge pull request #12 from marcamon2013/master** - [@norzechowicz](https://github.com/norzechowicz) +- [#12](https://github.com/coduo/php-humanizer/pull/12) - **Translation file added** - [@jebog](https://github.com/jebog) +- [#13](https://github.com/coduo/php-humanizer/pull/13) - **create turkish translation** - [@cnkt](https://github.com/cnkt) +- [e007db](https://github.com/coduo/php-humanizer/commit/e007dbcccdf56ae2021f13b300f78e2fca628d5b) - **Merge pull request #13 from cnkt/master** - [@norzechowicz](https://github.com/norzechowicz) + +### Fixed +- [8754ad](https://github.com/coduo/php-humanizer/commit/8754ad1f0e680d547c4197cc48d13d7f0b6ab766) - **Translator Builder regexp, added spec and updated readme for pt_BR translation** - [@norberttech](https://github.com/norberttech) +- [38bc22](https://github.com/coduo/php-humanizer/commit/38bc22377a66d24d3ebda915afa09e83cf3d8581) - **typo in TR translations and added spec** - [@norberttech](https://github.com/norberttech) + +## [1.0.3] - 2015-10-24 + +### Added +- [9c6a59](https://github.com/coduo/php-humanizer/commit/9c6a59981ca6902644c7c35c8deea1cbc994d7c7) - **German locale specs** - [@norberttech](https://github.com/norberttech) + +### Changed +- [a91217](https://github.com/coduo/php-humanizer/commit/a91217819c7c1d3a0f6a41182784b98681cb6f83) - **Update README.md** - [@norzechowicz](https://github.com/norzechowicz) +- [c227c3](https://github.com/coduo/php-humanizer/commit/c227c3bfe343ce8322daee67bfb8116add20af1e) - **Rename difference-de.yml to difference.de.yml** - [@norzechowicz](https://github.com/norzechowicz) + +## [1.0.2] - 2015-10-24 + +### Added +- [#11](https://github.com/coduo/php-humanizer/pull/11) - **german translation** - [@tbreuss](https://github.com/tbreuss) + +### Changed +- [9cb14a](https://github.com/coduo/php-humanizer/commit/9cb14aa8c77d6dc6aaff87770680251c993c0b79) - **Merge pull request #11 from tbreuss/master** - [@norzechowicz](https://github.com/norzechowicz) + +## [1.0.1] - 2015-07-14 + +### Changed +- [#9](https://github.com/coduo/php-humanizer/pull/9) - **Test lowest version of dependencies** - [@norberttech](https://github.com/norberttech) +- [97fee0](https://github.com/coduo/php-humanizer/commit/97fee0dbe7999c4305a3de686f9fdc6b3502796e) - **Merge pull request #9 from norzechowicz/test-lowest-dependencies** - [@norzechowicz](https://github.com/norzechowicz) +- [d97917](https://github.com/coduo/php-humanizer/commit/d979178d45d631d9acd98394b90be3ff345c8c02) - **Update README.md** - [@defrag](https://github.com/defrag) +- [80500c](https://github.com/coduo/php-humanizer/commit/80500c5c50e45f0346af394e3031307923d59b5f) - **Update README.md** - [@defrag](https://github.com/defrag) +- [59a604](https://github.com/coduo/php-humanizer/commit/59a6045a716ec63bfb335ea326ce4ee82cf5a4f7) - **Update README.md** - [@defrag](https://github.com/defrag) + +## [1.0.0] - 2014-06-12 + +### Added +- [#8](https://github.com/coduo/php-humanizer/pull/8) - **missing require for symfony/yaml in composer.json** - [@dedik](https://github.com/dedik) +- [#4](https://github.com/coduo/php-humanizer/pull/4) - **truncate operation** - [@norberttech](https://github.com/norberttech) +- [#3](https://github.com/coduo/php-humanizer/pull/3) - **roman converters** - [@defrag](https://github.com/defrag) +- [#1](https://github.com/coduo/php-humanizer/pull/1) - **number and oridinalize** - [@defrag](https://github.com/defrag) +- [192a29](https://github.com/coduo/php-humanizer/commit/192a29e78fb2fe8595da1a43580a0a2f7914399c) - **travis configuration** - [@norberttech](https://github.com/norberttech) + +### Changed +- [b5a504](https://github.com/coduo/php-humanizer/commit/b5a504fec092d6d41391a1de6db09eb756e51895) - **Merge pull request #8 from dedik/master** - [@norberttech](https://github.com/norberttech) +- [673cc6](https://github.com/coduo/php-humanizer/commit/673cc617a158c83056ae7d1647467ef771a4fdbf) - **Update README.md** - [@defrag](https://github.com/defrag) +- [e5906b](https://github.com/coduo/php-humanizer/commit/e5906b5ea334a52960fab67f465246079fe971e3) - **Update README.md** - [@defrag](https://github.com/defrag) +- [43ba95](https://github.com/coduo/php-humanizer/commit/43ba95d307ae00d480393cce368491f62deee4f7) - **Merge pull request #7 from defrag/precise-date-fix** - [@norberttech](https://github.com/norberttech) +- [#6](https://github.com/coduo/php-humanizer/pull/6) - **Precise diffs** - [@defrag](https://github.com/defrag) +- [08b9d1](https://github.com/coduo/php-humanizer/commit/08b9d1b4f35d3f5846fb187248548d2148a261e5) - **Merge pull request #6 from defrag/precise-diff** - [@norberttech](https://github.com/norberttech) +- [7438be](https://github.com/coduo/php-humanizer/commit/7438be84cdc9831215bf99f83601ce3c4abfeb1e) - **Merge pull request #5 from norzechowicz/time** - [@defrag](https://github.com/defrag) +- [#5](https://github.com/coduo/php-humanizer/pull/5) - **[WIP] Introduce time difference humanizer** - [@norberttech](https://github.com/norberttech) +- [618179](https://github.com/coduo/php-humanizer/commit/618179735f5583ca8d425a8ccf375ce0afd22e55) - **Merge pull request #4 from norzechowicz/truncate** - [@defrag](https://github.com/defrag) +- [711775](https://github.com/coduo/php-humanizer/commit/71177557d8d4bc7b95e10170c34cd176a8287e38) - **Moved library to Coduo organization** - [@norberttech](https://github.com/norberttech) +- [6815c6](https://github.com/coduo/php-humanizer/commit/6815c651a7570802ccc5beaf3e6408e6abab1caa) - **Merge pull request #3 from defrag/roman** - [@norberttech](https://github.com/norberttech) +- [cee3c3](https://github.com/coduo/php-humanizer/commit/cee3c34860042bb93ce73d39ea32fd6b9acef3d1) - **Update readme** - [@norberttech](https://github.com/norberttech) +- [fda9db](https://github.com/coduo/php-humanizer/commit/fda9db3ef94591e80d627517390c42d688021d7a) - **Merge remote-tracking branch 'origin/master'** - [@norberttech](https://github.com/norberttech) +- [fd51e9](https://github.com/coduo/php-humanizer/commit/fd51e914d98d28943a34a3fea9237f4a8c6c7e90) - **Metric suffix** - [@norberttech](https://github.com/norberttech) +- [7b7d4e](https://github.com/coduo/php-humanizer/commit/7b7d4e4453211e1975f3004a74670e6ebdbecb1c) - **Merge pull request #2 from pborreli/typos** - [@norberttech](https://github.com/norberttech) +- [720bec](https://github.com/coduo/php-humanizer/commit/720becd16f48140d94a983e5eaa6c4e1b9879442) - **Update README.md** - [@norberttech](https://github.com/norberttech) +- [e62090](https://github.com/coduo/php-humanizer/commit/e62090a6ba103a63718fd17a5d6a0001f007ecac) - **Update README.md** - [@norberttech](https://github.com/norberttech) +- [d7fd45](https://github.com/coduo/php-humanizer/commit/d7fd45f39377298e35922843cfe004497898cf18) - **Binary suffix converter** - [@norberttech](https://github.com/norberttech) +- [65564e](https://github.com/coduo/php-humanizer/commit/65564e1202be4e67822e40c366dd36836bdec70a) - **Refactoring** - [@norberttech](https://github.com/norberttech) +- [58f3d5](https://github.com/coduo/php-humanizer/commit/58f3d560caba8ec66ca57ef66cc3e598ee5eb230) - **Merge pull request #1 from defrag/number** - [@norberttech](https://github.com/norberttech) +- [35d7e6](https://github.com/coduo/php-humanizer/commit/35d7e69c62e653f2f180b96597002bf143f79ec0) - **String humanize introduction** - [@norberttech](https://github.com/norberttech) +- [e2bfc6](https://github.com/coduo/php-humanizer/commit/e2bfc680b3f339f6bf2f6e39ce9a17f02eeaebbe) - **Initial commit** - [@norberttech](https://github.com/norberttech) + +### Fixed +- [#7](https://github.com/coduo/php-humanizer/pull/7) - **precise date calculations** - [@defrag](https://github.com/defrag) +- [#2](https://github.com/coduo/php-humanizer/pull/2) - **typos** - [@pborreli](https://github.com/pborreli) + +Generated by [Automation](https://github.com/aeon-php/automation) \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..6681a3f --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at norbert+coduo@orzechowicz.pl. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index ee409ba..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,23 +0,0 @@ -#A quick guide to contribute to the project: - -##Installing the dev environment - -1. Fork the repo -2. Clone the repo to local -3. Install dependencies: `composer install` (this assumes you have 'composer' aliased to whereever your composer.phar lives) -4. Run the tests. We only take pull requests with passing tests, and it's great to know that you have a clean slate: - `./bin/phpspec run --format=pretty` - -##The actual contribution - -1. Make the changes/additions to the code, committing often and making clear what you've done -2. Make sure you write tests for your code, located in the folder structure `spec/Coduo/PHPHumanizer/...` -3. Run your tests (often and while coding): `./bin/phpspec run --format=pretty` - -##Coding Standards - -Try use similar coding standards to what you see in the project to keep things clear to the contributors. If you're unsure, it's always a safe bet to fall-back to the PSR standards. - -[PSR-1: Basic Coding Standard](http://www.php-fig.org/psr/psr-1/) - -[PSR-2: Coding Style Guide](http://www.php-fig.org/psr/psr-2/) diff --git a/LICENSE b/LICENSE index 6773c8c..aac62ee 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2014 Michal Dabrowski, Norbert Orzechowicz +Copyright (c) 2014-2021 Michal Dabrowski, Norbert Orzechowicz Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/README.md b/README.md index 345a7ca..1f7e85d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # PHP Humanizer -[![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=4.x)](https://travis-ci.com/coduo/php-humanizer) +![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=4.x) [![Latest Stable Version](https://poser.pugx.org/coduo/php-humanizer/v/stable)](https://packagist.org/packages/coduo/php-humanizer) [![Total Downloads](https://poser.pugx.org/coduo/php-humanizer/downloads)](https://packagist.org/packages/coduo/php-humanizer) [![Latest Unstable Version](https://poser.pugx.org/coduo/php-humanizer/v/unstable)](https://packagist.org/packages/coduo/php-humanizer) @@ -8,10 +8,8 @@ ### Tests * [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=4.x)](https://travis-ci.com/coduo/php-humanizer) - 4.x -* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=3.0)](https://travis-ci.com/coduo/php-humanizer) - 3.0 [Readme for 4.x version](https://github.com/coduo/php-humanizer/tree/4.x/README.md) -[Readme for 3.0 version](https://github.com/coduo/php-humanizer/tree/3.0/README.md) diff --git a/baseline.xml b/baseline.xml new file mode 100644 index 0000000..96ef6bc --- /dev/null +++ b/baseline.xml @@ -0,0 +1,26 @@ + + + + + $diff->{$unit->getDateIntervalSymbol()} + + + + + new $strategy() + + + + + $resourceName + + + $file + $resourceName + + + getBasename + getPathname + + + diff --git a/composer.json b/composer.json index 098b493..58f5108 100644 --- a/composer.json +++ b/composer.json @@ -15,16 +15,13 @@ } ], "require": { - "php": ">=7.3", - "symfony/config": "^4.4|^5.0", + "php": "^7.4 | ^8.0", "symfony/translation": "^4.4|^5.0", "symfony/yaml": "^4.4|^5.0" }, "require-dev": { "thunderer/shortcode": "^0.7", - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.4", - "friendsofphp/php-cs-fixer": "^2.16" + "phpunit/phpunit": "^9.4" }, "config": { "bin-dir": "bin" @@ -39,22 +36,24 @@ "": "tests/" } }, - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, "suggest": { "ext-intl": "Required if you are going to use humanizer with locales different than en_EN" }, "scripts": { "cs:php:fix": [ - "php-cs-fixer fix --using-cache=no" + "tools/php-cs-fixer fix --using-cache=no" + ], + "test" : [ + "phpunit" + ], + "test:mutation": [ + "Composer\\Config::disableProcessTimeout", + "tools/infection" ], - "test": [ - "phpspec run --format=pretty", - "phpunit", - "php-cs-fixer fix -v --dry-run" + "static:analyze": [ + "tools/psalm --shepherd --stats", + "tools/phpstan analyze -c phpstan.neon", + "tools/php-cs-fixer fix --dry-run" ] } } diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..d0fe9ed --- /dev/null +++ b/composer.lock @@ -0,0 +1,2640 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "2266b8e08228e1596ce0366b445cd246", + "packages": [ + { + "name": "symfony/deprecation-contracts", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/master" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-07T11:33:47+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-07T16:49:33+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-22T09:19:47+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-07T16:49:33+00:00" + }, + { + "name": "symfony/translation", + "version": "v5.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "c021864d4354ee55160ddcfd31dc477a1bc77949" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/c021864d4354ee55160ddcfd31dc477a1bc77949", + "reference": "c021864d4354ee55160ddcfd31dc477a1bc77949", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/translation-contracts": "^2.3" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/translation/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-01-27T10:15:41+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com/", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v2.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-28T13:05:58+00:00" + }, + { + "name": "symfony/yaml", + "version": "v5.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "338cddc6d74929f6adf19ca5682ac4b8e109cdb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/338cddc6d74929f6adf19ca5682ac4b8e109cdb0", + "reference": "338cddc6d74929f6adf19ca5682ac4b8e109cdb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<4.4" + }, + "require-dev": { + "symfony/console": "^4.4|^5.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/yaml/tree/v5.2.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-03T04:42:09+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-11-10T18:47:58+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.10.4", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" + }, + "time": "2020-12-20T10:01:03+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" + }, + "time": "2020-06-27T14:33:11+00:00" + }, + { + "name": "phar-io/version", + "version": "3.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "e4782611070e50613683d2b9a57730e9a3ba5451" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451", + "reference": "e4782611070e50613683d2b9a57730e9a3ba5451", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.0.4" + }, + "time": "2020-12-13T23:18:30+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org/", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.2.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, + "time": "2020-09-03T19:13:55+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + }, + "time": "2020-09-17T18:55:26+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.12.2", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "245710e971a030f42e08f4912863805570f23d39" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", + "reference": "245710e971a030f42e08f4912863805570f23d39", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.1", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com/" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.12.2" + }, + "time": "2020-12-19T10:15:11+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", + "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.10.2", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:44:49+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:57:25+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.5.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f661659747f2f87f9e72095bb207bceb0f151cb4", + "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.1", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.3", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^2.3", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.2" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-02-02T14:45:58+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:52:38+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:24:23+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:55:19+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "2.3.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:18:59+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "75a63c33a8577608444246075ea0af0d052e452a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/master" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2020-07-12T23:59:07+00:00" + }, + { + "name": "thunderer/shortcode", + "version": "v0.7.4", + "source": { + "type": "git", + "url": "https://github.com/thunderer/Shortcode.git", + "reference": "79a219febd774ba1ee66a2992fee1145b4367561" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thunderer/Shortcode/zipball/79a219febd774ba1ee66a2992fee1145b4367561", + "reference": "79a219febd774ba1ee66a2992fee1145b4367561", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": ">=4.1", + "symfony/yaml": ">=2.0" + }, + "suggest": { + "ext-dom": "if you want to use XML serializer", + "ext-json": "if you want to use JSON serializer", + "symfony/yaml": "if you want to use YAML serializer" + }, + "type": "library", + "autoload": { + "psr-4": { + "Thunder\\Shortcode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tomasz Kowalczyk", + "email": "tomasz@kowalczyk.cc" + } + ], + "description": "Advanced shortcode (BBCode) parser and engine for PHP", + "keywords": [ + "bbcode", + "engine", + "library", + "parser", + "shortcode" + ], + "support": { + "issues": "https://github.com/thunderer/Shortcode/issues", + "source": "https://github.com/thunderer/Shortcode/tree/v0.7.4" + }, + "time": "2020-03-08T11:25:13+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.9.1" + }, + "time": "2020-07-08T17:02:28+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^7.4 | ^8.0" + }, + "platform-dev": [], + "plugin-api-version": "2.0.0" +} diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..d05e1a4 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,6 @@ +parameters: + level: max + paths: + - src + + tmpDir: var/phpstan/cache diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 546b974..e4936a9 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,23 +1,23 @@ - + - + ./tests/ - - - ./src/Coduo/PHPHumanizer/ - - + + + + ./src/ + + + + + + \ No newline at end of file diff --git a/psalm.xml b/psalm.xml new file mode 100644 index 0000000..7d8635e --- /dev/null +++ b/psalm.xml @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php b/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php deleted file mode 100644 index e7bc4a8..0000000 --- a/spec/Coduo/PHPHumanizer/Collection/FormatterSpec.php +++ /dev/null @@ -1,47 +0,0 @@ -beConstructedWith($translator); - $translator->trans( - 'only_two', - array('%first%' => 'Michal', '%second%' => 'Norbert'), - 'oxford' - )->willReturn('Michal and Norbert'); - - $translator->trans( - 'comma_separated_with_limit', - array('%count%' => 1, "%list%" => 'Michal, Norbert'), - 'oxford' - )->willReturn('Michal, Norbert and 1 more'); - - $translator->trans( - 'comma_separated', - array("%list%" => 'Michal, Norbert', '%last%' => "Lukasz"), - 'oxford' - )->willReturn('Michal, Norbert and Lukasz'); - } - - function it_formats_two_elements() - { - $this->format(array("Michal", "Norbert"), null)->shouldReturn("Michal and Norbert"); - } - - function it_formats_elements_with_limit() - { - $this->format(array("Michal", "Norbert", "Lukasz"), 2)->shouldReturn("Michal, Norbert and 1 more"); - } - - function it_formats_elements_without_limit() - { - $this->format(array("Michal", "Norbert", "Lukasz"), null)->shouldReturn("Michal, Norbert and Lukasz"); - } -} diff --git a/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php b/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php deleted file mode 100644 index 536e4d3..0000000 --- a/spec/Coduo/PHPHumanizer/Collection/OxfordSpec.php +++ /dev/null @@ -1,45 +0,0 @@ -formatter = new Formatter( - $translator->getWrappedObject() - ); - $this->beConstructedWith($this->formatter); - } - function it_returns_empty_string_when_collection_is_empty() - { - $this->format(array())->shouldReturn(''); - } - - function it_returns_collection_item_string_when_collection_has_one_element() - { - $this->format(array(new CollectionItem("Michal")))->shouldReturn('Michal'); - } -} - -class CollectionItem -{ - private $name; - - public function __construct($name) - { - $this->name = $name; - } - - public function __toString() - { - return $this->name; - } -} diff --git a/spec/Coduo/PHPHumanizer/DateTime/DifferenceSpec.php b/spec/Coduo/PHPHumanizer/DateTime/DifferenceSpec.php deleted file mode 100644 index dc41b9e..0000000 --- a/spec/Coduo/PHPHumanizer/DateTime/DifferenceSpec.php +++ /dev/null @@ -1,106 +0,0 @@ -beConstructedWith(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 12:45:00")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Minute'); - $this->getQuantity()->shouldReturn(15); - $this->isPast()->shouldReturn(true); - } - - function it_calculate_diff_between_present_and_future_date_in_minutes() - { - $this->beConstructedWith(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 13:15:00")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Minute'); - $this->getQuantity()->shouldReturn(15); - $this->isPast()->shouldReturn(false); - } - - function it_calculate_diff_between_present_and_past_date_in_hours() - { - $this->beConstructedWith(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 11:00:00")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Hour'); - $this->getQuantity()->shouldReturn(2); - $this->isPast()->shouldReturn(true); - } - - function it_calculate_diff_between_present_and_future_date_in_hours() - { - $this->beConstructedWith(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2014-04-26 16:00:00")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Hour'); - $this->getQuantity()->shouldReturn(3); - $this->isPast()->shouldReturn(false); - } - - function it_calculate_diff_between_present_and_past_date_in_days() - { - $this->beConstructedWith(new \DateTime("2014-04-10"), new \DateTime("2014-04-09")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Day'); - $this->getQuantity()->shouldReturn(1); - $this->isPast()->shouldReturn(true); - } - - function it_calculate_diff_between_present_and_future_date_in_days() - { - $this->beConstructedWith(new \DateTime("2014-04-10"), new \DateTime("2014-04-11")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Day'); - $this->getQuantity()->shouldReturn(1); - $this->isPast()->shouldReturn(false); - } - - function it_calculate_diff_between_present_and_past_date_in_weeks() - { - $this->beConstructedWith(new \DateTime("2014-04-15"), new \DateTime("2014-04-01")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Week'); - $this->getQuantity()->shouldReturn(2); - $this->isPast()->shouldReturn(true); - } - - function it_calculate_diff_between_present_and_future_date_in_weeks() - { - $this->beConstructedWith(new \DateTime("2014-04-01"), new \DateTime("2014-04-15")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Week'); - $this->getQuantity()->shouldReturn(2); - $this->isPast()->shouldReturn(false); - } - - function it_calculate_diff_between_present_and_past_date_in_months() - { - $this->beConstructedWith(new \DateTime("2014-04-01"), new \DateTime("2014-03-01")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Month'); - $this->getQuantity()->shouldReturn(1); - $this->isPast()->shouldReturn(true); - } - - function it_calculate_diff_between_present_and_future_date_in_months() - { - $this->beConstructedWith(new \DateTime("2014-04-01"), new \DateTime("2014-05-01")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Month'); - $this->getQuantity()->shouldReturn(1); - $this->isPast()->shouldReturn(false); - } - - function it_calculate_diff_between_present_and_past_date_in_years() - { - $this->beConstructedWith(new \DateTime("2014-01-01"), new \DateTime("2012-01-01")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Year'); - $this->getQuantity()->shouldReturn(2); - $this->isPast()->shouldReturn(true); - } - - function it_calculate_diff_between_present_and_future_date_in_years() - { - $this->beConstructedWith(new \DateTime("2014-01-01"), new \DateTime("2015-01-01")); - $this->getUnit()->shouldReturnAnInstanceOf('Coduo\PHPHumanizer\DateTime\Unit\Year'); - $this->getQuantity()->shouldReturn(1); - $this->isPast()->shouldReturn(false); - } -} diff --git a/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php b/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php deleted file mode 100644 index 1372ad3..0000000 --- a/spec/Coduo/PHPHumanizer/DateTime/FormatterSpec.php +++ /dev/null @@ -1,50 +0,0 @@ -beConstructedWith($translator); - $translator->trans( - 'minute.past', - array('%count%' => 10), - 'difference', - 'en' - )->willReturn('10 minutes ago'); - - $translator->trans( - 'minute.past', - array('%count%' => 10), - 'difference', - 'pl' - )->willReturn('10 minut temu'); - } - - function it_format_datetime_diff() - { - $diff = new Difference( - new \DateTime("2015-01-01 00:10:00"), - new \DateTime("2015-01-01 00:00:00") - ); - - $this->formatDifference($diff)->shouldReturn('10 minutes ago'); - } - - function it_format_datetime_diff_for_specific_locale() - { - $diff = new Difference( - new \DateTime("2015-01-01 00:10:00"), - new \DateTime("2015-01-01 00:00:00") - ); - - $this->formatDifference($diff, 'pl')->shouldReturn('10 minut temu'); - } -} diff --git a/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php b/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php deleted file mode 100644 index 5228235..0000000 --- a/spec/Coduo/PHPHumanizer/DateTime/PreciseFormatterSpec.php +++ /dev/null @@ -1,80 +0,0 @@ -beConstructedWith($translator); - $translator->trans( - 'compound.day', - array('%count%' => 10), - 'difference', - 'en' - )->willReturn('10 days'); - - $translator->trans( - 'compound.hour', - array('%count%' => 5), - 'difference', - 'en' - )->willReturn('5 hours'); - - $translator->trans( - 'compound.future', - array('%value%' => '10 days, 5 hours'), - 'difference', - 'en' - )->willReturn('10 days, 5 hours from now'); - - $translator->trans( - 'compound.day', - array('%count%' => 10), - 'difference', - 'ru' - )->willReturn('10 дней'); - - $translator->trans( - 'compound.hour', - array('%count%' => 5), - 'difference', - 'ru' - )->willReturn('5 часов'); - - $translator->trans( - 'compound.future', - array('%value%' => '10 дней, 5 часов'), - 'difference', - 'ru' - )->willReturn('через 10 дней, 5 часов'); - } - - function it_format_compound_datetime_diff() - { - $diff = new PreciseDifference( - new \DateTime("2015-01-01 00:00:00"), - new \DateTime("2015-01-11 05:00:00") - ); - - $this->formatDifference($diff)->shouldReturn('10 days, 5 hours from now'); - } - - function it_format_compound_datetime_diff_for_specific_locale() - { - $diff = new PreciseDifference( - new \DateTime("2015-01-01 00:00:00"), - new \DateTime("2015-01-11 05:00:00") - ); - - $this->formatDifference($diff, 'ru')->shouldReturn('через 10 дней, 5 часов'); - } -} diff --git a/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php b/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php deleted file mode 100644 index f608032..0000000 --- a/spec/Coduo/PHPHumanizer/String/WordBreakpointSpec.php +++ /dev/null @@ -1,36 +0,0 @@ -calculatePosition('Lorem ipsum dolorem', 2)->shouldReturn(5); - $this->calculatePosition('Lorem ipsum dolorem', 4)->shouldReturn(5); - $this->calculatePosition('Lorem ipsum dolorem', 5)->shouldReturn(5); - $this->calculatePosition('Lorem ipsum dolorem', 10)->shouldReturn(11); - $this->calculatePosition('Lorem ipsum dolorem', -2)->shouldReturn(19); - $this->calculatePosition('Lorem ipsum dolorem', 0)->shouldReturn(5); - } - - function it_calculate_breakpoint_position_when_sentence_is_shorter_than_characters_count() - { - $this->calculatePosition('Lorem ipsum dolorem', 20)->shouldReturn(19); - } - - function it_calculate_breakpoint_position_when_characters_count_ends_in_last_word() - { - $this->calculatePosition('Lorem ipsum', 7)->shouldReturn(11); - } - - function it_calculate_breakpoint_position_when_characters_count_ends_in_last_space() - { - $this->calculatePosition('Lorem ipsum', 5)->shouldReturn(5); - } -} diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php index aa0798a..2f49887 100644 --- a/src/Coduo/PHPHumanizer/Collection/Formatter.php +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -15,26 +15,20 @@ final class Formatter { - /** - * @var TranslatorInterface - */ - private $translator; + private TranslatorInterface $translator; - /** - * @var string - */ - private $catalogue; + private string $catalogue; - /** - * @param TranslatorInterface $translator - */ - public function __construct(TranslatorInterface $translator, $catalogue = 'oxford') + public function __construct(TranslatorInterface $translator, string $catalogue = 'oxford') { $this->translator = $translator; $this->catalogue = $catalogue; } - public function format($collection, $limit = null) + /** + * @param array $collection + */ + public function format(array $collection, int $limit = null): string { $count = \count($collection); @@ -58,17 +52,11 @@ public function format($collection, $limit = null) } /** - * @param $collection - * @param $limit - * @param $count - * - * @return string + * @param array $collection */ - private function formatCommaSeparatedWithLimit($collection, $limit, $count) + private function formatCommaSeparatedWithLimit(array $collection, ?int $limit, int $count): string { - $display = \array_map(function ($element) { - return (string) $element; - }, \array_slice($collection, 0, $limit)); + $display = \array_map(fn ($element) => (string) $element, \array_slice($collection, 0, $limit)); $moreCount = $count - \count($display); @@ -79,16 +67,11 @@ private function formatCommaSeparatedWithLimit($collection, $limit, $count) } /** - * @param $collection - * @param $count - * - * @return string + * @param array $collection */ - private function formatCommaSeparated($collection, $count) + private function formatCommaSeparated(array $collection, int $count): string { - $display = \array_map(function ($element) { - return (string) $element; - }, \array_slice($collection, 0, $count - 1)); + $display = \array_map(fn ($element) => (string) $element, \array_slice($collection, 0, $count - 1)); return $this->translator->trans('comma_separated', [ '%list%' => \implode(', ', $display), @@ -97,11 +80,9 @@ private function formatCommaSeparated($collection, $count) } /** - * @param $collection - * - * @return string + * @param array $collection */ - private function formatOnlyTwo($collection) + private function formatOnlyTwo(array $collection): string { return $this->translator->trans('only_two', [ '%first%' => (string) $collection[0], diff --git a/src/Coduo/PHPHumanizer/Collection/Oxford.php b/src/Coduo/PHPHumanizer/Collection/Oxford.php index a27cf80..2f84c21 100644 --- a/src/Coduo/PHPHumanizer/Collection/Oxford.php +++ b/src/Coduo/PHPHumanizer/Collection/Oxford.php @@ -13,28 +13,17 @@ final class Oxford { - /** - * @var Formatter - */ - private $formatter; + private Formatter $formatter; - /** - * Oxford constructor. - * - * @param Formatter $formatter - */ public function __construct(Formatter $formatter) { $this->formatter = $formatter; } /** - * @param $collection - * @param null $limit - * - * @return string + * @param array $collection */ - public function format($collection, $limit = null) + public function format(array $collection, int $limit = null): string { return $this->formatter->format($collection, $limit); } diff --git a/src/Coduo/PHPHumanizer/CollectionHumanizer.php b/src/Coduo/PHPHumanizer/CollectionHumanizer.php index 548cdc4..e7c2bce 100644 --- a/src/Coduo/PHPHumanizer/CollectionHumanizer.php +++ b/src/Coduo/PHPHumanizer/CollectionHumanizer.php @@ -18,12 +18,9 @@ final class CollectionHumanizer { /** - * @param $collection - * @param null $limit - * @param string $locale - * @return string + * @param array $collection */ - public static function oxford($collection, $limit = null, $locale = 'en') + public static function oxford(array $collection, int $limit = null, string $locale = 'en'): string { $oxford = new Oxford( new Formatter(Builder::build($locale)) diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference.php b/src/Coduo/PHPHumanizer/DateTime/Difference.php index 60fce9a..2ca8258 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference.php @@ -22,25 +22,16 @@ final class Difference { - /** - * @var \DateTime - */ - private $fromDate; + private \DateTime $fromDate; - /** - * @var \DateTime - */ - private $toDate; + private \DateTime $toDate; /** - * @var \Coduo\PHPHumanizer\DateTime\Unit + * @psalm-suppress PropertyNotSetInConstructor */ - private $unit; + private Unit $unit; - /** - * @var int - */ - private $quantity; + private ?int $quantity = null; public function __construct(\DateTime $fromDate, \DateTime $toDate) { @@ -49,25 +40,19 @@ public function __construct(\DateTime $fromDate, \DateTime $toDate) $this->calculate(); } - /** - * @return Unit - */ - public function getUnit() + public function getUnit(): Unit { return $this->unit; } - /** - * @return int - */ - public function getQuantity() + public function getQuantity(): ?int { return $this->quantity; } - private function calculate() + private function calculate(): void { - /* @var $units \Coduo\PHPHumanizer\DateTime\Unit[] */ + /* @var $units Unit[] */ $units = [ new Year(), new Month(), @@ -92,7 +77,7 @@ private function calculate() : (int) \round($absoluteMilliSecondsDiff / $this->unit->getMilliseconds()); } - public function isPast() + public function isPast(): bool { $diff = $this->toDate->getTimestamp() - $this->fromDate->getTimestamp(); diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php index 7178ea1..512fd1b 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php @@ -15,46 +15,31 @@ final class CompoundResult { - /** - * @var \Coduo\PHPHumanizer\DateTime\Unit - */ - private $unit; - private $quantity; + private Unit $unit; + private int $quantity; - public function __construct(Unit $unit, $quantity) + public function __construct(Unit $unit, int $quantity) { $this->unit = $unit; $this->quantity = $quantity; } - /** - * @param mixed $quantity - */ - public function setQuantity($quantity) + public function setQuantity(int $quantity): void { $this->quantity = $quantity; } - /** - * @return mixed - */ - public function getQuantity() + public function getQuantity() : int { return $this->quantity; } - /** - * @param \Coduo\PHPHumanizer\DateTime\Unit $unit - */ - public function setUnit($unit) + public function setUnit(Unit $unit): void { $this->unit = $unit; } - /** - * @return \Coduo\PHPHumanizer\DateTime\Unit - */ - public function getUnit() + public function getUnit(): Unit { return $this->unit; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Formatter.php b/src/Coduo/PHPHumanizer/DateTime/Formatter.php index a5d7c2f..28fc8ce 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Formatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/Formatter.php @@ -15,26 +15,14 @@ final class Formatter { - /** - * @var TranslatorInterface - */ - private $translator; - - /** - * @param TranslatorInterface $translator - */ + private TranslatorInterface $translator; + public function __construct(TranslatorInterface $translator) { $this->translator = $translator; } - /** - * @param Difference $difference - * @param string $locale - * - * @return string - */ - public function formatDifference(Difference $difference, $locale = 'en') + public function formatDifference(Difference $difference, string $locale = 'en'): string { $translationKey = \sprintf('%s.%s', $difference->getUnit()->getName(), $difference->isPast() ? 'past' : 'future'); diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php index 75c1cfb..0a75a80 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php @@ -21,25 +21,19 @@ final class PreciseDifference { - /** - * @var \DateTime - */ - private $fromDate; + private \DateTime $fromDate; - /** - * @var \DateTime - */ - private $toDate; + private \DateTime $toDate; /** - * @var \Coduo\PHPHumanizer\DateTime\Unit[] + * @var array */ - private $units; + private array $units = []; /** - * @var \Coduo\PHPHumanizer\DateTime\Difference\CompoundResult[] + * @var array */ - private $compoundResults; + private array $compoundResults = []; public function __construct(\DateTime $fromDate, \DateTime $toDate) { @@ -49,16 +43,16 @@ public function __construct(\DateTime $fromDate, \DateTime $toDate) } /** - * @return \Coduo\PHPHumanizer\DateTime\Difference\CompoundResult[] + * @return array */ - public function getCompoundResults() + public function getCompoundResults(): array { return $this->compoundResults; } - private function calculate() + private function calculate(): void { - /* @var $units \Coduo\PHPHumanizer\DateTime\Unit[] */ + /* @var $units Unit[] */ $units = [ new Year(), new Month(), @@ -78,7 +72,7 @@ private function calculate() } } - public function isPast() + public function isPast(): bool { $diff = $this->toDate->getTimestamp() - $this->fromDate->getTimestamp(); diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index a47fe67..2036fb9 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -15,26 +15,14 @@ final class PreciseFormatter { - /** - * @var TranslatorInterface - */ - private $translator; - - /** - * @param TranslatorInterface $translator - */ + private TranslatorInterface $translator; + public function __construct(TranslatorInterface $translator) { $this->translator = $translator; } - /** - * @param PreciseDifference $difference - * @param string $locale - * - * @return string - */ - public function formatDifference(PreciseDifference $difference, $locale = 'en') + public function formatDifference(PreciseDifference $difference, string $locale = 'en'): string { $diff = []; diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit.php b/src/Coduo/PHPHumanizer/DateTime/Unit.php index 2a3525f..c5445cb 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit.php @@ -13,22 +13,15 @@ interface Unit { - /** - * @return string - */ - public function getName(); + public function getName(): string; /** * Return millisecond that represents unit. - * - * @return int */ - public function getMilliseconds(); + public function getMilliseconds(): int; /** * Returns symbol of \DateInterval equivalent. - * - * @return string */ - public function getDateIntervalSymbol(); + public function getDateIntervalSymbol(): string; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php index 4e4f72d..f734a35 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php @@ -15,22 +15,19 @@ final class Day implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'day'; } - public function getMilliseconds() + public function getMilliseconds(): int { $hour = new Hour(); return $hour->getMilliseconds() * 24; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { return 'd'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php index 8a21186..1864d41 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php @@ -15,22 +15,19 @@ final class Hour implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'hour'; } - public function getMilliseconds() + public function getMilliseconds(): int { $minute = new Minute(); return $minute->getMilliseconds() * 60; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { return 'h'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php b/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php index ea1120a..3cb5aed 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php @@ -15,20 +15,17 @@ final class JustNow implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'just_now'; } - public function getMilliseconds() + public function getMilliseconds(): int { return 0; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { throw new \RuntimeException("JustNow doesn't have date interval symbol equivalent"); } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php index 1c2c3c2..6bbc479 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php @@ -15,22 +15,19 @@ final class Minute implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'minute'; } - public function getMilliseconds() + public function getMilliseconds(): int { $second = new Second(); return $second->getMilliseconds() * 60; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { return 'i'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php index ae26e8f..33a0e5c 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php @@ -15,22 +15,19 @@ final class Month implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'month'; } - public function getMilliseconds() + public function getMilliseconds(): int { $day = new Day(); return $day->getMilliseconds() * 30; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { return 'm'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php index 12f3e54..465a5ff 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php @@ -15,20 +15,17 @@ final class Second implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'second'; } - public function getMilliseconds() + public function getMilliseconds(): int { return 1000; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { return 's'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php index cd0ff1a..353d5a3 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php @@ -15,22 +15,19 @@ final class Week implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'week'; } - public function getMilliseconds() + public function getMilliseconds(): int { $day = new Day(); return $day->getMilliseconds() * 7; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { throw new \RuntimeException("Week doesn't have date interval symbol equivalent"); } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php index 4dda1c9..22a539d 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php @@ -15,22 +15,19 @@ final class Year implements Unit { - /** - * @return string - */ - public function getName() + public function getName(): string { return 'year'; } - public function getMilliseconds() + public function getMilliseconds(): int { $day = new Day(); return $day->getMilliseconds() * 356; } - public function getDateIntervalSymbol() + public function getDateIntervalSymbol(): string { return 'y'; } diff --git a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php index 44f7472..2c51cf5 100644 --- a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php +++ b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php @@ -19,26 +19,14 @@ final class DateTimeHumanizer { - /** - * @param \DateTime $fromDate - * @param \DateTime $toDate - * @param string $locale - * @return string - */ - public static function difference(\DateTime $fromDate, \DateTime $toDate, $locale = 'en') + public static function difference(\DateTime $fromDate, \DateTime $toDate, string $locale = 'en'): string { $formatter = new Formatter(Builder::build($locale)); return $formatter->formatDifference(new Difference($fromDate, $toDate), $locale); } - /** - * @param \DateTime $fromDate - * @param \DateTime $toDate - * @param string $locale - * @return string - */ - public static function preciseDifference(\DateTime $fromDate, \DateTime $toDate, $locale = 'en') + public static function preciseDifference(\DateTime $fromDate, \DateTime $toDate, string $locale = 'en'): string { $formatter = new PreciseFormatter(Builder::build($locale)); diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal.php b/src/Coduo/PHPHumanizer/Number/Ordinal.php index 73e92a5..4d48872 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal.php @@ -21,27 +21,24 @@ final class Ordinal */ private $number; - /** - * @var StrategyInterface - */ - private $strategy; + private StrategyInterface $strategy; /** * @param int|float $number * @param string $locale */ - public function __construct($number, $locale) + public function __construct($number, string $locale) { $this->number = $number; $this->strategy = Builder::build($locale); } - public function isPrefix() + public function isPrefix(): bool { return $this->strategy->isPrefix(); } - public function __toString() + public function __toString(): string { return $this ->strategy diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php index 582055b..2246cc9 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php @@ -11,38 +11,37 @@ namespace Coduo\PHPHumanizer\Number\Ordinal; -/** - * Tries to find a proper strategy for ordinal numbers. - */ final class Builder { /** - * @param string $locale - * - * @return StrategyInterface - * - * @throws \RuntimeException + * Find a proper strategy for ordinal numbers. */ - public static function build($locale) + public static function build(string $locale): StrategyInterface { // $locale should be xx or xx_YY - if (!\preg_match('/^([a-z]{2})(_([A-Z]{2}))?$/', $locale, $m)) { - throw new \RuntimeException("Invalid locale specified: '$locale'."); + if (!\preg_match('#^([a-z]{2})(_([A-Z]{2}))?$#', $locale, $m)) { + throw new \RuntimeException(\sprintf("Invalid locale specified: '%s'.", $locale)); } $strategy = \ucfirst($m[1]); if (!empty($m[3])) { - $strategy .= "_$m[3]"; + $strategy .= \sprintf('_%s', $m[3]); } - $strategy = "\\Coduo\\PHPHumanizer\\Resources\\Ordinal\\{$strategy}Strategy"; + $strategy = \sprintf('\Coduo\PHPHumanizer\Resources\Ordinal\%sStrategy', $strategy); if (\class_exists($strategy)) { - return new $strategy(); + $strategyInstance = new $strategy(); + + if (!$strategyInstance instanceof StrategyInterface) { + throw new \RuntimeException(\sprintf('Strategy for locale %s does not implement Strategy Interface.', $locale)); + } + + return $strategyInstance; } // Debatable: should we fallback to English? // return self::build('en'); - throw new \RuntimeException("Strategy for locale $locale not found."); + throw new \RuntimeException(\sprintf('Strategy for locale %s not found.', $locale)); } } diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php index aa23162..eb60dcc 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php @@ -13,15 +13,11 @@ interface StrategyInterface { - /** - * @return boolean - */ - public function isPrefix(); + public function isPrefix(): bool; /** * @param int|float $number - * * @return string */ - public function ordinalIndicator($number); + public function ordinalIndicator($number): string; } diff --git a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php index 4e184a9..6d1db95 100644 --- a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php +++ b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php @@ -13,11 +13,25 @@ final class RomanNumeral { + /** + * @var int + */ const MIN_VALUE = 1; + + /** + * @var int + */ const MAX_VALUE = 3999; + + /** + * @var string + */ const ROMAN_STRING_MATCHER = '/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/'; - private $map = [ + /** + * @var array + */ + private array $map = [ 'M' => 1000, 'CM' => 900, 'D' => 500, @@ -34,13 +48,13 @@ final class RomanNumeral ]; /** - * @param $number + * @param numeric $number * - * @return string * + * @return string * @throws \InvalidArgumentException */ - public function toRoman($number) + public function toRoman($number): string { if (($number < self::MIN_VALUE) || ($number > self::MAX_VALUE)) { throw new \InvalidArgumentException(); @@ -62,13 +76,11 @@ public function toRoman($number) } /** - * @param $string - * - * @return int + * @return float|int * * @throws \InvalidArgumentException */ - public function fromRoman($string) + public function fromRoman(string $string) { if (\mb_strlen((string) $string) === 0 || 0 === \preg_match(self::ROMAN_STRING_MATCHER, (string) $string)) { throw new \InvalidArgumentException(); diff --git a/src/Coduo/PHPHumanizer/NumberHumanizer.php b/src/Coduo/PHPHumanizer/NumberHumanizer.php index 7d26299..74271f6 100644 --- a/src/Coduo/PHPHumanizer/NumberHumanizer.php +++ b/src/Coduo/PHPHumanizer/NumberHumanizer.php @@ -20,36 +20,34 @@ final class NumberHumanizer { /** * @param int|float $number - * @param string $locale - * + * @param string $locale * @return string */ - public static function ordinalize($number, $locale = 'en') + public static function ordinalize($number, string $locale = 'en'): string { $ordinal = new Ordinal($number, $locale); - + return (string) ($ordinal->isPrefix()) ? $ordinal.$number : $number.$ordinal; } - + /** * @param int|float $number - * @param string $locale - * + * @param string $locale * @return string */ - public static function ordinal($number, $locale = 'en') + public static function ordinal($number, string $locale = 'en'): string { $ordinal = new Ordinal($number, $locale); - + return (string) $ordinal; } /** - * @param $number + * @param int $number * @param string $locale * @return bool|int|string */ - public static function binarySuffix($number, $locale = 'en') + public static function binarySuffix(int $number, string $locale = 'en') { $binarySuffix = new BinarySuffix($number, $locale); @@ -57,12 +55,9 @@ public static function binarySuffix($number, $locale = 'en') } /** - * @param $number - * @param $precision - * @param string $locale * @return bool|int|string */ - public static function preciseBinarySuffix($number, $precision, $locale = 'en') + public static function preciseBinarySuffix(int $number, ?int $precision, string $locale = 'en') { $binarySuffix = new BinarySuffix($number, $locale, $precision); @@ -70,11 +65,9 @@ public static function preciseBinarySuffix($number, $precision, $locale = 'en') } /** - * @param $number - * @param string $locale - * @return bool|string + * @param numeric $number */ - public static function metricSuffix($number, $locale = 'en') + public static function metricSuffix($number, string $locale = 'en'): string { $binarySuffix = new MetricSuffix($number, $locale); @@ -82,10 +75,10 @@ public static function metricSuffix($number, $locale = 'en') } /** - * @param $number + * @param numeric $number * @return string */ - public static function toRoman($number) + public static function toRoman($number): string { $romanNumeral = new RomanNumeral(); @@ -93,10 +86,9 @@ public static function toRoman($number) } /** - * @param $number - * @return int + * @return float|int */ - public static function fromRoman($number) + public static function fromRoman(string $number) { $romanNumeral = new RomanNumeral(); diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php index 6a96127..bacc827 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php @@ -15,16 +15,12 @@ final class DeStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return false; } - /** {@inheritdoc} */ - public function ordinalIndicator($number) + public function ordinalIndicator($number): string { return '.'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php index 35e6f5a..373932f 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php @@ -15,18 +15,12 @@ final class EnStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return false; } - /** - * {@inheritdoc} - */ - public function ordinalIndicator($number) + public function ordinalIndicator($number): string { $absNumber = \abs((integer) $number); diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php index 30ba76e..1793120 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php @@ -15,16 +15,12 @@ final class EsStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return false; } - /** {@inheritdoc} */ - public function ordinalIndicator($number) + public function ordinalIndicator($number): string { return 'o'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php index 788789b..45a034c 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php @@ -15,16 +15,12 @@ final class FrStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return false; } - /** {@inheritdoc} */ - public function ordinalIndicator($number) + public function ordinalIndicator($number): string { $absNumber = \abs((integer) $number); diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php index e678f99..937eddc 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php @@ -15,18 +15,13 @@ final class IdStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return true; } - /** - * {@inheritdoc} - */ - public function ordinalIndicator($number) + + public function ordinalIndicator($number): string { return 'ke-'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php index 318bbf8..ec69b84 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php @@ -15,16 +15,12 @@ final class ItStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return false; } - /** {@inheritdoc} */ - public function ordinalIndicator($number) + public function ordinalIndicator($number): string { return 'o'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php index 7350eb5..63cc61a 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php @@ -15,18 +15,12 @@ final class NlStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return false; } - /** - * {@inheritdoc} - */ - public function ordinalIndicator($number) + public function ordinalIndicator($number): string { return 'e'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php index 2f625a8..94f0e75 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php @@ -15,16 +15,12 @@ final class PtStrategy implements StrategyInterface { - /** - * {@inheritdoc} - */ - public function isPrefix() + public function isPrefix(): bool { return false; } - /** {@inheritdoc} */ - public function ordinalIndicator($number) + public function ordinalIndicator($number): string { return 'o'; } diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index b71e798..a5e0967 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -13,47 +13,33 @@ final class BinarySuffix { - const CONVERT_THRESHOLD = 1024; - /** * @var int */ - private $number; + const CONVERT_THRESHOLD = 1024; - /** - * @var string - */ - private $locale; + private int $number; + + private string $locale; /** - * @var array + * @var array */ - private $binaryPrefixes = [ - 1125899906842624 => '#.## PB', - 1099511627776 => '#.## TB', - 1073741824 => '#.## GB', - 1048576 => '#.## MB', + private array $binaryPrefixes = [ + 1_125_899_906_842_624 => '#.## PB', + 1_099_511_627_776 => '#.## TB', + 1_073_741_824 => '#.## GB', + 1_048_576 => '#.## MB', 1024 => '#.# kB', 0 => '# bytes', ]; - /** - * @param int $number - * @param string $locale - * @param int $precision - * - * @throws \InvalidArgumentException - */ - public function __construct($number, $locale = 'en', $precision = null) + public function __construct(int $number, string $locale = 'en', int $precision = null) { - if (!\class_exists('NumberFormatter')) { + if (!\class_exists(\NumberFormatter::class)) { throw new \RuntimeException('Binary suffix converter requires intl extension!'); } - if (!\is_numeric($number)) { - throw new \InvalidArgumentException('Binary suffix converter accept only numeric values.'); - } - if (!\is_null($precision)) { $this->setSpecificPrecisionFormat($precision); } @@ -68,6 +54,9 @@ public function __construct($number, $locale = 'en', $precision = null) \krsort($this->binaryPrefixes); } + /** + * @return int|string + */ public function convert() { $formatter = new \NumberFormatter($this->locale, \NumberFormatter::PATTERN_DECIMAL); @@ -90,12 +79,8 @@ public function convert() /** * Replaces the default ICU 56.1 decimal formats defined in $binaryPrefixes with ones that provide the same symbols * but the provided number of decimal places. - * - * @param int $precision - * - * @throws \InvalidArgumentException */ - protected function setSpecificPrecisionFormat($precision) + protected function setSpecificPrecisionFormat(int $precision): void { if ($precision < 0) { throw new \InvalidArgumentException('Precision must be positive'); @@ -112,7 +97,7 @@ protected function setSpecificPrecisionFormat($precision) foreach ($this->binaryPrefixes as $size => $unitPattern) { if ($size >= 1024) { - $symbol = \substr($unitPattern, \strpos($unitPattern, ' ')); + $symbol = \substr($unitPattern, (int) \strpos($unitPattern, ' ')); $this->binaryPrefixes[$size] = $icuFormat.$symbol; } } diff --git a/src/Coduo/PHPHumanizer/String/Breakpoint.php b/src/Coduo/PHPHumanizer/String/Breakpoint.php index e823511..c29c2a5 100644 --- a/src/Coduo/PHPHumanizer/String/Breakpoint.php +++ b/src/Coduo/PHPHumanizer/String/Breakpoint.php @@ -15,12 +15,6 @@ interface Breakpoint { /** * Return the length of the truncated $text depending on the $characterCount. - * - * @param string $text - * @param int $charactersCount - * @param int $charactersCount - * - * @return int */ - public function calculatePosition($text, $charactersCount); + public function calculatePosition(string $text, int $charactersCount): int; } diff --git a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php index f85097a..0e4c8c7 100644 --- a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php +++ b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php @@ -13,37 +13,20 @@ final class HtmlTruncate implements TruncateInterface { - /** - * @var string - */ - private $append; + private string $append; - /** - * @var string - */ - private $allowedTags; + private string $allowedTags; - /** - * @var Breakpoint - */ - private $breakpoint; + private Breakpoint $breakpoint; - /** - * @param Breakpoint $breakpoint - * @param string $allowedTags - * @param string $append - */ - public function __construct(Breakpoint $breakpoint, $allowedTags = '', $append = '') + public function __construct(Breakpoint $breakpoint, string $allowedTags = '', string $append = '') { $this->breakpoint = $breakpoint; $this->append = $append; $this->allowedTags = $allowedTags; } - /** - * @return string - */ - public function truncate($text, $charactersCount) + public function truncate(string $text, int $charactersCount): string { $strippedText = \strip_tags($text, $this->allowedTags); @@ -55,20 +38,15 @@ public function truncate($text, $charactersCount) * HTML tags if $is_html is set to true. * * Adapted from FuelPHP Str::truncate (https://github.com/fuelphp/common/blob/master/src/Str.php) - * - * @param string $string - * @param int $charactersCount - * - * @return string the truncated string */ - private function truncateHtml($string, $charactersCount) + private function truncateHtml(string $string, int $charactersCount): string { $limit = $charactersCount; $offset = 0; $tags = []; // Handle special characters. - \preg_match_all('/&[a-z]+;/i', \strip_tags($string), $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + \preg_match_all('#&[a-z]+;#i', \strip_tags($string), $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); foreach ($matches as $match) { if ($match[0][1] >= $limit) { break; @@ -77,13 +55,13 @@ private function truncateHtml($string, $charactersCount) } // Handle all the html tags. - \preg_match_all('/<[^>]+>([^<]*)/', $string, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + \preg_match_all('#<[^>]+>([^<]*)#', $string, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); foreach ($matches as $match) { if ($match[0][1] - $offset >= $limit) { break; } - $tag = \mb_substr(\strtok($match[0][0], " \t\n\r\0\x0B>"), 1); + $tag = \mb_substr((string) \strtok($match[0][0], " \t\n\r\0\x0B>"), 1); if ($tag[0] != '/') { $tags[] = $tag; } elseif (\end($tags) == \mb_substr($tag, 1)) { diff --git a/src/Coduo/PHPHumanizer/String/Humanize.php b/src/Coduo/PHPHumanizer/String/Humanize.php index a4ef053..e7c79d8 100644 --- a/src/Coduo/PHPHumanizer/String/Humanize.php +++ b/src/Coduo/PHPHumanizer/String/Humanize.php @@ -13,28 +13,21 @@ final class Humanize { - /** - * @var string - */ - private $text; + private string $text; - /** - * @var bool - */ - private $capitalize; + private bool $capitalize; + + private string $separator; /** - * @var string + * @var array */ - private $separator; + private array $forbiddenWords; /** - * @param $text - * @param bool $capitalize - * @param string $separator - * @param array $forbiddenWords + * @param array $forbiddenWords */ - public function __construct($text, $capitalize = true, $separator = '_', array $forbiddenWords = ['id']) + public function __construct(string $text, bool $capitalize = true, string $separator = '_', array $forbiddenWords = ['id']) { $this->text = $text; $this->capitalize = $capitalize; @@ -42,12 +35,9 @@ public function __construct($text, $capitalize = true, $separator = '_', array $ $this->forbiddenWords = $forbiddenWords; } - /** - * @return string - */ - public function __toString() + public function __toString(): string { - $humanized = \trim(\strtolower(\preg_replace(['/([A-Z])/', "/[{$this->separator}\\s]+/"], ['_$1', ' '], $this->text))); + $humanized = \trim(\strtolower((string) \preg_replace(['/([A-Z])/', \sprintf('/[%s\s]+/', $this->separator)], ['_$1', ' '], $this->text))); $humanized = \trim(\str_replace($this->forbiddenWords, '', $humanized)); return $this->capitalize ? \ucfirst($humanized) : $humanized; diff --git a/src/Coduo/PHPHumanizer/String/MetricSuffix.php b/src/Coduo/PHPHumanizer/String/MetricSuffix.php index 3a76eb3..141987d 100644 --- a/src/Coduo/PHPHumanizer/String/MetricSuffix.php +++ b/src/Coduo/PHPHumanizer/String/MetricSuffix.php @@ -13,42 +13,42 @@ final class MetricSuffix { - const CONVERT_THRESHOLD = 1000; - /** * @var int */ - private $number; + const CONVERT_THRESHOLD = 1000; - /** - * @var string - */ - private $locale; + private int $number; + + private string $locale; /** - * @var array + * @var array */ - private $binaryPrefixes = [ - 1000000000000000 => '#.##P', - 1000000000000 => '#.##T', - 1000000000 => '#.##G', - 1000000 => '#.##M', + private array $binaryPrefixes = [ + 1_000_000_000_000_000 => '#.##P', + 1_000_000_000_000 => '#.##T', + 1_000_000_000 => '#.##G', + 1_000_000 => '#.##M', 1000 => '#.#k', 0 => '#.#', ]; /** - * @param $number + * @param numeric $number * @param string $locale * * @throws \InvalidArgumentException */ - public function __construct($number, $locale = 'en') + public function __construct($number, string $locale = 'en') { - if (!\class_exists('NumberFormatter')) { + if (!\class_exists(\NumberFormatter::class)) { throw new \RuntimeException('Metric suffix converter requires intl extension!'); } + /** + * @psalm-suppress DocblockTypeContradiction + */ if (!\is_numeric($number)) { throw new \InvalidArgumentException('Metric suffix converter accept only numeric values.'); } @@ -63,7 +63,7 @@ public function __construct($number, $locale = 'en') \krsort($this->binaryPrefixes); } - public function convert() + public function convert(): string { $formatter = new \NumberFormatter($this->locale, \NumberFormatter::PATTERN_DECIMAL); diff --git a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php index 405a056..c1f85c0 100644 --- a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php +++ b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php @@ -20,41 +20,25 @@ final class ShortcodeProcessor { /** * Removes all shortcodes from given text. - * - * @param string $text - * - * @return string */ - public function removeShortcodes($text) + public function removeShortcodes(string $text): string { - $nullHandler = function () { - return; - }; - - return $this->createShortcodeProcessor($nullHandler)->process($text); + return $this->createShortcodeProcessor( + function (): void { + return; + } + )->process($text); } /** * Removes only shortcode tags from given text (leaves their content as it is). - * - * @param string $text - * - * @return string */ - public function removeShortcodeTags($text) + public function removeShortcodeTags(string $text): string { - $contentHandler = function (ShortcodeInterface $s) { - return $s->getContent(); - }; - - return $this->createShortcodeProcessor($contentHandler)->process($text); + return $this->createShortcodeProcessor(fn (ShortcodeInterface $s) : ?string => $s->getContent())->process($text); } - /** - * @param $defaultHandler - * @return Processor - */ - private function createShortcodeProcessor($defaultHandler) + private function createShortcodeProcessor(callable $defaultHandler): Processor { $handlers = new HandlerContainer(); $handlers->setDefault($defaultHandler); diff --git a/src/Coduo/PHPHumanizer/String/TextTruncate.php b/src/Coduo/PHPHumanizer/String/TextTruncate.php index e48c044..a487951 100644 --- a/src/Coduo/PHPHumanizer/String/TextTruncate.php +++ b/src/Coduo/PHPHumanizer/String/TextTruncate.php @@ -13,33 +13,17 @@ final class TextTruncate implements TruncateInterface { - /** - * @var string - */ - private $append; - - /** - * @var Breakpoint - */ - private $breakpoint; - - /** - * @param Breakpoint $breakpoint - * @param string $append - */ - public function __construct(Breakpoint $breakpoint, $append = '') + private string $append; + + private Breakpoint $breakpoint; + + public function __construct(Breakpoint $breakpoint, string $append = '') { $this->breakpoint = $breakpoint; $this->append = $append; } - /** - * @param string $text - * @param int $charactersCount - * - * @return string - */ - public function truncate($text, $charactersCount) + public function truncate(string $text, int $charactersCount): string { if ($charactersCount < 0 || \mb_strlen($text) <= $charactersCount) { return $text; diff --git a/src/Coduo/PHPHumanizer/String/TruncateInterface.php b/src/Coduo/PHPHumanizer/String/TruncateInterface.php index 1749047..5f671b5 100644 --- a/src/Coduo/PHPHumanizer/String/TruncateInterface.php +++ b/src/Coduo/PHPHumanizer/String/TruncateInterface.php @@ -13,11 +13,5 @@ interface TruncateInterface { - /** - * @param string $text - * @param int $charactersCount - * - * @return string mixed - */ - public function truncate($text, $charactersCount); + public function truncate(string $text, int $charactersCount): string; } diff --git a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php index 1a73722..0dd6f7d 100644 --- a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php +++ b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php @@ -13,27 +13,22 @@ final class WordBreakpoint implements Breakpoint { - /** - * @param string $text - * @param int $charactersCount - * @return bool|int - */ - public function calculatePosition($text, $charactersCount) + public function calculatePosition(string $text, int $charactersCount): int { if ($charactersCount < 0) { - return \mb_strlen($text); + return (int) \mb_strlen($text); } if ($charactersCount > \mb_strlen($text)) { - return \mb_strlen($text); + return (int) \mb_strlen($text); } $breakpoint = \mb_strpos($text, ' ', $charactersCount); if (false === $breakpoint) { - return \mb_strlen($text); + return (int) \mb_strlen($text); } - return $breakpoint; + return (int) $breakpoint; } } diff --git a/src/Coduo/PHPHumanizer/StringHumanizer.php b/src/Coduo/PHPHumanizer/StringHumanizer.php index 8da6660..ceb9df9 100644 --- a/src/Coduo/PHPHumanizer/StringHumanizer.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -20,54 +20,30 @@ final class StringHumanizer { /** - * @param $text - * @param bool|true $capitalize - * @param string $separator - * @param array $forbiddenWords - * - * @return string + * @param array $forbiddenWords */ - public static function humanize($text, $capitalize = true, $separator = '_', array $forbiddenWords = []) + public static function humanize(string $text, bool $capitalize = true, string $separator = '_', array $forbiddenWords = []): string { return (string) new Humanize($text, $capitalize, $separator, $forbiddenWords); } - /** - * @param $text - * @param $charactersCount - * @param string $append - * - * @return string - */ - public static function truncate($text, $charactersCount, $append = '') + public static function truncate(string $text, int $charactersCount, string $append = ''): string { $truncate = new TextTruncate(new WordBreakpoint(), $append); return $truncate->truncate($text, $charactersCount); } - /** - * @param $text - * @param $charactersCount - * @param string $allowedTags - * @param string $append - * - * @return string - */ - public static function truncateHtml($text, $charactersCount, $allowedTags = '', $append = '') + public static function truncateHtml(string $text, int $charactersCount, string $allowedTags = '', string $append = ''): string { $truncate = new HtmlTruncate(new WordBreakpoint(), $allowedTags, $append); return $truncate->truncate($text, $charactersCount); } - /** - * @param $text - * @return string - */ - public static function removeShortcodes($text) + public static function removeShortcodes(string $text): string { - if (!\class_exists('Thunder\Shortcode\Processor\Processor')) { + if (!\class_exists('\Thunder\Shortcode\Processor\Processor')) { throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); } @@ -76,13 +52,9 @@ public static function removeShortcodes($text) return $processor->removeShortcodes($text); } - /** - * @param $text - * @return string - */ - public static function removeShortcodeTags($text) + public static function removeShortcodeTags(string $text): string { - if (!\class_exists('Thunder\Shortcode\Processor\Processor')) { + if (!\class_exists('\Thunder\Shortcode\Processor\Processor')) { throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); } diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index b1500ff..1a3bd56 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -16,11 +16,7 @@ final class Builder { - /** - * @param $locale - * @return Translator - */ - public static function build($locale) + public static function build(string $locale): Translator { $translator = new Translator($locale); $translator->addLoader('yml', new YamlFileLoader()); diff --git a/tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php new file mode 100644 index 0000000..316dd4c --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php @@ -0,0 +1,49 @@ +assertSame( + 'Michal and Norbert', + $formatter->format(['Michal', 'Norbert'], null) + ); + } + + public function test_formats_elements_with_limit() + { + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame( + 'Michal, Norbert, and 1 other', + $formatter->format(['Michal', 'Norbert', 'Lukasz'], 2) + ); + } + + public function test_formats_elements_without_limit() + { + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame( + 'Michal, Norbert, and Lukasz', + $formatter->format(['Michal', 'Norbert', 'Lukasz'], null) + ); + } +} diff --git a/tests/Coduo/PHPHumanizer/Tests/Collection/OxfordTest.php b/tests/Coduo/PHPHumanizer/Tests/Collection/OxfordTest.php new file mode 100644 index 0000000..5a56fcc --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/Collection/OxfordTest.php @@ -0,0 +1,36 @@ +assertSame( + '', + (new Oxford(new Formatter(Builder::build('en'))))->format([]) + ); + } + + public function test_returns_collection_item_string_when_collection_has_one_element() : void + { + $this->assertSame( + 'Michal', + (new Oxford(new Formatter(Builder::build('en'))))->format(['Michal']) + ); + } +} diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php new file mode 100644 index 0000000..43c9ec5 --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php @@ -0,0 +1,120 @@ +assertInstanceOf(Minute::class, $diff->getUnit()); + $this->assertSame(15, $diff->getQuantity()); + $this->assertTrue($diff->isPast()); + } + + public function test_calculate_diff_between_present_and_future_date_in_minutes() + { + $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 13:15:00')); + $this->assertInstanceOf(Minute::class, $diff->getUnit()); + $this->assertSame(15, $diff->getQuantity()); + $this->assertFalse($diff->isPast()); + } + + public function test_calculate_diff_between_present_and_past_date_in_hours() + { + $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 11:00:00')); + $this->assertInstanceOf(Hour::class, $diff->getUnit()); + $this->assertSame(2, $diff->getQuantity()); + $this->assertSame(true, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_future_date_in_hours() + { + $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 16:00:00')); + $this->assertInstanceOf(Hour::class, $diff->getUnit()); + $this->assertSame(3, $diff->getQuantity()); + $this->assertSame(false, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_past_date_in_days() + { + $diff = new Difference(new \DateTime('2014-04-10'), new \DateTime('2014-04-09')); + $this->assertInstanceOf(Day::class, $diff->getUnit()); + $this->assertSame(1, $diff->getQuantity()); + $this->assertSame(true, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_future_date_in_days() + { + $diff = new Difference(new \DateTime('2014-04-10'), new \DateTime('2014-04-11')); + $this->assertInstanceOf(Day::class, $diff->getUnit()); + $this->assertSame(1, $diff->getQuantity()); + $this->assertSame(false, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_past_date_in_weeks() + { + $diff = new Difference(new \DateTime('2014-04-15'), new \DateTime('2014-04-01')); + $this->assertInstanceOf(Week::class, $diff->getUnit()); + $this->assertSame(2, $diff->getQuantity()); + $this->assertSame(true, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_future_date_in_weeks() + { + $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-04-15')); + $this->assertInstanceOf(Week::class, $diff->getUnit()); + $this->assertSame(2, $diff->getQuantity()); + $this->assertSame(false, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_past_date_in_months() + { + $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-03-01')); + $this->assertInstanceOf(Month::class, $diff->getUnit()); + $this->assertSame(1, $diff->getQuantity()); + $this->assertSame(true, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_future_date_in_months() + { + $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-05-01')); + $this->assertInstanceOf(Month::class, $diff->getUnit()); + $this->assertSame(1, $diff->getQuantity()); + $this->assertSame(false, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_past_date_in_years() + { + $diff = new Difference(new \DateTime('2014-01-01'), new \DateTime('2012-01-01')); + $this->assertInstanceOf(Year::class, $diff->getUnit()); + $this->assertSame(2, $diff->getQuantity()); + $this->assertSame(true, $diff->isPast()); + } + + public function test_calculate_diff_between_present_and_future_date_in_years() + { + $diff = new Difference(new \DateTime('2014-01-01'), new \DateTime('2015-01-01')); + $this->assertInstanceOf(Year::class, $diff->getUnit()); + $this->assertSame(1, $diff->getQuantity()); + $this->assertSame(false, $diff->isPast()); + } +} diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTime/FormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTime/FormatterTest.php new file mode 100644 index 0000000..72d6011 --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/DateTime/FormatterTest.php @@ -0,0 +1,44 @@ +assertSame('10 minutes ago', $formatter->formatDifference($diff)); + } + + public function test_format_datetime_diff_for_specific_locale() : void + { + $diff = new Difference( + new \DateTime('2015-01-01 00:10:00'), + new \DateTime('2015-01-01 00:00:00') + ); + + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame('10 minut temu', $formatter->formatDifference($diff, 'pl')); + } +} diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php new file mode 100644 index 0000000..a14cb81 --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php @@ -0,0 +1,44 @@ +assertSame('10 days, 5 hours from now', $formatter->formatDifference($diff)); + } + + public function test_format_compound_datetime_diff_for_specific_locale() + { + $diff = new PreciseDifference( + new \DateTime('2015-01-01 00:00:00'), + new \DateTime('2015-01-11 05:00:00') + ); + + $formatter = new PreciseFormatter(Builder::build('en')); + + $this->assertSame('через 10 дней, 5 часов', $formatter->formatDifference($diff, 'ru')); + } +} diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php index a0a9847..1199877 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php @@ -185,12 +185,6 @@ public function test_convert_number_to_string_with_binary_suffix($expected, $num $this->assertEquals($expected, NumberHumanizer::binarySuffix($number, $locale)); } - public function test_statically_throw_exception_when_converting_to_string_with_binary_suffix_non_numeric_values() - { - $this->expectException(\InvalidArgumentException::class); - NumberHumanizer::binarySuffix('as12'); - } - /** * @dataProvider preciseBinarySuffixDataProvider * @@ -569,7 +563,6 @@ public function romanExceptionProvider() public function arabicExceptionProvider() { return [ - [1234], [''], ['foobar'], ]; diff --git a/tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php b/tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php new file mode 100644 index 0000000..1dd46da --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php @@ -0,0 +1,51 @@ +assertSame(5, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 2)); + $this->assertSame(5, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 4)); + $this->assertSame(5, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 5)); + $this->assertSame(11, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 10)); + $this->assertSame(19, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', -2)); + $this->assertSame(5, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 0)); + } + + public function test_calculate_breakpoint_position_when_sentence_is_shorter_than_characters_count() + { + $wordBreakpoint = new WordBreakpoint(); + + $this->assertSame(19, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 20)); + } + + public function test_calculate_breakpoint_position_when_characters_count_ends_in_last_word() + { + $wordBreakpoint = new WordBreakpoint(); + + $this->assertSame(11, $wordBreakpoint->calculatePosition('Lorem ipsum', 7)); + } + + public function test_calculate_breakpoint_position_when_characters_count_ends_in_last_space() + { + $wordBreakpoint = new WordBreakpoint(); + + $this->assertSame(5, $wordBreakpoint->calculatePosition('Lorem ipsum', 5)); + } +} diff --git a/tests/bootstrap.php b/tests/bootstrap.php deleted file mode 100644 index 008bbfe..0000000 --- a/tests/bootstrap.php +++ /dev/null @@ -1,12 +0,0 @@ - Date: Sun, 21 Feb 2021 23:09:33 +0100 Subject: [PATCH 131/193] Fixed updating changelog workflow --- .github/workflows/changelog-update.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/changelog-update.yml b/.github/workflows/changelog-update.yml index e0ae30a..c444e15 100644 --- a/.github/workflows/changelog-update.yml +++ b/.github/workflows/changelog-update.yml @@ -7,7 +7,7 @@ name: "Changelog - Update Unreleased" on: push: branches: - - 6.x + - 4.x jobs: changelog-update-unreleased: From d6addbbdfeb33f8ae280ae18a2b06ee6cae5945e Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Sun, 21 Feb 2021 22:12:04 +0000 Subject: [PATCH 132/193] Updated CHANGELOG.md --- CHANGELOG.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6125fde..7dc6841 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,19 @@ -## [Unreleased] - 2020-10-18 +## [Unreleased] - 2021-02-21 ### Added +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **phpstan with highest possible requirements** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **psalm with highest possible requirements** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **arguments and return type hinting** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **PHP 8.0 support** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **More precise CS fixer rules** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **Full change log** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **integration with aeon-php/automation** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **Github actions integration** - [@norberttech](https://github.com/norberttech) - [#120](https://github.com/coduo/php-humanizer/pull/120) - **test for azerbaijani language** - [@4t87ux8](https://github.com/4t87ux8) - [#119](https://github.com/coduo/php-humanizer/pull/119) - **support azerbaijani language** - [@4t87ux8](https://github.com/4t87ux8) ### Changed +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **minimum required PHP version ^7.4** - [@norberttech](https://github.com/norberttech) - [#118](https://github.com/coduo/php-humanizer/pull/118) - **create azerbaijani translation** - [@4t87ux8](https://github.com/4t87ux8) - [fa52e6](https://github.com/coduo/php-humanizer/commit/fa52e6223eef2f19fbd0a290432b5a878317dca2) - **Fixxed issue with symfony translator dependency, upgraded php, phpunit and phpspec dependencies** - [@norberttech](https://github.com/norberttech) - [f989a9](https://github.com/coduo/php-humanizer/commit/f989a91d2d90f5d4bf4922ab9fec1674e7fe024e) - **Create FUNDING.yml** - [@norberttech](https://github.com/norberttech) @@ -15,10 +24,14 @@ - [1b2787](https://github.com/coduo/php-humanizer/commit/1b2787d28282247b3fe68cd5b9f6bf80f304fa63) - **dev-master branch aliast** - [@norberttech](https://github.com/norberttech) ### Fixed +- [4de08d](https://github.com/coduo/php-humanizer/commit/4de08de0b2463cfc498612a89189385b5de4f66d) - **updating changelog workflow** - [@norberttech](https://github.com/norberttech) - [fc3a04](https://github.com/coduo/php-humanizer/commit/fc3a043f6e03bc29e86d0cd58ae3a6b7daf40d69) - **travis configuration** - [@norberttech](https://github.com/norberttech) - [#115](https://github.com/coduo/php-humanizer/pull/115) - **composer autoloading deprecation notice; Support symfony 5** - [@brianwozeniak](https://github.com/brianwozeniak) ### Removed +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **phpspec** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **symfony/config dependency** - [@norberttech](https://github.com/norberttech) +- [#122](https://github.com/coduo/php-humanizer/pull/122) - **travis CI integration** - [@norberttech](https://github.com/norberttech) - [83a180](https://github.com/coduo/php-humanizer/commit/83a1805da9a28a98a0bb932a5236becd44ea79b6) - **php 8.0 from matrix** - [@norberttech](https://github.com/norberttech) ## [3.0.2] - 2019-04-29 @@ -152,7 +165,7 @@ - [dac446](https://github.com/coduo/php-humanizer/commit/dac446bb4bb0a959fb39466b3729bc97060f4449) - **refacto visibility and breakpoint** - [@smeeckaert](https://github.com/smeeckaert) - [#34](https://github.com/coduo/php-humanizer/pull/34) - **string functions into multibyte string functions** - [@norberttech](https://github.com/norberttech) - [#35](https://github.com/coduo/php-humanizer/pull/35) - **Oxford italian translations** - [@omissis](https://github.com/omissis) -- [#22](https://github.com/coduo/php-humanizer/pull/22) - **Oxford collection + phpcs fixer cleanup.** - [@defrag](https://github.com/defrag) +- [#22](https://github.com/coduo/php-humanizer/pull/22) - **Oxford collection + phpcs fixer cleanup.** - [@defrag](https://github.com/defrag) - [#33](https://github.com/coduo/php-humanizer/pull/33) - **Truncate check length of append** - [@smeeckaert](https://github.com/smeeckaert) - [#31](https://github.com/coduo/php-humanizer/pull/31) - **Addition of Portuguese (pt) language translation (with spec tests)** - [@lightglitch](https://github.com/lightglitch) - [8cdeae](https://github.com/coduo/php-humanizer/commit/8cdeaef54f759d7e9a93c85cbf9e6e7b63dd6e76) - **truncate html** - [@smeeckaert](https://github.com/smeeckaert) From 31065f9c40a1cd7db52e09cd2f5f828c1ed1736c Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Tue, 23 Feb 2021 21:48:21 +0100 Subject: [PATCH 133/193] Added integration with aeon-php/calendar library (#123) --- README.md | 16 ++++ composer.json | 7 +- composer.lock | 69 +++++++++++++-- .../PHPHumanizer/Aeon/Calendar/Formatter.php | 42 +++++++++ .../Aeon/Calendar/UnitCompound.php | 83 ++++++++++++++++++ .../DateTime/DateIntervalCompound.php | 58 +++++++++++++ .../PHPHumanizer/DateTime/Difference.php | 6 +- .../DateTime/Difference/CompoundResult.php | 26 +++--- .../DateTime/PreciseDifference.php | 52 +++--------- .../DateTime/PreciseFormatter.php | 19 ++++- src/Coduo/PHPHumanizer/DateTimeHumanizer.php | 27 +++++- .../Tests/Aeon/Calendar/FormatterTest.php | 49 +++++++++++ .../Tests/DateTime/PreciseFormatterTest.php | 12 +++ .../Tests/DateTimeHumanizerTest.php | 85 ++++++++++++++----- 14 files changed, 463 insertions(+), 88 deletions(-) create mode 100644 src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php create mode 100644 src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php create mode 100644 src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php create mode 100644 tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php diff --git a/README.md b/README.md index 1f7e85d..164d37a 100644 --- a/README.md +++ b/README.md @@ -236,6 +236,22 @@ DateTimeHumanizer::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \ DateTimeHumanizer::preciseDifference(new \DateTime("2014-04-26 13:00:00"), new \DateTime("2016-04-27 13:00:00")); // 2 years, 1 day from now ``` +## Aeon Calendar + +[Aeon PHP](https://aeon-php.org/) is a date&time oriented set of libraries. + +```php +use Coduo\PHPHumanizer\DateTimeHumanizer; + +$timeUnit = TimeUnit::days(2) + ->add(TimeUnit::hours(3)) + ->add(TimeUnit::minutes(25)) + ->add(TimeUnit::seconds(30)) + ->add(TimeUnit::milliseconds(200)); + +DateTimeHumanizer::timeUnit($timeUnit); // 2 days, 3 hours, 25 minutes, and 30.2 seconds +``` + Currently we support following languages: * [Azerbaijani](src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml) * [English](src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml) diff --git a/composer.json b/composer.json index 58f5108..92dbc7a 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,8 @@ "require": { "php": "^7.4 | ^8.0", "symfony/translation": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" + "symfony/yaml": "^4.4|^5.0", + "aeon-php/calendar": ">=0.16.1" }, "require-dev": { "thunderer/shortcode": "^0.7", @@ -40,6 +41,10 @@ "ext-intl": "Required if you are going to use humanizer with locales different than en_EN" }, "scripts": { + "build": [ + "@static:analyze", + "@test" + ], "cs:php:fix": [ "tools/php-cs-fixer fix --using-cache=no" ], diff --git a/composer.lock b/composer.lock index d0fe9ed..1753b0c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,63 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2266b8e08228e1596ce0366b445cd246", + "content-hash": "c74a1cca580ca33e81761900ec3f88f1", "packages": [ + { + "name": "aeon-php/calendar", + "version": "0.16.1", + "source": { + "type": "git", + "url": "https://github.com/aeon-php/calendar.git", + "reference": "9509656c6b01024aad6158628fc8c950f9cf1199" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aeon-php/calendar/zipball/9509656c6b01024aad6158628fc8c950f9cf1199", + "reference": "9509656c6b01024aad6158628fc8c950f9cf1199", + "shasum": "" + }, + "require": { + "php": ">=7.4.2" + }, + "require-dev": { + "ext-bcmath": "*" + }, + "suggest": { + "ext-bcmath": "Compare time units with high precision" + }, + "type": "library", + "autoload": { + "psr-4": { + "Aeon\\": [ + "src/Aeon" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHP type safe, immutable calendar library", + "keywords": [ + "calendar", + "date", + "datetime", + "immutable", + "time" + ], + "support": { + "issues": "https://github.com/aeon-php/calendar/issues", + "source": "https://github.com/aeon-php/calendar/tree/0.16.1" + }, + "funding": [ + { + "url": "https://github.com/norberttech", + "type": "github" + } + ], + "time": "2021-02-23T08:58:57+00:00" + }, { "name": "symfony/deprecation-contracts", "version": "v2.2.0", @@ -808,16 +863,16 @@ }, { "name": "phar-io/version", - "version": "3.0.4", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "e4782611070e50613683d2b9a57730e9a3ba5451" + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451", - "reference": "e4782611070e50613683d2b9a57730e9a3ba5451", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { @@ -853,9 +908,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.0.4" + "source": "https://github.com/phar-io/version/tree/3.1.0" }, - "time": "2020-12-13T23:18:30+00:00" + "time": "2021-02-23T14:00:09+00:00" }, { "name": "phpdocumentor/reflection-common", diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php new file mode 100644 index 0000000..3576da6 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php @@ -0,0 +1,42 @@ +translator = $translator; + } + + public function timeUnit(Unit $unit, string $locale = 'en') : string + { + $parts = []; + + foreach ((new UnitCompound($unit))->components() as $component) { + $parts[] = $this->translator->trans( + 'compound.'.$component->getUnit()->getName(), + ['%count%' => $component->getQuantity()], + 'difference', + $locale + ); + } + + return CollectionHumanizer::oxford($parts, null, $locale); + } +} diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php new file mode 100644 index 0000000..b461b11 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php @@ -0,0 +1,83 @@ +unit = $timeUnit; + } + + /** + * @return array + */ + public function components() : array + { + $unit = $this->unit; + $compoundResults = []; + + if ($unit instanceof RelativeTimeUnit) { + if ($unit->inYears()) { + $compoundResults[] = new CompoundResult(new Year(), $unit->inYears()); + } + + if ($unit->inCalendarMonths()) { + $compoundResults[] = new CompoundResult(new Month(), $unit->inCalendarMonths()); + } + + return (new DateIntervalCompound($unit->toDateInterval()))->components(); + } + + if ($unit instanceof TimeUnit) { + if ($unit->inDaysAbs() > 0) { + $compoundResults[] = new CompoundResult(new Day(), $unit->inDaysAbs()); + } + + if ($unit->inTimeHours()) { + $compoundResults[] = new CompoundResult(new Hour(), $unit->inTimeHours()); + } + + if ($unit->inTimeMinutes()) { + $compoundResults[] = new CompoundResult(new Minute(), $unit->inTimeMinutes()); + } + + if ($unit->inTimeSeconds()) { + $seconds = $unit->inTimeSeconds(); + + if ($unit->inTimeMilliseconds() > 0) { + $seconds += $unit->inTimeMilliseconds() / 1000; + } + + $compoundResults[] = new CompoundResult(new Second(), $seconds); + } + + return $compoundResults; + } + + throw new \RuntimeException('Unsupported unit type ' . \get_class($unit)); + } +} diff --git a/src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php b/src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php new file mode 100644 index 0000000..c94c7d9 --- /dev/null +++ b/src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php @@ -0,0 +1,58 @@ +dateInterval = $dateInterval; + } + + /** + * @return array + */ + public function components() : array + { + /* @var Unit[] $units */ + $units = [ + new Year(), + new Month(), + new Day(), + new Hour(), + new Minute(), + new Second(), + ]; + + + /** @var array $compoundResults */ + $compoundResults = []; + + foreach ($units as $unit) { + if ($this->dateInterval->{$unit->getDateIntervalSymbol()} > 0) { + $compoundResults[] = new CompoundResult($unit, (int) $this->dateInterval->{$unit->getDateIntervalSymbol()}); + } + } + + return $compoundResults; + } +} diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference.php b/src/Coduo/PHPHumanizer/DateTime/Difference.php index 2ca8258..25f8025 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference.php @@ -22,9 +22,9 @@ final class Difference { - private \DateTime $fromDate; + private \DateTimeInterface $fromDate; - private \DateTime $toDate; + private \DateTimeInterface $toDate; /** * @psalm-suppress PropertyNotSetInConstructor @@ -33,7 +33,7 @@ final class Difference private ?int $quantity = null; - public function __construct(\DateTime $fromDate, \DateTime $toDate) + public function __construct(\DateTimeInterface $fromDate, \DateTimeInterface $toDate) { $this->fromDate = $fromDate; $this->toDate = $toDate; diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php index 512fd1b..7cedcbb 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php @@ -16,29 +16,29 @@ final class CompoundResult { private Unit $unit; - private int $quantity; - public function __construct(Unit $unit, int $quantity) - { - $this->unit = $unit; - $this->quantity = $quantity; - } + /** + * @var int|float + */ + private $quantity; - public function setQuantity(int $quantity): void + /** + * @param int|float $quantity + */ + public function __construct(Unit $unit, $quantity) { + $this->unit = $unit; $this->quantity = $quantity; } - public function getQuantity() : int + /** + * @return int|float + */ + public function getQuantity() { return $this->quantity; } - public function setUnit(Unit $unit): void - { - $this->unit = $unit; - } - public function getUnit(): Unit { return $this->unit; diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php index 0a75a80..c16f59e 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php @@ -11,65 +11,33 @@ namespace Coduo\PHPHumanizer\DateTime; -use Coduo\PHPHumanizer\DateTime\Unit\Day; -use Coduo\PHPHumanizer\DateTime\Unit\Hour; -use Coduo\PHPHumanizer\DateTime\Unit\Minute; -use Coduo\PHPHumanizer\DateTime\Unit\Month; -use Coduo\PHPHumanizer\DateTime\Unit\Second; -use Coduo\PHPHumanizer\DateTime\Unit\Year; use Coduo\PHPHumanizer\DateTime\Difference\CompoundResult; final class PreciseDifference { - private \DateTime $fromDate; + private \DateTimeInterface $fromDate; - private \DateTime $toDate; + private \DateTimeInterface $toDate; - /** - * @var array - */ - private array $units = []; - - /** - * @var array - */ - private array $compoundResults = []; + private ?DateIntervalCompound $compoundResults ; - public function __construct(\DateTime $fromDate, \DateTime $toDate) + public function __construct(\DateTimeInterface $fromDate, \DateTimeInterface $toDate) { $this->fromDate = $fromDate; $this->toDate = $toDate; - $this->calculate(); + $this->compoundResults = null; } /** * @return array */ - public function getCompoundResults(): array + public function components() : array { - return $this->compoundResults; - } - - private function calculate(): void - { - /* @var $units Unit[] */ - $units = [ - new Year(), - new Month(), - new Day(), - new Hour(), - new Minute(), - new Second(), - ]; - - $diff = $this->fromDate->diff($this->toDate); - - foreach ($units as $unit) { - if ($diff->{$unit->getDateIntervalSymbol()} > 0) { - $this->units[] = $unit; - $this->compoundResults[] = new CompoundResult($unit, $diff->{$unit->getDateIntervalSymbol()}); - } + if ($this->compoundResults === null) { + $this->compoundResults = new DateIntervalCompound($this->fromDate->diff($this->toDate)); } + + return $this->compoundResults->components(); } public function isPast(): bool diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index 2036fb9..45a1f7f 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -11,6 +11,7 @@ namespace Coduo\PHPHumanizer\DateTime; +use Coduo\PHPHumanizer\CollectionHumanizer; use Symfony\Contracts\Translation\TranslatorInterface; final class PreciseFormatter @@ -26,7 +27,7 @@ public function formatDifference(PreciseDifference $difference, string $locale = { $diff = []; - foreach ($difference->getCompoundResults() as $result) { + foreach ($difference->components() as $result) { $diff[] = $this->translator->trans( 'compound.'.$result->getUnit()->getName(), ['%count%' => $result->getQuantity()], @@ -42,4 +43,20 @@ public function formatDifference(PreciseDifference $difference, string $locale = $locale ); } + + public function formatInterval(\DateInterval $dateInterval, string $locale = 'en') : string + { + $parts = []; + + foreach ((new DateIntervalCompound($dateInterval))->components() as $component) { + $parts[] = $this->translator->trans( + 'compound.'.$component->getUnit()->getName(), + ['%count%' => $component->getQuantity()], + 'difference', + $locale + ); + } + + return CollectionHumanizer::oxford($parts, null, $locale); + } } diff --git a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php index 2c51cf5..2e6951d 100644 --- a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php +++ b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php @@ -11,6 +11,8 @@ namespace Coduo\PHPHumanizer; +use Aeon\Calendar\Gregorian\TimePeriod; +use Aeon\Calendar\Unit; use Coduo\PHPHumanizer\DateTime\Difference; use Coduo\PHPHumanizer\DateTime\PreciseDifference; use Coduo\PHPHumanizer\DateTime\Formatter; @@ -19,17 +21,38 @@ final class DateTimeHumanizer { - public static function difference(\DateTime $fromDate, \DateTime $toDate, string $locale = 'en'): string + public static function difference(\DateTimeInterface $fromDate, \DateTimeInterface $toDate, string $locale = 'en'): string { $formatter = new Formatter(Builder::build($locale)); return $formatter->formatDifference(new Difference($fromDate, $toDate), $locale); } - public static function preciseDifference(\DateTime $fromDate, \DateTime $toDate, string $locale = 'en'): string + public static function preciseDifference(\DateTimeInterface $fromDate, \DateTimeInterface $toDate, string $locale = 'en'): string { $formatter = new PreciseFormatter(Builder::build($locale)); return $formatter->formatDifference(new PreciseDifference($fromDate, $toDate), $locale); } + + public static function timeUnit(Unit $unit, string $locale = 'en') : string + { + $formatter = new Aeon\Calendar\Formatter(Builder::build($locale)); + + return $formatter->timeUnit($unit, $locale); + } + + public static function timePeriod(TimePeriod $timePeriod, string $locale = 'en') : string + { + $formatter = new Formatter(Builder::build($locale)); + + return $formatter->formatDifference(new Difference($timePeriod->start()->toDateTimeImmutable(), $timePeriod->end()->toDateTimeImmutable()), $locale); + } + + public static function timePeriodPrecise(TimePeriod $timePeriod, string $locale = 'en') : string + { + $formatter = new PreciseFormatter(Builder::build($locale)); + + return $formatter->formatDifference(new PreciseDifference($timePeriod->start()->toDateTimeImmutable(), $timePeriod->end()->toDateTimeImmutable()), $locale); + } } diff --git a/tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php new file mode 100644 index 0000000..dca4d01 --- /dev/null +++ b/tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php @@ -0,0 +1,49 @@ +add(TimeUnit::hours(3)) + ->add(TimeUnit::minutes(25)) + ->add(TimeUnit::seconds(30)) + ->add(TimeUnit::milliseconds(200)); + + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame( + '2 days, 3 hours, 25 minutes, and 30.2 seconds', + $formatter->timeUnit($timeUnit) + ); + } + + public function test_format_relative_time_unit() : void + { + $timeUnit = RelativeTimeUnit::months(14); + + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame( + '1 year and 2 months', + $formatter->timeUnit($timeUnit) + ); + } +} diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php index a14cb81..99b1c11 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php @@ -41,4 +41,16 @@ public function test_format_compound_datetime_diff_for_specific_locale() $this->assertSame('через 10 дней, 5 часов', $formatter->formatDifference($diff, 'ru')); } + + public function test_format_date_interval() : void + { + $interval = new \DateInterval('P1DT5H25M43S'); + + $formatter = new PreciseFormatter(Builder::build('en')); + + $this->assertSame( + '1 day, 5 hours, 25 minutes, and 43 seconds', + $formatter->formatInterval($interval) + ); + } } diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index a4c441e..23ce537 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -11,42 +11,57 @@ namespace Coduo\PHPHumanizer\Tests; +use Aeon\Calendar\Gregorian\DateTime; +use Aeon\Calendar\Gregorian\TimePeriod; +use Aeon\Calendar\RelativeTimeUnit; +use Aeon\Calendar\TimeUnit; +use Aeon\Calendar\Unit; use Coduo\PHPHumanizer\DateTimeHumanizer; use PHPUnit\Framework\TestCase; class DateTimeHumanizerTest extends TestCase { /** - * @test * @dataProvider humanizeDataProvider - * - * @param $firstDate - * @param $secondDate - * @param $expected - * @param string $locale */ - public function test_humanize_difference_between_dates($firstDate, $secondDate, $expected, $locale) + public function test_humanize_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void { $this->assertEquals($expected, DateTimeHumanizer::difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); } + /** + * @dataProvider humanizeDataProvider + */ + public function test_humanize_time_period(string $firstDate, string $secondDate, string $expected, string $locale) : void + { + $this->assertEquals($expected, DateTimeHumanizer::timePeriod(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); + } + /** * @dataProvider preciseDifferenceDataProvider - * - * @param $firstDate - * @param $secondDate - * @param $expected - * @param string $locale */ - public function test_humanize_precise_difference_between_dates($firstDate, $secondDate, $expected, $locale) + public function test_humanize_precise_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void + { + $this->assertEquals($expected, DateTimeHumanizer::timePeriodPrecise(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); + } + + /** + * @dataProvider preciseDifferenceDataProvider + */ + public function test_humanize_time_period_precise(string $firstDate, string $secondDate, string $expected, string $locale) : void { $this->assertEquals($expected, DateTimeHumanizer::preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); } /** - * @return array + * @dataProvider timeUnitDataProvider */ - public function humanizeDataProvider() + public function test_humanize_time_unit(Unit $unit, string $expected, string $locale) : void + { + $this->assertSame($expected, DateTimeHumanizer::timeUnit($unit, $locale)); + } + + public function humanizeDataProvider() : array { return [ // English @@ -264,10 +279,7 @@ public function humanizeDataProvider() ]; } - /** - * @return array - */ - public function preciseDifferenceDataProvider() + public function preciseDifferenceDataProvider() : array { return [ // Azerbaijani @@ -461,4 +473,39 @@ public function preciseDifferenceDataProvider() ['2014-04-26 13:00:00', '2016-04-27 13:00:00', '2 年, 1 日後', 'ja'], ]; } + + public function timeUnitDataProvider() : array + { + return [ + // English + [TimeUnit::seconds(20), '20 seconds', 'en'], + [TimeUnit::minutes(20), '20 minutes', 'en'], + [TimeUnit::minutes(20)->add(TimeUnit::seconds(5)), '20 minutes and 5 seconds', 'en'], + [ + TimeUnit::days(2) + ->add(TimeUnit::hours(3)) + ->add(TimeUnit::minutes(25)) + ->add(TimeUnit::seconds(30)) + ->add(TimeUnit::milliseconds(200)), + '2 days, 3 hours, 25 minutes, and 30.2 seconds', + 'en' + ], + [RelativeTimeUnit::months(14), '1 year and 2 months', 'en'], + + // Polish + [TimeUnit::seconds(20), '20 sekund', 'pl'], + [TimeUnit::minutes(20), '20 minut', 'pl'], + [TimeUnit::minutes(20)->add(TimeUnit::seconds(5)), '20 minut i 5 sekund', 'pl'], + [ + TimeUnit::days(2) + ->add(TimeUnit::hours(3)) + ->add(TimeUnit::minutes(25)) + ->add(TimeUnit::seconds(30)) + ->add(TimeUnit::milliseconds(200)), + '2 dni, 3 godziny, 25 minut i 30.2 sekund', + 'pl' + ], + [RelativeTimeUnit::months(14), '1 rok i 2 miesiące', 'pl'] + ]; + } } From b4b5120d544730407cfd126b8feaab0549545c18 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Tue, 23 Feb 2021 20:48:51 +0000 Subject: [PATCH 134/193] Updated CHANGELOG.md --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7dc6841..ae64d77 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ -## [Unreleased] - 2021-02-21 +## [Unreleased] - 2021-02-23 ### Added +- [#123](https://github.com/coduo/php-humanizer/pull/123) - **Relative/Time Unit humanizer** - [@norberttech](https://github.com/norberttech) +- [#123](https://github.com/coduo/php-humanizer/pull/123) - **TimePeriod humanizer** - [@norberttech](https://github.com/norberttech) +- [#123](https://github.com/coduo/php-humanizer/pull/123) - **Support for \DateTimeInterface instead of legacy \DateTime in all DateTimeHumanizers** - [@norberttech](https://github.com/norberttech) - [#122](https://github.com/coduo/php-humanizer/pull/122) - **phpstan with highest possible requirements** - [@norberttech](https://github.com/norberttech) - [#122](https://github.com/coduo/php-humanizer/pull/122) - **psalm with highest possible requirements** - [@norberttech](https://github.com/norberttech) - [#122](https://github.com/coduo/php-humanizer/pull/122) - **arguments and return type hinting** - [@norberttech](https://github.com/norberttech) From 0533da67e2a0ff97a8f504ebc8de469eaca150f1 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Tue, 23 Feb 2021 22:01:59 +0100 Subject: [PATCH 135/193] Added more strict php cs fixer rules --- .php_cs | 27 ------- .../PHPHumanizer/Aeon/Calendar/Formatter.php | 2 +- .../PHPHumanizer/Collection/Formatter.php | 8 +- src/Coduo/PHPHumanizer/Collection/Oxford.php | 2 +- .../PHPHumanizer/CollectionHumanizer.php | 2 +- .../DateTime/DateIntervalCompound.php | 1 - .../PHPHumanizer/DateTime/Difference.php | 22 +++--- .../DateTime/Difference/CompoundResult.php | 8 +- src/Coduo/PHPHumanizer/DateTime/Formatter.php | 2 +- .../DateTime/PreciseDifference.php | 4 +- .../DateTime/PreciseFormatter.php | 8 +- src/Coduo/PHPHumanizer/DateTime/Unit.php | 6 +- src/Coduo/PHPHumanizer/DateTime/Unit/Day.php | 6 +- src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php | 6 +- .../PHPHumanizer/DateTime/Unit/JustNow.php | 6 +- .../PHPHumanizer/DateTime/Unit/Minute.php | 6 +- .../PHPHumanizer/DateTime/Unit/Month.php | 6 +- .../PHPHumanizer/DateTime/Unit/Second.php | 6 +- src/Coduo/PHPHumanizer/DateTime/Unit/Week.php | 6 +- src/Coduo/PHPHumanizer/DateTime/Unit/Year.php | 6 +- src/Coduo/PHPHumanizer/DateTimeHumanizer.php | 6 +- src/Coduo/PHPHumanizer/Number/Ordinal.php | 18 ++--- .../PHPHumanizer/Number/Ordinal/Builder.php | 3 +- .../Number/Ordinal/StrategyInterface.php | 7 +- .../PHPHumanizer/Number/RomanNumeral.php | 17 ++-- src/Coduo/PHPHumanizer/NumberHumanizer.php | 18 +++-- .../Resources/Ordinal/DeStrategy.php | 4 +- .../Resources/Ordinal/EnStrategy.php | 7 +- .../Resources/Ordinal/EsStrategy.php | 4 +- .../Resources/Ordinal/FrStrategy.php | 10 +-- .../Resources/Ordinal/IdStrategy.php | 5 +- .../Resources/Ordinal/ItStrategy.php | 4 +- .../Resources/Ordinal/NlStrategy.php | 4 +- .../Resources/Ordinal/PtStrategy.php | 4 +- .../PHPHumanizer/String/BinarySuffix.php | 15 ++-- src/Coduo/PHPHumanizer/String/Breakpoint.php | 2 +- .../PHPHumanizer/String/HtmlTruncate.php | 9 ++- src/Coduo/PHPHumanizer/String/Humanize.php | 2 +- .../PHPHumanizer/String/MetricSuffix.php | 6 +- .../String/ShortcodeProcessor.php | 9 +-- .../PHPHumanizer/String/TextTruncate.php | 4 +- .../PHPHumanizer/String/TruncateInterface.php | 2 +- .../PHPHumanizer/String/WordBreakpoint.php | 2 +- src/Coduo/PHPHumanizer/StringHumanizer.php | 12 +-- src/Coduo/PHPHumanizer/Translator/Builder.php | 6 +- .../Tests/Collection/FormatterTest.php | 6 +- .../Tests/CollectionHumanizerTest.php | 2 +- .../Tests/DateTime/DifferenceTest.php | 26 +++---- .../Tests/DateTime/PreciseFormatterTest.php | 4 +- .../Tests/DateTimeHumanizerTest.php | 8 +- .../Tests/NumberHumanizerTest.php | 78 +++++++++++-------- .../Tests/String/WordBreakpointTest.php | 8 +- .../Tests/StringHumanizerTest.php | 28 ++++--- 53 files changed, 238 insertions(+), 242 deletions(-) delete mode 100644 .php_cs diff --git a/.php_cs b/.php_cs deleted file mode 100644 index b4f320e..0000000 --- a/.php_cs +++ /dev/null @@ -1,27 +0,0 @@ -setRules([ - '@PSR2' => true, - 'declare_strict_types' => true, - 'array_syntax' => ['syntax' => 'short'], - 'header_comment' => ['header' => $fileHeaderComment, 'separate' => 'both'], - 'blank_line_after_opening_tag' => true, - 'single_blank_line_before_namespace' => true, - 'no_unused_imports' => true, - 'single_quote' => true, - 'native_function_invocation' => true - ]) - ->setFinder( - PhpCsFixer\Finder::create() - ->in(__DIR__ . '/src') - ->in(__DIR__ . '/tests') - )->setRiskyAllowed(true) - ->setUsingCache(false); \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php index 3576da6..65ec949 100644 --- a/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php @@ -30,7 +30,7 @@ public function timeUnit(Unit $unit, string $locale = 'en') : string foreach ((new UnitCompound($unit))->components() as $component) { $parts[] = $this->translator->trans( - 'compound.'.$component->getUnit()->getName(), + 'compound.' . $component->getUnit()->getName(), ['%count%' => $component->getQuantity()], 'difference', $locale diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php index 2f49887..8912ad8 100644 --- a/src/Coduo/PHPHumanizer/Collection/Formatter.php +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -28,7 +28,7 @@ public function __construct(TranslatorInterface $translator, string $catalogue = /** * @param array $collection */ - public function format(array $collection, int $limit = null): string + public function format(array $collection, int $limit = null) : string { $count = \count($collection); @@ -54,7 +54,7 @@ public function format(array $collection, int $limit = null): string /** * @param array $collection */ - private function formatCommaSeparatedWithLimit(array $collection, ?int $limit, int $count): string + private function formatCommaSeparatedWithLimit(array $collection, ?int $limit, int $count) : string { $display = \array_map(fn ($element) => (string) $element, \array_slice($collection, 0, $limit)); @@ -69,7 +69,7 @@ private function formatCommaSeparatedWithLimit(array $collection, ?int $limit, i /** * @param array $collection */ - private function formatCommaSeparated(array $collection, int $count): string + private function formatCommaSeparated(array $collection, int $count) : string { $display = \array_map(fn ($element) => (string) $element, \array_slice($collection, 0, $count - 1)); @@ -82,7 +82,7 @@ private function formatCommaSeparated(array $collection, int $count): string /** * @param array $collection */ - private function formatOnlyTwo(array $collection): string + private function formatOnlyTwo(array $collection) : string { return $this->translator->trans('only_two', [ '%first%' => (string) $collection[0], diff --git a/src/Coduo/PHPHumanizer/Collection/Oxford.php b/src/Coduo/PHPHumanizer/Collection/Oxford.php index 2f84c21..2ec61ef 100644 --- a/src/Coduo/PHPHumanizer/Collection/Oxford.php +++ b/src/Coduo/PHPHumanizer/Collection/Oxford.php @@ -23,7 +23,7 @@ public function __construct(Formatter $formatter) /** * @param array $collection */ - public function format(array $collection, int $limit = null): string + public function format(array $collection, int $limit = null) : string { return $this->formatter->format($collection, $limit); } diff --git a/src/Coduo/PHPHumanizer/CollectionHumanizer.php b/src/Coduo/PHPHumanizer/CollectionHumanizer.php index e7c2bce..dc83f80 100644 --- a/src/Coduo/PHPHumanizer/CollectionHumanizer.php +++ b/src/Coduo/PHPHumanizer/CollectionHumanizer.php @@ -20,7 +20,7 @@ final class CollectionHumanizer /** * @param array $collection */ - public static function oxford(array $collection, int $limit = null, string $locale = 'en'): string + public static function oxford(array $collection, int $limit = null, string $locale = 'en') : string { $oxford = new Oxford( new Formatter(Builder::build($locale)) diff --git a/src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php b/src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php index c94c7d9..7cfa582 100644 --- a/src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php +++ b/src/Coduo/PHPHumanizer/DateTime/DateIntervalCompound.php @@ -43,7 +43,6 @@ public function components() : array new Second(), ]; - /** @var array $compoundResults */ $compoundResults = []; diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference.php b/src/Coduo/PHPHumanizer/DateTime/Difference.php index 25f8025..713857e 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference.php @@ -40,17 +40,24 @@ public function __construct(\DateTimeInterface $fromDate, \DateTimeInterface $to $this->calculate(); } - public function getUnit(): Unit + public function getUnit() : Unit { return $this->unit; } - public function getQuantity(): ?int + public function getQuantity() : ?int { return $this->quantity; } - private function calculate(): void + public function isPast() : bool + { + $diff = $this->toDate->getTimestamp() - $this->fromDate->getTimestamp(); + + return ($diff > 0) ? false : true; + } + + private function calculate() : void { /* @var $units Unit[] */ $units = [ @@ -65,9 +72,11 @@ private function calculate(): void ]; $absoluteMilliSecondsDiff = \abs($this->toDate->getTimestamp() - $this->fromDate->getTimestamp()) * 1000; + foreach ($units as $unit) { if ($absoluteMilliSecondsDiff >= $unit->getMilliseconds()) { $this->unit = $unit; + break; } } @@ -76,11 +85,4 @@ private function calculate(): void ? $absoluteMilliSecondsDiff : (int) \round($absoluteMilliSecondsDiff / $this->unit->getMilliseconds()); } - - public function isPast(): bool - { - $diff = $this->toDate->getTimestamp() - $this->fromDate->getTimestamp(); - - return ($diff > 0) ? false : true; - } } diff --git a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php index 7cedcbb..45e93fd 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php +++ b/src/Coduo/PHPHumanizer/DateTime/Difference/CompoundResult.php @@ -18,12 +18,12 @@ final class CompoundResult private Unit $unit; /** - * @var int|float + * @var float|int */ private $quantity; /** - * @param int|float $quantity + * @param float|int $quantity */ public function __construct(Unit $unit, $quantity) { @@ -32,14 +32,14 @@ public function __construct(Unit $unit, $quantity) } /** - * @return int|float + * @return float|int */ public function getQuantity() { return $this->quantity; } - public function getUnit(): Unit + public function getUnit() : Unit { return $this->unit; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Formatter.php b/src/Coduo/PHPHumanizer/DateTime/Formatter.php index 28fc8ce..cbd5897 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Formatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/Formatter.php @@ -22,7 +22,7 @@ public function __construct(TranslatorInterface $translator) $this->translator = $translator; } - public function formatDifference(Difference $difference, string $locale = 'en'): string + public function formatDifference(Difference $difference, string $locale = 'en') : string { $translationKey = \sprintf('%s.%s', $difference->getUnit()->getName(), $difference->isPast() ? 'past' : 'future'); diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php index c16f59e..6c28457 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseDifference.php @@ -19,7 +19,7 @@ final class PreciseDifference private \DateTimeInterface $toDate; - private ?DateIntervalCompound $compoundResults ; + private ?DateIntervalCompound $compoundResults; public function __construct(\DateTimeInterface $fromDate, \DateTimeInterface $toDate) { @@ -40,7 +40,7 @@ public function components() : array return $this->compoundResults->components(); } - public function isPast(): bool + public function isPast() : bool { $diff = $this->toDate->getTimestamp() - $this->fromDate->getTimestamp(); diff --git a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php index 45a1f7f..7ea5f64 100644 --- a/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php +++ b/src/Coduo/PHPHumanizer/DateTime/PreciseFormatter.php @@ -23,13 +23,13 @@ public function __construct(TranslatorInterface $translator) $this->translator = $translator; } - public function formatDifference(PreciseDifference $difference, string $locale = 'en'): string + public function formatDifference(PreciseDifference $difference, string $locale = 'en') : string { $diff = []; foreach ($difference->components() as $result) { $diff[] = $this->translator->trans( - 'compound.'.$result->getUnit()->getName(), + 'compound.' . $result->getUnit()->getName(), ['%count%' => $result->getQuantity()], 'difference', $locale @@ -37,7 +37,7 @@ public function formatDifference(PreciseDifference $difference, string $locale = } return $this->translator->trans( - 'compound.'.($difference->isPast() ? 'past' : 'future'), + 'compound.' . ($difference->isPast() ? 'past' : 'future'), ['%value%' => \implode(', ', $diff)], 'difference', $locale @@ -50,7 +50,7 @@ public function formatInterval(\DateInterval $dateInterval, string $locale = 'en foreach ((new DateIntervalCompound($dateInterval))->components() as $component) { $parts[] = $this->translator->trans( - 'compound.'.$component->getUnit()->getName(), + 'compound.' . $component->getUnit()->getName(), ['%count%' => $component->getQuantity()], 'difference', $locale diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit.php b/src/Coduo/PHPHumanizer/DateTime/Unit.php index c5445cb..294fd38 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit.php @@ -13,15 +13,15 @@ interface Unit { - public function getName(): string; + public function getName() : string; /** * Return millisecond that represents unit. */ - public function getMilliseconds(): int; + public function getMilliseconds() : int; /** * Returns symbol of \DateInterval equivalent. */ - public function getDateIntervalSymbol(): string; + public function getDateIntervalSymbol() : string; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php index f734a35..60926de 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Day.php @@ -15,19 +15,19 @@ final class Day implements Unit { - public function getName(): string + public function getName() : string { return 'day'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { $hour = new Hour(); return $hour->getMilliseconds() * 24; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { return 'd'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php index 1864d41..2cd2dc0 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Hour.php @@ -15,19 +15,19 @@ final class Hour implements Unit { - public function getName(): string + public function getName() : string { return 'hour'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { $minute = new Minute(); return $minute->getMilliseconds() * 60; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { return 'h'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php b/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php index 3cb5aed..ab5ef22 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/JustNow.php @@ -15,17 +15,17 @@ final class JustNow implements Unit { - public function getName(): string + public function getName() : string { return 'just_now'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { return 0; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { throw new \RuntimeException("JustNow doesn't have date interval symbol equivalent"); } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php index 6bbc479..c0a5000 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Minute.php @@ -15,19 +15,19 @@ final class Minute implements Unit { - public function getName(): string + public function getName() : string { return 'minute'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { $second = new Second(); return $second->getMilliseconds() * 60; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { return 'i'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php index 33a0e5c..088582c 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Month.php @@ -15,19 +15,19 @@ final class Month implements Unit { - public function getName(): string + public function getName() : string { return 'month'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { $day = new Day(); return $day->getMilliseconds() * 30; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { return 'm'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php index 465a5ff..f207461 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Second.php @@ -15,17 +15,17 @@ final class Second implements Unit { - public function getName(): string + public function getName() : string { return 'second'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { return 1000; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { return 's'; } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php index 353d5a3..3623e29 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Week.php @@ -15,19 +15,19 @@ final class Week implements Unit { - public function getName(): string + public function getName() : string { return 'week'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { $day = new Day(); return $day->getMilliseconds() * 7; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { throw new \RuntimeException("Week doesn't have date interval symbol equivalent"); } diff --git a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php index 22a539d..63c49df 100644 --- a/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php +++ b/src/Coduo/PHPHumanizer/DateTime/Unit/Year.php @@ -15,19 +15,19 @@ final class Year implements Unit { - public function getName(): string + public function getName() : string { return 'year'; } - public function getMilliseconds(): int + public function getMilliseconds() : int { $day = new Day(); return $day->getMilliseconds() * 356; } - public function getDateIntervalSymbol(): string + public function getDateIntervalSymbol() : string { return 'y'; } diff --git a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php index 2e6951d..12e75af 100644 --- a/src/Coduo/PHPHumanizer/DateTimeHumanizer.php +++ b/src/Coduo/PHPHumanizer/DateTimeHumanizer.php @@ -14,21 +14,21 @@ use Aeon\Calendar\Gregorian\TimePeriod; use Aeon\Calendar\Unit; use Coduo\PHPHumanizer\DateTime\Difference; -use Coduo\PHPHumanizer\DateTime\PreciseDifference; use Coduo\PHPHumanizer\DateTime\Formatter; +use Coduo\PHPHumanizer\DateTime\PreciseDifference; use Coduo\PHPHumanizer\DateTime\PreciseFormatter; use Coduo\PHPHumanizer\Translator\Builder; final class DateTimeHumanizer { - public static function difference(\DateTimeInterface $fromDate, \DateTimeInterface $toDate, string $locale = 'en'): string + public static function difference(\DateTimeInterface $fromDate, \DateTimeInterface $toDate, string $locale = 'en') : string { $formatter = new Formatter(Builder::build($locale)); return $formatter->formatDifference(new Difference($fromDate, $toDate), $locale); } - public static function preciseDifference(\DateTimeInterface $fromDate, \DateTimeInterface $toDate, string $locale = 'en'): string + public static function preciseDifference(\DateTimeInterface $fromDate, \DateTimeInterface $toDate, string $locale = 'en') : string { $formatter = new PreciseFormatter(Builder::build($locale)); diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal.php b/src/Coduo/PHPHumanizer/Number/Ordinal.php index 4d48872..08ae954 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal.php @@ -17,15 +17,15 @@ final class Ordinal { /** - * @var int|float + * @var float|int */ private $number; private StrategyInterface $strategy; /** - * @param int|float $number - * @param string $locale + * @param float|int $number + * @param string $locale */ public function __construct($number, string $locale) { @@ -33,15 +33,15 @@ public function __construct($number, string $locale) $this->strategy = Builder::build($locale); } - public function isPrefix(): bool - { - return $this->strategy->isPrefix(); - } - - public function __toString(): string + public function __toString() : string { return $this ->strategy ->ordinalIndicator($this->number); } + + public function isPrefix() : bool + { + return $this->strategy->isPrefix(); + } } diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php index 2246cc9..cc55af1 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/Builder.php @@ -16,7 +16,7 @@ final class Builder /** * Find a proper strategy for ordinal numbers. */ - public static function build(string $locale): StrategyInterface + public static function build(string $locale) : StrategyInterface { // $locale should be xx or xx_YY if (!\preg_match('#^([a-z]{2})(_([A-Z]{2}))?$#', $locale, $m)) { @@ -24,6 +24,7 @@ public static function build(string $locale): StrategyInterface } $strategy = \ucfirst($m[1]); + if (!empty($m[3])) { $strategy .= \sprintf('_%s', $m[3]); } diff --git a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php index eb60dcc..6d5d8a4 100644 --- a/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php +++ b/src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php @@ -13,11 +13,12 @@ interface StrategyInterface { - public function isPrefix(): bool; + public function isPrefix() : bool; /** - * @param int|float $number + * @param float|int $number + * * @return string */ - public function ordinalIndicator($number): string; + public function ordinalIndicator($number) : string; } diff --git a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php index 6d1db95..e27a3f2 100644 --- a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php +++ b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php @@ -16,17 +16,17 @@ final class RomanNumeral /** * @var int */ - const MIN_VALUE = 1; + public const MIN_VALUE = 1; /** * @var int */ - const MAX_VALUE = 3999; + public const MAX_VALUE = 3999; /** * @var string */ - const ROMAN_STRING_MATCHER = '/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/'; + public const ROMAN_STRING_MATCHER = '/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/'; /** * @var array @@ -50,11 +50,11 @@ final class RomanNumeral /** * @param numeric $number * + * @throws \InvalidArgumentException * * @return string - * @throws \InvalidArgumentException */ - public function toRoman($number): string + public function toRoman($number) : string { if (($number < self::MIN_VALUE) || ($number > self::MAX_VALUE)) { throw new \InvalidArgumentException(); @@ -67,6 +67,7 @@ public function toRoman($number): string if ($number >= $value) { $romanString .= $key; $number -= $value; + break; } } @@ -76,9 +77,9 @@ public function toRoman($number): string } /** - * @return float|int - * * @throws \InvalidArgumentException + * + * @return float|int */ public function fromRoman(string $string) { @@ -97,7 +98,7 @@ public function fromRoman(string $string) if ($previousDigit < $digit) { $digit -= $previousDigit; - --$i; + $i--; } } diff --git a/src/Coduo/PHPHumanizer/NumberHumanizer.php b/src/Coduo/PHPHumanizer/NumberHumanizer.php index 74271f6..c18d714 100644 --- a/src/Coduo/PHPHumanizer/NumberHumanizer.php +++ b/src/Coduo/PHPHumanizer/NumberHumanizer.php @@ -19,23 +19,25 @@ final class NumberHumanizer { /** - * @param int|float $number + * @param float|int $number * @param string $locale + * * @return string */ - public static function ordinalize($number, string $locale = 'en'): string + public static function ordinalize($number, string $locale = 'en') : string { $ordinal = new Ordinal($number, $locale); - return (string) ($ordinal->isPrefix()) ? $ordinal.$number : $number.$ordinal; + return (string) ($ordinal->isPrefix()) ? $ordinal . $number : $number . $ordinal; } /** - * @param int|float $number + * @param float|int $number * @param string $locale + * * @return string */ - public static function ordinal($number, string $locale = 'en'): string + public static function ordinal($number, string $locale = 'en') : string { $ordinal = new Ordinal($number, $locale); @@ -45,6 +47,7 @@ public static function ordinal($number, string $locale = 'en'): string /** * @param int $number * @param string $locale + * * @return bool|int|string */ public static function binarySuffix(int $number, string $locale = 'en') @@ -67,7 +70,7 @@ public static function preciseBinarySuffix(int $number, ?int $precision, string /** * @param numeric $number */ - public static function metricSuffix($number, string $locale = 'en'): string + public static function metricSuffix($number, string $locale = 'en') : string { $binarySuffix = new MetricSuffix($number, $locale); @@ -76,9 +79,10 @@ public static function metricSuffix($number, string $locale = 'en'): string /** * @param numeric $number + * * @return string */ - public static function toRoman($number): string + public static function toRoman($number) : string { $romanNumeral = new RomanNumeral(); diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php index bacc827..ca00924 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/DeStrategy.php @@ -15,12 +15,12 @@ final class DeStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return false; } - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { return '.'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php index 373932f..cba7f92 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php @@ -15,14 +15,14 @@ final class EnStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return false; } - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { - $absNumber = \abs((integer) $number); + $absNumber = \abs((int) $number); if (\in_array(($absNumber % 100), [11, 12, 13], true)) { return 'th'; @@ -32,6 +32,7 @@ public function ordinalIndicator($number): string case 1: return 'st'; case 2: return 'nd'; case 3: return 'rd'; + default: return 'th'; } } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php index 1793120..00cf8d8 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/EsStrategy.php @@ -15,12 +15,12 @@ final class EsStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return false; } - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { return 'o'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php index 45a034c..e275340 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/FrStrategy.php @@ -15,19 +15,19 @@ final class FrStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return false; } - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { - $absNumber = \abs((integer) $number); + $absNumber = \abs((int) $number); if ($absNumber == 1) { return 'er'; - } else { - return 'e'; } + + return 'e'; } } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php index 937eddc..2ea8e83 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/IdStrategy.php @@ -15,13 +15,12 @@ final class IdStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return true; } - - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { return 'ke-'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php index ec69b84..3d73c80 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/ItStrategy.php @@ -15,12 +15,12 @@ final class ItStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return false; } - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { return 'o'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php index 63cc61a..4c189bc 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php @@ -15,12 +15,12 @@ final class NlStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return false; } - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { return 'e'; } diff --git a/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php b/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php index 94f0e75..63d9e8d 100644 --- a/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php +++ b/src/Coduo/PHPHumanizer/Resources/Ordinal/PtStrategy.php @@ -15,12 +15,12 @@ final class PtStrategy implements StrategyInterface { - public function isPrefix(): bool + public function isPrefix() : bool { return false; } - public function ordinalIndicator($number): string + public function ordinalIndicator($number) : string { return 'o'; } diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index a5e0967..25f058f 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -16,7 +16,7 @@ final class BinarySuffix /** * @var int */ - const CONVERT_THRESHOLD = 1024; + public const CONVERT_THRESHOLD = 1024; private int $number; @@ -40,7 +40,7 @@ public function __construct(int $number, string $locale = 'en', int $precision = throw new \RuntimeException('Binary suffix converter requires intl extension!'); } - if (!\is_null($precision)) { + if (null !== $precision) { $this->setSpecificPrecisionFormat($precision); } @@ -60,13 +60,14 @@ public function __construct(int $number, string $locale = 'en', int $precision = public function convert() { $formatter = new \NumberFormatter($this->locale, \NumberFormatter::PATTERN_DECIMAL); + if ($this->number < 0) { return $this->number; } foreach ($this->binaryPrefixes as $size => $unitPattern) { if ($size <= $this->number) { - $value = ($this->number >= self::CONVERT_THRESHOLD) ? $this->number / (double) $size : $this->number; + $value = ($this->number >= self::CONVERT_THRESHOLD) ? $this->number / (float) $size : $this->number; $formatter->setPattern($unitPattern); return $formatter->format($value); @@ -80,17 +81,19 @@ public function convert() * Replaces the default ICU 56.1 decimal formats defined in $binaryPrefixes with ones that provide the same symbols * but the provided number of decimal places. */ - protected function setSpecificPrecisionFormat(int $precision): void + private function setSpecificPrecisionFormat(int $precision) : void { if ($precision < 0) { throw new \InvalidArgumentException('Precision must be positive'); } + if ($precision > 3) { - throw new \InvalidArgumentException('Invalid precision. Binary suffix converter can only represent values in '. + throw new \InvalidArgumentException('Invalid precision. Binary suffix converter can only represent values in ' . 'up to three decimal places'); } $icuFormat = '#'; + if ($precision > 0) { $icuFormat .= \str_pad('#.', (2 + $precision), '0'); } @@ -98,7 +101,7 @@ protected function setSpecificPrecisionFormat(int $precision): void foreach ($this->binaryPrefixes as $size => $unitPattern) { if ($size >= 1024) { $symbol = \substr($unitPattern, (int) \strpos($unitPattern, ' ')); - $this->binaryPrefixes[$size] = $icuFormat.$symbol; + $this->binaryPrefixes[$size] = $icuFormat . $symbol; } } } diff --git a/src/Coduo/PHPHumanizer/String/Breakpoint.php b/src/Coduo/PHPHumanizer/String/Breakpoint.php index c29c2a5..1e5caed 100644 --- a/src/Coduo/PHPHumanizer/String/Breakpoint.php +++ b/src/Coduo/PHPHumanizer/String/Breakpoint.php @@ -16,5 +16,5 @@ interface Breakpoint /** * Return the length of the truncated $text depending on the $characterCount. */ - public function calculatePosition(string $text, int $charactersCount): int; + public function calculatePosition(string $text, int $charactersCount) : int; } diff --git a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php index 0e4c8c7..c1f6050 100644 --- a/src/Coduo/PHPHumanizer/String/HtmlTruncate.php +++ b/src/Coduo/PHPHumanizer/String/HtmlTruncate.php @@ -26,7 +26,7 @@ public function __construct(Breakpoint $breakpoint, string $allowedTags = '', st $this->allowedTags = $allowedTags; } - public function truncate(string $text, int $charactersCount): string + public function truncate(string $text, int $charactersCount) : string { $strippedText = \strip_tags($text, $this->allowedTags); @@ -39,7 +39,7 @@ public function truncate(string $text, int $charactersCount): string * * Adapted from FuelPHP Str::truncate (https://github.com/fuelphp/common/blob/master/src/Str.php) */ - private function truncateHtml(string $string, int $charactersCount): string + private function truncateHtml(string $string, int $charactersCount) : string { $limit = $charactersCount; $offset = 0; @@ -47,6 +47,7 @@ private function truncateHtml(string $string, int $charactersCount): string // Handle special characters. \preg_match_all('#&[a-z]+;#i', \strip_tags($string), $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + foreach ($matches as $match) { if ($match[0][1] >= $limit) { break; @@ -56,12 +57,14 @@ private function truncateHtml(string $string, int $charactersCount): string // Handle all the html tags. \preg_match_all('#<[^>]+>([^<]*)#', $string, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); + foreach ($matches as $match) { if ($match[0][1] - $offset >= $limit) { break; } $tag = \mb_substr((string) \strtok($match[0][0], " \t\n\r\0\x0B>"), 1); + if ($tag[0] != '/') { $tags[] = $tag; } elseif (\end($tags) == \mb_substr($tag, 1)) { @@ -73,7 +76,7 @@ private function truncateHtml(string $string, int $charactersCount): string $newString = \mb_substr($string, 0, $limit = \min(\mb_strlen($string), $this->breakpoint->calculatePosition($string, $limit + $offset))); $newString .= (\mb_strlen($string) > $limit ? $this->append : ''); - $newString .= (\count($tags = \array_reverse($tags)) ? '' : ''); + $newString .= (\count($tags = \array_reverse($tags)) ? '' : ''); return $newString; } diff --git a/src/Coduo/PHPHumanizer/String/Humanize.php b/src/Coduo/PHPHumanizer/String/Humanize.php index e7c79d8..87bf577 100644 --- a/src/Coduo/PHPHumanizer/String/Humanize.php +++ b/src/Coduo/PHPHumanizer/String/Humanize.php @@ -35,7 +35,7 @@ public function __construct(string $text, bool $capitalize = true, string $separ $this->forbiddenWords = $forbiddenWords; } - public function __toString(): string + public function __toString() : string { $humanized = \trim(\strtolower((string) \preg_replace(['/([A-Z])/', \sprintf('/[%s\s]+/', $this->separator)], ['_$1', ' '], $this->text))); $humanized = \trim(\str_replace($this->forbiddenWords, '', $humanized)); diff --git a/src/Coduo/PHPHumanizer/String/MetricSuffix.php b/src/Coduo/PHPHumanizer/String/MetricSuffix.php index 141987d..69822f2 100644 --- a/src/Coduo/PHPHumanizer/String/MetricSuffix.php +++ b/src/Coduo/PHPHumanizer/String/MetricSuffix.php @@ -16,7 +16,7 @@ final class MetricSuffix /** * @var int */ - const CONVERT_THRESHOLD = 1000; + public const CONVERT_THRESHOLD = 1000; private int $number; @@ -63,13 +63,13 @@ public function __construct($number, string $locale = 'en') \krsort($this->binaryPrefixes); } - public function convert(): string + public function convert() : string { $formatter = new \NumberFormatter($this->locale, \NumberFormatter::PATTERN_DECIMAL); foreach ($this->binaryPrefixes as $size => $unitPattern) { if ($size <= $this->number) { - $value = ($this->number >= self::CONVERT_THRESHOLD) ? $this->number / (double) $size : $this->number; + $value = ($this->number >= self::CONVERT_THRESHOLD) ? $this->number / (float) $size : $this->number; $formatter->setPattern($unitPattern); return $formatter->format($value); diff --git a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php index c1f85c0..acd6686 100644 --- a/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php +++ b/src/Coduo/PHPHumanizer/String/ShortcodeProcessor.php @@ -21,11 +21,10 @@ final class ShortcodeProcessor /** * Removes all shortcodes from given text. */ - public function removeShortcodes(string $text): string + public function removeShortcodes(string $text) : string { return $this->createShortcodeProcessor( - function (): void { - return; + function () : void { } )->process($text); } @@ -33,12 +32,12 @@ function (): void { /** * Removes only shortcode tags from given text (leaves their content as it is). */ - public function removeShortcodeTags(string $text): string + public function removeShortcodeTags(string $text) : string { return $this->createShortcodeProcessor(fn (ShortcodeInterface $s) : ?string => $s->getContent())->process($text); } - private function createShortcodeProcessor(callable $defaultHandler): Processor + private function createShortcodeProcessor(callable $defaultHandler) : Processor { $handlers = new HandlerContainer(); $handlers->setDefault($defaultHandler); diff --git a/src/Coduo/PHPHumanizer/String/TextTruncate.php b/src/Coduo/PHPHumanizer/String/TextTruncate.php index a487951..5d0dfdf 100644 --- a/src/Coduo/PHPHumanizer/String/TextTruncate.php +++ b/src/Coduo/PHPHumanizer/String/TextTruncate.php @@ -23,7 +23,7 @@ public function __construct(Breakpoint $breakpoint, string $append = '') $this->append = $append; } - public function truncate(string $text, int $charactersCount): string + public function truncate(string $text, int $charactersCount) : string { if ($charactersCount < 0 || \mb_strlen($text) <= $charactersCount) { return $text; @@ -31,6 +31,6 @@ public function truncate(string $text, int $charactersCount): string $truncatedText = \rtrim(\mb_substr($text, 0, $this->breakpoint->calculatePosition($text, $charactersCount))); - return ($truncatedText === $text) ? $truncatedText : $truncatedText.$this->append; + return ($truncatedText === $text) ? $truncatedText : $truncatedText . $this->append; } } diff --git a/src/Coduo/PHPHumanizer/String/TruncateInterface.php b/src/Coduo/PHPHumanizer/String/TruncateInterface.php index 5f671b5..c0400cb 100644 --- a/src/Coduo/PHPHumanizer/String/TruncateInterface.php +++ b/src/Coduo/PHPHumanizer/String/TruncateInterface.php @@ -13,5 +13,5 @@ interface TruncateInterface { - public function truncate(string $text, int $charactersCount): string; + public function truncate(string $text, int $charactersCount) : string; } diff --git a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php index 0dd6f7d..908c18e 100644 --- a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php +++ b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php @@ -13,7 +13,7 @@ final class WordBreakpoint implements Breakpoint { - public function calculatePosition(string $text, int $charactersCount): int + public function calculatePosition(string $text, int $charactersCount) : int { if ($charactersCount < 0) { return (int) \mb_strlen($text); diff --git a/src/Coduo/PHPHumanizer/StringHumanizer.php b/src/Coduo/PHPHumanizer/StringHumanizer.php index ceb9df9..5e492b4 100644 --- a/src/Coduo/PHPHumanizer/StringHumanizer.php +++ b/src/Coduo/PHPHumanizer/StringHumanizer.php @@ -11,10 +11,10 @@ namespace Coduo\PHPHumanizer; +use Coduo\PHPHumanizer\String\HtmlTruncate; use Coduo\PHPHumanizer\String\Humanize; use Coduo\PHPHumanizer\String\ShortcodeProcessor; use Coduo\PHPHumanizer\String\TextTruncate; -use Coduo\PHPHumanizer\String\HtmlTruncate; use Coduo\PHPHumanizer\String\WordBreakpoint; final class StringHumanizer @@ -22,26 +22,26 @@ final class StringHumanizer /** * @param array $forbiddenWords */ - public static function humanize(string $text, bool $capitalize = true, string $separator = '_', array $forbiddenWords = []): string + public static function humanize(string $text, bool $capitalize = true, string $separator = '_', array $forbiddenWords = []) : string { return (string) new Humanize($text, $capitalize, $separator, $forbiddenWords); } - public static function truncate(string $text, int $charactersCount, string $append = ''): string + public static function truncate(string $text, int $charactersCount, string $append = '') : string { $truncate = new TextTruncate(new WordBreakpoint(), $append); return $truncate->truncate($text, $charactersCount); } - public static function truncateHtml(string $text, int $charactersCount, string $allowedTags = '', string $append = ''): string + public static function truncateHtml(string $text, int $charactersCount, string $allowedTags = '', string $append = '') : string { $truncate = new HtmlTruncate(new WordBreakpoint(), $allowedTags, $append); return $truncate->truncate($text, $charactersCount); } - public static function removeShortcodes(string $text): string + public static function removeShortcodes(string $text) : string { if (!\class_exists('\Thunder\Shortcode\Processor\Processor')) { throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); @@ -52,7 +52,7 @@ public static function removeShortcodes(string $text): string return $processor->removeShortcodes($text); } - public static function removeShortcodeTags(string $text): string + public static function removeShortcodeTags(string $text) : string { if (!\class_exists('\Thunder\Shortcode\Processor\Processor')) { throw new \RuntimeException('Please add "thunderer/shortcode": ^0.7 to composer.json first'); diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index 1a3bd56..e7a0146 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -16,18 +16,18 @@ final class Builder { - public static function build(string $locale): Translator + public static function build(string $locale) : Translator { $translator = new Translator($locale); $translator->addLoader('yml', new YamlFileLoader()); - $iterator = new \FilesystemIterator(__DIR__.'/../Resources/translations'); + $iterator = new \FilesystemIterator(__DIR__ . '/../Resources/translations'); $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.yml$/'); foreach ($filter as $file) { /* @var $file \SplFileInfo */ $resourceName = $file->getBasename('.yml'); - list($fileDomain, $fileLocale) = \explode('.', $resourceName); + [$fileDomain, $fileLocale] = \explode('.', $resourceName); $translator->addResource('yml', $file->getPathname(), $fileLocale, $fileDomain); } diff --git a/tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php index 316dd4c..d5f1c64 100644 --- a/tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/Collection/FormatterTest.php @@ -17,7 +17,7 @@ final class FormatterTest extends TestCase { - public function test_formats_two_elements() + public function test_formats_two_elements() : void { $formatter = new Formatter(Builder::build('en')); @@ -27,7 +27,7 @@ public function test_formats_two_elements() ); } - public function test_formats_elements_with_limit() + public function test_formats_elements_with_limit() : void { $formatter = new Formatter(Builder::build('en')); @@ -37,7 +37,7 @@ public function test_formats_elements_with_limit() ); } - public function test_formats_elements_without_limit() + public function test_formats_elements_without_limit() : void { $formatter = new Formatter(Builder::build('en')); diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php index 0753e23..85ac75a 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php @@ -19,7 +19,7 @@ final class CollectionHumanizerTest extends TestCase /** * @dataProvider oxfordCollectionProvider */ - public function test_oxford_collections_humanizing($collection, $limit, $locale, $expectedResult) + public function test_oxford_collections_humanizing($collection, $limit, $locale, $expectedResult) : void { $this->assertEquals($expectedResult, CollectionHumanizer::oxford($collection, $limit, $locale)); } diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php index 43c9ec5..c1dd340 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php @@ -14,15 +14,15 @@ use Coduo\PHPHumanizer\DateTime\Difference; use Coduo\PHPHumanizer\DateTime\Unit\Day; use Coduo\PHPHumanizer\DateTime\Unit\Hour; +use Coduo\PHPHumanizer\DateTime\Unit\Minute; use Coduo\PHPHumanizer\DateTime\Unit\Month; use Coduo\PHPHumanizer\DateTime\Unit\Week; use Coduo\PHPHumanizer\DateTime\Unit\Year; use PHPUnit\Framework\TestCase; -use Coduo\PHPHumanizer\DateTime\Unit\Minute; final class DifferenceTest extends TestCase { - public function test_calculate_diff_between_present_and_past_date_in_minutes() + public function test_calculate_diff_between_present_and_past_date_in_minutes() : void { $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 12:45:00')); $this->assertInstanceOf(Minute::class, $diff->getUnit()); @@ -30,7 +30,7 @@ public function test_calculate_diff_between_present_and_past_date_in_minutes() $this->assertTrue($diff->isPast()); } - public function test_calculate_diff_between_present_and_future_date_in_minutes() + public function test_calculate_diff_between_present_and_future_date_in_minutes() : void { $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 13:15:00')); $this->assertInstanceOf(Minute::class, $diff->getUnit()); @@ -38,7 +38,7 @@ public function test_calculate_diff_between_present_and_future_date_in_minutes() $this->assertFalse($diff->isPast()); } - public function test_calculate_diff_between_present_and_past_date_in_hours() + public function test_calculate_diff_between_present_and_past_date_in_hours() : void { $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 11:00:00')); $this->assertInstanceOf(Hour::class, $diff->getUnit()); @@ -46,7 +46,7 @@ public function test_calculate_diff_between_present_and_past_date_in_hours() $this->assertSame(true, $diff->isPast()); } - public function test_calculate_diff_between_present_and_future_date_in_hours() + public function test_calculate_diff_between_present_and_future_date_in_hours() : void { $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 16:00:00')); $this->assertInstanceOf(Hour::class, $diff->getUnit()); @@ -54,7 +54,7 @@ public function test_calculate_diff_between_present_and_future_date_in_hours() $this->assertSame(false, $diff->isPast()); } - public function test_calculate_diff_between_present_and_past_date_in_days() + public function test_calculate_diff_between_present_and_past_date_in_days() : void { $diff = new Difference(new \DateTime('2014-04-10'), new \DateTime('2014-04-09')); $this->assertInstanceOf(Day::class, $diff->getUnit()); @@ -62,7 +62,7 @@ public function test_calculate_diff_between_present_and_past_date_in_days() $this->assertSame(true, $diff->isPast()); } - public function test_calculate_diff_between_present_and_future_date_in_days() + public function test_calculate_diff_between_present_and_future_date_in_days() : void { $diff = new Difference(new \DateTime('2014-04-10'), new \DateTime('2014-04-11')); $this->assertInstanceOf(Day::class, $diff->getUnit()); @@ -70,7 +70,7 @@ public function test_calculate_diff_between_present_and_future_date_in_days() $this->assertSame(false, $diff->isPast()); } - public function test_calculate_diff_between_present_and_past_date_in_weeks() + public function test_calculate_diff_between_present_and_past_date_in_weeks() : void { $diff = new Difference(new \DateTime('2014-04-15'), new \DateTime('2014-04-01')); $this->assertInstanceOf(Week::class, $diff->getUnit()); @@ -78,7 +78,7 @@ public function test_calculate_diff_between_present_and_past_date_in_weeks() $this->assertSame(true, $diff->isPast()); } - public function test_calculate_diff_between_present_and_future_date_in_weeks() + public function test_calculate_diff_between_present_and_future_date_in_weeks() : void { $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-04-15')); $this->assertInstanceOf(Week::class, $diff->getUnit()); @@ -86,7 +86,7 @@ public function test_calculate_diff_between_present_and_future_date_in_weeks() $this->assertSame(false, $diff->isPast()); } - public function test_calculate_diff_between_present_and_past_date_in_months() + public function test_calculate_diff_between_present_and_past_date_in_months() : void { $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-03-01')); $this->assertInstanceOf(Month::class, $diff->getUnit()); @@ -94,7 +94,7 @@ public function test_calculate_diff_between_present_and_past_date_in_months() $this->assertSame(true, $diff->isPast()); } - public function test_calculate_diff_between_present_and_future_date_in_months() + public function test_calculate_diff_between_present_and_future_date_in_months() : void { $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-05-01')); $this->assertInstanceOf(Month::class, $diff->getUnit()); @@ -102,7 +102,7 @@ public function test_calculate_diff_between_present_and_future_date_in_months() $this->assertSame(false, $diff->isPast()); } - public function test_calculate_diff_between_present_and_past_date_in_years() + public function test_calculate_diff_between_present_and_past_date_in_years() : void { $diff = new Difference(new \DateTime('2014-01-01'), new \DateTime('2012-01-01')); $this->assertInstanceOf(Year::class, $diff->getUnit()); @@ -110,7 +110,7 @@ public function test_calculate_diff_between_present_and_past_date_in_years() $this->assertSame(true, $diff->isPast()); } - public function test_calculate_diff_between_present_and_future_date_in_years() + public function test_calculate_diff_between_present_and_future_date_in_years() : void { $diff = new Difference(new \DateTime('2014-01-01'), new \DateTime('2015-01-01')); $this->assertInstanceOf(Year::class, $diff->getUnit()); diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php index 99b1c11..f32a306 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTime/PreciseFormatterTest.php @@ -18,7 +18,7 @@ final class PreciseFormatterTest extends TestCase { - public function test_format_compound_datetime_diff() + public function test_format_compound_datetime_diff() : void { $diff = new PreciseDifference( new \DateTime('2015-01-01 00:00:00'), @@ -30,7 +30,7 @@ public function test_format_compound_datetime_diff() $this->assertSame('10 days, 5 hours from now', $formatter->formatDifference($diff)); } - public function test_format_compound_datetime_diff_for_specific_locale() + public function test_format_compound_datetime_diff_for_specific_locale() : void { $diff = new PreciseDifference( new \DateTime('2015-01-01 00:00:00'), diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index 23ce537..8ea725d 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -282,7 +282,7 @@ public function humanizeDataProvider() : array public function preciseDifferenceDataProvider() : array { return [ - // Azerbaijani + // Azerbaijani ['2014-04-26 13:00:00', '2014-04-26 12:58:15', '1 dəqiqə, 45 saniyə əvvəl', 'az'], ['2014-04-26 13:00:00', '2014-04-26 11:20:00', '1 saat, 40 dəqiqə əvvəl', 'az'], ['2014-04-26 13:00:00', '2014-04-27 13:15:00', '1 gün, 15 dəqiqə sonra', 'az'], @@ -488,7 +488,7 @@ public function timeUnitDataProvider() : array ->add(TimeUnit::seconds(30)) ->add(TimeUnit::milliseconds(200)), '2 days, 3 hours, 25 minutes, and 30.2 seconds', - 'en' + 'en', ], [RelativeTimeUnit::months(14), '1 year and 2 months', 'en'], @@ -503,9 +503,9 @@ public function timeUnitDataProvider() : array ->add(TimeUnit::seconds(30)) ->add(TimeUnit::milliseconds(200)), '2 dni, 3 godziny, 25 minut i 30.2 sekund', - 'pl' + 'pl', ], - [RelativeTimeUnit::months(14), '1 rok i 2 miesiące', 'pl'] + [RelativeTimeUnit::months(14), '1 rok i 2 miesiące', 'pl'], ]; } } diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php index 1199877..d0b6142 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php @@ -22,67 +22,73 @@ class NumberHumanizerTest extends TestCase * @param $expected * @param $number */ - public function test_return_ordinal_suffix($expected, $number) + public function test_return_ordinal_suffix($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinal($number)); } /** * @dataProvider ordinalIndicatorDutchProvider + * * @param $expected * @param $number */ - public function test_return_ordinal_suffix_dutch($expected, $number) + public function test_return_ordinal_suffix_dutch($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'nl')); } /** * @dataProvider ordinalIndicatorIndonesianProvider + * * @param $expected * @param $number */ - public function test_return_ordinal_suffix_indonesian($expected, $number) + public function test_return_ordinal_suffix_indonesian($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'id')); } /** * @dataProvider ordinalSuffixPtEsItProvider + * * @param $expected * @param $number */ - public function test_return_ordinal_suffix_spanish($expected, $number) + public function test_return_ordinal_suffix_spanish($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'es')); } /** * @dataProvider ordinalSuffixPtEsItProvider + * * @param $expected * @param $number */ - public function test_return_ordinal_suffix_italian($expected, $number) + public function test_return_ordinal_suffix_italian($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'it')); } /** * @dataProvider ordinalSuffixGermanProvider + * * @param $expected * @param $number */ - public function test_return_ordinal_suffix_german($expected, $number) + public function test_return_ordinal_suffix_german($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'de')); } /** * @dataProvider ordinalSuffixFrenchProvider + * * @param $expected * @param $number */ - public function test_return_ordinal_suffix_french($expected, $number) + public function test_return_ordinal_suffix_french($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'fr')); } @@ -94,7 +100,7 @@ public function test_return_ordinal_suffix_french($expected, $number) * @param $expected * @param $number */ - public function test_ordinalize_numbers($expected, $number) + public function test_ordinalize_numbers($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number)); } @@ -106,7 +112,7 @@ public function test_ordinalize_numbers($expected, $number) * @param $expected * @param $number */ - public function test_ordinalize_numbers_dutch($expected, $number) + public function test_ordinalize_numbers_dutch($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'nl')); } @@ -118,57 +124,62 @@ public function test_ordinalize_numbers_dutch($expected, $number) * @param $expected * @param $number */ - public function test_ordinalize_numbers_indonesian($expected, $number) + public function test_ordinalize_numbers_indonesian($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'id')); } /** * @dataProvider ordinalizeDataPtEsItProvider + * * @param $expected * @param $number */ - public function test_ordinalize_numbers_portuguese($expected, $number) + public function test_ordinalize_numbers_portuguese($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'pt')); } /** * @dataProvider ordinalizeDataPtEsItProvider + * * @param $expected * @param $number */ - public function test_ordinalize_numbers_spanish($expected, $number) + public function test_ordinalize_numbers_spanish($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'es')); } /** * @dataProvider ordinalizeDataPtEsItProvider + * * @param $expected * @param $number */ - public function test_ordinalize_numbers_italian($expected, $number) + public function test_ordinalize_numbers_italian($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'it')); } /** * @dataProvider ordinalizeDataGermanProvider + * * @param $expected * @param $number */ - public function test_ordinalize_numbers_german($expected, $number) + public function test_ordinalize_numbers_german($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'de')); } /** * @dataProvider ordinalizeDataFrenchProvider + * * @param $expected * @param $number */ - public function test_ordinalize_numbers_french($expected, $number) + public function test_ordinalize_numbers_french($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'fr')); } @@ -176,11 +187,11 @@ public function test_ordinalize_numbers_french($expected, $number) /** * @dataProvider binarySuffixDataProvider * - * @param $expected - * @param $number + * @param $expected + * @param $number * @param string $locale */ - public function test_convert_number_to_string_with_binary_suffix($expected, $number, $locale = 'en') + public function test_convert_number_to_string_with_binary_suffix($expected, $number, $locale = 'en') : void { $this->assertEquals($expected, NumberHumanizer::binarySuffix($number, $locale)); } @@ -188,24 +199,24 @@ public function test_convert_number_to_string_with_binary_suffix($expected, $num /** * @dataProvider preciseBinarySuffixDataProvider * - * @param $expected - * @param $number - * @param string $locale - * @param integer $precision + * @param $expected + * @param $number + * @param string $locale + * @param int $precision */ - public function test_convert_number_to_string_with_precise_binary_suffix($expected, $number, $precision, $locale = 'en') + public function test_convert_number_to_string_with_precise_binary_suffix($expected, $number, $precision, $locale = 'en') : void { $this->assertEquals($expected, NumberHumanizer::preciseBinarySuffix($number, $precision, $locale)); } - public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_negative_precision() + public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_negative_precision() : void { $this->expectException(\InvalidArgumentException::class); NumberHumanizer::preciseBinarySuffix(1, -1); } - public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_large_precision() + public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_large_precision() : void { $this->expectException(\InvalidArgumentException::class); @@ -215,16 +226,16 @@ public function test_statically_throw_exception_when_converting_to_string_with_p /** * @dataProvider metricSuffixDataProvider * - * @param $expected - * @param $number + * @param $expected + * @param $number * @param string $locale */ - public function test_convert_number_to_string_with_metric_suffix($expected, $number, $locale = 'en') + public function test_convert_number_to_string_with_metric_suffix($expected, $number, $locale = 'en') : void { $this->assertEquals($expected, NumberHumanizer::metricSuffix($number, $locale)); } - public function test_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() + public function test_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() : void { $this->expectException(\InvalidArgumentException::class); @@ -237,7 +248,7 @@ public function test_statically_throw_exception_when_converting_to_string_with_m * @param $expected * @param $number */ - public function test_converts_numbers_to_roman($expected, $number) + public function test_converts_numbers_to_roman($expected, $number) : void { $this->assertEquals($expected, NumberHumanizer::toRoman($number)); } @@ -248,7 +259,7 @@ public function test_converts_numbers_to_roman($expected, $number) * @param $expected * @param $number */ - public function test_convert_roman_numbers_to_arabic($number, $expected) + public function test_convert_roman_numbers_to_arabic($number, $expected) : void { $this->assertEquals($expected, NumberHumanizer::fromRoman($number)); } @@ -258,7 +269,7 @@ public function test_convert_roman_numbers_to_arabic($number, $expected) * * @param $number */ - public function test_statically_throw_exception_when_converting_number_is_out_of_range($number) + public function test_statically_throw_exception_when_converting_number_is_out_of_range($number) : void { $this->expectException(\InvalidArgumentException::class); @@ -270,7 +281,7 @@ public function test_statically_throw_exception_when_converting_number_is_out_of * * @param $number */ - public function test_statically_throw_exception_when_converting_roman_number_is_invalid($number) + public function test_statically_throw_exception_when_converting_roman_number_is_invalid($number) : void { $this->expectException(\InvalidArgumentException::class); @@ -402,6 +413,7 @@ public function ordinalizeDataFrenchProvider() ['-111e', -111], ]; } + /** * @return array */ diff --git a/tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php b/tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php index 1dd46da..274e0bf 100644 --- a/tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/String/WordBreakpointTest.php @@ -16,7 +16,7 @@ final class WordBreakpointTest extends TestCase { - public function test_calculate_breakpoint_position_when_sentence_is_longer_than_characters_count() + public function test_calculate_breakpoint_position_when_sentence_is_longer_than_characters_count() : void { $wordBreakpoint = new WordBreakpoint(); @@ -28,21 +28,21 @@ public function test_calculate_breakpoint_position_when_sentence_is_longer_than_ $this->assertSame(5, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 0)); } - public function test_calculate_breakpoint_position_when_sentence_is_shorter_than_characters_count() + public function test_calculate_breakpoint_position_when_sentence_is_shorter_than_characters_count() : void { $wordBreakpoint = new WordBreakpoint(); $this->assertSame(19, $wordBreakpoint->calculatePosition('Lorem ipsum dolorem', 20)); } - public function test_calculate_breakpoint_position_when_characters_count_ends_in_last_word() + public function test_calculate_breakpoint_position_when_characters_count_ends_in_last_word() : void { $wordBreakpoint = new WordBreakpoint(); $this->assertSame(11, $wordBreakpoint->calculatePosition('Lorem ipsum', 7)); } - public function test_calculate_breakpoint_position_when_characters_count_ends_in_last_space() + public function test_calculate_breakpoint_position_when_characters_count_ends_in_last_space() : void { $wordBreakpoint = new WordBreakpoint(); diff --git a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php index 6f318b3..2312c74 100644 --- a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php @@ -25,7 +25,7 @@ class StringHumanizerTest extends TestCase * @param $separator * @param array $forbiddenWords */ - public function test_humanize_strings($input, $expected, $capitalize, $separator, array $forbiddenWords) + public function test_humanize_strings($input, $expected, $capitalize, $separator, array $forbiddenWords) : void { $this->assertEquals($expected, StringHumanizer::humanize($input, $capitalize, $separator, $forbiddenWords)); } @@ -38,7 +38,7 @@ public function test_humanize_strings($input, $expected, $capitalize, $separator * @param $charactersCount * @param string $append */ - public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters($text, $expected, $charactersCount, $append = '') + public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters($text, $expected, $charactersCount, $append = '') : void { $this->assertEquals($expected, StringHumanizer::truncate($text, $charactersCount, $append)); } @@ -52,7 +52,7 @@ public function test_truncate_string_to_word_closest_to_a_certain_number_of_char * @param $expected * @param $append */ - public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') + public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') : void { $this->assertEquals($expected, StringHumanizer::truncateHtml($text, $charactersCount, $allowedTags, $append)); } @@ -63,7 +63,7 @@ public function test_truncate_string_to_word_closest_to_a_certain_number_of_char * @param $text * @param $expected */ - public function test_remove_all_shortcodes_from_text($text, $expected) + public function test_remove_all_shortcodes_from_text($text, $expected) : void { $this->assertEquals($expected, StringHumanizer::removeShortcodes($text)); } @@ -74,7 +74,7 @@ public function test_remove_all_shortcodes_from_text($text, $expected) * @param $text * @param $expected */ - public function test_remove_only_shortcode_tags_from_text($text, $expected) + public function test_remove_only_shortcode_tags_from_text($text, $expected) : void { $this->assertEquals($expected, StringHumanizer::removeShortcodeTags($text)); } @@ -107,12 +107,11 @@ public function humanizeStringProvider() ['customer_id', 'Customer id', true, '_', []], ['news_count', 'News count', true, '_', ['id']], ['news-count', 'News count', true, '-', ['id']], - ['news-count', 'news count', false, '-', ['id']] + ['news-count', 'news count', false, '-', ['id']], ]; } /** - * * @return array */ public function truncateStringProvider() @@ -136,12 +135,11 @@ public function truncateStringProvider() [$shortText, 'Short text', 7, '...'], [$shortText, 'Short text', 8, '...'], [$shortText, 'Short text', 9, '...'], - [$shortText, 'Short text', 10, '...'] + [$shortText, 'Short text', 10, '...'], ]; } /** - * * @return array */ public function truncateHtmlStringProvider() @@ -154,14 +152,14 @@ public function truncateHtmlStringProvider() [$text, 30, '
', 'HyperText Markup Language, commonly'], [$text, 50, '', 'HyperText Markup Language, commonly referred to as'], [$text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup'], - [$text, 100,'', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'], - [$text, 3 , '', 'HyperText'], - [$text, 12 , '', 'HyperText Markup'], - [$text, 50 , '', 'HyperText Markup Language, commonly referred to as'], - [$text, 75 , '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup'], + [$text, 100, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'], + [$text, 3, '', 'HyperText'], + [$text, 12, '', 'HyperText Markup'], + [$text, 50, '', 'HyperText Markup Language, commonly referred to as'], + [$text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup'], [$text, 100, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create'], [$text, 50, '', 'HyperText Markup Language, commonly referred to as...', '...'], - [$text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...', '...'] + [$text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...', '...'], ]; } } From 85d090067662e513ae6f26344412dce10a5b8c84 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Tue, 23 Feb 2021 21:02:31 +0000 Subject: [PATCH 136/193] Updated CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae64d77..2a01651 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## [Unreleased] - 2021-02-23 ### Added +- [0533da](https://github.com/coduo/php-humanizer/commit/0533da67e2a0ff97a8f504ebc8de469eaca150f1) - **more strict php cs fixer rules** - [@norberttech](https://github.com/norberttech) - [#123](https://github.com/coduo/php-humanizer/pull/123) - **Relative/Time Unit humanizer** - [@norberttech](https://github.com/norberttech) - [#123](https://github.com/coduo/php-humanizer/pull/123) - **TimePeriod humanizer** - [@norberttech](https://github.com/norberttech) - [#123](https://github.com/coduo/php-humanizer/pull/123) - **Support for \DateTimeInterface instead of legacy \DateTime in all DateTimeHumanizers** - [@norberttech](https://github.com/norberttech) From 16074feea40f8d96e2a31d8d18e24425149a6086 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Tue, 23 Feb 2021 22:07:33 +0100 Subject: [PATCH 137/193] Fixed missing .php_cs configuration file --- .php_cs | 224 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 .php_cs diff --git a/.php_cs b/.php_cs new file mode 100644 index 0000000..d3e6651 --- /dev/null +++ b/.php_cs @@ -0,0 +1,224 @@ +files() + ->in([ + __DIR__ . '/src', + __DIR__ . '/tests' + ]) + ->notName('*.phpt'); + +if (!\file_exists(__DIR__ . '/var')) { + \mkdir(__DIR__ . '/var'); +} + +/** + * This configuration was taken from https://github.com/sebastianbergmann/phpunit/blob/master/.php_cs.dist + * and slightly adjusted. + */ +return PhpCsFixer\Config::create() + ->setRiskyAllowed(true) + ->setCacheFile(__DIR__.'/var/.php_cs.cache') + ->setRules([ + 'align_multiline_comment' => true, + 'array_indentation' => true, + 'array_syntax' => ['syntax' => 'short'], + 'blank_line_after_namespace' => true, + 'blank_line_before_statement' => [ + 'statements' => [ + 'break', + 'continue', + 'declare', + 'default', + 'die', + 'do', + 'exit', + 'for', + 'foreach', + 'goto', + 'if', + 'include', + 'include_once', + 'require', + 'require_once', + 'return', + 'switch', + 'throw', + 'try', + 'while', + ], + ], + 'braces' => true, + 'cast_spaces' => true, + 'class_attributes_separation' => ['elements' => ['const', 'method', 'property']], + 'combine_consecutive_issets' => true, + 'combine_consecutive_unsets' => true, + 'compact_nullable_typehint' => true, + 'concat_space' => ['spacing' => 'one'], + 'constant_case' => true, + 'declare_equal_normalize' => ['space' => 'none'], + 'declare_strict_types' => true, + 'dir_constant' => true, + 'elseif' => true, + 'encoding' => true, + 'explicit_indirect_variable' => true, + 'explicit_string_variable' => true, + 'full_opening_tag' => true, + 'fully_qualified_strict_types' => true, + 'function_typehint_space' => true, + 'function_declaration' => true, + 'global_namespace_import' => [ + 'import_classes' => false, + 'import_constants' => false, + 'import_functions' => false, + ], + 'heredoc_to_nowdoc' => true, + 'increment_style' => [ + 'style' => PhpCsFixer\Fixer\Operator\IncrementStyleFixer::STYLE_POST, + ], + 'indentation_type' => true, + 'is_null' => true, + 'line_ending' => true, + 'list_syntax' => ['syntax' => 'short'], + 'logical_operators' => true, + 'lowercase_keywords' => true, + 'lowercase_static_reference' => true, + 'magic_constant_casing' => true, + 'magic_method_casing' => true, + 'method_argument_space' => ['ensure_fully_multiline' => true], + 'modernize_types_casting' => false, + 'multiline_comment_opening_closing' => true, + 'multiline_whitespace_before_semicolons' => true, + 'native_constant_invocation' => false, + 'native_function_casing' => false, + 'native_function_invocation' => true, + 'native_function_type_declaration_casing' => true, + 'new_with_braces' => false, + 'no_alias_functions' => true, + 'no_alternative_syntax' => true, + 'no_blank_lines_after_class_opening' => true, + 'no_blank_lines_after_phpdoc' => true, + 'no_blank_lines_before_namespace' => false, + 'no_closing_tag' => true, + 'no_empty_comment' => true, + 'no_empty_phpdoc' => true, + 'no_empty_statement' => true, + 'no_extra_blank_lines' => true, + 'no_homoglyph_names' => true, + 'no_leading_import_slash' => true, + 'no_leading_namespace_whitespace' => true, + 'no_mixed_echo_print' => ['use' => 'print'], + 'no_multiline_whitespace_around_double_arrow' => true, + 'no_null_property_initialization' => true, + 'no_php4_constructor' => true, + 'no_short_bool_cast' => true, + 'no_short_echo_tag' => true, + 'no_singleline_whitespace_before_semicolons' => true, + 'no_spaces_after_function_name' => true, + 'no_spaces_around_offset' => true, + 'no_spaces_inside_parenthesis' => true, + 'no_superfluous_elseif' => true, + 'no_superfluous_phpdoc_tags' => false, + 'no_trailing_comma_in_list_call' => true, + 'no_trailing_comma_in_singleline_array' => true, + 'no_trailing_whitespace' => true, + 'no_trailing_whitespace_in_comment' => true, + 'no_unneeded_control_parentheses' => true, + 'no_unneeded_curly_braces' => true, + 'no_unneeded_final_method' => true, + 'no_unreachable_default_argument_value' => true, + 'no_unset_on_property' => true, + 'no_unused_imports' => true, + 'no_useless_else' => true, + 'no_useless_return' => true, + 'no_whitespace_before_comma_in_array' => true, + 'no_whitespace_in_blank_line' => true, + 'non_printable_character' => true, + 'normalize_index_brace' => true, + 'object_operator_without_whitespace' => true, + 'ordered_class_elements' => [ + 'order' => [ + 'use_trait', + 'constant_public', + 'constant_protected', + 'constant_private', + 'property_public_static', + 'property_protected_static', + 'property_private_static', + 'property_public', + 'property_protected', + 'property_private', + 'construct', + 'method_public_static', + 'destruct', + 'magic', + 'phpunit', + 'method_public', + 'method_protected', + 'method_private', + 'method_protected_static', + 'method_private_static', + ], + ], + 'ordered_imports' => [ + 'imports_order' => [ + PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_CONST, + PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_FUNCTION, + PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_CLASS, + ] + ], + 'ordered_interfaces' => [ + 'direction' => 'ascend', + 'order' => 'alpha', + ], + 'phpdoc_add_missing_param_annotation' => false, + 'phpdoc_align' => ['align' => 'left'], + 'phpdoc_annotation_without_dot' => true, + 'phpdoc_indent' => true, + 'phpdoc_no_access' => true, + 'phpdoc_no_empty_return' => true, + 'phpdoc_no_package' => true, + 'phpdoc_order' => true, + 'phpdoc_return_self_reference' => true, + 'phpdoc_scalar' => true, + 'phpdoc_separation' => true, + 'phpdoc_single_line_var_spacing' => true, + 'phpdoc_summary' => true, + 'phpdoc_to_comment' => false, + 'phpdoc_trim' => true, + 'phpdoc_trim_consecutive_blank_line_separation' => true, + 'phpdoc_types' => ['groups' => ['simple', 'meta']], + 'phpdoc_types_order' => true, + 'phpdoc_var_without_name' => true, + 'pow_to_exponentiation' => true, + 'protected_to_private' => true, + 'return_assignment' => true, + 'return_type_declaration' => ['space_before' => 'one'], + 'self_accessor' => true, + 'self_static_accessor' => true, + 'semicolon_after_instruction' => true, + 'set_type_to_cast' => true, + 'short_scalar_cast' => true, + 'simple_to_complex_string_variable' => true, + 'simplified_null_return' => false, + 'single_blank_line_at_eof' => true, + 'single_import_per_statement' => true, + 'single_line_after_imports' => true, + 'single_quote' => true, + 'standardize_not_equals' => true, + 'strict_param' => true, + 'ternary_to_null_coalescing' => true, + 'trailing_comma_in_multiline_array' => true, + 'trim_array_spaces' => true, + 'unary_operator_spaces' => true, + 'visibility_required' => [ + 'elements' => [ + 'const', + 'method', + 'property', + ], + ], + 'void_return' => true, + 'whitespace_after_comma_in_array' => true, + ]) + ->setFinder($finder); \ No newline at end of file From 357846988a421ea2b7af642a48b3eaf39f26db69 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Tue, 23 Feb 2021 21:08:05 +0000 Subject: [PATCH 138/193] Updated CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a01651..024a069 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ - [1b2787](https://github.com/coduo/php-humanizer/commit/1b2787d28282247b3fe68cd5b9f6bf80f304fa63) - **dev-master branch aliast** - [@norberttech](https://github.com/norberttech) ### Fixed +- [16074f](https://github.com/coduo/php-humanizer/commit/16074feea40f8d96e2a31d8d18e24425149a6086) - **missing .php_cs configuration file** - [@norberttech](https://github.com/norberttech) - [4de08d](https://github.com/coduo/php-humanizer/commit/4de08de0b2463cfc498612a89189385b5de4f66d) - **updating changelog workflow** - [@norberttech](https://github.com/norberttech) - [fc3a04](https://github.com/coduo/php-humanizer/commit/fc3a043f6e03bc29e86d0cd58ae3a6b7daf40d69) - **travis configuration** - [@norberttech](https://github.com/norberttech) - [#115](https://github.com/coduo/php-humanizer/pull/115) - **composer autoloading deprecation notice; Support symfony 5** - [@brianwozeniak](https://github.com/brianwozeniak) From 9a1e1399d3a2af2dcaa75a11b9fb63b8f6c39f9d Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Wed, 24 Feb 2021 10:43:36 +0100 Subject: [PATCH 139/193] Improve performance by reduce loadings of Translator (#124) --- src/Coduo/PHPHumanizer/Translator/Builder.php | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index e7a0146..d4db121 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -16,21 +16,30 @@ final class Builder { + /** + * @var array + */ + private static array $translators = []; + public static function build(string $locale) : Translator { - $translator = new Translator($locale); - $translator->addLoader('yml', new YamlFileLoader()); + if (!isset(self::$translators[$locale])) { + $translator = new Translator($locale); + $translator->addLoader('yml', new YamlFileLoader()); + + $iterator = new \FilesystemIterator(__DIR__ . '/../Resources/translations'); + $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.yml$/'); - $iterator = new \FilesystemIterator(__DIR__ . '/../Resources/translations'); - $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.yml$/'); + foreach ($filter as $file) { + /* @var $file \SplFileInfo */ + $resourceName = $file->getBasename('.yml'); + [$fileDomain, $fileLocale] = \explode('.', $resourceName); + $translator->addResource('yml', $file->getPathname(), $fileLocale, $fileDomain); + } - foreach ($filter as $file) { - /* @var $file \SplFileInfo */ - $resourceName = $file->getBasename('.yml'); - [$fileDomain, $fileLocale] = \explode('.', $resourceName); - $translator->addResource('yml', $file->getPathname(), $fileLocale, $fileDomain); + self::$translators[$locale] = $translator; } - return $translator; + return self::$translators[$locale]; } } From dcbc1f0119a0a9b1c62510af24ae50c959feb189 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Wed, 24 Feb 2021 09:44:06 +0000 Subject: [PATCH 140/193] Updated CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 024a069..4dcfb3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2021-02-23 +## [Unreleased] - 2021-02-24 ### Added - [0533da](https://github.com/coduo/php-humanizer/commit/0533da67e2a0ff97a8f504ebc8de469eaca150f1) - **more strict php cs fixer rules** - [@norberttech](https://github.com/norberttech) @@ -17,6 +17,7 @@ - [#119](https://github.com/coduo/php-humanizer/pull/119) - **support azerbaijani language** - [@4t87ux8](https://github.com/4t87ux8) ### Changed +- [#124](https://github.com/coduo/php-humanizer/pull/124) - **load Translator only once for given locale** - [@norberttech](https://github.com/norberttech) - [#122](https://github.com/coduo/php-humanizer/pull/122) - **minimum required PHP version ^7.4** - [@norberttech](https://github.com/norberttech) - [#118](https://github.com/coduo/php-humanizer/pull/118) - **create azerbaijani translation** - [@4t87ux8](https://github.com/4t87ux8) - [fa52e6](https://github.com/coduo/php-humanizer/commit/fa52e6223eef2f19fbd0a290432b5a878317dca2) - **Fixxed issue with symfony translator dependency, upgraded php, phpunit and phpspec dependencies** - [@norberttech](https://github.com/norberttech) From 9b7942f094fa9fd9de6a43c405ec3bc784cce18e Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 25 Feb 2021 20:22:13 +0000 Subject: [PATCH 141/193] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4dcfb3b..9c20e56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2021-02-24 +## [4.0.0] - 2021-02-25 ### Added - [0533da](https://github.com/coduo/php-humanizer/commit/0533da67e2a0ff97a8f504ebc8de469eaca150f1) - **more strict php cs fixer rules** - [@norberttech](https://github.com/norberttech) From 89102c231ea3e8e7d9e80c79ba632304daa24fd8 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sat, 27 Feb 2021 22:07:38 +0100 Subject: [PATCH 142/193] Fixed humanization of time unit less than 1 second (#125) * Fixed humanization of time unit less than 1 second * Added support for 0 seconds --- .../Aeon/Calendar/UnitCompound.php | 4 ++- .../Resources/translations/difference.af.yml | 6 ++-- .../Resources/translations/difference.az.yml | 6 ++-- .../Resources/translations/difference.bg.yml | 6 ++-- .../Resources/translations/difference.da.yml | 6 ++-- .../Resources/translations/difference.de.yml | 6 ++-- .../Resources/translations/difference.en.yml | 6 ++-- .../Resources/translations/difference.es.yml | 6 ++-- .../Resources/translations/difference.fr.yml | 6 ++-- .../Resources/translations/difference.id.yml | 6 ++-- .../Resources/translations/difference.it.yml | 6 ++-- .../Resources/translations/difference.ja.yml | 6 ++-- .../Resources/translations/difference.nl.yml | 6 ++-- .../Resources/translations/difference.no.yml | 6 ++-- .../Resources/translations/difference.pl.yml | 8 ++--- .../Resources/translations/difference.pt.yml | 6 ++-- .../translations/difference.pt_BR.yml | 6 ++-- .../Resources/translations/difference.ro.yml | 6 ++-- .../Resources/translations/difference.th.yml | 2 +- .../Resources/translations/difference.tr.yml | 6 ++-- .../translations/difference.zh_CN.yml | 2 +- .../translations/difference.zh_TW.yml | 2 +- .../Tests/Aeon/Calendar/FormatterTest.php | 36 +++++++++++++++++++ 23 files changed, 97 insertions(+), 59 deletions(-) diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php index b461b11..117d5e3 100644 --- a/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php @@ -65,7 +65,7 @@ public function components() : array $compoundResults[] = new CompoundResult(new Minute(), $unit->inTimeMinutes()); } - if ($unit->inTimeSeconds()) { + if ($unit->inTimeSeconds() || $unit->inTimeMilliseconds()) { $seconds = $unit->inTimeSeconds(); if ($unit->inTimeMilliseconds() > 0) { @@ -73,6 +73,8 @@ public function components() : array } $compoundResults[] = new CompoundResult(new Second(), $seconds); + } elseif (!\count($compoundResults)) { + $compoundResults[] = new CompoundResult(new Second(), 0); } return $compoundResults; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml index 788457a..6d4f8dd 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] nou nou" future: "[0,Inf] netnou" second: - past: "{1} %count% sekonde gelede|[2,Inf] %count% sekondes gelede" - future: "{1} %count% sekonde van nou af|[2,Inf] %count% sekondes van nou af" + past: "[0,1] %count% sekonde gelede|[2,Inf] %count% sekondes gelede" + future: "[0,1] %count% sekonde van nou af|[2,Inf] %count% sekondes van nou af" minute: past: "{1} %count% minuut gelede|[2,Inf] %count% minute gelede" future: "{1} %count% minuut van nou af|[2,Inf] %count% minute van nou af" @@ -24,7 +24,7 @@ year: future: "{1} %count% jaar van nou af|[2,Inf] %count% jaar van nou af" compound: - second: "{1} %count% sekonde|[2,Inf] %count% sekondes" + second: "[0,1] %count% sekonde|[2,Inf] %count% sekondes" minute: "{1} %count% minuut|[2,Inf] %count% minute" hour: "{1} %count% uur|[2,Inf] %count% ure" day: "{1} %count% dag|[2,Inf] %count% dae" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml index 08a24fe..7eceb68 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] indi" future: "[0,Inf] indi" second: - past: "{1} %count% saniyə əvvəl|[2,Inf] %count% saniyə əvvəl" - future: "{1} %count% saniyə sonra|[2,Inf] %count% saniyə sonra" + past: "[0,1] %count% saniyə əvvəl|[2,Inf] %count% saniyə əvvəl" + future: "[0,1] %count% saniyə sonra|[2,Inf] %count% saniyə sonra" minute: past: "{1} %count% dəqiqə əvvəl|[2,Inf] %count% dəqiqə əvvəl" future: "{1} %count% dəqiqə sonra|[2,Inf] %count% dəqiqə sonra" @@ -24,7 +24,7 @@ year: future: "{1} %count% il sonra|[2,Inf] %count% il sonra" compound: - second: "{1} %count% saniyə|[2,Inf] %count% saniyə" + second: "[0,1] %count% saniyə|[2,Inf] %count% saniyə" minute: "{1} %count% dəqiqə|[2,Inf] %count% dəqiqə" hour: "{1} %count% saat|[2,Inf] %count% saat" day: "{1} %count% gün|[2,Inf] %count% gün" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml index 9e035b3..0ef236f 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] в момента" future: "[0,Inf] в момента" second: - past: "{1} преди %count% секунда|[2,Inf] преди %count% секунди" - future: "{1} след %count% секунда|[2,Inf] след %count% секунди" + past: "[0,1] преди %count% секунда|[2,Inf] преди %count% секунди" + future: "[0,1] след %count% секунда|[2,Inf] след %count% секунди" minute: past: "{1} преди %count% минута|[2,Inf] преди %count% минути" future: "{1} след %count% минута|[2,Inf] след %count% минути" @@ -24,7 +24,7 @@ year: future: "{1} след %count% година|[2,Inf] след %count% години" compound: - second: "{1} %count% секунда|[2,Inf] %count% секунди" + second: "[0,1] %count% секунда|[2,Inf] %count% секунди" minute: "{1} %count% минута|[2,Inf] %count% минути" hour: "{1} %count% час|[2,Inf] %count% часа" day: "{1} %count% ден|[2,Inf] %count% дни" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml index de98b09..8be37e2 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] lige nu" future: "[0,Inf] lige nu" second: - past: "{1} %count% sekund siden|[2,Inf] %count% sekunder siden" - future: "{1} %count% sekund fra nu|[2,Inf] %count% sekunder fra nu" + past: "[0,1] %count% sekund siden|[2,Inf] %count% sekunder siden" + future: "[0,1] %count% sekund fra nu|[2,Inf] %count% sekunder fra nu" minute: past: "{1} %count% minut siden|[2,Inf] %count% minutter siden" future: "{1} %count% minut fra nu|[2,Inf] %count% minutter fra nu" @@ -24,7 +24,7 @@ year: future: "{1} %count% år fra nu|[2,Inf] %count% år fra nu" compound: - second: "{1} %count% sekund|[2,Inf] %count% sekunder" + second: "[0,1] %count% sekund|[2,Inf] %count% sekunder" minute: "{1} %count% minut|[2,Inf] %count% minutter" hour: "{1} %count% time|[2,Inf] %count% timer" day: "{1} %count% dag|[2,Inf] %count% dage" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml index 46fa38d..b5a1e40 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] jetzt gerade" future: "[0,Inf] jetzt gerade" second: - past: "{1} vor %count% Sekunde|[2,Inf] vor %count% Sekunden" - future: "{1} in %count% Sekunde|[2,Inf] in %count% Sekunden" + past: "[0,1] vor %count% Sekunde|[2,Inf] vor %count% Sekunden" + future: "[0,1] in %count% Sekunde|[2,Inf] in %count% Sekunden" minute: past: "{1} vor %count% Minute|[2,Inf] vor %count% Minuten" future: "{1} in %count% Minute|[2,Inf] in %count% Minuten" @@ -24,7 +24,7 @@ year: future: "{1} in %count% Jahr|[2,Inf] in %count% Jahren" compound: - second: "{1} %count% Sekunde|[2,Inf] %count% Sekunden" + second: "[0,1] %count% Sekunde|[2,Inf] %count% Sekunden" minute: "{1} %count% Minute|[2,Inf] %count% Minuten" hour: "{1} %count% Stunde|[2,Inf] %count% Stunden" day: "{1} %count% Tag|[2,Inf] %count% Tagen" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml index df245c7..2a6a906 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] just now" future: "[0,Inf] just now" second: - past: "{1} %count% second ago|[2,Inf] %count% seconds ago" - future: "{1} %count% second from now|[2,Inf] %count% seconds from now" + past: "[0,1] %count% second ago|[2,Inf] %count% seconds ago" + future: "[0,1] %count% second from now|[2,Inf] %count% seconds from now" minute: past: "{1} %count% minute ago|[2,Inf] %count% minutes ago" future: "{1} %count% minute from now|[2,Inf] %count% minutes from now" @@ -24,7 +24,7 @@ year: future: "{1} %count% year from now|[2,Inf] %count% years from now" compound: - second: "{1} %count% second|[2,Inf] %count% seconds" + second: "[0,1] %count% second|[2,Inf] %count% seconds" minute: "{1} %count% minute|[2,Inf] %count% minutes" hour: "{1} %count% hour|[2,Inf] %count% hours" day: "{1} %count% day|[2,Inf] %count% days" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml index 0cc130c..8105a11 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] ahora mismo" future: "[0,Inf] ahora mismo" second: - past: "{1} hace %count% segundo |[2,Inf] hace %count% segundos" - future: "{1} dentro de %count% segundo|[2,Inf] dentro de %count% segundos" + past: "[0,1] hace %count% segundo |[2,Inf] hace %count% segundos" + future: "[0,1] dentro de %count% segundo|[2,Inf] dentro de %count% segundos" minute: past: "{1} hace %count% minuto|[2,Inf] hace %count% minutos" future: "{1} dentro de %count% minuto|[2,Inf] dentro de %count% minutos" @@ -24,7 +24,7 @@ year: future: "{1} dentro de %count% año|[2,Inf] dentro de %count% años" compound: - second: "{1} %count% segundo|[2,Inf] %count% segundos" + second: "[0,1] %count% segundo|[2,Inf] %count% segundos" minute: "{1} %count% minuto|[2,Inf] %count% minutos" hour: "{1} %count% hora|[2,Inf] %count% horas" day: "{1} %count% día|[2,Inf] %count% días" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml index 1869933..e89fcec 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] à l'instant" future: "[0,Inf] à l'instant" second: - past: "{1} il y a %count% seconde|[2,Inf] il y a %count% secondes" - future: "{1} il y a maintenant %count% seconde|[2,Inf] il y a maintenant %count% secondes" + past: "[0,1] il y a %count% seconde|[2,Inf] il y a %count% secondes" + future: "[0,1] il y a maintenant %count% seconde|[2,Inf] il y a maintenant %count% secondes" minute: past: "{1} il y a %count% minute|[2,Inf] il y a %count% minutes" future: "{1} il y a maintenant %count% minute|[2,Inf] il y a maintenant %count% minutes" @@ -24,7 +24,7 @@ year: future: "{1} il y a maintenant %count% année|[2,Inf] il y a maintenant %count% années" compound: - second: "{1} %count% seconde|[2,Inf] %count% secondes" + second: "[0,1] %count% seconde|[2,Inf] %count% secondes" minute: "{1} %count% minute|[2,Inf] %count% minutes" hour: "{1} %count% heure|[2,Inf] %count% heures" day: "{1} %count% jour|[2,Inf] %count% jours" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml index 8751811..9996408 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] baru saja" future: "[0,Inf] baru saja" second: - past: "{1} %count% detik yang lalu|[2,Inf] %count% detik yang lalu" - future: "{1} %count% detik dari sekarang|[2,Inf] %count% detik dari sekarang" + past: "[0,1] %count% detik yang lalu|[2,Inf] %count% detik yang lalu" + future: "[0,1] %count% detik dari sekarang|[2,Inf] %count% detik dari sekarang" minute: past: "{1} %count% menit yang lalu|[2,Inf] %count% menit yang lalu" future: "{1} %count% menit dari sekarang|[2,Inf] %count% menit dari sekarang" @@ -24,7 +24,7 @@ year: future: "{1} %count% tahun dari sekarang|[2,Inf] %count% tahun dari sekarang" compound: - second: "{1} %count% detik|[2,Inf] %count% detik" + second: "[0,1] %count% detik|[2,Inf] %count% detik" minute: "{1} %count% menit|[2,Inf] %count% menit" hour: "{1} %count% jam|[2,Inf] %count% jam" day: "{1} %count% hari|[2,Inf] %count% hari" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml index e0f5de5..554365f 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] adesso" future: "[0,Inf] adesso" second: - past: "{1} %count% secondo fa|[2,Inf] %count% secondi fa" - future: "{1} %count% secondo da adesso|[2,Inf] %count% secondi da adesso" + past: "[0,1] %count% secondo fa|[2,Inf] %count% secondi fa" + future: "[0,1] %count% secondo da adesso|[2,Inf] %count% secondi da adesso" minute: past: "{1} %count% minuto fa|[2,Inf] %count% minuti fa" future: "{1} %count% minuto da adesso|[2,Inf] %count% minuti da adesso" @@ -24,7 +24,7 @@ year: future: "{1} %count% anno da adesso|[2,Inf] %count% anni da adesso" compound: - second: "{1} %count% secondo|[2,Inf] %count% secondi" + second: "[0,1] %count% secondo|[2,Inf] %count% secondi" minute: "{1} %count% minuto|[2,Inf] %count% minuti" hour: "{1} %count% ora|[2,Inf] %count% ore" day: "{1} %count% giorno|[2,Inf] %count% giorni" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml index f6dd453..055fa3d 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] たった今" future: "[0,Inf] たった今" second: - past: "{1} %count% 秒前|[2,Inf] %count% 秒前" - future: "{1} %count% 秒後|[2,Inf] %count% 秒後" + past: "[0,1] %count% 秒前|[2,Inf] %count% 秒前" + future: "[0,1] %count% 秒後|[2,Inf] %count% 秒後" minute: past: "{1} %count% 分前|[2,Inf] %count% 分前" future: "{1} %count% 分後|[2,Inf] %count% 分後" @@ -24,7 +24,7 @@ year: future: "{1} %count% 年後|[2,Inf] %count% 年後" compound: - second: "{1} %count% 秒|[2,Inf] %count% 秒" + second: "[0,1] %count% 秒|[2,Inf] %count% 秒" minute: "{1} %count% 分|[2,Inf] %count% 分" hour: "{1} %count% 時間|[2,Inf] %count% 時間" day: "{1} %count% 日|[2,Inf] %count% 日" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml index cbabddd..d36c5cb 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] zojuist" future: "[0,Inf] zojuist" second: - past: "{1} %count% seconde geleden|[2,Inf] %count% seconden geleden" - future: "{1} over %count% seconde|[2,Inf] over %count% seconden" + past: "[0,1] %count% seconde geleden|[2,Inf] %count% seconden geleden" + future: "[0,1] over %count% seconde|[2,Inf] over %count% seconden" minute: past: "{1} %count% minuut geleden|[2,Inf] %count% minuten geleden" future: "{1} over %count% minuut|[2,Inf] over %count% minuten" @@ -24,7 +24,7 @@ year: future: "{1} over %count% jaar|[2,Inf] over %count% jaren" compound: - second: "{1} %count% seconde|[2,Inf] %count% seconden" + second: "[0,1] %count% seconde|[2,Inf] %count% seconden" minute: "{1} %count% minuut|[2,Inf] %count% minuten" hour: "{1} %count% uur|[2,Inf] %count% uren" day: "{1} %count% dag|[2,Inf] %count% dagen" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml index 3e9bac1..06a7f3e 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] akkurat nå" future: "[0,Inf] akkurat nå" second: - past: "{1} %count% sekund siden|[2,Inf] %count% sekunder siden" - future: "{1} %count% sekund fra nå|[2,Inf] %count% sekunder fra nå" + past: "[0,1] %count% sekund siden|[2,Inf] %count% sekunder siden" + future: "[0,1] %count% sekund fra nå|[2,Inf] %count% sekunder fra nå" minute: past: "{1} %count% minutt siden|[2,Inf] %count% minutter siden" future: "{1} %count% minutt fra nå|[2,Inf] %count% minutter fra nå" @@ -24,7 +24,7 @@ year: future: "{1} %count% år fra nå|[2,Inf] %count% år fra nå" compound: - second: "{1} %count% sekund|[2,Inf] %count% sekunder" + second: "[0,1] %count% sekund|[2,Inf] %count% sekunder" minute: "{1} %count% minutt|[2,Inf] %count% minutter" hour: "{1} %count% time|[2,Inf] %count% timer" day: "{1} %count% dag|[2,Inf] %count% dager" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml index 23be15d..45fcc71 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] w tym momencie" future: "[0,Inf] w tym momencie" second: - past: "{1} sekundę temu|[2, 4] %count% sekundy temu|[5,Inf] %count% sekund temu" - future: "{1} za sekundę|[2, 4] za %count% sekund|[5,Inf] za %count% sekund" + past: "[0,1] sekundę temu|[2, 4] %count% sekundy temu|[5,Inf] %count% sekund temu" + future: "[0,1] za sekundę|[2, 4] za %count% sekund|[5,Inf] za %count% sekund" minute: past: "{1} minutę temu|[2, 4] %count% minuty temu|[5,Inf] %count% minut temu" future: "{1} za minutę|[2, 4] za %count% minuty|[5,Inf] za %count% minut" @@ -22,9 +22,9 @@ month: year: past: "{1} rok temu|[2, 4] %count% lata temu|[5,Inf] %count% lat temu" future: "{1} za rok|[2, 4] za %count% lata|[5,Inf] za %count% lat" - + compound: - second: "{1} %count% sekunda|[2,4] %count% sekundy|[5,Inf] %count% sekund" + second: "[0,1] %count% sekunda|[2,4] %count% sekundy|[5,Inf] %count% sekund" minute: "{1} %count% minuta|[2,4] %count% minuty|[5,Inf] %count% minut" hour: "{1} %count% godzina|[2,4] %count% godziny|[5,Inf] %count% godzin" day: "{1} %count% dzień|[2,Inf] %count% dni" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml index 7fe2901..a5e7ea7 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] agora" future: "[0,Inf] agora" second: - past: "{1} %count% segundo atrás|[2,Inf] %count% segundos atrás" - future: "{1} %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora" + past: "[0,1] %count% segundo atrás|[2,Inf] %count% segundos atrás" + future: "[0,1] %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora" minute: past: "{1} %count% minuto atrás|[2,Inf] %count% minutos atrás" future: "{1} %count% minuto a partir de agora|[2,Inf] %count% minutos a partir de agora" @@ -24,7 +24,7 @@ year: future: "{1} %count% ano a partir de agora|[2,Inf] %count% anos a partir de agora" compound: - second: "{1} %count% segundo|[2,Inf] %count% segundos" + second: "[0,1] %count% segundo|[2,Inf] %count% segundos" minute: "{1} %count% minuto|[2,Inf] %count% minutos" hour: "{1} %count% hora|[2,Inf] %count% horas" day: "{1} %count% dia|[2,Inf] %count% dias" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml index b771ff4..221b8bf 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] atrás" future: "[0,Inf] a partir de agora" second: - past: "{1} %count% segundo atrás|[2,Inf] %count% segundos atrás" - future: "{1} %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora" + past: "[0,1] %count% segundo atrás|[2,Inf] %count% segundos atrás" + future: "[0,1] %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora" minute: past: "{1} %count% minuto atrás|[2,Inf] %count% minutos atrás" future: "{1} %count% minuto a partir de agora|[2,Inf] %count% minutos a partir de agora" @@ -24,7 +24,7 @@ year: future: "{1} %count% ano a partir de agora|[2,Inf] %count% anos a partir de agora" compound: - second: "{1} %count% segundo|[2,Inf] %count% segundos" + second: "[0,1] %count% segundo|[2,Inf] %count% segundos" minute: "{1} %count% minuto|[2,Inf] %count% minutos" hour: "{1} %count% hora|[2,Inf] %count% horas" day: "{1} %count% dia|[2,Inf] %count% dias" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml index 6c54c71..9d83184 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] mai înainte" future: "[0,Inf] imediat" second: - past: "{1} %count% secundă în urmă|[2,Inf] %count% secunde în urmă" - future: "{1} %count% secundă de acum|[2,Inf] %count% secundă de acum" + past: "[0,1] %count% secundă în urmă|[2,Inf] %count% secunde în urmă" + future: "[0,1] %count% secundă de acum|[2,Inf] %count% secundă de acum" minute: past: "{1} %count% minut în urmă|[2,Inf] %count% minute în urmă" future: "{1} %count% minut de acum|[2,Inf] %count% minute de acum" @@ -24,7 +24,7 @@ year: future: "{1} %count% an de acum|[2,Inf] %count% ani de acum" compound: - second: "{1} %count% secundă|[2,Inf] %count% secunde" + second: "[0,1] %count% secundă|[2,Inf] %count% secunde" minute: "{1} %count% minut|[2,Inf] %count% minute" hour: "{1} %count% oră|[2,Inf] %count% ore" day: "{1} %count% zi|[2,Inf] %count% zile" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml index 69f30e3..ca7da99 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml @@ -24,7 +24,7 @@ year: future: "[1,Inf] อีก %count% ปี" compound: - second: "[1,Inf] %count% วินาที" + second: "[0,Inf] %count% วินาที" minute: "[1,Inf] %count% นาที" hour: "[1,Inf] %count% ชั่วโมง" day: "[1,Inf] %count% วัน" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml index 8573ef9..04325cf 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml @@ -2,8 +2,8 @@ just_now: past: "[0,Inf] şimdi" future: "[0,Inf] şimdi" second: - past: "{1} %count% saniye önce|[2,Inf] %count% saniye önce" - future: "{1} %count% saniye sonra|[2,Inf] %count% saniye sonra" + past: "[0,1] %count% saniye önce|[2,Inf] %count% saniye önce" + future: "[0,1] %count% saniye sonra|[2,Inf] %count% saniye sonra" minute: past: "{1} %count% dakika önce|[2,Inf] %count% dakika önce" future: "{1} %count% dakika sonra|[2,Inf] %count% dakika sonra" @@ -24,7 +24,7 @@ year: future: "{1} %count% yıl sonra|[2,Inf] %count% yıl sonra" compound: - second: "{1} %count% saniye|[2,Inf] %count% saniye" + second: "[0,1] %count% saniye|[2,Inf] %count% saniye" minute: "{1} %count% dakika|[2,Inf] %count% dakika" hour: "{1} %count% saat|[2,Inf] %count% saat" day: "{1} %count% gün|[2,Inf] %count% gün" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml index 4d5cc40..d0bddc5 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml @@ -24,7 +24,7 @@ year: future: "[1,Inf] %count% 年后" compound: - second: "[1,Inf] %count% 秒" + second: "[0,Inf] %count% 秒" minute: "[1,Inf] %count% 分钟" hour: "[1,Inf] %count% 小时" day: "[1,Inf] %count% 天" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml index 5be5bb9..b11a092 100644 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml @@ -24,7 +24,7 @@ year: future: "[1,Inf] %count% 年後" compound: - second: "[1,Inf] %count% 秒" + second: "[0,Inf] %count% 秒" minute: "[1,Inf] %count% 分鐘" hour: "[1,Inf] %count% 小時" day: "[1,Inf] %count% 天" diff --git a/tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php b/tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php index dca4d01..a061e97 100644 --- a/tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/Aeon/Calendar/FormatterTest.php @@ -46,4 +46,40 @@ public function test_format_relative_time_unit() : void $formatter->timeUnit($timeUnit) ); } + + public function test_format_time_units_smaller_than_1_sec() : void + { + $timeUnit = TimeUnit::milliseconds(200); + + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame( + '0.2 second', + $formatter->timeUnit($timeUnit) + ); + } + + public function test_format_time_units_smaller_than_1_ms() : void + { + $timeUnit = TimeUnit::precise(0.000002); + + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame( + '0 second', + $formatter->timeUnit($timeUnit) + ); + } + + public function test_format_zero_seconds_time_unit() : void + { + $timeUnit = TimeUnit::precise(0); + + $formatter = new Formatter(Builder::build('en')); + + $this->assertSame( + '0 second', + $formatter->timeUnit($timeUnit) + ); + } } From e31a256ddf5cc056cdb011c4159df69c3bd4b15b Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Sat, 27 Feb 2021 21:08:01 +0000 Subject: [PATCH 143/193] Updated CHANGELOG.md --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c20e56..039e130 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [Unreleased] - 2021-02-27 + +### Fixed +- [#125](https://github.com/coduo/php-humanizer/pull/125) - **humanization of time unit less than 1 second** - [@norberttech](https://github.com/norberttech) + ## [4.0.0] - 2021-02-25 ### Added From 30e08d28716d473b061875e27c92d47f24190fce Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Sat, 27 Feb 2021 21:09:43 +0000 Subject: [PATCH 144/193] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 039e130..8669bd4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2021-02-27 +## [4.0.1] - 2021-02-27 ### Fixed - [#125](https://github.com/coduo/php-humanizer/pull/125) - **humanization of time unit less than 1 second** - [@norberttech](https://github.com/norberttech) From 77e2f496eb65fb3cdfabacf25c54c6f0cbf333e6 Mon Sep 17 00:00:00 2001 From: "Chun-Sheng, Li" Date: Fri, 12 Mar 2021 23:19:05 +0800 Subject: [PATCH 145/193] Improve assertions (#126) --- .../Tests/DateTime/DifferenceTest.php | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php index c1dd340..23e8b1e 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTime/DifferenceTest.php @@ -43,7 +43,7 @@ public function test_calculate_diff_between_present_and_past_date_in_hours() : v $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 11:00:00')); $this->assertInstanceOf(Hour::class, $diff->getUnit()); $this->assertSame(2, $diff->getQuantity()); - $this->assertSame(true, $diff->isPast()); + $this->assertTrue($diff->isPast()); } public function test_calculate_diff_between_present_and_future_date_in_hours() : void @@ -51,7 +51,7 @@ public function test_calculate_diff_between_present_and_future_date_in_hours() : $diff = new Difference(new \DateTime('2014-04-26 13:00:00'), new \DateTime('2014-04-26 16:00:00')); $this->assertInstanceOf(Hour::class, $diff->getUnit()); $this->assertSame(3, $diff->getQuantity()); - $this->assertSame(false, $diff->isPast()); + $this->assertFalse($diff->isPast()); } public function test_calculate_diff_between_present_and_past_date_in_days() : void @@ -59,7 +59,7 @@ public function test_calculate_diff_between_present_and_past_date_in_days() : vo $diff = new Difference(new \DateTime('2014-04-10'), new \DateTime('2014-04-09')); $this->assertInstanceOf(Day::class, $diff->getUnit()); $this->assertSame(1, $diff->getQuantity()); - $this->assertSame(true, $diff->isPast()); + $this->assertTrue($diff->isPast()); } public function test_calculate_diff_between_present_and_future_date_in_days() : void @@ -67,7 +67,7 @@ public function test_calculate_diff_between_present_and_future_date_in_days() : $diff = new Difference(new \DateTime('2014-04-10'), new \DateTime('2014-04-11')); $this->assertInstanceOf(Day::class, $diff->getUnit()); $this->assertSame(1, $diff->getQuantity()); - $this->assertSame(false, $diff->isPast()); + $this->assertFalse($diff->isPast()); } public function test_calculate_diff_between_present_and_past_date_in_weeks() : void @@ -75,7 +75,7 @@ public function test_calculate_diff_between_present_and_past_date_in_weeks() : v $diff = new Difference(new \DateTime('2014-04-15'), new \DateTime('2014-04-01')); $this->assertInstanceOf(Week::class, $diff->getUnit()); $this->assertSame(2, $diff->getQuantity()); - $this->assertSame(true, $diff->isPast()); + $this->assertTrue($diff->isPast()); } public function test_calculate_diff_between_present_and_future_date_in_weeks() : void @@ -83,7 +83,7 @@ public function test_calculate_diff_between_present_and_future_date_in_weeks() : $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-04-15')); $this->assertInstanceOf(Week::class, $diff->getUnit()); $this->assertSame(2, $diff->getQuantity()); - $this->assertSame(false, $diff->isPast()); + $this->assertFalse($diff->isPast()); } public function test_calculate_diff_between_present_and_past_date_in_months() : void @@ -91,7 +91,7 @@ public function test_calculate_diff_between_present_and_past_date_in_months() : $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-03-01')); $this->assertInstanceOf(Month::class, $diff->getUnit()); $this->assertSame(1, $diff->getQuantity()); - $this->assertSame(true, $diff->isPast()); + $this->assertTrue($diff->isPast()); } public function test_calculate_diff_between_present_and_future_date_in_months() : void @@ -99,7 +99,7 @@ public function test_calculate_diff_between_present_and_future_date_in_months() $diff = new Difference(new \DateTime('2014-04-01'), new \DateTime('2014-05-01')); $this->assertInstanceOf(Month::class, $diff->getUnit()); $this->assertSame(1, $diff->getQuantity()); - $this->assertSame(false, $diff->isPast()); + $this->assertFalse($diff->isPast()); } public function test_calculate_diff_between_present_and_past_date_in_years() : void @@ -107,7 +107,7 @@ public function test_calculate_diff_between_present_and_past_date_in_years() : v $diff = new Difference(new \DateTime('2014-01-01'), new \DateTime('2012-01-01')); $this->assertInstanceOf(Year::class, $diff->getUnit()); $this->assertSame(2, $diff->getQuantity()); - $this->assertSame(true, $diff->isPast()); + $this->assertTrue($diff->isPast()); } public function test_calculate_diff_between_present_and_future_date_in_years() : void @@ -115,6 +115,6 @@ public function test_calculate_diff_between_present_and_future_date_in_years() : $diff = new Difference(new \DateTime('2014-01-01'), new \DateTime('2015-01-01')); $this->assertInstanceOf(Year::class, $diff->getUnit()); $this->assertSame(1, $diff->getQuantity()); - $this->assertSame(false, $diff->isPast()); + $this->assertFalse($diff->isPast()); } } From fbf22ae22157f569f24ff23710e96264a272adb6 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Fri, 12 Mar 2021 15:19:32 +0000 Subject: [PATCH 146/193] Updated CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8669bd4..9a27d3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## [Unreleased] - 2021-03-12 + +### Changed +- [#126](https://github.com/coduo/php-humanizer/pull/126) - **Using the `assertTrue` to assert expected is `true`.** - [@peter279k](https://github.com/peter279k) +- [#126](https://github.com/coduo/php-humanizer/pull/126) - **Using the `assertFalse` to assert expected is `false`.** - [@peter279k](https://github.com/peter279k) + ## [4.0.1] - 2021-02-27 ### Fixed From fb264c8fbfb94f7a10272ac9fca576d8aa053b4a Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 20 Jun 2021 16:31:34 +0200 Subject: [PATCH 147/193] Updated Aeon Calendar dependency --- composer.json | 2 +- composer.lock | 212 ++++++++++++++++++++++++++------------------------ 2 files changed, 111 insertions(+), 103 deletions(-) diff --git a/composer.json b/composer.json index 92dbc7a..2157c14 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ "php": "^7.4 | ^8.0", "symfony/translation": "^4.4|^5.0", "symfony/yaml": "^4.4|^5.0", - "aeon-php/calendar": ">=0.16.1" + "aeon-php/calendar": "^0.16.1 || ^1.0" }, "require-dev": { "thunderer/shortcode": "^0.7", diff --git a/composer.lock b/composer.lock index 1753b0c..2d9cafb 100644 --- a/composer.lock +++ b/composer.lock @@ -4,24 +4,24 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c74a1cca580ca33e81761900ec3f88f1", + "content-hash": "8f063f4f28cc22ab51375a30fefe67b7", "packages": [ { "name": "aeon-php/calendar", - "version": "0.16.1", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/aeon-php/calendar.git", - "reference": "9509656c6b01024aad6158628fc8c950f9cf1199" + "reference": "0e1d1a958283b06d40748355547b455418a52be5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aeon-php/calendar/zipball/9509656c6b01024aad6158628fc8c950f9cf1199", - "reference": "9509656c6b01024aad6158628fc8c950f9cf1199", + "url": "https://api.github.com/repos/aeon-php/calendar/zipball/0e1d1a958283b06d40748355547b455418a52be5", + "reference": "0e1d1a958283b06d40748355547b455418a52be5", "shasum": "" }, "require": { - "php": ">=7.4.2" + "php": "^7.4.2 || ^8.0" }, "require-dev": { "ext-bcmath": "*" @@ -51,7 +51,7 @@ ], "support": { "issues": "https://github.com/aeon-php/calendar/issues", - "source": "https://github.com/aeon-php/calendar/tree/0.16.1" + "source": "https://github.com/aeon-php/calendar/tree/1.0.0" }, "funding": [ { @@ -59,20 +59,20 @@ "type": "github" } ], - "time": "2021-02-23T08:58:57+00:00" + "time": "2021-06-06T10:10:28+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.2.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", "shasum": "" }, "require": { @@ -81,7 +81,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -110,7 +110,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/master" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" }, "funding": [ { @@ -126,20 +126,20 @@ "type": "tidelift" } ], - "time": "2020-09-07T11:33:47+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.22.1", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", "shasum": "" }, "require": { @@ -151,7 +151,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -189,7 +189,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" }, "funding": [ { @@ -205,20 +205,20 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.22.1", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" + "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", "shasum": "" }, "require": { @@ -230,7 +230,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -269,7 +269,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0" }, "funding": [ { @@ -285,20 +285,20 @@ "type": "tidelift" } ], - "time": "2021-01-22T09:19:47+00:00" + "time": "2021-05-27T09:27:20+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.22.1", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" + "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", + "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", "shasum": "" }, "require": { @@ -307,7 +307,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.23-dev" }, "thanks": { "name": "symfony/polyfill", @@ -352,7 +352,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0" }, "funding": [ { @@ -368,24 +368,25 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/translation", - "version": "v5.2.3", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "c021864d4354ee55160ddcfd31dc477a1bc77949" + "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/c021864d4354ee55160ddcfd31dc477a1bc77949", - "reference": "c021864d4354ee55160ddcfd31dc477a1bc77949", + "url": "https://api.github.com/repos/symfony/translation/zipball/7e2603bcc598e14804c4d2359d8dc4ee3c40391b", + "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b", "shasum": "" }, "require": { "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php80": "^1.15", "symfony/translation-contracts": "^2.3" @@ -398,7 +399,7 @@ "symfony/yaml": "<4.4" }, "provide": { - "symfony/translation-implementation": "2.0" + "symfony/translation-implementation": "2.3" }, "require-dev": { "psr/log": "~1.0", @@ -408,6 +409,7 @@ "symfony/finder": "^4.4|^5.0", "symfony/http-kernel": "^5.0", "symfony/intl": "^4.4|^5.0", + "symfony/polyfill-intl-icu": "^1.21", "symfony/service-contracts": "^1.1.2|^2", "symfony/yaml": "^4.4|^5.0" }, @@ -445,7 +447,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v5.2.3" + "source": "https://github.com/symfony/translation/tree/v5.3.2" }, "funding": [ { @@ -461,20 +463,20 @@ "type": "tidelift" } ], - "time": "2021-01-27T10:15:41+00:00" + "time": "2021-06-06T09:51:56+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.3.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105" + "reference": "95c812666f3e91db75385749fe219c5e494c7f95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105", - "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95", + "reference": "95c812666f3e91db75385749fe219c5e494c7f95", "shasum": "" }, "require": { @@ -486,7 +488,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-main": "2.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -523,7 +525,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.3.0" + "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0" }, "funding": [ { @@ -539,20 +541,20 @@ "type": "tidelift" } ], - "time": "2020-09-28T13:05:58+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { "name": "symfony/yaml", - "version": "v5.2.3", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "338cddc6d74929f6adf19ca5682ac4b8e109cdb0" + "reference": "71719ab2409401711d619765aa255f9d352a59b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/338cddc6d74929f6adf19ca5682ac4b8e109cdb0", - "reference": "338cddc6d74929f6adf19ca5682ac4b8e109cdb0", + "url": "https://api.github.com/repos/symfony/yaml/zipball/71719ab2409401711d619765aa255f9d352a59b2", + "reference": "71719ab2409401711d619765aa255f9d352a59b2", "shasum": "" }, "require": { @@ -598,7 +600,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.2.3" + "source": "https://github.com/symfony/yaml/tree/v5.3.2" }, "funding": [ { @@ -614,7 +616,7 @@ "type": "tidelift" } ], - "time": "2021-02-03T04:42:09+00:00" + "time": "2021-06-06T09:51:56+00:00" } ], "packages-dev": [ @@ -747,16 +749,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.10.4", + "version": "v4.10.5", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" + "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f", + "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f", "shasum": "" }, "require": { @@ -797,9 +799,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5" }, - "time": "2020-12-20T10:01:03+00:00" + "time": "2021-05-03T19:11:20+00:00" }, { "name": "phar-io/manifest", @@ -1072,16 +1074,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.12.2", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "245710e971a030f42e08f4912863805570f23d39" + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", - "reference": "245710e971a030f42e08f4912863805570f23d39", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", "shasum": "" }, "require": { @@ -1133,22 +1135,22 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.12.2" + "source": "https://github.com/phpspec/prophecy/tree/1.13.0" }, - "time": "2020-12-19T10:15:11+00:00" + "time": "2021-03-17T13:42:18+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.5", + "version": "9.2.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" + "reference": "f6293e1b30a2354e8428e004689671b83871edde" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", + "reference": "f6293e1b30a2354e8428e004689671b83871edde", "shasum": "" }, "require": { @@ -1204,7 +1206,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.5" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" }, "funding": [ { @@ -1212,7 +1214,7 @@ "type": "github" } ], - "time": "2020-11-28T06:44:49+00:00" + "time": "2021-03-28T07:26:59+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1457,16 +1459,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.2", + "version": "9.5.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4" + "reference": "89ff45ea9d70e35522fb6654a2ebc221158de276" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f661659747f2f87f9e72095bb207bceb0f151cb4", - "reference": "f661659747f2f87f9e72095bb207bceb0f151cb4", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/89ff45ea9d70e35522fb6654a2ebc221158de276", + "reference": "89ff45ea9d70e35522fb6654a2ebc221158de276", "shasum": "" }, "require": { @@ -1496,7 +1498,7 @@ "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3", + "sebastian/type": "^2.3.2", "sebastian/version": "^3.0.2" }, "require-dev": { @@ -1544,7 +1546,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.2" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.5" }, "funding": [ { @@ -1556,7 +1558,7 @@ "type": "github" } ], - "time": "2021-02-02T14:45:58+00:00" + "time": "2021-06-05T04:49:07+00:00" }, { "name": "sebastian/cli-parser", @@ -2064,16 +2066,16 @@ }, { "name": "sebastian/global-state", - "version": "5.0.2", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", "shasum": "" }, "require": { @@ -2116,7 +2118,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" }, "funding": [ { @@ -2124,7 +2126,7 @@ "type": "github" } ], - "time": "2020-10-26T15:55:19+00:00" + "time": "2021-06-11T13:31:12+00:00" }, { "name": "sebastian/lines-of-code", @@ -2411,20 +2413,21 @@ "type": "github" } ], + "abandoned": true, "time": "2020-09-28T06:45:17+00:00" }, { "name": "sebastian/type", - "version": "2.3.1", + "version": "2.3.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", "shasum": "" }, "require": { @@ -2459,7 +2462,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" + "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" }, "funding": [ { @@ -2467,7 +2470,7 @@ "type": "github" } ], - "time": "2020-10-26T13:18:59+00:00" + "time": "2021-06-15T12:49:02+00:00" }, { "name": "sebastian/version", @@ -2630,30 +2633,35 @@ }, { "name": "webmozart/assert", - "version": "1.9.1", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", + "php": "^7.2 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" + "phpunit/phpunit": "^8.5.13" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -2677,9 +2685,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.9.1" + "source": "https://github.com/webmozarts/assert/tree/1.10.0" }, - "time": "2020-07-08T17:02:28+00:00" + "time": "2021-03-09T10:59:23+00:00" } ], "aliases": [], From d941401805af0daca3ae3b449f4e39f65e4e1142 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Sun, 20 Jun 2021 14:32:02 +0000 Subject: [PATCH 148/193] Updated CHANGELOG.md --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a27d3f..783ee90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ -## [Unreleased] - 2021-03-12 +## [Unreleased] - 2021-06-20 ### Changed +- [fb264c](https://github.com/coduo/php-humanizer/commit/fb264c8fbfb94f7a10272ac9fca576d8aa053b4a) - **Aeon Calendar dependency** - [@norberttech](https://github.com/norberttech) - [#126](https://github.com/coduo/php-humanizer/pull/126) - **Using the `assertTrue` to assert expected is `true`.** - [@peter279k](https://github.com/peter279k) - [#126](https://github.com/coduo/php-humanizer/pull/126) - **Using the `assertFalse` to assert expected is `false`.** - [@peter279k](https://github.com/peter279k) From 6bbcad9921c469d647bae9f62547375b6a6ee4c4 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Sun, 20 Jun 2021 14:33:48 +0000 Subject: [PATCH 149/193] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 783ee90..4f4c82f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2021-06-20 +## [4.0.2] - 2021-06-20 ### Changed - [fb264c](https://github.com/coduo/php-humanizer/commit/fb264c8fbfb94f7a10272ac9fca576d8aa053b4a) - **Aeon Calendar dependency** - [@norberttech](https://github.com/norberttech) From 57c6ed978f48dc810e5e4540cbec022c57fecb3c Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Thu, 1 Jul 2021 22:12:38 +0200 Subject: [PATCH 150/193] Delete FUNDING.yml --- .github/FUNDING.yml | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 4f8e199..0000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -github: [norberttech] From e3cd26b89539400c11563f3d3a1e45abb92bb261 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 1 Jul 2021 20:13:01 +0000 Subject: [PATCH 151/193] Updated CHANGELOG.md --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f4c82f..7279915 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [Unreleased] - 2021-07-01 + +### Changed +- [57c6ed](https://github.com/coduo/php-humanizer/commit/57c6ed978f48dc810e5e4540cbec022c57fecb3c) - **Delete FUNDING.yml** - [@norberttech](https://github.com/norberttech) + ## [4.0.2] - 2021-06-20 ### Changed From 6a369d9f17855736c5f38261f6765d084e177da2 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Mon, 13 Sep 2021 12:20:57 +0200 Subject: [PATCH 152/193] Update tests.yml --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5a2eb63..3df048c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -6,7 +6,7 @@ on: branches: - "4.x" schedule: - - cron: '* 8 * * *' + - cron: '0 8 * * *' jobs: compatibility: From 3107e2b6a568726f4cd40a23847ce1e305c99c95 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Mon, 13 Sep 2021 12:21:07 +0200 Subject: [PATCH 153/193] Update static-analyze.yml --- .github/workflows/static-analyze.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml index 45b6c03..0065d6a 100644 --- a/.github/workflows/static-analyze.yml +++ b/.github/workflows/static-analyze.yml @@ -6,7 +6,7 @@ on: branches: - "4.x" schedule: - - cron: '* 8 * * *' + - cron: '0 8 * * *' jobs: compatibility: @@ -74,4 +74,4 @@ jobs: run: "composer install --no-interaction --no-progress --no-suggest" - name: "Static Analyze" - run: "composer static:analyze" \ No newline at end of file + run: "composer static:analyze" From 5a28da797b941d35d03940c4d19fee386667ccd1 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Mon, 13 Sep 2021 10:21:17 +0000 Subject: [PATCH 154/193] Updated CHANGELOG.md --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7279915..7da77d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ -## [Unreleased] - 2021-07-01 +## [Unreleased] - 2021-09-13 ### Changed +- [3107e2](https://github.com/coduo/php-humanizer/commit/3107e2b6a568726f4cd40a23847ce1e305c99c95) - **Update static-analyze.yml** - [@norberttech](https://github.com/norberttech) +- [6a369d](https://github.com/coduo/php-humanizer/commit/6a369d9f17855736c5f38261f6765d084e177da2) - **Update tests.yml** - [@norberttech](https://github.com/norberttech) - [57c6ed](https://github.com/coduo/php-humanizer/commit/57c6ed978f48dc810e5e4540cbec022c57fecb3c) - **Delete FUNDING.yml** - [@norberttech](https://github.com/norberttech) ## [4.0.2] - 2021-06-20 From e5e75672efb7b18e4d1195afabd374fb59bf67d2 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz <1921950+norberttech@users.noreply.github.com> Date: Tue, 7 Jun 2022 20:50:10 +0200 Subject: [PATCH 155/193] Add support for php 8.1 dependencies (#129) * Add support for php 8.1 dependencies * Replaced phive with separated composer for tools --- .gitattributes | 5 +- .github/workflows/static-analyze.yml | 14 +- .github/workflows/tests.yml | 15 +- .gitignore | 3 +- .phive/phars.xml | 6 - .php_cs => .php-cs-fixer.php | 20 +- composer.json | 29 +- composer.lock | 465 +- psalm.xml | 3 +- .../PHPHumanizer/Collection/Formatter.php | 8 + .../PHPHumanizer/Number/RomanNumeral.php | 2 +- .../PHPHumanizer/String/BinarySuffix.php | 4 +- .../PHPHumanizer/String/MetricSuffix.php | 2 + .../PHPHumanizer/String/WordBreakpoint.php | 8 +- src/Coduo/PHPHumanizer/Translator/Builder.php | 2 +- tools/.gitignore | 1 + tools/composer.json | 11 + tools/composer.lock | 4827 +++++++++++++++++ tools/php-cs-fixer | Bin 0 -> 1852521 bytes 19 files changed, 5127 insertions(+), 298 deletions(-) delete mode 100644 .phive/phars.xml rename .php_cs => .php-cs-fixer.php (95%) create mode 100644 tools/.gitignore create mode 100644 tools/composer.json create mode 100644 tools/composer.lock create mode 100755 tools/php-cs-fixer diff --git a/.gitattributes b/.gitattributes index d5fe021..85ff30c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,10 +2,11 @@ *.phpt text eol=lf /composer.lock export-ignore /.github/ export-ignore -/.phive/ export-ignore /tests export-ignore +/tools export-ignore /.gitattributes export-ignore /.gitignore export-ignore -/.php_cs export-ignore +/.php-cs-fixer.php export-ignore +/baseline.xml export-ignore /phpstan.neon export-ignore /phpunit.xml export-ignore \ No newline at end of file diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml index 0065d6a..638387e 100644 --- a/.github/workflows/static-analyze.yml +++ b/.github/workflows/static-analyze.yml @@ -33,16 +33,7 @@ jobs: coverage: "pcov" php-version: "${{ matrix.php-version }}" ini-values: memory_limit=-1 - tools: phive, composer:v2 - - - name: "Cache Phive dependencies" - uses: "actions/cache@v2" - with: - path: | - ~/.phive - key: "${{ runner.os }}-phive-${{ hashFiles('**/phars.xml') }}" - restore-keys: | - ${{ runner.os }}-phive- + tools: composer:v2 - name: "Get Composer Cache Directory" id: composer-cache @@ -58,9 +49,6 @@ jobs: restore-keys: | php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- - - name: "Install tools" - run: "phive install --trust-gpg-keys E82B2FB314E9906E,CF1A108D0E7AE720,8A03EA3B385DBAA1,12CE0F1D262429A5 --force-accept-unsigned" - - name: "Install lowest dependencies" if: ${{ matrix.dependencies == 'lowest' }} run: "composer update --prefer-lowest --no-interaction --no-progress --no-suggest" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3df048c..a2e656d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -23,6 +23,7 @@ jobs: php-version: - "7.4" - "8.0" + - "8.1" operating-system: - "ubuntu-latest" @@ -36,16 +37,7 @@ jobs: coverage: "pcov" php-version: "${{ matrix.php-version }}" ini-values: memory_limit=-1 - tools: phive, composer:v2 - - - name: "Cache Phive dependencies" - uses: "actions/cache@v2" - with: - path: | - ~/.phive - key: "${{ runner.os }}-phive-${{ hashFiles('**/phars.xml') }}" - restore-keys: | - ${{ runner.os }}-phive- + tools: composer:v2 - name: "Get Composer Cache Directory" id: composer-cache @@ -61,9 +53,6 @@ jobs: restore-keys: | php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- - - name: "Install tools" - run: "phive install --trust-gpg-keys E82B2FB314E9906E,CF1A108D0E7AE720,8A03EA3B385DBAA1,12CE0F1D262429A5 --force-accept-unsigned" - - name: "Install lowest dependencies" if: ${{ matrix.dependencies == 'lowest' }} run: "composer update --prefer-lowest --no-interaction --no-progress --no-suggest" diff --git a/.gitignore b/.gitignore index 482dd47..a69f258 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ vendor/ bin/ -var/ -tools/ \ No newline at end of file +var/ \ No newline at end of file diff --git a/.phive/phars.xml b/.phive/phars.xml deleted file mode 100644 index a00e5c5..0000000 --- a/.phive/phars.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/.php_cs b/.php-cs-fixer.php similarity index 95% rename from .php_cs rename to .php-cs-fixer.php index d3e6651..66ddb29 100644 --- a/.php_cs +++ b/.php-cs-fixer.php @@ -4,9 +4,8 @@ ->files() ->in([ __DIR__ . '/src', - __DIR__ . '/tests' - ]) - ->notName('*.phpt'); + __DIR__ . '/tests', + ]); if (!\file_exists(__DIR__ . '/var')) { \mkdir(__DIR__ . '/var'); @@ -16,7 +15,9 @@ * This configuration was taken from https://github.com/sebastianbergmann/phpunit/blob/master/.php_cs.dist * and slightly adjusted. */ -return PhpCsFixer\Config::create() +$config = new PhpCsFixer\Config(); + +return $config ->setRiskyAllowed(true) ->setCacheFile(__DIR__.'/var/.php_cs.cache') ->setRules([ @@ -30,7 +31,6 @@ 'continue', 'declare', 'default', - 'die', 'do', 'exit', 'for', @@ -50,7 +50,7 @@ ], 'braces' => true, 'cast_spaces' => true, - 'class_attributes_separation' => ['elements' => ['const', 'method', 'property']], + 'class_attributes_separation' => ['elements' => ['const'=>'one', 'method'=>'one', 'property'=>'one']], 'combine_consecutive_issets' => true, 'combine_consecutive_unsets' => true, 'compact_nullable_typehint' => true, @@ -61,6 +61,7 @@ 'dir_constant' => true, 'elseif' => true, 'encoding' => true, + 'echo_tag_syntax' => true, 'explicit_indirect_variable' => true, 'explicit_string_variable' => true, 'full_opening_tag' => true, @@ -85,13 +86,13 @@ 'lowercase_static_reference' => true, 'magic_constant_casing' => true, 'magic_method_casing' => true, - 'method_argument_space' => ['ensure_fully_multiline' => true], + 'method_argument_space' => ['on_multiline' => 'ensure_fully_multiline'], 'modernize_types_casting' => false, 'multiline_comment_opening_closing' => true, 'multiline_whitespace_before_semicolons' => true, 'native_constant_invocation' => false, 'native_function_casing' => false, - 'native_function_invocation' => true, + 'native_function_invocation' => ['include'=>['@all']], 'native_function_type_declaration_casing' => true, 'new_with_braces' => false, 'no_alias_functions' => true, @@ -112,7 +113,6 @@ 'no_null_property_initialization' => true, 'no_php4_constructor' => true, 'no_short_bool_cast' => true, - 'no_short_echo_tag' => true, 'no_singleline_whitespace_before_semicolons' => true, 'no_spaces_after_function_name' => true, 'no_spaces_around_offset' => true, @@ -208,7 +208,7 @@ 'standardize_not_equals' => true, 'strict_param' => true, 'ternary_to_null_coalescing' => true, - 'trailing_comma_in_multiline_array' => true, + 'trailing_comma_in_multiline' => true, 'trim_array_spaces' => true, 'unary_operator_spaces' => true, 'visibility_required' => [ diff --git a/composer.json b/composer.json index 2157c14..7be652c 100644 --- a/composer.json +++ b/composer.json @@ -15,9 +15,9 @@ } ], "require": { - "php": "^7.4 | ^8.0", - "symfony/translation": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0", + "php": "~7.4 || ~8.0 || ~8.1", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0", "aeon-php/calendar": "^0.16.1 || ^1.0" }, "require-dev": { @@ -45,20 +45,21 @@ "@static:analyze", "@test" ], - "cs:php:fix": [ - "tools/php-cs-fixer fix --using-cache=no" + "test": [ + "tools/vendor/bin/phpunit" ], - "test" : [ - "phpunit" + "static:analyze": [ + "tools/vendor/bin/psalm --output-format=compact", + "tools/vendor/bin/phpstan analyze -c phpstan.neon", + "tools/vendor/bin/php-cs-fixer fix --dry-run" ], - "test:mutation": [ - "Composer\\Config::disableProcessTimeout", - "tools/infection" + "cs:php:fix": "tools/vendor/bin/php-cs-fixer fix", + "tools:install": "composer install --working-dir=./tools", + "post-install-cmd": [ + "@tools:install" ], - "static:analyze": [ - "tools/psalm --shepherd --stats", - "tools/phpstan analyze -c phpstan.neon", - "tools/php-cs-fixer fix --dry-run" + "post-update-cmd": [ + "@tools:install" ] } } diff --git a/composer.lock b/composer.lock index 2d9cafb..534a626 100644 --- a/composer.lock +++ b/composer.lock @@ -4,24 +4,24 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8f063f4f28cc22ab51375a30fefe67b7", + "content-hash": "4204f17fb768e8a680f1250930b5d246", "packages": [ { "name": "aeon-php/calendar", - "version": "1.0.0", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/aeon-php/calendar.git", - "reference": "0e1d1a958283b06d40748355547b455418a52be5" + "reference": "2b1c9bb578bd3bf9b47f9e7549bcd2a5bf5e4b25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aeon-php/calendar/zipball/0e1d1a958283b06d40748355547b455418a52be5", - "reference": "0e1d1a958283b06d40748355547b455418a52be5", + "url": "https://api.github.com/repos/aeon-php/calendar/zipball/2b1c9bb578bd3bf9b47f9e7549bcd2a5bf5e4b25", + "reference": "2b1c9bb578bd3bf9b47f9e7549bcd2a5bf5e4b25", "shasum": "" }, "require": { - "php": "^7.4.2 || ^8.0" + "php": "^7.4.2 || ~8.0 || ~8.1" }, "require-dev": { "ext-bcmath": "*" @@ -51,28 +51,22 @@ ], "support": { "issues": "https://github.com/aeon-php/calendar/issues", - "source": "https://github.com/aeon-php/calendar/tree/1.0.0" + "source": "https://github.com/aeon-php/calendar/tree/1.0.4" }, - "funding": [ - { - "url": "https://github.com/norberttech", - "type": "github" - } - ], - "time": "2021-06-06T10:10:28+00:00" + "time": "2022-01-28T13:12:23+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.4.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", "shasum": "" }, "require": { @@ -81,7 +75,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -110,7 +104,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" }, "funding": [ { @@ -126,32 +120,35 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.23.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-ctype": "*" + }, "suggest": { "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -159,12 +156,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -189,7 +186,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -205,32 +202,35 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-mbstring": "*" + }, "suggest": { "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -238,12 +238,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -269,7 +269,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { @@ -285,20 +285,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.23.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { @@ -307,7 +307,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -315,12 +315,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -352,7 +352,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" }, "funding": [ { @@ -368,31 +368,32 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2022-05-10T07:21:04+00:00" }, { "name": "symfony/translation", - "version": "v5.3.2", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b" + "reference": "1639abc1177d26bcd4320e535e664cef067ab0ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/7e2603bcc598e14804c4d2359d8dc4ee3c40391b", - "reference": "7e2603bcc598e14804c4d2359d8dc4ee3c40391b", + "url": "https://api.github.com/repos/symfony/translation/zipball/1639abc1177d26bcd4320e535e664cef067ab0ca", + "reference": "1639abc1177d26bcd4320e535e664cef067ab0ca", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15", + "symfony/polyfill-php80": "^1.16", "symfony/translation-contracts": "^2.3" }, "conflict": { "symfony/config": "<4.4", + "symfony/console": "<5.3", "symfony/dependency-injection": "<5.0", "symfony/http-kernel": "<5.0", "symfony/twig-bundle": "<5.0", @@ -402,16 +403,17 @@ "symfony/translation-implementation": "2.3" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/dependency-injection": "^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/http-kernel": "^5.0", - "symfony/intl": "^4.4|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.0|^6.0", + "symfony/intl": "^4.4|^5.0|^6.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2", - "symfony/yaml": "^4.4|^5.0" + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^4.4|^5.0|^6.0" }, "suggest": { "psr/log-implementation": "To use logging capability in translator", @@ -447,7 +449,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v5.3.2" + "source": "https://github.com/symfony/translation/tree/v5.4.9" }, "funding": [ { @@ -463,20 +465,20 @@ "type": "tidelift" } ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2022-05-06T12:33:37+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.4.0", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95" + "reference": "1211df0afa701e45a04253110e959d4af4ef0f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1211df0afa701e45a04253110e959d4af4ef0f07", + "reference": "1211df0afa701e45a04253110e959d4af4ef0f07", "shasum": "" }, "require": { @@ -488,7 +490,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -525,7 +527,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/translation-contracts/tree/v2.5.1" }, "funding": [ { @@ -541,32 +543,32 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/yaml", - "version": "v5.3.2", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "71719ab2409401711d619765aa255f9d352a59b2" + "reference": "e80f87d2c9495966768310fc531b487ce64237a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/71719ab2409401711d619765aa255f9d352a59b2", - "reference": "71719ab2409401711d619765aa255f9d352a59b2", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2", + "reference": "e80f87d2c9495966768310fc531b487ce64237a2", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<4.4" + "symfony/console": "<5.3" }, "require-dev": { - "symfony/console": "^4.4|^5.0" + "symfony/console": "^5.3|^6.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -600,7 +602,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.3.2" + "source": "https://github.com/symfony/yaml/tree/v5.4.3" }, "funding": [ { @@ -616,35 +618,36 @@ "type": "tidelift" } ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2022-01-26T16:32:32+00:00" } ], "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^9", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" }, "type": "library", "autoload": { @@ -671,7 +674,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" }, "funding": [ { @@ -687,41 +690,42 @@ "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-03-03T08:28:38+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -737,7 +741,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" }, "funding": [ { @@ -745,20 +749,20 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2022-03-03T13:19:32+00:00" }, { "name": "nikic/php-parser", - "version": "v4.10.5", + "version": "v4.14.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f" + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f", - "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", "shasum": "" }, "require": { @@ -799,22 +803,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" }, - "time": "2021-05-03T19:11:20+00:00" + "time": "2022-05-31T20:59:12+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { @@ -859,22 +863,22 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" + "source": "https://github.com/phar-io/manifest/tree/2.0.3" }, - "time": "2020-06-27T14:33:11+00:00" + "time": "2021-07-20T11:28:43+00:00" }, { "name": "phar-io/version", - "version": "3.1.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { @@ -910,9 +914,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.0" + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2021-02-23T14:00:09+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -969,16 +973,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", "shasum": "" }, "require": { @@ -989,7 +993,8 @@ "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.2" + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -1019,22 +1024,22 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" }, - "time": "2020-09-03T19:13:55+00:00" + "time": "2021-10-19T17:43:47+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.4.0", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + "reference": "77a32518733312af16a44300404e945338981de3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", "shasum": "" }, "require": { @@ -1042,7 +1047,8 @@ "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "*" + "ext-tokenizer": "*", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -1068,39 +1074,39 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" }, - "time": "2020-09-17T18:55:26+00:00" + "time": "2022-03-15T21:29:03+00:00" }, { "name": "phpspec/prophecy", - "version": "1.13.0", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", "shasum": "" }, "require": { "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", + "php": "^7.2 || ~8.0, <8.2", "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0", "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^6.0", + "phpspec/phpspec": "^6.0 || ^7.0", "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -1135,29 +1141,29 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.13.0" + "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" }, - "time": "2021-03-17T13:42:18+00:00" + "time": "2021-12-08T12:19:24+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.6", + "version": "9.2.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f6293e1b30a2354e8428e004689671b83871edde" + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", - "reference": "f6293e1b30a2354e8428e004689671b83871edde", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", + "nikic/php-parser": "^4.13.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -1206,7 +1212,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" }, "funding": [ { @@ -1214,20 +1220,20 @@ "type": "github" } ], - "time": "2021-03-28T07:26:59+00:00" + "time": "2022-03-07T09:28:20+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.5", + "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { @@ -1266,7 +1272,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" }, "funding": [ { @@ -1274,7 +1280,7 @@ "type": "github" } ], - "time": "2020-09-28T05:57:25+00:00" + "time": "2021-12-02T12:48:52+00:00" }, { "name": "phpunit/php-invoker", @@ -1459,16 +1465,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.5", + "version": "9.5.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "89ff45ea9d70e35522fb6654a2ebc221158de276" + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/89ff45ea9d70e35522fb6654a2ebc221158de276", - "reference": "89ff45ea9d70e35522fb6654a2ebc221158de276", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", "shasum": "" }, "require": { @@ -1480,11 +1486,11 @@ "ext-xml": "*", "ext-xmlwriter": "*", "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.1", + "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.3", + "phpunit/php-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", @@ -1498,7 +1504,7 @@ "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.2", + "sebastian/type": "^3.0", "sebastian/version": "^3.0.2" }, "require-dev": { @@ -1519,11 +1525,11 @@ } }, "autoload": { - "classmap": [ - "src/" - ], "files": [ "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1546,11 +1552,11 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.5" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" }, "funding": [ { - "url": "https://phpunit.de/donate.html", + "url": "https://phpunit.de/sponsors.html", "type": "custom" }, { @@ -1558,7 +1564,7 @@ "type": "github" } ], - "time": "2021-06-05T04:49:07+00:00" + "time": "2022-04-01T12:37:26+00:00" }, { "name": "sebastian/cli-parser", @@ -1926,16 +1932,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", "shasum": "" }, "require": { @@ -1977,7 +1983,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" }, "funding": [ { @@ -1985,20 +1991,20 @@ "type": "github" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2022-04-03T09:37:03+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", "shasum": "" }, "require": { @@ -2047,14 +2053,14 @@ } ], "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" }, "funding": [ { @@ -2062,20 +2068,20 @@ "type": "github" } ], - "time": "2020-09-28T05:24:23+00:00" + "time": "2021-11-11T14:18:36+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.3", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", "shasum": "" }, "require": { @@ -2118,7 +2124,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" }, "funding": [ { @@ -2126,7 +2132,7 @@ "type": "github" } ], - "time": "2021-06-11T13:31:12+00:00" + "time": "2022-02-14T08:28:10+00:00" }, { "name": "sebastian/lines-of-code", @@ -2413,33 +2419,32 @@ "type": "github" } ], - "abandoned": true, "time": "2020-09-28T06:45:17+00:00" }, { "name": "sebastian/type", - "version": "2.3.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -2462,7 +2467,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" }, "funding": [ { @@ -2470,7 +2475,7 @@ "type": "github" } ], - "time": "2021-06-15T12:49:02+00:00" + "time": "2022-03-15T09:54:48+00:00" }, { "name": "sebastian/version", @@ -2527,16 +2532,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "shasum": "" }, "require": { @@ -2565,7 +2570,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/master" + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" }, "funding": [ { @@ -2573,20 +2578,20 @@ "type": "github" } ], - "time": "2020-07-12T23:59:07+00:00" + "time": "2021-07-28T10:34:58+00:00" }, { "name": "thunderer/shortcode", - "version": "v0.7.4", + "version": "v0.7.5", "source": { "type": "git", "url": "https://github.com/thunderer/Shortcode.git", - "reference": "79a219febd774ba1ee66a2992fee1145b4367561" + "reference": "a4fee30613bd46efb421f8305aff0466a3268a99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thunderer/Shortcode/zipball/79a219febd774ba1ee66a2992fee1145b4367561", - "reference": "79a219febd774ba1ee66a2992fee1145b4367561", + "url": "https://api.github.com/repos/thunderer/Shortcode/zipball/a4fee30613bd46efb421f8305aff0466a3268a99", + "reference": "a4fee30613bd46efb421f8305aff0466a3268a99", "shasum": "" }, "require": { @@ -2627,27 +2632,27 @@ ], "support": { "issues": "https://github.com/thunderer/Shortcode/issues", - "source": "https://github.com/thunderer/Shortcode/tree/v0.7.4" + "source": "https://github.com/thunderer/Shortcode/tree/v0.7.5" }, - "time": "2020-03-08T11:25:13+00:00" + "time": "2022-01-13T18:53:33+00:00" }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -2685,9 +2690,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" } ], "aliases": [], @@ -2696,8 +2701,8 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^7.4 | ^8.0" + "php": "~7.4 || ~8.0 || ~8.1" }, "platform-dev": [], - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.2.0" } diff --git a/psalm.xml b/psalm.xml index 7d8635e..e836113 100644 --- a/psalm.xml +++ b/psalm.xml @@ -1,16 +1,17 @@ + diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php index 8912ad8..79d8eac 100644 --- a/src/Coduo/PHPHumanizer/Collection/Formatter.php +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -26,6 +26,8 @@ public function __construct(TranslatorInterface $translator, string $catalogue = } /** + * @psalm-suppress RedundantCastGivenDocblockType + * * @param array $collection */ public function format(array $collection, int $limit = null) : string @@ -52,6 +54,8 @@ public function format(array $collection, int $limit = null) : string } /** + * @psalm-suppress RedundantCastGivenDocblockType + * * @param array $collection */ private function formatCommaSeparatedWithLimit(array $collection, ?int $limit, int $count) : string @@ -67,6 +71,8 @@ private function formatCommaSeparatedWithLimit(array $collection, ?int $limit, i } /** + * @psalm-suppress RedundantCastGivenDocblockType + * * @param array $collection */ private function formatCommaSeparated(array $collection, int $count) : string @@ -80,6 +86,8 @@ private function formatCommaSeparated(array $collection, int $count) : string } /** + * @psalm-suppress RedundantCastGivenDocblockType + * * @param array $collection */ private function formatOnlyTwo(array $collection) : string diff --git a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php index e27a3f2..8141d5a 100644 --- a/src/Coduo/PHPHumanizer/Number/RomanNumeral.php +++ b/src/Coduo/PHPHumanizer/Number/RomanNumeral.php @@ -83,7 +83,7 @@ public function toRoman($number) : string */ public function fromRoman(string $string) { - if (\mb_strlen((string) $string) === 0 || 0 === \preg_match(self::ROMAN_STRING_MATCHER, (string) $string)) { + if (\mb_strlen($string) === 0 || 0 === \preg_match(self::ROMAN_STRING_MATCHER, $string)) { throw new \InvalidArgumentException(); } diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index 25f058f..9332d4a 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -44,7 +44,7 @@ public function __construct(int $number, string $locale = 'en', int $precision = $this->setSpecificPrecisionFormat($precision); } - $this->number = (int) $number; + $this->number = $number; $this->locale = $locale; /* @@ -70,10 +70,12 @@ public function convert() $value = ($this->number >= self::CONVERT_THRESHOLD) ? $this->number / (float) $size : $this->number; $formatter->setPattern($unitPattern); + /** @phpstan-ignore-next-line */ return $formatter->format($value); } } + /** @phpstan-ignore-next-line */ return $formatter->format($this->number); } diff --git a/src/Coduo/PHPHumanizer/String/MetricSuffix.php b/src/Coduo/PHPHumanizer/String/MetricSuffix.php index 69822f2..d39ad33 100644 --- a/src/Coduo/PHPHumanizer/String/MetricSuffix.php +++ b/src/Coduo/PHPHumanizer/String/MetricSuffix.php @@ -72,10 +72,12 @@ public function convert() : string $value = ($this->number >= self::CONVERT_THRESHOLD) ? $this->number / (float) $size : $this->number; $formatter->setPattern($unitPattern); + /** @phpstan-ignore-next-line */ return $formatter->format($value); } } + /** @phpstan-ignore-next-line */ return $formatter->format($this->number); } } diff --git a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php index 908c18e..909145c 100644 --- a/src/Coduo/PHPHumanizer/String/WordBreakpoint.php +++ b/src/Coduo/PHPHumanizer/String/WordBreakpoint.php @@ -16,19 +16,19 @@ final class WordBreakpoint implements Breakpoint public function calculatePosition(string $text, int $charactersCount) : int { if ($charactersCount < 0) { - return (int) \mb_strlen($text); + return \mb_strlen($text); } if ($charactersCount > \mb_strlen($text)) { - return (int) \mb_strlen($text); + return \mb_strlen($text); } $breakpoint = \mb_strpos($text, ' ', $charactersCount); if (false === $breakpoint) { - return (int) \mb_strlen($text); + return \mb_strlen($text); } - return (int) $breakpoint; + return $breakpoint; } } diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index d4db121..5eb04f1 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -30,8 +30,8 @@ public static function build(string $locale) : Translator $iterator = new \FilesystemIterator(__DIR__ . '/../Resources/translations'); $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.yml$/'); + /** @var \SplFileInfo $file */ foreach ($filter as $file) { - /* @var $file \SplFileInfo */ $resourceName = $file->getBasename('.yml'); [$fileDomain, $fileLocale] = \explode('.', $resourceName); $translator->addResource('yml', $file->getPathname(), $fileLocale, $fileDomain); diff --git a/tools/.gitignore b/tools/.gitignore new file mode 100644 index 0000000..5657f6e --- /dev/null +++ b/tools/.gitignore @@ -0,0 +1 @@ +vendor \ No newline at end of file diff --git a/tools/composer.json b/tools/composer.json new file mode 100644 index 0000000..797e9e8 --- /dev/null +++ b/tools/composer.json @@ -0,0 +1,11 @@ +{ + "name": "coduo/php-humanizer", + "description": "PHP Humanizer - Tools", + "autoload": {}, + "require-dev": { + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.6", + "phpstan/phpstan": "^1.0.0", + "friendsofphp/php-cs-fixer": "^3.1" + } +} diff --git a/tools/composer.lock b/tools/composer.lock new file mode 100644 index 0000000..702dbc0 --- /dev/null +++ b/tools/composer.lock @@ -0,0 +1,4827 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "489c61ff2dc7801b7b9e59e0d3622b3a", + "packages": [], + "packages-dev": [ + { + "name": "amphp/amp", + "version": "v2.6.2", + "source": { + "type": "git", + "url": "https://github.com/amphp/amp.git", + "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1", + "ext-json": "*", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^7 | ^8 | ^9", + "psalm/phar": "^3.11@dev", + "react/promise": "^2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "files": [ + "lib/functions.php", + "lib/Internal/functions.php" + ], + "psr-4": { + "Amp\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A non-blocking concurrency framework for PHP applications.", + "homepage": "https://amphp.org/amp", + "keywords": [ + "async", + "asynchronous", + "awaitable", + "concurrency", + "event", + "event-loop", + "future", + "non-blocking", + "promise" + ], + "support": { + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/amp/issues", + "source": "https://github.com/amphp/amp/tree/v2.6.2" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2022-02-20T17:52:18+00:00" + }, + { + "name": "amphp/byte-stream", + "version": "v1.8.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/byte-stream.git", + "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", + "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", + "shasum": "" + }, + "require": { + "amphp/amp": "^2", + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.4", + "friendsofphp/php-cs-fixer": "^2.3", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^6 || ^7 || ^8", + "psalm/phar": "^3.11.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "files": [ + "lib/functions.php" + ], + "psr-4": { + "Amp\\ByteStream\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A stream abstraction to make working with non-blocking I/O simple.", + "homepage": "http://amphp.org/byte-stream", + "keywords": [ + "amp", + "amphp", + "async", + "io", + "non-blocking", + "stream" + ], + "support": { + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/byte-stream/issues", + "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-03-30T17:13:30+00:00" + }, + { + "name": "composer/package-versions-deprecated", + "version": "1.11.99.5", + "source": { + "type": "git", + "url": "https://github.com/composer/package-versions-deprecated.git", + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7 || ^8" + }, + "replace": { + "ocramius/package-versions": "1.11.99" + }, + "require-dev": { + "composer/composer": "^1.9.3 || ^2.0@dev", + "ext-zip": "^1.13", + "phpunit/phpunit": "^6.5 || ^7" + }, + "type": "composer-plugin", + "extra": { + "class": "PackageVersions\\Installer", + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "PackageVersions\\": "src/PackageVersions" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "support": { + "issues": "https://github.com/composer/package-versions-deprecated/issues", + "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" + }, + "funding": [ + { + "url": "https://packagist.com/", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-01-17T14:14:24+00:00" + }, + { + "name": "composer/pcre", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be/" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.0.0" + }, + "funding": [ + { + "url": "https://packagist.com/", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-02-25T20:21:48+00:00" + }, + { + "name": "composer/semver", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de/" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be/" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl/" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com/", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-04-01T19:23:25+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "ced299686f41dce890debac69273b47ffe98a40c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "shasum": "" + }, + "require": { + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + }, + "funding": [ + { + "url": "https://packagist.com/", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-02-25T21:32:43+00:00" + }, + { + "name": "dnoegel/php-xdg-base-dir", + "version": "v0.1.1", + "source": { + "type": "git", + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "XdgBaseDir\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "implementation of xdg base directory specification for php", + "support": { + "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", + "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" + }, + "time": "2019-12-04T15:06:13+00:00" + }, + { + "name": "doctrine/annotations", + "version": "1.13.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.13.2" + }, + "time": "2021-08-05T19:00:23+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-03-03T08:28:38+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-02-28T11:07:21+00:00" + }, + { + "name": "felixfbecker/advanced-json-rpc", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "shasum": "" + }, + "require": { + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "php": "^7.1 || ^8.0", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "AdvancedJsonRpc\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "A more advanced JSONRPC implementation", + "support": { + "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", + "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" + }, + "time": "2021-06-11T22:34:44+00:00" + }, + { + "name": "felixfbecker/language-server-protocol", + "version": "v1.5.2", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-language-server-protocol.git", + "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", + "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpstan/phpstan": "*", + "squizlabs/php_codesniffer": "^3.1", + "vimeo/psalm": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "LanguageServerProtocol\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "PHP classes for the Language Server Protocol", + "keywords": [ + "language", + "microsoft", + "php", + "server" + ], + "support": { + "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" + }, + "time": "2022-03-02T22:36:06+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v3.8.0", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", + "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", + "shasum": "" + }, + "require": { + "composer/semver": "^3.2", + "composer/xdebug-handler": "^3.0.3", + "doctrine/annotations": "^1.13", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0", + "php-cs-fixer/diff": "^2.0", + "symfony/console": "^5.4 || ^6.0", + "symfony/event-dispatcher": "^5.4 || ^6.0", + "symfony/filesystem": "^5.4 || ^6.0", + "symfony/finder": "^5.4 || ^6.0", + "symfony/options-resolver": "^5.4 || ^6.0", + "symfony/polyfill-mbstring": "^1.23", + "symfony/polyfill-php80": "^1.25", + "symfony/polyfill-php81": "^1.25", + "symfony/process": "^5.4 || ^6.0", + "symfony/stopwatch": "^5.4 || ^6.0" + }, + "require-dev": { + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^1.5", + "mikey179/vfsstream": "^1.6.10", + "php-coveralls/php-coveralls": "^2.5.2", + "php-cs-fixer/accessible-object": "^1.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "phpunitgoodpractices/polyfill": "^1.5", + "phpunitgoodpractices/traits": "^1.9.1", + "symfony/phpunit-bridge": "^6.0", + "symfony/yaml": "^5.4 || ^6.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "support": { + "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.8.0" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2022-03-18T17:20:59+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2022-03-03T13:19:32+00:00" + }, + { + "name": "netresearch/jsonmapper", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/cweiske/jsonmapper.git", + "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", + "squizlabs/php_codesniffer": "~3.5" + }, + "type": "library", + "autoload": { + "psr-0": { + "JsonMapper": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@cweiske.de", + "homepage": "http://github.com/cweiske/jsonmapper/", + "role": "Developer" + } + ], + "description": "Map nested JSON structures onto PHP classes", + "support": { + "email": "cweiske@cweiske.de", + "issues": "https://github.com/cweiske/jsonmapper/issues", + "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0" + }, + "time": "2020-12-01T19:48:11+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.14.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" + }, + "time": "2022-05-31T20:59:12+00:00" + }, + { + "name": "openlss/lib-array2xml", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/nullivex/lib-array2xml.git", + "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", + "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "autoload": { + "psr-0": { + "LSS": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Bryan Tong", + "email": "bryan@nullivex.com", + "homepage": "https://www.nullivex.com/" + }, + { + "name": "Tony Butler", + "email": "spudz76@gmail.com", + "homepage": "https://www.nullivex.com/" + } + ], + "description": "Array2XML conversion library credit to lalit.org", + "homepage": "https://www.nullivex.com/", + "keywords": [ + "array", + "array conversion", + "xml", + "xml conversion" + ], + "support": { + "issues": "https://github.com/nullivex/lib-array2xml/issues", + "source": "https://github.com/nullivex/lib-array2xml/tree/master" + }, + "time": "2019-03-29T20:06:56+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "php-cs-fixer/diff", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", + "symfony/process": "^3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "sebastian/diff v3 backport support for PHP 5.6+", + "homepage": "https://github.com/PHP-CS-Fixer", + "keywords": [ + "diff" + ], + "support": { + "issues": "https://github.com/PHP-CS-Fixer/diff/issues", + "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" + }, + "time": "2020-10-14T08:32:19+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org/", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "time": "2021-10-19T17:43:47+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "77a32518733312af16a44300404e945338981de3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + }, + "time": "2022-03-15T21:29:03+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.15.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.2", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^6.0 || ^7.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com/" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + }, + "time": "2021-12-08T12:19:24+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.7.11", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "62fcadcde81b4037e42ad2489119d31c46f00191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/62fcadcde81b4037e42ad2489119d31c46f00191", + "reference": "62fcadcde81b4037e42ad2489119d31c46f00191", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "support": { + "issues": "https://github.com/phpstan/phpstan/issues", + "source": "https://github.com/phpstan/phpstan/tree/1.7.11" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpstan", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2022-06-07T08:47:03+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.15", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.13.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-03-07T09:28:20+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.5.20", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.0", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-01T12:37:26+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.2" + }, + "time": "2021-11-05T16:50:12+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-03T09:37:03+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-11-11T14:18:36+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-02-14T08:28:10+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-03-15T09:54:48+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "symfony/console", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/829d5d1bf60b2efeb0887b7436873becc71a45eb", + "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com/", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-18T06:17:34+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-05T16:45:39+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com/", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/36a017fa4cce1eff1b8e8129ff53513abcef05ba", + "reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-20T13:55:35+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/9b630f3427f3ebe7cd346c277a1408b00249dad9", + "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-15T08:07:45+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v5.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/cc1147cb11af1b43f503ac18f31aa3bec213aba8", + "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com/", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v5.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:53:40+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "433d05519ce6990bf3530fba6957499d327395c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", + "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-10T07:21:04+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/process", + "version": "v5.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", + "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/process/tree/v5.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-08T05:07:18+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com/", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-13T20:07:29+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v5.4.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", + "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/service-contracts": "^1|^2|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v5.4.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-18T16:06:09+00:00" + }, + { + "name": "symfony/string", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", + "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "conflict": { + "symfony/translation-contracts": ">=3.0" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com/", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-19T10:40:37+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + }, + { + "name": "vimeo/psalm", + "version": "4.23.0", + "source": { + "type": "git", + "url": "https://github.com/vimeo/psalm.git", + "reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/f1fe6ff483bf325c803df9f510d09a03fd796f88", + "reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88", + "shasum": "" + }, + "require": { + "amphp/amp": "^2.4.2", + "amphp/byte-stream": "^1.5", + "composer/package-versions-deprecated": "^1.8.0", + "composer/semver": "^1.4 || ^2.0 || ^3.0", + "composer/xdebug-handler": "^1.1 || ^2.0 || ^3.0", + "dnoegel/php-xdg-base-dir": "^0.1.1", + "ext-ctype": "*", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-tokenizer": "*", + "felixfbecker/advanced-json-rpc": "^3.0.3", + "felixfbecker/language-server-protocol": "^1.5", + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "nikic/php-parser": "^4.13", + "openlss/lib-array2xml": "^1.0", + "php": "^7.1|^8", + "sebastian/diff": "^3.0 || ^4.0", + "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0", + "symfony/polyfill-php80": "^1.25", + "webmozart/path-util": "^2.3" + }, + "provide": { + "psalm/psalm": "self.version" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "brianium/paratest": "^4.0||^6.0", + "ext-curl": "*", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpdocumentor/reflection-docblock": "^5", + "phpmyadmin/sql-parser": "5.1.0||dev-master", + "phpspec/prophecy": ">=1.9.0", + "phpunit/phpunit": "^9.0", + "psalm/plugin-phpunit": "^0.16", + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5", + "symfony/process": "^4.3 || ^5.0 || ^6.0", + "weirdan/prophecy-shim": "^1.0 || ^2.0" + }, + "suggest": { + "ext-curl": "In order to send data to shepherd", + "ext-igbinary": "^2.0.5 is required, used to serialize caching data" + }, + "bin": [ + "psalm", + "psalm-language-server", + "psalm-plugin", + "psalm-refactor", + "psalter" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev", + "dev-3.x": "3.x-dev", + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php", + "src/spl_object_id.php" + ], + "psr-4": { + "Psalm\\": "src/Psalm/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Brown" + } + ], + "description": "A static analysis tool for finding errors in PHP applications", + "keywords": [ + "code", + "inspection", + "php" + ], + "support": { + "issues": "https://github.com/vimeo/psalm/issues", + "source": "https://github.com/vimeo/psalm/tree/4.23.0" + }, + "time": "2022-04-28T17:35:49+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + }, + { + "name": "webmozart/path-util", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/path-util.git", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "webmozart/assert": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\PathUtil\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", + "support": { + "issues": "https://github.com/webmozart/path-util/issues", + "source": "https://github.com/webmozart/path-util/tree/2.3.0" + }, + "abandoned": "symfony/filesystem", + "time": "2015-12-17T08:42:14+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.2.0" +} diff --git a/tools/php-cs-fixer b/tools/php-cs-fixer new file mode 100755 index 0000000000000000000000000000000000000000..859a4c38b0f1091a195136d34f53c166253e449d GIT binary patch literal 1852521 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'^g7%hYO# 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�m$MJO@XIb1Lfoum@DyKQ(wrhvu_Oz8vM` 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�bl(HqYO$0W-H}klZ|YdrFZo)@*N_dT4(FC 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 EKPCXzng9R* literal 0 HcmV?d00001 From 1158b443ef197a0bc84bf4aff46743fb2767b4a4 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Tue, 7 Jun 2022 18:50:44 +0000 Subject: [PATCH 156/193] Updated CHANGELOG.md --- CHANGELOG.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7da77d0..45091bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,15 @@ -## [Unreleased] - 2021-09-13 +## [Unreleased] - 2022-06-07 + +### Added +- [#129](https://github.com/coduo/php-humanizer/pull/129) - **support for PHP 8.1 and symfony 6 dependencies** - [@norberttech](https://github.com/norberttech) ### Changed -- [3107e2](https://github.com/coduo/php-humanizer/commit/3107e2b6a568726f4cd40a23847ce1e305c99c95) - **Update static-analyze.yml** - [@norberttech](https://github.com/norberttech) -- [6a369d](https://github.com/coduo/php-humanizer/commit/6a369d9f17855736c5f38261f6765d084e177da2) - **Update tests.yml** - [@norberttech](https://github.com/norberttech) - [57c6ed](https://github.com/coduo/php-humanizer/commit/57c6ed978f48dc810e5e4540cbec022c57fecb3c) - **Delete FUNDING.yml** - [@norberttech](https://github.com/norberttech) +### Updated +- [3107e2](https://github.com/coduo/php-humanizer/commit/3107e2b6a568726f4cd40a23847ce1e305c99c95) - **static-analyze.yml** - [@norberttech](https://github.com/norberttech) +- [6a369d](https://github.com/coduo/php-humanizer/commit/6a369d9f17855736c5f38261f6765d084e177da2) - **tests.yml** - [@norberttech](https://github.com/norberttech) + ## [4.0.2] - 2021-06-20 ### Changed From d62bb254b28654ed364accf262eeb1ff0663e392 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Tue, 7 Jun 2022 18:51:30 +0000 Subject: [PATCH 157/193] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45091bf..e5d8d94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2022-06-07 +## [4.0.3] - 2022-06-07 ### Added - [#129](https://github.com/coduo/php-humanizer/pull/129) - **support for PHP 8.1 and symfony 6 dependencies** - [@norberttech](https://github.com/norberttech) From ce1579e12bec5a9b9d28a1e0c16652f452983816 Mon Sep 17 00:00:00 2001 From: "Chun-Sheng, Li" Date: Wed, 30 Nov 2022 03:58:46 +0800 Subject: [PATCH 158/193] Using assertSame to make assertEquals restricted (#131) --- .../Tests/CollectionHumanizerTest.php | 2 +- .../Tests/DateTimeHumanizerTest.php | 8 ++-- .../Tests/NumberHumanizerTest.php | 40 +++++++++---------- .../Tests/StringHumanizerTest.php | 10 ++--- 4 files changed, 30 insertions(+), 30 deletions(-) diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php index 85ac75a..76737e0 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php @@ -21,7 +21,7 @@ final class CollectionHumanizerTest extends TestCase */ public function test_oxford_collections_humanizing($collection, $limit, $locale, $expectedResult) : void { - $this->assertEquals($expectedResult, CollectionHumanizer::oxford($collection, $limit, $locale)); + $this->assertSame($expectedResult, CollectionHumanizer::oxford($collection, $limit, $locale)); } public function oxfordCollectionProvider() diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index 8ea725d..2d709a8 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -26,7 +26,7 @@ class DateTimeHumanizerTest extends TestCase */ public function test_humanize_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void { - $this->assertEquals($expected, DateTimeHumanizer::difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); + $this->assertSame($expected, DateTimeHumanizer::difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); } /** @@ -34,7 +34,7 @@ public function test_humanize_difference_between_dates(string $firstDate, string */ public function test_humanize_time_period(string $firstDate, string $secondDate, string $expected, string $locale) : void { - $this->assertEquals($expected, DateTimeHumanizer::timePeriod(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); + $this->assertSame($expected, DateTimeHumanizer::timePeriod(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); } /** @@ -42,7 +42,7 @@ public function test_humanize_time_period(string $firstDate, string $secondDate, */ public function test_humanize_precise_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void { - $this->assertEquals($expected, DateTimeHumanizer::timePeriodPrecise(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); + $this->assertSame($expected, DateTimeHumanizer::timePeriodPrecise(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); } /** @@ -50,7 +50,7 @@ public function test_humanize_precise_difference_between_dates(string $firstDate */ public function test_humanize_time_period_precise(string $firstDate, string $secondDate, string $expected, string $locale) : void { - $this->assertEquals($expected, DateTimeHumanizer::preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); + $this->assertSame($expected, DateTimeHumanizer::preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); } /** diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php index d0b6142..ccca05e 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php @@ -24,7 +24,7 @@ class NumberHumanizerTest extends TestCase */ public function test_return_ordinal_suffix($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinal($number)); + $this->assertSame($expected, NumberHumanizer::ordinal($number)); } /** @@ -35,7 +35,7 @@ public function test_return_ordinal_suffix($expected, $number) : void */ public function test_return_ordinal_suffix_dutch($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'nl')); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'nl')); } /** @@ -46,7 +46,7 @@ public function test_return_ordinal_suffix_dutch($expected, $number) : void */ public function test_return_ordinal_suffix_indonesian($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'id')); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'id')); } /** @@ -57,7 +57,7 @@ public function test_return_ordinal_suffix_indonesian($expected, $number) : void */ public function test_return_ordinal_suffix_spanish($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'es')); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'es')); } /** @@ -68,7 +68,7 @@ public function test_return_ordinal_suffix_spanish($expected, $number) : void */ public function test_return_ordinal_suffix_italian($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'it')); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'it')); } /** @@ -79,7 +79,7 @@ public function test_return_ordinal_suffix_italian($expected, $number) : void */ public function test_return_ordinal_suffix_german($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'de')); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'de')); } /** @@ -90,7 +90,7 @@ public function test_return_ordinal_suffix_german($expected, $number) : void */ public function test_return_ordinal_suffix_french($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinal($number, 'fr')); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'fr')); } /** @@ -102,7 +102,7 @@ public function test_return_ordinal_suffix_french($expected, $number) : void */ public function test_ordinalize_numbers($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number)); + $this->assertSame($expected, NumberHumanizer::ordinalize($number)); } /** @@ -114,7 +114,7 @@ public function test_ordinalize_numbers($expected, $number) : void */ public function test_ordinalize_numbers_dutch($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'nl')); + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'nl')); } /** @@ -126,7 +126,7 @@ public function test_ordinalize_numbers_dutch($expected, $number) : void */ public function test_ordinalize_numbers_indonesian($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'id')); + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'id')); } /** @@ -137,7 +137,7 @@ public function test_ordinalize_numbers_indonesian($expected, $number) : void */ public function test_ordinalize_numbers_portuguese($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'pt')); + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'pt')); } /** @@ -148,7 +148,7 @@ public function test_ordinalize_numbers_portuguese($expected, $number) : void */ public function test_ordinalize_numbers_spanish($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'es')); + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'es')); } /** @@ -159,7 +159,7 @@ public function test_ordinalize_numbers_spanish($expected, $number) : void */ public function test_ordinalize_numbers_italian($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'it')); + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'it')); } /** @@ -170,7 +170,7 @@ public function test_ordinalize_numbers_italian($expected, $number) : void */ public function test_ordinalize_numbers_german($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'de')); + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'de')); } /** @@ -181,7 +181,7 @@ public function test_ordinalize_numbers_german($expected, $number) : void */ public function test_ordinalize_numbers_french($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'fr')); + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'fr')); } /** @@ -193,7 +193,7 @@ public function test_ordinalize_numbers_french($expected, $number) : void */ public function test_convert_number_to_string_with_binary_suffix($expected, $number, $locale = 'en') : void { - $this->assertEquals($expected, NumberHumanizer::binarySuffix($number, $locale)); + $this->assertSame($expected, NumberHumanizer::binarySuffix($number, $locale)); } /** @@ -206,7 +206,7 @@ public function test_convert_number_to_string_with_binary_suffix($expected, $num */ public function test_convert_number_to_string_with_precise_binary_suffix($expected, $number, $precision, $locale = 'en') : void { - $this->assertEquals($expected, NumberHumanizer::preciseBinarySuffix($number, $precision, $locale)); + $this->assertSame($expected, NumberHumanizer::preciseBinarySuffix($number, $precision, $locale)); } public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_negative_precision() : void @@ -232,7 +232,7 @@ public function test_statically_throw_exception_when_converting_to_string_with_p */ public function test_convert_number_to_string_with_metric_suffix($expected, $number, $locale = 'en') : void { - $this->assertEquals($expected, NumberHumanizer::metricSuffix($number, $locale)); + $this->assertSame($expected, NumberHumanizer::metricSuffix($number, $locale)); } public function test_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() : void @@ -250,7 +250,7 @@ public function test_statically_throw_exception_when_converting_to_string_with_m */ public function test_converts_numbers_to_roman($expected, $number) : void { - $this->assertEquals($expected, NumberHumanizer::toRoman($number)); + $this->assertSame($expected, NumberHumanizer::toRoman($number)); } /** @@ -261,7 +261,7 @@ public function test_converts_numbers_to_roman($expected, $number) : void */ public function test_convert_roman_numbers_to_arabic($number, $expected) : void { - $this->assertEquals($expected, NumberHumanizer::fromRoman($number)); + $this->assertSame($expected, NumberHumanizer::fromRoman($number)); } /** diff --git a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php index 2312c74..9a27009 100644 --- a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php @@ -27,7 +27,7 @@ class StringHumanizerTest extends TestCase */ public function test_humanize_strings($input, $expected, $capitalize, $separator, array $forbiddenWords) : void { - $this->assertEquals($expected, StringHumanizer::humanize($input, $capitalize, $separator, $forbiddenWords)); + $this->assertSame($expected, StringHumanizer::humanize($input, $capitalize, $separator, $forbiddenWords)); } /** @@ -40,7 +40,7 @@ public function test_humanize_strings($input, $expected, $capitalize, $separator */ public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters($text, $expected, $charactersCount, $append = '') : void { - $this->assertEquals($expected, StringHumanizer::truncate($text, $charactersCount, $append)); + $this->assertSame($expected, StringHumanizer::truncate($text, $charactersCount, $append)); } /** @@ -54,7 +54,7 @@ public function test_truncate_string_to_word_closest_to_a_certain_number_of_char */ public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') : void { - $this->assertEquals($expected, StringHumanizer::truncateHtml($text, $charactersCount, $allowedTags, $append)); + $this->assertSame($expected, StringHumanizer::truncateHtml($text, $charactersCount, $allowedTags, $append)); } /** @@ -65,7 +65,7 @@ public function test_truncate_string_to_word_closest_to_a_certain_number_of_char */ public function test_remove_all_shortcodes_from_text($text, $expected) : void { - $this->assertEquals($expected, StringHumanizer::removeShortcodes($text)); + $this->assertSame($expected, StringHumanizer::removeShortcodes($text)); } /** @@ -76,7 +76,7 @@ public function test_remove_all_shortcodes_from_text($text, $expected) : void */ public function test_remove_only_shortcode_tags_from_text($text, $expected) : void { - $this->assertEquals($expected, StringHumanizer::removeShortcodeTags($text)); + $this->assertSame($expected, StringHumanizer::removeShortcodeTags($text)); } public function removeAllShortcodesProvider() From 950ddc0b2e7291e2fb4faeb30d213c5512aa0a7c Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Tue, 29 Nov 2022 19:59:11 +0000 Subject: [PATCH 159/193] Updated CHANGELOG.md --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5d8d94..b117856 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [Unreleased] - 2022-11-29 + +### Changed +- [#131](https://github.com/coduo/php-humanizer/pull/131) - **Using the assertSame to make assert equals restricted.** - [@peter279k](https://github.com/peter279k) + ## [4.0.3] - 2022-06-07 ### Added From bb832d503a44e8fc9222a7f7c37b097edbc15585 Mon Sep 17 00:00:00 2001 From: "Chun-Sheng, Li" Date: Wed, 30 Nov 2022 23:03:49 +0800 Subject: [PATCH 160/193] Fix CI status badge URL (#132) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 164d37a..37c7b7a 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![License](https://poser.pugx.org/coduo/php-humanizer/license)](https://packagist.org/packages/coduo/php-humanizer) ### Tests -* [![Build Status](https://travis-ci.com/coduo/php-humanizer.svg?branch=4.x)](https://travis-ci.com/coduo/php-humanizer) - 4.x +* ![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=4.x) - 4.x [Readme for 4.x version](https://github.com/coduo/php-humanizer/tree/4.x/README.md) From 9e7e2c48f8579dc555ec48f28771e82f76089cc4 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Wed, 30 Nov 2022 15:04:19 +0000 Subject: [PATCH 161/193] Updated CHANGELOG.md --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b117856..daa876d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,11 @@ -## [Unreleased] - 2022-11-29 +## [Unreleased] - 2022-11-30 ### Changed - [#131](https://github.com/coduo/php-humanizer/pull/131) - **Using the assertSame to make assert equals restricted.** - [@peter279k](https://github.com/peter279k) +### Fixed +- [#132](https://github.com/coduo/php-humanizer/pull/132) - **Fix the CI status badge URL.** - [@peter279k](https://github.com/peter279k) + ## [4.0.3] - 2022-06-07 ### Added From d8b65fadd3e242a7a0409c392609d1764df93b00 Mon Sep 17 00:00:00 2001 From: JeronyMo Date: Mon, 8 Jan 2024 13:20:18 +0100 Subject: [PATCH 162/193] Czech and Slovak added (#133) --- .../Resources/translations/difference.cs.yml | 35 +++++++++++++++++++ .../Resources/translations/difference.sk.yml | 35 +++++++++++++++++++ .../Resources/translations/oxford.cs.yml | 3 ++ .../Resources/translations/oxford.sk.yml | 3 ++ 4 files changed, 76 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml new file mode 100644 index 0000000..8c95565 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] právě teď" + future: "[0,Inf] právě teď" +second: + past: "{1} před vteřinou|[2, 4] před %count% vteřinami|[5,Inf] před %count% vteřinami" + future: "{1} za vteřinu|[2, 4] za %count% vteřiny|[5,Inf] za %count% vteřin" +minute: + past: "{1} před minutou|[2, Inf] před %count% minutami" + future: "{1} za minutu|[2, 4] za %count% minuty|[5,Inf] za %count% minut" +hour: + past: "{1} před hodinou|[2, Inf] před %count% hodinami" + future: "{1} za hodinu|[2, 4] za %count% hodiny|[5,Inf] za %count% hodin" +day: + past: "{1} včera|[2, Inf] před %count% dny" + future: "{1} zítra|[2, 4] za %count% dny|[5,Inf] za %count% dní" +week: + past: "{1} minulý týden|[2, Inf] před %count% týdny" + future: "{1} za týden|[2, 4] za %count% týdny|[5,Inf] za %count% týdnů" +month: + past: "{1} minulý měsíc|[2, Inf] před %count% měsíci" + future: "{1} za měsíc|[2, 4] za %count% měsíce|[5,Inf] za %count% měsíců" +year: + past: "{1} minulý rok|[2, Inf] před %count% lety" + future: "{1} za rok|[2, 4] za %count% roky|[5,Inf] za %count% let" + +compound: + second: "{1} %count% vteřina |[2,4] %count% vteřiny|[5,Inf] %count% vteřin" + minute: "{1} %count% minuta|[2,4] %count% minuty|[5,Inf] %count% minut" + hour: "{1} %count% hodina|[2,4] %count% hodiny|[5,Inf] %count% hodin" + day: "{1} %count% den |[2,4] %count% dny|[5,Inf] %count% dní" + week: "{1} %count% týden|[2,4] %count% týdny|[5,Inf] %count% týdnů" + month: "{1} %count% měsíc|[2,4] %count% měsíce|[5,Inf] %count% měsíců" + year: "{1} %count% rok|[2,4] %count% roky|[5,Inf] %count% let" + past: "před %value% " + future: "%value% odteď" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml new file mode 100644 index 0000000..f9a7591 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml @@ -0,0 +1,35 @@ +just_now: + past: "[0,Inf] práve teraz" + future: "[0,Inf] práve teraz" +second: + past: "{1} pred sekundou|[2, 4] pred %count% sekundami|[5,Inf] pred %count% sekundami" + future: "{1} o sekundu|[2, 4] o %count% sekundy|[5,Inf] o %count% sekúnd" +minute: + past: "{1} pred minútou|[2, Inf] pred %count% minútami" + future: "{1} o minútu|[2, 4] o %count% minúty|[5,Inf] o %count% minút" +hour: + past: "{1} pred hodinou|[2, Inf] pred %count% hodinami" + future: "{1} o hodinu|[2, 4] o %count% hodiny|[5,Inf] o %count% hodín" +day: + past: "{1} včera|[2, Inf] pred %count% dňami" + future: "{1} zajtra|[2, 4] o %count% dni|[5,Inf] o %count% dní" +week: + past: "{1} minulý týždeň|[2, Inf] pred %count% týždňami" + future: "{1} o týždeň|[2, 4] o %count% týždne|[5,Inf] o %count% týždňov" +month: + past: "{1} minulý mesiac|[2, Inf] pred %count% mesiacmi" + future: "{1} o mesiac|[2, 4] o %count% mesiace|[5,Inf] o %count% mesiacov" +year: + past: "{1} minulý rok|[2, Inf] pred %count% rokmi" + future: "{1} za rok|[2, 4] o %count% roky|[5,Inf] o %count% rokov" + +compound: + second: "{1} %count% sekunda|[2,4] %count% sekundy|[5,Inf] %count% sekúnd" + minute: "{1} %count% minúta|[2,4] %count% minúty|[5,Inf] %count% minút" + hour: "{1} %count% hodina|[2,4] %count% hodiny|[5,Inf] %count% hodín" + day: "{1} %count% deň|[2,4] %count% dni|[5,Inf] %count% dní" + week: "{1} %count% týždeň|[2,4] %count% týždne|[5,Inf] %count% týždňov" + month: "{1} %count% mesiac|[2,4] %count% mesiace|[5,Inf] %count% mesiacov" + year: "{1} %count% rok|[2,4] %count% roky|[5,Inf] %count% rokov" + past: "%value% dozadu" + future: "%value% od teraz" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml new file mode 100644 index 0000000..2075228 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml @@ -0,0 +1,3 @@ +only_two: "%first% a %second%" +comma_separated: "%list%, a %last%" +comma_separated_with_limit: "[1,4] %list%, a %count% další|[5,Inf] %list%, a %count% dalších" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml new file mode 100644 index 0000000..d47f17b --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml @@ -0,0 +1,3 @@ +only_two: "%first% a %second%" +comma_separated: "%list%, a %last%" +comma_separated_with_limit: "[1,4] %list%, a %count% ďalší|[5,Inf] %list%, a %count% ďalších" \ No newline at end of file From 3b63d9b290581ffd1d0d73d8b360ed268e1ee11a Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Mon, 8 Jan 2024 12:20:39 +0000 Subject: [PATCH 163/193] Updated CHANGELOG.md --- CHANGELOG.md | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index daa876d..908dddd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ -## [Unreleased] - 2022-11-30 +## [Unreleased] - 2024-01-08 + +### Added +- [#133](https://github.com/coduo/php-humanizer/pull/133) - **Slovak translation added for Oxford and Datetime** - [@jerony-mo](https://github.com/jerony-mo) +- [#133](https://github.com/coduo/php-humanizer/pull/133) - **Czech translation added for Oxford and Datetime** - [@jerony-mo](https://github.com/jerony-mo) ### Changed - [#131](https://github.com/coduo/php-humanizer/pull/131) - **Using the assertSame to make assert equals restricted.** - [@peter279k](https://github.com/peter279k) @@ -316,4 +320,54 @@ - [#7](https://github.com/coduo/php-humanizer/pull/7) - **precise date calculations** - [@defrag](https://github.com/defrag) - [#2](https://github.com/coduo/php-humanizer/pull/2) - **typos** - [@pborreli](https://github.com/pborreli) +## Contributors + +- @4t87ux8 +- @a-ungurianu +- @arrowrowe +- @Borales +- @brianwozeniak +- @cnkt +- @dagaa +- @ddmler +- @dedik +- @defrag +- @dizzy7 +- @doenietzomoeilijk +- @drgomesp +- @Forst +- @Gnomino +- @hjason2042@gmail.com +- @hyperpanic +- @IgorDePaula +- @isnani +- @jebog +- @jerony-mo +- @jfcherng +- @lightglitch +- @lpopov +- @martinbutt +- @mattallty +- @mostertb +- @naprirfan +- @norberttech +- @norzechowicz +- @NoUseFreak +- @nwatth +- @omissis +- @orestes +- @Ozmodiar +- @pborreli +- @percymamedy +- @peter279k +- @sam002 +- @sarelvdwalt +- @serima +- @smeeckaert +- @tbreuss +- @Th3Mouk +- @thunderer +- @vinicius73 +- @vinkla + Generated by [Automation](https://github.com/aeon-php/automation) \ No newline at end of file From c5023fa601eca56a39f23e9a8274d80f4a4a6c6a Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Thu, 11 Apr 2024 12:11:27 +0200 Subject: [PATCH 164/193] Updated project to latest versio of php and dependencies --- .github/workflows/changelog-update.yml | 2 +- .github/workflows/static-analyze.yml | 2 +- .github/workflows/tests.yml | 6 +- README.md | 6 +- composer.json | 8 +- composer.lock | 833 +++++++------------------ 6 files changed, 244 insertions(+), 613 deletions(-) diff --git a/.github/workflows/changelog-update.yml b/.github/workflows/changelog-update.yml index c444e15..603fb4b 100644 --- a/.github/workflows/changelog-update.yml +++ b/.github/workflows/changelog-update.yml @@ -7,7 +7,7 @@ name: "Changelog - Update Unreleased" on: push: branches: - - 4.x + - 5.x jobs: changelog-update-unreleased: diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml index 638387e..3c32bb3 100644 --- a/.github/workflows/static-analyze.yml +++ b/.github/workflows/static-analyze.yml @@ -4,7 +4,7 @@ on: pull_request: push: branches: - - "4.x" + - "5.x" schedule: - cron: '0 8 * * *' diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a2e656d..7a80269 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -4,7 +4,7 @@ on: pull_request: push: branches: - - "4.x" + - "5.x" schedule: - cron: '0 8 * * *' @@ -21,9 +21,9 @@ jobs: - "lowest" - "highest" php-version: - - "7.4" - - "8.0" - "8.1" + - "8.2" + - "8.3" operating-system: - "ubuntu-latest" diff --git a/README.md b/README.md index 37c7b7a..70a8769 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ # PHP Humanizer -![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=4.x) +![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=5.x) [![Latest Stable Version](https://poser.pugx.org/coduo/php-humanizer/v/stable)](https://packagist.org/packages/coduo/php-humanizer) [![Total Downloads](https://poser.pugx.org/coduo/php-humanizer/downloads)](https://packagist.org/packages/coduo/php-humanizer) [![Latest Unstable Version](https://poser.pugx.org/coduo/php-humanizer/v/unstable)](https://packagist.org/packages/coduo/php-humanizer) [![License](https://poser.pugx.org/coduo/php-humanizer/license)](https://packagist.org/packages/coduo/php-humanizer) ### Tests -* ![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=4.x) - 4.x +* ![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=5.x) - 5.x -[Readme for 4.x version](https://github.com/coduo/php-humanizer/tree/4.x/README.md) +[Readme for 5.x version](https://github.com/coduo/php-humanizer/tree/5.x/README.md) diff --git a/composer.json b/composer.json index 7be652c..30d3045 100644 --- a/composer.json +++ b/composer.json @@ -15,10 +15,10 @@ } ], "require": { - "php": "~7.4 || ~8.0 || ~8.1", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0", - "aeon-php/calendar": "^0.16.1 || ^1.0" + "php": "~8.1 || ~8.2 || ~8.3", + "symfony/translation": "~5.4||~6.4||~7", + "symfony/yaml": "~5.4||~6.4||~7", + "aeon-php/calendar": "^1.0" }, "require-dev": { "thunderer/shortcode": "^0.7", diff --git a/composer.lock b/composer.lock index 534a626..8ae0f87 100644 --- a/composer.lock +++ b/composer.lock @@ -4,27 +4,28 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4204f17fb768e8a680f1250930b5d246", + "content-hash": "2d526990fac84bbb17c6b9e1351ec4b6", "packages": [ { "name": "aeon-php/calendar", - "version": "1.0.4", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/aeon-php/calendar.git", - "reference": "2b1c9bb578bd3bf9b47f9e7549bcd2a5bf5e4b25" + "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aeon-php/calendar/zipball/2b1c9bb578bd3bf9b47f9e7549bcd2a5bf5e4b25", - "reference": "2b1c9bb578bd3bf9b47f9e7549bcd2a5bf5e4b25", + "url": "https://api.github.com/repos/aeon-php/calendar/zipball/2cfc45a2cd28b78f1450d8155a1c62df2efe45de", + "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de", "shasum": "" }, "require": { - "php": "^7.4.2 || ~8.0 || ~8.1" + "php": "~8.1.10 || ~8.2" }, "require-dev": { - "ext-bcmath": "*" + "ext-bcmath": "*", + "ext-pcov": "*" }, "suggest": { "ext-bcmath": "Compare time units with high precision" @@ -51,31 +52,31 @@ ], "support": { "issues": "https://github.com/aeon-php/calendar/issues", - "source": "https://github.com/aeon-php/calendar/tree/1.0.4" + "source": "https://github.com/aeon-php/calendar/tree/1.0.9" }, - "time": "2022-01-28T13:12:23+00:00" + "time": "2023-08-29T09:47:37+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.1", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -104,7 +105,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -120,20 +121,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", "shasum": "" }, "require": { @@ -147,9 +148,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -186,7 +184,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, "funding": [ { @@ -202,20 +200,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { @@ -229,9 +227,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -269,90 +264,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com/", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -368,57 +280,55 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/translation", - "version": "v5.4.9", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "1639abc1177d26bcd4320e535e664cef067ab0ca" + "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/1639abc1177d26bcd4320e535e664cef067ab0ca", - "reference": "1639abc1177d26bcd4320e535e664cef067ab0ca", + "url": "https://api.github.com/repos/symfony/translation/zipball/bce6a5a78e94566641b2594d17e48b0da3184a8e", + "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^2.3" + "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { - "symfony/config": "<4.4", - "symfony/console": "<5.3", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" }, "provide": { - "symfony/translation-implementation": "2.3" + "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { + "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -449,7 +359,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.9" + "source": "https://github.com/symfony/translation/tree/v6.4.4" }, "funding": [ { @@ -465,32 +375,29 @@ "type": "tidelift" } ], - "time": "2022-05-06T12:33:37+00:00" + "time": "2024-02-20T13:16:58+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.5.1", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "1211df0afa701e45a04253110e959d4af4ef0f07" + "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1211df0afa701e45a04253110e959d4af4ef0f07", - "reference": "1211df0afa701e45a04253110e959d4af4ef0f07", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", + "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", "shasum": "" }, "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/translation-implementation": "" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -500,7 +407,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Translation\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -527,7 +437,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.2" }, "funding": [ { @@ -543,35 +453,32 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/yaml", - "version": "v5.4.3", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e80f87d2c9495966768310fc531b487ce64237a2" + "reference": "d75715985f0f94f978e3a8fa42533e10db921b90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2", - "reference": "e80f87d2c9495966768310fc531b487ce64237a2", + "url": "https://api.github.com/repos/symfony/yaml/zipball/d75715985f0f94f978e3a8fa42533e10db921b90", + "reference": "d75715985f0f94f978e3a8fa42533e10db921b90", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.3" + "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "^5.3|^6.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "symfony/console": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -602,7 +509,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.3" + "source": "https://github.com/symfony/yaml/tree/v6.4.3" }, "funding": [ { @@ -618,36 +525,36 @@ "type": "tidelift" } ], - "time": "2022-01-26T16:32:32+00:00" + "time": "2024-01-23T14:51:35+00:00" } ], "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.4.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -674,7 +581,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -690,20 +597,20 @@ "type": "tidelift" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -741,7 +648,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -749,29 +656,31 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "nikic/php-parser", - "version": "v4.14.0", + "version": "v5.0.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -779,7 +688,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -803,26 +712,27 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" }, - "time": "2022-05-31T20:59:12+00:00" + "time": "2024-03-05T20:51:40+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -863,9 +773,15 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -918,252 +834,25 @@ }, "time": "2022-02-21T01:04:05+00:00" }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org/", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.6.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" - }, - "time": "2022-03-15T21:29:03+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com/" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" - }, { "name": "phpunit/php-code-coverage", - "version": "9.2.15", + "version": "9.2.31", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -1178,8 +867,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { @@ -1212,7 +901,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" }, "funding": [ { @@ -1220,7 +910,7 @@ "type": "github" } ], - "time": "2022-03-07T09:28:20+00:00" + "time": "2024-03-02T06:37:42+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1465,20 +1155,20 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.20", + "version": "9.6.19", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -1489,31 +1179,26 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-code-coverage": "^9.2.28", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.0", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" @@ -1521,7 +1206,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { @@ -1552,7 +1237,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19" }, "funding": [ { @@ -1562,22 +1248,26 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-04-01T12:37:26+00:00" + "time": "2024-04-05T04:35:58+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", "shasum": "" }, "require": { @@ -1612,7 +1302,7 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" }, "funding": [ { @@ -1620,7 +1310,7 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T06:27:43+00:00" }, { "name": "sebastian/code-unit", @@ -1735,16 +1425,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -1797,7 +1487,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -1805,24 +1495,24 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -1854,7 +1544,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" }, "funding": [ { @@ -1862,20 +1552,20 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", "shasum": "" }, "require": { @@ -1920,7 +1610,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" }, "funding": [ { @@ -1928,20 +1618,20 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2024-03-02T06:30:58+00:00" }, { "name": "sebastian/environment", - "version": "5.1.4", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { @@ -1983,7 +1673,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -1991,20 +1681,20 @@ "type": "github" } ], - "time": "2022-04-03T09:37:03+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", "shasum": "" }, "require": { @@ -2060,7 +1750,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" }, "funding": [ { @@ -2068,20 +1758,20 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2024-03-02T06:33:00+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.5", + "version": "5.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", "shasum": "" }, "require": { @@ -2124,7 +1814,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" }, "funding": [ { @@ -2132,24 +1822,24 @@ "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2024-03-02T06:35:11+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -2181,7 +1871,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, "funding": [ { @@ -2189,7 +1879,7 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", @@ -2305,16 +1995,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { @@ -2353,10 +2043,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -2364,20 +2054,20 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", "shasum": "" }, "require": { @@ -2389,7 +2079,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2410,8 +2100,7 @@ "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" }, "funding": [ { @@ -2419,20 +2108,20 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2024-03-14T16:00:52+00:00" }, { "name": "sebastian/type", - "version": "3.0.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { @@ -2444,7 +2133,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -2467,7 +2156,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -2475,7 +2164,7 @@ "type": "github" } ], - "time": "2022-03-15T09:54:48+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", @@ -2532,16 +2221,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -2570,7 +2259,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -2578,7 +2267,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2024-03-03T12:36:25+00:00" }, { "name": "thunderer/shortcode", @@ -2635,64 +2324,6 @@ "source": "https://github.com/thunderer/Shortcode/tree/v0.7.5" }, "time": "2022-01-13T18:53:33+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" } ], "aliases": [], @@ -2701,8 +2332,8 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "~7.4 || ~8.0 || ~8.1" + "php": "~8.1 || ~8.2 || ~8.3" }, "platform-dev": [], - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.6.0" } From fe058ca2ecb9aa90f8c688a25a9327b7c2050156 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Thu, 11 Apr 2024 12:13:17 +0200 Subject: [PATCH 165/193] Fixed static analyze github workflow php version --- .github/workflows/static-analyze.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml index 3c32bb3..9f40c7a 100644 --- a/.github/workflows/static-analyze.yml +++ b/.github/workflows/static-analyze.yml @@ -19,7 +19,7 @@ jobs: dependencies: - "locked" php-version: - - "7.4" + - "8.1" operating-system: - "ubuntu-latest" From 90efee54b12d083d7d4ec62d52cdb7f2a5c9641d Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Thu, 11 Apr 2024 12:26:35 +0200 Subject: [PATCH 166/193] Fixed development tools dependencies configuration --- composer.json | 6 +- composer.lock | 2339 ----------------- phpunit.xml.dist | 41 +- psalm.xml | 2 + .../Tests/CollectionHumanizerTest.php | 18 +- .../Tests/DateTimeHumanizerTest.php | 86 +- .../Tests/NumberHumanizerTest.php | 703 ++--- .../Tests/StringHumanizerTest.php | 136 +- tools/composer.json | 8 +- tools/composer.lock | 1992 ++++++-------- tools/php-cs-fixer | Bin 1852521 -> 0 bytes 11 files changed, 1260 insertions(+), 4071 deletions(-) delete mode 100644 composer.lock delete mode 100755 tools/php-cs-fixer diff --git a/composer.json b/composer.json index 30d3045..138d0f5 100644 --- a/composer.json +++ b/composer.json @@ -21,8 +21,7 @@ "aeon-php/calendar": "^1.0" }, "require-dev": { - "thunderer/shortcode": "^0.7", - "phpunit/phpunit": "^9.4" + "thunderer/shortcode": "^0.7" }, "config": { "bin-dir": "bin" @@ -55,11 +54,12 @@ ], "cs:php:fix": "tools/vendor/bin/php-cs-fixer fix", "tools:install": "composer install --working-dir=./tools", + "tools:update": "composer update --working-dir=./tools", "post-install-cmd": [ "@tools:install" ], "post-update-cmd": [ - "@tools:install" + "@tools:update" ] } } diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 8ae0f87..0000000 --- a/composer.lock +++ /dev/null @@ -1,2339 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "2d526990fac84bbb17c6b9e1351ec4b6", - "packages": [ - { - "name": "aeon-php/calendar", - "version": "1.0.9", - "source": { - "type": "git", - "url": "https://github.com/aeon-php/calendar.git", - "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aeon-php/calendar/zipball/2cfc45a2cd28b78f1450d8155a1c62df2efe45de", - "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de", - "shasum": "" - }, - "require": { - "php": "~8.1.10 || ~8.2" - }, - "require-dev": { - "ext-bcmath": "*", - "ext-pcov": "*" - }, - "suggest": { - "ext-bcmath": "Compare time units with high precision" - }, - "type": "library", - "autoload": { - "psr-4": { - "Aeon\\": [ - "src/Aeon" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHP type safe, immutable calendar library", - "keywords": [ - "calendar", - "date", - "datetime", - "immutable", - "time" - ], - "support": { - "issues": "https://github.com/aeon-php/calendar/issues", - "source": "https://github.com/aeon-php/calendar/tree/1.0.9" - }, - "time": "2023-08-29T09:47:37+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com/", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-05-23T14:45:45+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.29.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com/", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-29T20:11:03+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com/", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-29T20:11:03+00:00" - }, - { - "name": "symfony/translation", - "version": "v6.4.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bce6a5a78e94566641b2594d17e48b0da3184a8e", - "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" - }, - "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", - "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", - "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" - }, - "provide": { - "symfony/translation-implementation": "2.3|3.0" - }, - "require-dev": { - "nikic/php-parser": "^4.18|^5.0", - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com/", - "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-02-20T13:16:58+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v3.4.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", - "reference": "43810bdb2ddb5400e5c5e778e27b210a0ca83b6b", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com/", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.4.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-23T14:51:35+00:00" - }, - { - "name": "symfony/yaml", - "version": "v6.4.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "d75715985f0f94f978e3a8fa42533e10db921b90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/d75715985f0f94f978e3a8fa42533e10db921b90", - "reference": "d75715985f0f94f978e3a8fa42533e10db921b90", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<5.4" - }, - "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com/", - "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-23T14:51:35+00:00" - } - ], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:23:10+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.11.1", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2023-03-08T13:26:56+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v5.0.2", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" - }, - "time": "2024-03-05T20:51:40+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.31", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:37:42+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.6.19", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", - "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1 || ^2", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.6-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2024-04-05T04:35:58+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:27:43+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T12:41:17+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-22T06:19:30+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:30:58+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:03:51+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:33:00+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:35:11+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-22T06:20:34+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:07:39+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-14T16:00:52+00:00" - }, - { - "name": "sebastian/type", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:13:03+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:36:25+00:00" - }, - { - "name": "thunderer/shortcode", - "version": "v0.7.5", - "source": { - "type": "git", - "url": "https://github.com/thunderer/Shortcode.git", - "reference": "a4fee30613bd46efb421f8305aff0466a3268a99" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thunderer/Shortcode/zipball/a4fee30613bd46efb421f8305aff0466a3268a99", - "reference": "a4fee30613bd46efb421f8305aff0466a3268a99", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": ">=4.1", - "symfony/yaml": ">=2.0" - }, - "suggest": { - "ext-dom": "if you want to use XML serializer", - "ext-json": "if you want to use JSON serializer", - "symfony/yaml": "if you want to use YAML serializer" - }, - "type": "library", - "autoload": { - "psr-4": { - "Thunder\\Shortcode\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tomasz Kowalczyk", - "email": "tomasz@kowalczyk.cc" - } - ], - "description": "Advanced shortcode (BBCode) parser and engine for PHP", - "keywords": [ - "bbcode", - "engine", - "library", - "parser", - "shortcode" - ], - "support": { - "issues": "https://github.com/thunderer/Shortcode/issues", - "source": "https://github.com/thunderer/Shortcode/tree/v0.7.5" - }, - "time": "2022-01-13T18:53:33+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": "~8.1 || ~8.2 || ~8.3" - }, - "platform-dev": [], - "plugin-api-version": "2.6.0" -} diff --git a/phpunit.xml.dist b/phpunit.xml.dist index e4936a9..9f54b7e 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,23 +1,22 @@ - - - ./tests/ - - - - - - ./src/ - - - - - - - \ No newline at end of file + xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd" + colors="true" + bootstrap="vendor/autoload.php" + cacheDirectory="var/phpunit/cache"> + + + ./tests/ + + + + + + + + + + ./src/ + + + diff --git a/psalm.xml b/psalm.xml index e836113..96ca92a 100644 --- a/psalm.xml +++ b/psalm.xml @@ -7,6 +7,8 @@ cacheDirectory="var/psalm/cache" errorBaseline="baseline.xml" errorLevel="1" + findUnusedBaselineEntry="false" + findUnusedCode="false" > diff --git a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php index 76737e0..f11b6d4 100644 --- a/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/CollectionHumanizerTest.php @@ -16,15 +16,7 @@ final class CollectionHumanizerTest extends TestCase { - /** - * @dataProvider oxfordCollectionProvider - */ - public function test_oxford_collections_humanizing($collection, $limit, $locale, $expectedResult) : void - { - $this->assertSame($expectedResult, CollectionHumanizer::oxford($collection, $limit, $locale)); - } - - public function oxfordCollectionProvider() + public static function oxfordCollectionProvider() { return [ // English @@ -90,4 +82,12 @@ public function oxfordCollectionProvider() [['Michal', 'Norbert', 'Lukasz', 'Pawel'], null, 'ja', 'Michal, Norbert, Lukasz と Pawel'], ]; } + + /** + * @dataProvider oxfordCollectionProvider + */ + public function test_oxford_collections_humanizing($collection, $limit, $locale, $expectedResult) : void + { + $this->assertSame($expectedResult, CollectionHumanizer::oxford($collection, $limit, $locale)); + } } diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index 2d709a8..600f06a 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -21,47 +21,7 @@ class DateTimeHumanizerTest extends TestCase { - /** - * @dataProvider humanizeDataProvider - */ - public function test_humanize_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void - { - $this->assertSame($expected, DateTimeHumanizer::difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); - } - - /** - * @dataProvider humanizeDataProvider - */ - public function test_humanize_time_period(string $firstDate, string $secondDate, string $expected, string $locale) : void - { - $this->assertSame($expected, DateTimeHumanizer::timePeriod(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); - } - - /** - * @dataProvider preciseDifferenceDataProvider - */ - public function test_humanize_precise_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void - { - $this->assertSame($expected, DateTimeHumanizer::timePeriodPrecise(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); - } - - /** - * @dataProvider preciseDifferenceDataProvider - */ - public function test_humanize_time_period_precise(string $firstDate, string $secondDate, string $expected, string $locale) : void - { - $this->assertSame($expected, DateTimeHumanizer::preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); - } - - /** - * @dataProvider timeUnitDataProvider - */ - public function test_humanize_time_unit(Unit $unit, string $expected, string $locale) : void - { - $this->assertSame($expected, DateTimeHumanizer::timeUnit($unit, $locale)); - } - - public function humanizeDataProvider() : array + public static function humanizeDataProvider() : array { return [ // English @@ -279,7 +239,7 @@ public function humanizeDataProvider() : array ]; } - public function preciseDifferenceDataProvider() : array + public static function preciseDifferenceDataProvider() : array { return [ // Azerbaijani @@ -474,7 +434,7 @@ public function preciseDifferenceDataProvider() : array ]; } - public function timeUnitDataProvider() : array + public static function timeUnitDataProvider() : array { return [ // English @@ -508,4 +468,44 @@ public function timeUnitDataProvider() : array [RelativeTimeUnit::months(14), '1 rok i 2 miesiące', 'pl'], ]; } + + /** + * @dataProvider humanizeDataProvider + */ + public function test_humanize_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void + { + $this->assertSame($expected, DateTimeHumanizer::difference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); + } + + /** + * @dataProvider humanizeDataProvider + */ + public function test_humanize_time_period(string $firstDate, string $secondDate, string $expected, string $locale) : void + { + $this->assertSame($expected, DateTimeHumanizer::timePeriod(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); + } + + /** + * @dataProvider preciseDifferenceDataProvider + */ + public function test_humanize_precise_difference_between_dates(string $firstDate, string $secondDate, string $expected, string $locale) : void + { + $this->assertSame($expected, DateTimeHumanizer::timePeriodPrecise(new TimePeriod(DateTime::fromString($firstDate), DateTime::fromString($secondDate)), $locale)); + } + + /** + * @dataProvider preciseDifferenceDataProvider + */ + public function test_humanize_time_period_precise(string $firstDate, string $secondDate, string $expected, string $locale) : void + { + $this->assertSame($expected, DateTimeHumanizer::preciseDifference(new \DateTime($firstDate), new \DateTime($secondDate), $locale)); + } + + /** + * @dataProvider timeUnitDataProvider + */ + public function test_humanize_time_unit(Unit $unit, string $expected, string $locale) : void + { + $this->assertSame($expected, DateTimeHumanizer::timeUnit($unit, $locale)); + } } diff --git a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php index ccca05e..e5bcf2b 100644 --- a/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php @@ -17,566 +17,569 @@ class NumberHumanizerTest extends TestCase { /** - * @dataProvider ordinalIndicatorProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_return_ordinal_suffix($expected, $number) : void + public static function ordinalIndicatorProvider() { - $this->assertSame($expected, NumberHumanizer::ordinal($number)); + return [ + ['st', 1], + ['nd', 2], + ['rd', 23], + ['nd', 1002], + ['th', -111], + ]; } /** - * @dataProvider ordinalIndicatorDutchProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_return_ordinal_suffix_dutch($expected, $number) : void + public static function ordinalIndicatorDutchProvider() { - $this->assertSame($expected, NumberHumanizer::ordinal($number, 'nl')); + return [ + ['e', 1], + ['e', 2], + ['e', 23], + ['e', 1002], + ['e', -111], + ]; } /** - * @dataProvider ordinalIndicatorIndonesianProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_return_ordinal_suffix_indonesian($expected, $number) : void + public static function ordinalIndicatorIndonesianProvider() { - $this->assertSame($expected, NumberHumanizer::ordinal($number, 'id')); + return [ + ['ke-', 1], + ['ke-', 2], + ['ke-', 23], + ['ke-', 1002], + ['ke-', -111], + ]; } /** - * @dataProvider ordinalSuffixPtEsItProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_return_ordinal_suffix_spanish($expected, $number) : void + public static function ordinalizeDataProvider() { - $this->assertSame($expected, NumberHumanizer::ordinal($number, 'es')); + return [ + ['1st', 1], + ['2nd', 2], + ['23rd', 23], + ['1002nd', 1002], + ['-111th', -111], + ]; } /** - * @dataProvider ordinalSuffixPtEsItProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_return_ordinal_suffix_italian($expected, $number) : void + public static function ordinalizeDataDutchProvider() { - $this->assertSame($expected, NumberHumanizer::ordinal($number, 'it')); + return [ + ['1e', 1], + ['2e', 2], + ['23e', 23], + ['1002e', 1002], + ['-111e', -111], + ]; } /** - * @dataProvider ordinalSuffixGermanProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_return_ordinal_suffix_german($expected, $number) : void + public static function ordinalizeDataIndonesianProvider() { - $this->assertSame($expected, NumberHumanizer::ordinal($number, 'de')); + return [ + ['ke-1', 1], + ['ke-2', 2], + ['ke-23', 23], + ['ke-1002', 1002], + ['ke--111', -111], + ]; } /** - * @dataProvider ordinalSuffixFrenchProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_return_ordinal_suffix_french($expected, $number) : void + public static function ordinalizeDataPtEsItProvider() { - $this->assertSame($expected, NumberHumanizer::ordinal($number, 'fr')); + return [ + ['1o', 1], + ['2o', 2], + ['23o', 23], + ['1002o', 1002], + ['-111o', -111], + ]; } /** - * @dataProvider ordinalizeDataProvider - * @depends test_return_ordinal_suffix - * - * @param $expected - * @param $number + * @return array */ - public function test_ordinalize_numbers($expected, $number) : void + public static function ordinalizeDataGermanProvider() { - $this->assertSame($expected, NumberHumanizer::ordinalize($number)); + return [ + ['1.', 1], + ['2.', 2], + ['23.', 23], + ['1002.', 1002], + ['-111.', -111], + ]; } /** - * @dataProvider ordinalizeDataDutchProvider - * @depends test_return_ordinal_suffix_dutch - * - * @param $expected - * @param $number + * @return array */ - public function test_ordinalize_numbers_dutch($expected, $number) : void + public static function ordinalizeDataFrenchProvider() { - $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'nl')); + return [ + ['1er', 1], + ['2e', 2], + ['23e', 23], + ['1002e', 1002], + ['-111e', -111], + ]; } /** - * @dataProvider ordinalizeDataIndonesianProvider - * @depends test_return_ordinal_suffix_indonesian - * - * @param $expected - * @param $number + * @return array */ - public function test_ordinalize_numbers_indonesian($expected, $number) : void + public static function ordinalSuffixPtEsItProvider() { - $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'id')); + return [ + ['o', 1], + ['o', 2], + ['o', 23], + ['o', 1002], + ['o', -111], + ]; } /** - * @dataProvider ordinalizeDataPtEsItProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_ordinalize_numbers_portuguese($expected, $number) : void + public static function ordinalSuffixGermanProvider() { - $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'pt')); + return [ + ['.', 1], + ['.', 2], + ['.', 23], + ['.', 1002], + ['.', -111], + ]; } /** - * @dataProvider ordinalizeDataPtEsItProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_ordinalize_numbers_spanish($expected, $number) : void + public static function ordinalSuffixFrenchProvider() { - $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'es')); + return [ + ['er', 1], + ['e', 2], + ['e', 23], + ['e', 1002], + ['e', -111], + ]; } /** - * @dataProvider ordinalizeDataPtEsItProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_ordinalize_numbers_italian($expected, $number) : void + public static function binarySuffixDataProvider() { - $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'it')); - } + return [ + [-1, -1], + ['0 bytes', 0], + ['1 bytes', 1], + ['1 kB', 1024], + ['1 kB', 1025], + ['1.5 kB', 1536], + ['84.4 kB', 86450], + ['5 MB', 1048576 * 5], + ['2 GB', 1073741824 * 2], + ['3 TB', 1099511627776 * 3], + ['1.18 PB', 1325899906842624], - /** - * @dataProvider ordinalizeDataGermanProvider - * - * @param $expected - * @param $number - */ - public function test_ordinalize_numbers_german($expected, $number) : void - { - $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'de')); + ['1,5 kB', 1536, 'pl'], + ['1,18 PB', 1325899906842624, 'pl'], + ]; } /** - * @dataProvider ordinalizeDataFrenchProvider - * - * @param $expected - * @param $number + * @return array */ - public function test_ordinalize_numbers_french($expected, $number) : void + public static function preciseBinarySuffixDataProvider() { - $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'fr')); + return [ + // Negative case + [-1, -1, 3], + + // Byte Cases + ['0 bytes', 0, 3], + ['1 bytes', 1, 0], + ['1023 bytes', 1023, 3], + + // Kilobyte Cases + ['1.000 kB', 1024, 3], + ['2 kB', 1588, 0], + ['1.6 kB', 1588, 1], + ['1.55 kB', 1588, 2], + ['1.551 kB', 1588, 3], + + // Megabyte Cases + ['5.00 MB', (1048576 * 5), 2], + ['5.00 MB', (1048576 * 5) + 600, 2], + ['5.001 MB', (1048576 * 5) + 600, 3], + + // Gigabyte Cases + ['2 GB', 1073741824 * 2, 0], + ['2.0 GB', 1073741824 * 2, 1], + + // Terabyte Cases + ['3.00 TB', 1099511627776 * 3, 2], + + // Petabyte Case + ['1.178 PB', 1325899906842624, 3], + + // Locale Cases + ['1,500 kB', 1536, 3, 'pl'], + ['1,178 PB', 1325899906842624, 3, 'pl'], + ]; } /** - * @dataProvider binarySuffixDataProvider - * - * @param $expected - * @param $number - * @param string $locale + * @return array */ - public function test_convert_number_to_string_with_binary_suffix($expected, $number, $locale = 'en') : void + public static function metricSuffixDataProvider() { - $this->assertSame($expected, NumberHumanizer::binarySuffix($number, $locale)); - } - - /** - * @dataProvider preciseBinarySuffixDataProvider - * - * @param $expected - * @param $number - * @param string $locale - * @param int $precision + return [ + ['-1', -1], + ['0', 0], + ['1', 1], + ['101', 101], + ['1k', 1000], + ['1.2k', 1240], + ['1.24M', 1240000], + ['3.5M', 3500000], + + ['1,2k', 1240, 'pl'], + ['1,24M', 1240000, 'pl'], + ['3,5M', 3500000, 'pl'], + ]; + } + + /** + * @return array */ - public function test_convert_number_to_string_with_precise_binary_suffix($expected, $number, $precision, $locale = 'en') : void + public static function romanDataProvider() { - $this->assertSame($expected, NumberHumanizer::preciseBinarySuffix($number, $precision, $locale)); + return [ + ['I', 1], + ['V', 5], + ['IX', 9], + ['X', 10], + ['CXXV', 125], + ['MCCC', 1300], + ['MMMCMXCIX', 3999], + ]; } - public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_negative_precision() : void + /** + * @return array + */ + public static function romanExceptionProvider() { - $this->expectException(\InvalidArgumentException::class); - - NumberHumanizer::preciseBinarySuffix(1, -1); + return [ + [-1], + [4000], + ]; } - public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_large_precision() : void + /** + * @return array + */ + public static function arabicExceptionProvider() { - $this->expectException(\InvalidArgumentException::class); - - NumberHumanizer::preciseBinarySuffix(1, 4); + return [ + [''], + ['foobar'], + ]; } /** - * @dataProvider metricSuffixDataProvider + * @dataProvider ordinalIndicatorProvider * * @param $expected * @param $number - * @param string $locale */ - public function test_convert_number_to_string_with_metric_suffix($expected, $number, $locale = 'en') : void + public function test_return_ordinal_suffix($expected, $number) : void { - $this->assertSame($expected, NumberHumanizer::metricSuffix($number, $locale)); + $this->assertSame($expected, NumberHumanizer::ordinal($number)); } - public function test_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() : void + /** + * @dataProvider ordinalIndicatorDutchProvider + * + * @param $expected + * @param $number + */ + public function test_return_ordinal_suffix_dutch($expected, $number) : void { - $this->expectException(\InvalidArgumentException::class); - - NumberHumanizer::metricSuffix('as12'); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'nl')); } /** - * @dataProvider romanDataProvider + * @dataProvider ordinalIndicatorIndonesianProvider * * @param $expected * @param $number */ - public function test_converts_numbers_to_roman($expected, $number) : void + public function test_return_ordinal_suffix_indonesian($expected, $number) : void { - $this->assertSame($expected, NumberHumanizer::toRoman($number)); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'id')); } /** - * @dataProvider romanDataProvider + * @dataProvider ordinalSuffixPtEsItProvider * * @param $expected * @param $number */ - public function test_convert_roman_numbers_to_arabic($number, $expected) : void + public function test_return_ordinal_suffix_spanish($expected, $number) : void { - $this->assertSame($expected, NumberHumanizer::fromRoman($number)); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'es')); } /** - * @dataProvider romanExceptionProvider + * @dataProvider ordinalSuffixPtEsItProvider * + * @param $expected * @param $number */ - public function test_statically_throw_exception_when_converting_number_is_out_of_range($number) : void + public function test_return_ordinal_suffix_italian($expected, $number) : void { - $this->expectException(\InvalidArgumentException::class); - - NumberHumanizer::toRoman($number); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'it')); } /** - * @dataProvider arabicExceptionProvider + * @dataProvider ordinalSuffixGermanProvider * + * @param $expected * @param $number */ - public function test_statically_throw_exception_when_converting_roman_number_is_invalid($number) : void + public function test_return_ordinal_suffix_german($expected, $number) : void { - $this->expectException(\InvalidArgumentException::class); - - NumberHumanizer::fromRoman($number); + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'de')); } /** - * @return array + * @dataProvider ordinalSuffixFrenchProvider + * + * @param $expected + * @param $number */ - public function ordinalIndicatorProvider() + public function test_return_ordinal_suffix_french($expected, $number) : void { - return [ - ['st', 1], - ['nd', 2], - ['rd', 23], - ['nd', 1002], - ['th', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinal($number, 'fr')); } /** - * @return array + * @dataProvider ordinalizeDataProvider + * + * @depends test_return_ordinal_suffix + * + * @param $expected + * @param $number */ - public function ordinalIndicatorDutchProvider() + public function test_ordinalize_numbers($expected, $number) : void { - return [ - ['e', 1], - ['e', 2], - ['e', 23], - ['e', 1002], - ['e', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number)); } /** - * @return array + * @dataProvider ordinalizeDataDutchProvider + * + * @depends test_return_ordinal_suffix_dutch + * + * @param $expected + * @param $number */ - public function ordinalIndicatorIndonesianProvider() + public function test_ordinalize_numbers_dutch($expected, $number) : void { - return [ - ['ke-', 1], - ['ke-', 2], - ['ke-', 23], - ['ke-', 1002], - ['ke-', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'nl')); } /** - * @return array + * @dataProvider ordinalizeDataIndonesianProvider + * + * @depends test_return_ordinal_suffix_indonesian + * + * @param $expected + * @param $number */ - public function ordinalizeDataProvider() + public function test_ordinalize_numbers_indonesian($expected, $number) : void { - return [ - ['1st', 1], - ['2nd', 2], - ['23rd', 23], - ['1002nd', 1002], - ['-111th', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'id')); } /** - * @return array + * @dataProvider ordinalizeDataPtEsItProvider + * + * @param $expected + * @param $number */ - public function ordinalizeDataDutchProvider() + public function test_ordinalize_numbers_portuguese($expected, $number) : void { - return [ - ['1e', 1], - ['2e', 2], - ['23e', 23], - ['1002e', 1002], - ['-111e', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'pt')); } /** - * @return array + * @dataProvider ordinalizeDataPtEsItProvider + * + * @param $expected + * @param $number */ - public function ordinalizeDataIndonesianProvider() + public function test_ordinalize_numbers_spanish($expected, $number) : void { - return [ - ['ke-1', 1], - ['ke-2', 2], - ['ke-23', 23], - ['ke-1002', 1002], - ['ke--111', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'es')); } /** - * @return array + * @dataProvider ordinalizeDataPtEsItProvider + * + * @param $expected + * @param $number */ - public function ordinalizeDataPtEsItProvider() + public function test_ordinalize_numbers_italian($expected, $number) : void { - return [ - ['1o', 1], - ['2o', 2], - ['23o', 23], - ['1002o', 1002], - ['-111o', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'it')); } /** - * @return array + * @dataProvider ordinalizeDataGermanProvider + * + * @param $expected + * @param $number */ - public function ordinalizeDataGermanProvider() + public function test_ordinalize_numbers_german($expected, $number) : void { - return [ - ['1.', 1], - ['2.', 2], - ['23.', 23], - ['1002.', 1002], - ['-111.', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'de')); } /** - * @return array + * @dataProvider ordinalizeDataFrenchProvider + * + * @param $expected + * @param $number */ - public function ordinalizeDataFrenchProvider() + public function test_ordinalize_numbers_french($expected, $number) : void { - return [ - ['1er', 1], - ['2e', 2], - ['23e', 23], - ['1002e', 1002], - ['-111e', -111], - ]; + $this->assertSame($expected, NumberHumanizer::ordinalize($number, 'fr')); } /** - * @return array + * @dataProvider binarySuffixDataProvider + * + * @param $expected + * @param $number + * @param string $locale */ - public function ordinalSuffixPtEsItProvider() + public function test_convert_number_to_string_with_binary_suffix($expected, $number, $locale = 'en') : void { - return [ - ['o', 1], - ['o', 2], - ['o', 23], - ['o', 1002], - ['o', -111], - ]; + $this->assertSame($expected, NumberHumanizer::binarySuffix($number, $locale)); } /** - * @return array + * @dataProvider preciseBinarySuffixDataProvider + * + * @param $expected + * @param $number + * @param string $locale + * @param int $precision */ - public function ordinalSuffixGermanProvider() + public function test_convert_number_to_string_with_precise_binary_suffix($expected, $number, $precision, $locale = 'en') : void { - return [ - ['.', 1], - ['.', 2], - ['.', 23], - ['.', 1002], - ['.', -111], - ]; + $this->assertSame($expected, NumberHumanizer::preciseBinarySuffix($number, $precision, $locale)); } - /** - * @return array - */ - public function ordinalSuffixFrenchProvider() + public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_negative_precision() : void { - return [ - ['er', 1], - ['e', 2], - ['e', 23], - ['e', 1002], - ['e', -111], - ]; + $this->expectException(\InvalidArgumentException::class); + + NumberHumanizer::preciseBinarySuffix(1, -1); } - /** - * @return array - */ - public function binarySuffixDataProvider() + public function test_statically_throw_exception_when_converting_to_string_with_precise_binary_suffix_large_precision() : void { - return [ - [-1, -1], - ['0 bytes', 0], - ['1 bytes', 1], - ['1 kB', 1024], - ['1 kB', 1025], - ['1.5 kB', 1536], - ['84.4 kB', 86450], - ['5 MB', 1048576 * 5], - ['2 GB', 1073741824 * 2], - ['3 TB', 1099511627776 * 3], - ['1.18 PB', 1325899906842624], + $this->expectException(\InvalidArgumentException::class); - ['1,5 kB', 1536, 'pl'], - ['1,18 PB', 1325899906842624, 'pl'], - ]; + NumberHumanizer::preciseBinarySuffix(1, 4); } /** - * @return array + * @dataProvider metricSuffixDataProvider + * + * @param $expected + * @param $number + * @param string $locale */ - public function preciseBinarySuffixDataProvider() + public function test_convert_number_to_string_with_metric_suffix($expected, $number, $locale = 'en') : void { - return [ - // Negative case - [-1, -1, 3], - - // Byte Cases - ['0 bytes', 0, 3], - ['1 bytes', 1, 0], - ['1023 bytes', 1023, 3], - - // Kilobyte Cases - ['1.000 kB', 1024, 3], - ['2 kB', 1588, 0], - ['1.6 kB', 1588, 1], - ['1.55 kB', 1588, 2], - ['1.551 kB', 1588, 3], - - // Megabyte Cases - ['5.00 MB', (1048576 * 5), 2], - ['5.00 MB', (1048576 * 5) + 600, 2], - ['5.001 MB', (1048576 * 5) + 600, 3], - - // Gigabyte Cases - ['2 GB', 1073741824 * 2, 0], - ['2.0 GB', 1073741824 * 2, 1], - - // Terabyte Cases - ['3.00 TB', 1099511627776 * 3, 2], + $this->assertSame($expected, NumberHumanizer::metricSuffix($number, $locale)); + } - // Petabyte Case - ['1.178 PB', 1325899906842624, 3], + public function test_statically_throw_exception_when_converting_to_string_with_metric_suffix_non_numeric_values() : void + { + $this->expectException(\InvalidArgumentException::class); - // Locale Cases - ['1,500 kB', 1536, 3, 'pl'], - ['1,178 PB', 1325899906842624, 3, 'pl'], - ]; + NumberHumanizer::metricSuffix('as12'); } /** - * @return array + * @dataProvider romanDataProvider + * + * @param $expected + * @param $number */ - public function metricSuffixDataProvider() + public function test_converts_numbers_to_roman($expected, $number) : void { - return [ - ['-1', -1], - ['0', 0], - ['1', 1], - ['101', 101], - ['1k', 1000], - ['1.2k', 1240], - ['1.24M', 1240000], - ['3.5M', 3500000], - - ['1,2k', 1240, 'pl'], - ['1,24M', 1240000, 'pl'], - ['3,5M', 3500000, 'pl'], - ]; + $this->assertSame($expected, NumberHumanizer::toRoman($number)); } /** - * @return array + * @dataProvider romanDataProvider + * + * @param $expected + * @param $number */ - public function romanDataProvider() + public function test_convert_roman_numbers_to_arabic($number, $expected) : void { - return [ - ['I', 1], - ['V', 5], - ['IX', 9], - ['X', 10], - ['CXXV', 125], - ['MCCC', 1300], - ['MMMCMXCIX', 3999], - ]; + $this->assertSame($expected, NumberHumanizer::fromRoman($number)); } /** - * @return array + * @dataProvider romanExceptionProvider + * + * @param $number */ - public function romanExceptionProvider() + public function test_statically_throw_exception_when_converting_number_is_out_of_range($number) : void { - return [ - [-1], - [4000], - ]; + $this->expectException(\InvalidArgumentException::class); + + NumberHumanizer::toRoman($number); } /** - * @return array + * @dataProvider arabicExceptionProvider + * + * @param $number */ - public function arabicExceptionProvider() + public function test_statically_throw_exception_when_converting_roman_number_is_invalid($number) : void { - return [ - [''], - ['foobar'], - ]; + $this->expectException(\InvalidArgumentException::class); + + NumberHumanizer::fromRoman($number); } } diff --git a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php index 9a27009..692364f 100644 --- a/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/StringHumanizerTest.php @@ -16,70 +16,7 @@ class StringHumanizerTest extends TestCase { - /** - * @dataProvider humanizeStringProvider - * - * @param $input - * @param $expected - * @param $capitalize - * @param $separator - * @param array $forbiddenWords - */ - public function test_humanize_strings($input, $expected, $capitalize, $separator, array $forbiddenWords) : void - { - $this->assertSame($expected, StringHumanizer::humanize($input, $capitalize, $separator, $forbiddenWords)); - } - - /** - * @dataProvider truncateStringProvider - * - * @param $text - * @param $expected - * @param $charactersCount - * @param string $append - */ - public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters($text, $expected, $charactersCount, $append = '') : void - { - $this->assertSame($expected, StringHumanizer::truncate($text, $charactersCount, $append)); - } - - /** - * @dataProvider truncateHtmlStringProvider - * - * @param $text - * @param $charactersCount - * @param $allowedTags - * @param $expected - * @param $append - */ - public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') : void - { - $this->assertSame($expected, StringHumanizer::truncateHtml($text, $charactersCount, $allowedTags, $append)); - } - - /** - * @dataProvider removeAllShortcodesProvider - * - * @param $text - * @param $expected - */ - public function test_remove_all_shortcodes_from_text($text, $expected) : void - { - $this->assertSame($expected, StringHumanizer::removeShortcodes($text)); - } - - /** - * @dataProvider removeShortcodeTagsProvider - * - * @param $text - * @param $expected - */ - public function test_remove_only_shortcode_tags_from_text($text, $expected) : void - { - $this->assertSame($expected, StringHumanizer::removeShortcodeTags($text)); - } - - public function removeAllShortcodesProvider() + public static function removeAllShortcodesProvider() { return [ ['some [text] containing [shortcodes /] and [stuff]with[/stuff] content', 'some containing and content'], @@ -87,7 +24,7 @@ public function removeAllShortcodesProvider() ]; } - public function removeShortcodeTagsProvider() + public static function removeShortcodeTagsProvider() { return [ ['some [text] containing [shortcodes /] and [stuff]with[/stuff] content', 'some containing and with content'], @@ -98,7 +35,7 @@ public function removeShortcodeTagsProvider() /** * @return array */ - public function humanizeStringProvider() + public static function humanizeStringProvider() { return [ ['news_count', 'News count', true, '_', ['id']], @@ -114,7 +51,7 @@ public function humanizeStringProvider() /** * @return array */ - public function truncateStringProvider() + public static function truncateStringProvider() { $longText = 'Lorem ipsum dolorem si amet, lorem ipsum. Dolorem sic et nunc.'; $shortText = 'Short text'; @@ -142,7 +79,7 @@ public function truncateStringProvider() /** * @return array */ - public function truncateHtmlStringProvider() + public static function truncateHtmlStringProvider() { $text = ''; @@ -162,4 +99,67 @@ public function truncateHtmlStringProvider() [$text, 75, '', 'HyperText Markup Language, commonly referred to as HTML, is the standard markup...', '...'], ]; } + + /** + * @dataProvider humanizeStringProvider + * + * @param $input + * @param $expected + * @param $capitalize + * @param $separator + * @param array $forbiddenWords + */ + public function test_humanize_strings($input, $expected, $capitalize, $separator, array $forbiddenWords) : void + { + $this->assertSame($expected, StringHumanizer::humanize($input, $capitalize, $separator, $forbiddenWords)); + } + + /** + * @dataProvider truncateStringProvider + * + * @param $text + * @param $expected + * @param $charactersCount + * @param string $append + */ + public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters($text, $expected, $charactersCount, $append = '') : void + { + $this->assertSame($expected, StringHumanizer::truncate($text, $charactersCount, $append)); + } + + /** + * @dataProvider truncateHtmlStringProvider + * + * @param $text + * @param $charactersCount + * @param $allowedTags + * @param $expected + * @param $append + */ + public function test_truncate_string_to_word_closest_to_a_certain_number_of_characters_with_html_tags($text, $charactersCount, $allowedTags, $expected, $append = '') : void + { + $this->assertSame($expected, StringHumanizer::truncateHtml($text, $charactersCount, $allowedTags, $append)); + } + + /** + * @dataProvider removeAllShortcodesProvider + * + * @param $text + * @param $expected + */ + public function test_remove_all_shortcodes_from_text($text, $expected) : void + { + $this->assertSame($expected, StringHumanizer::removeShortcodes($text)); + } + + /** + * @dataProvider removeShortcodeTagsProvider + * + * @param $text + * @param $expected + */ + public function test_remove_only_shortcode_tags_from_text($text, $expected) : void + { + $this->assertSame($expected, StringHumanizer::removeShortcodeTags($text)); + } } diff --git a/tools/composer.json b/tools/composer.json index 797e9e8..cb3fa9f 100644 --- a/tools/composer.json +++ b/tools/composer.json @@ -3,9 +3,9 @@ "description": "PHP Humanizer - Tools", "autoload": {}, "require-dev": { - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^4.6", - "phpstan/phpstan": "^1.0.0", - "friendsofphp/php-cs-fixer": "^3.1" + "phpunit/phpunit": "^10", + "vimeo/psalm": "^5", + "phpstan/phpstan": "^1", + "friendsofphp/php-cs-fixer": "^3.53" } } diff --git a/tools/composer.lock b/tools/composer.lock index 702dbc0..e9af767 100644 --- a/tools/composer.lock +++ b/tools/composer.lock @@ -4,21 +4,21 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "489c61ff2dc7801b7b9e59e0d3622b3a", + "content-hash": "007f999564b058c9d31a3924f5bdb9bc", "packages": [], "packages-dev": [ { "name": "amphp/amp", - "version": "v2.6.2", + "version": "v2.6.4", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", "shasum": "" }, "require": { @@ -30,8 +30,8 @@ "ext-json": "*", "jetbrains/phpstorm-stubs": "^2019.3", "phpunit/phpunit": "^7 | ^8 | ^9", - "psalm/phar": "^3.11@dev", - "react/promise": "^2" + "react/promise": "^2", + "vimeo/psalm": "^3.12" }, "type": "library", "extra": { @@ -86,7 +86,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.2" + "source": "https://github.com/amphp/amp/tree/v2.6.4" }, "funding": [ { @@ -94,7 +94,7 @@ "type": "github" } ], - "time": "2022-02-20T17:52:18+00:00" + "time": "2024-03-21T18:52:26+00:00" }, { "name": "amphp/byte-stream", @@ -173,91 +173,18 @@ ], "time": "2021-03-30T17:13:30+00:00" }, - { - "name": "composer/package-versions-deprecated", - "version": "1.11.99.5", - "source": { - "type": "git", - "url": "https://github.com/composer/package-versions-deprecated.git", - "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", - "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1.0 || ^2.0", - "php": "^7 || ^8" - }, - "replace": { - "ocramius/package-versions": "1.11.99" - }, - "require-dev": { - "composer/composer": "^1.9.3 || ^2.0@dev", - "ext-zip": "^1.13", - "phpunit/phpunit": "^6.5 || ^7" - }, - "type": "composer-plugin", - "extra": { - "class": "PackageVersions\\Installer", - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "PackageVersions\\": "src/PackageVersions" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" - } - ], - "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", - "support": { - "issues": "https://github.com/composer/package-versions-deprecated/issues", - "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" - }, - "funding": [ - { - "url": "https://packagist.com/", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-01-17T14:14:24+00:00" - }, { "name": "composer/pcre", - "version": "3.0.0", + "version": "3.1.3", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" + "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", "shasum": "" }, "require": { @@ -299,7 +226,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.0.0" + "source": "https://github.com/composer/pcre/tree/3.1.3" }, "funding": [ { @@ -315,20 +242,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T20:21:48+00:00" + "time": "2024-03-19T10:26:25+00:00" }, { "name": "composer/semver", - "version": "3.3.2", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", "shasum": "" }, "require": { @@ -378,9 +305,9 @@ "versioning" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" + "source": "https://github.com/composer/semver/tree/3.4.0" }, "funding": [ { @@ -396,20 +323,20 @@ "type": "tidelift" } ], - "time": "2022-04-01T19:23:25+00:00" + "time": "2023-08-31T09:50:34+00:00" }, { "name": "composer/xdebug-handler", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255", + "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255", "shasum": "" }, "require": { @@ -420,7 +347,7 @@ "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { @@ -444,9 +371,9 @@ "performance" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.4" }, "funding": [ { @@ -462,7 +389,7 @@ "type": "tidelift" } ], - "time": "2022-02-25T21:32:43+00:00" + "time": "2024-03-26T18:29:49+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -502,89 +429,17 @@ "time": "2019-12-04T15:06:13+00:00" }, { - "name": "doctrine/annotations", - "version": "1.13.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.2" - }, - "time": "2021-08-05T19:00:23+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.4.1", + "name": "doctrine/deprecations", + "version": "1.1.3", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "url": "https://github.com/doctrine/deprecations.git", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", "shasum": "" }, "require": { @@ -592,132 +447,33 @@ }, "require-dev": { "doctrine/coding-standard": "^9", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-03-03T08:28:38+00:00" - }, - { - "name": "doctrine/lexer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2022-02-28T11:07:21+00:00" + "time": "2024-01-30T19:34:25+00:00" }, { "name": "felixfbecker/advanced-json-rpc", @@ -820,54 +576,113 @@ }, "time": "2022-03-02T22:36:06+00:00" }, + { + "name": "fidry/cpu-core-counter", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2024-02-07T09:43:46+00:00" + }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.8.0", + "version": "v3.53.0", "source": { "type": "git", - "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3" + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "69a19093a9ded8d1baac62ed6c009b8bc148d008" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", - "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/69a19093a9ded8d1baac62ed6c009b8bc148d008", + "reference": "69a19093a9ded8d1baac62ed6c009b8bc148d008", "shasum": "" }, "require": { - "composer/semver": "^3.2", + "composer/semver": "^3.4", "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^1.13", + "ext-filter": "*", "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", - "php-cs-fixer/diff": "^2.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.23", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php81": "^1.25", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" + "sebastian/diff": "^4.0 || ^5.0 || ^6.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", + "symfony/finder": "^5.4 || ^6.0 || ^7.0", + "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-mbstring": "^1.28", + "symfony/polyfill-php80": "^1.28", + "symfony/polyfill-php81": "^1.28", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { + "facile-it/paraunit": "^1.3 || ^2.0", + "infection/infection": "^0.27.11", "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^1.5", - "mikey179/vfsstream": "^1.6.10", - "php-coveralls/php-coveralls": "^2.5.2", + "keradus/cli-executor": "^2.1", + "mikey179/vfsstream": "^1.6.11", + "php-coveralls/php-coveralls": "^2.7", "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.15", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.5", - "phpunitgoodpractices/traits": "^1.9.1", - "symfony/phpunit-bridge": "^6.0", - "symfony/yaml": "^5.4 || ^6.0" + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4", + "phpunit/phpunit": "^9.6 || ^10.5.5 || ^11.0.2", + "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -897,9 +712,15 @@ } ], "description": "A tool to automatically fix PHP code style", + "keywords": [ + "Static code analysis", + "fixer", + "standards", + "static analysis" + ], "support": { - "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.8.0" + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.53.0" }, "funding": [ { @@ -907,20 +728,20 @@ "type": "github" } ], - "time": "2022-03-18T17:20:59+00:00" + "time": "2024-04-08T15:03:00+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -958,7 +779,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -966,20 +787,20 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v4.0.0", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" + "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/132c75c7dd83e45353ebb9c6c9f591952995bbf0", + "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0", "shasum": "" }, "require": { @@ -990,7 +811,7 @@ "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", "squizlabs/php_codesniffer": "~3.5" }, "type": "library", @@ -1015,27 +836,27 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.4.1" }, - "time": "2020-12-01T19:48:11+00:00" + "time": "2024-01-31T06:18:54+00:00" }, { "name": "nikic/php-parser", - "version": "v4.14.0", + "version": "v4.19.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", + "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.1" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", @@ -1071,79 +892,27 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" - }, - "time": "2022-05-31T20:59:12+00:00" - }, - { - "name": "openlss/lib-array2xml", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/nullivex/lib-array2xml.git", - "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", - "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "type": "library", - "autoload": { - "psr-0": { - "LSS": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Bryan Tong", - "email": "bryan@nullivex.com", - "homepage": "https://www.nullivex.com/" - }, - { - "name": "Tony Butler", - "email": "spudz76@gmail.com", - "homepage": "https://www.nullivex.com/" - } - ], - "description": "Array2XML conversion library credit to lalit.org", - "homepage": "https://www.nullivex.com/", - "keywords": [ - "array", - "array conversion", - "xml", - "xml conversion" - ], - "support": { - "issues": "https://github.com/nullivex/lib-array2xml/issues", - "source": "https://github.com/nullivex/lib-array2xml/tree/master" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" }, - "time": "2019-03-29T20:06:56+00:00" + "time": "2024-03-17T08:10:35+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -1184,9 +953,15 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -1239,58 +1014,6 @@ }, "time": "2022-02-21T01:04:05+00:00" }, - { - "name": "php-cs-fixer/diff", - "version": "v2.0.2", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/diff.git", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", - "symfony/process": "^3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "sebastian/diff v3 backport support for PHP 5.6+", - "homepage": "https://github.com/PHP-CS-Fixer", - "keywords": [ - "diff" - ], - "support": { - "issues": "https://github.com/PHP-CS-Fixer/diff/issues", - "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" - }, - "time": "2020-10-14T08:32:19+00:00" - }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", @@ -1403,25 +1126,33 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.1", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "77a32518733312af16a44300404e945338981de3" + "reference": "153ae662783729388a584b4361f2545e4d841e3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", - "reference": "77a32518733312af16a44300404e945338981de3", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", + "reference": "153ae662783729388a584b4361f2545e4d841e3c", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.13" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -1447,89 +1178,69 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" }, - "time": "2022-03-15T21:29:03+00:00" + "time": "2024-02-23T11:10:43+00:00" }, { - "name": "phpspec/prophecy", - "version": "v1.15.0", + "name": "phpstan/phpdoc-parser", + "version": "1.28.0", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", + "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { "psr-4": { - "Prophecy\\": "src/Prophecy" + "PHPStan\\PhpDocParser\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com/" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" + "license": [ + "MIT" ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0" }, - "time": "2021-12-08T12:19:24+00:00" + "time": "2024-04-03T18:51:33+00:00" }, { "name": "phpstan/phpstan", - "version": "1.7.11", + "version": "1.10.66", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "62fcadcde81b4037e42ad2489119d31c46f00191" + "reference": "94779c987e4ebd620025d9e5fdd23323903950bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/62fcadcde81b4037e42ad2489119d31c46f00191", - "reference": "62fcadcde81b4037e42ad2489119d31c46f00191", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/94779c987e4ebd620025d9e5fdd23323903950bd", + "reference": "94779c987e4ebd620025d9e5fdd23323903950bd", "shasum": "" }, "require": { @@ -1553,9 +1264,16 @@ "MIT" ], "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.7.11" + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" }, "funding": [ { @@ -1566,57 +1284,53 @@ "url": "https://github.com/phpstan", "type": "github" }, - { - "url": "https://www.patreon.com/phpstan", - "type": "patreon" - }, { "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", "type": "tidelift" } ], - "time": "2022-06-07T08:47:03+00:00" + "time": "2024-03-28T16:17:31+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.15", + "version": "10.1.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", + "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.1" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "10.1-dev" } }, "autoload": { @@ -1644,7 +1358,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14" }, "funding": [ { @@ -1652,32 +1367,32 @@ "type": "github" } ], - "time": "2022-03-07T09:28:20+00:00" + "time": "2024-03-12T15:33:41+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -1704,7 +1419,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" }, "funding": [ { @@ -1712,28 +1428,28 @@ "type": "github" } ], - "time": "2021-12-02T12:48:52+00:00" + "time": "2023-08-31T06:24:48+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.1.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-pcntl": "*" @@ -1741,7 +1457,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -1767,7 +1483,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, "funding": [ { @@ -1775,32 +1491,32 @@ "type": "github" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2023-02-03T06:56:09+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.4", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -1826,7 +1542,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, "funding": [ { @@ -1834,32 +1551,32 @@ "type": "github" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2023-08-31T14:07:24+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -1885,7 +1602,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" }, "funding": [ { @@ -1893,24 +1610,23 @@ "type": "github" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2023-02-03T06:57:52+00:00" }, { "name": "phpunit/phpunit", - "version": "9.5.20", + "version": "10.5.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" + "reference": "c1f736a473d21957ead7e94fcc029f571895abf5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c1f736a473d21957ead7e94fcc029f571895abf5", + "reference": "c1f736a473d21957ead7e94fcc029f571895abf5", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -1920,32 +1636,26 @@ "myclabs/deep-copy": "^1.10.1", "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.0", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.5", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.1", + "sebastian/global-state": "^6.0.1", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -1953,7 +1663,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-main": "10.5-dev" } }, "autoload": { @@ -1984,7 +1694,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.17" }, "funding": [ { @@ -1994,77 +1705,37 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" - } - ], - "time": "2022-04-01T12:37:26+00:00" - }, - { - "name": "psr/cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + }, { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/master" - }, - "time": "2016-08-06T20:24:11+00:00" + "time": "2024-04-05T04:39:01+00:00" }, { "name": "psr/container", - "version": "1.1.2", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -2091,9 +1762,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-11-05T16:50:12+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/event-dispatcher", @@ -2147,30 +1818,30 @@ }, { "name": "psr/log", - "version": "1.1.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2191,34 +1862,34 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/3.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:46:02+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -2241,7 +1912,8 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" }, "funding": [ { @@ -2249,32 +1921,32 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T07:12:49+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -2297,7 +1969,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, "funding": [ { @@ -2305,32 +1977,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2023-02-03T06:58:43+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2352,7 +2024,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { @@ -2360,34 +2032,36 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "2db5010a484d53ebf536087a70b4a5423c102372" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -2426,7 +2100,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" }, "funding": [ { @@ -2434,33 +2109,33 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2023-08-14T13:18:12+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "68ff824baeae169ec9f2137158ee529584553799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.2-dev" } }, "autoload": { @@ -2483,7 +2158,8 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" }, "funding": [ { @@ -2491,33 +2167,33 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-21T08:37:17+00:00" }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -2549,7 +2225,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, "funding": [ { @@ -2557,27 +2234,27 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2024-03-02T07:15:17+00:00" }, { "name": "sebastian/environment", - "version": "5.1.4", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -2585,7 +2262,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -2604,7 +2281,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -2612,7 +2289,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" }, "funding": [ { @@ -2620,34 +2298,34 @@ "type": "github" } ], - "time": "2022-04-03T09:37:03+00:00" + "time": "2024-03-23T08:47:14+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -2689,7 +2367,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" }, "funding": [ { @@ -2697,38 +2376,35 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2024-03-02T07:17:12+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.5", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -2747,13 +2423,14 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" }, "funding": [ { @@ -2761,33 +2438,33 @@ "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2024-03-02T07:19:19+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -2810,7 +2487,8 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" }, "funding": [ { @@ -2818,34 +2496,34 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -2867,7 +2545,7 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { @@ -2875,32 +2553,32 @@ "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2922,7 +2600,7 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { @@ -2930,32 +2608,32 @@ "type": "github" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -2982,10 +2660,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" }, "funding": [ { @@ -2993,32 +2671,32 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T07:05:40+00:00" }, { - "name": "sebastian/resource-operations", - "version": "3.0.3", + "name": "sebastian/type", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -3033,14 +2711,15 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, "funding": [ { @@ -3048,32 +2727,29 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2023-02-03T07:10:45+00:00" }, { - "name": "sebastian/type", - "version": "3.0.0", + "name": "sebastian/version", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -3092,11 +2768,11 @@ "role": "lead" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" }, "funding": [ { @@ -3104,109 +2780,114 @@ "type": "github" } ], - "time": "2022-03-15T09:54:48+00:00" + "time": "2023-02-07T11:34:05+00:00" }, { - "name": "sebastian/version", - "version": "3.0.2", + "name": "spatie/array-to-xml", + "version": "3.2.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "url": "https://github.com/spatie/array-to-xml.git", + "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/c95fd4db94ec199f798d4b5b4a81757bd20d88ab", + "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-dom": "*", + "php": "^8.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } + "require-dev": { + "mockery/mockery": "^1.2", + "pestphp/pest": "^1.21", + "spatie/pest-plugin-snapshots": "^1.1" }, + "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Spatie\\ArrayToXml\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://freek.dev/", + "role": "Developer" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Convert an array to xml", + "homepage": "https://github.com/spatie/array-to-xml", + "keywords": [ + "array", + "convert", + "xml" + ], "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "source": "https://github.com/spatie/array-to-xml/tree/3.2.3" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", "type": "github" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2024-02-07T10:39:02+00:00" }, { "name": "symfony/console", - "version": "v5.4.9", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb" + "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/829d5d1bf60b2efeb0887b7436873becc71a45eb", - "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb", + "url": "https://api.github.com/repos/symfony/console/zipball/a2708a5da5c87d1d0d52937bdeac625df659e11f", + "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -3235,12 +2916,12 @@ "homepage": "https://symfony.com/", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.9" + "source": "https://github.com/symfony/console/tree/v6.4.6" }, "funding": [ { @@ -3256,29 +2937,29 @@ "type": "tidelift" } ], - "time": "2022-05-18T06:17:34+00:00" + "time": "2024-03-29T19:07:53+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.1", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -3307,7 +2988,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -3323,48 +3004,43 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.9", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc" + "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", - "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ae9d3a6f3003a6caf56acd7466d8d52378d44fef", + "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -3392,7 +3068,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.3" }, "funding": [ { @@ -3408,33 +3084,30 @@ "type": "tidelift" } ], - "time": "2022-05-05T16:45:39+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.1", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + "reference": "4e64b49bf370ade88e567de29465762e316e4224" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/4e64b49bf370ade88e567de29465762e316e4224", + "reference": "4e64b49bf370ade88e567de29465762e316e4224", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -3471,7 +3144,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.2" }, "funding": [ { @@ -3487,27 +3160,26 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/filesystem", - "version": "v5.4.9", + "version": "v6.4.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba" + "reference": "9919b5509ada52cc7f66f9a35c86a4a29955c9d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/36a017fa4cce1eff1b8e8129ff53513abcef05ba", - "reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/9919b5509ada52cc7f66f9a35c86a4a29955c9d3", + "reference": "9919b5509ada52cc7f66f9a35c86a4a29955c9d3", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-mbstring": "~1.8" }, "type": "library", "autoload": { @@ -3535,7 +3207,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.9" + "source": "https://github.com/symfony/filesystem/tree/v6.4.6" }, "funding": [ { @@ -3551,26 +3223,27 @@ "type": "tidelift" } ], - "time": "2022-05-20T13:55:35+00:00" + "time": "2024-03-21T19:36:20+00:00" }, { "name": "symfony/finder", - "version": "v5.4.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9" + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9b630f3427f3ebe7cd346c277a1408b00249dad9", - "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9", + "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce", + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0|^7.0" }, "type": "library", "autoload": { @@ -3598,7 +3271,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.8" + "source": "https://github.com/symfony/finder/tree/v6.4.0" }, "funding": [ { @@ -3614,27 +3287,25 @@ "type": "tidelift" } ], - "time": "2022-04-15T08:07:45+00:00" + "time": "2023-10-31T17:30:12+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.4.3", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8" + "reference": "22301f0e7fdeaacc14318928612dee79be99860e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/cc1147cb11af1b43f503ac18f31aa3bec213aba8", - "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/22301f0e7fdeaacc14318928612dee79be99860e", + "reference": "22301f0e7fdeaacc14318928612dee79be99860e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -3667,7 +3338,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.3" + "source": "https://github.com/symfony/options-resolver/tree/v6.4.0" }, "funding": [ { @@ -3683,20 +3354,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2023-08-08T10:16:24+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", "shasum": "" }, "require": { @@ -3710,9 +3381,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3749,7 +3417,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, "funding": [ { @@ -3765,20 +3433,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "433d05519ce6990bf3530fba6957499d327395c2" + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", - "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", "shasum": "" }, "require": { @@ -3789,9 +3457,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3830,7 +3495,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" }, "funding": [ { @@ -3846,20 +3511,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", "shasum": "" }, "require": { @@ -3870,9 +3535,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3914,7 +3576,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" }, "funding": [ { @@ -3930,20 +3592,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { @@ -3957,9 +3619,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -3997,86 +3656,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-24T11:49:31+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com/", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -4092,20 +3672,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", "shasum": "" }, "require": { @@ -4113,9 +3693,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4159,7 +3736,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" }, "funding": [ { @@ -4175,20 +3752,20 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.26.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", "shasum": "" }, "require": { @@ -4196,9 +3773,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -4238,7 +3812,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" }, "funding": [ { @@ -4254,25 +3828,24 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/process", - "version": "v5.4.8", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3" + "reference": "710e27879e9be3395de2b98da3f52a946039f297" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", - "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", + "url": "https://api.github.com/repos/symfony/process/zipball/710e27879e9be3395de2b98da3f52a946039f297", + "reference": "710e27879e9be3395de2b98da3f52a946039f297", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -4300,7 +3873,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.8" + "source": "https://github.com/symfony/process/tree/v6.4.4" }, "funding": [ { @@ -4316,37 +3889,33 @@ "type": "tidelift" } ], - "time": "2022-04-08T05:07:18+00:00" + "time": "2024-02-20T12:31:00+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.1", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" + "reference": "11bbf19a0fb7b36345861e85c5768844c552906e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", - "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e", + "reference": "11bbf19a0fb7b36345861e85c5768844c552906e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.1", + "psr/container": "^1.1|^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4356,7 +3925,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4383,7 +3955,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.2" }, "funding": [ { @@ -4399,25 +3971,25 @@ "type": "tidelift" } ], - "time": "2022-03-13T20:07:29+00:00" + "time": "2023-12-19T21:51:00+00:00" }, { "name": "symfony/stopwatch", - "version": "v5.4.5", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30" + "reference": "416596166641f1f728b0a64f5b9dd07cceb410c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", - "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/416596166641f1f728b0a64f5b9dd07cceb410c1", + "reference": "416596166641f1f728b0a64f5b9dd07cceb410c1", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/service-contracts": "^1|^2|^3" + "php": ">=8.1", + "symfony/service-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -4445,7 +4017,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.5" + "source": "https://github.com/symfony/stopwatch/tree/v6.4.3" }, "funding": [ { @@ -4461,38 +4033,38 @@ "type": "tidelift" } ], - "time": "2022-02-18T16:06:09+00:00" + "time": "2024-01-23T14:35:58+00:00" }, { "name": "symfony/string", - "version": "v5.4.9", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99" + "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", - "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", + "url": "https://api.github.com/repos/symfony/string/zipball/4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", + "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": ">=3.0" + "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -4531,7 +4103,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.9" + "source": "https://github.com/symfony/string/tree/v6.4.4" }, "funding": [ { @@ -4547,20 +4119,20 @@ "type": "tidelift" } ], - "time": "2022-04-19T10:40:37+00:00" + "time": "2024-02-01T13:16:41+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -4589,7 +4161,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -4597,28 +4169,28 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2024-03-03T12:36:25+00:00" }, { "name": "vimeo/psalm", - "version": "4.23.0", + "version": "5.23.1", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88" + "reference": "8471a896ccea3526b26d082f4461eeea467f10a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/f1fe6ff483bf325c803df9f510d09a03fd796f88", - "reference": "f1fe6ff483bf325c803df9f510d09a03fd796f88", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/8471a896ccea3526b26d082f4461eeea467f10a4", + "reference": "8471a896ccea3526b26d082f4461eeea467f10a4", "shasum": "" }, "require": { "amphp/amp": "^2.4.2", "amphp/byte-stream": "^1.5", - "composer/package-versions-deprecated": "^1.8.0", + "composer-runtime-api": "^2", "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^1.1 || ^2.0 || ^3.0", + "composer/xdebug-handler": "^2.0 || ^3.0", "dnoegel/php-xdg-base-dir": "^0.1.1", "ext-ctype": "*", "ext-dom": "*", @@ -4627,34 +4199,38 @@ "ext-mbstring": "*", "ext-simplexml": "*", "ext-tokenizer": "*", - "felixfbecker/advanced-json-rpc": "^3.0.3", - "felixfbecker/language-server-protocol": "^1.5", + "felixfbecker/advanced-json-rpc": "^3.1", + "felixfbecker/language-server-protocol": "^1.5.2", + "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.13", - "openlss/lib-array2xml": "^1.0", - "php": "^7.1|^8", - "sebastian/diff": "^3.0 || ^4.0", - "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0", - "symfony/polyfill-php80": "^1.25", - "webmozart/path-util": "^2.3" + "nikic/php-parser": "^4.16", + "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", + "sebastian/diff": "^4.0 || ^5.0 || ^6.0", + "spatie/array-to-xml": "^2.17.0 || ^3.0", + "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0" + }, + "conflict": { + "nikic/php-parser": "4.17.0" }, "provide": { "psalm/psalm": "self.version" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "brianium/paratest": "^4.0||^6.0", + "amphp/phpunit-util": "^2.0", + "bamarni/composer-bin-plugin": "^1.4", + "brianium/paratest": "^6.9", "ext-curl": "*", + "mockery/mockery": "^1.5", + "nunomaduro/mock-final-classes": "^1.1", "php-parallel-lint/php-parallel-lint": "^1.2", - "phpdocumentor/reflection-docblock": "^5", - "phpmyadmin/sql-parser": "5.1.0||dev-master", - "phpspec/prophecy": ">=1.9.0", - "phpunit/phpunit": "^9.0", - "psalm/plugin-phpunit": "^0.16", - "slevomat/coding-standard": "^7.0", - "squizlabs/php_codesniffer": "^3.5", - "symfony/process": "^4.3 || ^5.0 || ^6.0", - "weirdan/prophecy-shim": "^1.0 || ^2.0" + "phpstan/phpdoc-parser": "^1.6", + "phpunit/phpunit": "^9.6", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.6", + "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0" }, "suggest": { "ext-curl": "In order to send data to shepherd", @@ -4667,20 +4243,17 @@ "psalm-refactor", "psalter" ], - "type": "library", + "type": "project", "extra": { "branch-alias": { - "dev-master": "4.x-dev", + "dev-master": "5.x-dev", + "dev-4.x": "4.x-dev", "dev-3.x": "3.x-dev", "dev-2.x": "2.x-dev", "dev-1.x": "1.x-dev" } }, "autoload": { - "files": [ - "src/functions.php", - "src/spl_object_id.php" - ], "psr-4": { "Psalm\\": "src/Psalm/" } @@ -4698,13 +4271,15 @@ "keywords": [ "code", "inspection", - "php" + "php", + "static analysis" ], "support": { + "docs": "https://psalm.dev/docs", "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.23.0" + "source": "https://github.com/vimeo/psalm" }, - "time": "2022-04-28T17:35:49+00:00" + "time": "2024-03-11T20:33:46+00:00" }, { "name": "webmozart/assert", @@ -4763,57 +4338,6 @@ "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, "time": "2022-06-03T18:03:27+00:00" - }, - { - "name": "webmozart/path-util", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/path-util.git", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "webmozart/assert": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\PathUtil\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", - "support": { - "issues": "https://github.com/webmozart/path-util/issues", - "source": "https://github.com/webmozart/path-util/tree/2.3.0" - }, - "abandoned": "symfony/filesystem", - "time": "2015-12-17T08:42:14+00:00" } ], "aliases": [], @@ -4823,5 +4347,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.6.0" } diff --git a/tools/php-cs-fixer b/tools/php-cs-fixer deleted file mode 100755 index 859a4c38b0f1091a195136d34f53c166253e449d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1852521 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'^g7%hYO# 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�m$MJO@XIb1Lfoum@DyKQ(wrhvu_Oz8vM` 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�bl(HqYO$0W-H}klZ|YdrFZo)@*N_dT4(FC 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 EKPCXzng9R* From 75da4465ed30a2a42ba8ca6f469fa19b165d1090 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 11 Apr 2024 10:28:27 +0000 Subject: [PATCH 167/193] Updated CHANGELOG.md --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 908dddd..df52d6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2024-01-08 +## [Unreleased] - 2024-04-11 ### Added - [#133](https://github.com/coduo/php-humanizer/pull/133) - **Slovak translation added for Oxford and Datetime** - [@jerony-mo](https://github.com/jerony-mo) @@ -8,8 +8,13 @@ - [#131](https://github.com/coduo/php-humanizer/pull/131) - **Using the assertSame to make assert equals restricted.** - [@peter279k](https://github.com/peter279k) ### Fixed +- [90efee](https://github.com/coduo/php-humanizer/commit/90efee54b12d083d7d4ec62d52cdb7f2a5c9641d) - **development tools dependencies configuration** - [@norberttech](https://github.com/norberttech) +- [fe058c](https://github.com/coduo/php-humanizer/commit/fe058ca2ecb9aa90f8c688a25a9327b7c2050156) - **static analyze github workflow php version** - [@norberttech](https://github.com/norberttech) - [#132](https://github.com/coduo/php-humanizer/pull/132) - **Fix the CI status badge URL.** - [@peter279k](https://github.com/peter279k) +### Updated +- [c5023f](https://github.com/coduo/php-humanizer/commit/c5023fa601eca56a39f23e9a8274d80f4a4a6c6a) - **project to latest versio of php and dependencies** - [@norberttech](https://github.com/norberttech) + ## [4.0.3] - 2022-06-07 ### Added From b18a11af5c694d8041fe585d687a6d5c4b8f78db Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz <1921950+norberttech@users.noreply.github.com> Date: Thu, 11 Apr 2024 12:30:21 +0200 Subject: [PATCH 168/193] Update README.md --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 70a8769..55c25a5 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,11 @@ # PHP Humanizer -![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=5.x) +[![Tests](https://github.com/coduo/php-humanizer/actions/workflows/tests.yml/badge.svg?branch=5.x)](https://github.com/coduo/php-humanizer/actions/workflows/tests.yml) [![Latest Stable Version](https://poser.pugx.org/coduo/php-humanizer/v/stable)](https://packagist.org/packages/coduo/php-humanizer) [![Total Downloads](https://poser.pugx.org/coduo/php-humanizer/downloads)](https://packagist.org/packages/coduo/php-humanizer) [![Latest Unstable Version](https://poser.pugx.org/coduo/php-humanizer/v/unstable)](https://packagist.org/packages/coduo/php-humanizer) [![License](https://poser.pugx.org/coduo/php-humanizer/license)](https://packagist.org/packages/coduo/php-humanizer) -### Tests -* ![Tests](https://github.com/coduo/php-humanizer/workflows/Tests/badge.svg?branch=5.x) - 5.x - [Readme for 5.x version](https://github.com/coduo/php-humanizer/tree/5.x/README.md) From 9d5058698294312d79f6def8613e8011466c4f84 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 11 Apr 2024 10:30:46 +0000 Subject: [PATCH 169/193] Updated CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index df52d6f..15ad3f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - [#132](https://github.com/coduo/php-humanizer/pull/132) - **Fix the CI status badge URL.** - [@peter279k](https://github.com/peter279k) ### Updated +- [b18a11](https://github.com/coduo/php-humanizer/commit/b18a11af5c694d8041fe585d687a6d5c4b8f78db) - **README.md** - [@norberttech](https://github.com/norberttech) - [c5023f](https://github.com/coduo/php-humanizer/commit/c5023fa601eca56a39f23e9a8274d80f4a4a6c6a) - **project to latest versio of php and dependencies** - [@norberttech](https://github.com/norberttech) ## [4.0.3] - 2022-06-07 From e7b2492852a8b647eaa570495dbc2ec5dce31f40 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 11 Apr 2024 10:31:58 +0000 Subject: [PATCH 170/193] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15ad3f8..59b4b95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2024-04-11 +## [5.0.0] - 2024-04-11 ### Added - [#133](https://github.com/coduo/php-humanizer/pull/133) - **Slovak translation added for Oxford and Datetime** - [@jerony-mo](https://github.com/jerony-mo) From fb621fda3e73428af8bba55f697c51daf002580b Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 19 Jan 2025 22:13:07 -0600 Subject: [PATCH 171/193] Updated project to PHP 8.4 --- .github/workflows/static-analyze.yml | 2 +- .github/workflows/tests.yml | 2 +- baseline.xml | 26 - composer.json | 9 +- composer.lock | 599 +++++ psalm.xml | 20 - .../PHPHumanizer/Aeon/Calendar/Formatter.php | 4 + .../Aeon/Calendar/UnitCompound.php | 4 + tools/composer.json | 1 - tools/composer.lock | 2228 ++++++++--------- 10 files changed, 1632 insertions(+), 1263 deletions(-) delete mode 100644 baseline.xml create mode 100644 composer.lock delete mode 100644 psalm.xml diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml index 9f40c7a..c7f27f0 100644 --- a/.github/workflows/static-analyze.yml +++ b/.github/workflows/static-analyze.yml @@ -19,7 +19,7 @@ jobs: dependencies: - "locked" php-version: - - "8.1" + - "8.2" operating-system: - "ubuntu-latest" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 7a80269..02651fc 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -21,9 +21,9 @@ jobs: - "lowest" - "highest" php-version: - - "8.1" - "8.2" - "8.3" + - "8.4" operating-system: - "ubuntu-latest" diff --git a/baseline.xml b/baseline.xml deleted file mode 100644 index 96ef6bc..0000000 --- a/baseline.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - $diff->{$unit->getDateIntervalSymbol()} - - - - - new $strategy() - - - - - $resourceName - - - $file - $resourceName - - - getBasename - getPathname - - - diff --git a/composer.json b/composer.json index 138d0f5..288b011 100644 --- a/composer.json +++ b/composer.json @@ -15,13 +15,13 @@ } ], "require": { - "php": "~8.1 || ~8.2 || ~8.3", + "php": "~8.2 || ~8.3 || ~8.4", "symfony/translation": "~5.4||~6.4||~7", - "symfony/yaml": "~5.4||~6.4||~7", - "aeon-php/calendar": "^1.0" + "symfony/yaml": "~5.4||~6.4||~7" }, "require-dev": { - "thunderer/shortcode": "^0.7" + "thunderer/shortcode": "^0.7", + "aeon-php/calendar": "^1.0" }, "config": { "bin-dir": "bin" @@ -48,7 +48,6 @@ "tools/vendor/bin/phpunit" ], "static:analyze": [ - "tools/vendor/bin/psalm --output-format=compact", "tools/vendor/bin/phpstan analyze -c phpstan.neon", "tools/vendor/bin/php-cs-fixer fix --dry-run" ], diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..1cbd9dc --- /dev/null +++ b/composer.lock @@ -0,0 +1,599 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "3641b1dd174b159ca3de92420f61b789", + "packages": [ + { + "name": "symfony/deprecation-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.2.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "e2674a30132b7cc4d74540d6c2573aa363f05923" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/e2674a30132b7cc4d74540d6c2573aa363f05923", + "reference": "e2674a30132b7cc4d74540d6c2573aa363f05923", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.18|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/translation/tree/v7.2.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-07T08:18:10+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com/", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "099581e99f557e9f16b43c5916c26380b54abb22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/099581e99f557e9f16b43c5916c26380b54abb22", + "reference": "099581e99f557e9f16b43c5916c26380b54abb22", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com/", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-23T06:56:12+00:00" + } + ], + "packages-dev": [ + { + "name": "aeon-php/calendar", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/aeon-php/calendar.git", + "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aeon-php/calendar/zipball/2cfc45a2cd28b78f1450d8155a1c62df2efe45de", + "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de", + "shasum": "" + }, + "require": { + "php": "~8.1.10 || ~8.2" + }, + "require-dev": { + "ext-bcmath": "*", + "ext-pcov": "*" + }, + "suggest": { + "ext-bcmath": "Compare time units with high precision" + }, + "type": "library", + "autoload": { + "psr-4": { + "Aeon\\": [ + "src/Aeon" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHP type safe, immutable calendar library", + "keywords": [ + "calendar", + "date", + "datetime", + "immutable", + "time" + ], + "support": { + "issues": "https://github.com/aeon-php/calendar/issues", + "source": "https://github.com/aeon-php/calendar/tree/1.0.9" + }, + "time": "2023-08-29T09:47:37+00:00" + }, + { + "name": "thunderer/shortcode", + "version": "v0.7.6", + "source": { + "type": "git", + "url": "https://github.com/thunderer/Shortcode.git", + "reference": "9f81424b4909007483d93c5defc0917d8a58debd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thunderer/Shortcode/zipball/9f81424b4909007483d93c5defc0917d8a58debd", + "reference": "9f81424b4909007483d93c5defc0917d8a58debd", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": ">=4.1", + "symfony/yaml": ">=2.0" + }, + "suggest": { + "ext-dom": "if you want to use XML serializer", + "ext-json": "if you want to use JSON serializer", + "symfony/yaml": "if you want to use YAML serializer" + }, + "type": "library", + "autoload": { + "psr-4": { + "Thunder\\Shortcode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tomasz Kowalczyk", + "email": "tomasz@kowalczyk.cc" + } + ], + "description": "Advanced shortcode (BBCode) parser and engine for PHP", + "keywords": [ + "bbcode", + "engine", + "library", + "parser", + "shortcode" + ], + "support": { + "issues": "https://github.com/thunderer/Shortcode/issues", + "source": "https://github.com/thunderer/Shortcode/tree/v0.7.6" + }, + "time": "2024-12-15T21:57:40+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "~8.2 || ~8.3 || ~8.4" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/psalm.xml b/psalm.xml deleted file mode 100644 index 96ca92a..0000000 --- a/psalm.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php index 65ec949..21cf462 100644 --- a/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php @@ -26,6 +26,10 @@ public function __construct(TranslatorInterface $translator) public function timeUnit(Unit $unit, string $locale = 'en') : string { + if (!\class_exists('\Aeon\Calendar\Gregorian\Calendar')) { + throw new \RuntimeException('Please add "aeon-php/calendar": ^1.0 to composer.json first'); + } + $parts = []; foreach ((new UnitCompound($unit))->components() as $component) { diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php index 117d5e3..c754296 100644 --- a/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php @@ -37,6 +37,10 @@ public function __construct(Unit $timeUnit) */ public function components() : array { + if (!\class_exists('\Aeon\Calendar\Gregorian\Calendar')) { + throw new \RuntimeException('Please add "aeon-php/calendar": ^1.0 to composer.json first'); + } + $unit = $this->unit; $compoundResults = []; diff --git a/tools/composer.json b/tools/composer.json index cb3fa9f..31cd76d 100644 --- a/tools/composer.json +++ b/tools/composer.json @@ -4,7 +4,6 @@ "autoload": {}, "require-dev": { "phpunit/phpunit": "^10", - "vimeo/psalm": "^5", "phpstan/phpstan": "^1", "friendsofphp/php-cs-fixer": "^3.53" } diff --git a/tools/composer.lock b/tools/composer.lock index e9af767..7fdbcf4 100644 --- a/tools/composer.lock +++ b/tools/composer.lock @@ -4,48 +4,35 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "007f999564b058c9d31a3924f5bdb9bc", + "content-hash": "52130002fb8d6b03652b0158924085b4", "packages": [], "packages-dev": [ { - "name": "amphp/amp", - "version": "v2.6.4", + "name": "clue/ndjson-react", + "version": "v1.3.0", "source": { "type": "git", - "url": "https://github.com/amphp/amp.git", - "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" + "url": "https://github.com/clue/reactphp-ndjson.git", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", - "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=5.3", + "react/stream": "^1.2" }, "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1", - "ext-json": "*", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^7 | ^8 | ^9", - "react/promise": "^2", - "vimeo/psalm": "^3.12" + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", + "react/event-loop": "^1.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, "autoload": { - "files": [ - "lib/functions.php", - "lib/Internal/functions.php" - ], "psr-4": { - "Amp\\": "lib" + "Clue\\React\\NDJson\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -54,149 +41,68 @@ ], "authors": [ { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" + "name": "Christian Lück", + "email": "christian@clue.engineering" } ], - "description": "A non-blocking concurrency framework for PHP applications.", - "homepage": "https://amphp.org/amp", + "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", + "homepage": "https://github.com/clue/reactphp-ndjson", "keywords": [ - "async", - "asynchronous", - "awaitable", - "concurrency", - "event", - "event-loop", - "future", - "non-blocking", - "promise" + "NDJSON", + "json", + "jsonlines", + "newline", + "reactphp", + "streaming" ], "support": { - "irc": "irc://irc.freenode.org/amphp", - "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.4" + "issues": "https://github.com/clue/reactphp-ndjson/issues", + "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" }, "funding": [ { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2024-03-21T18:52:26+00:00" - }, - { - "name": "amphp/byte-stream", - "version": "v1.8.1", - "source": { - "type": "git", - "url": "https://github.com/amphp/byte-stream.git", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", - "shasum": "" - }, - "require": { - "amphp/amp": "^2", - "php": ">=7.1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1.4", - "friendsofphp/php-cs-fixer": "^2.3", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^6 || ^7 || ^8", - "psalm/phar": "^3.11.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "files": [ - "lib/functions.php" - ], - "psr-4": { - "Amp\\ByteStream\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" + "url": "https://clue.engineering/support", + "type": "custom" }, { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "http://amphp.org/byte-stream", - "keywords": [ - "amp", - "amphp", - "async", - "io", - "non-blocking", - "stream" - ], - "support": { - "irc": "irc://irc.freenode.org/amphp", - "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" - }, - "funding": [ - { - "url": "https://github.com/amphp", + "url": "https://github.com/clue", "type": "github" } ], - "time": "2021-03-30T17:13:30+00:00" + "time": "2022-12-23T10:58:28+00:00" }, { "name": "composer/pcre", - "version": "3.1.3", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8" + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", - "reference": "5b16e25a5355f1f3afdfc2f954a0a80aec4826a8", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, "branch-alias": { "dev-main": "3.x-dev" } @@ -226,7 +132,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.3" + "source": "https://github.com/composer/pcre/tree/3.3.2" }, "funding": [ { @@ -242,28 +148,28 @@ "type": "tidelift" } ], - "time": "2024-03-19T10:26:25+00:00" + "time": "2024-11-12T16:29:46+00:00" }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -307,7 +213,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -323,20 +229,20 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "composer/xdebug-handler", - "version": "3.0.4", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255" + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255", - "reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { @@ -373,7 +279,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.4" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" }, "funding": [ { @@ -389,205 +295,67 @@ "type": "tidelift" } ], - "time": "2024-03-26T18:29:49+00:00" - }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "v0.1.1", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "implementation of xdg base directory specification for php", - "support": { - "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", - "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" - }, - "time": "2019-12-04T15:06:13+00:00" + "time": "2024-05-06T16:37:16+00:00" }, { - "name": "doctrine/deprecations", - "version": "1.1.3", + "name": "evenement/evenement", + "version": "v3.0.2", "source": { "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + "url": "https://github.com/igorw/evenement.git", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": ">=7.0" }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + "phpunit/phpunit": "^9 || ^6" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Evenement\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" - }, - "time": "2024-01-30T19:34:25+00:00" - }, - { - "name": "felixfbecker/advanced-json-rpc", - "version": "v3.2.1", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "shasum": "" - }, - "require": { - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "php": "^7.1 || ^8.0", - "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.0 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "AdvancedJsonRpc\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - } - ], - "description": "A more advanced JSONRPC implementation", - "support": { - "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", - "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" - }, - "time": "2021-06-11T22:34:44+00:00" - }, - { - "name": "felixfbecker/language-server-protocol", - "version": "v1.5.2", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpstan/phpstan": "*", - "squizlabs/php_codesniffer": "^3.1", - "vimeo/psalm": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "LanguageServerProtocol\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], "authors": [ { - "name": "Felix Becker", - "email": "felix.b@outlook.com" + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" } ], - "description": "PHP classes for the Language Server Protocol", + "description": "Événement is a very simple event dispatching library for PHP", "keywords": [ - "language", - "microsoft", - "php", - "server" + "event-dispatcher", + "event-emitter" ], "support": { - "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" + "issues": "https://github.com/igorw/evenement/issues", + "source": "https://github.com/igorw/evenement/tree/v3.0.2" }, - "time": "2022-03-02T22:36:06+00:00" + "time": "2023-08-08T05:53:35+00:00" }, { "name": "fidry/cpu-core-counter", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42" + "reference": "8520451a140d3f46ac33042715115e290cf5785f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42", - "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", "shasum": "" }, "require": { @@ -627,7 +395,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" }, "funding": [ { @@ -635,54 +403,61 @@ "type": "github" } ], - "time": "2024-02-07T09:43:46+00:00" + "time": "2024-08-06T10:04:20+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.53.0", + "version": "v3.68.1", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "69a19093a9ded8d1baac62ed6c009b8bc148d008" + "reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/69a19093a9ded8d1baac62ed6c009b8bc148d008", - "reference": "69a19093a9ded8d1baac62ed6c009b8bc148d008", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b9db2b2ea3cdba7201067acee46f984ef2397cff", + "reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff", "shasum": "" }, "require": { + "clue/ndjson-react": "^1.0", "composer/semver": "^3.4", "composer/xdebug-handler": "^3.0.3", "ext-filter": "*", "ext-json": "*", "ext-tokenizer": "*", + "fidry/cpu-core-counter": "^1.2", "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0 || ^5.0 || ^6.0", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", - "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", - "symfony/finder": "^5.4 || ^6.0 || ^7.0", - "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0", - "symfony/polyfill-mbstring": "^1.28", - "symfony/polyfill-php80": "^1.28", - "symfony/polyfill-php81": "^1.28", - "symfony/process": "^5.4 || ^6.0 || ^7.0", - "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" + "react/child-process": "^0.6.5", + "react/event-loop": "^1.0", + "react/promise": "^2.0 || ^3.0", + "react/socket": "^1.0", + "react/stream": "^1.0", + "sebastian/diff": "^4.0 || ^5.1 || ^6.0", + "symfony/console": "^5.4 || ^6.4 || ^7.0", + "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.4 || ^7.0", + "symfony/finder": "^5.4 || ^6.4 || ^7.0", + "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0", + "symfony/polyfill-mbstring": "^1.31", + "symfony/polyfill-php80": "^1.31", + "symfony/polyfill-php81": "^1.31", + "symfony/process": "^5.4 || ^6.4 || ^7.2", + "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0" }, "require-dev": { - "facile-it/paraunit": "^1.3 || ^2.0", - "infection/infection": "^0.27.11", - "justinrainbow/json-schema": "^5.2", + "facile-it/paraunit": "^1.3.1 || ^2.4", + "infection/infection": "^0.29.8", + "justinrainbow/json-schema": "^5.3 || ^6.0", "keradus/cli-executor": "^2.1", - "mikey179/vfsstream": "^1.6.11", + "mikey179/vfsstream": "^1.6.12", "php-coveralls/php-coveralls": "^2.7", "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4", - "phpunit/phpunit": "^9.6 || ^10.5.5 || ^11.0.2", - "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5", + "phpunit/phpunit": "^9.6.22 || ^10.5.40 || ^11.5.2", + "symfony/var-dumper": "^5.4.48 || ^6.4.15 || ^7.2.0", + "symfony/yaml": "^5.4.45 || ^6.4.13 || ^7.2.0" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -695,7 +470,10 @@ "autoload": { "psr-4": { "PhpCsFixer\\": "src/" - } + }, + "exclude-from-classmap": [ + "src/Fixer/Internal/*" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -720,7 +498,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.53.0" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.68.1" }, "funding": [ { @@ -728,20 +506,20 @@ "type": "github" } ], - "time": "2024-04-08T15:03:00+00:00" + "time": "2025-01-17T09:20:36+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.1", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", "shasum": "" }, "require": { @@ -749,11 +527,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -779,7 +558,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" }, "funding": [ { @@ -787,80 +566,31 @@ "type": "tidelift" } ], - "time": "2023-03-08T13:26:56+00:00" - }, - { - "name": "netresearch/jsonmapper", - "version": "v4.4.1", - "source": { - "type": "git", - "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/132c75c7dd83e45353ebb9c6c9f591952995bbf0", - "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", - "squizlabs/php_codesniffer": "~3.5" - }, - "type": "library", - "autoload": { - "psr-0": { - "JsonMapper": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "OSL-3.0" - ], - "authors": [ - { - "name": "Christian Weiske", - "email": "cweiske@cweiske.de", - "homepage": "http://github.com/cweiske/jsonmapper/", - "role": "Developer" - } - ], - "description": "Map nested JSON structures onto PHP classes", - "support": { - "email": "cweiske@cweiske.de", - "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.4.1" - }, - "time": "2024-01-31T06:18:54+00:00" + "time": "2024-11-08T17:47:46+00:00" }, { "name": "nikic/php-parser", - "version": "v4.19.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", - "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.1" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -868,7 +598,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -892,9 +622,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-03-17T08:10:35+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", @@ -1015,351 +745,132 @@ "time": "2022-02-21T01:04:05+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "name": "phpstan/phpstan", + "version": "1.12.15", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "url": "https://github.com/phpstan/phpstan.git", + "reference": "c91d4e8bc056f46cf653656e6f71004b254574d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c91d4e8bc056f46cf653656e6f71004b254574d1", + "reference": "c91d4e8bc056f46cf653656e6f71004b254574d1", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.2|^8.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } + "conflict": { + "phpstan/phpstan-shim": "*" }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org/", + "description": "PHPStan - PHP Static Analysis Tool", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", + "dev", "static analysis" ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" }, - "time": "2020-06-27T09:03:43+00:00" + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2025-01-05T16:40:22+00:00" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "name": "phpunit/php-code-coverage", + "version": "10.1.16", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" + "phpunit/phpunit": "^10.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.x-dev" + "dev-main": "10.1.x-dev" } }, "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.8.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "153ae662783729388a584b4361f2545e4d841e3c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", - "reference": "153ae662783729388a584b4361f2545e4d841e3c", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.3 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" - }, - "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" - }, - "time": "2024-02-23T11:10:43+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "1.28.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", - "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0" - }, - "time": "2024-04-03T18:51:33+00:00" - }, - { - "name": "phpstan/phpstan", - "version": "1.10.66", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "94779c987e4ebd620025d9e5fdd23323903950bd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/94779c987e4ebd620025d9e5fdd23323903950bd", - "reference": "94779c987e4ebd620025d9e5fdd23323903950bd", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan - PHP Static Analysis Tool", - "keywords": [ - "dev", - "static analysis" - ], - "support": { - "docs": "https://phpstan.org/user-guide/getting-started", - "forum": "https://github.com/phpstan/phpstan/discussions", - "issues": "https://github.com/phpstan/phpstan/issues", - "security": "https://github.com/phpstan/phpstan/security/policy", - "source": "https://github.com/phpstan/phpstan-src" - }, - "funding": [ - { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" - } - ], - "time": "2024-03-28T16:17:31+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "10.1.14", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", - "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-text-template": "^3.0", - "sebastian/code-unit-reverse-lookup": "^3.0", - "sebastian/complexity": "^3.0", - "sebastian/environment": "^6.0", - "sebastian/lines-of-code": "^2.0", - "sebastian/version": "^4.0", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.1" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "10.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14" + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" }, "funding": [ { @@ -1367,7 +878,7 @@ "type": "github" } ], - "time": "2024-03-12T15:33:41+00:00" + "time": "2024-08-22T04:31:57+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1614,16 +1125,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.17", + "version": "10.5.41", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c1f736a473d21957ead7e94fcc029f571895abf5" + "reference": "e76586fa3d49714f230221734b44892e384109d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c1f736a473d21957ead7e94fcc029f571895abf5", - "reference": "c1f736a473d21957ead7e94fcc029f571895abf5", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e76586fa3d49714f230221734b44892e384109d7", + "reference": "e76586fa3d49714f230221734b44892e384109d7", "shasum": "" }, "require": { @@ -1633,26 +1144,26 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", + "myclabs/deep-copy": "^1.12.1", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.5", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-invoker": "^4.0", - "phpunit/php-text-template": "^3.0", - "phpunit/php-timer": "^6.0", - "sebastian/cli-parser": "^2.0", - "sebastian/code-unit": "^2.0", - "sebastian/comparator": "^5.0", - "sebastian/diff": "^5.0", - "sebastian/environment": "^6.0", - "sebastian/exporter": "^5.1", - "sebastian/global-state": "^6.0.1", - "sebastian/object-enumerator": "^5.0", - "sebastian/recursion-context": "^5.0", - "sebastian/type": "^4.0", - "sebastian/version": "^4.0" + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.3", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.2", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.0", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" }, "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" @@ -1695,7 +1206,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.17" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.41" }, "funding": [ { @@ -1711,34 +1222,484 @@ "type": "tidelift" } ], - "time": "2024-04-05T04:39:01+00:00" + "time": "2025-01-13T09:33:05+00:00" }, { "name": "psr/container", "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "react/cache", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/cache.git", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/promise": "^3.0 || ^2.0 || ^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, Promise-based cache interface for ReactPHP", + "keywords": [ + "cache", + "caching", + "promise", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/cache/issues", + "source": "https://github.com/reactphp/cache/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2022-11-30T15:59:55+00:00" + }, + { + "name": "react/child-process", + "version": "v0.6.6", + "source": { + "type": "git", + "url": "https://github.com/reactphp/child-process.git", + "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159", + "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/event-loop": "^1.2", + "react/stream": "^1.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/socket": "^1.16", + "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\ChildProcess\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven library for executing child processes with ReactPHP.", + "keywords": [ + "event-driven", + "process", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/child-process/issues", + "source": "https://github.com/reactphp/child-process/tree/v0.6.6" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-01-01T16:37:48+00:00" + }, + { + "name": "react/dns", + "version": "v1.13.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/dns.git", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/cache": "^1.0 || ^0.6 || ^0.5", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.7 || ^1.2.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3 || ^2", + "react/promise-timer": "^1.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Dns\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async DNS resolver for ReactPHP", + "keywords": [ + "async", + "dns", + "dns-resolver", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/dns/issues", + "source": "https://github.com/reactphp/dns/tree/v1.13.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-06-13T14:18:03+00:00" + }, + { + "name": "react/event-loop", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "suggest": { + "ext-pcntl": "For signal handling support when using the StreamSelectLoop" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "support": { + "issues": "https://github.com/reactphp/event-loop/issues", + "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2023-11-13T13:48:05+00:00" + }, + { + "name": "react/promise", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63", "shasum": "" }, "require": { - "php": ">=7.4.0" + "php": ">=7.1.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } + "require-dev": { + "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" }, + "type": "library", "autoload": { + "files": [ + "src/functions_include.php" + ], "psr-4": { - "Psr\\Container\\": "src/" + "React\\Promise\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1747,51 +1708,75 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "A lightweight implementation of CommonJS Promises/A for PHP", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "promise", + "promises" ], "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v3.2.0" }, - "time": "2021-11-05T16:47:00+00:00" + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-05-24T10:39:05+00:00" }, { - "name": "psr/event-dispatcher", - "version": "1.0.0", + "name": "react/socket", + "version": "v1.16.0", "source": { "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + "url": "https://github.com/reactphp/socket.git", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", "shasum": "" }, "require": { - "php": ">=7.2.0" + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/dns": "^1.13", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.6 || ^1.2.1", + "react/stream": "^1.4" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3.3 || ^2", + "react/promise-stream": "^1.4", + "react/promise-timer": "^1.11" }, + "type": "library", "autoload": { "psr-4": { - "Psr\\EventDispatcher\\": "src/" + "React\\Socket\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1800,48 +1785,73 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Standard interfaces for event handling.", + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", "keywords": [ - "events", - "psr", - "psr-14" + "Connection", + "Socket", + "async", + "reactphp", + "stream" ], "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + "issues": "https://github.com/reactphp/socket/issues", + "source": "https://github.com/reactphp/socket/tree/v1.16.0" }, - "time": "2019-01-08T18:20:26+00:00" + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-07-26T10:38:09+00:00" }, { - "name": "psr/log", - "version": "3.0.0", + "name": "react/stream", + "version": "v1.4.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "url": "https://github.com/reactphp/stream.git", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", "shasum": "" }, "require": { - "php": ">=8.0.0" + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.2" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" }, + "type": "library", "autoload": { "psr-4": { - "Psr\\Log\\": "src" + "React\\Stream\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1850,21 +1860,48 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", "keywords": [ - "log", - "psr", - "psr-3" + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "issues": "https://github.com/reactphp/stream/issues", + "source": "https://github.com/reactphp/stream/tree/v1.4.0" }, - "time": "2021-07-14T16:46:02+00:00" + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-06-11T12:45:25+00:00" }, { "name": "sebastian/cli-parser", @@ -2036,16 +2073,16 @@ }, { "name": "sebastian/comparator", - "version": "5.0.1", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372" + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", "shasum": "" }, "require": { @@ -2056,7 +2093,7 @@ "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^10.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { @@ -2101,7 +2138,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" }, "funding": [ { @@ -2109,7 +2146,7 @@ "type": "github" } ], - "time": "2023-08-14T13:18:12+00:00" + "time": "2024-10-18T14:56:07+00:00" }, { "name": "sebastian/complexity", @@ -2782,112 +2819,48 @@ ], "time": "2023-02-07T11:34:05+00:00" }, - { - "name": "spatie/array-to-xml", - "version": "3.2.3", - "source": { - "type": "git", - "url": "https://github.com/spatie/array-to-xml.git", - "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/c95fd4db94ec199f798d4b5b4a81757bd20d88ab", - "reference": "c95fd4db94ec199f798d4b5b4a81757bd20d88ab", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "php": "^8.0" - }, - "require-dev": { - "mockery/mockery": "^1.2", - "pestphp/pest": "^1.21", - "spatie/pest-plugin-snapshots": "^1.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\ArrayToXml\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://freek.dev/", - "role": "Developer" - } - ], - "description": "Convert an array to xml", - "homepage": "https://github.com/spatie/array-to-xml", - "keywords": [ - "array", - "convert", - "xml" - ], - "support": { - "source": "https://github.com/spatie/array-to-xml/tree/3.2.3" - }, - "funding": [ - { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - }, - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2024-02-07T10:39:02+00:00" - }, { "name": "symfony/console", - "version": "v6.4.6", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a2708a5da5c87d1d0d52937bdeac625df659e11f", - "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^6.4|^7.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", "symfony/http-foundation": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2921,7 +2894,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.6" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -2937,20 +2910,20 @@ "type": "tidelift" } ], - "time": "2024-03-29T19:07:53+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.4.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -2958,12 +2931,12 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" } }, "autoload": { @@ -2988,7 +2961,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -3004,28 +2977,28 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.3", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef" + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ae9d3a6f3003a6caf56acd7466d8d52378d44fef", - "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -3034,13 +3007,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3068,7 +3041,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" }, "funding": [ { @@ -3084,20 +3057,20 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.4.2", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "4e64b49bf370ade88e567de29465762e316e4224" + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/4e64b49bf370ade88e567de29465762e316e4224", - "reference": "4e64b49bf370ade88e567de29465762e316e4224", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "shasum": "" }, "require": { @@ -3106,12 +3079,12 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" } }, "autoload": { @@ -3144,7 +3117,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.2" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" }, "funding": [ { @@ -3160,27 +3133,30 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/filesystem", - "version": "v6.4.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "9919b5509ada52cc7f66f9a35c86a4a29955c9d3" + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/9919b5509ada52cc7f66f9a35c86a4a29955c9d3", - "reference": "9919b5509ada52cc7f66f9a35c86a4a29955c9d3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, + "require-dev": { + "symfony/process": "^6.4|^7.0" + }, "type": "library", "autoload": { "psr-4": { @@ -3207,7 +3183,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.6" + "source": "https://github.com/symfony/filesystem/tree/v7.2.0" }, "funding": [ { @@ -3223,27 +3199,27 @@ "type": "tidelift" } ], - "time": "2024-03-21T19:36:20+00:00" + "time": "2024-10-25T15:15:23+00:00" }, { "name": "symfony/finder", - "version": "v6.4.0", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "11d736e97f116ac375a81f96e662911a34cd50ce" + "reference": "87a71856f2f56e4100373e92529eed3171695cfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce", - "reference": "11d736e97f116ac375a81f96e662911a34cd50ce", + "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", + "reference": "87a71856f2f56e4100373e92529eed3171695cfb", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0|^7.0" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -3271,7 +3247,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.0" + "source": "https://github.com/symfony/finder/tree/v7.2.2" }, "funding": [ { @@ -3287,24 +3263,24 @@ "type": "tidelift" } ], - "time": "2023-10-31T17:30:12+00:00" + "time": "2024-12-30T19:00:17+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.4.0", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "22301f0e7fdeaacc14318928612dee79be99860e" + "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/22301f0e7fdeaacc14318928612dee79be99860e", - "reference": "22301f0e7fdeaacc14318928612dee79be99860e", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/7da8fbac9dcfef75ffc212235d76b2754ce0cf50", + "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -3338,7 +3314,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.4.0" + "source": "https://github.com/symfony/options-resolver/tree/v7.2.0" }, "funding": [ { @@ -3354,24 +3330,24 @@ "type": "tidelift" } ], - "time": "2023-08-08T10:16:24+00:00" + "time": "2024-11-20T11:17:29+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -3382,8 +3358,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3417,7 +3393,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -3433,24 +3409,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -3458,8 +3434,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3495,7 +3471,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -3511,24 +3487,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -3536,8 +3512,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3576,7 +3552,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -3592,24 +3568,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -3620,8 +3596,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3656,7 +3632,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -3672,30 +3648,30 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3736,7 +3712,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -3752,30 +3728,30 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3812,7 +3788,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" }, "funding": [ { @@ -3828,24 +3804,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", - "version": "v6.4.4", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "710e27879e9be3395de2b98da3f52a946039f297" + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/710e27879e9be3395de2b98da3f52a946039f297", - "reference": "710e27879e9be3395de2b98da3f52a946039f297", + "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -3873,7 +3849,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.4" + "source": "https://github.com/symfony/process/tree/v7.2.0" }, "funding": [ { @@ -3889,37 +3865,38 @@ "type": "tidelift" } ], - "time": "2024-02-20T12:31:00+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.4.2", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "11bbf19a0fb7b36345861e85c5768844c552906e" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e", - "reference": "11bbf19a0fb7b36345861e85c5768844c552906e", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^1.1|^2.0" + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "ext-psr": "<1.1|>=2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" } }, "autoload": { @@ -3955,7 +3932,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.2" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -3971,24 +3948,24 @@ "type": "tidelift" } ], - "time": "2023-12-19T21:51:00+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.4.3", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "416596166641f1f728b0a64f5b9dd07cceb410c1" + "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/416596166641f1f728b0a64f5b9dd07cceb410c1", - "reference": "416596166641f1f728b0a64f5b9dd07cceb410c1", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/e46690d5b9d7164a6d061cab1e8d46141b9f49df", + "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -4017,7 +3994,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.4.3" + "source": "https://github.com/symfony/stopwatch/tree/v7.2.2" }, "funding": [ { @@ -4033,24 +4010,24 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:35:58+00:00" + "time": "2024-12-18T14:28:33+00:00" }, { "name": "symfony/string", - "version": "v6.4.4", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9" + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", - "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -4060,11 +4037,12 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/intl": "^6.2|^7.0", + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4103,7 +4081,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.4" + "source": "https://github.com/symfony/string/tree/v7.2.0" }, "funding": [ { @@ -4119,7 +4097,7 @@ "type": "tidelift" } ], - "time": "2024-02-01T13:16:41+00:00" + "time": "2024-11-13T13:31:26+00:00" }, { "name": "theseer/tokenizer", @@ -4170,182 +4148,14 @@ } ], "time": "2024-03-03T12:36:25+00:00" - }, - { - "name": "vimeo/psalm", - "version": "5.23.1", - "source": { - "type": "git", - "url": "https://github.com/vimeo/psalm.git", - "reference": "8471a896ccea3526b26d082f4461eeea467f10a4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/8471a896ccea3526b26d082f4461eeea467f10a4", - "reference": "8471a896ccea3526b26d082f4461eeea467f10a4", - "shasum": "" - }, - "require": { - "amphp/amp": "^2.4.2", - "amphp/byte-stream": "^1.5", - "composer-runtime-api": "^2", - "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^2.0 || ^3.0", - "dnoegel/php-xdg-base-dir": "^0.1.1", - "ext-ctype": "*", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", - "ext-tokenizer": "*", - "felixfbecker/advanced-json-rpc": "^3.1", - "felixfbecker/language-server-protocol": "^1.5.2", - "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.16", - "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", - "sebastian/diff": "^4.0 || ^5.0 || ^6.0", - "spatie/array-to-xml": "^2.17.0 || ^3.0", - "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0", - "symfony/filesystem": "^5.4 || ^6.0 || ^7.0" - }, - "conflict": { - "nikic/php-parser": "4.17.0" - }, - "provide": { - "psalm/psalm": "self.version" - }, - "require-dev": { - "amphp/phpunit-util": "^2.0", - "bamarni/composer-bin-plugin": "^1.4", - "brianium/paratest": "^6.9", - "ext-curl": "*", - "mockery/mockery": "^1.5", - "nunomaduro/mock-final-classes": "^1.1", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpdoc-parser": "^1.6", - "phpunit/phpunit": "^9.6", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18", - "slevomat/coding-standard": "^8.4", - "squizlabs/php_codesniffer": "^3.6", - "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0" - }, - "suggest": { - "ext-curl": "In order to send data to shepherd", - "ext-igbinary": "^2.0.5 is required, used to serialize caching data" - }, - "bin": [ - "psalm", - "psalm-language-server", - "psalm-plugin", - "psalm-refactor", - "psalter" - ], - "type": "project", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev", - "dev-4.x": "4.x-dev", - "dev-3.x": "3.x-dev", - "dev-2.x": "2.x-dev", - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psalm\\": "src/Psalm/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matthew Brown" - } - ], - "description": "A static analysis tool for finding errors in PHP applications", - "keywords": [ - "code", - "inspection", - "php", - "static analysis" - ], - "support": { - "docs": "https://psalm.dev/docs", - "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm" - }, - "time": "2024-03-11T20:33:46+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, - "platform": [], - "platform-dev": [], + "platform": {}, + "platform-dev": {}, "plugin-api-version": "2.6.0" } From 76e7b6a7bec97e095b14e7dbfb7aa19ae1cb7fc9 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 19 Jan 2025 22:17:24 -0600 Subject: [PATCH 172/193] Fixed failing tests --- src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php | 2 +- src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php index 21cf462..69e23a2 100644 --- a/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/Formatter.php @@ -26,7 +26,7 @@ public function __construct(TranslatorInterface $translator) public function timeUnit(Unit $unit, string $locale = 'en') : string { - if (!\class_exists('\Aeon\Calendar\Gregorian\Calendar')) { + if (!\interface_exists('\Aeon\Calendar\Gregorian\Calendar')) { throw new \RuntimeException('Please add "aeon-php/calendar": ^1.0 to composer.json first'); } diff --git a/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php index c754296..4d30794 100644 --- a/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php +++ b/src/Coduo/PHPHumanizer/Aeon/Calendar/UnitCompound.php @@ -37,7 +37,7 @@ public function __construct(Unit $timeUnit) */ public function components() : array { - if (!\class_exists('\Aeon\Calendar\Gregorian\Calendar')) { + if (!\interface_exists('\Aeon\Calendar\Gregorian\Calendar')) { throw new \RuntimeException('Please add "aeon-php/calendar": ^1.0 to composer.json first'); } From a7ef126512f21641997a43d52a07d2af19a0e643 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Mon, 20 Jan 2025 04:17:54 +0000 Subject: [PATCH 173/193] Updated CHANGELOG.md --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59b4b95..acc422e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## [Unreleased] - 2025-01-20 + +### Fixed +- [76e7b6](https://github.com/coduo/php-humanizer/commit/76e7b6a7bec97e095b14e7dbfb7aa19ae1cb7fc9) - **failing tests** - [@norberttech](https://github.com/norberttech) + +### Updated +- [fb621f](https://github.com/coduo/php-humanizer/commit/fb621fda3e73428af8bba55f697c51daf002580b) - **project to PHP 8.4** - [@norberttech](https://github.com/norberttech) + ## [5.0.0] - 2024-04-11 ### Added From f70d3a9e344f5be2423415bfba3bc1a0cfe3c94c Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz <1921950+norberttech@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:32:34 -0600 Subject: [PATCH 174/193] Removed symfony/yaml dependency (#136) --- composer.json | 3 +- composer.lock | 153 +----------------- .../Resources/translations/difference.af.php | 47 ++++++ .../Resources/translations/difference.af.yml | 35 ---- .../Resources/translations/difference.az.php | 47 ++++++ .../Resources/translations/difference.az.yml | 35 ---- .../Resources/translations/difference.bg.php | 47 ++++++ .../Resources/translations/difference.bg.yml | 35 ---- .../Resources/translations/difference.cs.php | 47 ++++++ .../Resources/translations/difference.cs.yml | 35 ---- .../Resources/translations/difference.da.php | 47 ++++++ .../Resources/translations/difference.da.yml | 35 ---- .../Resources/translations/difference.de.php | 47 ++++++ .../Resources/translations/difference.de.yml | 35 ---- .../Resources/translations/difference.en.php | 47 ++++++ .../Resources/translations/difference.en.yml | 35 ---- .../Resources/translations/difference.es.php | 47 ++++++ .../Resources/translations/difference.es.yml | 35 ---- .../Resources/translations/difference.fr.php | 47 ++++++ .../Resources/translations/difference.fr.yml | 35 ---- .../Resources/translations/difference.id.php | 47 ++++++ .../Resources/translations/difference.id.yml | 35 ---- .../Resources/translations/difference.it.php | 47 ++++++ .../Resources/translations/difference.it.yml | 35 ---- .../Resources/translations/difference.ja.php | 47 ++++++ .../Resources/translations/difference.ja.yml | 35 ---- .../Resources/translations/difference.nl.php | 47 ++++++ .../Resources/translations/difference.nl.yml | 35 ---- .../Resources/translations/difference.no.php | 47 ++++++ .../Resources/translations/difference.no.yml | 35 ---- .../Resources/translations/difference.pl.php | 47 ++++++ .../Resources/translations/difference.pl.yml | 35 ---- .../Resources/translations/difference.pt.php | 47 ++++++ .../Resources/translations/difference.pt.yml | 35 ---- .../translations/difference.pt_BR.php | 47 ++++++ .../translations/difference.pt_BR.yml | 35 ---- .../Resources/translations/difference.ro.php | 47 ++++++ .../Resources/translations/difference.ro.yml | 35 ---- .../Resources/translations/difference.ru.php | 47 ++++++ .../Resources/translations/difference.ru.yml | 35 ---- .../Resources/translations/difference.sk.php | 47 ++++++ .../Resources/translations/difference.sk.yml | 35 ---- .../Resources/translations/difference.th.php | 47 ++++++ .../Resources/translations/difference.th.yml | 35 ---- .../Resources/translations/difference.tr.php | 47 ++++++ .../Resources/translations/difference.tr.yml | 35 ---- .../Resources/translations/difference.uk.php | 47 ++++++ .../Resources/translations/difference.uk.yml | 35 ---- .../translations/difference.zh_CN.php | 47 ++++++ .../translations/difference.zh_CN.yml | 35 ---- .../translations/difference.zh_TW.php | 47 ++++++ .../translations/difference.zh_TW.yml | 35 ---- .../Resources/translations/oxford.cs.php | 7 + .../Resources/translations/oxford.cs.yml | 3 - .../Resources/translations/oxford.da.php | 7 + .../Resources/translations/oxford.da.yml | 3 - .../Resources/translations/oxford.en.php | 7 + .../Resources/translations/oxford.en.yml | 3 - .../Resources/translations/oxford.es.php | 7 + .../Resources/translations/oxford.es.yml | 3 - .../Resources/translations/oxford.fr.php | 7 + .../Resources/translations/oxford.fr.yml | 3 - .../Resources/translations/oxford.id.php | 7 + .../Resources/translations/oxford.id.yml | 3 - .../Resources/translations/oxford.it.php | 7 + .../Resources/translations/oxford.it.yml | 3 - .../Resources/translations/oxford.ja.php | 7 + .../Resources/translations/oxford.ja.yml | 3 - .../Resources/translations/oxford.nl.php | 7 + .../Resources/translations/oxford.nl.yml | 3 - .../Resources/translations/oxford.pl.php | 7 + .../Resources/translations/oxford.pl.yml | 3 - .../Resources/translations/oxford.ro.php | 7 + .../Resources/translations/oxford.ro.yml | 3 - .../Resources/translations/oxford.ru.php | 7 + .../Resources/translations/oxford.ru.yml | 3 - .../Resources/translations/oxford.sk.php | 7 + .../Resources/translations/oxford.sk.yml | 3 - .../Resources/translations/oxford.th.php | 7 + .../Resources/translations/oxford.th.yml | 3 - .../Resources/translations/oxford.uk.php | 7 + .../Resources/translations/oxford.uk.yml | 3 - .../Resources/translations/oxford.zh_CN.php | 7 + .../Resources/translations/oxford.zh_CN.yml | 3 - .../Resources/translations/oxford.zh_TW.php | 7 + .../Resources/translations/oxford.zh_TW.yml | 3 - src/Coduo/PHPHumanizer/Translator/Builder.php | 10 +- tools/composer.lock | 10 +- 88 files changed, 1306 insertions(+), 1090 deletions(-) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.af.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.az.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.bg.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.cs.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.da.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.de.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.en.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.es.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.fr.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.id.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.it.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ja.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.nl.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.no.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.pl.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.pt.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ro.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ru.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.sk.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.th.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.tr.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.uk.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.da.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.da.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.en.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.en.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.es.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.es.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.id.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.id.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.it.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.th.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.th.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.yml create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.php delete mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml diff --git a/composer.json b/composer.json index 288b011..09a84f6 100644 --- a/composer.json +++ b/composer.json @@ -16,8 +16,7 @@ ], "require": { "php": "~8.2 || ~8.3 || ~8.4", - "symfony/translation": "~5.4||~6.4||~7", - "symfony/yaml": "~5.4||~6.4||~7" + "symfony/translation": "~5.4||~6.4||~7" }, "require-dev": { "thunderer/shortcode": "^0.7", diff --git a/composer.lock b/composer.lock index 1cbd9dc..85fbb82 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3641b1dd174b159ca3de92420f61b789", + "content-hash": "228b5a151bff2e843fe879dea870439c", "packages": [ { "name": "symfony/deprecation-contracts", @@ -73,85 +73,6 @@ ], "time": "2024-09-25T14:20:29+00:00" }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com/", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, { "name": "symfony/polyfill-mbstring", "version": "v1.31.0", @@ -404,78 +325,6 @@ } ], "time": "2024-09-25T14:20:29+00:00" - }, - { - "name": "symfony/yaml", - "version": "v7.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "099581e99f557e9f16b43c5916c26380b54abb22" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/099581e99f557e9f16b43c5916c26380b54abb22", - "reference": "099581e99f557e9f16b43c5916c26380b54abb22", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com/", - "support": { - "source": "https://github.com/symfony/yaml/tree/v7.2.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-10-23T06:56:12+00:00" } ], "packages-dev": [ diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.af.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.af.php new file mode 100644 index 0000000..bc387fa --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.af.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] nou nou', + 'future' => '[0,Inf] netnou', + ], + 'second' => [ + 'past' => '[0,1] %count% sekonde gelede|[2,Inf] %count% sekondes gelede', + 'future' => '[0,1] %count% sekonde van nou af|[2,Inf] %count% sekondes van nou af', + ], + 'minute' => [ + 'past' => '{1} %count% minuut gelede|[2,Inf] %count% minute gelede', + 'future' => '{1} %count% minuut van nou af|[2,Inf] %count% minute van nou af', + ], + 'hour' => [ + 'past' => '{1} %count% uur gelede|[2,Inf] %count% ure gelede', + 'future' => '{1} %count% uur van nou af|[2,Inf] %count% ure van nou af', + ], + 'day' => [ + 'past' => '{1} %count% dag gelede|[2,Inf] %count% dae gelede', + 'future' => '{1} %count% dag van nou af|[2,Inf] %count% dae van nou af', + ], + 'week' => [ + 'past' => '{1} %count% week gelede|[2,Inf] %count% weke gelede', + 'future' => '{1} %count% week van nou af|[2,Inf] %count% weke van nou af', + ], + 'month' => [ + 'past' => '{1} %count% maand gelede|[2,Inf] %count% maande gelede', + 'future' => '{1} %count% maand van nou af|[2,Inf] %count% maande van nou af', + ], + 'year' => [ + 'past' => '{1} %count% jaar gelede|[2,Inf] %count% jaar gelede', + 'future' => '{1} %count% jaar van nou af|[2,Inf] %count% jaar van nou af', + ], + 'compound' => [ + 'second' => '[0,1] %count% sekonde|[2,Inf] %count% sekondes', + 'minute' => '{1} %count% minuut|[2,Inf] %count% minute', + 'hour' => '{1} %count% uur|[2,Inf] %count% ure', + 'day' => '{1} %count% dag|[2,Inf] %count% dae', + 'week' => '{1} %count% week|[2,Inf] %count% weke', + 'month' => '{1} %count% maand|[2,Inf] %count% maande', + 'year' => '{1} %count% jaar|[2,Inf] %count% jaar', + 'past' => '%value% gelede', + 'future' => '%value% van nou af', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml deleted file mode 100644 index 6d4f8dd..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.af.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] nou nou" - future: "[0,Inf] netnou" -second: - past: "[0,1] %count% sekonde gelede|[2,Inf] %count% sekondes gelede" - future: "[0,1] %count% sekonde van nou af|[2,Inf] %count% sekondes van nou af" -minute: - past: "{1} %count% minuut gelede|[2,Inf] %count% minute gelede" - future: "{1} %count% minuut van nou af|[2,Inf] %count% minute van nou af" -hour: - past: "{1} %count% uur gelede|[2,Inf] %count% ure gelede" - future: "{1} %count% uur van nou af|[2,Inf] %count% ure van nou af" -day: - past: "{1} %count% dag gelede|[2,Inf] %count% dae gelede" - future: "{1} %count% dag van nou af|[2,Inf] %count% dae van nou af" -week: - past: "{1} %count% week gelede|[2,Inf] %count% weke gelede" - future: "{1} %count% week van nou af|[2,Inf] %count% weke van nou af" -month: - past: "{1} %count% maand gelede|[2,Inf] %count% maande gelede" - future: "{1} %count% maand van nou af|[2,Inf] %count% maande van nou af" -year: - past: "{1} %count% jaar gelede|[2,Inf] %count% jaar gelede" - future: "{1} %count% jaar van nou af|[2,Inf] %count% jaar van nou af" - -compound: - second: "[0,1] %count% sekonde|[2,Inf] %count% sekondes" - minute: "{1} %count% minuut|[2,Inf] %count% minute" - hour: "{1} %count% uur|[2,Inf] %count% ure" - day: "{1} %count% dag|[2,Inf] %count% dae" - week: "{1} %count% week|[2,Inf] %count% weke" - month: "{1} %count% maand|[2,Inf] %count% maande" - year: "{1} %count% jaar|[2,Inf] %count% jaar" - past: "%value% gelede" - future: "%value% van nou af" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.az.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.az.php new file mode 100644 index 0000000..99d7920 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.az.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] indi', + 'future' => '[0,Inf] indi', + ], + 'second' => [ + 'past' => '[0,1] %count% saniyə əvvəl|[2,Inf] %count% saniyə əvvəl', + 'future' => '[0,1] %count% saniyə sonra|[2,Inf] %count% saniyə sonra', + ], + 'minute' => [ + 'past' => '{1} %count% dəqiqə əvvəl|[2,Inf] %count% dəqiqə əvvəl', + 'future' => '{1} %count% dəqiqə sonra|[2,Inf] %count% dəqiqə sonra', + ], + 'hour' => [ + 'past' => '{1} %count% saat əvvəl|[2,Inf] %count% saat əvvəl', + 'future' => '{1} %count% saat sonra|[2,Inf] %count% saat sonra', + ], + 'day' => [ + 'past' => '{1} %count% gün əvvəl|[2,Inf] %count% gün əvvəl', + 'future' => '{1} %count% gün sonra|[2,Inf] %count% gün sonra', + ], + 'week' => [ + 'past' => '{1} %count% həftə əvvəl|[2,Inf] %count% həftə əvvəl', + 'future' => '{1} %count% həftə sonra|[2,Inf] %count% həftə sonra', + ], + 'month' => [ + 'past' => '{1} %count% ay əvvəl|[2,Inf] %count% ay əvvəl', + 'future' => '{1} %count% ay sonra|[2,Inf] %count% ay sonra', + ], + 'year' => [ + 'past' => '{1} %count% il əvvəl|[2,Inf] %count% il əvvəl', + 'future' => '{1} %count% il sonra|[2,Inf] %count% il sonra', + ], + 'compound' => [ + 'second' => '[0,1] %count% saniyə|[2,Inf] %count% saniyə', + 'minute' => '{1} %count% dəqiqə|[2,Inf] %count% dəqiqə', + 'hour' => '{1} %count% saat|[2,Inf] %count% saat', + 'day' => '{1} %count% gün|[2,Inf] %count% gün', + 'week' => '{1} %count% həftə|[2,Inf] %count% həftə', + 'month' => '{1} %count% ay|[2,Inf] %count% ay', + 'year' => '{1} %count% il|[2,Inf] %count% il', + 'past' => '%value% əvvəl', + 'future' => '%value% sonra', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml deleted file mode 100644 index 7eceb68..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.az.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] indi" - future: "[0,Inf] indi" -second: - past: "[0,1] %count% saniyə əvvəl|[2,Inf] %count% saniyə əvvəl" - future: "[0,1] %count% saniyə sonra|[2,Inf] %count% saniyə sonra" -minute: - past: "{1} %count% dəqiqə əvvəl|[2,Inf] %count% dəqiqə əvvəl" - future: "{1} %count% dəqiqə sonra|[2,Inf] %count% dəqiqə sonra" -hour: - past: "{1} %count% saat əvvəl|[2,Inf] %count% saat əvvəl" - future: "{1} %count% saat sonra|[2,Inf] %count% saat sonra" -day: - past: "{1} %count% gün əvvəl|[2,Inf] %count% gün əvvəl" - future: "{1} %count% gün sonra|[2,Inf] %count% gün sonra" -week: - past: "{1} %count% həftə əvvəl|[2,Inf] %count% həftə əvvəl" - future: "{1} %count% həftə sonra|[2,Inf] %count% həftə sonra" -month: - past: "{1} %count% ay əvvəl|[2,Inf] %count% ay əvvəl" - future: "{1} %count% ay sonra|[2,Inf] %count% ay sonra" -year: - past: "{1} %count% il əvvəl|[2,Inf] %count% il əvvəl" - future: "{1} %count% il sonra|[2,Inf] %count% il sonra" - -compound: - second: "[0,1] %count% saniyə|[2,Inf] %count% saniyə" - minute: "{1} %count% dəqiqə|[2,Inf] %count% dəqiqə" - hour: "{1} %count% saat|[2,Inf] %count% saat" - day: "{1} %count% gün|[2,Inf] %count% gün" - week: "{1} %count% həftə|[2,Inf] %count% həftə" - month: "{1} %count% ay|[2,Inf] %count% ay" - year: "{1} %count% il|[2,Inf] %count% il" - past: "%value% əvvəl" - future: "%value% sonra" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.php new file mode 100644 index 0000000..5f8c92e --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] в момента', + 'future' => '[0,Inf] в момента', + ], + 'second' => [ + 'past' => '[0,1] преди %count% секунда|[2,Inf] преди %count% секунди', + 'future' => '[0,1] след %count% секунда|[2,Inf] след %count% секунди', + ], + 'minute' => [ + 'past' => '{1} преди %count% минута|[2,Inf] преди %count% минути', + 'future' => '{1} след %count% минута|[2,Inf] след %count% минути', + ], + 'hour' => [ + 'past' => '{1} преди %count% час|[2,Inf] преди %count% часа', + 'future' => '{1} след %count% час|[2,Inf] след %count% часа', + ], + 'day' => [ + 'past' => '{1} преди %count% ден|[2,Inf] преди %count% дни', + 'future' => '{1} след %count% ден|[2,Inf] след %count% дни', + ], + 'week' => [ + 'past' => '{1} преди %count% седмица|[2,Inf] преди %count% седмици', + 'future' => '{1} след %count% седмица|[2,Inf] след %count% седмици', + ], + 'month' => [ + 'past' => '{1} преди %count% месец|[2,Inf] преди %count% месеца', + 'future' => '{1} след %count% месец|[2,Inf] след %count% месеца', + ], + 'year' => [ + 'past' => '{1} преди %count% година|[2,Inf] преди %count% години', + 'future' => '{1} след %count% година|[2,Inf] след %count% години', + ], + 'compound' => [ + 'second' => '[0,1] %count% секунда|[2,Inf] %count% секунди', + 'minute' => '{1} %count% минута|[2,Inf] %count% минути', + 'hour' => '{1} %count% час|[2,Inf] %count% часа', + 'day' => '{1} %count% ден|[2,Inf] %count% дни', + 'week' => '{1} %count% седмица|[2,Inf] %count% седмица', + 'month' => '{1} %count% месец|[2,Inf] %count% месеца', + 'year' => '{1} %count% година|[2,Inf] %count% години', + 'past' => '%value% преди това', + 'future' => '%value% след това', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml deleted file mode 100644 index 0ef236f..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.bg.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] в момента" - future: "[0,Inf] в момента" -second: - past: "[0,1] преди %count% секунда|[2,Inf] преди %count% секунди" - future: "[0,1] след %count% секунда|[2,Inf] след %count% секунди" -minute: - past: "{1} преди %count% минута|[2,Inf] преди %count% минути" - future: "{1} след %count% минута|[2,Inf] след %count% минути" -hour: - past: "{1} преди %count% час|[2,Inf] преди %count% часа" - future: "{1} след %count% час|[2,Inf] след %count% часа" -day: - past: "{1} преди %count% ден|[2,Inf] преди %count% дни" - future: "{1} след %count% ден|[2,Inf] след %count% дни" -week: - past: "{1} преди %count% седмица|[2,Inf] преди %count% седмици" - future: "{1} след %count% седмица|[2,Inf] след %count% седмици" -month: - past: "{1} преди %count% месец|[2,Inf] преди %count% месеца" - future: "{1} след %count% месец|[2,Inf] след %count% месеца" -year: - past: "{1} преди %count% година|[2,Inf] преди %count% години" - future: "{1} след %count% година|[2,Inf] след %count% години" - -compound: - second: "[0,1] %count% секунда|[2,Inf] %count% секунди" - minute: "{1} %count% минута|[2,Inf] %count% минути" - hour: "{1} %count% час|[2,Inf] %count% часа" - day: "{1} %count% ден|[2,Inf] %count% дни" - week: "{1} %count% седмица|[2,Inf] %count% седмица" - month: "{1} %count% месец|[2,Inf] %count% месеца" - year: "{1} %count% година|[2,Inf] %count% години" - past: "%value% преди това" - future: "%value% след това" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.php new file mode 100644 index 0000000..5417a4a --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] právě teď', + 'future' => '[0,Inf] právě teď', + ], + 'second' => [ + 'past' => '{1} před vteřinou|[2, 4] před %count% vteřinami|[5,Inf] před %count% vteřinami', + 'future' => '{1} za vteřinu|[2, 4] za %count% vteřiny|[5,Inf] za %count% vteřin', + ], + 'minute' => [ + 'past' => '{1} před minutou|[2, Inf] před %count% minutami', + 'future' => '{1} za minutu|[2, 4] za %count% minuty|[5,Inf] za %count% minut', + ], + 'hour' => [ + 'past' => '{1} před hodinou|[2, Inf] před %count% hodinami', + 'future' => '{1} za hodinu|[2, 4] za %count% hodiny|[5,Inf] za %count% hodin', + ], + 'day' => [ + 'past' => '{1} včera|[2, Inf] před %count% dny', + 'future' => '{1} zítra|[2, 4] za %count% dny|[5,Inf] za %count% dní', + ], + 'week' => [ + 'past' => '{1} minulý týden|[2, Inf] před %count% týdny', + 'future' => '{1} za týden|[2, 4] za %count% týdny|[5,Inf] za %count% týdnů', + ], + 'month' => [ + 'past' => '{1} minulý měsíc|[2, Inf] před %count% měsíci', + 'future' => '{1} za měsíc|[2, 4] za %count% měsíce|[5,Inf] za %count% měsíců', + ], + 'year' => [ + 'past' => '{1} minulý rok|[2, Inf] před %count% lety', + 'future' => '{1} za rok|[2, 4] za %count% roky|[5,Inf] za %count% let', + ], + 'compound' => [ + 'second' => '{1} %count% vteřina |[2,4] %count% vteřiny|[5,Inf] %count% vteřin', + 'minute' => '{1} %count% minuta|[2,4] %count% minuty|[5,Inf] %count% minut', + 'hour' => '{1} %count% hodina|[2,4] %count% hodiny|[5,Inf] %count% hodin', + 'day' => '{1} %count% den |[2,4] %count% dny|[5,Inf] %count% dní', + 'week' => '{1} %count% týden|[2,4] %count% týdny|[5,Inf] %count% týdnů', + 'month' => '{1} %count% měsíc|[2,4] %count% měsíce|[5,Inf] %count% měsíců', + 'year' => '{1} %count% rok|[2,4] %count% roky|[5,Inf] %count% let', + 'past' => 'před %value% ', + 'future' => '%value% odteď', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml deleted file mode 100644 index 8c95565..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.cs.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] právě teď" - future: "[0,Inf] právě teď" -second: - past: "{1} před vteřinou|[2, 4] před %count% vteřinami|[5,Inf] před %count% vteřinami" - future: "{1} za vteřinu|[2, 4] za %count% vteřiny|[5,Inf] za %count% vteřin" -minute: - past: "{1} před minutou|[2, Inf] před %count% minutami" - future: "{1} za minutu|[2, 4] za %count% minuty|[5,Inf] za %count% minut" -hour: - past: "{1} před hodinou|[2, Inf] před %count% hodinami" - future: "{1} za hodinu|[2, 4] za %count% hodiny|[5,Inf] za %count% hodin" -day: - past: "{1} včera|[2, Inf] před %count% dny" - future: "{1} zítra|[2, 4] za %count% dny|[5,Inf] za %count% dní" -week: - past: "{1} minulý týden|[2, Inf] před %count% týdny" - future: "{1} za týden|[2, 4] za %count% týdny|[5,Inf] za %count% týdnů" -month: - past: "{1} minulý měsíc|[2, Inf] před %count% měsíci" - future: "{1} za měsíc|[2, 4] za %count% měsíce|[5,Inf] za %count% měsíců" -year: - past: "{1} minulý rok|[2, Inf] před %count% lety" - future: "{1} za rok|[2, 4] za %count% roky|[5,Inf] za %count% let" - -compound: - second: "{1} %count% vteřina |[2,4] %count% vteřiny|[5,Inf] %count% vteřin" - minute: "{1} %count% minuta|[2,4] %count% minuty|[5,Inf] %count% minut" - hour: "{1} %count% hodina|[2,4] %count% hodiny|[5,Inf] %count% hodin" - day: "{1} %count% den |[2,4] %count% dny|[5,Inf] %count% dní" - week: "{1} %count% týden|[2,4] %count% týdny|[5,Inf] %count% týdnů" - month: "{1} %count% měsíc|[2,4] %count% měsíce|[5,Inf] %count% měsíců" - year: "{1} %count% rok|[2,4] %count% roky|[5,Inf] %count% let" - past: "před %value% " - future: "%value% odteď" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.da.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.da.php new file mode 100644 index 0000000..e9feff4 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.da.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] lige nu', + 'future' => '[0,Inf] lige nu', + ], + 'second' => [ + 'past' => '[0,1] %count% sekund siden|[2,Inf] %count% sekunder siden', + 'future' => '[0,1] %count% sekund fra nu|[2,Inf] %count% sekunder fra nu', + ], + 'minute' => [ + 'past' => '{1} %count% minut siden|[2,Inf] %count% minutter siden', + 'future' => '{1} %count% minut fra nu|[2,Inf] %count% minutter fra nu', + ], + 'hour' => [ + 'past' => '{1} %count% time siden|[2,Inf] %count% timer siden', + 'future' => '{1} %count% time fra nu|[2,Inf] %count% timer fra nu', + ], + 'day' => [ + 'past' => '{1} %count% dag siden|[2,Inf] %count% dage siden', + 'future' => '{1} %count% dag fra nu|[2,Inf] %count% dage fra nu', + ], + 'week' => [ + 'past' => '{1} %count% uge siden|[2,Inf] %count% uger siden', + 'future' => '{1} %count% uge fra nu|[2,Inf] %count% uger fra nu', + ], + 'month' => [ + 'past' => '{1} %count% måned siden|[2,Inf] %count% måneder siden', + 'future' => '{1} %count% måned fra nu|[2,Inf] %count% måneder fra nu', + ], + 'year' => [ + 'past' => '{1} %count% år siden|[2,Inf] %count% år siden', + 'future' => '{1} %count% år fra nu|[2,Inf] %count% år fra nu', + ], + 'compound' => [ + 'second' => '[0,1] %count% sekund|[2,Inf] %count% sekunder', + 'minute' => '{1} %count% minut|[2,Inf] %count% minutter', + 'hour' => '{1} %count% time|[2,Inf] %count% timer', + 'day' => '{1} %count% dag|[2,Inf] %count% dage', + 'week' => '{1} %count% uge|[2,Inf] %count% uger', + 'month' => '{1} %count% måned|[2,Inf] %count% måneder', + 'year' => '{1} %count% år|[2,Inf] %count% år', + 'past' => '%value% siden', + 'future' => '%value% fra nu', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml deleted file mode 100644 index 8be37e2..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.da.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] lige nu" - future: "[0,Inf] lige nu" -second: - past: "[0,1] %count% sekund siden|[2,Inf] %count% sekunder siden" - future: "[0,1] %count% sekund fra nu|[2,Inf] %count% sekunder fra nu" -minute: - past: "{1} %count% minut siden|[2,Inf] %count% minutter siden" - future: "{1} %count% minut fra nu|[2,Inf] %count% minutter fra nu" -hour: - past: "{1} %count% time siden|[2,Inf] %count% timer siden" - future: "{1} %count% time fra nu|[2,Inf] %count% timer fra nu" -day: - past: "{1} %count% dag siden|[2,Inf] %count% dage siden" - future: "{1} %count% dag fra nu|[2,Inf] %count% dage fra nu" -week: - past: "{1} %count% uge siden|[2,Inf] %count% uger siden" - future: "{1} %count% uge fra nu|[2,Inf] %count% uger fra nu" -month: - past: "{1} %count% måned siden|[2,Inf] %count% måneder siden" - future: "{1} %count% måned fra nu|[2,Inf] %count% måneder fra nu" -year: - past: "{1} %count% år siden|[2,Inf] %count% år siden" - future: "{1} %count% år fra nu|[2,Inf] %count% år fra nu" - -compound: - second: "[0,1] %count% sekund|[2,Inf] %count% sekunder" - minute: "{1} %count% minut|[2,Inf] %count% minutter" - hour: "{1} %count% time|[2,Inf] %count% timer" - day: "{1} %count% dag|[2,Inf] %count% dage" - week: "{1} %count% uge|[2,Inf] %count% uger" - month: "{1} %count% måned|[2,Inf] %count% måneder" - year: "{1} %count% år|[2,Inf] %count% år" - past: "%value% siden" - future: "%value% fra nu" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.de.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.de.php new file mode 100644 index 0000000..cdf7808 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.de.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] jetzt gerade', + 'future' => '[0,Inf] jetzt gerade', + ], + 'second' => [ + 'past' => '[0,1] vor %count% Sekunde|[2,Inf] vor %count% Sekunden', + 'future' => '[0,1] in %count% Sekunde|[2,Inf] in %count% Sekunden', + ], + 'minute' => [ + 'past' => '{1} vor %count% Minute|[2,Inf] vor %count% Minuten', + 'future' => '{1} in %count% Minute|[2,Inf] in %count% Minuten', + ], + 'hour' => [ + 'past' => '{1} vor %count% Stunde|[2,Inf] vor %count% Stunden', + 'future' => '{1} in %count% Stunde|[2,Inf] in %count% Stunden', + ], + 'day' => [ + 'past' => '{1} vor %count% Tag|[2,Inf] vor %count% Tagen', + 'future' => '{1} in %count% Tag|[2,Inf] in %count% Tagen', + ], + 'week' => [ + 'past' => '{1} vor %count% Woche|[2,Inf] vor %count% Wochen', + 'future' => '{1} in %count% Woche|[2,Inf] in %count% Wochen', + ], + 'month' => [ + 'past' => '{1} vor %count% Monat|[2,Inf] vor %count% Monaten', + 'future' => '{1} in %count% Monat|[2,Inf] in %count% Monaten', + ], + 'year' => [ + 'past' => '{1} vor %count% Jahr|[2,Inf] vor %count% Jahren', + 'future' => '{1} in %count% Jahr|[2,Inf] in %count% Jahren', + ], + 'compound' => [ + 'second' => '[0,1] %count% Sekunde|[2,Inf] %count% Sekunden', + 'minute' => '{1} %count% Minute|[2,Inf] %count% Minuten', + 'hour' => '{1} %count% Stunde|[2,Inf] %count% Stunden', + 'day' => '{1} %count% Tag|[2,Inf] %count% Tagen', + 'week' => '{1} %count% Woche|[2,Inf] %count% Wochen', + 'month' => '{1} %count% Monat|[2,Inf] %count% Monaten', + 'year' => '{1} %count% Jahr|[2,Inf] %count% Jahren', + 'past' => 'vor %value%', + 'future' => 'in %value%', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml deleted file mode 100644 index b5a1e40..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.de.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] jetzt gerade" - future: "[0,Inf] jetzt gerade" -second: - past: "[0,1] vor %count% Sekunde|[2,Inf] vor %count% Sekunden" - future: "[0,1] in %count% Sekunde|[2,Inf] in %count% Sekunden" -minute: - past: "{1} vor %count% Minute|[2,Inf] vor %count% Minuten" - future: "{1} in %count% Minute|[2,Inf] in %count% Minuten" -hour: - past: "{1} vor %count% Stunde|[2,Inf] vor %count% Stunden" - future: "{1} in %count% Stunde|[2,Inf] in %count% Stunden" -day: - past: "{1} vor %count% Tag|[2,Inf] vor %count% Tagen" - future: "{1} in %count% Tag|[2,Inf] in %count% Tagen" -week: - past: "{1} vor %count% Woche|[2,Inf] vor %count% Wochen" - future: "{1} in %count% Woche|[2,Inf] in %count% Wochen" -month: - past: "{1} vor %count% Monat|[2,Inf] vor %count% Monaten" - future: "{1} in %count% Monat|[2,Inf] in %count% Monaten" -year: - past: "{1} vor %count% Jahr|[2,Inf] vor %count% Jahren" - future: "{1} in %count% Jahr|[2,Inf] in %count% Jahren" - -compound: - second: "[0,1] %count% Sekunde|[2,Inf] %count% Sekunden" - minute: "{1} %count% Minute|[2,Inf] %count% Minuten" - hour: "{1} %count% Stunde|[2,Inf] %count% Stunden" - day: "{1} %count% Tag|[2,Inf] %count% Tagen" - week: "{1} %count% Woche|[2,Inf] %count% Wochen" - month: "{1} %count% Monat|[2,Inf] %count% Monaten" - year: "{1} %count% Jahr|[2,Inf] %count% Jahren" - past: "vor %value%" - future: "in %value%" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.en.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.en.php new file mode 100644 index 0000000..a677387 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.en.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] just now', + 'future' => '[0,Inf] just now', + ], + 'second' => [ + 'past' => '[0,1] %count% second ago|[2,Inf] %count% seconds ago', + 'future' => '[0,1] %count% second from now|[2,Inf] %count% seconds from now', + ], + 'minute' => [ + 'past' => '{1} %count% minute ago|[2,Inf] %count% minutes ago', + 'future' => '{1} %count% minute from now|[2,Inf] %count% minutes from now', + ], + 'hour' => [ + 'past' => '{1} %count% hour ago|[2,Inf] %count% hours ago', + 'future' => '{1} %count% hour from now|[2,Inf] %count% hours from now', + ], + 'day' => [ + 'past' => '{1} %count% day ago|[2,Inf] %count% days ago', + 'future' => '{1} %count% day from now|[2,Inf] %count% days from now', + ], + 'week' => [ + 'past' => '{1} %count% week ago|[2,Inf] %count% weeks ago', + 'future' => '{1} %count% week from now|[2,Inf] %count% weeks from now', + ], + 'month' => [ + 'past' => '{1} %count% month ago|[2,Inf] %count% months ago', + 'future' => '{1} %count% month from now|[2,Inf] %count% months from now', + ], + 'year' => [ + 'past' => '{1} %count% year ago|[2,Inf] %count% years ago', + 'future' => '{1} %count% year from now|[2,Inf] %count% years from now', + ], + 'compound' => [ + 'second' => '[0,1] %count% second|[2,Inf] %count% seconds', + 'minute' => '{1} %count% minute|[2,Inf] %count% minutes', + 'hour' => '{1} %count% hour|[2,Inf] %count% hours', + 'day' => '{1} %count% day|[2,Inf] %count% days', + 'week' => '{1} %count% week|[2,Inf] %count% weeks', + 'month' => '{1} %count% month|[2,Inf] %count% months', + 'year' => '{1} %count% year|[2,Inf] %count% years', + 'past' => '%value% ago', + 'future' => '%value% from now', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml deleted file mode 100644 index 2a6a906..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.en.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] just now" - future: "[0,Inf] just now" -second: - past: "[0,1] %count% second ago|[2,Inf] %count% seconds ago" - future: "[0,1] %count% second from now|[2,Inf] %count% seconds from now" -minute: - past: "{1} %count% minute ago|[2,Inf] %count% minutes ago" - future: "{1} %count% minute from now|[2,Inf] %count% minutes from now" -hour: - past: "{1} %count% hour ago|[2,Inf] %count% hours ago" - future: "{1} %count% hour from now|[2,Inf] %count% hours from now" -day: - past: "{1} %count% day ago|[2,Inf] %count% days ago" - future: "{1} %count% day from now|[2,Inf] %count% days from now" -week: - past: "{1} %count% week ago|[2,Inf] %count% weeks ago" - future: "{1} %count% week from now|[2,Inf] %count% weeks from now" -month: - past: "{1} %count% month ago|[2,Inf] %count% months ago" - future: "{1} %count% month from now|[2,Inf] %count% months from now" -year: - past: "{1} %count% year ago|[2,Inf] %count% years ago" - future: "{1} %count% year from now|[2,Inf] %count% years from now" - -compound: - second: "[0,1] %count% second|[2,Inf] %count% seconds" - minute: "{1} %count% minute|[2,Inf] %count% minutes" - hour: "{1} %count% hour|[2,Inf] %count% hours" - day: "{1} %count% day|[2,Inf] %count% days" - week: "{1} %count% week|[2,Inf] %count% weeks" - month: "{1} %count% month|[2,Inf] %count% months" - year: "{1} %count% year|[2,Inf] %count% years" - past: "%value% ago" - future: "%value% from now" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.es.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.php new file mode 100644 index 0000000..5d3cfdd --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] ahora mismo', + 'future' => '[0,Inf] ahora mismo', + ], + 'second' => [ + 'past' => '[0,1] hace %count% segundo |[2,Inf] hace %count% segundos', + 'future' => '[0,1] dentro de %count% segundo|[2,Inf] dentro de %count% segundos', + ], + 'minute' => [ + 'past' => '{1} hace %count% minuto|[2,Inf] hace %count% minutos', + 'future' => '{1} dentro de %count% minuto|[2,Inf] dentro de %count% minutos', + ], + 'hour' => [ + 'past' => '{1} hace %count% hora|[2,Inf] hace %count% horas', + 'future' => '{1} dentro de %count% hora|[2,Inf] dentro de %count% horas', + ], + 'day' => [ + 'past' => '{1} hace %count% día|[2,Inf] hace %count% días', + 'future' => '{1} dentro de %count% día|[2,Inf] dentro de %count% días', + ], + 'week' => [ + 'past' => '{1} hace %count% semana|[2,Inf] hace %count% semanas', + 'future' => '{1} dentro de %count% semana|[2,Inf] dentro de %count% semanas', + ], + 'month' => [ + 'past' => '{1} hace %count% mes|[2,Inf] hace %count% meses', + 'future' => '{1} dentro de %count% mes|[2,Inf] dentro de %count% meses', + ], + 'year' => [ + 'past' => '{1} hace %count% año|[2,Inf] hace %count% años', + 'future' => '{1} dentro de %count% año|[2,Inf] dentro de %count% años', + ], + 'compound' => [ + 'second' => '[0,1] %count% segundo|[2,Inf] %count% segundos', + 'minute' => '{1} %count% minuto|[2,Inf] %count% minutos', + 'hour' => '{1} %count% hora|[2,Inf] %count% horas', + 'day' => '{1} %count% día|[2,Inf] %count% días', + 'week' => '{1} %count% semana|[2,Inf] %count% semanas', + 'month' => '{1} %count% mes|[2,Inf] %count% meses', + 'year' => '{1} %count% año|[2,Inf] %count% años', + 'past' => 'hace %value%', + 'future' => 'dentro de %value%', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml deleted file mode 100644 index 8105a11..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.es.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] ahora mismo" - future: "[0,Inf] ahora mismo" -second: - past: "[0,1] hace %count% segundo |[2,Inf] hace %count% segundos" - future: "[0,1] dentro de %count% segundo|[2,Inf] dentro de %count% segundos" -minute: - past: "{1} hace %count% minuto|[2,Inf] hace %count% minutos" - future: "{1} dentro de %count% minuto|[2,Inf] dentro de %count% minutos" -hour: - past: "{1} hace %count% hora|[2,Inf] hace %count% horas" - future: "{1} dentro de %count% hora|[2,Inf] dentro de %count% horas" -day: - past: "{1} hace %count% día|[2,Inf] hace %count% días" - future: "{1} dentro de %count% día|[2,Inf] dentro de %count% días" -week: - past: "{1} hace %count% semana|[2,Inf] hace %count% semanas" - future: "{1} dentro de %count% semana|[2,Inf] dentro de %count% semanas" -month: - past: "{1} hace %count% mes|[2,Inf] hace %count% meses" - future: "{1} dentro de %count% mes|[2,Inf] dentro de %count% meses" -year: - past: "{1} hace %count% año|[2,Inf] hace %count% años" - future: "{1} dentro de %count% año|[2,Inf] dentro de %count% años" - -compound: - second: "[0,1] %count% segundo|[2,Inf] %count% segundos" - minute: "{1} %count% minuto|[2,Inf] %count% minutos" - hour: "{1} %count% hora|[2,Inf] %count% horas" - day: "{1} %count% día|[2,Inf] %count% días" - week: "{1} %count% semana|[2,Inf] %count% semanas" - month: "{1} %count% mes|[2,Inf] %count% meses" - year: "{1} %count% año|[2,Inf] %count% años" - past: "hace %value%" - future: "dentro de %value%" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.php new file mode 100644 index 0000000..33e71c2 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] à l\'instant', + 'future' => '[0,Inf] à l\'instant', + ], + 'second' => [ + 'past' => '[0,1] il y a %count% seconde|[2,Inf] il y a %count% secondes', + 'future' => '[0,1] il y a maintenant %count% seconde|[2,Inf] il y a maintenant %count% secondes', + ], + 'minute' => [ + 'past' => '{1} il y a %count% minute|[2,Inf] il y a %count% minutes', + 'future' => '{1} il y a maintenant %count% minute|[2,Inf] il y a maintenant %count% minutes', + ], + 'hour' => [ + 'past' => '{1} il y a %count% heure|[2,Inf] il y a %count% heure', + 'future' => '{1} il y a maintenant %count% heure|[2,Inf] il y a maintenant %count% heures', + ], + 'day' => [ + 'past' => '{1} il y a %count% jour|[2,Inf] il y a %count% jours', + 'future' => '{1} il y a maintenant %count% jour|[2,Inf] il y a maintenant %count% jours', + ], + 'week' => [ + 'past' => '{1} il y a %count% semaine|[2,Inf] il y a %count% semaines', + 'future' => '{1} il y a maintenant %count% semaine|[2,Inf] il y a maintenant %count% semaines', + ], + 'month' => [ + 'past' => '{1} il y a %count% mois|[2,Inf] il y a %count% mois', + 'future' => '{1} %count% mois maintenant|[2,Inf] %count% mois maintenant', + ], + 'year' => [ + 'past' => '{1} il y a %count% année|[2,Inf] il y a %count% années', + 'future' => '{1} il y a maintenant %count% année|[2,Inf] il y a maintenant %count% années', + ], + 'compound' => [ + 'second' => '[0,1] %count% seconde|[2,Inf] %count% secondes', + 'minute' => '{1} %count% minute|[2,Inf] %count% minutes', + 'hour' => '{1} %count% heure|[2,Inf] %count% heures', + 'day' => '{1} %count% jour|[2,Inf] %count% jours', + 'week' => '{1} %count% semaine|[2,Inf] %count% semaines', + 'month' => '{1} %count% mois|[2,Inf] %count% mois', + 'year' => '{1} %count% année|[2,Inf] %count% années', + 'past' => '%value% il y a', + 'future' => '%value% maintenant', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml deleted file mode 100644 index e89fcec..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.fr.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] à l'instant" - future: "[0,Inf] à l'instant" -second: - past: "[0,1] il y a %count% seconde|[2,Inf] il y a %count% secondes" - future: "[0,1] il y a maintenant %count% seconde|[2,Inf] il y a maintenant %count% secondes" -minute: - past: "{1} il y a %count% minute|[2,Inf] il y a %count% minutes" - future: "{1} il y a maintenant %count% minute|[2,Inf] il y a maintenant %count% minutes" -hour: - past: "{1} il y a %count% heure|[2,Inf] il y a %count% heure" - future: "{1} il y a maintenant %count% heure|[2,Inf] il y a maintenant %count% heures" -day: - past: "{1} il y a %count% jour|[2,Inf] il y a %count% jours" - future: "{1} il y a maintenant %count% jour|[2,Inf] il y a maintenant %count% jours" -week: - past: "{1} il y a %count% semaine|[2,Inf] il y a %count% semaines" - future: "{1} il y a maintenant %count% semaine|[2,Inf] il y a maintenant %count% semaines" -month: - past: "{1} il y a %count% mois|[2,Inf] il y a %count% mois" - future: "{1} %count% mois maintenant|[2,Inf] %count% mois maintenant" -year: - past: "{1} il y a %count% année|[2,Inf] il y a %count% années" - future: "{1} il y a maintenant %count% année|[2,Inf] il y a maintenant %count% années" - -compound: - second: "[0,1] %count% seconde|[2,Inf] %count% secondes" - minute: "{1} %count% minute|[2,Inf] %count% minutes" - hour: "{1} %count% heure|[2,Inf] %count% heures" - day: "{1} %count% jour|[2,Inf] %count% jours" - week: "{1} %count% semaine|[2,Inf] %count% semaines" - month: "{1} %count% mois|[2,Inf] %count% mois" - year: "{1} %count% année|[2,Inf] %count% années" - past: "%value% il y a" - future: "%value% maintenant" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.id.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.id.php new file mode 100644 index 0000000..2f8eecc --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.id.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] baru saja', + 'future' => '[0,Inf] baru saja', + ], + 'second' => [ + 'past' => '[0,1] %count% detik yang lalu|[2,Inf] %count% detik yang lalu', + 'future' => '[0,1] %count% detik dari sekarang|[2,Inf] %count% detik dari sekarang', + ], + 'minute' => [ + 'past' => '{1} %count% menit yang lalu|[2,Inf] %count% menit yang lalu', + 'future' => '{1} %count% menit dari sekarang|[2,Inf] %count% menit dari sekarang', + ], + 'hour' => [ + 'past' => '{1} %count% jam yang lalu|[2,Inf] %count% jam yang lalu', + 'future' => '{1} %count% jam dari sekarang|[2,Inf] %count% jam dari sekarang', + ], + 'day' => [ + 'past' => '{1} %count% hari yang lalu|[2,Inf] %count% hari yang lalu', + 'future' => '{1} %count% hari dari sekarang|[2,Inf] %count% hari dari sekarang', + ], + 'week' => [ + 'past' => '{1} %count% minggu yang lalu|[2,Inf] %count% minggu yang lalu', + 'future' => '{1} %count% minggu dari sekarang|[2,Inf] %count% minggu dari sekarang', + ], + 'month' => [ + 'past' => '{1} %count% bulan yang lalu|[2,Inf] %count% bulan yang lalu', + 'future' => '{1} %count% bulan dari sekarang|[2,Inf] %count% bulan dari sekarang', + ], + 'year' => [ + 'past' => '{1} %count% tahun yang lalu|[2,Inf] %count% tahun yang lalu', + 'future' => '{1} %count% tahun dari sekarang|[2,Inf] %count% tahun dari sekarang', + ], + 'compound' => [ + 'second' => '[0,1] %count% detik|[2,Inf] %count% detik', + 'minute' => '{1} %count% menit|[2,Inf] %count% menit', + 'hour' => '{1} %count% jam|[2,Inf] %count% jam', + 'day' => '{1} %count% hari|[2,Inf] %count% hari', + 'week' => '{1} %count% minggu|[2,Inf] %count% minggu', + 'month' => '{1} %count% bulan|[2,Inf] %count% bulan', + 'year' => '{1} %count% tahun|[2,Inf] %count% tahun', + 'past' => '%value% yang lalu', + 'future' => '%value% dari sekarang', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml deleted file mode 100644 index 9996408..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.id.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] baru saja" - future: "[0,Inf] baru saja" -second: - past: "[0,1] %count% detik yang lalu|[2,Inf] %count% detik yang lalu" - future: "[0,1] %count% detik dari sekarang|[2,Inf] %count% detik dari sekarang" -minute: - past: "{1} %count% menit yang lalu|[2,Inf] %count% menit yang lalu" - future: "{1} %count% menit dari sekarang|[2,Inf] %count% menit dari sekarang" -hour: - past: "{1} %count% jam yang lalu|[2,Inf] %count% jam yang lalu" - future: "{1} %count% jam dari sekarang|[2,Inf] %count% jam dari sekarang" -day: - past: "{1} %count% hari yang lalu|[2,Inf] %count% hari yang lalu" - future: "{1} %count% hari dari sekarang|[2,Inf] %count% hari dari sekarang" -week: - past: "{1} %count% minggu yang lalu|[2,Inf] %count% minggu yang lalu" - future: "{1} %count% minggu dari sekarang|[2,Inf] %count% minggu dari sekarang" -month: - past: "{1} %count% bulan yang lalu|[2,Inf] %count% bulan yang lalu" - future: "{1} %count% bulan dari sekarang|[2,Inf] %count% bulan dari sekarang" -year: - past: "{1} %count% tahun yang lalu|[2,Inf] %count% tahun yang lalu" - future: "{1} %count% tahun dari sekarang|[2,Inf] %count% tahun dari sekarang" - -compound: - second: "[0,1] %count% detik|[2,Inf] %count% detik" - minute: "{1} %count% menit|[2,Inf] %count% menit" - hour: "{1} %count% jam|[2,Inf] %count% jam" - day: "{1} %count% hari|[2,Inf] %count% hari" - week: "{1} %count% minggu|[2,Inf] %count% minggu" - month: "{1} %count% bulan|[2,Inf] %count% bulan" - year: "{1} %count% tahun|[2,Inf] %count% tahun" - past: "%value% yang lalu" - future: "%value% dari sekarang" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.it.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.it.php new file mode 100644 index 0000000..4389c53 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.it.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] adesso', + 'future' => '[0,Inf] adesso', + ], + 'second' => [ + 'past' => '[0,1] %count% secondo fa|[2,Inf] %count% secondi fa', + 'future' => '[0,1] %count% secondo da adesso|[2,Inf] %count% secondi da adesso', + ], + 'minute' => [ + 'past' => '{1} %count% minuto fa|[2,Inf] %count% minuti fa', + 'future' => '{1} %count% minuto da adesso|[2,Inf] %count% minuti da adesso', + ], + 'hour' => [ + 'past' => '{1} %count% ora fa|[2,Inf] %count% ore fa', + 'future' => '{1} %count% ora da adesso|[2,Inf] %count% ore da adesso', + ], + 'day' => [ + 'past' => '{1} %count% giorno fa|[2,Inf] %count% giorni fa', + 'future' => '{1} %count% giorno da adesso|[2,Inf] %count% giorni da adesso', + ], + 'week' => [ + 'past' => '{1} %count% settimana fa|[2,Inf] %count% settimane fa', + 'future' => '{1} %count% settimana da adesso|[2,Inf] %count% settimane da adesso', + ], + 'month' => [ + 'past' => '{1} %count% mese fa|[2,Inf] %count% mesi fa', + 'future' => '{1} %count% mese da adesso|[2,Inf] %count% mesi da adesso', + ], + 'year' => [ + 'past' => '{1} %count% anno fa|[2,Inf] %count% anni fa', + 'future' => '{1} %count% anno da adesso|[2,Inf] %count% anni da adesso', + ], + 'compound' => [ + 'second' => '[0,1] %count% secondo|[2,Inf] %count% secondi', + 'minute' => '{1} %count% minuto|[2,Inf] %count% minuti', + 'hour' => '{1} %count% ora|[2,Inf] %count% ore', + 'day' => '{1} %count% giorno|[2,Inf] %count% giorni', + 'week' => '{1} %count% settimana|[2,Inf] %count% settimane', + 'month' => '{1} %count% mese|[2,Inf] %count% mesi', + 'year' => '{1} %count% anno|[2,Inf] %count% anni', + 'past' => '%value% fa', + 'future' => '%value% da adesso', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml deleted file mode 100644 index 554365f..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.it.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] adesso" - future: "[0,Inf] adesso" -second: - past: "[0,1] %count% secondo fa|[2,Inf] %count% secondi fa" - future: "[0,1] %count% secondo da adesso|[2,Inf] %count% secondi da adesso" -minute: - past: "{1} %count% minuto fa|[2,Inf] %count% minuti fa" - future: "{1} %count% minuto da adesso|[2,Inf] %count% minuti da adesso" -hour: - past: "{1} %count% ora fa|[2,Inf] %count% ore fa" - future: "{1} %count% ora da adesso|[2,Inf] %count% ore da adesso" -day: - past: "{1} %count% giorno fa|[2,Inf] %count% giorni fa" - future: "{1} %count% giorno da adesso|[2,Inf] %count% giorni da adesso" -week: - past: "{1} %count% settimana fa|[2,Inf] %count% settimane fa" - future: "{1} %count% settimana da adesso|[2,Inf] %count% settimane da adesso" -month: - past: "{1} %count% mese fa|[2,Inf] %count% mesi fa" - future: "{1} %count% mese da adesso|[2,Inf] %count% mesi da adesso" -year: - past: "{1} %count% anno fa|[2,Inf] %count% anni fa" - future: "{1} %count% anno da adesso|[2,Inf] %count% anni da adesso" - -compound: - second: "[0,1] %count% secondo|[2,Inf] %count% secondi" - minute: "{1} %count% minuto|[2,Inf] %count% minuti" - hour: "{1} %count% ora|[2,Inf] %count% ore" - day: "{1} %count% giorno|[2,Inf] %count% giorni" - week: "{1} %count% settimana|[2,Inf] %count% settimane" - month: "{1} %count% mese|[2,Inf] %count% mesi" - year: "{1} %count% anno|[2,Inf] %count% anni" - past: "%value% fa" - future: "%value% da adesso" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.php new file mode 100644 index 0000000..3960542 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] たった今', + 'future' => '[0,Inf] たった今', + ], + 'second' => [ + 'past' => '[0,1] %count% 秒前|[2,Inf] %count% 秒前', + 'future' => '[0,1] %count% 秒後|[2,Inf] %count% 秒後', + ], + 'minute' => [ + 'past' => '{1} %count% 分前|[2,Inf] %count% 分前', + 'future' => '{1} %count% 分後|[2,Inf] %count% 分後', + ], + 'hour' => [ + 'past' => '{1} %count% 時間前|[2,Inf] %count% 時間前', + 'future' => '{1} %count% 時間後|[2,Inf] %count% 時間後', + ], + 'day' => [ + 'past' => '{1} %count% 日前|[2,Inf] %count% 日前', + 'future' => '{1} %count% 日後|[2,Inf] %count% 日後', + ], + 'week' => [ + 'past' => '{1} %count% 週間前|[2,Inf] %count% 週間前', + 'future' => '{1} %count% 週間後|[2,Inf] %count% 週間後', + ], + 'month' => [ + 'past' => '{1} %count% ヶ月前|[2,Inf] %count% ヶ月前', + 'future' => '{1} %count% ヶ月後|[2,Inf] %count% ヶ月後', + ], + 'year' => [ + 'past' => '{1} %count% 年前|[2,Inf] %count% 年前', + 'future' => '{1} %count% 年後|[2,Inf] %count% 年後', + ], + 'compound' => [ + 'second' => '[0,1] %count% 秒|[2,Inf] %count% 秒', + 'minute' => '{1} %count% 分|[2,Inf] %count% 分', + 'hour' => '{1} %count% 時間|[2,Inf] %count% 時間', + 'day' => '{1} %count% 日|[2,Inf] %count% 日', + 'week' => '{1} %count% 週間|[2,Inf] %count% 週間', + 'month' => '{1} %count% 月|[2,Inf] %count% 月', + 'year' => '{1} %count% 年|[2,Inf] %count% 年', + 'past' => '%value%前', + 'future' => '%value%後', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml deleted file mode 100644 index 055fa3d..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.ja.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] たった今" - future: "[0,Inf] たった今" -second: - past: "[0,1] %count% 秒前|[2,Inf] %count% 秒前" - future: "[0,1] %count% 秒後|[2,Inf] %count% 秒後" -minute: - past: "{1} %count% 分前|[2,Inf] %count% 分前" - future: "{1} %count% 分後|[2,Inf] %count% 分後" -hour: - past: "{1} %count% 時間前|[2,Inf] %count% 時間前" - future: "{1} %count% 時間後|[2,Inf] %count% 時間後" -day: - past: "{1} %count% 日前|[2,Inf] %count% 日前" - future: "{1} %count% 日後|[2,Inf] %count% 日後" -week: - past: "{1} %count% 週間前|[2,Inf] %count% 週間前" - future: "{1} %count% 週間後|[2,Inf] %count% 週間後" -month: - past: "{1} %count% ヶ月前|[2,Inf] %count% ヶ月前" - future: "{1} %count% ヶ月後|[2,Inf] %count% ヶ月後" -year: - past: "{1} %count% 年前|[2,Inf] %count% 年前" - future: "{1} %count% 年後|[2,Inf] %count% 年後" - -compound: - second: "[0,1] %count% 秒|[2,Inf] %count% 秒" - minute: "{1} %count% 分|[2,Inf] %count% 分" - hour: "{1} %count% 時間|[2,Inf] %count% 時間" - day: "{1} %count% 日|[2,Inf] %count% 日" - week: "{1} %count% 週間|[2,Inf] %count% 週間" - month: "{1} %count% 月|[2,Inf] %count% 月" - year: "{1} %count% 年|[2,Inf] %count% 年" - past: "%value%前" - future: "%value%後" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.php new file mode 100644 index 0000000..57851ca --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] zojuist', + 'future' => '[0,Inf] zojuist', + ], + 'second' => [ + 'past' => '[0,1] %count% seconde geleden|[2,Inf] %count% seconden geleden', + 'future' => '[0,1] over %count% seconde|[2,Inf] over %count% seconden', + ], + 'minute' => [ + 'past' => '{1} %count% minuut geleden|[2,Inf] %count% minuten geleden', + 'future' => '{1} over %count% minuut|[2,Inf] over %count% minuten', + ], + 'hour' => [ + 'past' => '{1} %count% uur geleden|[2,Inf] %count% uren geleden', + 'future' => '{1} over %count% uur|[2,Inf] over %count% uren', + ], + 'day' => [ + 'past' => '{1} %count% dag geleden|[2,Inf] %count% dagen geleden', + 'future' => '{1} over %count% dag|[2,Inf] over %count% dagen', + ], + 'week' => [ + 'past' => '{1} %count% week geleden|[2,Inf] %count% weken geleden', + 'future' => '{1} over %count% week|[2,Inf] over %count% weken', + ], + 'month' => [ + 'past' => '{1} %count% maand geleden|[2,Inf] %count% maanden geleden', + 'future' => '{1} over %count% maand|[2,Inf] over %count% maanden', + ], + 'year' => [ + 'past' => '{1} %count% jaar geleden|[2,Inf] %count% jaren geleden', + 'future' => '{1} over %count% jaar|[2,Inf] over %count% jaren', + ], + 'compound' => [ + 'second' => '[0,1] %count% seconde|[2,Inf] %count% seconden', + 'minute' => '{1} %count% minuut|[2,Inf] %count% minuten', + 'hour' => '{1} %count% uur|[2,Inf] %count% uren', + 'day' => '{1} %count% dag|[2,Inf] %count% dagen', + 'week' => '{1} %count% week|[2,Inf] %count% weken', + 'month' => '{1} %count% maand|[2,Inf] %count% maanden', + 'year' => '{1} %count% jaar|[2,Inf] %count% jaren', + 'past' => '%value% geleden', + 'future' => '%value% vanaf nu', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml deleted file mode 100644 index d36c5cb..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.nl.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] zojuist" - future: "[0,Inf] zojuist" -second: - past: "[0,1] %count% seconde geleden|[2,Inf] %count% seconden geleden" - future: "[0,1] over %count% seconde|[2,Inf] over %count% seconden" -minute: - past: "{1} %count% minuut geleden|[2,Inf] %count% minuten geleden" - future: "{1} over %count% minuut|[2,Inf] over %count% minuten" -hour: - past: "{1} %count% uur geleden|[2,Inf] %count% uren geleden" - future: "{1} over %count% uur|[2,Inf] over %count% uren" -day: - past: "{1} %count% dag geleden|[2,Inf] %count% dagen geleden" - future: "{1} over %count% dag|[2,Inf] over %count% dagen" -week: - past: "{1} %count% week geleden|[2,Inf] %count% weken geleden" - future: "{1} over %count% week|[2,Inf] over %count% weken" -month: - past: "{1} %count% maand geleden|[2,Inf] %count% maanden geleden" - future: "{1} over %count% maand|[2,Inf] over %count% maanden" -year: - past: "{1} %count% jaar geleden|[2,Inf] %count% jaren geleden" - future: "{1} over %count% jaar|[2,Inf] over %count% jaren" - -compound: - second: "[0,1] %count% seconde|[2,Inf] %count% seconden" - minute: "{1} %count% minuut|[2,Inf] %count% minuten" - hour: "{1} %count% uur|[2,Inf] %count% uren" - day: "{1} %count% dag|[2,Inf] %count% dagen" - week: "{1} %count% week|[2,Inf] %count% weken" - month: "{1} %count% maand|[2,Inf] %count% maanden" - year: "{1} %count% jaar|[2,Inf] %count% jaren" - past: "%value% geleden" - future: "%value% vanaf nu" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.no.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.php new file mode 100644 index 0000000..3da884d --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] akkurat nå', + 'future' => '[0,Inf] akkurat nå', + ], + 'second' => [ + 'past' => '[0,1] %count% sekund siden|[2,Inf] %count% sekunder siden', + 'future' => '[0,1] %count% sekund fra nå|[2,Inf] %count% sekunder fra nå', + ], + 'minute' => [ + 'past' => '{1} %count% minutt siden|[2,Inf] %count% minutter siden', + 'future' => '{1} %count% minutt fra nå|[2,Inf] %count% minutter fra nå', + ], + 'hour' => [ + 'past' => '{1} %count% time siden|[2,Inf] %count% timer siden', + 'future' => '{1} %count% time fra nå|[2,Inf] %count% timer fra nå', + ], + 'day' => [ + 'past' => '{1} %count% dag siden|[2,Inf] %count% dager siden', + 'future' => '{1} %count% dag fra nå|[2,Inf] %count% dager fra nå', + ], + 'week' => [ + 'past' => '{1} %count% uke siden|[2,Inf] %count% uker siden', + 'future' => '{1} %count% uke fra nå|[2,Inf] %count% uker fra nå', + ], + 'month' => [ + 'past' => '{1} %count% måned siden|[2,Inf] %count% måneder siden', + 'future' => '{1} %count% måned fra nå|[2,Inf] %count% måneder fra nå', + ], + 'year' => [ + 'past' => '{1} %count% år siden|[2,Inf] %count% år siden', + 'future' => '{1} %count% år fra nå|[2,Inf] %count% år fra nå', + ], + 'compound' => [ + 'second' => '[0,1] %count% sekund|[2,Inf] %count% sekunder', + 'minute' => '{1} %count% minutt|[2,Inf] %count% minutter', + 'hour' => '{1} %count% time|[2,Inf] %count% timer', + 'day' => '{1} %count% dag|[2,Inf] %count% dager', + 'week' => '{1} %count% uke|[2,Inf] %count% uker', + 'month' => '{1} %count% måned|[2,Inf] %count% måneder', + 'year' => '{1} %count% år|[2,Inf] %count% år', + 'past' => '%value% siden', + 'future' => '%value% fra nå', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml deleted file mode 100644 index 06a7f3e..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.no.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] akkurat nå" - future: "[0,Inf] akkurat nå" -second: - past: "[0,1] %count% sekund siden|[2,Inf] %count% sekunder siden" - future: "[0,1] %count% sekund fra nå|[2,Inf] %count% sekunder fra nå" -minute: - past: "{1} %count% minutt siden|[2,Inf] %count% minutter siden" - future: "{1} %count% minutt fra nå|[2,Inf] %count% minutter fra nå" -hour: - past: "{1} %count% time siden|[2,Inf] %count% timer siden" - future: "{1} %count% time fra nå|[2,Inf] %count% timer fra nå" -day: - past: "{1} %count% dag siden|[2,Inf] %count% dager siden" - future: "{1} %count% dag fra nå|[2,Inf] %count% dager fra nå" -week: - past: "{1} %count% uke siden|[2,Inf] %count% uker siden" - future: "{1} %count% uke fra nå|[2,Inf] %count% uker fra nå" -month: - past: "{1} %count% måned siden|[2,Inf] %count% måneder siden" - future: "{1} %count% måned fra nå|[2,Inf] %count% måneder fra nå" -year: - past: "{1} %count% år siden|[2,Inf] %count% år siden" - future: "{1} %count% år fra nå|[2,Inf] %count% år fra nå" - -compound: - second: "[0,1] %count% sekund|[2,Inf] %count% sekunder" - minute: "{1} %count% minutt|[2,Inf] %count% minutter" - hour: "{1} %count% time|[2,Inf] %count% timer" - day: "{1} %count% dag|[2,Inf] %count% dager" - week: "{1} %count% uke|[2,Inf] %count% uker" - month: "{1} %count% måned|[2,Inf] %count% måneder" - year: "{1} %count% år|[2,Inf] %count% år" - past: "%value% siden" - future: "%value% fra nå" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.php new file mode 100644 index 0000000..05fb2f3 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] w tym momencie', + 'future' => '[0,Inf] w tym momencie', + ], + 'second' => [ + 'past' => '[0,1] sekundę temu|[2, 4] %count% sekundy temu|[5,Inf] %count% sekund temu', + 'future' => '[0,1] za sekundę|[2, 4] za %count% sekund|[5,Inf] za %count% sekund', + ], + 'minute' => [ + 'past' => '{1} minutę temu|[2, 4] %count% minuty temu|[5,Inf] %count% minut temu', + 'future' => '{1} za minutę|[2, 4] za %count% minuty|[5,Inf] za %count% minut', + ], + 'hour' => [ + 'past' => '{1} godzinę temu|[2, 4] %count% godziny temu|[5,Inf] %count% godzin temu', + 'future' => '{1} za godzinę|[2, 4] za %count% godziny|[5,Inf] za %count% godzin', + ], + 'day' => [ + 'past' => '{1} wczoraj|[2, Inf] %count% dni temu', + 'future' => '{1} jutro|[2, Inf] za %count% dni', + ], + 'week' => [ + 'past' => '{1} tydzień temu|[2, 4] %count% tygodnie temu|[5,Inf] %count% tygodni temu', + 'future' => '{1} za tydzień|[2, 4] za %count% tygodnie|[5,Inf] za %count% tygodni', + ], + 'month' => [ + 'past' => '{1} miesiąc temu|[2, 4] %count% miesiące temu|[5,Inf] %count% miesięcy temu', + 'future' => '{1} za miesiąc|[2, 4] za %count% miesiące|[5,Inf] za %count% miesięcy', + ], + 'year' => [ + 'past' => '{1} rok temu|[2, 4] %count% lata temu|[5,Inf] %count% lat temu', + 'future' => '{1} za rok|[2, 4] za %count% lata|[5,Inf] za %count% lat', + ], + 'compound' => [ + 'second' => '[0,1] %count% sekunda|[2,4] %count% sekundy|[5,Inf] %count% sekund', + 'minute' => '{1} %count% minuta|[2,4] %count% minuty|[5,Inf] %count% minut', + 'hour' => '{1} %count% godzina|[2,4] %count% godziny|[5,Inf] %count% godzin', + 'day' => '{1} %count% dzień|[2,Inf] %count% dni', + 'week' => '{1} %count% tydzień|[2,4] %count% tygodnie|[5,Inf] %count% tygodni', + 'month' => '{1} %count% miesiąc|[2,4] %count% miesiące|[5,Inf] %count% miesięcy', + 'year' => '{1} %count% rok|[2,4] %count% lata|[5,Inf] %count% lat', + 'past' => '%value% temu', + 'future' => '%value% od teraz', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml deleted file mode 100644 index 45fcc71..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pl.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] w tym momencie" - future: "[0,Inf] w tym momencie" -second: - past: "[0,1] sekundę temu|[2, 4] %count% sekundy temu|[5,Inf] %count% sekund temu" - future: "[0,1] za sekundę|[2, 4] za %count% sekund|[5,Inf] za %count% sekund" -minute: - past: "{1} minutę temu|[2, 4] %count% minuty temu|[5,Inf] %count% minut temu" - future: "{1} za minutę|[2, 4] za %count% minuty|[5,Inf] za %count% minut" -hour: - past: "{1} godzinę temu|[2, 4] %count% godziny temu|[5,Inf] %count% godzin temu" - future: "{1} za godzinę|[2, 4] za %count% godziny|[5,Inf] za %count% godzin" -day: - past: "{1} wczoraj|[2, Inf] %count% dni temu" - future: "{1} jutro|[2, Inf] za %count% dni" -week: - past: "{1} tydzień temu|[2, 4] %count% tygodnie temu|[5,Inf] %count% tygodni temu" - future: "{1} za tydzień|[2, 4] za %count% tygodnie|[5,Inf] za %count% tygodni" -month: - past: "{1} miesiąc temu|[2, 4] %count% miesiące temu|[5,Inf] %count% miesięcy temu" - future: "{1} za miesiąc|[2, 4] za %count% miesiące|[5,Inf] za %count% miesięcy" -year: - past: "{1} rok temu|[2, 4] %count% lata temu|[5,Inf] %count% lat temu" - future: "{1} za rok|[2, 4] za %count% lata|[5,Inf] za %count% lat" - -compound: - second: "[0,1] %count% sekunda|[2,4] %count% sekundy|[5,Inf] %count% sekund" - minute: "{1} %count% minuta|[2,4] %count% minuty|[5,Inf] %count% minut" - hour: "{1} %count% godzina|[2,4] %count% godziny|[5,Inf] %count% godzin" - day: "{1} %count% dzień|[2,Inf] %count% dni" - week: "{1} %count% tydzień|[2,4] %count% tygodnie|[5,Inf] %count% tygodni" - month: "{1} %count% miesiąc|[2,4] %count% miesiące|[5,Inf] %count% miesięcy" - year: "{1} %count% rok|[2,4] %count% lata|[5,Inf] %count% lat" - past: "%value% temu" - future: "%value% od teraz" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.php new file mode 100644 index 0000000..6684afd --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] agora', + 'future' => '[0,Inf] agora', + ], + 'second' => [ + 'past' => '[0,1] %count% segundo atrás|[2,Inf] %count% segundos atrás', + 'future' => '[0,1] %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora', + ], + 'minute' => [ + 'past' => '{1} %count% minuto atrás|[2,Inf] %count% minutos atrás', + 'future' => '{1} %count% minuto a partir de agora|[2,Inf] %count% minutos a partir de agora', + ], + 'hour' => [ + 'past' => '{1} %count% hora atrás|[2,Inf] %count% horas atrás', + 'future' => '{1} %count% hora a partir de agora|[2,Inf] %count% horas a partir de agora', + ], + 'day' => [ + 'past' => '{1} %count% dia atrás|[2,Inf] %count% dias atrás', + 'future' => '{1} %count% dia a partir de agora|[2,Inf] %count% dias a partir de agora', + ], + 'week' => [ + 'past' => '{1} %count% semana atrás|[2,Inf] %count% semanas atrás', + 'future' => '{1} %count% semana a partir de agora|[2,Inf] %count% semanas a partir de agora', + ], + 'month' => [ + 'past' => '{1} %count% mês atrás|[2,Inf] %count% meses atrás', + 'future' => '{1} %count% mês a partir de agora|[2,Inf] %count% meses a partir de agora', + ], + 'year' => [ + 'past' => '{1} %count% ano atrás|[2,Inf] %count% anos atrás', + 'future' => '{1} %count% ano a partir de agora|[2,Inf] %count% anos a partir de agora', + ], + 'compound' => [ + 'second' => '[0,1] %count% segundo|[2,Inf] %count% segundos', + 'minute' => '{1} %count% minuto|[2,Inf] %count% minutos', + 'hour' => '{1} %count% hora|[2,Inf] %count% horas', + 'day' => '{1} %count% dia|[2,Inf] %count% dias', + 'week' => '{1} %count% semana|[2,Inf] %count% semana', + 'month' => '{1} %count% mês|[2,Inf] %count% meses', + 'year' => '{1} %count% ano|[2,Inf] %count% anos', + 'past' => '%value% atrás', + 'future' => '%value% a partir de agora', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml deleted file mode 100644 index a5e7ea7..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] agora" - future: "[0,Inf] agora" -second: - past: "[0,1] %count% segundo atrás|[2,Inf] %count% segundos atrás" - future: "[0,1] %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora" -minute: - past: "{1} %count% minuto atrás|[2,Inf] %count% minutos atrás" - future: "{1} %count% minuto a partir de agora|[2,Inf] %count% minutos a partir de agora" -hour: - past: "{1} %count% hora atrás|[2,Inf] %count% horas atrás" - future: "{1} %count% hora a partir de agora|[2,Inf] %count% horas a partir de agora" -day: - past: "{1} %count% dia atrás|[2,Inf] %count% dias atrás" - future: "{1} %count% dia a partir de agora|[2,Inf] %count% dias a partir de agora" -week: - past: "{1} %count% semana atrás|[2,Inf] %count% semanas atrás" - future: "{1} %count% semana a partir de agora|[2,Inf] %count% semanas a partir de agora" -month: - past: "{1} %count% mês atrás|[2,Inf] %count% meses atrás" - future: "{1} %count% mês a partir de agora|[2,Inf] %count% meses a partir de agora" -year: - past: "{1} %count% ano atrás|[2,Inf] %count% anos atrás" - future: "{1} %count% ano a partir de agora|[2,Inf] %count% anos a partir de agora" - -compound: - second: "[0,1] %count% segundo|[2,Inf] %count% segundos" - minute: "{1} %count% minuto|[2,Inf] %count% minutos" - hour: "{1} %count% hora|[2,Inf] %count% horas" - day: "{1} %count% dia|[2,Inf] %count% dias" - week: "{1} %count% semana|[2,Inf] %count% semana" - month: "{1} %count% mês|[2,Inf] %count% meses" - year: "{1} %count% ano|[2,Inf] %count% anos" - past: "%value% atrás" - future: "%value% a partir de agora" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.php new file mode 100644 index 0000000..91f4ee5 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] atrás', + 'future' => '[0,Inf] a partir de agora', + ], + 'second' => [ + 'past' => '[0,1] %count% segundo atrás|[2,Inf] %count% segundos atrás', + 'future' => '[0,1] %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora', + ], + 'minute' => [ + 'past' => '{1} %count% minuto atrás|[2,Inf] %count% minutos atrás', + 'future' => '{1} %count% minuto a partir de agora|[2,Inf] %count% minutos a partir de agora', + ], + 'hour' => [ + 'past' => '{1} %count% hora atrás|[2,Inf] %count% horas atrás', + 'future' => '{1} %count% hora a partir de agora|[2,Inf] %count% horas a partir de agora', + ], + 'day' => [ + 'past' => '{1} %count% dia atrás|[2,Inf] %count% dias atrás', + 'future' => '{1} %count% dia a partir de agora|[2,Inf] %count% dias a partir de agora', + ], + 'week' => [ + 'past' => '{1} %count% semana atrás|[2,Inf] %count% semanas atrás', + 'future' => '{1} %count% semana a partir de agora|[2,Inf] %count% semanas a partir de agora', + ], + 'month' => [ + 'past' => '{1} %count% mês atrás|[2,Inf] %count% meses atrás', + 'future' => '{1} %count% mês a partir de agora|[2,Inf] %count% meses a partir de agora', + ], + 'year' => [ + 'past' => '{1} %count% ano atrás|[2,Inf] %count% anos atrás', + 'future' => '{1} %count% ano a partir de agora|[2,Inf] %count% anos a partir de agora', + ], + 'compound' => [ + 'second' => '[0,1] %count% segundo|[2,Inf] %count% segundos', + 'minute' => '{1} %count% minuto|[2,Inf] %count% minutos', + 'hour' => '{1} %count% hora|[2,Inf] %count% horas', + 'day' => '{1} %count% dia|[2,Inf] %count% dias', + 'week' => '{1} %count% semana|[2,Inf] %count% semana', + 'month' => '{1} %count% mês|[2,Inf] %count% meses', + 'year' => '{1} %count% ano|[2,Inf] %count% anos', + 'past' => '%value% atrás', + 'future' => '%value% a partir de agora', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml deleted file mode 100644 index 221b8bf..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.pt_BR.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] atrás" - future: "[0,Inf] a partir de agora" -second: - past: "[0,1] %count% segundo atrás|[2,Inf] %count% segundos atrás" - future: "[0,1] %count% segundo a partir de agora|[2,Inf] %count% segundos a partir de agora" -minute: - past: "{1} %count% minuto atrás|[2,Inf] %count% minutos atrás" - future: "{1} %count% minuto a partir de agora|[2,Inf] %count% minutos a partir de agora" -hour: - past: "{1} %count% hora atrás|[2,Inf] %count% horas atrás" - future: "{1} %count% hora a partir de agora|[2,Inf] %count% horas a partir de agora" -day: - past: "{1} %count% dia atrás|[2,Inf] %count% dias atrás" - future: "{1} %count% dia a partir de agora|[2,Inf] %count% dias a partir de agora" -week: - past: "{1} %count% semana atrás|[2,Inf] %count% semanas atrás" - future: "{1} %count% semana a partir de agora|[2,Inf] %count% semanas a partir de agora" -month: - past: "{1} %count% mês atrás|[2,Inf] %count% meses atrás" - future: "{1} %count% mês a partir de agora|[2,Inf] %count% meses a partir de agora" -year: - past: "{1} %count% ano atrás|[2,Inf] %count% anos atrás" - future: "{1} %count% ano a partir de agora|[2,Inf] %count% anos a partir de agora" - -compound: - second: "[0,1] %count% segundo|[2,Inf] %count% segundos" - minute: "{1} %count% minuto|[2,Inf] %count% minutos" - hour: "{1} %count% hora|[2,Inf] %count% horas" - day: "{1} %count% dia|[2,Inf] %count% dias" - week: "{1} %count% semana|[2,Inf] %count% semana" - month: "{1} %count% mês|[2,Inf] %count% meses" - year: "{1} %count% ano|[2,Inf] %count% anos" - past: "%value% atrás" - future: "%value% a partir de agora" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.php new file mode 100644 index 0000000..5a9726b --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] mai înainte', + 'future' => '[0,Inf] imediat', + ], + 'second' => [ + 'past' => '[0,1] %count% secundă în urmă|[2,Inf] %count% secunde în urmă', + 'future' => '[0,1] %count% secundă de acum|[2,Inf] %count% secundă de acum', + ], + 'minute' => [ + 'past' => '{1} %count% minut în urmă|[2,Inf] %count% minute în urmă', + 'future' => '{1} %count% minut de acum|[2,Inf] %count% minute de acum', + ], + 'hour' => [ + 'past' => '{1} %count% oră în urmă|[2,Inf] %count% ore în urmă', + 'future' => '{1} %count% oră de acum|[2,Inf] %count% ore de acum', + ], + 'day' => [ + 'past' => '{1} %count% zi în urmă|[2,Inf] %count% zile în urmă', + 'future' => '{1} %count% zi de acum|[2,Inf] %count% zile de acum', + ], + 'week' => [ + 'past' => '{1} %count% săptămână în urmă|[2,Inf] %count% săptămâni în urmă', + 'future' => '{1} %count% săptămână de acum|[2,Inf] %count% săptămâni de acum', + ], + 'month' => [ + 'past' => '{1} %count% lună în urmă|[2,Inf] %count% luni în urmă', + 'future' => '{1} %count% lună de acum|[2,Inf] %count% luni de acum', + ], + 'year' => [ + 'past' => '{1} %count% an în urmă|[2,Inf] %count% ani în urmă', + 'future' => '{1} %count% an de acum|[2,Inf] %count% ani de acum', + ], + 'compound' => [ + 'second' => '[0,1] %count% secundă|[2,Inf] %count% secunde', + 'minute' => '{1} %count% minut|[2,Inf] %count% minute', + 'hour' => '{1} %count% oră|[2,Inf] %count% ore', + 'day' => '{1} %count% zi|[2,Inf] %count% zile', + 'week' => '{1} %count% săptămană|[2,Inf] %count% săptămani', + 'month' => '{1} %count% lună|[2,Inf] %count% luni', + 'year' => '{1} %count% an|[2,Inf] %count% ani', + 'ago' => 'în urmă', + 'from_now' => 'de acum', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml deleted file mode 100644 index 9d83184..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.ro.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] mai înainte" - future: "[0,Inf] imediat" -second: - past: "[0,1] %count% secundă în urmă|[2,Inf] %count% secunde în urmă" - future: "[0,1] %count% secundă de acum|[2,Inf] %count% secundă de acum" -minute: - past: "{1} %count% minut în urmă|[2,Inf] %count% minute în urmă" - future: "{1} %count% minut de acum|[2,Inf] %count% minute de acum" -hour: - past: "{1} %count% oră în urmă|[2,Inf] %count% ore în urmă" - future: "{1} %count% oră de acum|[2,Inf] %count% ore de acum" -day: - past: "{1} %count% zi în urmă|[2,Inf] %count% zile în urmă" - future: "{1} %count% zi de acum|[2,Inf] %count% zile de acum" -week: - past: "{1} %count% săptămână în urmă|[2,Inf] %count% săptămâni în urmă" - future: "{1} %count% săptămână de acum|[2,Inf] %count% săptămâni de acum" -month: - past: "{1} %count% lună în urmă|[2,Inf] %count% luni în urmă" - future: "{1} %count% lună de acum|[2,Inf] %count% luni de acum" -year: - past: "{1} %count% an în urmă|[2,Inf] %count% ani în urmă" - future: "{1} %count% an de acum|[2,Inf] %count% ani de acum" - -compound: - second: "[0,1] %count% secundă|[2,Inf] %count% secunde" - minute: "{1} %count% minut|[2,Inf] %count% minute" - hour: "{1} %count% oră|[2,Inf] %count% ore" - day: "{1} %count% zi|[2,Inf] %count% zile" - week: "{1} %count% săptămană|[2,Inf] %count% săptămani" - month: "{1} %count% lună|[2,Inf] %count% luni" - year: "{1} %count% an|[2,Inf] %count% ani" - ago: "în urmă" - from_now: "de acum" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.php new file mode 100644 index 0000000..15044e5 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] сейчас', + 'future' => '[0,Inf] сейчас', + ], + 'second' => [ + 'past' => '%count% секунду назад|%count% секунды назад|%count% секунд назад', + 'future' => 'через %count% секунду|через %count% секунды|через %count% секунд', + ], + 'minute' => [ + 'past' => '%count% минуту назад|%count% минуты назад|%count% минут назад', + 'future' => 'через %count% минуту|через %count% минуты|через %count% минут', + ], + 'hour' => [ + 'past' => '%count% час назад|%count% часа назад|%count% часов назад', + 'future' => 'через %count% час|через %count% часа|через %count% часов', + ], + 'day' => [ + 'past' => '%count% день назад|%count% дня назад|%count% дней назад', + 'future' => 'через %count% день|через %count% дня|через %count% дней', + ], + 'week' => [ + 'past' => '%count% неделю назад|%count% недели назад|%count% недель назад', + 'future' => 'через %count% неделю|через %count% недели|через %count% недель', + ], + 'month' => [ + 'past' => '%count% месяц назад|%count% месяца назад|%count% месяцев назад', + 'future' => 'через %count% месяц|через %count% месяца|через %count% месяцев', + ], + 'year' => [ + 'past' => '%count% год назад|%count% года назад|%count% лет назад', + 'future' => 'через %count% год|через %count% года|через %count% лет', + ], + 'compound' => [ + 'second' => '%count% секунда|%count% секунды|%count% секунд', + 'minute' => '%count% минута|%count% минуты|%count% минут', + 'hour' => '%count% час|%count% часа|%count% часов', + 'day' => '%count% день|%count% дня|%count% дней', + 'week' => '%count% неделя|%count% недели|%count% недель', + 'month' => '%count% месяц|%count% месяца|%count% месяцев', + 'year' => '%count% год|%count% года|%count% лет', + 'past' => '%value% назад', + 'future' => 'через %value%', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml deleted file mode 100644 index ecbcaec..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.ru.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] сейчас" - future: "[0,Inf] сейчас" -second: - past: "%count% секунду назад|%count% секунды назад|%count% секунд назад" - future: "через %count% секунду|через %count% секунды|через %count% секунд" -minute: - past: "%count% минуту назад|%count% минуты назад|%count% минут назад" - future: "через %count% минуту|через %count% минуты|через %count% минут" -hour: - past: "%count% час назад|%count% часа назад|%count% часов назад" - future: "через %count% час|через %count% часа|через %count% часов" -day: - past: "%count% день назад|%count% дня назад|%count% дней назад" - future: "через %count% день|через %count% дня|через %count% дней" -week: - past: "%count% неделю назад|%count% недели назад|%count% недель назад" - future: "через %count% неделю|через %count% недели|через %count% недель" -month: - past: "%count% месяц назад|%count% месяца назад|%count% месяцев назад" - future: "через %count% месяц|через %count% месяца|через %count% месяцев" -year: - past: "%count% год назад|%count% года назад|%count% лет назад" - future: "через %count% год|через %count% года|через %count% лет" - -compound: - second: "%count% секунда|%count% секунды|%count% секунд" - minute: "%count% минута|%count% минуты|%count% минут" - hour: "%count% час|%count% часа|%count% часов" - day: "%count% день|%count% дня|%count% дней" - week: "%count% неделя|%count% недели|%count% недель" - month: "%count% месяц|%count% месяца|%count% месяцев" - year: "%count% год|%count% года|%count% лет" - past: "%value% назад" - future: "через %value%" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.php new file mode 100644 index 0000000..52e6cdf --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] práve teraz', + 'future' => '[0,Inf] práve teraz', + ], + 'second' => [ + 'past' => '{1} pred sekundou|[2, 4] pred %count% sekundami|[5,Inf] pred %count% sekundami', + 'future' => '{1} o sekundu|[2, 4] o %count% sekundy|[5,Inf] o %count% sekúnd', + ], + 'minute' => [ + 'past' => '{1} pred minútou|[2, Inf] pred %count% minútami', + 'future' => '{1} o minútu|[2, 4] o %count% minúty|[5,Inf] o %count% minút', + ], + 'hour' => [ + 'past' => '{1} pred hodinou|[2, Inf] pred %count% hodinami', + 'future' => '{1} o hodinu|[2, 4] o %count% hodiny|[5,Inf] o %count% hodín', + ], + 'day' => [ + 'past' => '{1} včera|[2, Inf] pred %count% dňami', + 'future' => '{1} zajtra|[2, 4] o %count% dni|[5,Inf] o %count% dní', + ], + 'week' => [ + 'past' => '{1} minulý týždeň|[2, Inf] pred %count% týždňami', + 'future' => '{1} o týždeň|[2, 4] o %count% týždne|[5,Inf] o %count% týždňov', + ], + 'month' => [ + 'past' => '{1} minulý mesiac|[2, Inf] pred %count% mesiacmi', + 'future' => '{1} o mesiac|[2, 4] o %count% mesiace|[5,Inf] o %count% mesiacov', + ], + 'year' => [ + 'past' => '{1} minulý rok|[2, Inf] pred %count% rokmi', + 'future' => '{1} za rok|[2, 4] o %count% roky|[5,Inf] o %count% rokov', + ], + 'compound' => [ + 'second' => '{1} %count% sekunda|[2,4] %count% sekundy|[5,Inf] %count% sekúnd', + 'minute' => '{1} %count% minúta|[2,4] %count% minúty|[5,Inf] %count% minút', + 'hour' => '{1} %count% hodina|[2,4] %count% hodiny|[5,Inf] %count% hodín', + 'day' => '{1} %count% deň|[2,4] %count% dni|[5,Inf] %count% dní', + 'week' => '{1} %count% týždeň|[2,4] %count% týždne|[5,Inf] %count% týždňov', + 'month' => '{1} %count% mesiac|[2,4] %count% mesiace|[5,Inf] %count% mesiacov', + 'year' => '{1} %count% rok|[2,4] %count% roky|[5,Inf] %count% rokov', + 'past' => '%value% dozadu', + 'future' => '%value% od teraz', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml deleted file mode 100644 index f9a7591..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.sk.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] práve teraz" - future: "[0,Inf] práve teraz" -second: - past: "{1} pred sekundou|[2, 4] pred %count% sekundami|[5,Inf] pred %count% sekundami" - future: "{1} o sekundu|[2, 4] o %count% sekundy|[5,Inf] o %count% sekúnd" -minute: - past: "{1} pred minútou|[2, Inf] pred %count% minútami" - future: "{1} o minútu|[2, 4] o %count% minúty|[5,Inf] o %count% minút" -hour: - past: "{1} pred hodinou|[2, Inf] pred %count% hodinami" - future: "{1} o hodinu|[2, 4] o %count% hodiny|[5,Inf] o %count% hodín" -day: - past: "{1} včera|[2, Inf] pred %count% dňami" - future: "{1} zajtra|[2, 4] o %count% dni|[5,Inf] o %count% dní" -week: - past: "{1} minulý týždeň|[2, Inf] pred %count% týždňami" - future: "{1} o týždeň|[2, 4] o %count% týždne|[5,Inf] o %count% týždňov" -month: - past: "{1} minulý mesiac|[2, Inf] pred %count% mesiacmi" - future: "{1} o mesiac|[2, 4] o %count% mesiace|[5,Inf] o %count% mesiacov" -year: - past: "{1} minulý rok|[2, Inf] pred %count% rokmi" - future: "{1} za rok|[2, 4] o %count% roky|[5,Inf] o %count% rokov" - -compound: - second: "{1} %count% sekunda|[2,4] %count% sekundy|[5,Inf] %count% sekúnd" - minute: "{1} %count% minúta|[2,4] %count% minúty|[5,Inf] %count% minút" - hour: "{1} %count% hodina|[2,4] %count% hodiny|[5,Inf] %count% hodín" - day: "{1} %count% deň|[2,4] %count% dni|[5,Inf] %count% dní" - week: "{1} %count% týždeň|[2,4] %count% týždne|[5,Inf] %count% týždňov" - month: "{1} %count% mesiac|[2,4] %count% mesiace|[5,Inf] %count% mesiacov" - year: "{1} %count% rok|[2,4] %count% roky|[5,Inf] %count% rokov" - past: "%value% dozadu" - future: "%value% od teraz" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.th.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.th.php new file mode 100644 index 0000000..25a6f81 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.th.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] เมื่อสักครู่', + 'future' => '[0,Inf] เร็วๆนี้', + ], + 'second' => [ + 'past' => '[1,Inf] %count% วินาทีที่แล้ว', + 'future' => '[1,Inf] อีก %count% วินาที', + ], + 'minute' => [ + 'past' => '[1,Inf] %count% นาทีที่แล้ว', + 'future' => '[1,Inf] อีก %count% นาที', + ], + 'hour' => [ + 'past' => '[1,Inf] %count% ชั่วโมงที่แล้ว', + 'future' => '[1,Inf] อีก %count% ชั่วโมง', + ], + 'day' => [ + 'past' => '[1,Inf] %count% วันที่แล้ว', + 'future' => '[1,Inf] อีก %count% วัน', + ], + 'week' => [ + 'past' => '[1,Inf] %count% สัปดาห์ที่แล้ว', + 'future' => '[1,Inf] อีก %count% สัปดาห์', + ], + 'month' => [ + 'past' => '[1,Inf] %count% เดือนที่แล้ว', + 'future' => '[1,Inf] อีก %count% เดือน', + ], + 'year' => [ + 'past' => '[1,Inf] %count% ปีที่แล้ว', + 'future' => '[1,Inf] อีก %count% ปี', + ], + 'compound' => [ + 'second' => '[0,Inf] %count% วินาที', + 'minute' => '[1,Inf] %count% นาที', + 'hour' => '[1,Inf] %count% ชั่วโมง', + 'day' => '[1,Inf] %count% วัน', + 'week' => '[1,Inf] %count% สัปดาห์', + 'month' => '[1,Inf] %count% เดือน', + 'year' => '[1,Inf] %count% ปี', + 'past' => '%value%ที่แล้ว', + 'future' => 'อีก %value%', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml deleted file mode 100644 index ca7da99..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.th.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] เมื่อสักครู่" - future: "[0,Inf] เร็วๆนี้" -second: - past: "[1,Inf] %count% วินาทีที่แล้ว" - future: "[1,Inf] อีก %count% วินาที" -minute: - past: "[1,Inf] %count% นาทีที่แล้ว" - future: "[1,Inf] อีก %count% นาที" -hour: - past: "[1,Inf] %count% ชั่วโมงที่แล้ว" - future: "[1,Inf] อีก %count% ชั่วโมง" -day: - past: "[1,Inf] %count% วันที่แล้ว" - future: "[1,Inf] อีก %count% วัน" -week: - past: "[1,Inf] %count% สัปดาห์ที่แล้ว" - future: "[1,Inf] อีก %count% สัปดาห์" -month: - past: "[1,Inf] %count% เดือนที่แล้ว" - future: "[1,Inf] อีก %count% เดือน" -year: - past: "[1,Inf] %count% ปีที่แล้ว" - future: "[1,Inf] อีก %count% ปี" - -compound: - second: "[0,Inf] %count% วินาที" - minute: "[1,Inf] %count% นาที" - hour: "[1,Inf] %count% ชั่วโมง" - day: "[1,Inf] %count% วัน" - week: "[1,Inf] %count% สัปดาห์" - month: "[1,Inf] %count% เดือน" - year: "[1,Inf] %count% ปี" - past: "%value%ที่แล้ว" - future: "อีก %value%" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.php new file mode 100644 index 0000000..8b58d1e --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] şimdi', + 'future' => '[0,Inf] şimdi', + ], + 'second' => [ + 'past' => '[0,1] %count% saniye önce|[2,Inf] %count% saniye önce', + 'future' => '[0,1] %count% saniye sonra|[2,Inf] %count% saniye sonra', + ], + 'minute' => [ + 'past' => '{1} %count% dakika önce|[2,Inf] %count% dakika önce', + 'future' => '{1} %count% dakika sonra|[2,Inf] %count% dakika sonra', + ], + 'hour' => [ + 'past' => '{1} %count% saat önce|[2,Inf] %count% saat önce', + 'future' => '{1} %count% saat sonra|[2,Inf] %count% saat sonra', + ], + 'day' => [ + 'past' => '{1} %count% gün önce|[2,Inf] %count% gün önce', + 'future' => '{1} %count% gün sonra|[2,Inf] %count% gün sonra', + ], + 'week' => [ + 'past' => '{1} %count% hafta önce|[2,Inf] %count% hafta önce', + 'future' => '{1} %count% hafta sonra|[2,Inf] %count% hafta sonra', + ], + 'month' => [ + 'past' => '{1} %count% ay önce|[2,Inf] %count% ay önce', + 'future' => '{1} %count% ay sonra|[2,Inf] %count% ay sonra', + ], + 'year' => [ + 'past' => '{1} %count% yıl önce|[2,Inf] %count% yıl önce', + 'future' => '{1} %count% yıl sonra|[2,Inf] %count% yıl sonra', + ], + 'compound' => [ + 'second' => '[0,1] %count% saniye|[2,Inf] %count% saniye', + 'minute' => '{1} %count% dakika|[2,Inf] %count% dakika', + 'hour' => '{1} %count% saat|[2,Inf] %count% saat', + 'day' => '{1} %count% gün|[2,Inf] %count% gün', + 'week' => '{1} %count% hafta|[2,Inf] %count% hafta', + 'month' => '{1} %count% ay|[2,Inf] %count% ay', + 'year' => '{1} %count% yıl|[2,Inf] %count% yıl', + 'past' => '%value% önce', + 'future' => '%value% sonra', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml deleted file mode 100644 index 04325cf..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.tr.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] şimdi" - future: "[0,Inf] şimdi" -second: - past: "[0,1] %count% saniye önce|[2,Inf] %count% saniye önce" - future: "[0,1] %count% saniye sonra|[2,Inf] %count% saniye sonra" -minute: - past: "{1} %count% dakika önce|[2,Inf] %count% dakika önce" - future: "{1} %count% dakika sonra|[2,Inf] %count% dakika sonra" -hour: - past: "{1} %count% saat önce|[2,Inf] %count% saat önce" - future: "{1} %count% saat sonra|[2,Inf] %count% saat sonra" -day: - past: "{1} %count% gün önce|[2,Inf] %count% gün önce" - future: "{1} %count% gün sonra|[2,Inf] %count% gün sonra" -week: - past: "{1} %count% hafta önce|[2,Inf] %count% hafta önce" - future: "{1} %count% hafta sonra|[2,Inf] %count% hafta sonra" -month: - past: "{1} %count% ay önce|[2,Inf] %count% ay önce" - future: "{1} %count% ay sonra|[2,Inf] %count% ay sonra" -year: - past: "{1} %count% yıl önce|[2,Inf] %count% yıl önce" - future: "{1} %count% yıl sonra|[2,Inf] %count% yıl sonra" - -compound: - second: "[0,1] %count% saniye|[2,Inf] %count% saniye" - minute: "{1} %count% dakika|[2,Inf] %count% dakika" - hour: "{1} %count% saat|[2,Inf] %count% saat" - day: "{1} %count% gün|[2,Inf] %count% gün" - week: "{1} %count% hafta|[2,Inf] %count% hafta" - month: "{1} %count% ay|[2,Inf] %count% ay" - year: "{1} %count% yıl|[2,Inf] %count% yıl" - past: "%value% önce" - future: "%value% sonra" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.php new file mode 100644 index 0000000..22499b5 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] зараз', + 'future' => '[0,Inf] зараз', + ], + 'second' => [ + 'past' => '%count% секунду тому|%count% секунди тому|%count% секунд тому', + 'future' => 'через %count% секунду|через %count% секунди|через %count% секунд', + ], + 'minute' => [ + 'past' => '%count% хвилину тому|%count% хвилини тому|%count% хвилин тому', + 'future' => 'через %count% хвилину|через %count% хвилини|через %count% хвилин', + ], + 'hour' => [ + 'past' => '%count% годину тому|%count% години тому|%count% годин тому', + 'future' => 'через %count% годину|через %count% години|через %count% годин', + ], + 'day' => [ + 'past' => '%count% день тому|%count% дні тому|%count% днів тому', + 'future' => 'через %count% день|через %count% дні|через %count% днів', + ], + 'week' => [ + 'past' => '%count% тиждень тому|%count% тижні тому|%count% тижнів тому', + 'future' => 'через %count% тиждень|через %count% тижні|через %count% тижнів', + ], + 'month' => [ + 'past' => '%count% місяць тому|%count% місяці тому|%count% місяців тому', + 'future' => 'через %count% місяць|через %count% місяці|через %count% місяців', + ], + 'year' => [ + 'past' => '%count% рік тому|%count% роки тому|%count% років тому', + 'future' => 'через %count% рік|через %count% роки|через %count% років', + ], + 'compound' => [ + 'second' => '%count% секунда|%count% секунди|%count% секунд', + 'minute' => '%count% хвилина|%count% хвилини|%count% хвилин', + 'hour' => '%count% година|%count% години|%count% годин', + 'day' => '%count% день|%count% дні|%count% днів', + 'week' => '%count% тиждень|%count% тижні|%count% тижнів', + 'month' => '%count% місяць|%count% місяця|%count% місяців', + 'year' => '%count% рік|%count% роки|%count% років', + 'past' => '%value% тому', + 'future' => 'через %value%', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml deleted file mode 100644 index 58b6daf..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.uk.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] зараз" - future: "[0,Inf] зараз" -second: - past: "%count% секунду тому|%count% секунди тому|%count% секунд тому" - future: "через %count% секунду|через %count% секунди|через %count% секунд" -minute: - past: "%count% хвилину тому|%count% хвилини тому|%count% хвилин тому" - future: "через %count% хвилину|через %count% хвилини|через %count% хвилин" -hour: - past: "%count% годину тому|%count% години тому|%count% годин тому" - future: "через %count% годину|через %count% години|через %count% годин" -day: - past: "%count% день тому|%count% дні тому|%count% днів тому" - future: "через %count% день|через %count% дні|через %count% днів" -week: - past: "%count% тиждень тому|%count% тижні тому|%count% тижнів тому" - future: "через %count% тиждень|через %count% тижні|через %count% тижнів" -month: - past: "%count% місяць тому|%count% місяці тому|%count% місяців тому" - future: "через %count% місяць|через %count% місяці|через %count% місяців" -year: - past: "%count% рік тому|%count% роки тому|%count% років тому" - future: "через %count% рік|через %count% роки|через %count% років" - -compound: - second: "%count% секунда|%count% секунди|%count% секунд" - minute: "%count% хвилина|%count% хвилини|%count% хвилин" - hour: "%count% година|%count% години|%count% годин" - day: "%count% день|%count% дні|%count% днів" - week: "%count% тиждень|%count% тижні|%count% тижнів" - month: "%count% місяць|%count% місяця|%count% місяців" - year: "%count% рік|%count% роки|%count% років" - past: "%value% тому" - future: "через %value%" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.php new file mode 100644 index 0000000..2833fef --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] 刚刚', + 'future' => '[0,Inf] 刚刚', + ], + 'second' => [ + 'past' => '[1,Inf] %count% 秒前', + 'future' => '[1,Inf] %count% 秒后', + ], + 'minute' => [ + 'past' => '[1,Inf] %count% 分钟前', + 'future' => '[1,Inf] %count% 分钟后', + ], + 'hour' => [ + 'past' => '[1,Inf] %count% 小时前', + 'future' => '[1,Inf] %count% 小时后', + ], + 'day' => [ + 'past' => '[1,Inf] %count% 天前', + 'future' => '[1,Inf] %count% 天后', + ], + 'week' => [ + 'past' => '[1,Inf] %count% 周前', + 'future' => '[1,Inf] %count% 周后', + ], + 'month' => [ + 'past' => '[1,Inf] %count% 个月前', + 'future' => '[1,Inf] %count% 个月后', + ], + 'year' => [ + 'past' => '[1,Inf] %count% 年前', + 'future' => '[1,Inf] %count% 年后', + ], + 'compound' => [ + 'second' => '[0,Inf] %count% 秒', + 'minute' => '[1,Inf] %count% 分钟', + 'hour' => '[1,Inf] %count% 小时', + 'day' => '[1,Inf] %count% 天', + 'week' => '[1,Inf] %count% 周', + 'month' => '[1,Inf] %count% 个月', + 'year' => '[1,Inf] %count% 年', + 'past' => '%value%前', + 'future' => '%value%后', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml deleted file mode 100644 index d0bddc5..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_CN.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] 刚刚" - future: "[0,Inf] 刚刚" -second: - past: "[1,Inf] %count% 秒前" - future: "[1,Inf] %count% 秒后" -minute: - past: "[1,Inf] %count% 分钟前" - future: "[1,Inf] %count% 分钟后" -hour: - past: "[1,Inf] %count% 小时前" - future: "[1,Inf] %count% 小时后" -day: - past: "[1,Inf] %count% 天前" - future: "[1,Inf] %count% 天后" -week: - past: "[1,Inf] %count% 周前" - future: "[1,Inf] %count% 周后" -month: - past: "[1,Inf] %count% 个月前" - future: "[1,Inf] %count% 个月后" -year: - past: "[1,Inf] %count% 年前" - future: "[1,Inf] %count% 年后" - -compound: - second: "[0,Inf] %count% 秒" - minute: "[1,Inf] %count% 分钟" - hour: "[1,Inf] %count% 小时" - day: "[1,Inf] %count% 天" - week: "[1,Inf] %count% 周" - month: "[1,Inf] %count% 个月" - year: "[1,Inf] %count% 年" - past: "%value%前" - future: "%value%后" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.php new file mode 100644 index 0000000..011ce66 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] 剛剛', + 'future' => '[0,Inf] 剛剛', + ], + 'second' => [ + 'past' => '[1,Inf] %count% 秒前', + 'future' => '[1,Inf] %count% 秒後', + ], + 'minute' => [ + 'past' => '[1,Inf] %count% 分鐘前', + 'future' => '[1,Inf] %count% 分鐘後', + ], + 'hour' => [ + 'past' => '[1,Inf] %count% 小時前', + 'future' => '[1,Inf] %count% 小時後', + ], + 'day' => [ + 'past' => '[1,Inf] %count% 天前', + 'future' => '[1,Inf] %count% 天後', + ], + 'week' => [ + 'past' => '[1,Inf] %count% 週前', + 'future' => '[1,Inf] %count% 週後', + ], + 'month' => [ + 'past' => '[1,Inf] %count% 個月前', + 'future' => '[1,Inf] %count% 個月後', + ], + 'year' => [ + 'past' => '[1,Inf] %count% 年前', + 'future' => '[1,Inf] %count% 年後', + ], + 'compound' => [ + 'second' => '[0,Inf] %count% 秒', + 'minute' => '[1,Inf] %count% 分鐘', + 'hour' => '[1,Inf] %count% 小時', + 'day' => '[1,Inf] %count% 天', + 'week' => '[1,Inf] %count% 週', + 'month' => '[1,Inf] %count% 個月', + 'year' => '[1,Inf] %count% 年', + 'past' => '%value%前', + 'future' => '%value%後', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml b/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml deleted file mode 100644 index b11a092..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/difference.zh_TW.yml +++ /dev/null @@ -1,35 +0,0 @@ -just_now: - past: "[0,Inf] 剛剛" - future: "[0,Inf] 剛剛" -second: - past: "[1,Inf] %count% 秒前" - future: "[1,Inf] %count% 秒後" -minute: - past: "[1,Inf] %count% 分鐘前" - future: "[1,Inf] %count% 分鐘後" -hour: - past: "[1,Inf] %count% 小時前" - future: "[1,Inf] %count% 小時後" -day: - past: "[1,Inf] %count% 天前" - future: "[1,Inf] %count% 天後" -week: - past: "[1,Inf] %count% 週前" - future: "[1,Inf] %count% 週後" -month: - past: "[1,Inf] %count% 個月前" - future: "[1,Inf] %count% 個月後" -year: - past: "[1,Inf] %count% 年前" - future: "[1,Inf] %count% 年後" - -compound: - second: "[0,Inf] %count% 秒" - minute: "[1,Inf] %count% 分鐘" - hour: "[1,Inf] %count% 小時" - day: "[1,Inf] %count% 天" - week: "[1,Inf] %count% 週" - month: "[1,Inf] %count% 個月" - year: "[1,Inf] %count% 年" - past: "%value%前" - future: "%value%後" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.php new file mode 100644 index 0000000..23c9f36 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.php @@ -0,0 +1,7 @@ + '%first% a %second%', + 'comma_separated' => '%list%, a %last%', + 'comma_separated_with_limit' => '[1,4] %list%, a %count% další|[5,Inf] %list%, a %count% dalších', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml deleted file mode 100644 index 2075228..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.cs.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% a %second%" -comma_separated: "%list%, a %last%" -comma_separated_with_limit: "[1,4] %list%, a %count% další|[5,Inf] %list%, a %count% dalších" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.da.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.da.php new file mode 100644 index 0000000..e5d4ce8 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.da.php @@ -0,0 +1,7 @@ + '%first% og %second%', + 'comma_separated' => '%list%, og %last%', + 'comma_separated_with_limit' => '{1} %list%, og 1 anden|[2,Inf] %list%, og %count% andre', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.da.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.da.yml deleted file mode 100644 index ecf652e..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.da.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% og %second%" -comma_separated: "%list%, og %last%" -comma_separated_with_limit: "{1} %list%, og 1 anden|[2,Inf] %list%, og %count% andre" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.en.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.en.php new file mode 100644 index 0000000..c6c07f3 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.en.php @@ -0,0 +1,7 @@ + '%first% and %second%', + 'comma_separated' => '%list%, and %last%', + 'comma_separated_with_limit' => '{1} %list%, and 1 other|[2,Inf] %list%, and %count% others', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.en.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.en.yml deleted file mode 100644 index 22eb5cf..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.en.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% and %second%" -comma_separated: "%list%, and %last%" -comma_separated_with_limit: "{1} %list%, and 1 other|[2,Inf] %list%, and %count% others" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.es.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.es.php new file mode 100644 index 0000000..618a233 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.es.php @@ -0,0 +1,7 @@ + '%first% y %second%', + 'comma_separated' => '%list%, y %last%', + 'comma_separated_with_limit' => '{1} %list%, y 1 más|[2,Inf] %list%, y %count% más', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.es.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.es.yml deleted file mode 100644 index 1335e9f..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.es.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% y %second%" -comma_separated: "%list%, y %last%" -comma_separated_with_limit: "{1} %list%, y 1 más|[2,Inf] %list%, y %count% más" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.php new file mode 100644 index 0000000..0ff0dc2 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.php @@ -0,0 +1,7 @@ + '%first% et %second%', + 'comma_separated' => '%list% et %last%', + 'comma_separated_with_limit' => '{1} %list% et 1 autre|[2,Inf] %list% et %count% autres', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.yml deleted file mode 100644 index d44e036..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.fr.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% et %second%" -comma_separated: "%list% et %last%" -comma_separated_with_limit: "{1} %list% et 1 autre|[2,Inf] %list% et %count% autres" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.id.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.id.php new file mode 100644 index 0000000..5cc8a46 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.id.php @@ -0,0 +1,7 @@ + '%first% dan %second%', + 'comma_separated' => '%list%, dan %last%', + 'comma_separated_with_limit' => '{1} %list%, dan 1 lainnya|[2,Inf] %list%, dan %count% lainnya', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.id.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.id.yml deleted file mode 100644 index 3ff1323..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.id.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% dan %second%" -comma_separated: "%list%, dan %last%" -comma_separated_with_limit: "{1} %list%, dan 1 lainnya|[2,Inf] %list%, dan %count% lainnya" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.php new file mode 100644 index 0000000..a135f18 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.php @@ -0,0 +1,7 @@ + '%first% e %second%', + 'comma_separated' => '%list% e %last%', + 'comma_separated_with_limit' => '{1} %list% ed un altro|[2,Inf] %list% e %count% altri', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml deleted file mode 100644 index 9441aad..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.it.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% e %second%" -comma_separated: "%list% e %last%" -comma_separated_with_limit: "{1} %list% ed un altro|[2,Inf] %list% e %count% altri" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.php new file mode 100644 index 0000000..d5ba791 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.php @@ -0,0 +1,7 @@ + '%first% と %second%', + 'comma_separated' => '%list% と %last%', + 'comma_separated_with_limit' => '{1} %list% ともうひとり|[2,Inf] %list% ともう %count% 人', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.yml deleted file mode 100644 index 378f91a..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ja.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% と %second%" -comma_separated: "%list% と %last%" -comma_separated_with_limit: "{1} %list% ともうひとり|[2,Inf] %list% ともう %count% 人" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.php new file mode 100644 index 0000000..22c5601 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.php @@ -0,0 +1,7 @@ + '%first% en %second%', + 'comma_separated' => '%list%, en %last%', + 'comma_separated_with_limit' => '{1} %list%, en 1 andere|[2,Inf] %list%, en %count% andere', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.yml deleted file mode 100644 index 0ba299b..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.nl.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% en %second%" -comma_separated: "%list%, en %last%" -comma_separated_with_limit: "{1} %list%, en 1 andere|[2,Inf] %list%, en %count% andere" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.php new file mode 100644 index 0000000..3f49e92 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.php @@ -0,0 +1,7 @@ + '%first% i %second%', + 'comma_separated' => '%list% i %last%', + 'comma_separated_with_limit' => '{1} %list% i 1 inny|[2,Inf] %list% i %count% innych', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.yml deleted file mode 100644 index 6a999c0..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.pl.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% i %second%" -comma_separated: "%list% i %last%" -comma_separated_with_limit: "{1} %list% i 1 inny|[2,Inf] %list% i %count% innych" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.php new file mode 100644 index 0000000..451e09c --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.php @@ -0,0 +1,7 @@ + '%first% și %second%', + 'comma_separated' => '%list% și %last%', + 'comma_separated_with_limit' => '{1} %list% și încă unul|[2,Inf] %list% și %count% alții', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml deleted file mode 100644 index e991007..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ro.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% și %second%" -comma_separated: "%list% și %last%" -comma_separated_with_limit: "{1} %list% și încă unul|[2,Inf] %list% și %count% alții" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.php new file mode 100644 index 0000000..5d688d1 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.php @@ -0,0 +1,7 @@ + '%first% и %second%', + 'comma_separated' => '%list% и %last%', + 'comma_separated_with_limit' => '{1} %list% и ещё 1|[2,Inf] %list% и ещё %count%', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.yml deleted file mode 100644 index 903c661..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.ru.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% и %second%" -comma_separated: "%list% и %last%" -comma_separated_with_limit: "{1} %list% и ещё 1|[2,Inf] %list% и ещё %count%" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.php new file mode 100644 index 0000000..915779e --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.php @@ -0,0 +1,7 @@ + '%first% a %second%', + 'comma_separated' => '%list%, a %last%', + 'comma_separated_with_limit' => '[1,4] %list%, a %count% ďalší|[5,Inf] %list%, a %count% ďalších', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml deleted file mode 100644 index d47f17b..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.sk.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% a %second%" -comma_separated: "%list%, a %last%" -comma_separated_with_limit: "[1,4] %list%, a %count% ďalší|[5,Inf] %list%, a %count% ďalších" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.th.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.th.php new file mode 100644 index 0000000..5d282c4 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.th.php @@ -0,0 +1,7 @@ + '%first% และ %second%', + 'comma_separated' => '%list% และ %last%', + 'comma_separated_with_limit' => '{1} %list% และอีก 1|[2,Inf] %list% และอีก %count%', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.th.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.th.yml deleted file mode 100644 index 02dc12e..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.th.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% และ %second%" -comma_separated: "%list% และ %last%" -comma_separated_with_limit: "{1} %list% และอีก 1|[2,Inf] %list% และอีก %count%" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.php new file mode 100644 index 0000000..77a11cb --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.php @@ -0,0 +1,7 @@ + '%first% та %second%', + 'comma_separated' => '%list% та %last%', + 'comma_separated_with_limit' => '{1} %list% і ще 1|[2,Inf] %list% і ще %count%', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.yml deleted file mode 100644 index 117fba9..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.uk.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% та %second%" -comma_separated: "%list% та %last%" -comma_separated_with_limit: "{1} %list% і ще 1|[2,Inf] %list% і ще %count%" \ No newline at end of file diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.php new file mode 100644 index 0000000..5b7d1eb --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.php @@ -0,0 +1,7 @@ + '%first% 和 %second%', + 'comma_separated' => '%list%, 和 %last%', + 'comma_separated_with_limit' => '{1} %list% 和另一个|[2,Inf] %list% 和另 %count% 个', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.yml deleted file mode 100644 index 1bf660e..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_CN.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% 和 %second%" -comma_separated: "%list%, 和 %last%" -comma_separated_with_limit: "{1} %list% 和另一个|[2,Inf] %list% 和另 %count% 个" diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.php new file mode 100644 index 0000000..633ae70 --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.php @@ -0,0 +1,7 @@ + '%first% 和 %second%', + 'comma_separated' => '%list%, 和 %last%', + 'comma_separated_with_limit' => '{1} %list% 和另一個|[2,Inf] %list% 和另 %count% 個', +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml b/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml deleted file mode 100644 index 61dc201..0000000 --- a/src/Coduo/PHPHumanizer/Resources/translations/oxford.zh_TW.yml +++ /dev/null @@ -1,3 +0,0 @@ -only_two: "%first% 和 %second%" -comma_separated: "%list%, 和 %last%" -comma_separated_with_limit: "{1} %list% 和另一個|[2,Inf] %list% 和另 %count% 個" diff --git a/src/Coduo/PHPHumanizer/Translator/Builder.php b/src/Coduo/PHPHumanizer/Translator/Builder.php index 5eb04f1..7fb7dcf 100644 --- a/src/Coduo/PHPHumanizer/Translator/Builder.php +++ b/src/Coduo/PHPHumanizer/Translator/Builder.php @@ -11,7 +11,7 @@ namespace Coduo\PHPHumanizer\Translator; -use Symfony\Component\Translation\Loader\YamlFileLoader; +use Symfony\Component\Translation\Loader\PhpFileLoader; use Symfony\Component\Translation\Translator; final class Builder @@ -25,16 +25,16 @@ public static function build(string $locale) : Translator { if (!isset(self::$translators[$locale])) { $translator = new Translator($locale); - $translator->addLoader('yml', new YamlFileLoader()); + $translator->addLoader('php', new PhpFileLoader()); $iterator = new \FilesystemIterator(__DIR__ . '/../Resources/translations'); - $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.yml$/'); + $filter = new \RegexIterator($iterator, '/[aA-zZ]+\.([a-z]{2}|[a-z]{2}\_[A-Z]{2})\.php$/'); /** @var \SplFileInfo $file */ foreach ($filter as $file) { - $resourceName = $file->getBasename('.yml'); + $resourceName = $file->getBasename('.php'); [$fileDomain, $fileLocale] = \explode('.', $resourceName); - $translator->addResource('yml', $file->getPathname(), $fileLocale, $fileDomain); + $translator->addResource('php', $file->getPathname(), $fileLocale, $fileDomain); } self::$translators[$locale] = $translator; diff --git a/tools/composer.lock b/tools/composer.lock index 7fdbcf4..1edbe03 100644 --- a/tools/composer.lock +++ b/tools/composer.lock @@ -746,16 +746,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.12.15", + "version": "1.12.16", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "c91d4e8bc056f46cf653656e6f71004b254574d1" + "reference": "e0bb5cb78545aae631220735aa706eac633a6be9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c91d4e8bc056f46cf653656e6f71004b254574d1", - "reference": "c91d4e8bc056f46cf653656e6f71004b254574d1", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e0bb5cb78545aae631220735aa706eac633a6be9", + "reference": "e0bb5cb78545aae631220735aa706eac633a6be9", "shasum": "" }, "require": { @@ -800,7 +800,7 @@ "type": "github" } ], - "time": "2025-01-05T16:40:22+00:00" + "time": "2025-01-21T14:50:05+00:00" }, { "name": "phpunit/php-code-coverage", From a88623964a2f8bdd801a8fa5b7a6e7c56d32d50e Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Sat, 25 Jan 2025 02:32:49 +0000 Subject: [PATCH 175/193] Updated CHANGELOG.md --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index acc422e..cad8604 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2025-01-20 +## [Unreleased] - 2025-01-25 ### Fixed - [76e7b6](https://github.com/coduo/php-humanizer/commit/76e7b6a7bec97e095b14e7dbfb7aa19ae1cb7fc9) - **failing tests** - [@norberttech](https://github.com/norberttech) @@ -6,6 +6,9 @@ ### Updated - [fb621f](https://github.com/coduo/php-humanizer/commit/fb621fda3e73428af8bba55f697c51daf002580b) - **project to PHP 8.4** - [@norberttech](https://github.com/norberttech) +### Removed +- [#136](https://github.com/coduo/php-humanizer/pull/136) - **symfony/yaml dependency** - [@norberttech](https://github.com/norberttech) + ## [5.0.0] - 2024-04-11 ### Added From 8c5c8c4d9d4e1bd68322b5ddc65e0afe8f3f4658 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Sat, 25 Jan 2025 02:35:17 +0000 Subject: [PATCH 176/193] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cad8604..94398e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2025-01-25 +## [5.0.1] - 2025-01-25 ### Fixed - [76e7b6](https://github.com/coduo/php-humanizer/commit/76e7b6a7bec97e095b14e7dbfb7aa19ae1cb7fc9) - **failing tests** - [@norberttech](https://github.com/norberttech) From 3b9f3cfdd1db5b3fd83bb4577e514798eb219c80 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 26 Jan 2025 21:37:31 -0600 Subject: [PATCH 177/193] Bump aeon-php/calendar from 1.0.9 to 1.0.11 (#137) Bumps [aeon-php/calendar](https://github.com/aeon-php/calendar) from 1.0.9 to 1.0.11. - [Release notes](https://github.com/aeon-php/calendar/releases) - [Commits](https://github.com/aeon-php/calendar/compare/1.0.9...1.0.11) --- updated-dependencies: - dependency-name: aeon-php/calendar dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/composer.lock b/composer.lock index 85fbb82..0fa54d2 100644 --- a/composer.lock +++ b/composer.lock @@ -330,20 +330,20 @@ "packages-dev": [ { "name": "aeon-php/calendar", - "version": "1.0.9", + "version": "1.0.11", "source": { "type": "git", "url": "https://github.com/aeon-php/calendar.git", - "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de" + "reference": "41f4b0ff07247c36b232ddfbcddc62af738be6fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aeon-php/calendar/zipball/2cfc45a2cd28b78f1450d8155a1c62df2efe45de", - "reference": "2cfc45a2cd28b78f1450d8155a1c62df2efe45de", + "url": "https://api.github.com/repos/aeon-php/calendar/zipball/41f4b0ff07247c36b232ddfbcddc62af738be6fe", + "reference": "41f4b0ff07247c36b232ddfbcddc62af738be6fe", "shasum": "" }, "require": { - "php": "~8.1.10 || ~8.2" + "php": "~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { "ext-bcmath": "*", @@ -374,9 +374,19 @@ ], "support": { "issues": "https://github.com/aeon-php/calendar/issues", - "source": "https://github.com/aeon-php/calendar/tree/1.0.9" + "source": "https://github.com/aeon-php/calendar/tree/1.0.11" }, - "time": "2023-08-29T09:47:37+00:00" + "funding": [ + { + "url": "https://flow-php.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/norberttech", + "type": "github" + } + ], + "time": "2025-01-24T04:47:09+00:00" }, { "name": "thunderer/shortcode", @@ -437,12 +447,12 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": {}, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { "php": "~8.2 || ~8.3 || ~8.4" }, - "platform-dev": {}, - "plugin-api-version": "2.6.0" + "platform-dev": [], + "plugin-api-version": "2.3.0" } From 04d0eef24d0d46bdea6a13b3d1dbd3a8a178fdad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9as=20Lundgren?= <1066486+adevade@users.noreply.github.com> Date: Thu, 6 Feb 2025 16:50:59 +0100 Subject: [PATCH 178/193] Add Swedish translations (#138) --- .../Resources/translations/difference.sv.php | 47 +++++++++++++++++++ .../Resources/translations/oxford.sv.php | 7 +++ .../Tests/DateTimeHumanizerTest.php | 44 +++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/difference.sv.php create mode 100644 src/Coduo/PHPHumanizer/Resources/translations/oxford.sv.php diff --git a/src/Coduo/PHPHumanizer/Resources/translations/difference.sv.php b/src/Coduo/PHPHumanizer/Resources/translations/difference.sv.php new file mode 100644 index 0000000..9945a5b --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/difference.sv.php @@ -0,0 +1,47 @@ + [ + 'past' => '[0,Inf] nyss', + 'future' => '[0,Inf] nyss', + ], + 'second' => [ + 'past' => '{0} för 0 sekunder sedan|{1} för 1 sekund sedan|[2,Inf] för %count% sekunder sedan', + 'future' => '{0} om 0 sekunder|{1} om 1 sekund|[2,Inf] om %count% sekunder', + ], + 'minute' => [ + 'past' => '{0} för 0 minuter sedan|{1} för 1 minut sedan|[2,Inf] för %count% minuter sedan', + 'future' => '{0} om 0 minuter|{1} om 1 minut|[2,Inf] om %count% minuter', + ], + 'hour' => [ + 'past' => '{0} för 0 timmar sedan|{1} för 1 timme sedan|[2,Inf] för %count% timmar sedan', + 'future' => '{0} om 0 timmar|{1} om 1 timme|[2,Inf] om %count% timmar', + ], + 'day' => [ + 'past' => '{0} för 0 dagar sedan|{1} för 1 dag sedan|[2,Inf] för %count% dagar sedan', + 'future' => '{0} om 0 dagar|{1} om 1 dag|[2,Inf] om %count% dagar', + ], + 'week' => [ + 'past' => '{0} för 0 veckor sedan|{1} för 1 vecka sedan|[2,Inf] för %count% veckor sedan', + 'future' => '{0} om 0 veckor|{1} om 1 vecka|[2,Inf] om %count% veckor', + ], + 'month' => [ + 'past' => '{0} för 0 månader sedan|{1} för 1 månad sedan|[2,Inf] för %count% månader sedan', + 'future' => '{0} om 0 månader|{1} om 1 månad|[2,Inf] om %count% månader', + ], + 'year' => [ + 'past' => '[0,Inf] för %count% år sedan', + 'future' => '[0,Inf] om %count% år', + ], + 'compound' => [ + 'second' => '{0} 0 sekunder|{1} 1 sekund|[2,Inf] %count% sekunder', + 'minute' => '{0} 0 minuter|{1} 1 minut|[2,Inf] %count% minuter', + 'hour' => '{0} 0 timmar|{1} 1 timme|[2,Inf] %count% timmar', + 'day' => '{0} 0 dagar|{1} 1 dag|[2,Inf] %count% dagar', + 'week' => '{0} 0 veckor|{1} 1 vecka|[2,Inf] %count% veckor', + 'month' => '{0} 0 månader|{1} 1 månad|[2,Inf] %count% månader', + 'year' => '[0,Inf] %count% år', + 'past' => 'för %value% sedan', + 'future' => 'om %value%', + ], +]; diff --git a/src/Coduo/PHPHumanizer/Resources/translations/oxford.sv.php b/src/Coduo/PHPHumanizer/Resources/translations/oxford.sv.php new file mode 100644 index 0000000..5df6ada --- /dev/null +++ b/src/Coduo/PHPHumanizer/Resources/translations/oxford.sv.php @@ -0,0 +1,7 @@ + '%first% och %second%', + 'comma_separated' => '%list%, och %last%', + 'comma_separated_with_limit' => '[1,Inf] %list%, och %count% till', +]; diff --git a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php index 600f06a..72ca15f 100644 --- a/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php +++ b/tests/Coduo/PHPHumanizer/Tests/DateTimeHumanizerTest.php @@ -236,6 +236,25 @@ public static function humanizeDataProvider() : array ['2014-05-01', '2014-04-01', '1 ヶ月前', 'ja'], ['2015-05-01', '2014-04-01', '1 年前', 'ja'], ['2014-05-01', '2016-04-01', '2 年後', 'ja'], + + // Swedish + ['2014-04-26 13:00:00', '2014-04-26 13:00:00', 'nyss', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 13:00:05', 'om 5 sekunder', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 12:59:00', 'för 1 minut sedan', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 12:45:00', 'för 15 minuter sedan', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 13:15:00', 'om 15 minuter', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 14:00:00', 'om 1 timme', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 15:00:00', 'om 2 timmar', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 12:00:00', 'för 1 timme sedan', 'sv'], + ['2014-04-26', '2014-04-25', 'för 1 dag sedan', 'sv'], + ['2014-04-26', '2014-04-24', 'för 2 dagar sedan', 'sv'], + ['2014-04-26', '2014-04-28', 'om 2 dagar', 'sv'], + ['2014-04-01', '2014-04-15', 'om 2 veckor', 'sv'], + ['2014-04-15', '2014-04-07', 'för 1 vecka sedan', 'sv'], + ['2014-01-01', '2014-04-01', 'om 3 månader', 'sv'], + ['2014-05-01', '2014-04-01', 'för 1 månad sedan', 'sv'], + ['2015-05-01', '2014-04-01', 'för 1 år sedan', 'sv'], + ['2014-05-01', '2016-04-01', 'om 2 år', 'sv'], ]; } @@ -431,6 +450,16 @@ public static function preciseDifferenceDataProvider() : array ['2014-04-26 13:00:00', '2014-04-28 23:00:00', '2 日, 10 時間後', 'ja'], ['2014-04-26 13:00:00', '2014-04-25 11:20:00', '1 日, 1 時間, 40 分前', 'ja'], ['2014-04-26 13:00:00', '2016-04-27 13:00:00', '2 年, 1 日後', 'ja'], + + // Swedish + ['2014-04-26 13:00:00', '2014-04-26 12:58:15', 'för 1 minut, 45 sekunder sedan', 'sv'], + ['2014-04-26 13:00:00', '2014-04-26 11:20:00', 'för 1 timme, 40 minuter sedan', 'sv'], + ['2014-04-26 13:00:00', '2014-04-27 13:15:00', 'om 1 dag, 15 minuter', 'sv'], + ['2014-04-26 13:00:00', '2014-05-03 15:00:00', 'om 7 dagar, 2 timmar', 'sv'], + ['2014-04-26 13:00:00', '2015-04-28 17:00:00', 'om 1 år, 2 dagar, 4 timmar', 'sv'], + ['2014-04-26 13:00:00', '2014-04-28 23:00:00', 'om 2 dagar, 10 timmar', 'sv'], + ['2014-04-26 13:00:00', '2014-04-25 11:20:00', 'för 1 dag, 1 timme, 40 minuter sedan', 'sv'], + ['2014-04-26 13:00:00', '2016-04-27 13:00:00', 'om 2 år, 1 dag', 'sv'], ]; } @@ -466,6 +495,21 @@ public static function timeUnitDataProvider() : array 'pl', ], [RelativeTimeUnit::months(14), '1 rok i 2 miesiące', 'pl'], + + // Swedish + [TimeUnit::seconds(20), '20 sekunder', 'sv'], + [TimeUnit::minutes(20), '20 minuter', 'sv'], + [TimeUnit::minutes(20)->add(TimeUnit::seconds(5)), '20 minuter och 5 sekunder', 'sv'], + [ + TimeUnit::days(2) + ->add(TimeUnit::hours(3)) + ->add(TimeUnit::minutes(25)) + ->add(TimeUnit::seconds(30)) + ->add(TimeUnit::milliseconds(200)), + '2 dagar, 3 timmar, 25 minuter, och 30.2 sekunder', + 'sv', + ], + [RelativeTimeUnit::months(14), '1 år och 2 månader', 'sv'], ]; } From 8873082ace4660527641d6306513315e45087270 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 6 Feb 2025 15:51:17 +0000 Subject: [PATCH 179/193] Updated CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94398e9..77a15a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [Unreleased] - 2025-02-06 + +### Added +- [#138](https://github.com/coduo/php-humanizer/pull/138) - **Add Swedish translations** - [@adevade](https://github.com/adevade) + ## [5.0.1] - 2025-01-25 ### Fixed @@ -341,6 +346,7 @@ - @4t87ux8 - @a-ungurianu +- @adevade - @arrowrowe - @Borales - @brianwozeniak From 8c20bccb84a0dd54d007135036eb0aac82f1f8b6 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 6 Feb 2025 16:18:01 +0000 Subject: [PATCH 180/193] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 77a15a5..97a4fa8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2025-02-06 +## [5.0.2] - 2025-02-06 ### Added - [#138](https://github.com/coduo/php-humanizer/pull/138) - **Add Swedish translations** - [@adevade](https://github.com/adevade) From f9020c281ff2767d02b140ef1762ebd5b767e27b Mon Sep 17 00:00:00 2001 From: Watheq Alshowaiter Date: Wed, 19 Feb 2025 12:32:41 +0300 Subject: [PATCH 181/193] Update README.md (#139) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 55c25a5..effd462 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ composer require coduo/php-humanizer use Coduo\PHPHumanizer\StringHumanizer; StringHumanizer::humanize('field_name'); // "Field Name" -StringHumanizer::humanize('user_id'); // "User" +StringHumanizer::humanize('user_id'); // "User id" StringHumanizer::humanize('field_name', false); // "field name" ``` From 90ff108897b951fd4db4dc3c9b387e8c93cef7db Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Wed, 19 Feb 2025 09:33:03 +0000 Subject: [PATCH 182/193] Updated CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97a4fa8..cc9ab9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [Unreleased] - 2025-02-19 + +### Fixed +- [#139](https://github.com/coduo/php-humanizer/pull/139) - **Readme typo** - [@WatheqAlshowaiter](https://github.com/WatheqAlshowaiter) + ## [5.0.2] - 2025-02-06 ### Added @@ -392,5 +397,6 @@ - @thunderer - @vinicius73 - @vinkla +- @WatheqAlshowaiter Generated by [Automation](https://github.com/aeon-php/automation) \ No newline at end of file From a57436fe67225e35dab6741b1451d46964afe383 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 12:18:06 +0100 Subject: [PATCH 183/193] Bump symfony/translation from 7.2.2 to 7.2.4 (#140) Bumps [symfony/translation](https://github.com/symfony/translation) from 7.2.2 to 7.2.4. - [Release notes](https://github.com/symfony/translation/releases) - [Changelog](https://github.com/symfony/translation/blob/7.2/CHANGELOG.md) - [Commits](https://github.com/symfony/translation/compare/v7.2.2...v7.2.4) --- updated-dependencies: - dependency-name: symfony/translation dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.lock b/composer.lock index 0fa54d2..5d44bf5 100644 --- a/composer.lock +++ b/composer.lock @@ -155,16 +155,16 @@ }, { "name": "symfony/translation", - "version": "v7.2.2", + "version": "v7.2.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "e2674a30132b7cc4d74540d6c2573aa363f05923" + "reference": "283856e6981286cc0d800b53bd5703e8e363f05a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/e2674a30132b7cc4d74540d6c2573aa363f05923", - "reference": "e2674a30132b7cc4d74540d6c2573aa363f05923", + "url": "https://api.github.com/repos/symfony/translation/zipball/283856e6981286cc0d800b53bd5703e8e363f05a", + "reference": "283856e6981286cc0d800b53bd5703e8e363f05a", "shasum": "" }, "require": { @@ -230,7 +230,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v7.2.2" + "source": "https://github.com/symfony/translation/tree/v7.2.4" }, "funding": [ { @@ -246,7 +246,7 @@ "type": "tidelift" } ], - "time": "2024-12-07T08:18:10+00:00" + "time": "2025-02-13T10:27:23+00:00" }, { "name": "symfony/translation-contracts", From d48e7187233dc27875307f192b699f12cea73011 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz <1921950+norberttech@users.noreply.github.com> Date: Wed, 5 Mar 2025 09:28:02 +0100 Subject: [PATCH 184/193] Update action cache from @v2 to @v4 in Github Action workflows (#141)

Change Log

Added

Fixed

Changed

  • Update action cache from @v2 to @v4 in Github Action workflows

Removed

Deprecated

Security


Description

--- For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/coduo/php-humanizer?shareId=XXXX-XXXX-XXXX-XXXX). --- .github/workflows/changelog-update.yml | 2 +- .github/workflows/static-analyze.yml | 2 +- .github/workflows/tests.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/changelog-update.yml b/.github/workflows/changelog-update.yml index 603fb4b..f00f848 100644 --- a/.github/workflows/changelog-update.yml +++ b/.github/workflows/changelog-update.yml @@ -20,7 +20,7 @@ jobs: uses: "actions/checkout@v2" - name: "Restore Automation cache" - uses: "actions/cache@v2" + uses: "actions/cache@v4" with: path: | cache diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml index c7f27f0..7970e56 100644 --- a/.github/workflows/static-analyze.yml +++ b/.github/workflows/static-analyze.yml @@ -41,7 +41,7 @@ jobs: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: "Cache Composer dependencies" - uses: "actions/cache@v2" + uses: "actions/cache@v4" with: path: | ${{ steps.composer-cache.outputs.dir }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 02651fc..40e9975 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -45,7 +45,7 @@ jobs: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: "Cache Composer dependencies" - uses: "actions/cache@v2" + uses: "actions/cache@v4" with: path: | ${{ steps.composer-cache.outputs.dir }} From b7d798315b5e07d0bc33d847b16e267178e3ad62 Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Wed, 5 Mar 2025 08:28:15 +0000 Subject: [PATCH 185/193] Updated CHANGELOG.md --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc9ab9b..4d299bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ -## [Unreleased] - 2025-02-19 +## [Unreleased] - 2025-03-05 + +### Changed +- [#141](https://github.com/coduo/php-humanizer/pull/141) - **Update action cache from @v2 to @v4 in Github Action workflows** - [@norberttech](https://github.com/norberttech) ### Fixed - [#139](https://github.com/coduo/php-humanizer/pull/139) - **Readme typo** - [@WatheqAlshowaiter](https://github.com/WatheqAlshowaiter) From d9b22dca2344d06b89ee30313a3e898fa1a12b6c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 May 2025 11:35:47 +0200 Subject: [PATCH 186/193] Bump symfony/translation from 7.2.4 to 7.2.6 (#142) Bumps [symfony/translation](https://github.com/symfony/translation) from 7.2.4 to 7.2.6. - [Release notes](https://github.com/symfony/translation/releases) - [Changelog](https://github.com/symfony/translation/blob/7.2/CHANGELOG.md) - [Commits](https://github.com/symfony/translation/compare/v7.2.4...v7.2.6) --- updated-dependencies: - dependency-name: symfony/translation dependency-version: 7.2.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/composer.lock b/composer.lock index 5d44bf5..a05e0dd 100644 --- a/composer.lock +++ b/composer.lock @@ -75,19 +75,20 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.31.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { + "ext-iconv": "*", "php": ">=7.2" }, "provide": { @@ -135,7 +136,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" }, "funding": [ { @@ -151,20 +152,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { "name": "symfony/translation", - "version": "v7.2.4", + "version": "v7.2.6", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "283856e6981286cc0d800b53bd5703e8e363f05a" + "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/283856e6981286cc0d800b53bd5703e8e363f05a", - "reference": "283856e6981286cc0d800b53bd5703e8e363f05a", + "url": "https://api.github.com/repos/symfony/translation/zipball/e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", + "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", "shasum": "" }, "require": { @@ -230,7 +231,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v7.2.4" + "source": "https://github.com/symfony/translation/tree/v7.2.6" }, "funding": [ { @@ -246,7 +247,7 @@ "type": "tidelift" } ], - "time": "2025-02-13T10:27:23+00:00" + "time": "2025-04-07T19:09:28+00:00" }, { "name": "symfony/translation-contracts", From cf2dfe03f62480221f103101c1c697a409577012 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 09:30:09 +0200 Subject: [PATCH 187/193] Bump symfony/translation from 7.2.6 to 7.3.0 (#143) Bumps [symfony/translation](https://github.com/symfony/translation) from 7.2.6 to 7.3.0. - [Release notes](https://github.com/symfony/translation/releases) - [Changelog](https://github.com/symfony/translation/blob/7.3/CHANGELOG.md) - [Commits](https://github.com/symfony/translation/compare/v7.2.6...v7.3.0) --- updated-dependencies: - dependency-name: symfony/translation dependency-version: 7.3.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/composer.lock b/composer.lock index a05e0dd..9744cf0 100644 --- a/composer.lock +++ b/composer.lock @@ -8,16 +8,16 @@ "packages": [ { "name": "symfony/deprecation-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { @@ -30,7 +30,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -55,7 +55,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -71,7 +71,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -156,16 +156,16 @@ }, { "name": "symfony/translation", - "version": "v7.2.6", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6" + "reference": "4aba29076a29a3aa667e09b791e5f868973a8667" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", - "reference": "e7fd8e2a4239b79a0fd9fb1fef3e0e7f969c6dc6", + "url": "https://api.github.com/repos/symfony/translation/zipball/4aba29076a29a3aa667e09b791e5f868973a8667", + "reference": "4aba29076a29a3aa667e09b791e5f868973a8667", "shasum": "" }, "require": { @@ -175,6 +175,7 @@ "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { + "nikic/php-parser": "<5.0", "symfony/config": "<6.4", "symfony/console": "<6.4", "symfony/dependency-injection": "<6.4", @@ -188,7 +189,7 @@ "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.18|^5.0", + "nikic/php-parser": "^5.0", "psr/log": "^1|^2|^3", "symfony/config": "^6.4|^7.0", "symfony/console": "^6.4|^7.0", @@ -231,7 +232,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v7.2.6" + "source": "https://github.com/symfony/translation/tree/v7.3.0" }, "funding": [ { @@ -247,20 +248,20 @@ "type": "tidelift" } ], - "time": "2025-04-07T19:09:28+00:00" + "time": "2025-05-29T07:19:49+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", "shasum": "" }, "require": { @@ -273,7 +274,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -309,7 +310,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" }, "funding": [ { @@ -325,7 +326,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-27T08:32:26+00:00" } ], "packages-dev": [ From fe04bf1e5ecb5b401d34867dc2261a5f78096242 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Sep 2025 08:51:51 +0200 Subject: [PATCH 188/193] Bump symfony/translation from 7.3.0 to 7.3.3 (#146) Bumps [symfony/translation](https://github.com/symfony/translation) from 7.3.0 to 7.3.3. - [Release notes](https://github.com/symfony/translation/releases) - [Changelog](https://github.com/symfony/translation/blob/7.3/CHANGELOG.md) - [Commits](https://github.com/symfony/translation/compare/v7.3.0...v7.3.3) --- updated-dependencies: - dependency-name: symfony/translation dependency-version: 7.3.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/composer.lock b/composer.lock index 9744cf0..9e557c1 100644 --- a/composer.lock +++ b/composer.lock @@ -75,7 +75,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -136,7 +136,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -147,6 +147,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -156,16 +160,16 @@ }, { "name": "symfony/translation", - "version": "v7.3.0", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "4aba29076a29a3aa667e09b791e5f868973a8667" + "reference": "e0837b4cbcef63c754d89a4806575cada743a38d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/4aba29076a29a3aa667e09b791e5f868973a8667", - "reference": "4aba29076a29a3aa667e09b791e5f868973a8667", + "url": "https://api.github.com/repos/symfony/translation/zipball/e0837b4cbcef63c754d89a4806575cada743a38d", + "reference": "e0837b4cbcef63c754d89a4806575cada743a38d", "shasum": "" }, "require": { @@ -232,7 +236,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v7.3.0" + "source": "https://github.com/symfony/translation/tree/v7.3.3" }, "funding": [ { @@ -243,12 +247,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-05-29T07:19:49+00:00" + "time": "2025-08-01T21:02:37+00:00" }, { "name": "symfony/translation-contracts", @@ -449,12 +457,12 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { "php": "~8.2 || ~8.3 || ~8.4" }, - "platform-dev": [], - "plugin-api-version": "2.3.0" + "platform-dev": {}, + "plugin-api-version": "2.6.0" } From 9e530aaa20f994e787001ed2821efd95cf01b765 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 11:28:30 +0200 Subject: [PATCH 189/193] Bump symfony/translation from 7.3.3 to 7.3.4 (#147) Bumps [symfony/translation](https://github.com/symfony/translation) from 7.3.3 to 7.3.4. - [Release notes](https://github.com/symfony/translation/releases) - [Changelog](https://github.com/symfony/translation/blob/7.3/CHANGELOG.md) - [Commits](https://github.com/symfony/translation/compare/v7.3.3...v7.3.4) --- updated-dependencies: - dependency-name: symfony/translation dependency-version: 7.3.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.lock b/composer.lock index 9e557c1..486fedd 100644 --- a/composer.lock +++ b/composer.lock @@ -160,16 +160,16 @@ }, { "name": "symfony/translation", - "version": "v7.3.3", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "e0837b4cbcef63c754d89a4806575cada743a38d" + "reference": "ec25870502d0c7072d086e8ffba1420c85965174" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/e0837b4cbcef63c754d89a4806575cada743a38d", - "reference": "e0837b4cbcef63c754d89a4806575cada743a38d", + "url": "https://api.github.com/repos/symfony/translation/zipball/ec25870502d0c7072d086e8ffba1420c85965174", + "reference": "ec25870502d0c7072d086e8ffba1420c85965174", "shasum": "" }, "require": { @@ -236,7 +236,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/translation/tree/v7.3.3" + "source": "https://github.com/symfony/translation/tree/v7.3.4" }, "funding": [ { @@ -256,7 +256,7 @@ "type": "tidelift" } ], - "time": "2025-08-01T21:02:37+00:00" + "time": "2025-09-07T11:39:36+00:00" }, { "name": "symfony/translation-contracts", From 17f435fb83b2d8d67424e7b6c39273eefeb63ddd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Dec 2025 11:00:54 +0100 Subject: [PATCH 190/193] Bump aeon-php/calendar from 1.0.11 to 1.0.12 (#148) Bumps [aeon-php/calendar](https://github.com/aeon-php/calendar) from 1.0.11 to 1.0.12. - [Release notes](https://github.com/aeon-php/calendar/releases) - [Commits](https://github.com/aeon-php/calendar/compare/1.0.11...1.0.12) --- updated-dependencies: - dependency-name: aeon-php/calendar dependency-version: 1.0.12 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- composer.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/composer.lock b/composer.lock index 486fedd..441678f 100644 --- a/composer.lock +++ b/composer.lock @@ -340,20 +340,20 @@ "packages-dev": [ { "name": "aeon-php/calendar", - "version": "1.0.11", + "version": "1.0.12", "source": { "type": "git", "url": "https://github.com/aeon-php/calendar.git", - "reference": "41f4b0ff07247c36b232ddfbcddc62af738be6fe" + "reference": "10387ea0944ce9ce071a12d60c398ee852de70b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aeon-php/calendar/zipball/41f4b0ff07247c36b232ddfbcddc62af738be6fe", - "reference": "41f4b0ff07247c36b232ddfbcddc62af738be6fe", + "url": "https://api.github.com/repos/aeon-php/calendar/zipball/10387ea0944ce9ce071a12d60c398ee852de70b8", + "reference": "10387ea0944ce9ce071a12d60c398ee852de70b8", "shasum": "" }, "require": { - "php": "~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { "ext-bcmath": "*", @@ -384,7 +384,7 @@ ], "support": { "issues": "https://github.com/aeon-php/calendar/issues", - "source": "https://github.com/aeon-php/calendar/tree/1.0.11" + "source": "https://github.com/aeon-php/calendar/tree/1.0.12" }, "funding": [ { @@ -396,7 +396,7 @@ "type": "github" } ], - "time": "2025-01-24T04:47:09+00:00" + "time": "2025-12-08T14:44:05+00:00" }, { "name": "thunderer/shortcode", From 3a8c407841987a279e4730e57237b037ba5f190f Mon Sep 17 00:00:00 2001 From: Beno!t POLASZEK Date: Thu, 11 Dec 2025 21:13:32 +0100 Subject: [PATCH 191/193] feat: PHP8.5 + SF 8+ support (#149) * feat: PHP8.5 + SF 8+ support * chore: drop PHP 8.2 support --------- Co-authored-by: Benoit POLASZEK <=> --- .github/workflows/static-analyze.yml | 2 +- .github/workflows/tests.yml | 2 +- .gitignore | 3 +- composer.json | 4 +- composer.lock | 468 ----------- .../PHPHumanizer/Collection/Formatter.php | 2 +- src/Coduo/PHPHumanizer/Collection/Oxford.php | 2 +- .../PHPHumanizer/CollectionHumanizer.php | 2 +- .../PHPHumanizer/String/BinarySuffix.php | 2 +- tools/composer.lock | 726 +++++++++++------- 10 files changed, 458 insertions(+), 755 deletions(-) delete mode 100644 composer.lock diff --git a/.github/workflows/static-analyze.yml b/.github/workflows/static-analyze.yml index 7970e56..f637e81 100644 --- a/.github/workflows/static-analyze.yml +++ b/.github/workflows/static-analyze.yml @@ -19,7 +19,7 @@ jobs: dependencies: - "locked" php-version: - - "8.2" + - "8.3" operating-system: - "ubuntu-latest" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 40e9975..9a8e097 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -21,9 +21,9 @@ jobs: - "lowest" - "highest" php-version: - - "8.2" - "8.3" - "8.4" + - "8.5" operating-system: - "ubuntu-latest" diff --git a/.gitignore b/.gitignore index a69f258..c2ab8cd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ vendor/ bin/ -var/ \ No newline at end of file +var/ +composer.lock diff --git a/composer.json b/composer.json index 09a84f6..ad191e7 100644 --- a/composer.json +++ b/composer.json @@ -15,8 +15,8 @@ } ], "require": { - "php": "~8.2 || ~8.3 || ~8.4", - "symfony/translation": "~5.4||~6.4||~7" + "php": "~8.3 || ~8.4 || ~8.5", + "symfony/translation": "~5.4 || ~6.4 || ~7 || ~8" }, "require-dev": { "thunderer/shortcode": "^0.7", diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 441678f..0000000 --- a/composer.lock +++ /dev/null @@ -1,468 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "228b5a151bff2e843fe879dea870439c", - "packages": [ - { - "name": "symfony/deprecation-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com/", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-25T14:21:43+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.33.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", - "shasum": "" - }, - "require": { - "ext-iconv": "*", - "php": ">=7.2" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com/", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-12-23T08:48:59+00:00" - }, - { - "name": "symfony/translation", - "version": "v7.3.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "ec25870502d0c7072d086e8ffba1420c85965174" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/ec25870502d0c7072d086e8ffba1420c85965174", - "reference": "ec25870502d0c7072d086e8ffba1420c85965174", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" - }, - "conflict": { - "nikic/php-parser": "<5.0", - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4", - "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<6.4", - "symfony/yaml": "<6.4" - }, - "provide": { - "symfony/translation-implementation": "2.3|3.0" - }, - "require-dev": { - "nikic/php-parser": "^5.0", - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com/", - "support": { - "source": "https://github.com/symfony/translation/tree/v7.3.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-09-07T11:39:36+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v3.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com/", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-27T08:32:26+00:00" - } - ], - "packages-dev": [ - { - "name": "aeon-php/calendar", - "version": "1.0.12", - "source": { - "type": "git", - "url": "https://github.com/aeon-php/calendar.git", - "reference": "10387ea0944ce9ce071a12d60c398ee852de70b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aeon-php/calendar/zipball/10387ea0944ce9ce071a12d60c398ee852de70b8", - "reference": "10387ea0944ce9ce071a12d60c398ee852de70b8", - "shasum": "" - }, - "require": { - "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" - }, - "require-dev": { - "ext-bcmath": "*", - "ext-pcov": "*" - }, - "suggest": { - "ext-bcmath": "Compare time units with high precision" - }, - "type": "library", - "autoload": { - "psr-4": { - "Aeon\\": [ - "src/Aeon" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHP type safe, immutable calendar library", - "keywords": [ - "calendar", - "date", - "datetime", - "immutable", - "time" - ], - "support": { - "issues": "https://github.com/aeon-php/calendar/issues", - "source": "https://github.com/aeon-php/calendar/tree/1.0.12" - }, - "funding": [ - { - "url": "https://flow-php.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/norberttech", - "type": "github" - } - ], - "time": "2025-12-08T14:44:05+00:00" - }, - { - "name": "thunderer/shortcode", - "version": "v0.7.6", - "source": { - "type": "git", - "url": "https://github.com/thunderer/Shortcode.git", - "reference": "9f81424b4909007483d93c5defc0917d8a58debd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thunderer/Shortcode/zipball/9f81424b4909007483d93c5defc0917d8a58debd", - "reference": "9f81424b4909007483d93c5defc0917d8a58debd", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": ">=4.1", - "symfony/yaml": ">=2.0" - }, - "suggest": { - "ext-dom": "if you want to use XML serializer", - "ext-json": "if you want to use JSON serializer", - "symfony/yaml": "if you want to use YAML serializer" - }, - "type": "library", - "autoload": { - "psr-4": { - "Thunder\\Shortcode\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tomasz Kowalczyk", - "email": "tomasz@kowalczyk.cc" - } - ], - "description": "Advanced shortcode (BBCode) parser and engine for PHP", - "keywords": [ - "bbcode", - "engine", - "library", - "parser", - "shortcode" - ], - "support": { - "issues": "https://github.com/thunderer/Shortcode/issues", - "source": "https://github.com/thunderer/Shortcode/tree/v0.7.6" - }, - "time": "2024-12-15T21:57:40+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": {}, - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": "~8.2 || ~8.3 || ~8.4" - }, - "platform-dev": {}, - "plugin-api-version": "2.6.0" -} diff --git a/src/Coduo/PHPHumanizer/Collection/Formatter.php b/src/Coduo/PHPHumanizer/Collection/Formatter.php index 79d8eac..57c62e8 100644 --- a/src/Coduo/PHPHumanizer/Collection/Formatter.php +++ b/src/Coduo/PHPHumanizer/Collection/Formatter.php @@ -30,7 +30,7 @@ public function __construct(TranslatorInterface $translator, string $catalogue = * * @param array $collection */ - public function format(array $collection, int $limit = null) : string + public function format(array $collection, ?int $limit = null) : string { $count = \count($collection); diff --git a/src/Coduo/PHPHumanizer/Collection/Oxford.php b/src/Coduo/PHPHumanizer/Collection/Oxford.php index 2ec61ef..932a297 100644 --- a/src/Coduo/PHPHumanizer/Collection/Oxford.php +++ b/src/Coduo/PHPHumanizer/Collection/Oxford.php @@ -23,7 +23,7 @@ public function __construct(Formatter $formatter) /** * @param array $collection */ - public function format(array $collection, int $limit = null) : string + public function format(array $collection, ?int $limit = null) : string { return $this->formatter->format($collection, $limit); } diff --git a/src/Coduo/PHPHumanizer/CollectionHumanizer.php b/src/Coduo/PHPHumanizer/CollectionHumanizer.php index dc83f80..7077348 100644 --- a/src/Coduo/PHPHumanizer/CollectionHumanizer.php +++ b/src/Coduo/PHPHumanizer/CollectionHumanizer.php @@ -20,7 +20,7 @@ final class CollectionHumanizer /** * @param array $collection */ - public static function oxford(array $collection, int $limit = null, string $locale = 'en') : string + public static function oxford(array $collection, ?int $limit = null, string $locale = 'en') : string { $oxford = new Oxford( new Formatter(Builder::build($locale)) diff --git a/src/Coduo/PHPHumanizer/String/BinarySuffix.php b/src/Coduo/PHPHumanizer/String/BinarySuffix.php index 9332d4a..a522482 100644 --- a/src/Coduo/PHPHumanizer/String/BinarySuffix.php +++ b/src/Coduo/PHPHumanizer/String/BinarySuffix.php @@ -34,7 +34,7 @@ final class BinarySuffix 0 => '# bytes', ]; - public function __construct(int $number, string $locale = 'en', int $precision = null) + public function __construct(int $number, string $locale = 'en', ?int $precision = null) { if (!\class_exists(\NumberFormatter::class)) { throw new \RuntimeException('Binary suffix converter requires intl extension!'); diff --git a/tools/composer.lock b/tools/composer.lock index 1edbe03..25cea75 100644 --- a/tools/composer.lock +++ b/tools/composer.lock @@ -152,16 +152,16 @@ }, { "name": "composer/semver", - "version": "3.4.3", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", "shasum": "" }, "require": { @@ -213,7 +213,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" + "source": "https://github.com/composer/semver/tree/3.4.4" }, "funding": [ { @@ -223,13 +223,9 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2024-09-19T14:15:21+00:00" + "time": "2025-08-20T19:15:30+00:00" }, { "name": "composer/xdebug-handler", @@ -346,16 +342,16 @@ }, { "name": "fidry/cpu-core-counter", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", "shasum": "" }, "require": { @@ -365,10 +361,10 @@ "fidry/makefile": "^0.2.0", "fidry/php-cs-fixer-config": "^1.1.2", "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^8.5.31 || ^9.5.26", "webmozarts/strict-phpunit": "^7.5" }, @@ -395,7 +391,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" }, "funding": [ { @@ -403,61 +399,61 @@ "type": "github" } ], - "time": "2024-08-06T10:04:20+00:00" + "time": "2025-08-14T07:29:31+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.68.1", + "version": "v3.91.3", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff" + "reference": "9f10aa6390cea91da175ea608880e942d7c0226e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b9db2b2ea3cdba7201067acee46f984ef2397cff", - "reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/9f10aa6390cea91da175ea608880e942d7c0226e", + "reference": "9f10aa6390cea91da175ea608880e942d7c0226e", "shasum": "" }, "require": { - "clue/ndjson-react": "^1.0", + "clue/ndjson-react": "^1.3", "composer/semver": "^3.4", - "composer/xdebug-handler": "^3.0.3", + "composer/xdebug-handler": "^3.0.5", "ext-filter": "*", + "ext-hash": "*", "ext-json": "*", "ext-tokenizer": "*", - "fidry/cpu-core-counter": "^1.2", + "fidry/cpu-core-counter": "^1.3", "php": "^7.4 || ^8.0", - "react/child-process": "^0.6.5", - "react/event-loop": "^1.0", - "react/promise": "^2.0 || ^3.0", - "react/socket": "^1.0", - "react/stream": "^1.0", - "sebastian/diff": "^4.0 || ^5.1 || ^6.0", - "symfony/console": "^5.4 || ^6.4 || ^7.0", - "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0", - "symfony/filesystem": "^5.4 || ^6.4 || ^7.0", - "symfony/finder": "^5.4 || ^6.4 || ^7.0", - "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0", - "symfony/polyfill-mbstring": "^1.31", - "symfony/polyfill-php80": "^1.31", - "symfony/polyfill-php81": "^1.31", - "symfony/process": "^5.4 || ^6.4 || ^7.2", - "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0" + "react/child-process": "^0.6.6", + "react/event-loop": "^1.5", + "react/socket": "^1.16", + "react/stream": "^1.4", + "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0", + "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.33", + "symfony/polyfill-php80": "^1.33", + "symfony/polyfill-php81": "^1.33", + "symfony/polyfill-php84": "^1.33", + "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0", + "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0" }, "require-dev": { - "facile-it/paraunit": "^1.3.1 || ^2.4", - "infection/infection": "^0.29.8", - "justinrainbow/json-schema": "^5.3 || ^6.0", - "keradus/cli-executor": "^2.1", + "facile-it/paraunit": "^1.3.1 || ^2.7", + "infection/infection": "^0.31.0", + "justinrainbow/json-schema": "^6.5", + "keradus/cli-executor": "^2.2", "mikey179/vfsstream": "^1.6.12", - "php-coveralls/php-coveralls": "^2.7", - "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5", - "phpunit/phpunit": "^9.6.22 || ^10.5.40 || ^11.5.2", - "symfony/var-dumper": "^5.4.48 || ^6.4.15 || ^7.2.0", - "symfony/yaml": "^5.4.45 || ^6.4.13 || ^7.2.0" + "php-coveralls/php-coveralls": "^2.9", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", + "phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34", + "symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2 || ^8.0", + "symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2 || ^8.0" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -472,7 +468,7 @@ "PhpCsFixer\\": "src/" }, "exclude-from-classmap": [ - "src/Fixer/Internal/*" + "src/**/Internal/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -498,7 +494,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.68.1" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.91.3" }, "funding": [ { @@ -506,20 +502,20 @@ "type": "github" } ], - "time": "2025-01-17T09:20:36+00:00" + "time": "2025-12-05T19:45:37+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.12.1", + "version": "1.13.4", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { @@ -558,7 +554,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" }, "funding": [ { @@ -566,20 +562,20 @@ "type": "tidelift" } ], - "time": "2024-11-08T17:47:46+00:00" + "time": "2025-08-01T08:46:24+00:00" }, { "name": "nikic/php-parser", - "version": "v5.4.0", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -598,7 +594,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -622,9 +618,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2024-12-30T11:07:19+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "phar-io/manifest", @@ -746,16 +742,11 @@ }, { "name": "phpstan/phpstan", - "version": "1.12.16", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "e0bb5cb78545aae631220735aa706eac633a6be9" - }, + "version": "1.12.32", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e0bb5cb78545aae631220735aa706eac633a6be9", - "reference": "e0bb5cb78545aae631220735aa706eac633a6be9", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/2770dcdf5078d0b0d53f94317e06affe88419aa8", + "reference": "2770dcdf5078d0b0d53f94317e06affe88419aa8", "shasum": "" }, "require": { @@ -800,7 +791,7 @@ "type": "github" } ], - "time": "2025-01-21T14:50:05+00:00" + "time": "2025-09-30T10:16:31+00:00" }, { "name": "phpunit/php-code-coverage", @@ -1125,16 +1116,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.41", + "version": "10.5.60", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e76586fa3d49714f230221734b44892e384109d7" + "reference": "f2e26f52f80ef77832e359205f216eeac00e320c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e76586fa3d49714f230221734b44892e384109d7", - "reference": "e76586fa3d49714f230221734b44892e384109d7", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f2e26f52f80ef77832e359205f216eeac00e320c", + "reference": "f2e26f52f80ef77832e359205f216eeac00e320c", "shasum": "" }, "require": { @@ -1144,7 +1135,7 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.1", + "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.1", @@ -1155,13 +1146,13 @@ "phpunit/php-timer": "^6.0.0", "sebastian/cli-parser": "^2.0.1", "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.3", + "sebastian/comparator": "^5.0.4", "sebastian/diff": "^5.1.1", "sebastian/environment": "^6.1.0", - "sebastian/exporter": "^5.1.2", + "sebastian/exporter": "^5.1.4", "sebastian/global-state": "^6.0.2", "sebastian/object-enumerator": "^5.0.0", - "sebastian/recursion-context": "^5.0.0", + "sebastian/recursion-context": "^5.0.1", "sebastian/type": "^4.0.0", "sebastian/version": "^4.0.1" }, @@ -1206,7 +1197,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.41" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.60" }, "funding": [ { @@ -1217,12 +1208,20 @@ "url": "https://github.com/sebastianbergmann", "type": "github" }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, { "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", "type": "tidelift" } ], - "time": "2025-01-13T09:33:05+00:00" + "time": "2025-12-06T07:50:42+00:00" }, { "name": "psr/container", @@ -1526,16 +1525,16 @@ }, { "name": "react/dns", - "version": "v1.13.0", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/reactphp/dns.git", - "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", - "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "url": "https://api.github.com/repos/reactphp/dns/zipball/7562c05391f42701c1fccf189c8225fece1cd7c3", + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3", "shasum": "" }, "require": { @@ -1590,7 +1589,7 @@ ], "support": { "issues": "https://github.com/reactphp/dns/issues", - "source": "https://github.com/reactphp/dns/tree/v1.13.0" + "source": "https://github.com/reactphp/dns/tree/v1.14.0" }, "funding": [ { @@ -1598,20 +1597,20 @@ "type": "open_collective" } ], - "time": "2024-06-13T14:18:03+00:00" + "time": "2025-11-18T19:34:28+00:00" }, { "name": "react/event-loop", - "version": "v1.5.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/reactphp/event-loop.git", - "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", - "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/ba276bda6083df7e0050fd9b33f66ad7a4ac747a", + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a", "shasum": "" }, "require": { @@ -1662,7 +1661,7 @@ ], "support": { "issues": "https://github.com/reactphp/event-loop/issues", - "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" + "source": "https://github.com/reactphp/event-loop/tree/v1.6.0" }, "funding": [ { @@ -1670,27 +1669,27 @@ "type": "open_collective" } ], - "time": "2023-11-13T13:48:05+00:00" + "time": "2025-11-17T20:46:25+00:00" }, { "name": "react/promise", - "version": "v3.2.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63" + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63", + "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a", + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a", "shasum": "" }, "require": { "php": ">=7.1.0" }, "require-dev": { - "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpstan/phpstan": "1.12.28 || 1.4.10", "phpunit/phpunit": "^9.6 || ^7.5" }, "type": "library", @@ -1735,7 +1734,7 @@ ], "support": { "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v3.2.0" + "source": "https://github.com/reactphp/promise/tree/v3.3.0" }, "funding": [ { @@ -1743,20 +1742,20 @@ "type": "open_collective" } ], - "time": "2024-05-24T10:39:05+00:00" + "time": "2025-08-19T18:57:03+00:00" }, { "name": "react/socket", - "version": "v1.16.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/reactphp/socket.git", - "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", - "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "url": "https://api.github.com/repos/reactphp/socket/zipball/ef5b17b81f6f60504c539313f94f2d826c5faa08", + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08", "shasum": "" }, "require": { @@ -1815,7 +1814,7 @@ ], "support": { "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.16.0" + "source": "https://github.com/reactphp/socket/tree/v1.17.0" }, "funding": [ { @@ -1823,7 +1822,7 @@ "type": "open_collective" } ], - "time": "2024-07-26T10:38:09+00:00" + "time": "2025-11-19T20:47:34+00:00" }, { "name": "react/stream", @@ -2073,16 +2072,16 @@ }, { "name": "sebastian/comparator", - "version": "5.0.3", + "version": "5.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" + "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e8e53097718d2b53cfb2aa859b06a41abf58c62e", + "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e", "shasum": "" }, "require": { @@ -2138,15 +2137,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.4" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" } ], - "time": "2024-10-18T14:56:07+00:00" + "time": "2025-09-07T05:25:07+00:00" }, { "name": "sebastian/complexity", @@ -2339,16 +2350,16 @@ }, { "name": "sebastian/exporter", - "version": "5.1.2", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf" + "reference": "0735b90f4da94969541dac1da743446e276defa6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6", + "reference": "0735b90f4da94969541dac1da743446e276defa6", "shasum": "" }, "require": { @@ -2357,7 +2368,7 @@ "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { @@ -2405,15 +2416,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2024-03-02T07:17:12+00:00" + "time": "2025-09-24T06:09:11+00:00" }, { "name": "sebastian/global-state", @@ -2649,23 +2672,23 @@ }, { "name": "sebastian/recursion-context", - "version": "5.0.0", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a", + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a", "shasum": "" }, "require": { "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { @@ -2700,15 +2723,28 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" } ], - "time": "2023-02-03T07:05:40+00:00" + "time": "2025-08-10T07:50:56+00:00" }, { "name": "sebastian/type", @@ -2821,46 +2857,39 @@ }, { "name": "symfony/console", - "version": "v7.2.1", + "version": "v8.0.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" + "reference": "fcb73f69d655b48fcb894a262f074218df08bd58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", - "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "url": "https://api.github.com/repos/symfony/console/zipball/fcb73f69d655b48fcb894a262f074218df08bd58", + "reference": "fcb73f69d655b48fcb894a262f074218df08bd58", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0", + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" + "symfony/string": "^7.4|^8.0" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -2894,7 +2923,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.1" + "source": "https://github.com/symfony/console/tree/v8.0.1" }, "funding": [ { @@ -2905,25 +2934,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-11T03:49:26+00:00" + "time": "2025-12-05T15:25:33+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { @@ -2936,7 +2969,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -2961,7 +2994,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -2977,28 +3010,28 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.2.0", + "version": "v8.0.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" + "reference": "573f95783a2ec6e38752979db139f09fec033f03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", - "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/573f95783a2ec6e38752979db139f09fec033f03", + "reference": "573f95783a2ec6e38752979db139f09fec033f03", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<6.4", + "symfony/security-http": "<7.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -3007,13 +3040,14 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/error-handler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0" + "symfony/stopwatch": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3041,7 +3075,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.0" }, "funding": [ { @@ -3052,25 +3086,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2025-10-30T14:17:19+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", "shasum": "" }, "require": { @@ -3084,7 +3122,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -3117,7 +3155,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" }, "funding": [ { @@ -3133,29 +3171,29 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/filesystem", - "version": "v7.2.0", + "version": "v8.0.1", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" + "reference": "d937d400b980523dc9ee946bb69972b5e619058d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", - "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d937d400b980523dc9ee946bb69972b5e619058d", + "reference": "d937d400b980523dc9ee946bb69972b5e619058d", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^6.4|^7.0" + "symfony/process": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3183,7 +3221,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.2.0" + "source": "https://github.com/symfony/filesystem/tree/v8.0.1" }, "funding": [ { @@ -3194,32 +3232,36 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-10-25T15:15:23+00:00" + "time": "2025-12-01T09:13:36+00:00" }, { "name": "symfony/finder", - "version": "v7.2.2", + "version": "v8.0.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "87a71856f2f56e4100373e92529eed3171695cfb" + "reference": "7598dd5770580fa3517ec83e8da0c9b9e01f4291" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", - "reference": "87a71856f2f56e4100373e92529eed3171695cfb", + "url": "https://api.github.com/repos/symfony/finder/zipball/7598dd5770580fa3517ec83e8da0c9b9e01f4291", + "reference": "7598dd5770580fa3517ec83e8da0c9b9e01f4291", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "symfony/filesystem": "^6.4|^7.0" + "symfony/filesystem": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3247,7 +3289,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/finder/tree/v7.2.2" + "source": "https://github.com/symfony/finder/tree/v8.0.0" }, "funding": [ { @@ -3258,29 +3300,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-30T19:00:17+00:00" + "time": "2025-11-05T14:36:47+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.2.0", + "version": "v8.0.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50" + "reference": "d2b592535ffa6600c265a3893a7f7fd2bad82dd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/7da8fbac9dcfef75ffc212235d76b2754ce0cf50", - "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/d2b592535ffa6600c265a3893a7f7fd2bad82dd7", + "reference": "d2b592535ffa6600c265a3893a7f7fd2bad82dd7", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -3314,7 +3360,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.2.0" + "source": "https://github.com/symfony/options-resolver/tree/v8.0.0" }, "funding": [ { @@ -3325,16 +3371,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-20T11:17:29+00:00" + "time": "2025-11-12T15:55:31+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -3393,7 +3443,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" }, "funding": [ { @@ -3404,6 +3454,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -3413,16 +3467,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", "shasum": "" }, "require": { @@ -3471,7 +3525,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" }, "funding": [ { @@ -3482,16 +3536,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-06-27T09:58:17+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -3552,7 +3610,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" }, "funding": [ { @@ -3563,6 +3621,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -3572,19 +3634,20 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { + "ext-iconv": "*", "php": ">=7.2" }, "provide": { @@ -3632,7 +3695,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -3643,25 +3706,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { @@ -3712,7 +3779,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" }, "funding": [ { @@ -3723,16 +3790,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-01-02T08:10:11+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", @@ -3788,7 +3859,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0" }, "funding": [ { @@ -3799,6 +3870,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -3806,22 +3881,102 @@ ], "time": "2024-09-09T11:45:10+00:00" }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com/", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-24T13:30:11+00:00" + }, { "name": "symfony/process", - "version": "v7.2.0", + "version": "v8.0.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" + "reference": "a0a750500c4ce900d69ba4e9faf16f82c10ee149" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", - "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "url": "https://api.github.com/repos/symfony/process/zipball/a0a750500c4ce900d69ba4e9faf16f82c10ee149", + "reference": "a0a750500c4ce900d69ba4e9faf16f82c10ee149", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "type": "library", "autoload": { @@ -3849,7 +4004,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/process/tree/v7.2.0" + "source": "https://github.com/symfony/process/tree/v8.0.0" }, "funding": [ { @@ -3860,25 +4015,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-06T14:24:19+00:00" + "time": "2025-10-16T16:25:44+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.1", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { @@ -3896,7 +4055,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -3932,7 +4091,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -3943,29 +4102,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/stopwatch", - "version": "v7.2.2", + "version": "v8.0.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df" + "reference": "67df1914c6ccd2d7b52f70d40cf2aea02159d942" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/e46690d5b9d7164a6d061cab1e8d46141b9f49df", - "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/67df1914c6ccd2d7b52f70d40cf2aea02159d942", + "reference": "67df1914c6ccd2d7b52f70d40cf2aea02159d942", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -3994,7 +4157,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com/", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.2.2" + "source": "https://github.com/symfony/stopwatch/tree/v8.0.0" }, "funding": [ { @@ -4005,44 +4168,47 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-18T14:28:33+00:00" + "time": "2025-08-04T07:36:47+00:00" }, { "name": "symfony/string", - "version": "v7.2.0", + "version": "v8.0.1", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" + "reference": "ba65a969ac918ce0cc3edfac6cdde847eba231dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", + "url": "https://api.github.com/repos/symfony/string/zipball/ba65a969ac918ce0cc3edfac6cdde847eba231dc", + "reference": "ba65a969ac918ce0cc3edfac6cdde847eba231dc", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-intl-grapheme": "^1.33", + "symfony/polyfill-intl-normalizer": "^1.0", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", + "symfony/emoji": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/var-exporter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -4081,7 +4247,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.2.0" + "source": "https://github.com/symfony/string/tree/v8.0.1" }, "funding": [ { @@ -4092,25 +4258,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-13T13:31:26+00:00" + "time": "2025-12-01T09:13:36+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.3", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { @@ -4139,7 +4309,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, "funding": [ { @@ -4147,7 +4317,7 @@ "type": "github" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-11-17T20:03:58+00:00" } ], "aliases": [], From b38f769ec45ae708ca76ded6b2ddea2e5938fdfb Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 11 Dec 2025 20:13:52 +0000 Subject: [PATCH 192/193] Updated CHANGELOG.md --- CHANGELOG.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d299bf..29a6943 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,19 @@ -## [Unreleased] - 2025-03-05 +## [Unreleased] - 2025-12-11 + +### Added +- [#149](https://github.com/coduo/php-humanizer/pull/149) - **Symfony 8+ support** - [@bpolaszek](https://github.com/bpolaszek) +- [#149](https://github.com/coduo/php-humanizer/pull/149) - **PHP 8.5 support** - [@bpolaszek](https://github.com/bpolaszek) ### Changed - [#141](https://github.com/coduo/php-humanizer/pull/141) - **Update action cache from @v2 to @v4 in Github Action workflows** - [@norberttech](https://github.com/norberttech) ### Fixed +- [#149](https://github.com/coduo/php-humanizer/pull/149) - **Incorrect nullable types as of PHP 8.4** - [@bpolaszek](https://github.com/bpolaszek) - [#139](https://github.com/coduo/php-humanizer/pull/139) - **Readme typo** - [@WatheqAlshowaiter](https://github.com/WatheqAlshowaiter) +### Removed +- [#149](https://github.com/coduo/php-humanizer/pull/149) - **Removed `composer.lock` from git and added it to `.gitignore` (lock file not required in packages, helps CI to pass)** - [@bpolaszek](https://github.com/bpolaszek) + ## [5.0.2] - 2025-02-06 ### Added @@ -357,6 +365,7 @@ - @adevade - @arrowrowe - @Borales +- @bpolaszek - @brianwozeniak - @cnkt - @dagaa From cf3621540a1003e6089dab8b8fa9420ad3e6f11f Mon Sep 17 00:00:00 2001 From: aeon-automation Date: Thu, 11 Dec 2025 21:35:15 +0000 Subject: [PATCH 193/193] Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 29a6943..7f89e8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [Unreleased] - 2025-12-11 +## [5.0.3] - 2025-12-11 ### Added - [#149](https://github.com/coduo/php-humanizer/pull/149) - **Symfony 8+ support** - [@bpolaszek](https://github.com/bpolaszek)

HyperText Markup Language, commonly referred to as HTML, is the standard markup language used to create web pages.[1] Web browsers can read HTML files and render them into visible or audible web pages. HTML describes the structure of a website semantically along with cues for presentation, making it a markup language, rather than a programming language.