From 5a899563ccfe657610aff899c42435c6491a4142 Mon Sep 17 00:00:00 2001 From: Patrick Allaert Date: Thu, 31 Mar 2022 17:37:41 +0200 Subject: [PATCH 01/78] Bump for 8.1.6-dev --- NEWS | 5 ++++- Zend/zend.h | 2 +- configure.ac | 2 +- main/php_version.h | 6 +++--- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index cb1e237533251..48a8cfd68801c 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -?? ??? ????, PHP 8.1.5 +?? ??? ????, PHP 8.1.6 + + +31 Mar 2022, PHP 8.1.5 - Core: . Fixed bug GH-8176 (Enum values in property initializers leak). (Bob) diff --git a/Zend/zend.h b/Zend/zend.h index 7dc686cc104f9..568f42de2a828 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -20,7 +20,7 @@ #ifndef ZEND_H #define ZEND_H -#define ZEND_VERSION "4.1.5-dev" +#define ZEND_VERSION "4.1.6-dev" #define ZEND_ENGINE_3 diff --git a/configure.ac b/configure.ac index 3df524a50a745..8e5f67e232597 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,7 @@ dnl Basic autoconf initialization, generation of config.nice. dnl ---------------------------------------------------------------------------- AC_PREREQ([2.68]) -AC_INIT([PHP],[8.1.5-dev],[https://bugs.php.net],[php],[https://www.php.net]) +AC_INIT([PHP],[8.1.6-dev],[https://bugs.php.net],[php],[https://www.php.net]) AC_CONFIG_SRCDIR([main/php_version.h]) AC_CONFIG_AUX_DIR([build]) AC_PRESERVE_HELP_ORDER diff --git a/main/php_version.h b/main/php_version.h index a879ae407415d..7c86754855360 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -2,7 +2,7 @@ /* edit configure.ac to change version number */ #define PHP_MAJOR_VERSION 8 #define PHP_MINOR_VERSION 1 -#define PHP_RELEASE_VERSION 5 +#define PHP_RELEASE_VERSION 6 #define PHP_EXTRA_VERSION "-dev" -#define PHP_VERSION "8.1.5-dev" -#define PHP_VERSION_ID 80105 +#define PHP_VERSION "8.1.6-dev" +#define PHP_VERSION_ID 80106 From d82d62c237bbab34c0a3195ae9eff19d04448338 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Fri, 1 Apr 2022 12:54:46 +0200 Subject: [PATCH 02/78] Re-enable i386 tests on Azure Pipelines --- azure-pipelines.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a8fc6bcbb70bc..a633ceae01cbf 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -22,11 +22,10 @@ schedules: - master jobs: - # Azure pipelines don't work atm - # - template: azure/i386/job.yml - # parameters: - # configurationName: I386_DEBUG_ZTS - # configurationParameters: '--enable-debug --enable-zts' + - template: azure/i386/job.yml + parameters: + configurationName: I386_DEBUG_ZTS + configurationParameters: '--enable-debug --enable-zts' - ${{ if eq(variables['Build.Reason'], 'Schedule') }}: - template: azure/job.yml parameters: From e6c498818717217c0af7699d9b9ce5fc8b903011 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Fri, 1 Apr 2022 13:28:05 +0100 Subject: [PATCH 03/78] Fixed #7752, #8101, #81660: DateTimeZone::getTransitions() returns insufficient data --- NEWS | 6 ++ ext/date/php_date.c | 58 ++++++++++++------- .../DateTimeZone_getTransitions_bug1.phpt | 58 +++++++++++++++++++ 3 files changed, 102 insertions(+), 20 deletions(-) create mode 100644 ext/date/tests/DateTimeZone_getTransitions_bug1.phpt diff --git a/NEWS b/NEWS index 48a8cfd68801c..030de087fca9d 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,12 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 8.1.6 +- Date: + . Fixed bug GH-7752 (DateTimeZone::getTransitions() returns insufficient + data). (Derick) + . Fixed bug GH-8108 (Timezone doesn't work as intended). (Derick) + . Fixed bug #81660 (DateTimeZone::getTransitions() returns invalid data). + (Derick) 31 Mar 2022, PHP 8.1.5 diff --git a/ext/date/php_date.c b/ext/date/php_date.c index cf4a11b8a2243..c604b936ba0d9 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -3629,6 +3629,15 @@ PHP_FUNCTION(timezone_transitions_get) add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[i].abbr_idx]); \ add_next_index_zval(return_value, &element); +#define add_from_tto(to,ts) \ + array_init(&element); \ + add_assoc_long(&element, "ts", ts); \ + add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, ts, 0)); \ + add_assoc_long(&element, "offset", (to)->offset); \ + add_assoc_bool(&element, "isdst", (to)->is_dst); \ + add_assoc_string(&element, "abbr", (to)->abbr); \ + add_next_index_zval(return_value, &element); + #define add_last() add(tzobj->tzi.tz->bit64.timecnt - 1, timestamp_begin) array_init(return_value); @@ -3658,7 +3667,13 @@ PHP_FUNCTION(timezone_transitions_get) if (!found) { if (tzobj->tzi.tz->bit64.timecnt > 0) { - add_last(); + if (tzobj->tzi.tz->posix_info && tzobj->tzi.tz->posix_info->dst_end) { + timelib_time_offset *tto = timelib_get_time_zone_info(timestamp_begin, tzobj->tzi.tz); + add_from_tto(tto, timestamp_begin); + timelib_time_offset_dtor(tto); + } else { + add_last(); + } } else { add_nominal(); } @@ -3671,31 +3686,34 @@ PHP_FUNCTION(timezone_transitions_get) return; } } - if (tzobj->tzi.tz->posix_info && tzobj->tzi.tz->posix_info->dst_end) { - int i, j; - timelib_sll start_y, end_y, dummy_m, dummy_d; - timelib_sll last_transition_ts = tzobj->tzi.tz->trans[tzobj->tzi.tz->bit64.timecnt - 1]; + } + if (tzobj->tzi.tz->posix_info && tzobj->tzi.tz->posix_info->dst_end) { + int i, j; + timelib_sll start_y, end_y, dummy_m, dummy_d; + timelib_sll last_transition_ts = tzobj->tzi.tz->trans[tzobj->tzi.tz->bit64.timecnt - 1]; - /* Find out year for last transition */ - timelib_unixtime2date(last_transition_ts, &start_y, &dummy_m, &dummy_d); + /* Find out year for last transition */ + timelib_unixtime2date(last_transition_ts, &start_y, &dummy_m, &dummy_d); - /* Find out year for final boundary timestamp */ - timelib_unixtime2date(timestamp_end, &end_y, &dummy_m, &dummy_d); + /* Find out year for final boundary timestamp */ + timelib_unixtime2date(timestamp_end, &end_y, &dummy_m, &dummy_d); - for (i = start_y; i <= end_y; i++) { - timelib_posix_transitions transitions = { 0 }; + for (i = start_y; i <= end_y; i++) { + timelib_posix_transitions transitions = { 0 }; - timelib_get_transitions_for_year(tzobj->tzi.tz, i, &transitions); + timelib_get_transitions_for_year(tzobj->tzi.tz, i, &transitions); - for (j = 0; j < transitions.count; j++) { - if (transitions.times[j] <= last_transition_ts) { - continue; - } - if (transitions.times[j] > timestamp_end) { - return; - } - add_by_index(transitions.types[j], transitions.times[j]); + for (j = 0; j < transitions.count; j++) { + if (transitions.times[j] <= last_transition_ts) { + continue; + } + if (transitions.times[j] < timestamp_begin) { + continue; + } + if (transitions.times[j] > timestamp_end) { + return; } + add_by_index(transitions.types[j], transitions.times[j]); } } } diff --git a/ext/date/tests/DateTimeZone_getTransitions_bug1.phpt b/ext/date/tests/DateTimeZone_getTransitions_bug1.phpt new file mode 100644 index 0000000000000..7ac2c065219f1 --- /dev/null +++ b/ext/date/tests/DateTimeZone_getTransitions_bug1.phpt @@ -0,0 +1,58 @@ +--TEST-- +GH-7752: DateTimeZone::getTransitions() does not return enough information +--FILE-- +getTransitions($from, $to) as $t) { + printf("%12d %s %6d %s %s\n", $t['ts'], $t['time'], $t['offset'], $t['isdst'] ? "DST" : " x ", $t['abbr']); + } + echo "\n"; +} + + +showTransitions('Europe/London', 1648342200); +showTransitions('America/Los_Angeles', 1648557596); // GH Issue 7752 +showTransitions('America/Chicago', 1293861600); // PHP Bug 81660 +showTransitions('Europe/Paris', 1645095600); // GH Issue 8108 +?> +--EXPECT-- +Europe/London from @1648342200-@1727398200: + + 1648342200 2022-03-27T00:50:00+0000 0 x GMT + 1648342800 2022-03-27T01:00:00+0000 3600 DST BST + 1667091600 2022-10-30T01:00:00+0000 0 x GMT + 1679792400 2023-03-26T01:00:00+0000 3600 DST BST + 1698541200 2023-10-29T01:00:00+0000 0 x GMT + 1711846800 2024-03-31T01:00:00+0000 3600 DST BST + +America/Los_Angeles from @1648557596-@1727613596: + + 1648557596 2022-03-29T12:39:56+0000 -25200 DST PDT + 1667725200 2022-11-06T09:00:00+0000 -28800 x PST + 1678615200 2023-03-12T10:00:00+0000 -25200 DST PDT + 1699174800 2023-11-05T09:00:00+0000 -28800 x PST + 1710064800 2024-03-10T10:00:00+0000 -25200 DST PDT + +America/Chicago from @1293861600-@1372917600: + + 1293861600 2011-01-01T06:00:00+0000 -21600 x CST + 1300003200 2011-03-13T08:00:00+0000 -18000 DST CDT + 1320562800 2011-11-06T07:00:00+0000 -21600 x CST + 1331452800 2012-03-11T08:00:00+0000 -18000 DST CDT + 1352012400 2012-11-04T07:00:00+0000 -21600 x CST + 1362902400 2013-03-10T08:00:00+0000 -18000 DST CDT + +Europe/Paris from @1645095600-@1724151600: + + 1645095600 2022-02-17T11:00:00+0000 3600 x CET + 1648342800 2022-03-27T01:00:00+0000 7200 DST CEST + 1667091600 2022-10-30T01:00:00+0000 3600 x CET + 1679792400 2023-03-26T01:00:00+0000 7200 DST CEST + 1698541200 2023-10-29T01:00:00+0000 3600 x CET + 1711846800 2024-03-31T01:00:00+0000 7200 DST CEST From 13649451c201361b438ca0f762cfb33dfc3fca39 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Fri, 1 Apr 2022 17:32:48 +0200 Subject: [PATCH 04/78] Fix GH-8289: Exceptions thrown within a yielded from iterator are not rethrown into the generator This also fixes the fact that exception traces were not including the generator frame when thrown in a yielded from iterator. --- NEWS | 4 +- Zend/tests/generators/gh8289.phpt | 34 +++++++ Zend/zend_generators.c | 153 +++++++++++++++--------------- 3 files changed, 110 insertions(+), 81 deletions(-) create mode 100644 Zend/tests/generators/gh8289.phpt diff --git a/NEWS b/NEWS index 9ee38ddb2bcc3..19d46c3a1414e 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,8 @@ PHP NEWS . Fixed bug GH-8070 (memory leak of internal function attribute hash). (Tim Düsterhus) . Fixed bug GH-8160 (ZTS support on Alpine is broken). (Michael Voříšek) + . Fixed bug GH-8289 (Exceptions thrown within a yielded from iterator are + not rethrown into the generator). (Bob) - Filter: . Fixed signedness confusion in php_filter_validate_domain(). (cmb) @@ -43,8 +45,6 @@ PHP NEWS - Core: . Fixed Haiku ZTS build. (David Carlier) - . Fixed bug GH-8082 (op_arrays with temporary run_time_cache leak memory - when observed). (Bob) - GD: . Fixed libpng warning when loading interlaced images. (Brett) diff --git a/Zend/tests/generators/gh8289.phpt b/Zend/tests/generators/gh8289.phpt new file mode 100644 index 0000000000000..6329da896c623 --- /dev/null +++ b/Zend/tests/generators/gh8289.phpt @@ -0,0 +1,34 @@ +--TEST-- +GH-8289 (Exceptions thrown within a yielded from iterator are not rethrown into the generator) +--FILE-- + $v) { + var_dump($v); +} + +?> +--EXPECTF-- +int(1) +Exception in %s:%d +Stack trace: +#0 %s(%d): IteratorIterator@anonymous->key() +#1 %s(%d): yieldFromIteratorGeneratorThrows() +#2 {main} +int(2) \ No newline at end of file diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 66d3bb3b62424..cf09e9e379ef1 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -637,22 +637,17 @@ static zend_result zend_generator_get_next_delegated_value(zend_generator *gener if (iter->index++ > 0) { iter->funcs->move_forward(iter); if (UNEXPECTED(EG(exception) != NULL)) { - goto exception; + goto failure; } } if (iter->funcs->valid(iter) == FAILURE) { - if (UNEXPECTED(EG(exception) != NULL)) { - goto exception; - } /* reached end of iteration */ goto failure; } value = iter->funcs->get_current_data(iter); - if (UNEXPECTED(EG(exception) != NULL)) { - goto exception; - } else if (UNEXPECTED(!value)) { + if (UNEXPECTED(EG(exception) != NULL) || UNEXPECTED(!value)) { goto failure; } @@ -664,7 +659,7 @@ static zend_result zend_generator_get_next_delegated_value(zend_generator *gener iter->funcs->get_current_key(iter, &generator->key); if (UNEXPECTED(EG(exception) != NULL)) { ZVAL_UNDEF(&generator->key); - goto exception; + goto failure; } } else { ZVAL_LONG(&generator->key, iter->index); @@ -672,9 +667,6 @@ static zend_result zend_generator_get_next_delegated_value(zend_generator *gener } return SUCCESS; -exception: - zend_generator_throw_exception(generator, NULL); - failure: zval_ptr_dtor(&generator->values); ZVAL_UNDEF(&generator->values); @@ -706,8 +698,33 @@ ZEND_API void zend_generator_resume(zend_generator *orig_generator) /* {{{ */ /* Drop the AT_FIRST_YIELD flag */ orig_generator->flags &= ~ZEND_GENERATOR_AT_FIRST_YIELD; + /* Backup executor globals */ + zend_execute_data *original_execute_data = EG(current_execute_data); + uint32_t original_jit_trace_num = EG(jit_trace_num); + + /* Set executor globals */ + EG(current_execute_data) = generator->execute_data; + EG(jit_trace_num) = 0; + + /* We want the backtrace to look as if the generator function was + * called from whatever method we are current running (e.g. next()). + * So we have to link generator call frame with caller call frame. */ + if (generator == orig_generator) { + generator->execute_data->prev_execute_data = original_execute_data; + } else { + /* We need some execute_data placeholder in stacktrace to be replaced + * by the real stack trace when needed */ + generator->execute_data->prev_execute_data = &orig_generator->execute_fake; + orig_generator->execute_fake.prev_execute_data = original_execute_data; + } + + /* Ensure this is run after executor_data swap to have a proper stack trace */ if (UNEXPECTED(!Z_ISUNDEF(generator->values))) { if (EXPECTED(zend_generator_get_next_delegated_value(generator) == SUCCESS)) { + /* Restore executor globals */ + EG(current_execute_data) = original_execute_data; + EG(jit_trace_num) = original_jit_trace_num; + orig_generator->flags &= ~ZEND_GENERATOR_DO_INIT; return; } @@ -715,85 +732,63 @@ ZEND_API void zend_generator_resume(zend_generator *orig_generator) /* {{{ */ * after the "yield from" expression. */ } - { - /* Backup executor globals */ - zend_execute_data *original_execute_data = EG(current_execute_data); - uint32_t original_jit_trace_num = EG(jit_trace_num); - - /* Set executor globals */ - EG(current_execute_data) = generator->execute_data; - EG(jit_trace_num) = 0; - - /* We want the backtrace to look as if the generator function was - * called from whatever method we are current running (e.g. next()). - * So we have to link generator call frame with caller call frame. */ - if (generator == orig_generator) { - generator->execute_data->prev_execute_data = original_execute_data; - } else { - /* We need some execute_data placeholder in stacktrace to be replaced - * by the real stack trace when needed */ - generator->execute_data->prev_execute_data = &orig_generator->execute_fake; - orig_generator->execute_fake.prev_execute_data = original_execute_data; - } + if (UNEXPECTED(generator->frozen_call_stack)) { + /* Restore frozen call-stack */ + zend_generator_restore_call_stack(generator); + } - if (UNEXPECTED(generator->frozen_call_stack)) { - /* Restore frozen call-stack */ - zend_generator_restore_call_stack(generator); + /* Resume execution */ + generator->flags |= ZEND_GENERATOR_CURRENTLY_RUNNING; + if (!ZEND_OBSERVER_ENABLED) { + zend_execute_ex(generator->execute_data); + } else { + zend_observer_generator_resume(generator->execute_data); + zend_execute_ex(generator->execute_data); + if (generator->execute_data) { + /* On the final return, this will be called from ZEND_GENERATOR_RETURN */ + zend_observer_fcall_end(generator->execute_data, &generator->value); } + } + generator->flags &= ~ZEND_GENERATOR_CURRENTLY_RUNNING; - /* Resume execution */ - generator->flags |= ZEND_GENERATOR_CURRENTLY_RUNNING; - if (!ZEND_OBSERVER_ENABLED) { - zend_execute_ex(generator->execute_data); - } else { - zend_observer_generator_resume(generator->execute_data); - zend_execute_ex(generator->execute_data); - if (generator->execute_data) { - /* On the final return, this will be called from ZEND_GENERATOR_RETURN */ - zend_observer_fcall_end(generator->execute_data, &generator->value); - } - } - generator->flags &= ~ZEND_GENERATOR_CURRENTLY_RUNNING; + generator->frozen_call_stack = NULL; + if (EXPECTED(generator->execute_data) && + UNEXPECTED(generator->execute_data->call)) { + /* Frize call-stack */ + generator->frozen_call_stack = zend_generator_freeze_call_stack(generator->execute_data); + } - generator->frozen_call_stack = NULL; - if (EXPECTED(generator->execute_data) && - UNEXPECTED(generator->execute_data->call)) { - /* Frize call-stack */ - generator->frozen_call_stack = zend_generator_freeze_call_stack(generator->execute_data); - } + /* Restore executor globals */ + EG(current_execute_data) = original_execute_data; + EG(jit_trace_num) = original_jit_trace_num; - /* Restore executor globals */ - EG(current_execute_data) = original_execute_data; - EG(jit_trace_num) = original_jit_trace_num; - - /* If an exception was thrown in the generator we have to internally - * rethrow it in the parent scope. - * In case we did yield from, the Exception must be rethrown into - * its calling frame (see above in if (check_yield_from). */ - if (UNEXPECTED(EG(exception) != NULL)) { - if (generator == orig_generator) { - zend_generator_close(generator, 0); - if (!EG(current_execute_data)) { - zend_throw_exception_internal(NULL); - } else if (EG(current_execute_data)->func && - ZEND_USER_CODE(EG(current_execute_data)->func->common.type)) { - zend_rethrow_exception(EG(current_execute_data)); - } - } else { - generator = zend_generator_get_current(orig_generator); - zend_generator_throw_exception(generator, NULL); - orig_generator->flags &= ~ZEND_GENERATOR_DO_INIT; - goto try_again; + /* If an exception was thrown in the generator we have to internally + * rethrow it in the parent scope. + * In case we did yield from, the Exception must be rethrown into + * its calling frame (see above in if (check_yield_from). */ + if (UNEXPECTED(EG(exception) != NULL)) { + if (generator == orig_generator) { + zend_generator_close(generator, 0); + if (!EG(current_execute_data)) { + zend_throw_exception_internal(NULL); + } else if (EG(current_execute_data)->func && + ZEND_USER_CODE(EG(current_execute_data)->func->common.type)) { + zend_rethrow_exception(EG(current_execute_data)); } - } - - /* yield from was used, try another resume. */ - if (UNEXPECTED((generator != orig_generator && !Z_ISUNDEF(generator->retval)) || (generator->execute_data && (generator->execute_data->opline - 1)->opcode == ZEND_YIELD_FROM))) { + } else { generator = zend_generator_get_current(orig_generator); + zend_generator_throw_exception(generator, NULL); + orig_generator->flags &= ~ZEND_GENERATOR_DO_INIT; goto try_again; } } + /* yield from was used, try another resume. */ + if (UNEXPECTED((generator != orig_generator && !Z_ISUNDEF(generator->retval)) || (generator->execute_data && (generator->execute_data->opline - 1)->opcode == ZEND_YIELD_FROM))) { + generator = zend_generator_get_current(orig_generator); + goto try_again; + } + orig_generator->flags &= ~ZEND_GENERATOR_DO_INIT; } /* }}} */ From e4c7ffc1524d34e14337469e13f5c85857aab60b Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Fri, 1 Apr 2022 17:51:18 +0200 Subject: [PATCH 05/78] Fix deprecated warning in new gh8289.phpt test --- Zend/tests/generators/gh8289.phpt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zend/tests/generators/gh8289.phpt b/Zend/tests/generators/gh8289.phpt index 6329da896c623..f5bb1fc64be0b 100644 --- a/Zend/tests/generators/gh8289.phpt +++ b/Zend/tests/generators/gh8289.phpt @@ -6,7 +6,7 @@ GH-8289 (Exceptions thrown within a yielded from iterator are not rethrown into function yieldFromIteratorGeneratorThrows() { try { yield from new class(new ArrayIterator([1, -2])) extends IteratorIterator { - public function key() { + public function key(): mixed { if ($k = parent::key()) { throw new Exception; } @@ -31,4 +31,4 @@ Stack trace: #0 %s(%d): IteratorIterator@anonymous->key() #1 %s(%d): yieldFromIteratorGeneratorThrows() #2 {main} -int(2) \ No newline at end of file +int(2) From 14fddd17df97c6f16faf593b7f224c9891ef27dc Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 4 Apr 2022 12:03:39 +0300 Subject: [PATCH 06/78] Fix arsort() crash on recursion Fixes oss-fuzz #46315 --- Zend/tests/bug63882_2.phpt | 23 +++++++++++++++++++++++ Zend/zend_hash.c | 10 ++++++++++ 2 files changed, 33 insertions(+) create mode 100644 Zend/tests/bug63882_2.phpt diff --git a/Zend/tests/bug63882_2.phpt b/Zend/tests/bug63882_2.phpt new file mode 100644 index 0000000000000..c457a7ad4542e --- /dev/null +++ b/Zend/tests/bug63882_2.phpt @@ -0,0 +1,23 @@ +--TEST-- +Bug #63882_2 (arsort crash on recursion) +--FILE-- + +DONE +--EXPECT-- +DONE diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 5f878b2154bad..cf0f9e5b332c4 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -2551,6 +2551,16 @@ ZEND_API void ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort, b ht->nNumUsed = i; } + if (!(HT_FLAGS(ht) & HASH_FLAG_PACKED)) { + /* We broke the hash colisions chains overriding Z_NEXT() by Z_EXTRA(). + * Reset the hash headers table as well to avoid possilbe inconsistent + * access on recursive data structures. + * + * See Zend/tests/bug63882_2.phpt + */ + HT_HASH_RESET(ht); + } + sort((void *)ht->arData, ht->nNumUsed, sizeof(Bucket), (compare_func_t) compar, (swap_func_t)(renumber? zend_hash_bucket_renum_swap : ((HT_FLAGS(ht) & HASH_FLAG_PACKED) ? zend_hash_bucket_packed_swap : zend_hash_bucket_swap))); From 0d44bbd212c34f57fad3429d0ecdf43c8d98d2d9 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 4 Apr 2022 14:20:45 +0300 Subject: [PATCH 07/78] JIT: Fixed incorrect code generation Fixes oss-fuzz #46328 --- ext/opcache/jit/zend_jit_x86.dasc | 9 ++++++ ext/opcache/tests/jit/assign_obj_003.phpt | 37 +++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 ext/opcache/tests/jit/assign_obj_003.phpt diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index b30a9952ca34b..3430baf0a0737 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -14186,6 +14186,7 @@ static int zend_jit_assign_obj(dasm_State **Dst, zend_jit_addr this_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, offsetof(zend_execute_data, This)); zend_jit_addr prop_addr; zend_bool needs_slow_path = 0; + zend_bool needs_val_dtor = 0; if (RETURN_VALUE_USED(opline)) { res_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FP, opline->result.var); @@ -14242,6 +14243,7 @@ static int zend_jit_assign_obj(dasm_State **Dst, } if (((opline+1)->op1_type & (IS_VAR|IS_TMP_VAR)) && (val_info & (MAY_BE_REF|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) { + needs_val_dtor = 1; | jmp >7 } else { | jmp >9 @@ -14459,6 +14461,13 @@ static int zend_jit_assign_obj(dasm_State **Dst, val_info |= MAY_BE_RC1|MAY_BE_RCN; } + |7: + | // FREE_OP_DATA(); + | FREE_OP (opline+1)->op1_type, (opline+1)->op1, val_info, 0, opline + | jmp >9 + |.code + } else if (needs_val_dtor) { + |.cold_code |7: | // FREE_OP_DATA(); | FREE_OP (opline+1)->op1_type, (opline+1)->op1, val_info, 0, opline diff --git a/ext/opcache/tests/jit/assign_obj_003.phpt b/ext/opcache/tests/jit/assign_obj_003.phpt new file mode 100644 index 0000000000000..61159d62189dc --- /dev/null +++ b/ext/opcache/tests/jit/assign_obj_003.phpt @@ -0,0 +1,37 @@ +--TEST-- +JIT ASSIGN_OBJ: Assign undefined vatiable to property +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.file_update_protection=0 +opcache.jit_buffer_size=1M +--FILE-- +previous = $firstNode; + $firstNode->next = $firstNode; + $circularDoublyLinkedList = null; + for ($i = 0; $i < 2; $i++) { + $currentNode = $circularDoublyLinkedList; + $nextNode = $circularDoublyLinkedList->next; + $newNode->next = $undef1->next; // <- ??? + $newNode = new Node(); + $currentNode->undef2 = new Node(); + $circularDoublyLinkedList = $nextNode; + } +} + +try { + @xxx(); +} catch (Throwable $e) { + echo "Exception: " . $e->getMessage() . "\n"; +} +?> +--EXPECT-- +Exception: Attempt to assign property "next" on null From 33704be5f2a4c96ab711e49ca9fb580b6bdacdc4 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 4 Apr 2022 15:06:35 +0300 Subject: [PATCH 08/78] Trcing JIT: remove unchecked type guards om ROPE_* instructions Fixes oss-fuzz #46209 --- ext/opcache/jit/zend_jit_trace.c | 4 +++- ext/opcache/tests/jit/rope_002.phpt | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 ext/opcache/tests/jit/rope_002.phpt diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index a53ac0aefea16..6a1286c58aacb 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -2062,7 +2062,9 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin case ZEND_ROPE_INIT: case ZEND_ROPE_ADD: case ZEND_ROPE_END: - ADD_OP2_TRACE_GUARD(); + if (op2_type == IS_STRING) { + ADD_OP2_TRACE_GUARD(); + } break; default: break; diff --git a/ext/opcache/tests/jit/rope_002.phpt b/ext/opcache/tests/jit/rope_002.phpt new file mode 100644 index 0000000000000..7aa7e54801fde --- /dev/null +++ b/ext/opcache/tests/jit/rope_002.phpt @@ -0,0 +1,21 @@ +--TEST-- +JIT ROPE: 002 type guards are only checked for strings +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.file_update_protection=0 +opcache.jit_buffer_size=1M +--FILE-- + +DONE +--EXPECT-- +DONE From 9cb512ecc12aafc9b4428c76288997e069193652 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Mon, 4 Apr 2022 12:20:28 +0200 Subject: [PATCH 09/78] Ensure correct target opline for exceptions thrown during yield from Also appends the exception during a yield from values dtor instead of prepending it Fixing regression introduced in 13649451c201361b438ca0f762cfb33dfc3fca39. --- ...ld_from_throw_with_throwing_exception.phpt | 28 +++++++++++++++++++ Zend/zend_generators.c | 20 +++++++++---- 2 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 Zend/tests/generators/yield_from_throw_with_throwing_exception.phpt diff --git a/Zend/tests/generators/yield_from_throw_with_throwing_exception.phpt b/Zend/tests/generators/yield_from_throw_with_throwing_exception.phpt new file mode 100644 index 0000000000000..2217670f31f84 --- /dev/null +++ b/Zend/tests/generators/yield_from_throw_with_throwing_exception.phpt @@ -0,0 +1,28 @@ +--TEST-- +Exceptions are properly appended when thrown from yield from values destruction +--FILE-- +throw(new Exception("outer")); + +?> +--EXPECTF-- +Fatal error: Uncaught Exception: outer in %s:%d +Stack trace: +#0 {main} + +Next Exception: dtor in %s:%d +Stack trace: +#0 %s(%d): class@anonymous->__destruct() +#1 [internal function]: gen() +#2 %s(%d): Generator->throw(Object(Exception)) +#3 {main} + thrown %s on line %d diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index cf09e9e379ef1..43385231fbef9 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -455,21 +455,23 @@ static void zend_generator_throw_exception(zend_generator *generator, zval *exce { zend_execute_data *original_execute_data = EG(current_execute_data); - /* if we don't stop an array/iterator yield from, the exception will only reach the generator after the values were all iterated over */ - if (UNEXPECTED(Z_TYPE(generator->values) != IS_UNDEF)) { - zval_ptr_dtor(&generator->values); - ZVAL_UNDEF(&generator->values); - } - /* Throw the exception in the context of the generator. Decrementing the opline * to pretend the exception happened during the YIELD opcode. */ EG(current_execute_data) = generator->execute_data; generator->execute_data->opline--; + if (exception) { zend_throw_exception_object(exception); } else { zend_rethrow_exception(EG(current_execute_data)); } + + /* if we don't stop an array/iterator yield from, the exception will only reach the generator after the values were all iterated over */ + if (UNEXPECTED(Z_TYPE(generator->values) != IS_UNDEF)) { + zval_ptr_dtor(&generator->values); + ZVAL_UNDEF(&generator->values); + } + generator->execute_data->opline++; EG(current_execute_data) = original_execute_data; } @@ -600,6 +602,8 @@ ZEND_API zend_generator *zend_generator_update_current(zend_generator *generator static zend_result zend_generator_get_next_delegated_value(zend_generator *generator) /* {{{ */ { + --generator->execute_data->opline; + zval *value; if (Z_TYPE(generator->values) == IS_ARRAY) { HashTable *ht = Z_ARR(generator->values); @@ -665,11 +669,15 @@ static zend_result zend_generator_get_next_delegated_value(zend_generator *gener ZVAL_LONG(&generator->key, iter->index); } } + + ++generator->execute_data->opline; return SUCCESS; failure: zval_ptr_dtor(&generator->values); ZVAL_UNDEF(&generator->values); + + ++generator->execute_data->opline; return FAILURE; } /* }}} */ From c0bb238483229fd08282a124074a5cef09b52a6c Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 4 Apr 2022 15:34:02 +0300 Subject: [PATCH 10/78] Fixed reference counting inference Fixes oss-fuzz #46084 --- ext/opcache/Optimizer/zend_inference.c | 14 ++++++++++++++ ext/opcache/tests/jit/fetch_dim_r_013.phpt | 20 ++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 ext/opcache/tests/jit/fetch_dim_r_013.phpt diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index c7514f55e2480..ca3b7dc2401b0 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -3311,6 +3311,20 @@ static zend_always_inline int _zend_update_type_info( if (opline->opcode == ZEND_FETCH_DIM_IS && (t1 & MAY_BE_STRING)) { tmp |= MAY_BE_NULL; } + if ((tmp & (MAY_BE_RC1|MAY_BE_RCN)) == MAY_BE_RCN && opline->result_type == IS_TMP_VAR) { + /* refcount may be indirectly decremented. Make an exception if the result is used in the next instruction */ + if (!ssa_opcodes) { + if (ssa->vars[ssa_op->result_def].use_chain < 0 + || opline + 1 != op_array->opcodes + ssa->vars[ssa_op->result_def].use_chain) { + tmp |= MAY_BE_RC1; + } + } else { + if (ssa->vars[ssa_op->result_def].use_chain < 0 + || opline + 1 != ssa_opcodes[ssa->vars[ssa_op->result_def].use_chain]) { + tmp |= MAY_BE_RC1; + } + } + } UPDATE_SSA_TYPE(tmp, ssa_op->result_def); break; case ZEND_FETCH_THIS: diff --git a/ext/opcache/tests/jit/fetch_dim_r_013.phpt b/ext/opcache/tests/jit/fetch_dim_r_013.phpt new file mode 100644 index 0000000000000..ff2402694de2b --- /dev/null +++ b/ext/opcache/tests/jit/fetch_dim_r_013.phpt @@ -0,0 +1,20 @@ +--TEST-- +JIT FETCH_DIM_R: 013 +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.file_update_protection=0 +opcache.jit_buffer_size=1M +--FILE-- + $tokens[$y][] = $y; + } +} +@foo(); +?> +DONE +--EXPECT-- +DONE From c489e360a67e8d523b001be3140195c2e4bc7473 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 4 Apr 2022 16:36:25 +0300 Subject: [PATCH 11/78] JIT: Fix array clobbering by user error handler Fixes oss-fuzz #46336 --- Zend/zend_vm_def.h | 13 +- Zend/zend_vm_execute.h | 368 +++++++++++++++++++++- ext/opcache/tests/jit/assign_dim_015.phpt | 19 ++ 3 files changed, 391 insertions(+), 9 deletions(-) create mode 100644 ext/opcache/tests/jit/assign_dim_015.phpt diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index e0687a23fd082..1b4ef0d084652 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2534,7 +2534,18 @@ ZEND_VM_HANDLER(23, ZEND_ASSIGN_DIM, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV, SPEC(O ZEND_VM_C_LABEL(try_assign_dim_array): SEPARATE_ARRAY(object_ptr); if (OP2_TYPE == IS_UNUSED) { - value = GET_OP_DATA_ZVAL_PTR(BP_VAR_R); + value = GET_OP_DATA_ZVAL_PTR_UNDEF(BP_VAR_R); + if (OP_DATA_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + ZEND_VM_C_GOTO(assign_dim_error); + } + } if (OP_DATA_TYPE == IS_CV || OP_DATA_TYPE == IS_VAR) { ZVAL_DEREF(value); } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 922ed92e560f2..0daa7b9e507f0 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -23245,6 +23245,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -23371,6 +23382,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -23498,6 +23520,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -23624,7 +23657,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { - value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); + value = EX_VAR((opline+1)->op1.var); + if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } @@ -25821,6 +25865,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -25947,6 +26002,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -26074,6 +26140,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -26200,7 +26277,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_ try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { - value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); + value = EX_VAR((opline+1)->op1.var); + if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } @@ -27253,6 +27341,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -27379,6 +27478,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -27506,6 +27616,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -27632,7 +27753,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_ try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { - value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); + value = EX_VAR((opline+1)->op1.var); + if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } @@ -29844,6 +29976,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -29970,6 +30113,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -30097,6 +30251,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -30223,7 +30388,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { - value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); + value = EX_VAR((opline+1)->op1.var); + if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } @@ -40799,6 +40975,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -40925,6 +41112,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -41052,6 +41250,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -41178,7 +41387,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { - value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); + value = EX_VAR((opline+1)->op1.var); + if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } @@ -44449,6 +44669,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -44575,6 +44806,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -44702,6 +44944,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -44828,7 +45081,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { - value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); + value = EX_VAR((opline+1)->op1.var); + if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } @@ -46327,6 +46591,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -46453,6 +46728,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -46580,6 +46866,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -46706,7 +47003,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { - value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); + value = EX_VAR((opline+1)->op1.var); + if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } @@ -49586,6 +49894,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); + if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } @@ -49712,6 +50031,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -49839,6 +50169,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC); + if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } @@ -49965,7 +50306,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_ try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { - value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); + value = EX_VAR((opline+1)->op1.var); + if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { + HashTable *ht = Z_ARRVAL_P(object_ptr); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { + GC_ADDREF(ht); + } + value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC); + if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) { + zend_array_destroy(ht); + goto assign_dim_error; + } + } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } diff --git a/ext/opcache/tests/jit/assign_dim_015.phpt b/ext/opcache/tests/jit/assign_dim_015.phpt new file mode 100644 index 0000000000000..fd37d84764d0a --- /dev/null +++ b/ext/opcache/tests/jit/assign_dim_015.phpt @@ -0,0 +1,19 @@ +--TEST-- +JIT ASSIGN_DIM: 015 +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.file_update_protection=0 +opcache.jit_buffer_size=1M +--FILE-- + +DONE +--EXPECT-- +Error: Undefined variable $y +DONE From 43f3745abb3392e72c67199cce654d0f29d336e7 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Tue, 5 Apr 2022 13:19:02 +0200 Subject: [PATCH 12/78] Bump version Apparently, this has been forgotten when PHP 8.0.17RC1 and 8.0.18RC1 had been tagged. We also fix the version of the fix for GH-8253, which didn't make it into PHP 8.0.18RC1. --- NEWS | 11 ++++++++--- Zend/zend.h | 2 +- configure.ac | 2 +- main/php_version.h | 6 +++--- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/NEWS b/NEWS index 19d46c3a1414e..a969cf485b4b5 100644 --- a/NEWS +++ b/NEWS @@ -1,14 +1,19 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -?? ??? 2022, PHP 8.0.18 +?? ??? 2022, PHP 8.0.19 + +- Core: + + . Fixed bug GH-8289 (Exceptions thrown within a yielded from iterator are + not rethrown into the generator). (Bob) + +14 Apr 2022, PHP 8.0.18 - Core: . Fixed freeing of internal attribute arguments. (Bob) . Fixed bug GH-8070 (memory leak of internal function attribute hash). (Tim Düsterhus) . Fixed bug GH-8160 (ZTS support on Alpine is broken). (Michael Voříšek) - . Fixed bug GH-8289 (Exceptions thrown within a yielded from iterator are - not rethrown into the generator). (Bob) - Filter: . Fixed signedness confusion in php_filter_validate_domain(). (cmb) diff --git a/Zend/zend.h b/Zend/zend.h index b1222625d552f..a9900c66d53d2 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -20,7 +20,7 @@ #ifndef ZEND_H #define ZEND_H -#define ZEND_VERSION "4.0.17-dev" +#define ZEND_VERSION "4.0.19-dev" #define ZEND_ENGINE_3 diff --git a/configure.ac b/configure.ac index a60c3533897ca..415a2f59b16cd 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,7 @@ dnl Basic autoconf initialization, generation of config.nice. dnl ---------------------------------------------------------------------------- AC_PREREQ([2.68]) -AC_INIT([PHP],[8.0.17-dev],[https://bugs.php.net],[php],[https://www.php.net]) +AC_INIT([PHP],[8.0.19-dev],[https://bugs.php.net],[php],[https://www.php.net]) AC_CONFIG_SRCDIR([main/php_version.h]) AC_CONFIG_AUX_DIR([build]) AC_PRESERVE_HELP_ORDER diff --git a/main/php_version.h b/main/php_version.h index d01736081da01..9e674b2ef6059 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -2,7 +2,7 @@ /* edit configure.ac to change version number */ #define PHP_MAJOR_VERSION 8 #define PHP_MINOR_VERSION 0 -#define PHP_RELEASE_VERSION 17 +#define PHP_RELEASE_VERSION 19 #define PHP_EXTRA_VERSION "-dev" -#define PHP_VERSION "8.0.17-dev" -#define PHP_VERSION_ID 80017 +#define PHP_VERSION "8.0.19-dev" +#define PHP_VERSION_ID 80019 From 2b4fee03affbb1d6a428da568bbff3d30d34a78f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Fri, 1 Apr 2022 08:37:17 +0200 Subject: [PATCH 13/78] Mark ext/mysqli properties as readonly for documentation purposes --- ext/mysqli/mysqli.stub.php | 155 ++++++++++++++++++++++++++++-------- ext/mysqli/mysqli_arginfo.h | 2 +- 2 files changed, 125 insertions(+), 32 deletions(-) diff --git a/ext/mysqli/mysqli.stub.php b/ext/mysqli/mysqli.stub.php index 5add2523c54b9..46d101125aa43 100644 --- a/ext/mysqli/mysqli.stub.php +++ b/ext/mysqli/mysqli.stub.php @@ -20,58 +20,112 @@ final class mysqli_driver class mysqli { - /** @link mysqli.affected-rows */ + /** + * @readonly + * @link mysqli.affected-rows + */ public int|string $affected_rows; - /** @link mysqli.get-client-info */ + /** + * @readonly + * @link mysqli.get-client-info + */ public string $client_info; - /** @link mysqli.get-client-version */ + /** + * @readonly + * @link mysqli.get-client-version + */ public int $client_version; - /** @link mysqli.connect-errno */ + /** + * @readonly + * @link mysqli.connect-errno + */ public int $connect_errno; - /** @link mysqli.connect-error */ + /** + * @readonly + * @link mysqli.connect-error + */ public ?string $connect_error; - /** @link mysqli.errno */ + /** + * @readonly + * @link mysqli.errno + */ public int $errno; - /** @link mysqli.error */ + /** + * @readonly + * @link mysqli.error + */ public string $error; - /** @link mysqli.error-list */ + /** + * @readonly + * @link mysqli.error-list + */ public array $error_list; - /** @link mysqli.field-count */ + /** + * @readonly + * @link mysqli.field-count + */ public int $field_count; - /** @link mysqli.get-host-info */ + /** + * @readonly + * @link mysqli.get-host-info + */ public string $host_info; - /** @link mysqli.info */ + /** + * @readonly + * @link mysqli.info + */ public ?string $info; - /** @link mysqli.insert-id */ + /** + * @readonly + * @link mysqli.insert-id + */ public int|string $insert_id; - /** @link mysqli.get-server-info */ + /** + * @readonly + * @link mysqli.get-server-info + */ public string $server_info; - /** @link mysqli.get-server-version */ + /** + * @readonly + * @link mysqli.get-server-version + */ public int $server_version; - /** @link mysqli.sqlstate */ + /** + * @readonly + * @link mysqli.sqlstate + */ public string $sqlstate; - /** @link mysqli.get-proto-info */ + /** + * @readonly + * @link mysqli.get-proto-info + */ public int $protocol_version; - /** @link mysqli.thread-id */ + /** + * @readonly + * @link mysqli.thread-id + */ public int $thread_id; - /** @link mysqli.warning-count */ + /** + * @readonly + * @link mysqli.warning-count + */ public int $warning_count; public function __construct( @@ -373,16 +427,28 @@ public function refresh(int $flags): bool {} class mysqli_result implements IteratorAggregate { - /** @link mysqli-result.current-field */ + /** + * @readonly + * @link mysqli-result.current-field + */ public int $current_field; - /** @link mysqli-result.field-count */ + /** + * @readonly + * @link mysqli-result.field-count + */ public int $field_count; - /** @link mysqli-result.lengths */ + /** + * @readonly + * @link mysqli-result.lengths + */ public ?array $lengths; - /** @link mysqli-result.num-rows */ + /** + * @readonly + * @link mysqli-result.num-rows + */ public int|string $num_rows; public int $type; @@ -480,31 +546,58 @@ public function getIterator(): Iterator {} class mysqli_stmt { - /** @link mysqli-stmt.affected-rows */ + /** + * @readonly + * @link mysqli-stmt.affected-rows + */ public int|string $affected_rows; - /** @link mysqli-stmt.insert-id */ + /** + * @readonly + * @link mysqli-stmt.insert-id + */ public int|string $insert_id; - /** @link mysqli-stmt.num-rows */ + /** + * @readonly + * @link mysqli-stmt.num-rows + */ public int|string $num_rows; - /** @link mysqli-stmt.param-count */ + /** + * @readonly + * @link mysqli-stmt.param-count + */ public int $param_count; - /** @link mysqli-stmt.field-count */ + /** + * @readonly + * @link mysqli-stmt.field-count + */ public int $field_count; - /** @link mysqli-stmt.errno */ + /** + * @readonly + * @link mysqli-stmt.errno + */ public int $errno; - /** @link mysqli-stmt.error */ + /** + * @readonly + * @link mysqli-stmt.error + */ public string $error; - /** @link mysqli-stmt.error-list */ + /** + * @readonly + * @link mysqli-stmt.error-list + */ public array $error_list; - /** @link mysqli-stmt.sqlstate */ + /** + * @readonly + * @link mysqli-stmt.sqlstate + */ public string $sqlstate; public int $id; diff --git a/ext/mysqli/mysqli_arginfo.h b/ext/mysqli/mysqli_arginfo.h index b01179089a507..7dd1c6b0ce886 100644 --- a/ext/mysqli/mysqli_arginfo.h +++ b/ext/mysqli/mysqli_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 7901d2cbbf9663f2c0cc140870baed0fe04c2bd1 */ + * Stub hash: 9ef8917aa1b4fe7420fe12c5629ef00f36df3256 */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_mysqli_affected_rows, 0, 1, MAY_BE_LONG|MAY_BE_STRING) ZEND_ARG_OBJ_INFO(0, mysql, mysqli, 0) From c2eafc29f5ecf49c86e5a3cb5ba9d6beda6c5ba9 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Tue, 29 Mar 2022 11:48:40 +0200 Subject: [PATCH 14/78] Fix #81714: segfault when serializing finalized HashContext We must not allow to serialize already finalized `HashContext`s, since the internal context is already freed. Since there is not much point in serializing finalized `HashContext`s, we just bail out in that case. Closes GH-8265. --- NEWS | 3 +++ ext/hash/hash.c | 3 +++ ext/hash/tests/bug81714.phpt | 14 ++++++++++++++ 3 files changed, 20 insertions(+) create mode 100644 ext/hash/tests/bug81714.phpt diff --git a/NEWS b/NEWS index a969cf485b4b5..c26dfd03a1988 100644 --- a/NEWS +++ b/NEWS @@ -18,6 +18,9 @@ PHP NEWS - Filter: . Fixed signedness confusion in php_filter_validate_domain(). (cmb) +- Hash: + . Fixed bug #81714 (segfault when serializing finalized HashContext). (cmb) + - Intl: . Fixed bug GH-8142 (Compilation error on cygwin). (David Carlier) diff --git a/ext/hash/hash.c b/ext/hash/hash.c index 4e3820f35e6b4..a1ce4ffd17063 100644 --- a/ext/hash/hash.c +++ b/ext/hash/hash.c @@ -227,6 +227,9 @@ PHP_HASH_API int php_hash_serialize_spec(const php_hashcontext_object *hash, zva size_t pos = 0, max_alignment = 1; unsigned char *buf = (unsigned char *) hash->context; zval tmp; + if (buf == NULL) { + return FAILURE; + } array_init(zv); while (*spec != '\0' && *spec != '.') { char spec_ch = *spec; diff --git a/ext/hash/tests/bug81714.phpt b/ext/hash/tests/bug81714.phpt new file mode 100644 index 0000000000000..a151bda6884e1 --- /dev/null +++ b/ext/hash/tests/bug81714.phpt @@ -0,0 +1,14 @@ +--TEST-- +Bug #81714 (segfault when serializing finalized HashContext) +--FILE-- +getMessage()); +} +?> +--EXPECTF-- +string(52) "HashContext for algorithm "md5" cannot be serialized" From 1bd9890b20fddbcc8b251210175ddb722bce926c Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Wed, 6 Apr 2022 15:25:14 +0200 Subject: [PATCH 15/78] Fix GH-8310: Registry settings are no longer recognized `zend_file_handle->filename` is a `zend_string*` pointer now, so we must not cast to `char*` but rather pass the underlying `char*`. Closes GH-8313. --- NEWS | 3 +++ main/main.c | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 3cef887680da0..01271caff937e 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 8.1.6 +- Core: + . Fixed bug GH-8310 (Registry settings are no longer recognized). (cmb) + - Date: . Fixed bug GH-7752 (DateTimeZone::getTransitions() returns insufficient data). (Derick) diff --git a/main/main.c b/main/main.c index 2a417987f3148..dc705fcdbdfe9 100644 --- a/main/main.c +++ b/main/main.c @@ -2489,7 +2489,7 @@ PHPAPI int php_execute_script(zend_file_handle *primary_file) #ifdef PHP_WIN32 if(primary_file->filename) { - UpdateIniFromRegistry((char*)primary_file->filename); + UpdateIniFromRegistry(ZSTR_VAL(primary_file->filename)); } #endif @@ -2581,7 +2581,7 @@ PHPAPI int php_execute_simple_script(zend_file_handle *primary_file, zval *ret) zend_try { #ifdef PHP_WIN32 if(primary_file->filename) { - UpdateIniFromRegistry((char*)primary_file->filename); + UpdateIniFromRegistry(ZSTR_VAL(primary_file->filename)); } #endif From 341bea37e875472e419a3c07abbfe6de22441b19 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Thu, 7 Apr 2022 10:45:17 +0100 Subject: [PATCH 16/78] Updated to version 2022.1 (2022a) --- ext/date/lib/timezonedb.h | 2136 +++++++++++++++++++------------------ 1 file changed, 1072 insertions(+), 1064 deletions(-) diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h index 411ef5b44254e..60cc4b3ab6cc9 100644 --- a/ext/date/lib/timezonedb.h +++ b/ext/date/lib/timezonedb.h @@ -270,340 +270,340 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[595] = { { "Asia/Dushanbe" , 0x0247C2 }, { "Asia/Famagusta" , 0x02493C }, { "Asia/Gaza" , 0x024D03 }, - { "Asia/Harbin" , 0x0251E7 }, - { "Asia/Hebron" , 0x02537C }, - { "Asia/Ho_Chi_Minh" , 0x025871 }, - { "Asia/Hong_Kong" , 0x025969 }, - { "Asia/Hovd" , 0x025C7C }, - { "Asia/Irkutsk" , 0x025F05 }, - { "Asia/Istanbul" , 0x026223 }, - { "Asia/Jakarta" , 0x0266DF }, - { "Asia/Jayapura" , 0x0267F0 }, - { "Asia/Jerusalem" , 0x0268DD }, - { "Asia/Kabul" , 0x026D1B }, - { "Asia/Kamchatka" , 0x026DC6 }, - { "Asia/Karachi" , 0x0270BB }, - { "Asia/Kashgar" , 0x0271D1 }, - { "Asia/Kathmandu" , 0x027262 }, - { "Asia/Katmandu" , 0x02730F }, - { "Asia/Khandyga" , 0x0273BC }, - { "Asia/Kolkata" , 0x0276ED }, - { "Asia/Krasnoyarsk" , 0x0277D5 }, - { "Asia/Kuala_Lumpur" , 0x027ADF }, - { "Asia/Kuching" , 0x027BFF }, - { "Asia/Kuwait" , 0x027D59 }, - { "Asia/Macao" , 0x027DEA }, - { "Asia/Macau" , 0x02810D }, - { "Asia/Magadan" , 0x028430 }, - { "Asia/Makassar" , 0x02873B }, - { "Asia/Manila" , 0x02884E }, - { "Asia/Muscat" , 0x028948 }, - { "Asia/Nicosia" , 0x0289D9 }, - { "Asia/Novokuznetsk" , 0x028C4D }, - { "Asia/Novosibirsk" , 0x028F40 }, - { "Asia/Omsk" , 0x029251 }, - { "Asia/Oral" , 0x02954F }, - { "Asia/Phnom_Penh" , 0x0297DB }, - { "Asia/Pontianak" , 0x02987F }, - { "Asia/Pyongyang" , 0x029998 }, - { "Asia/Qatar" , 0x029A5B }, - { "Asia/Qostanay" , 0x029AFF }, - { "Asia/Qyzylorda" , 0x029D8C }, - { "Asia/Rangoon" , 0x02A025 }, - { "Asia/Riyadh" , 0x02A0EC }, - { "Asia/Saigon" , 0x02A17D }, - { "Asia/Sakhalin" , 0x02A275 }, - { "Asia/Samarkand" , 0x02A58C }, - { "Asia/Seoul" , 0x02A717 }, - { "Asia/Shanghai" , 0x02A8C2 }, - { "Asia/Singapore" , 0x02AA63 }, - { "Asia/Srednekolymsk" , 0x02AB6F }, - { "Asia/Taipei" , 0x02AE83 }, - { "Asia/Tashkent" , 0x02B08E }, - { "Asia/Tbilisi" , 0x02B219 }, - { "Asia/Tehran" , 0x02B49A }, - { "Asia/Tel_Aviv" , 0x02BC7A }, - { "Asia/Thimbu" , 0x02C0B8 }, - { "Asia/Thimphu" , 0x02C15E }, - { "Asia/Tokyo" , 0x02C204 }, - { "Asia/Tomsk" , 0x02C2E5 }, - { "Asia/Ujung_Pandang" , 0x02C5F0 }, - { "Asia/Ulaanbaatar" , 0x02C6BA }, - { "Asia/Ulan_Bator" , 0x02C92D }, - { "Asia/Urumqi" , 0x02CB8B }, - { "Asia/Ust-Nera" , 0x02CC29 }, - { "Asia/Vientiane" , 0x02CF4C }, - { "Asia/Vladivostok" , 0x02CFF0 }, - { "Asia/Yakutsk" , 0x02D2F5 }, - { "Asia/Yangon" , 0x02D5F9 }, - { "Asia/Yekaterinburg" , 0x02D6C0 }, - { "Asia/Yerevan" , 0x02D9D2 }, - { "Atlantic/Azores" , 0x02DCA2 }, - { "Atlantic/Bermuda" , 0x02E261 }, - { "Atlantic/Canary" , 0x02E66D }, - { "Atlantic/Cape_Verde" , 0x02E865 }, - { "Atlantic/Faeroe" , 0x02E920 }, - { "Atlantic/Faroe" , 0x02EAE5 }, - { "Atlantic/Jan_Mayen" , 0x02ECAA }, - { "Atlantic/Madeira" , 0x02EF5A }, - { "Atlantic/Reykjavik" , 0x02F522 }, - { "Atlantic/South_Georgia" , 0x02F81F }, - { "Atlantic/St_Helena" , 0x02F8AF }, - { "Atlantic/Stanley" , 0x02F93D }, - { "Australia/ACT" , 0x02FC5E }, - { "Australia/Adelaide" , 0x02FFF2 }, - { "Australia/Brisbane" , 0x0303A6 }, - { "Australia/Broken_Hill" , 0x0304EA }, - { "Australia/Canberra" , 0x0308BF }, - { "Australia/Currie" , 0x030C53 }, - { "Australia/Darwin" , 0x03104A }, - { "Australia/Eucla" , 0x031152 }, - { "Australia/Hobart" , 0x0312B1 }, - { "Australia/LHI" , 0x0316B0 }, - { "Australia/Lindeman" , 0x031970 }, - { "Australia/Lord_Howe" , 0x031AE0 }, - { "Australia/Melbourne" , 0x031DB0 }, - { "Australia/North" , 0x03214C }, - { "Australia/NSW" , 0x032242 }, - { "Australia/Perth" , 0x0325D6 }, - { "Australia/Queensland" , 0x032732 }, - { "Australia/South" , 0x03285F }, - { "Australia/Sydney" , 0x032C04 }, - { "Australia/Tasmania" , 0x032FB4 }, - { "Australia/Victoria" , 0x0333AB }, - { "Australia/West" , 0x03373F }, - { "Australia/Yancowinna" , 0x03387D }, - { "Brazil/Acre" , 0x033C36 }, - { "Brazil/DeNoronha" , 0x033DE4 }, - { "Brazil/East" , 0x033FD4 }, - { "Brazil/West" , 0x034398 }, - { "Canada/Atlantic" , 0x034540 }, - { "Canada/Central" , 0x034BD4 }, - { "Canada/Eastern" , 0x0350EE }, - { "Canada/Mountain" , 0x0357AF }, - { "Canada/Newfoundland" , 0x035B85 }, - { "Canada/Pacific" , 0x0362E7 }, - { "Canada/Saskatchewan" , 0x036825 }, - { "Canada/Yukon" , 0x036AAF }, - { "CET" , 0x036EC0 }, - { "Chile/Continental" , 0x037139 }, - { "Chile/EasterIsland" , 0x037647 }, - { "CST6CDT" , 0x037AA1 }, - { "Cuba" , 0x037E64 }, - { "EET" , 0x0382CD }, - { "Egypt" , 0x0384CA }, - { "Eire" , 0x0389D2 }, - { "EST" , 0x038FB6 }, - { "EST5EDT" , 0x039031 }, - { "Etc/GMT" , 0x0393F4 }, - { "Etc/GMT+0" , 0x03946F }, - { "Etc/GMT+1" , 0x0394EA }, - { "Etc/GMT+10" , 0x039567 }, - { "Etc/GMT+11" , 0x0395E5 }, - { "Etc/GMT+12" , 0x039663 }, - { "Etc/GMT+2" , 0x0396E1 }, - { "Etc/GMT+3" , 0x03975E }, - { "Etc/GMT+4" , 0x0397DB }, - { "Etc/GMT+5" , 0x039858 }, - { "Etc/GMT+6" , 0x0398D5 }, - { "Etc/GMT+7" , 0x039952 }, - { "Etc/GMT+8" , 0x0399CF }, - { "Etc/GMT+9" , 0x039A4C }, - { "Etc/GMT-0" , 0x039AC9 }, - { "Etc/GMT-1" , 0x039B44 }, - { "Etc/GMT-10" , 0x039BC2 }, - { "Etc/GMT-11" , 0x039C41 }, - { "Etc/GMT-12" , 0x039CC0 }, - { "Etc/GMT-13" , 0x039D3F }, - { "Etc/GMT-14" , 0x039DBE }, - { "Etc/GMT-2" , 0x039E3D }, - { "Etc/GMT-3" , 0x039EBB }, - { "Etc/GMT-4" , 0x039F39 }, - { "Etc/GMT-5" , 0x039FB7 }, - { "Etc/GMT-6" , 0x03A035 }, - { "Etc/GMT-7" , 0x03A0B3 }, - { "Etc/GMT-8" , 0x03A131 }, - { "Etc/GMT-9" , 0x03A1AF }, - { "Etc/GMT0" , 0x03A22D }, - { "Etc/Greenwich" , 0x03A2A8 }, - { "Etc/UCT" , 0x03A323 }, - { "Etc/Universal" , 0x03A39E }, - { "Etc/UTC" , 0x03A419 }, - { "Etc/Zulu" , 0x03A494 }, - { "Europe/Amsterdam" , 0x03A50F }, - { "Europe/Andorra" , 0x03A94A }, - { "Europe/Astrakhan" , 0x03AADB }, - { "Europe/Athens" , 0x03ADCF }, - { "Europe/Belfast" , 0x03B085 }, - { "Europe/Belgrade" , 0x03B6D0 }, - { "Europe/Berlin" , 0x03B8BA }, - { "Europe/Bratislava" , 0x03BB9B }, - { "Europe/Brussels" , 0x03BE7A }, - { "Europe/Bucharest" , 0x03C2D5 }, - { "Europe/Budapest" , 0x03C576 }, - { "Europe/Busingen" , 0x03C880 }, - { "Europe/Chisinau" , 0x03CA85 }, - { "Europe/Copenhagen" , 0x03CD84 }, - { "Europe/Dublin" , 0x03CFFF }, - { "Europe/Gibraltar" , 0x03D5E3 }, - { "Europe/Guernsey" , 0x03DAB3 }, - { "Europe/Helsinki" , 0x03E0FE }, - { "Europe/Isle_of_Man" , 0x03E2EB }, - { "Europe/Istanbul" , 0x03E936 }, - { "Europe/Jersey" , 0x03EDF2 }, - { "Europe/Kaliningrad" , 0x03F43D }, - { "Europe/Kiev" , 0x03F7E5 }, - { "Europe/Kirov" , 0x03FA2A }, - { "Europe/Lisbon" , 0x03FD11 }, - { "Europe/Ljubljana" , 0x0402DE }, - { "Europe/London" , 0x0404C8 }, - { "Europe/Luxembourg" , 0x040B13 }, - { "Europe/Madrid" , 0x040F5E }, - { "Europe/Malta" , 0x0412FB }, - { "Europe/Mariehamn" , 0x0416A7 }, - { "Europe/Minsk" , 0x041894 }, - { "Europe/Monaco" , 0x041BC8 }, - { "Europe/Moscow" , 0x04202E }, - { "Europe/Nicosia" , 0x0423DA }, - { "Europe/Oslo" , 0x04263B }, - { "Europe/Paris" , 0x0428EB }, - { "Europe/Podgorica" , 0x042D48 }, - { "Europe/Prague" , 0x042F32 }, - { "Europe/Riga" , 0x043211 }, - { "Europe/Rome" , 0x0434D3 }, - { "Europe/Samara" , 0x043892 }, - { "Europe/San_Marino" , 0x043B93 }, - { "Europe/Sarajevo" , 0x043F52 }, - { "Europe/Saratov" , 0x04413C }, - { "Europe/Simferopol" , 0x04442E }, - { "Europe/Skopje" , 0x0447A1 }, - { "Europe/Sofia" , 0x04498B }, - { "Europe/Stockholm" , 0x044BE7 }, - { "Europe/Tallinn" , 0x044DE4 }, - { "Europe/Tirane" , 0x045093 }, - { "Europe/Tiraspol" , 0x0452FB }, - { "Europe/Ulyanovsk" , 0x0455FA }, - { "Europe/Uzhgorod" , 0x045910 }, - { "Europe/Vaduz" , 0x045B3C }, - { "Europe/Vatican" , 0x045D39 }, - { "Europe/Vienna" , 0x0460F8 }, - { "Europe/Vilnius" , 0x046396 }, - { "Europe/Volgograd" , 0x046646 }, - { "Europe/Warsaw" , 0x046943 }, - { "Europe/Zagreb" , 0x046CEA }, - { "Europe/Zaporozhye" , 0x046ED4 }, - { "Europe/Zurich" , 0x04712B }, - { "Factory" , 0x047328 }, - { "GB" , 0x0473A5 }, - { "GB-Eire" , 0x0479F0 }, - { "GMT" , 0x04803B }, - { "GMT+0" , 0x0480B6 }, - { "GMT-0" , 0x048131 }, - { "GMT0" , 0x0481AC }, - { "Greenwich" , 0x048227 }, - { "Hongkong" , 0x0482A2 }, - { "HST" , 0x0485B5 }, - { "Iceland" , 0x048631 }, - { "Indian/Antananarivo" , 0x04892E }, - { "Indian/Chagos" , 0x0489F9 }, - { "Indian/Christmas" , 0x048A9D }, - { "Indian/Cocos" , 0x048B2E }, - { "Indian/Comoro" , 0x048BC6 }, - { "Indian/Kerguelen" , 0x048C91 }, - { "Indian/Mahe" , 0x048D22 }, - { "Indian/Maldives" , 0x048DB3 }, - { "Indian/Mauritius" , 0x048E57 }, - { "Indian/Mayotte" , 0x048F16 }, - { "Indian/Reunion" , 0x048FE1 }, - { "Iran" , 0x049072 }, - { "Israel" , 0x049852 }, - { "Jamaica" , 0x049C90 }, - { "Japan" , 0x049DEF }, - { "Kwajalein" , 0x049ED0 }, - { "Libya" , 0x049FB7 }, - { "MET" , 0x04A172 }, - { "Mexico/BajaNorte" , 0x04A3EB }, - { "Mexico/BajaSur" , 0x04A7F8 }, - { "Mexico/General" , 0x04A973 }, - { "MST" , 0x04AB1B }, - { "MST7MDT" , 0x04AB96 }, - { "Navajo" , 0x04AF59 }, - { "NZ" , 0x04B377 }, - { "NZ-CHAT" , 0x04B796 }, - { "Pacific/Apia" , 0x04BACA }, - { "Pacific/Auckland" , 0x04BC6D }, - { "Pacific/Bougainville" , 0x04C0A4 }, - { "Pacific/Chatham" , 0x04C185 }, - { "Pacific/Chuuk" , 0x04C4C8 }, - { "Pacific/Easter" , 0x04C5A6 }, - { "Pacific/Efate" , 0x04CA0D }, - { "Pacific/Enderbury" , 0x04CB6F }, - { "Pacific/Fakaofo" , 0x04CC27 }, - { "Pacific/Fiji" , 0x04CCCC }, - { "Pacific/Funafuti" , 0x04CE84 }, - { "Pacific/Galapagos" , 0x04CF16 }, - { "Pacific/Gambier" , 0x04CFE2 }, - { "Pacific/Guadalcanal" , 0x04D081 }, - { "Pacific/Guam" , 0x04D113 }, - { "Pacific/Honolulu" , 0x04D27D }, - { "Pacific/Johnston" , 0x04D36C }, - { "Pacific/Kanton" , 0x04D455 }, - { "Pacific/Kiritimati" , 0x04D51C }, - { "Pacific/Kosrae" , 0x04D5E2 }, - { "Pacific/Kwajalein" , 0x04D6E6 }, - { "Pacific/Majuro" , 0x04D7D6 }, - { "Pacific/Marquesas" , 0x04D8D9 }, - { "Pacific/Midway" , 0x04D981 }, - { "Pacific/Nauru" , 0x04DA2D }, - { "Pacific/Niue" , 0x04DAF0 }, - { "Pacific/Norfolk" , 0x04DB96 }, - { "Pacific/Noumea" , 0x04DC99 }, - { "Pacific/Pago_Pago" , 0x04DD6B }, - { "Pacific/Palau" , 0x04DE09 }, - { "Pacific/Pitcairn" , 0x04DEA9 }, - { "Pacific/Pohnpei" , 0x04DF4E }, - { "Pacific/Ponape" , 0x04E03E }, - { "Pacific/Port_Moresby" , 0x04E120 }, - { "Pacific/Rarotonga" , 0x04E1E3 }, - { "Pacific/Saipan" , 0x04E385 }, - { "Pacific/Samoa" , 0x04E4EF }, - { "Pacific/Tahiti" , 0x04E58D }, - { "Pacific/Tarawa" , 0x04E62D }, - { "Pacific/Tongatapu" , 0x04E6CE }, - { "Pacific/Truk" , 0x04E7C7 }, - { "Pacific/Wake" , 0x04E896 }, - { "Pacific/Wallis" , 0x04E933 }, - { "Pacific/Yap" , 0x04E9C5 }, - { "Poland" , 0x04EA94 }, - { "Portugal" , 0x04EE3B }, - { "PRC" , 0x04F3F5 }, - { "PST8PDT" , 0x04F58A }, - { "ROC" , 0x04F94D }, - { "ROK" , 0x04FB58 }, - { "Singapore" , 0x04FD03 }, - { "Turkey" , 0x04FE0F }, - { "UCT" , 0x0502CB }, - { "Universal" , 0x050346 }, - { "US/Alaska" , 0x0503C1 }, - { "US/Aleutian" , 0x05079E }, - { "US/Arizona" , 0x050B73 }, - { "US/Central" , 0x050C6F }, - { "US/East-Indiana" , 0x051355 }, - { "US/Eastern" , 0x051574 }, - { "US/Hawaii" , 0x051C50 }, - { "US/Indiana-Starke" , 0x051D39 }, - { "US/Michigan" , 0x05213D }, - { "US/Mountain" , 0x0524CC }, - { "US/Pacific" , 0x0528EA }, - { "US/Samoa" , 0x052E04 }, - { "UTC" , 0x052EA2 }, - { "W-SU" , 0x052F1D }, - { "WET" , 0x0532B5 }, - { "Zulu" , 0x0534AF }, + { "Asia/Harbin" , 0x0251F1 }, + { "Asia/Hebron" , 0x025386 }, + { "Asia/Ho_Chi_Minh" , 0x025885 }, + { "Asia/Hong_Kong" , 0x02597D }, + { "Asia/Hovd" , 0x025C90 }, + { "Asia/Irkutsk" , 0x025F19 }, + { "Asia/Istanbul" , 0x026237 }, + { "Asia/Jakarta" , 0x0266F3 }, + { "Asia/Jayapura" , 0x026804 }, + { "Asia/Jerusalem" , 0x0268F1 }, + { "Asia/Kabul" , 0x026D2F }, + { "Asia/Kamchatka" , 0x026DDA }, + { "Asia/Karachi" , 0x0270CF }, + { "Asia/Kashgar" , 0x0271E5 }, + { "Asia/Kathmandu" , 0x027276 }, + { "Asia/Katmandu" , 0x027323 }, + { "Asia/Khandyga" , 0x0273D0 }, + { "Asia/Kolkata" , 0x027701 }, + { "Asia/Krasnoyarsk" , 0x0277E9 }, + { "Asia/Kuala_Lumpur" , 0x027AF3 }, + { "Asia/Kuching" , 0x027C13 }, + { "Asia/Kuwait" , 0x027D6D }, + { "Asia/Macao" , 0x027DFE }, + { "Asia/Macau" , 0x028121 }, + { "Asia/Magadan" , 0x028444 }, + { "Asia/Makassar" , 0x02874F }, + { "Asia/Manila" , 0x028862 }, + { "Asia/Muscat" , 0x02895C }, + { "Asia/Nicosia" , 0x0289ED }, + { "Asia/Novokuznetsk" , 0x028C61 }, + { "Asia/Novosibirsk" , 0x028F54 }, + { "Asia/Omsk" , 0x029265 }, + { "Asia/Oral" , 0x029563 }, + { "Asia/Phnom_Penh" , 0x0297EF }, + { "Asia/Pontianak" , 0x029893 }, + { "Asia/Pyongyang" , 0x0299AC }, + { "Asia/Qatar" , 0x029A6F }, + { "Asia/Qostanay" , 0x029B13 }, + { "Asia/Qyzylorda" , 0x029DA0 }, + { "Asia/Rangoon" , 0x02A039 }, + { "Asia/Riyadh" , 0x02A100 }, + { "Asia/Saigon" , 0x02A191 }, + { "Asia/Sakhalin" , 0x02A289 }, + { "Asia/Samarkand" , 0x02A5A0 }, + { "Asia/Seoul" , 0x02A72B }, + { "Asia/Shanghai" , 0x02A8D6 }, + { "Asia/Singapore" , 0x02AA77 }, + { "Asia/Srednekolymsk" , 0x02AB83 }, + { "Asia/Taipei" , 0x02AE97 }, + { "Asia/Tashkent" , 0x02B0A2 }, + { "Asia/Tbilisi" , 0x02B22D }, + { "Asia/Tehran" , 0x02B4AE }, + { "Asia/Tel_Aviv" , 0x02BC8E }, + { "Asia/Thimbu" , 0x02C0CC }, + { "Asia/Thimphu" , 0x02C172 }, + { "Asia/Tokyo" , 0x02C218 }, + { "Asia/Tomsk" , 0x02C2F9 }, + { "Asia/Ujung_Pandang" , 0x02C604 }, + { "Asia/Ulaanbaatar" , 0x02C6CE }, + { "Asia/Ulan_Bator" , 0x02C941 }, + { "Asia/Urumqi" , 0x02CB9F }, + { "Asia/Ust-Nera" , 0x02CC3D }, + { "Asia/Vientiane" , 0x02CF60 }, + { "Asia/Vladivostok" , 0x02D004 }, + { "Asia/Yakutsk" , 0x02D309 }, + { "Asia/Yangon" , 0x02D60D }, + { "Asia/Yekaterinburg" , 0x02D6D4 }, + { "Asia/Yerevan" , 0x02D9E6 }, + { "Atlantic/Azores" , 0x02DCB6 }, + { "Atlantic/Bermuda" , 0x02E275 }, + { "Atlantic/Canary" , 0x02E681 }, + { "Atlantic/Cape_Verde" , 0x02E879 }, + { "Atlantic/Faeroe" , 0x02E934 }, + { "Atlantic/Faroe" , 0x02EAF9 }, + { "Atlantic/Jan_Mayen" , 0x02ECBE }, + { "Atlantic/Madeira" , 0x02EF6E }, + { "Atlantic/Reykjavik" , 0x02F536 }, + { "Atlantic/South_Georgia" , 0x02F833 }, + { "Atlantic/St_Helena" , 0x02F8C3 }, + { "Atlantic/Stanley" , 0x02F951 }, + { "Australia/ACT" , 0x02FC72 }, + { "Australia/Adelaide" , 0x030006 }, + { "Australia/Brisbane" , 0x0303BA }, + { "Australia/Broken_Hill" , 0x0304FE }, + { "Australia/Canberra" , 0x0308D3 }, + { "Australia/Currie" , 0x030C67 }, + { "Australia/Darwin" , 0x03105E }, + { "Australia/Eucla" , 0x031166 }, + { "Australia/Hobart" , 0x0312C5 }, + { "Australia/LHI" , 0x0316C4 }, + { "Australia/Lindeman" , 0x031984 }, + { "Australia/Lord_Howe" , 0x031AF4 }, + { "Australia/Melbourne" , 0x031DC4 }, + { "Australia/North" , 0x032160 }, + { "Australia/NSW" , 0x032256 }, + { "Australia/Perth" , 0x0325EA }, + { "Australia/Queensland" , 0x032746 }, + { "Australia/South" , 0x032873 }, + { "Australia/Sydney" , 0x032C18 }, + { "Australia/Tasmania" , 0x032FC8 }, + { "Australia/Victoria" , 0x0333BF }, + { "Australia/West" , 0x033753 }, + { "Australia/Yancowinna" , 0x033891 }, + { "Brazil/Acre" , 0x033C4A }, + { "Brazil/DeNoronha" , 0x033DF8 }, + { "Brazil/East" , 0x033FE8 }, + { "Brazil/West" , 0x0343AC }, + { "Canada/Atlantic" , 0x034554 }, + { "Canada/Central" , 0x034BE8 }, + { "Canada/Eastern" , 0x035102 }, + { "Canada/Mountain" , 0x0357C3 }, + { "Canada/Newfoundland" , 0x035B99 }, + { "Canada/Pacific" , 0x0362FB }, + { "Canada/Saskatchewan" , 0x036839 }, + { "Canada/Yukon" , 0x036AC3 }, + { "CET" , 0x036ED4 }, + { "Chile/Continental" , 0x03714D }, + { "Chile/EasterIsland" , 0x03765B }, + { "CST6CDT" , 0x037AB5 }, + { "Cuba" , 0x037E78 }, + { "EET" , 0x0382E1 }, + { "Egypt" , 0x0384DE }, + { "Eire" , 0x0389E6 }, + { "EST" , 0x038FCA }, + { "EST5EDT" , 0x039045 }, + { "Etc/GMT" , 0x039408 }, + { "Etc/GMT+0" , 0x039483 }, + { "Etc/GMT+1" , 0x0394FE }, + { "Etc/GMT+10" , 0x03957B }, + { "Etc/GMT+11" , 0x0395F9 }, + { "Etc/GMT+12" , 0x039677 }, + { "Etc/GMT+2" , 0x0396F5 }, + { "Etc/GMT+3" , 0x039772 }, + { "Etc/GMT+4" , 0x0397EF }, + { "Etc/GMT+5" , 0x03986C }, + { "Etc/GMT+6" , 0x0398E9 }, + { "Etc/GMT+7" , 0x039966 }, + { "Etc/GMT+8" , 0x0399E3 }, + { "Etc/GMT+9" , 0x039A60 }, + { "Etc/GMT-0" , 0x039ADD }, + { "Etc/GMT-1" , 0x039B58 }, + { "Etc/GMT-10" , 0x039BD6 }, + { "Etc/GMT-11" , 0x039C55 }, + { "Etc/GMT-12" , 0x039CD4 }, + { "Etc/GMT-13" , 0x039D53 }, + { "Etc/GMT-14" , 0x039DD2 }, + { "Etc/GMT-2" , 0x039E51 }, + { "Etc/GMT-3" , 0x039ECF }, + { "Etc/GMT-4" , 0x039F4D }, + { "Etc/GMT-5" , 0x039FCB }, + { "Etc/GMT-6" , 0x03A049 }, + { "Etc/GMT-7" , 0x03A0C7 }, + { "Etc/GMT-8" , 0x03A145 }, + { "Etc/GMT-9" , 0x03A1C3 }, + { "Etc/GMT0" , 0x03A241 }, + { "Etc/Greenwich" , 0x03A2BC }, + { "Etc/UCT" , 0x03A337 }, + { "Etc/Universal" , 0x03A3B2 }, + { "Etc/UTC" , 0x03A42D }, + { "Etc/Zulu" , 0x03A4A8 }, + { "Europe/Amsterdam" , 0x03A523 }, + { "Europe/Andorra" , 0x03A95E }, + { "Europe/Astrakhan" , 0x03AAEF }, + { "Europe/Athens" , 0x03ADE3 }, + { "Europe/Belfast" , 0x03B099 }, + { "Europe/Belgrade" , 0x03B6E4 }, + { "Europe/Berlin" , 0x03B8CE }, + { "Europe/Bratislava" , 0x03BBAF }, + { "Europe/Brussels" , 0x03BE8E }, + { "Europe/Bucharest" , 0x03C2E9 }, + { "Europe/Budapest" , 0x03C58A }, + { "Europe/Busingen" , 0x03C894 }, + { "Europe/Chisinau" , 0x03CA99 }, + { "Europe/Copenhagen" , 0x03CD98 }, + { "Europe/Dublin" , 0x03D013 }, + { "Europe/Gibraltar" , 0x03D5F7 }, + { "Europe/Guernsey" , 0x03DAC7 }, + { "Europe/Helsinki" , 0x03E112 }, + { "Europe/Isle_of_Man" , 0x03E2FF }, + { "Europe/Istanbul" , 0x03E94A }, + { "Europe/Jersey" , 0x03EE06 }, + { "Europe/Kaliningrad" , 0x03F451 }, + { "Europe/Kiev" , 0x03F7F9 }, + { "Europe/Kirov" , 0x03FA47 }, + { "Europe/Lisbon" , 0x03FD2E }, + { "Europe/Ljubljana" , 0x0402FB }, + { "Europe/London" , 0x0404E5 }, + { "Europe/Luxembourg" , 0x040B30 }, + { "Europe/Madrid" , 0x040F7B }, + { "Europe/Malta" , 0x041318 }, + { "Europe/Mariehamn" , 0x0416C4 }, + { "Europe/Minsk" , 0x0418B1 }, + { "Europe/Monaco" , 0x041BE5 }, + { "Europe/Moscow" , 0x04204B }, + { "Europe/Nicosia" , 0x0423F7 }, + { "Europe/Oslo" , 0x042658 }, + { "Europe/Paris" , 0x042908 }, + { "Europe/Podgorica" , 0x042D65 }, + { "Europe/Prague" , 0x042F4F }, + { "Europe/Riga" , 0x04322E }, + { "Europe/Rome" , 0x0434F0 }, + { "Europe/Samara" , 0x0438AF }, + { "Europe/San_Marino" , 0x043BB0 }, + { "Europe/Sarajevo" , 0x043F6F }, + { "Europe/Saratov" , 0x044159 }, + { "Europe/Simferopol" , 0x04444B }, + { "Europe/Skopje" , 0x0447BE }, + { "Europe/Sofia" , 0x0449A8 }, + { "Europe/Stockholm" , 0x044C04 }, + { "Europe/Tallinn" , 0x044E01 }, + { "Europe/Tirane" , 0x0450B0 }, + { "Europe/Tiraspol" , 0x045318 }, + { "Europe/Ulyanovsk" , 0x045617 }, + { "Europe/Uzhgorod" , 0x04592D }, + { "Europe/Vaduz" , 0x045B62 }, + { "Europe/Vatican" , 0x045D5F }, + { "Europe/Vienna" , 0x04611E }, + { "Europe/Vilnius" , 0x0463BC }, + { "Europe/Volgograd" , 0x04666C }, + { "Europe/Warsaw" , 0x046969 }, + { "Europe/Zagreb" , 0x046D10 }, + { "Europe/Zaporozhye" , 0x046EFA }, + { "Europe/Zurich" , 0x04715A }, + { "Factory" , 0x047357 }, + { "GB" , 0x0473D4 }, + { "GB-Eire" , 0x047A1F }, + { "GMT" , 0x04806A }, + { "GMT+0" , 0x0480E5 }, + { "GMT-0" , 0x048160 }, + { "GMT0" , 0x0481DB }, + { "Greenwich" , 0x048256 }, + { "Hongkong" , 0x0482D1 }, + { "HST" , 0x0485E4 }, + { "Iceland" , 0x048660 }, + { "Indian/Antananarivo" , 0x04895D }, + { "Indian/Chagos" , 0x048A28 }, + { "Indian/Christmas" , 0x048ACC }, + { "Indian/Cocos" , 0x048B5D }, + { "Indian/Comoro" , 0x048BF5 }, + { "Indian/Kerguelen" , 0x048CC0 }, + { "Indian/Mahe" , 0x048D51 }, + { "Indian/Maldives" , 0x048DE2 }, + { "Indian/Mauritius" , 0x048E86 }, + { "Indian/Mayotte" , 0x048F45 }, + { "Indian/Reunion" , 0x049010 }, + { "Iran" , 0x0490A1 }, + { "Israel" , 0x049881 }, + { "Jamaica" , 0x049CBF }, + { "Japan" , 0x049E1E }, + { "Kwajalein" , 0x049EFF }, + { "Libya" , 0x049FE6 }, + { "MET" , 0x04A1A1 }, + { "Mexico/BajaNorte" , 0x04A41A }, + { "Mexico/BajaSur" , 0x04A827 }, + { "Mexico/General" , 0x04A9A2 }, + { "MST" , 0x04AB4A }, + { "MST7MDT" , 0x04ABC5 }, + { "Navajo" , 0x04AF88 }, + { "NZ" , 0x04B3A6 }, + { "NZ-CHAT" , 0x04B7C5 }, + { "Pacific/Apia" , 0x04BAF9 }, + { "Pacific/Auckland" , 0x04BC9C }, + { "Pacific/Bougainville" , 0x04C0D3 }, + { "Pacific/Chatham" , 0x04C1B4 }, + { "Pacific/Chuuk" , 0x04C4F7 }, + { "Pacific/Easter" , 0x04C5D5 }, + { "Pacific/Efate" , 0x04CA3C }, + { "Pacific/Enderbury" , 0x04CB9E }, + { "Pacific/Fakaofo" , 0x04CC56 }, + { "Pacific/Fiji" , 0x04CCFB }, + { "Pacific/Funafuti" , 0x04CEB3 }, + { "Pacific/Galapagos" , 0x04CF45 }, + { "Pacific/Gambier" , 0x04D011 }, + { "Pacific/Guadalcanal" , 0x04D0B0 }, + { "Pacific/Guam" , 0x04D142 }, + { "Pacific/Honolulu" , 0x04D2AC }, + { "Pacific/Johnston" , 0x04D39B }, + { "Pacific/Kanton" , 0x04D484 }, + { "Pacific/Kiritimati" , 0x04D54B }, + { "Pacific/Kosrae" , 0x04D611 }, + { "Pacific/Kwajalein" , 0x04D715 }, + { "Pacific/Majuro" , 0x04D805 }, + { "Pacific/Marquesas" , 0x04D908 }, + { "Pacific/Midway" , 0x04D9B0 }, + { "Pacific/Nauru" , 0x04DA5C }, + { "Pacific/Niue" , 0x04DB1F }, + { "Pacific/Norfolk" , 0x04DBC5 }, + { "Pacific/Noumea" , 0x04DCC8 }, + { "Pacific/Pago_Pago" , 0x04DD9A }, + { "Pacific/Palau" , 0x04DE38 }, + { "Pacific/Pitcairn" , 0x04DED8 }, + { "Pacific/Pohnpei" , 0x04DF7D }, + { "Pacific/Ponape" , 0x04E06D }, + { "Pacific/Port_Moresby" , 0x04E14F }, + { "Pacific/Rarotonga" , 0x04E212 }, + { "Pacific/Saipan" , 0x04E3B4 }, + { "Pacific/Samoa" , 0x04E51E }, + { "Pacific/Tahiti" , 0x04E5BC }, + { "Pacific/Tarawa" , 0x04E65C }, + { "Pacific/Tongatapu" , 0x04E6FD }, + { "Pacific/Truk" , 0x04E7F6 }, + { "Pacific/Wake" , 0x04E8C5 }, + { "Pacific/Wallis" , 0x04E962 }, + { "Pacific/Yap" , 0x04E9F4 }, + { "Poland" , 0x04EAC3 }, + { "Portugal" , 0x04EE6A }, + { "PRC" , 0x04F424 }, + { "PST8PDT" , 0x04F5B9 }, + { "ROC" , 0x04F97C }, + { "ROK" , 0x04FB87 }, + { "Singapore" , 0x04FD32 }, + { "Turkey" , 0x04FE3E }, + { "UCT" , 0x0502FA }, + { "Universal" , 0x050375 }, + { "US/Alaska" , 0x0503F0 }, + { "US/Aleutian" , 0x0507CD }, + { "US/Arizona" , 0x050BA2 }, + { "US/Central" , 0x050C9E }, + { "US/East-Indiana" , 0x051384 }, + { "US/Eastern" , 0x0515A3 }, + { "US/Hawaii" , 0x051C7F }, + { "US/Indiana-Starke" , 0x051D68 }, + { "US/Michigan" , 0x05216C }, + { "US/Mountain" , 0x0524FB }, + { "US/Pacific" , 0x052919 }, + { "US/Samoa" , 0x052E33 }, + { "UTC" , 0x052ED1 }, + { "W-SU" , 0x052F4C }, + { "WET" , 0x0532E4 }, + { "Zulu" , 0x0534DE }, }; -const unsigned char timelib_timezone_db_data_builtin[341290] = { +const unsigned char timelib_timezone_db_data_builtin[341337] = { /* Africa/Abidjan */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -7531,9 +7531,9 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x14, 0xFF, -0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, -0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, -0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, +0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, +0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, +0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, @@ -7596,7 +7596,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, -0x03, 0x05, 0x06, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, +0x03, 0x05, 0x06, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, @@ -8018,9 +8018,9 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0xFF, -0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, -0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, -0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, +0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, +0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, +0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, @@ -8086,8 +8086,8 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, -0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x00, 0xFF, -0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, +0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x00, 0xFF, +0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x0A, 0x3C, 0x2D, 0x30, 0x34, 0x3E, 0x34, 0x3C, 0x2D, 0x30, 0x33, 0x3E, 0x2C, 0x4D, 0x39, @@ -10702,7 +10702,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x59, 0xCF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0xFA, 0xA6, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x38, 0x9C, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE5, 0xEB, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xAC, 0xFE, 0x00, 0xFF, @@ -10761,21 +10761,21 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x5A, 0xB5, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, -0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7B, 0x1D, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x20, 0x50, -0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, -0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, -0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x0A, -0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, -0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x35, 0x2F, 0x31, 0x0A, 0x00, 0xB9, -0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, -0x74, 0x72, 0x69, 0x70, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x20, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, +0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, +0x20, 0x00, 0x11, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, +0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, +0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x37, 0x32, 0x2C, 0x4D, 0x31, 0x30, +0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x32, 0x35, 0x0A, 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, +0x00, 0x00, 0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, /* Asia/Harbin */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -10811,7 +10811,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x59, 0xCF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0xFA, 0xA6, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x38, 0x9C, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE5, 0xEB, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xAC, 0xFE, 0x00, 0xFF, @@ -10871,21 +10871,21 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x5A, 0xB5, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, -0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7B, 0x1D, 0x60, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, +0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, -0x20, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, -0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x4C, 0x4D, 0x54, 0x00, -0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, -0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, -0x2E, 0x34, 0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x35, 0x2F, 0x31, 0x0A, -0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, 0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, 0x74, -0x20, 0x42, 0x61, 0x6E, 0x6B, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x20, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x2A, +0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, +0x00, 0x1C, 0x20, 0x00, 0x11, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, +0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, +0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x37, 0x32, 0x2C, 0x4D, +0x31, 0x30, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x32, 0x35, 0x0A, 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, +0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, 0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, /* Asia/Ho_Chi_Minh */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x56, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -15680,9 +15680,9 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0xFF, -0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, -0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, -0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, +0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, +0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, +0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, @@ -15748,8 +15748,8 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, -0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x00, 0xFF, -0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, +0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x00, 0xFF, +0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x0A, 0x3C, 0x2D, 0x30, 0x34, 0x3E, 0x34, 0x3C, 0x2D, 0x30, 0x33, 0x3E, 0x2C, 0x4D, 0x39, @@ -17987,7 +17987,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC7, 0x64, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA7, 0x64, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA, 0xCD, 0x2E, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, @@ -18002,23 +18002,23 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x20, 0xE0, 0x00, -0x00, 0x00, 0x00, 0x28, 0xE5, 0x17, 0x80, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, -0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x01, -0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, -0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, -0x07, 0x02, 0x07, 0x02, 0x07, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, -0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x1D, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, -0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, -0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, -0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, -0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD6, 0x48, 0xC5, 0x01, 0x41, 0x39, 0x12, 0x00, 0x00, 0x00, -0x14, 0x55, 0x6B, 0x72, 0x61, 0x69, 0x6E, 0x65, 0x20, 0x28, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x61, -0x72, 0x65, 0x61, 0x73, 0x29, +0x00, 0x00, 0x00, 0x28, 0xE5, 0x17, 0x80, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, +0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, +0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x01, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, +0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, +0x03, 0x06, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x00, 0x00, +0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, +0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, +0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x4C, 0x4D, +0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, +0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, +0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, +0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD6, +0x48, 0xC5, 0x01, 0x41, 0x39, 0x12, 0x00, 0x00, 0x00, 0x14, 0x55, 0x6B, 0x72, 0x61, 0x69, 0x6E, +0x65, 0x20, 0x28, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x61, 0x72, 0x65, 0x61, 0x73, 0x29, /* Europe/Kirov */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -19279,9 +19279,9 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x2E, 0xF0, 0x00, -0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2D, 0xC2, 0xC6, 0xD0, 0x00, +0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0xC2, 0xC6, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x85, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0x84, 0x50, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x67, 0x40, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xA0, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, @@ -19617,7 +19617,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1E, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0x6A, 0xEE, 0xB0, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x09, 0x71, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x92, 0x34, 0x10, 0xFF, @@ -19632,21 +19632,22 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x2E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x42, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, -0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x01, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x00, 0x00, 0x14, 0xE8, -0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, -0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, -0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, -0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, -0x45, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, -0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, -0x34, 0x0A, 0x00, 0xD3, 0x83, 0x22, 0x01, 0x34, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x0E, 0x54, 0x72, -0x61, 0x6E, 0x73, 0x63, 0x61, 0x72, 0x70, 0x61, 0x74, 0x68, 0x69, 0x61, +0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, +0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, +0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x01, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, +0x05, 0x06, 0x05, 0x06, 0x05, 0x00, 0x00, 0x14, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, +0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, +0x30, 0x00, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x4C, +0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, +0x4D, 0x53, 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, +0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, +0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD3, 0x83, 0x22, 0x01, +0x34, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x0E, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x63, 0x61, 0x72, 0x70, +0x61, 0x74, 0x68, 0x69, 0x61, /* Europe/Vaduz */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x4C, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -19984,7 +19985,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC3, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA3, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA, 0xAA, 0xE7, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, @@ -20000,23 +20001,24 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x27, 0x70, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE4, 0xED, 0x50, 0x00, -0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, -0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x01, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, -0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, -0x03, 0x06, 0x03, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x00, 0x00, -0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x20, 0xD0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, -0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x1C, 0x20, -0x01, 0x16, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1B, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x4C, 0x4D, -0x54, 0x00, 0x2B, 0x30, 0x32, 0x32, 0x30, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, -0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, -0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, -0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, -0x00, 0xD2, 0x51, 0x25, 0x01, 0x48, 0x51, 0x7A, 0x00, 0x00, 0x00, 0x1B, 0x5A, 0x61, 0x70, 0x6F, -0x72, 0x6F, 0x7A, 0x68, 0x79, 0x65, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x65, 0x61, 0x73, 0x74, 0x20, -0x4C, 0x75, 0x67, 0x61, 0x6E, 0x73, 0x6B, +0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, +0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x01, +0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, +0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x07, 0x02, 0x07, 0x02, 0x07, +0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x20, +0xD0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, +0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x38, 0x40, 0x01, +0x1B, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x4C, 0x4D, 0x54, 0x00, 0x2B, 0x30, 0x32, 0x32, 0x30, +0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, +0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, +0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, +0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD2, 0x51, 0x25, 0x01, 0x48, 0x51, +0x7A, 0x00, 0x00, 0x00, 0x1B, 0x5A, 0x61, 0x70, 0x6F, 0x72, 0x6F, 0x7A, 0x68, 0x79, 0x65, 0x20, +0x61, 0x6E, 0x64, 0x20, 0x65, 0x61, 0x73, 0x74, 0x20, 0x4C, 0x75, 0x67, 0x61, 0x6E, 0x73, 0x6B, + /* Europe/Zurich */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -23690,340 +23692,340 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[595] = { { "Asia/Dushanbe" , 0x0476ED }, { "Asia/Famagusta" , 0x047948 }, { "Asia/Gaza" , 0x04814F }, - { "Asia/Harbin" , 0x048ADA }, - { "Asia/Hebron" , 0x048D17 }, - { "Asia/Ho_Chi_Minh" , 0x0496BD }, - { "Asia/Hong_Kong" , 0x049828 }, - { "Asia/Hovd" , 0x049CE7 }, - { "Asia/Irkutsk" , 0x04A099 }, - { "Asia/Istanbul" , 0x04A59A }, - { "Asia/Jakarta" , 0x04AD41 }, - { "Asia/Jayapura" , 0x04AEBD }, - { "Asia/Jerusalem" , 0x04AFDC }, - { "Asia/Kabul" , 0x04B93C }, - { "Asia/Kamchatka" , 0x04BA18 }, - { "Asia/Karachi" , 0x04BEC4 }, - { "Asia/Kashgar" , 0x04C04B }, - { "Asia/Kathmandu" , 0x04C0FC }, - { "Asia/Katmandu" , 0x04C1DC }, - { "Asia/Khandyga" , 0x04C2BC }, - { "Asia/Kolkata" , 0x04C7DD }, - { "Asia/Krasnoyarsk" , 0x04C906 }, - { "Asia/Kuala_Lumpur" , 0x04CDE2 }, - { "Asia/Kuching" , 0x04CF81 }, - { "Asia/Kuwait" , 0x04D17E }, - { "Asia/Macao" , 0x04D22F }, - { "Asia/Macau" , 0x04D706 }, - { "Asia/Magadan" , 0x04DBDD }, - { "Asia/Makassar" , 0x04E0BF }, - { "Asia/Manila" , 0x04E212 }, - { "Asia/Muscat" , 0x04E366 }, - { "Asia/Nicosia" , 0x04E417 }, - { "Asia/Novokuznetsk" , 0x04EC08 }, - { "Asia/Novosibirsk" , 0x04F0B2 }, - { "Asia/Omsk" , 0x04F597 }, - { "Asia/Oral" , 0x04FA67 }, - { "Asia/Phnom_Penh" , 0x04FE6F }, - { "Asia/Pontianak" , 0x04FF42 }, - { "Asia/Pyongyang" , 0x0500C5 }, - { "Asia/Qatar" , 0x0501BE }, - { "Asia/Qostanay" , 0x050291 }, - { "Asia/Qyzylorda" , 0x0506AA }, - { "Asia/Rangoon" , 0x050AD4 }, - { "Asia/Riyadh" , 0x050BEC }, - { "Asia/Saigon" , 0x050C9D }, - { "Asia/Sakhalin" , 0x050E08 }, - { "Asia/Samarkand" , 0x0512DE }, - { "Asia/Seoul" , 0x05153C }, - { "Asia/Shanghai" , 0x0517B1 }, - { "Asia/Singapore" , 0x0519FA }, - { "Asia/Srednekolymsk" , 0x051B85 }, - { "Asia/Taipei" , 0x05206B }, - { "Asia/Tashkent" , 0x052370 }, - { "Asia/Tbilisi" , 0x0525DC }, - { "Asia/Tehran" , 0x0529F3 }, - { "Asia/Tel_Aviv" , 0x053415 }, - { "Asia/Thimbu" , 0x053D75 }, - { "Asia/Thimphu" , 0x053E4C }, - { "Asia/Tokyo" , 0x053F23 }, - { "Asia/Tomsk" , 0x054064 }, - { "Asia/Ujung_Pandang" , 0x054543 }, - { "Asia/Ulaanbaatar" , 0x05464D }, - { "Asia/Ulan_Bator" , 0x0549E9 }, - { "Asia/Urumqi" , 0x054D70 }, - { "Asia/Ust-Nera" , 0x054E2E }, - { "Asia/Vientiane" , 0x055332 }, - { "Asia/Vladivostok" , 0x055405 }, - { "Asia/Yakutsk" , 0x0558DC }, - { "Asia/Yangon" , 0x055DB2 }, - { "Asia/Yekaterinburg" , 0x055ECA }, - { "Asia/Yerevan" , 0x0563BF }, - { "Atlantic/Azores" , 0x05684A }, - { "Atlantic/Bermuda" , 0x057614 }, - { "Atlantic/Canary" , 0x057F7C }, - { "Atlantic/Cape_Verde" , 0x0586FF }, - { "Atlantic/Faeroe" , 0x058819 }, - { "Atlantic/Faroe" , 0x058F3C }, - { "Atlantic/Jan_Mayen" , 0x05965F }, - { "Atlantic/Madeira" , 0x059F1F }, - { "Atlantic/Reykjavik" , 0x05ACE9 }, - { "Atlantic/South_Georgia" , 0x05B17F }, - { "Atlantic/St_Helena" , 0x05B22F }, - { "Atlantic/Stanley" , 0x05B2CF }, - { "Australia/ACT" , 0x05B799 }, - { "Australia/Adelaide" , 0x05C033 }, - { "Australia/Brisbane" , 0x05C8EE }, - { "Australia/Broken_Hill" , 0x05CAB4 }, - { "Australia/Canberra" , 0x05D391 }, - { "Australia/Currie" , 0x05DC2B }, - { "Australia/Darwin" , 0x05E56D }, - { "Australia/Eucla" , 0x05E6D0 }, - { "Australia/Hobart" , 0x05E8CB }, - { "Australia/LHI" , 0x05F215 }, - { "Australia/Lindeman" , 0x05F965 }, - { "Australia/Lord_Howe" , 0x05FB6B }, - { "Australia/Melbourne" , 0x0602CB }, - { "Australia/North" , 0x060B6D }, - { "Australia/NSW" , 0x060CBE }, - { "Australia/Perth" , 0x061558 }, - { "Australia/Queensland" , 0x061740 }, - { "Australia/South" , 0x0618EF }, - { "Australia/Sydney" , 0x06219B }, - { "Australia/Tasmania" , 0x062A51 }, - { "Australia/Victoria" , 0x063393 }, - { "Australia/West" , 0x063C2D }, - { "Australia/Yancowinna" , 0x063DF7 }, - { "Brazil/Acre" , 0x0646B8 }, - { "Brazil/DeNoronha" , 0x064938 }, - { "Brazil/East" , 0x064C10 }, - { "Brazil/West" , 0x0651C0 }, - { "Canada/Atlantic" , 0x065428 }, - { "Canada/Central" , 0x066194 }, - { "Canada/Eastern" , 0x066CD4 }, - { "Canada/Mountain" , 0x067A86 }, - { "Canada/Newfoundland" , 0x0683AE }, - { "Canada/Pacific" , 0x069201 }, - { "Canada/Saskatchewan" , 0x069D59 }, - { "Canada/Yukon" , 0x06A139 }, - { "CET" , 0x06A793 }, - { "Chile/Continental" , 0x06AFCD }, - { "Chile/EasterIsland" , 0x06B9BA }, - { "CST6CDT" , 0x06C27F }, - { "Cuba" , 0x06CB91 }, - { "EET" , 0x06D50D }, - { "Egypt" , 0x06DC8D }, - { "Eire" , 0x06E43C }, - { "EST" , 0x06F1EC }, - { "EST5EDT" , 0x06F26A }, - { "Etc/GMT" , 0x06FB7C }, - { "Etc/GMT+0" , 0x06FBFA }, - { "Etc/GMT+1" , 0x06FC78 }, - { "Etc/GMT+10" , 0x06FCF8 }, - { "Etc/GMT+11" , 0x06FD79 }, - { "Etc/GMT+12" , 0x06FDFA }, - { "Etc/GMT+2" , 0x06FE7B }, - { "Etc/GMT+3" , 0x06FEFB }, - { "Etc/GMT+4" , 0x06FF7B }, - { "Etc/GMT+5" , 0x06FFFB }, - { "Etc/GMT+6" , 0x07007B }, - { "Etc/GMT+7" , 0x0700FB }, - { "Etc/GMT+8" , 0x07017B }, - { "Etc/GMT+9" , 0x0701FB }, - { "Etc/GMT-0" , 0x07027B }, - { "Etc/GMT-1" , 0x0702F9 }, - { "Etc/GMT-10" , 0x07037A }, - { "Etc/GMT-11" , 0x0703FC }, - { "Etc/GMT-12" , 0x07047E }, - { "Etc/GMT-13" , 0x070500 }, - { "Etc/GMT-14" , 0x070582 }, - { "Etc/GMT-2" , 0x070604 }, - { "Etc/GMT-3" , 0x070685 }, - { "Etc/GMT-4" , 0x070706 }, - { "Etc/GMT-5" , 0x070787 }, - { "Etc/GMT-6" , 0x070808 }, - { "Etc/GMT-7" , 0x070889 }, - { "Etc/GMT-8" , 0x07090A }, - { "Etc/GMT-9" , 0x07098B }, - { "Etc/GMT0" , 0x070A0C }, - { "Etc/Greenwich" , 0x070A8A }, - { "Etc/UCT" , 0x070B08 }, - { "Etc/Universal" , 0x070B86 }, - { "Etc/UTC" , 0x070C04 }, - { "Etc/Zulu" , 0x070C82 }, - { "Europe/Amsterdam" , 0x070D00 }, - { "Europe/Andorra" , 0x07186A }, - { "Europe/Astrakhan" , 0x071F44 }, - { "Europe/Athens" , 0x0723EF }, - { "Europe/Belfast" , 0x072CD1 }, - { "Europe/Belgrade" , 0x073B1D }, - { "Europe/Berlin" , 0x0742A9 }, - { "Europe/Bratislava" , 0x074BC3 }, - { "Europe/Brussels" , 0x0754CC }, - { "Europe/Bucharest" , 0x07604D }, - { "Europe/Budapest" , 0x0768E1 }, - { "Europe/Busingen" , 0x07722D }, - { "Europe/Chisinau" , 0x0779B6 }, - { "Europe/Copenhagen" , 0x078318 }, - { "Europe/Dublin" , 0x078B7D }, - { "Europe/Gibraltar" , 0x07992D }, - { "Europe/Guernsey" , 0x07A525 }, - { "Europe/Helsinki" , 0x07B371 }, - { "Europe/Isle_of_Man" , 0x07BAE9 }, - { "Europe/Istanbul" , 0x07C935 }, - { "Europe/Jersey" , 0x07D0DC }, - { "Europe/Kaliningrad" , 0x07DF28 }, - { "Europe/Kiev" , 0x07E51D }, - { "Europe/Kirov" , 0x07ED65 }, - { "Europe/Lisbon" , 0x07F200 }, - { "Europe/Ljubljana" , 0x07FFC8 }, - { "Europe/London" , 0x080754 }, - { "Europe/Luxembourg" , 0x0815A0 }, - { "Europe/Madrid" , 0x08212E }, - { "Europe/Malta" , 0x082B80 }, - { "Europe/Mariehamn" , 0x0835C8 }, - { "Europe/Minsk" , 0x083D40 }, - { "Europe/Monaco" , 0x084275 }, - { "Europe/Moscow" , 0x084E01 }, - { "Europe/Nicosia" , 0x085420 }, - { "Europe/Oslo" , 0x085BFE }, - { "Europe/Paris" , 0x0864BE }, - { "Europe/Podgorica" , 0x08705C }, - { "Europe/Prague" , 0x0877E8 }, - { "Europe/Riga" , 0x0880F1 }, - { "Europe/Rome" , 0x088993 }, - { "Europe/Samara" , 0x0893F0 }, - { "Europe/San_Marino" , 0x0898D4 }, - { "Europe/Sarajevo" , 0x08A331 }, - { "Europe/Saratov" , 0x08AABD }, - { "Europe/Simferopol" , 0x08AF78 }, - { "Europe/Skopje" , 0x08B537 }, - { "Europe/Sofia" , 0x08BCC3 }, - { "Europe/Stockholm" , 0x08C4EC }, - { "Europe/Tallinn" , 0x08CC6D }, - { "Europe/Tirane" , 0x08D4DD }, - { "Europe/Tiraspol" , 0x08DD0D }, - { "Europe/Ulyanovsk" , 0x08E66F }, - { "Europe/Uzhgorod" , 0x08EB80 }, - { "Europe/Vaduz" , 0x08F39C }, - { "Europe/Vatican" , 0x08FB1D }, - { "Europe/Vienna" , 0x09057A }, - { "Europe/Vilnius" , 0x090E1E }, - { "Europe/Volgograd" , 0x09169C }, - { "Europe/Warsaw" , 0x091B47 }, - { "Europe/Zagreb" , 0x0925B1 }, - { "Europe/Zaporozhye" , 0x092D3D }, - { "Europe/Zurich" , 0x09359E }, - { "Factory" , 0x093D1F }, - { "GB" , 0x093D9F }, - { "GB-Eire" , 0x094BEB }, - { "GMT" , 0x095A37 }, - { "GMT+0" , 0x095AB5 }, - { "GMT-0" , 0x095B33 }, - { "GMT0" , 0x095BB1 }, - { "Greenwich" , 0x095C2F }, - { "Hongkong" , 0x095CAD }, - { "HST" , 0x09616C }, - { "Iceland" , 0x0961EB }, - { "Indian/Antananarivo" , 0x096681 }, - { "Indian/Chagos" , 0x096796 }, - { "Indian/Christmas" , 0x096869 }, - { "Indian/Cocos" , 0x09691A }, - { "Indian/Comoro" , 0x0969D4 }, - { "Indian/Kerguelen" , 0x096AE9 }, - { "Indian/Mahe" , 0x096B9A }, - { "Indian/Maldives" , 0x096C4B }, - { "Indian/Mauritius" , 0x096D1E }, - { "Indian/Mayotte" , 0x096E1B }, - { "Indian/Reunion" , 0x096F30 }, - { "Iran" , 0x096FE1 }, - { "Israel" , 0x097A03 }, - { "Jamaica" , 0x098363 }, - { "Japan" , 0x098551 }, - { "Kwajalein" , 0x098692 }, - { "Libya" , 0x0987DA }, - { "MET" , 0x098A57 }, - { "Mexico/BajaNorte" , 0x099291 }, - { "Mexico/BajaSur" , 0x099BC3 }, - { "Mexico/General" , 0x09A1C5 }, - { "MST" , 0x09A801 }, - { "MST7MDT" , 0x09A87F }, - { "Navajo" , 0x09B191 }, - { "NZ" , 0x09BB29 }, - { "NZ-CHAT" , 0x09C4BA }, - { "Pacific/Apia" , 0x09CCDA }, - { "Pacific/Auckland" , 0x09CF4A }, - { "Pacific/Bougainville" , 0x09D8F3 }, - { "Pacific/Chatham" , 0x09DA17 }, - { "Pacific/Chuuk" , 0x09E246 }, - { "Pacific/Easter" , 0x09E36E }, - { "Pacific/Efate" , 0x09EC40 }, - { "Pacific/Enderbury" , 0x09EE66 }, - { "Pacific/Fakaofo" , 0x09EF5C }, - { "Pacific/Fiji" , 0x09F030 }, - { "Pacific/Funafuti" , 0x09F455 }, - { "Pacific/Galapagos" , 0x09F507 }, - { "Pacific/Gambier" , 0x09F612 }, - { "Pacific/Guadalcanal" , 0x09F6D1 }, - { "Pacific/Guam" , 0x09F783 }, - { "Pacific/Honolulu" , 0x09F97D }, - { "Pacific/Johnston" , 0x09FAD8 }, - { "Pacific/Kanton" , 0x09FC2D }, - { "Pacific/Kiritimati" , 0x09FD32 }, - { "Pacific/Kosrae" , 0x09FE38 }, - { "Pacific/Kwajalein" , 0x09FFA9 }, - { "Pacific/Majuro" , 0x0A00FA }, - { "Pacific/Marquesas" , 0x0A0259 }, - { "Pacific/Midway" , 0x0A0323 }, - { "Pacific/Nauru" , 0x0A03EC }, - { "Pacific/Niue" , 0x0A04F4 }, - { "Pacific/Norfolk" , 0x0A05CB }, - { "Pacific/Noumea" , 0x0A0947 }, - { "Pacific/Pago_Pago" , 0x0A0A83 }, - { "Pacific/Palau" , 0x0A0B3E }, - { "Pacific/Pitcairn" , 0x0A0BFE }, - { "Pacific/Pohnpei" , 0x0A0CD4 }, - { "Pacific/Ponape" , 0x0A0E1D }, - { "Pacific/Port_Moresby" , 0x0A0F58 }, - { "Pacific/Rarotonga" , 0x0A103B }, - { "Pacific/Saipan" , 0x0A12A2 }, - { "Pacific/Samoa" , 0x0A149C }, - { "Pacific/Tahiti" , 0x0A1557 }, - { "Pacific/Tarawa" , 0x0A1617 }, - { "Pacific/Tongatapu" , 0x0A16D8 }, - { "Pacific/Truk" , 0x0A1858 }, - { "Pacific/Wake" , 0x0A1971 }, - { "Pacific/Wallis" , 0x0A1A2E }, - { "Pacific/Yap" , 0x0A1AE0 }, - { "Poland" , 0x0A1BF9 }, - { "Portugal" , 0x0A2663 }, - { "PRC" , 0x0A3418 }, - { "PST8PDT" , 0x0A3655 }, - { "ROC" , 0x0A3F67 }, - { "ROK" , 0x0A426C }, - { "Singapore" , 0x0A44E1 }, - { "Turkey" , 0x0A466C }, - { "UCT" , 0x0A4E13 }, - { "Universal" , 0x0A4E91 }, - { "US/Alaska" , 0x0A4F0F }, - { "US/Aleutian" , 0x0A585E }, - { "US/Arizona" , 0x0A619E }, - { "US/Central" , 0x0A62F2 }, - { "US/East-Indiana" , 0x0A70F6 }, - { "US/Eastern" , 0x0A7784 }, - { "US/Hawaii" , 0x0A8560 }, - { "US/Indiana-Starke" , 0x0A86B5 }, - { "US/Michigan" , 0x0A903D }, - { "US/Mountain" , 0x0A98FF }, - { "US/Pacific" , 0x0AA297 }, - { "US/Samoa" , 0x0AADB7 }, - { "UTC" , 0x0AAE72 }, - { "W-SU" , 0x0AAEF0 }, - { "WET" , 0x0AB4FB }, - { "Zulu" , 0x0ABC78 }, + { "Asia/Harbin" , 0x048ADB }, + { "Asia/Hebron" , 0x048D18 }, + { "Asia/Ho_Chi_Minh" , 0x0496BF }, + { "Asia/Hong_Kong" , 0x04982A }, + { "Asia/Hovd" , 0x049CE9 }, + { "Asia/Irkutsk" , 0x04A09B }, + { "Asia/Istanbul" , 0x04A59C }, + { "Asia/Jakarta" , 0x04AD43 }, + { "Asia/Jayapura" , 0x04AEBF }, + { "Asia/Jerusalem" , 0x04AFDE }, + { "Asia/Kabul" , 0x04B93E }, + { "Asia/Kamchatka" , 0x04BA1A }, + { "Asia/Karachi" , 0x04BEC6 }, + { "Asia/Kashgar" , 0x04C04D }, + { "Asia/Kathmandu" , 0x04C0FE }, + { "Asia/Katmandu" , 0x04C1DE }, + { "Asia/Khandyga" , 0x04C2BE }, + { "Asia/Kolkata" , 0x04C7DF }, + { "Asia/Krasnoyarsk" , 0x04C908 }, + { "Asia/Kuala_Lumpur" , 0x04CDE4 }, + { "Asia/Kuching" , 0x04CF83 }, + { "Asia/Kuwait" , 0x04D180 }, + { "Asia/Macao" , 0x04D231 }, + { "Asia/Macau" , 0x04D708 }, + { "Asia/Magadan" , 0x04DBDF }, + { "Asia/Makassar" , 0x04E0C1 }, + { "Asia/Manila" , 0x04E214 }, + { "Asia/Muscat" , 0x04E368 }, + { "Asia/Nicosia" , 0x04E419 }, + { "Asia/Novokuznetsk" , 0x04EC0A }, + { "Asia/Novosibirsk" , 0x04F0B4 }, + { "Asia/Omsk" , 0x04F599 }, + { "Asia/Oral" , 0x04FA69 }, + { "Asia/Phnom_Penh" , 0x04FE71 }, + { "Asia/Pontianak" , 0x04FF44 }, + { "Asia/Pyongyang" , 0x0500C7 }, + { "Asia/Qatar" , 0x0501C0 }, + { "Asia/Qostanay" , 0x050293 }, + { "Asia/Qyzylorda" , 0x0506AC }, + { "Asia/Rangoon" , 0x050AD6 }, + { "Asia/Riyadh" , 0x050BEE }, + { "Asia/Saigon" , 0x050C9F }, + { "Asia/Sakhalin" , 0x050E0A }, + { "Asia/Samarkand" , 0x0512E0 }, + { "Asia/Seoul" , 0x05153E }, + { "Asia/Shanghai" , 0x0517B3 }, + { "Asia/Singapore" , 0x0519FC }, + { "Asia/Srednekolymsk" , 0x051B87 }, + { "Asia/Taipei" , 0x05206D }, + { "Asia/Tashkent" , 0x052372 }, + { "Asia/Tbilisi" , 0x0525DE }, + { "Asia/Tehran" , 0x0529F5 }, + { "Asia/Tel_Aviv" , 0x053417 }, + { "Asia/Thimbu" , 0x053D77 }, + { "Asia/Thimphu" , 0x053E4E }, + { "Asia/Tokyo" , 0x053F25 }, + { "Asia/Tomsk" , 0x054066 }, + { "Asia/Ujung_Pandang" , 0x054545 }, + { "Asia/Ulaanbaatar" , 0x05464F }, + { "Asia/Ulan_Bator" , 0x0549EB }, + { "Asia/Urumqi" , 0x054D72 }, + { "Asia/Ust-Nera" , 0x054E30 }, + { "Asia/Vientiane" , 0x055334 }, + { "Asia/Vladivostok" , 0x055407 }, + { "Asia/Yakutsk" , 0x0558DE }, + { "Asia/Yangon" , 0x055DB4 }, + { "Asia/Yekaterinburg" , 0x055ECC }, + { "Asia/Yerevan" , 0x0563C1 }, + { "Atlantic/Azores" , 0x05684C }, + { "Atlantic/Bermuda" , 0x057616 }, + { "Atlantic/Canary" , 0x057F7E }, + { "Atlantic/Cape_Verde" , 0x058701 }, + { "Atlantic/Faeroe" , 0x05881B }, + { "Atlantic/Faroe" , 0x058F3E }, + { "Atlantic/Jan_Mayen" , 0x059661 }, + { "Atlantic/Madeira" , 0x059F21 }, + { "Atlantic/Reykjavik" , 0x05ACEB }, + { "Atlantic/South_Georgia" , 0x05B181 }, + { "Atlantic/St_Helena" , 0x05B231 }, + { "Atlantic/Stanley" , 0x05B2D1 }, + { "Australia/ACT" , 0x05B79B }, + { "Australia/Adelaide" , 0x05C035 }, + { "Australia/Brisbane" , 0x05C8F0 }, + { "Australia/Broken_Hill" , 0x05CAB6 }, + { "Australia/Canberra" , 0x05D393 }, + { "Australia/Currie" , 0x05DC2D }, + { "Australia/Darwin" , 0x05E56F }, + { "Australia/Eucla" , 0x05E6D2 }, + { "Australia/Hobart" , 0x05E8CD }, + { "Australia/LHI" , 0x05F217 }, + { "Australia/Lindeman" , 0x05F967 }, + { "Australia/Lord_Howe" , 0x05FB6D }, + { "Australia/Melbourne" , 0x0602CD }, + { "Australia/North" , 0x060B6F }, + { "Australia/NSW" , 0x060CC0 }, + { "Australia/Perth" , 0x06155A }, + { "Australia/Queensland" , 0x061742 }, + { "Australia/South" , 0x0618F1 }, + { "Australia/Sydney" , 0x06219D }, + { "Australia/Tasmania" , 0x062A53 }, + { "Australia/Victoria" , 0x063395 }, + { "Australia/West" , 0x063C2F }, + { "Australia/Yancowinna" , 0x063DF9 }, + { "Brazil/Acre" , 0x0646BA }, + { "Brazil/DeNoronha" , 0x06493A }, + { "Brazil/East" , 0x064C12 }, + { "Brazil/West" , 0x0651C2 }, + { "Canada/Atlantic" , 0x06542A }, + { "Canada/Central" , 0x066196 }, + { "Canada/Eastern" , 0x066CD6 }, + { "Canada/Mountain" , 0x067A88 }, + { "Canada/Newfoundland" , 0x0683B0 }, + { "Canada/Pacific" , 0x069203 }, + { "Canada/Saskatchewan" , 0x069D5B }, + { "Canada/Yukon" , 0x06A13B }, + { "CET" , 0x06A795 }, + { "Chile/Continental" , 0x06AFCF }, + { "Chile/EasterIsland" , 0x06B9BC }, + { "CST6CDT" , 0x06C281 }, + { "Cuba" , 0x06CB93 }, + { "EET" , 0x06D50F }, + { "Egypt" , 0x06DC8F }, + { "Eire" , 0x06E43E }, + { "EST" , 0x06F1EE }, + { "EST5EDT" , 0x06F26C }, + { "Etc/GMT" , 0x06FB7E }, + { "Etc/GMT+0" , 0x06FBFC }, + { "Etc/GMT+1" , 0x06FC7A }, + { "Etc/GMT+10" , 0x06FCFA }, + { "Etc/GMT+11" , 0x06FD7B }, + { "Etc/GMT+12" , 0x06FDFC }, + { "Etc/GMT+2" , 0x06FE7D }, + { "Etc/GMT+3" , 0x06FEFD }, + { "Etc/GMT+4" , 0x06FF7D }, + { "Etc/GMT+5" , 0x06FFFD }, + { "Etc/GMT+6" , 0x07007D }, + { "Etc/GMT+7" , 0x0700FD }, + { "Etc/GMT+8" , 0x07017D }, + { "Etc/GMT+9" , 0x0701FD }, + { "Etc/GMT-0" , 0x07027D }, + { "Etc/GMT-1" , 0x0702FB }, + { "Etc/GMT-10" , 0x07037C }, + { "Etc/GMT-11" , 0x0703FE }, + { "Etc/GMT-12" , 0x070480 }, + { "Etc/GMT-13" , 0x070502 }, + { "Etc/GMT-14" , 0x070584 }, + { "Etc/GMT-2" , 0x070606 }, + { "Etc/GMT-3" , 0x070687 }, + { "Etc/GMT-4" , 0x070708 }, + { "Etc/GMT-5" , 0x070789 }, + { "Etc/GMT-6" , 0x07080A }, + { "Etc/GMT-7" , 0x07088B }, + { "Etc/GMT-8" , 0x07090C }, + { "Etc/GMT-9" , 0x07098D }, + { "Etc/GMT0" , 0x070A0E }, + { "Etc/Greenwich" , 0x070A8C }, + { "Etc/UCT" , 0x070B0A }, + { "Etc/Universal" , 0x070B88 }, + { "Etc/UTC" , 0x070C06 }, + { "Etc/Zulu" , 0x070C84 }, + { "Europe/Amsterdam" , 0x070D02 }, + { "Europe/Andorra" , 0x07186C }, + { "Europe/Astrakhan" , 0x071F46 }, + { "Europe/Athens" , 0x0723F1 }, + { "Europe/Belfast" , 0x072CD3 }, + { "Europe/Belgrade" , 0x073B1F }, + { "Europe/Berlin" , 0x0742AB }, + { "Europe/Bratislava" , 0x074BC5 }, + { "Europe/Brussels" , 0x0754CE }, + { "Europe/Bucharest" , 0x07604F }, + { "Europe/Budapest" , 0x0768E3 }, + { "Europe/Busingen" , 0x07722F }, + { "Europe/Chisinau" , 0x0779B8 }, + { "Europe/Copenhagen" , 0x07831A }, + { "Europe/Dublin" , 0x078B7F }, + { "Europe/Gibraltar" , 0x07992F }, + { "Europe/Guernsey" , 0x07A527 }, + { "Europe/Helsinki" , 0x07B373 }, + { "Europe/Isle_of_Man" , 0x07BAEB }, + { "Europe/Istanbul" , 0x07C937 }, + { "Europe/Jersey" , 0x07D0DE }, + { "Europe/Kaliningrad" , 0x07DF2A }, + { "Europe/Kiev" , 0x07E51F }, + { "Europe/Kirov" , 0x07ED87 }, + { "Europe/Lisbon" , 0x07F222 }, + { "Europe/Ljubljana" , 0x07FFEA }, + { "Europe/London" , 0x080776 }, + { "Europe/Luxembourg" , 0x0815C2 }, + { "Europe/Madrid" , 0x082150 }, + { "Europe/Malta" , 0x082BA2 }, + { "Europe/Mariehamn" , 0x0835EA }, + { "Europe/Minsk" , 0x083D62 }, + { "Europe/Monaco" , 0x084297 }, + { "Europe/Moscow" , 0x084E23 }, + { "Europe/Nicosia" , 0x085442 }, + { "Europe/Oslo" , 0x085C20 }, + { "Europe/Paris" , 0x0864E0 }, + { "Europe/Podgorica" , 0x08707E }, + { "Europe/Prague" , 0x08780A }, + { "Europe/Riga" , 0x088113 }, + { "Europe/Rome" , 0x0889B5 }, + { "Europe/Samara" , 0x089412 }, + { "Europe/San_Marino" , 0x0898F6 }, + { "Europe/Sarajevo" , 0x08A353 }, + { "Europe/Saratov" , 0x08AADF }, + { "Europe/Simferopol" , 0x08AF9A }, + { "Europe/Skopje" , 0x08B569 }, + { "Europe/Sofia" , 0x08BCF5 }, + { "Europe/Stockholm" , 0x08C51E }, + { "Europe/Tallinn" , 0x08CC9F }, + { "Europe/Tirane" , 0x08D50F }, + { "Europe/Tiraspol" , 0x08DD3F }, + { "Europe/Ulyanovsk" , 0x08E6A1 }, + { "Europe/Uzhgorod" , 0x08EBB2 }, + { "Europe/Vaduz" , 0x08F3DE }, + { "Europe/Vatican" , 0x08FB5F }, + { "Europe/Vienna" , 0x0905BC }, + { "Europe/Vilnius" , 0x090E60 }, + { "Europe/Volgograd" , 0x0916DE }, + { "Europe/Warsaw" , 0x091B89 }, + { "Europe/Zagreb" , 0x0925F3 }, + { "Europe/Zaporozhye" , 0x092D7F }, + { "Europe/Zurich" , 0x093600 }, + { "Factory" , 0x093D81 }, + { "GB" , 0x093E01 }, + { "GB-Eire" , 0x094C4D }, + { "GMT" , 0x095A99 }, + { "GMT+0" , 0x095B17 }, + { "GMT-0" , 0x095B95 }, + { "GMT0" , 0x095C13 }, + { "Greenwich" , 0x095C91 }, + { "Hongkong" , 0x095D0F }, + { "HST" , 0x0961CE }, + { "Iceland" , 0x09624D }, + { "Indian/Antananarivo" , 0x0966E3 }, + { "Indian/Chagos" , 0x0967F8 }, + { "Indian/Christmas" , 0x0968CB }, + { "Indian/Cocos" , 0x09697C }, + { "Indian/Comoro" , 0x096A36 }, + { "Indian/Kerguelen" , 0x096B4B }, + { "Indian/Mahe" , 0x096BFC }, + { "Indian/Maldives" , 0x096CAD }, + { "Indian/Mauritius" , 0x096D80 }, + { "Indian/Mayotte" , 0x096E7D }, + { "Indian/Reunion" , 0x096F92 }, + { "Iran" , 0x097043 }, + { "Israel" , 0x097A65 }, + { "Jamaica" , 0x0983C5 }, + { "Japan" , 0x0985B3 }, + { "Kwajalein" , 0x0986F4 }, + { "Libya" , 0x09883C }, + { "MET" , 0x098AB9 }, + { "Mexico/BajaNorte" , 0x0992F3 }, + { "Mexico/BajaSur" , 0x099C25 }, + { "Mexico/General" , 0x09A227 }, + { "MST" , 0x09A863 }, + { "MST7MDT" , 0x09A8E1 }, + { "Navajo" , 0x09B1F3 }, + { "NZ" , 0x09BB8B }, + { "NZ-CHAT" , 0x09C51C }, + { "Pacific/Apia" , 0x09CD3C }, + { "Pacific/Auckland" , 0x09CFAC }, + { "Pacific/Bougainville" , 0x09D955 }, + { "Pacific/Chatham" , 0x09DA79 }, + { "Pacific/Chuuk" , 0x09E2A8 }, + { "Pacific/Easter" , 0x09E3D0 }, + { "Pacific/Efate" , 0x09ECA2 }, + { "Pacific/Enderbury" , 0x09EEC8 }, + { "Pacific/Fakaofo" , 0x09EFBE }, + { "Pacific/Fiji" , 0x09F092 }, + { "Pacific/Funafuti" , 0x09F4B7 }, + { "Pacific/Galapagos" , 0x09F569 }, + { "Pacific/Gambier" , 0x09F674 }, + { "Pacific/Guadalcanal" , 0x09F733 }, + { "Pacific/Guam" , 0x09F7E5 }, + { "Pacific/Honolulu" , 0x09F9DF }, + { "Pacific/Johnston" , 0x09FB3A }, + { "Pacific/Kanton" , 0x09FC8F }, + { "Pacific/Kiritimati" , 0x09FD94 }, + { "Pacific/Kosrae" , 0x09FE9A }, + { "Pacific/Kwajalein" , 0x0A000B }, + { "Pacific/Majuro" , 0x0A015C }, + { "Pacific/Marquesas" , 0x0A02BB }, + { "Pacific/Midway" , 0x0A0385 }, + { "Pacific/Nauru" , 0x0A044E }, + { "Pacific/Niue" , 0x0A0556 }, + { "Pacific/Norfolk" , 0x0A062D }, + { "Pacific/Noumea" , 0x0A09A9 }, + { "Pacific/Pago_Pago" , 0x0A0AE5 }, + { "Pacific/Palau" , 0x0A0BA0 }, + { "Pacific/Pitcairn" , 0x0A0C60 }, + { "Pacific/Pohnpei" , 0x0A0D36 }, + { "Pacific/Ponape" , 0x0A0E7F }, + { "Pacific/Port_Moresby" , 0x0A0FBA }, + { "Pacific/Rarotonga" , 0x0A109D }, + { "Pacific/Saipan" , 0x0A1304 }, + { "Pacific/Samoa" , 0x0A14FE }, + { "Pacific/Tahiti" , 0x0A15B9 }, + { "Pacific/Tarawa" , 0x0A1679 }, + { "Pacific/Tongatapu" , 0x0A173A }, + { "Pacific/Truk" , 0x0A18BA }, + { "Pacific/Wake" , 0x0A19D3 }, + { "Pacific/Wallis" , 0x0A1A90 }, + { "Pacific/Yap" , 0x0A1B42 }, + { "Poland" , 0x0A1C5B }, + { "Portugal" , 0x0A26C5 }, + { "PRC" , 0x0A347A }, + { "PST8PDT" , 0x0A36B7 }, + { "ROC" , 0x0A3FC9 }, + { "ROK" , 0x0A42CE }, + { "Singapore" , 0x0A4543 }, + { "Turkey" , 0x0A46CE }, + { "UCT" , 0x0A4E75 }, + { "Universal" , 0x0A4EF3 }, + { "US/Alaska" , 0x0A4F71 }, + { "US/Aleutian" , 0x0A58C0 }, + { "US/Arizona" , 0x0A6200 }, + { "US/Central" , 0x0A6354 }, + { "US/East-Indiana" , 0x0A7158 }, + { "US/Eastern" , 0x0A77E6 }, + { "US/Hawaii" , 0x0A85C2 }, + { "US/Indiana-Starke" , 0x0A8717 }, + { "US/Michigan" , 0x0A909F }, + { "US/Mountain" , 0x0A9961 }, + { "US/Pacific" , 0x0AA2F9 }, + { "US/Samoa" , 0x0AAE19 }, + { "UTC" , 0x0AAED4 }, + { "W-SU" , 0x0AAF52 }, + { "WET" , 0x0AB55D }, + { "Zulu" , 0x0ABCDA }, }; -const unsigned char timelib_timezone_db_data_builtin[703734] = { +const unsigned char timelib_timezone_db_data_builtin[703832] = { /* Africa/Abidjan */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -37134,8 +37136,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x80, 0x00, 0x00, 0x00, -0x8F, 0x30, 0x47, 0x46, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC6, 0xA1, 0x00, 0x71, 0xC0, -0xB0, 0x5E, 0x77, 0xC6, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, +0x8F, 0x30, 0x47, 0x45, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC5, 0xA1, 0x00, 0x71, 0xC0, +0xB0, 0x5E, 0x77, 0xC5, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, 0xB4, 0x22, 0x34, 0x50, 0xB5, 0x39, 0xA4, 0x40, 0xB6, 0x03, 0x67, 0xD0, 0xB7, 0x1A, 0xD7, 0xC0, 0xB7, 0xE4, 0x9B, 0x50, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xC7, 0x20, 0x50, 0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, 0xD5, 0x33, 0x55, 0xC0, 0xD5, 0x76, 0x92, 0x40, 0xFD, 0xD1, 0x3C, 0x40, @@ -37170,7 +37172,7 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x07, 0x07, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, +0x05, 0x06, 0x05, 0x07, 0x07, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, @@ -37179,9 +37181,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xFC, 0xFF, 0xFF, 0xFF, -0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, -0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, -0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, +0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, +0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, +0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB7, 0x1A, 0xD7, 0xC0, 0xFF, 0xFF, 0xFF, @@ -37244,7 +37246,7 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x07, 0x07, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, +0x07, 0x07, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, @@ -38062,8 +38064,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x80, 0x00, 0x00, 0x00, -0x8F, 0x30, 0x47, 0x46, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC6, 0xA1, 0x00, 0x71, 0xC0, -0xB0, 0x5E, 0x77, 0xC6, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, +0x8F, 0x30, 0x47, 0x45, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC5, 0xA1, 0x00, 0x71, 0xC0, +0xB0, 0x5E, 0x77, 0xC5, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, 0xB4, 0x22, 0x34, 0x50, 0xB5, 0x39, 0xA4, 0x40, 0xB6, 0x03, 0x67, 0xD0, 0xB7, 0x1A, 0xD7, 0xC0, 0xB7, 0xE4, 0x9B, 0x50, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xC7, 0x20, 0x50, 0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, 0xD3, 0xDC, 0x8F, 0xC0, 0xD4, 0x1B, 0xC9, 0xB0, 0xD5, 0x33, 0x55, 0xC0, @@ -38111,8 +38113,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBA, -0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBB, +0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, @@ -38120,9 +38122,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, -0x69, 0x87, 0x1D, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, -0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, -0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, +0x69, 0x87, 0x1D, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, +0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, +0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -38209,8 +38211,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBA, -0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBB, +0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, @@ -43205,15 +43207,15 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x56, 0x29, 0x5C, 0x60, 0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x13, 0xCA, 0x60, 0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF3, 0xAC, 0x60, 0x5A, 0xB5, 0x86, 0xF0, 0x5B, 0xD3, 0x8E, 0x60, 0x5C, 0x9D, 0x43, 0xE0, 0x5D, 0xB3, 0x62, 0x50, 0x5E, 0x7E, 0x77, 0x60, 0x5F, 0x93, 0x52, 0x60, 0x60, 0x5E, 0x59, 0x60, -0x61, 0x7B, 0x1D, 0x60, 0x62, 0x3E, 0x3B, 0x60, 0x63, 0x5A, 0xFF, 0x60, 0x64, 0x1E, 0x1D, 0x60, -0x65, 0x3A, 0xE1, 0x60, 0x66, 0x07, 0x39, 0xE0, 0x67, 0x1A, 0xC3, 0x60, 0x67, 0xE7, 0x1B, 0xE0, -0x69, 0x03, 0xDF, 0xE0, 0x69, 0xC6, 0xFD, 0xE0, 0x6A, 0xE3, 0xC1, 0xE0, 0x6B, 0xA6, 0xDF, 0xE0, -0x6C, 0xC3, 0xA3, 0xE0, 0x6D, 0x86, 0xC1, 0xE0, 0x6E, 0xA3, 0x85, 0xE0, 0x6F, 0x66, 0xA3, 0xE0, -0x70, 0x83, 0x67, 0xE0, 0x71, 0x4F, 0xC0, 0x60, 0x72, 0x63, 0x49, 0xE0, 0x73, 0x2F, 0xA2, 0x60, -0x74, 0x4C, 0x66, 0x60, 0x75, 0x0F, 0x84, 0x60, 0x76, 0x2C, 0x48, 0x60, 0x76, 0xEF, 0x66, 0x60, -0x78, 0x0C, 0x2A, 0x60, 0x78, 0xCF, 0x48, 0x60, 0x79, 0xEC, 0x0C, 0x60, 0x7A, 0xAF, 0x2A, 0x60, -0x7B, 0xCB, 0xEE, 0x60, 0x7C, 0x98, 0x46, 0xE0, 0x7D, 0xB5, 0x0A, 0xE0, 0x7E, 0x78, 0x28, 0xE0, -0x7F, 0x94, 0xEC, 0xE0, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x61, 0x7B, 0x1D, 0x60, 0x62, 0x3F, 0x8C, 0xE0, 0x63, 0x5A, 0xFF, 0x60, 0x64, 0x1F, 0x6E, 0xE0, +0x65, 0x3A, 0xE1, 0x60, 0x66, 0x08, 0x8B, 0x60, 0x67, 0x1A, 0xC3, 0x60, 0x67, 0xE8, 0x6D, 0x60, +0x68, 0xFA, 0xA5, 0x60, 0x69, 0xC8, 0x4F, 0x60, 0x6A, 0xDA, 0x87, 0x60, 0x6B, 0xA8, 0x31, 0x60, +0x6C, 0xC3, 0xA3, 0xE0, 0x6D, 0x88, 0x13, 0x60, 0x6E, 0xA3, 0x85, 0xE0, 0x6F, 0x67, 0xF5, 0x60, +0x70, 0x83, 0x67, 0xE0, 0x71, 0x51, 0x11, 0xE0, 0x72, 0x63, 0x49, 0xE0, 0x73, 0x30, 0xF3, 0xE0, +0x74, 0x43, 0x2B, 0xE0, 0x75, 0x10, 0xD5, 0xE0, 0x76, 0x2C, 0x48, 0x60, 0x76, 0xF0, 0xB7, 0xE0, +0x78, 0x0C, 0x2A, 0x60, 0x78, 0xD0, 0x99, 0xE0, 0x79, 0xEC, 0x0C, 0x60, 0x7A, 0xB0, 0x7B, 0xE0, +0x7B, 0xCB, 0xEE, 0x60, 0x7C, 0x99, 0x98, 0x60, 0x7D, 0xAB, 0xD0, 0x60, 0x7E, 0x79, 0x7A, 0x60, +0x7F, 0x8B, 0xB2, 0x60, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x06, 0x05, 0x06, 0x05, 0x06, 0x07, 0x08, 0x07, 0x08, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, @@ -43291,22 +43293,22 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7B, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x62, -0x3E, 0x3B, 0x60, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5A, 0xFF, 0x60, 0x00, 0x00, 0x00, 0x00, 0x64, -0x1E, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3A, 0xE1, 0x60, 0x00, 0x00, 0x00, 0x00, 0x66, -0x07, 0x39, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1A, 0xC3, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, -0xE7, 0x1B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x69, 0x03, 0xDF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x69, -0xC6, 0xFD, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xE3, 0xC1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6B, -0xA6, 0xDF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC3, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6D, -0x86, 0xC1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA3, 0x85, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6F, -0x66, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x83, 0x67, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x71, -0x4F, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x72, 0x63, 0x49, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x73, -0x2F, 0xA2, 0x60, 0x00, 0x00, 0x00, 0x00, 0x74, 0x4C, 0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x75, -0x0F, 0x84, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2C, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, -0xEF, 0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, -0xCF, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEC, 0x0C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7A, -0xAF, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCB, 0xEE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7C, -0x98, 0x46, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xB5, 0x0A, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7E, -0x78, 0x28, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x94, 0xEC, 0xE0, 0x03, 0x01, 0x02, 0x01, 0x02, +0x3F, 0x8C, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5A, 0xFF, 0x60, 0x00, 0x00, 0x00, 0x00, 0x64, +0x1F, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3A, 0xE1, 0x60, 0x00, 0x00, 0x00, 0x00, 0x66, +0x08, 0x8B, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1A, 0xC3, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, +0xE8, 0x6D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFA, 0xA5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x69, +0xC8, 0x4F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDA, 0x87, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6B, +0xA8, 0x31, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC3, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6D, +0x88, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA3, 0x85, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6F, +0x67, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x70, 0x83, 0x67, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x71, +0x51, 0x11, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x72, 0x63, 0x49, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x73, +0x30, 0xF3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x74, 0x43, 0x2B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x75, +0x10, 0xD5, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2C, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, +0xF0, 0xB7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, +0xD0, 0x99, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEC, 0x0C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7A, +0xB0, 0x7B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCB, 0xEE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7C, +0x99, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAB, 0xD0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7E, +0x79, 0x7A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8B, 0xB2, 0x60, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x06, 0x05, 0x06, 0x05, 0x06, 0x07, 0x08, 0x07, 0x08, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, @@ -43323,9 +43325,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, -0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, -0x2E, 0x35, 0x2F, 0x31, 0x0A, 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, 0x00, -0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, +0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x37, 0x32, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x34, +0x2E, 0x34, 0x2F, 0x32, 0x35, 0x0A, 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, +0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, /* Asia/Harbin */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -43398,15 +43400,15 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x54, 0x49, 0x6C, 0x50, 0x55, 0x15, 0xD2, 0xE0, 0x56, 0x29, 0x5C, 0x60, 0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x13, 0xCA, 0x60, 0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF3, 0xAC, 0x60, 0x5A, 0xB5, 0x86, 0xF0, 0x5B, 0xD3, 0x8E, 0x60, 0x5C, 0x9D, 0x43, 0xE0, 0x5D, 0xB3, 0x62, 0x50, 0x5E, 0x7E, 0x77, 0x60, -0x5F, 0x93, 0x52, 0x60, 0x60, 0x5E, 0x59, 0x60, 0x61, 0x7B, 0x1D, 0x60, 0x62, 0x3E, 0x3B, 0x60, -0x63, 0x5A, 0xFF, 0x60, 0x64, 0x1E, 0x1D, 0x60, 0x65, 0x3A, 0xE1, 0x60, 0x66, 0x07, 0x39, 0xE0, -0x67, 0x1A, 0xC3, 0x60, 0x67, 0xE7, 0x1B, 0xE0, 0x69, 0x03, 0xDF, 0xE0, 0x69, 0xC6, 0xFD, 0xE0, -0x6A, 0xE3, 0xC1, 0xE0, 0x6B, 0xA6, 0xDF, 0xE0, 0x6C, 0xC3, 0xA3, 0xE0, 0x6D, 0x86, 0xC1, 0xE0, -0x6E, 0xA3, 0x85, 0xE0, 0x6F, 0x66, 0xA3, 0xE0, 0x70, 0x83, 0x67, 0xE0, 0x71, 0x4F, 0xC0, 0x60, -0x72, 0x63, 0x49, 0xE0, 0x73, 0x2F, 0xA2, 0x60, 0x74, 0x4C, 0x66, 0x60, 0x75, 0x0F, 0x84, 0x60, -0x76, 0x2C, 0x48, 0x60, 0x76, 0xEF, 0x66, 0x60, 0x78, 0x0C, 0x2A, 0x60, 0x78, 0xCF, 0x48, 0x60, -0x79, 0xEC, 0x0C, 0x60, 0x7A, 0xAF, 0x2A, 0x60, 0x7B, 0xCB, 0xEE, 0x60, 0x7C, 0x98, 0x46, 0xE0, -0x7D, 0xB5, 0x0A, 0xE0, 0x7E, 0x78, 0x28, 0xE0, 0x7F, 0x94, 0xEC, 0xE0, 0x03, 0x01, 0x02, 0x01, +0x5F, 0x93, 0x52, 0x60, 0x60, 0x5E, 0x59, 0x60, 0x61, 0x7B, 0x1D, 0x60, 0x62, 0x3F, 0x8C, 0xE0, +0x63, 0x5A, 0xFF, 0x60, 0x64, 0x1F, 0x6E, 0xE0, 0x65, 0x3A, 0xE1, 0x60, 0x66, 0x08, 0x8B, 0x60, +0x67, 0x1A, 0xC3, 0x60, 0x67, 0xE8, 0x6D, 0x60, 0x68, 0xFA, 0xA5, 0x60, 0x69, 0xC8, 0x4F, 0x60, +0x6A, 0xDA, 0x87, 0x60, 0x6B, 0xA8, 0x31, 0x60, 0x6C, 0xC3, 0xA3, 0xE0, 0x6D, 0x88, 0x13, 0x60, +0x6E, 0xA3, 0x85, 0xE0, 0x6F, 0x67, 0xF5, 0x60, 0x70, 0x83, 0x67, 0xE0, 0x71, 0x51, 0x11, 0xE0, +0x72, 0x63, 0x49, 0xE0, 0x73, 0x30, 0xF3, 0xE0, 0x74, 0x43, 0x2B, 0xE0, 0x75, 0x10, 0xD5, 0xE0, +0x76, 0x2C, 0x48, 0x60, 0x76, 0xF0, 0xB7, 0xE0, 0x78, 0x0C, 0x2A, 0x60, 0x78, 0xD0, 0x99, 0xE0, +0x79, 0xEC, 0x0C, 0x60, 0x7A, 0xB0, 0x7B, 0xE0, 0x7B, 0xCB, 0xEE, 0x60, 0x7C, 0x99, 0x98, 0x60, +0x7D, 0xAB, 0xD0, 0x60, 0x7E, 0x79, 0x7A, 0x60, 0x7F, 0x8B, 0xB2, 0x60, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x06, 0x05, 0x06, 0x05, 0x06, 0x07, 0x08, 0x07, 0x08, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, @@ -43485,23 +43487,23 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, -0x00, 0x61, 0x7B, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x62, 0x3E, 0x3B, 0x60, 0x00, 0x00, 0x00, -0x00, 0x63, 0x5A, 0xFF, 0x60, 0x00, 0x00, 0x00, 0x00, 0x64, 0x1E, 0x1D, 0x60, 0x00, 0x00, 0x00, -0x00, 0x65, 0x3A, 0xE1, 0x60, 0x00, 0x00, 0x00, 0x00, 0x66, 0x07, 0x39, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x67, 0x1A, 0xC3, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, 0xE7, 0x1B, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x69, 0x03, 0xDF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x69, 0xC6, 0xFD, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x6A, 0xE3, 0xC1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6B, 0xA6, 0xDF, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x6C, 0xC3, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x86, 0xC1, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x6E, 0xA3, 0x85, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x66, 0xA3, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x70, 0x83, 0x67, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x71, 0x4F, 0xC0, 0x60, 0x00, 0x00, 0x00, -0x00, 0x72, 0x63, 0x49, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x73, 0x2F, 0xA2, 0x60, 0x00, 0x00, 0x00, -0x00, 0x74, 0x4C, 0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x75, 0x0F, 0x84, 0x60, 0x00, 0x00, 0x00, -0x00, 0x76, 0x2C, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, 0xEF, 0x66, 0x60, 0x00, 0x00, 0x00, -0x00, 0x78, 0x0C, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0xCF, 0x48, 0x60, 0x00, 0x00, 0x00, -0x00, 0x79, 0xEC, 0x0C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xAF, 0x2A, 0x60, 0x00, 0x00, 0x00, -0x00, 0x7B, 0xCB, 0xEE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x98, 0x46, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x7D, 0xB5, 0x0A, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x78, 0x28, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x7F, 0x94, 0xEC, 0xE0, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x61, 0x7B, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x62, 0x3F, 0x8C, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x63, 0x5A, 0xFF, 0x60, 0x00, 0x00, 0x00, 0x00, 0x64, 0x1F, 0x6E, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x65, 0x3A, 0xE1, 0x60, 0x00, 0x00, 0x00, 0x00, 0x66, 0x08, 0x8B, 0x60, 0x00, 0x00, 0x00, +0x00, 0x67, 0x1A, 0xC3, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, 0xE8, 0x6D, 0x60, 0x00, 0x00, 0x00, +0x00, 0x68, 0xFA, 0xA5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x69, 0xC8, 0x4F, 0x60, 0x00, 0x00, 0x00, +0x00, 0x6A, 0xDA, 0x87, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6B, 0xA8, 0x31, 0x60, 0x00, 0x00, 0x00, +0x00, 0x6C, 0xC3, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x88, 0x13, 0x60, 0x00, 0x00, 0x00, +0x00, 0x6E, 0xA3, 0x85, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x67, 0xF5, 0x60, 0x00, 0x00, 0x00, +0x00, 0x70, 0x83, 0x67, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x71, 0x51, 0x11, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x72, 0x63, 0x49, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x73, 0x30, 0xF3, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x74, 0x43, 0x2B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x75, 0x10, 0xD5, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x76, 0x2C, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, 0xF0, 0xB7, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x78, 0x0C, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0xD0, 0x99, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x79, 0xEC, 0x0C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xB0, 0x7B, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x7B, 0xCB, 0xEE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x99, 0x98, 0x60, 0x00, 0x00, 0x00, +0x00, 0x7D, 0xAB, 0xD0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0x7A, 0x60, 0x00, 0x00, 0x00, +0x00, 0x7F, 0x8B, 0xB2, 0x60, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x06, 0x05, 0x06, 0x05, 0x06, 0x07, 0x08, 0x07, 0x08, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, @@ -43518,9 +43520,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, -0x34, 0x2E, 0x34, 0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x35, 0x2F, 0x31, -0x0A, 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, 0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, -0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, +0x34, 0x2E, 0x34, 0x2F, 0x37, 0x32, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x32, +0x35, 0x0A, 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, 0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, +0x73, 0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, /* Asia/Ho_Chi_Minh */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x56, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -52415,8 +52417,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x80, 0x00, 0x00, 0x00, -0x8F, 0x30, 0x47, 0x46, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC6, 0xA1, 0x00, 0x71, 0xC0, -0xB0, 0x5E, 0x77, 0xC6, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, +0x8F, 0x30, 0x47, 0x45, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC5, 0xA1, 0x00, 0x71, 0xC0, +0xB0, 0x5E, 0x77, 0xC5, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, 0xB4, 0x22, 0x34, 0x50, 0xB5, 0x39, 0xA4, 0x40, 0xB6, 0x03, 0x67, 0xD0, 0xB7, 0x1A, 0xD7, 0xC0, 0xB7, 0xE4, 0x9B, 0x50, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xC7, 0x20, 0x50, 0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, 0xD3, 0xDC, 0x8F, 0xC0, 0xD4, 0x1B, 0xC9, 0xB0, 0xD5, 0x33, 0x55, 0xC0, @@ -52464,8 +52466,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBA, -0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBB, +0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, @@ -52473,9 +52475,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, -0x69, 0x87, 0x1D, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, -0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, -0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, +0x69, 0x87, 0x1D, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, +0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, +0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -52562,8 +52564,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBA, -0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBB, +0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, @@ -57536,8 +57538,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { /* Europe/Kiev */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x22, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0x80, 0x00, 0x00, 0x00, 0xAA, 0x19, 0xA7, 0x64, 0xB5, 0xA4, 0x19, 0x60, 0xCA, 0xCD, 0x2E, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCE, 0xCD, 0xA8, 0x70, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, @@ -57545,9 +57547,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, 0x26, 0x8D, 0x20, 0xE0, 0x28, 0xE5, 0x17, 0x80, -0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, -0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, +0x29, 0xD5, 0x08, 0x80, 0x2A, 0xC4, 0xF9, 0x80, 0x2B, 0xB4, 0xEA, 0x80, 0x2C, 0xA4, 0xDB, 0x80, +0x2D, 0x94, 0xCC, 0x80, 0x2E, 0x84, 0xBD, 0x80, 0x2F, 0x74, 0xAE, 0x80, 0x30, 0x64, 0x9F, 0x80, +0x31, 0x5D, 0xCB, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, @@ -57569,24 +57571,25 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x0A, 0x02, 0x0A, 0x02, 0x0A, -0x02, 0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, +0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0B, 0x0C, +0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, +0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, +0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, +0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, +0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, +0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, -0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x2A, 0x30, 0x01, -0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, -0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, -0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, -0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, +0x08, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, +0x30, 0x01, 0x1D, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, +0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, +0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, +0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x22, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC7, 0x64, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA7, 0x64, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA, 0xCD, 0x2E, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, @@ -57601,11 +57604,11 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x20, 0xE0, 0x00, -0x00, 0x00, 0x00, 0x28, 0xE5, 0x17, 0x80, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, -0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x00, +0x00, 0x00, 0x00, 0x28, 0xE5, 0x17, 0x80, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, +0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, @@ -57649,20 +57652,21 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x00, 0x00, 0x7D, 0xAE, 0x9D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, +0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x1D, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x4C, 0x4D, -0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, -0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, +0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, +0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x4D, +0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, +0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD6, 0x48, 0xC5, 0x01, 0x41, 0x39, 0x12, @@ -60829,16 +60833,16 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { /* Europe/Simferopol */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x22, 0x80, 0x00, 0x00, 0x00, 0xAA, 0x19, 0xA4, 0x20, 0xB5, 0xA4, 0x19, 0x60, 0xCB, 0x04, 0x8D, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xCF, 0x9F, 0x38, 0xE0, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, 0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, -0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x8D, 0x2E, 0xF0, 0x29, 0xD4, 0xEC, 0x60, -0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, +0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x8D, 0x2E, 0xF0, 0x29, 0xD5, 0x08, 0x80, +0x2A, 0xC4, 0xF9, 0x80, 0x2B, 0xB4, 0xEA, 0x80, 0x2C, 0xA4, 0xDB, 0x80, 0x2D, 0x94, 0xCC, 0x80, 0x2D, 0xC2, 0xC6, 0xD0, 0x2E, 0x84, 0x85, 0x40, 0x2F, 0x74, 0x84, 0x50, 0x30, 0x64, 0x67, 0x40, 0x31, 0x5D, 0xA0, 0xD0, 0x32, 0x72, 0xA6, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, @@ -60851,73 +60855,74 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x5E, 0x80, 0x54, 0x4C, 0x1D, 0x60, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x05, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x07, 0x03, 0x07, 0x03, 0x09, 0x08, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0D, 0x08, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x04, 0x00, +0x08, 0x09, 0x08, 0x02, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x07, 0x03, 0x07, 0x03, 0x09, 0x08, 0x0C, +0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, +0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, +0x0D, 0x0E, 0x08, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, -0x08, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0C, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x4C, 0x4D, 0x54, -0x00, 0x53, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, -0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x54, 0x5A, 0x69, -0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x4B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC4, -0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA4, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, -0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0x04, 0x8D, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, -0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, -0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x92, 0x34, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x9F, 0x38, -0xE0, 0x00, 0x00, 0x00, 0x00, 0x15, 0x27, 0xA7, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x16, 0x18, 0xDC, -0x40, 0x00, 0x00, 0x00, 0x00, 0x17, 0x08, 0xDB, 0x50, 0x00, 0x00, 0x00, 0x00, 0x17, 0xFA, 0x0F, -0xC0, 0x00, 0x00, 0x00, 0x00, 0x18, 0xEA, 0x0E, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x19, 0xDB, 0x43, -0x40, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xCC, 0x93, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0xA0, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xAC, 0x91, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9C, 0x82, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x8C, 0x73, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x64, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6C, 0x55, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x2E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, -0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, -0x60, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, -0x60, 0x00, 0x00, 0x00, 0x00, 0x2D, 0xC2, 0xC6, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x85, -0x40, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0x84, 0x50, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x67, -0x40, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xA0, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xA6, -0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, -0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, -0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, -0x90, 0x00, 0x00, 0x00, 0x00, 0x38, 0xDD, 0x61, 0x10, 0x00, 0x00, 0x00, 0x00, 0x39, 0xFB, 0x76, -0x90, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xBD, 0x43, 0x10, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xDB, 0x58, -0x90, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xA6, 0x5F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xBB, 0x3A, -0x90, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x86, 0x41, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9B, 0x1C, -0x90, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x23, 0x90, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x39, -0x10, 0x00, 0x00, 0x00, 0x00, 0x42, 0x46, 0x05, 0x90, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x1B, -0x10, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, 0xE7, 0x90, 0x00, 0x00, 0x00, 0x00, 0x45, 0x43, 0xFD, -0x10, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0xC9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0x23, 0xDF, -0x10, 0x00, 0x00, 0x00, 0x00, 0x47, 0xEE, 0xE6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0x03, 0xC1, -0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0xCE, 0xC8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE3, 0xA3, -0x10, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xAE, 0xAA, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xCC, 0xBF, -0x90, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x8E, 0x8C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xAC, 0xA1, -0x90, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6E, 0x6E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8C, 0x83, -0x90, 0x00, 0x00, 0x00, 0x00, 0x51, 0x57, 0x8A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x65, -0x90, 0x00, 0x00, 0x00, 0x00, 0x53, 0x37, 0x5E, 0x80, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x1D, -0x60, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x05, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, -0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x02, 0x0A, 0x02, 0x0A, -0x02, 0x0A, 0x07, 0x03, 0x07, 0x03, 0x09, 0x08, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0D, 0x08, 0x00, 0x00, 0x1F, 0xF8, -0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, -0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, -0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, -0x00, 0x0C, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, -0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0C, -0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x45, 0x45, -0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, -0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, -0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x01, +0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0C, 0x00, 0x00, 0x2A, +0x30, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, +0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, +0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x01, 0x01, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC4, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA4, +0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0x04, 0x8D, +0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, +0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x92, 0x34, +0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x9F, 0x38, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x15, 0x27, 0xA7, +0xD0, 0x00, 0x00, 0x00, 0x00, 0x16, 0x18, 0xDC, 0x40, 0x00, 0x00, 0x00, 0x00, 0x17, 0x08, 0xDB, +0x50, 0x00, 0x00, 0x00, 0x00, 0x17, 0xFA, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x18, 0xEA, 0x0E, +0xD0, 0x00, 0x00, 0x00, 0x00, 0x19, 0xDB, 0x43, 0x40, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xCC, 0x93, +0xD0, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0xA0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xAC, 0x91, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9C, 0x82, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x8C, 0x73, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x64, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6C, 0x55, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x2E, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, +0x80, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, +0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0xC2, 0xC6, +0xD0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x85, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0x84, +0x50, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x67, 0x40, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xA0, +0xD0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, +0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, +0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, +0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, 0x00, 0x00, 0x00, 0x38, 0xDD, 0x61, +0x10, 0x00, 0x00, 0x00, 0x00, 0x39, 0xFB, 0x76, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xBD, 0x43, +0x10, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xDB, 0x58, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xA6, 0x5F, +0x90, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xBB, 0x3A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x86, 0x41, +0x90, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9B, 0x1C, 0x90, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x23, +0x90, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x39, 0x10, 0x00, 0x00, 0x00, 0x00, 0x42, 0x46, 0x05, +0x90, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x1B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, 0xE7, +0x90, 0x00, 0x00, 0x00, 0x00, 0x45, 0x43, 0xFD, 0x10, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0xC9, +0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0x23, 0xDF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x47, 0xEE, 0xE6, +0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0x03, 0xC1, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0xCE, 0xC8, +0x10, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE3, 0xA3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xAE, 0xAA, +0x10, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xCC, 0xBF, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x8E, 0x8C, +0x10, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xAC, 0xA1, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6E, 0x6E, +0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8C, 0x83, 0x90, 0x00, 0x00, 0x00, 0x00, 0x51, 0x57, 0x8A, +0x90, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x65, 0x90, 0x00, 0x00, 0x00, 0x00, 0x53, 0x37, 0x5E, +0x80, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x1D, 0x60, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, +0x05, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, +0x09, 0x08, 0x09, 0x08, 0x02, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x07, 0x03, 0x07, 0x03, 0x09, 0x08, +0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, +0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, +0x0C, 0x0D, 0x0E, 0x08, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x04, +0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, +0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, +0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, +0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, +0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0C, 0x00, 0x00, +0x2A, 0x30, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, +0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, +0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x0A, 0x4D, 0x53, 0x4B, 0x2D, 0x33, 0x0A, 0x00, 0xCD, 0xEA, 0xD7, 0x01, 0x46, 0xB0, 0xD0, 0x00, 0x00, 0x00, 0x06, 0x43, 0x72, 0x69, 0x6D, 0x65, 0x61, @@ -61811,17 +61816,17 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { /* Europe/Uzhgorod */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x1E, 0x80, 0x00, 0x00, 0x00, 0xC8, 0x09, 0x71, 0x90, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0xA1, 0x9E, 0xE0, 0xD1, 0xE5, 0xFD, 0xF0, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, 0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, -0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x8D, 0x2E, 0xF0, 0x27, 0xF5, 0x42, 0xA0, 0x29, 0xD4, 0xEC, 0x60, -0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, -0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, +0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x8D, 0x2E, 0xF0, 0x27, 0xF5, 0x42, 0xA0, 0x29, 0xD5, 0x08, 0x80, +0x2A, 0xC4, 0xF9, 0x80, 0x2B, 0xB4, 0xEA, 0x80, 0x2C, 0xA4, 0xDB, 0x80, 0x2D, 0x94, 0xCC, 0x80, +0x2E, 0x84, 0xBD, 0x80, 0x2F, 0x74, 0xAE, 0x80, 0x30, 0x64, 0x9F, 0x80, 0x31, 0x5D, 0xCB, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, @@ -61844,98 +61849,99 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x01, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x00, 0x00, 0x14, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, +0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x01, 0x08, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, +0x09, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x00, 0x00, 0x14, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, -0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x4C, 0x4D, 0x54, 0x00, +0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, +0x01, 0x19, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, +0x53, 0x44, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, +0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, +0x00, 0x0D, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0x6A, 0xEE, 0xB0, 0x18, 0xFF, 0xFF, +0xFF, 0xFF, 0xC8, 0x09, 0x71, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, +0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, +0xFF, 0xFF, 0xCF, 0x92, 0x34, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xD0, 0xA1, 0x9E, 0xE0, 0xFF, 0xFF, +0xFF, 0xFF, 0xD1, 0xE5, 0xFD, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x15, 0x27, 0xA7, 0xD0, 0x00, 0x00, +0x00, 0x00, 0x16, 0x18, 0xDC, 0x40, 0x00, 0x00, 0x00, 0x00, 0x17, 0x08, 0xDB, 0x50, 0x00, 0x00, +0x00, 0x00, 0x17, 0xFA, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x18, 0xEA, 0x0E, 0xD0, 0x00, 0x00, +0x00, 0x00, 0x19, 0xDB, 0x43, 0x40, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xCC, 0x93, 0xD0, 0x00, 0x00, +0x00, 0x00, 0x1B, 0xBC, 0xA0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xAC, 0x91, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x1D, 0x9C, 0x82, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x8C, 0x73, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x1F, 0x7C, 0x64, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6C, 0x55, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x2E, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x27, 0xF5, 0x42, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, +0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, 0x00, +0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, +0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, +0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, +0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, 0x00, 0x00, 0x00, 0x38, 0xDD, 0x61, 0x10, 0x00, 0x00, +0x00, 0x00, 0x39, 0xFB, 0x76, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xBD, 0x43, 0x10, 0x00, 0x00, +0x00, 0x00, 0x3B, 0xDB, 0x58, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xA6, 0x5F, 0x90, 0x00, 0x00, +0x00, 0x00, 0x3D, 0xBB, 0x3A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x86, 0x41, 0x90, 0x00, 0x00, +0x00, 0x00, 0x3F, 0x9B, 0x1C, 0x90, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x23, 0x90, 0x00, 0x00, +0x00, 0x00, 0x41, 0x84, 0x39, 0x10, 0x00, 0x00, 0x00, 0x00, 0x42, 0x46, 0x05, 0x90, 0x00, 0x00, +0x00, 0x00, 0x43, 0x64, 0x1B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, 0xE7, 0x90, 0x00, 0x00, +0x00, 0x00, 0x45, 0x43, 0xFD, 0x10, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0xC9, 0x90, 0x00, 0x00, +0x00, 0x00, 0x47, 0x23, 0xDF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x47, 0xEE, 0xE6, 0x10, 0x00, 0x00, +0x00, 0x00, 0x49, 0x03, 0xC1, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0xCE, 0xC8, 0x10, 0x00, 0x00, +0x00, 0x00, 0x4A, 0xE3, 0xA3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xAE, 0xAA, 0x10, 0x00, 0x00, +0x00, 0x00, 0x4C, 0xCC, 0xBF, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x8E, 0x8C, 0x10, 0x00, 0x00, +0x00, 0x00, 0x4E, 0xAC, 0xA1, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6E, 0x6E, 0x10, 0x00, 0x00, +0x00, 0x00, 0x50, 0x8C, 0x83, 0x90, 0x00, 0x00, 0x00, 0x00, 0x51, 0x57, 0x8A, 0x90, 0x00, 0x00, +0x00, 0x00, 0x52, 0x6C, 0x65, 0x90, 0x00, 0x00, 0x00, 0x00, 0x53, 0x37, 0x6C, 0x90, 0x00, 0x00, +0x00, 0x00, 0x54, 0x4C, 0x47, 0x90, 0x00, 0x00, 0x00, 0x00, 0x55, 0x17, 0x4E, 0x90, 0x00, 0x00, +0x00, 0x00, 0x56, 0x2C, 0x29, 0x90, 0x00, 0x00, 0x00, 0x00, 0x56, 0xF7, 0x30, 0x90, 0x00, 0x00, +0x00, 0x00, 0x58, 0x15, 0x46, 0x10, 0x00, 0x00, 0x00, 0x00, 0x58, 0xD7, 0x12, 0x90, 0x00, 0x00, +0x00, 0x00, 0x59, 0xF5, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xB6, 0xF4, 0x90, 0x00, 0x00, +0x00, 0x00, 0x5B, 0xD5, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5C, 0xA0, 0x11, 0x10, 0x00, 0x00, +0x00, 0x00, 0x5D, 0xB4, 0xEC, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7F, 0xF3, 0x10, 0x00, 0x00, +0x00, 0x00, 0x5F, 0x94, 0xCE, 0x10, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5F, 0xD5, 0x10, 0x00, 0x00, +0x00, 0x00, 0x61, 0x7D, 0xEA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x62, 0x3F, 0xB7, 0x10, 0x00, 0x00, +0x00, 0x00, 0x63, 0x5D, 0xCC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x64, 0x1F, 0x99, 0x10, 0x00, 0x00, +0x00, 0x00, 0x65, 0x3D, 0xAE, 0x90, 0x00, 0x00, 0x00, 0x00, 0x66, 0x08, 0xB5, 0x90, 0x00, 0x00, +0x00, 0x00, 0x67, 0x1D, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x67, 0xE8, 0x97, 0x90, 0x00, 0x00, +0x00, 0x00, 0x68, 0xFD, 0x72, 0x90, 0x00, 0x00, 0x00, 0x00, 0x69, 0xC8, 0x79, 0x90, 0x00, 0x00, +0x00, 0x00, 0x6A, 0xDD, 0x54, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6B, 0xA8, 0x5B, 0x90, 0x00, 0x00, +0x00, 0x00, 0x6C, 0xC6, 0x71, 0x10, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x88, 0x3D, 0x90, 0x00, 0x00, +0x00, 0x00, 0x6E, 0xA6, 0x53, 0x10, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x68, 0x1F, 0x90, 0x00, 0x00, +0x00, 0x00, 0x70, 0x86, 0x35, 0x10, 0x00, 0x00, 0x00, 0x00, 0x71, 0x51, 0x3C, 0x10, 0x00, 0x00, +0x00, 0x00, 0x72, 0x66, 0x17, 0x10, 0x00, 0x00, 0x00, 0x00, 0x73, 0x31, 0x1E, 0x10, 0x00, 0x00, +0x00, 0x00, 0x74, 0x45, 0xF9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x00, 0x10, 0x00, 0x00, +0x00, 0x00, 0x76, 0x2F, 0x15, 0x90, 0x00, 0x00, 0x00, 0x00, 0x76, 0xF0, 0xE2, 0x10, 0x00, 0x00, +0x00, 0x00, 0x78, 0x0E, 0xF7, 0x90, 0x00, 0x00, 0x00, 0x00, 0x78, 0xD0, 0xC4, 0x10, 0x00, 0x00, +0x00, 0x00, 0x79, 0xEE, 0xD9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xB0, 0xA6, 0x10, 0x00, 0x00, +0x00, 0x00, 0x7B, 0xCE, 0xBB, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x99, 0xC2, 0x90, 0x00, 0x00, +0x00, 0x00, 0x7D, 0xAE, 0x9D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, +0x00, 0x00, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x05, 0x04, 0x05, +0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, +0x01, 0x08, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x00, 0x00, +0x14, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, +0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, +0x00, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, +0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, +0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, -0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x01, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0xFF, -0xFF, 0xFF, 0x6A, 0xEE, 0xB0, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x09, 0x71, 0x90, 0xFF, 0xFF, -0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, -0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x92, 0x34, 0x10, 0xFF, 0xFF, -0xFF, 0xFF, 0xD0, 0xA1, 0x9E, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD1, 0xE5, 0xFD, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x15, 0x27, 0xA7, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x16, 0x18, 0xDC, 0x40, 0x00, 0x00, -0x00, 0x00, 0x17, 0x08, 0xDB, 0x50, 0x00, 0x00, 0x00, 0x00, 0x17, 0xFA, 0x0F, 0xC0, 0x00, 0x00, -0x00, 0x00, 0x18, 0xEA, 0x0E, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x19, 0xDB, 0x43, 0x40, 0x00, 0x00, -0x00, 0x00, 0x1A, 0xCC, 0x93, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0xA0, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x1C, 0xAC, 0x91, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9C, 0x82, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x1E, 0x8C, 0x73, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x64, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x20, 0x6C, 0x55, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x26, 0x8D, 0x2E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x42, 0xA0, 0x00, 0x00, -0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, 0x00, -0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, -0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, -0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, -0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x00, 0x00, -0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, -0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, -0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, 0x00, -0x00, 0x00, 0x38, 0xDD, 0x61, 0x10, 0x00, 0x00, 0x00, 0x00, 0x39, 0xFB, 0x76, 0x90, 0x00, 0x00, -0x00, 0x00, 0x3A, 0xBD, 0x43, 0x10, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xDB, 0x58, 0x90, 0x00, 0x00, -0x00, 0x00, 0x3C, 0xA6, 0x5F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xBB, 0x3A, 0x90, 0x00, 0x00, -0x00, 0x00, 0x3E, 0x86, 0x41, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9B, 0x1C, 0x90, 0x00, 0x00, -0x00, 0x00, 0x40, 0x66, 0x23, 0x90, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x39, 0x10, 0x00, 0x00, -0x00, 0x00, 0x42, 0x46, 0x05, 0x90, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x1B, 0x10, 0x00, 0x00, -0x00, 0x00, 0x44, 0x25, 0xE7, 0x90, 0x00, 0x00, 0x00, 0x00, 0x45, 0x43, 0xFD, 0x10, 0x00, 0x00, -0x00, 0x00, 0x46, 0x05, 0xC9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0x23, 0xDF, 0x10, 0x00, 0x00, -0x00, 0x00, 0x47, 0xEE, 0xE6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0x03, 0xC1, 0x10, 0x00, 0x00, -0x00, 0x00, 0x49, 0xCE, 0xC8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE3, 0xA3, 0x10, 0x00, 0x00, -0x00, 0x00, 0x4B, 0xAE, 0xAA, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xCC, 0xBF, 0x90, 0x00, 0x00, -0x00, 0x00, 0x4D, 0x8E, 0x8C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xAC, 0xA1, 0x90, 0x00, 0x00, -0x00, 0x00, 0x4F, 0x6E, 0x6E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8C, 0x83, 0x90, 0x00, 0x00, -0x00, 0x00, 0x51, 0x57, 0x8A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x65, 0x90, 0x00, 0x00, -0x00, 0x00, 0x53, 0x37, 0x6C, 0x90, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x47, 0x90, 0x00, 0x00, -0x00, 0x00, 0x55, 0x17, 0x4E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x56, 0x2C, 0x29, 0x90, 0x00, 0x00, -0x00, 0x00, 0x56, 0xF7, 0x30, 0x90, 0x00, 0x00, 0x00, 0x00, 0x58, 0x15, 0x46, 0x10, 0x00, 0x00, -0x00, 0x00, 0x58, 0xD7, 0x12, 0x90, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF5, 0x28, 0x10, 0x00, 0x00, -0x00, 0x00, 0x5A, 0xB6, 0xF4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD5, 0x0A, 0x10, 0x00, 0x00, -0x00, 0x00, 0x5C, 0xA0, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB4, 0xEC, 0x10, 0x00, 0x00, -0x00, 0x00, 0x5E, 0x7F, 0xF3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x94, 0xCE, 0x10, 0x00, 0x00, -0x00, 0x00, 0x60, 0x5F, 0xD5, 0x10, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7D, 0xEA, 0x90, 0x00, 0x00, -0x00, 0x00, 0x62, 0x3F, 0xB7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5D, 0xCC, 0x90, 0x00, 0x00, -0x00, 0x00, 0x64, 0x1F, 0x99, 0x10, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3D, 0xAE, 0x90, 0x00, 0x00, -0x00, 0x00, 0x66, 0x08, 0xB5, 0x90, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1D, 0x90, 0x90, 0x00, 0x00, -0x00, 0x00, 0x67, 0xE8, 0x97, 0x90, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFD, 0x72, 0x90, 0x00, 0x00, -0x00, 0x00, 0x69, 0xC8, 0x79, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDD, 0x54, 0x90, 0x00, 0x00, -0x00, 0x00, 0x6B, 0xA8, 0x5B, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC6, 0x71, 0x10, 0x00, 0x00, -0x00, 0x00, 0x6D, 0x88, 0x3D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA6, 0x53, 0x10, 0x00, 0x00, -0x00, 0x00, 0x6F, 0x68, 0x1F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x70, 0x86, 0x35, 0x10, 0x00, 0x00, -0x00, 0x00, 0x71, 0x51, 0x3C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x72, 0x66, 0x17, 0x10, 0x00, 0x00, -0x00, 0x00, 0x73, 0x31, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x74, 0x45, 0xF9, 0x10, 0x00, 0x00, -0x00, 0x00, 0x75, 0x11, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2F, 0x15, 0x90, 0x00, 0x00, -0x00, 0x00, 0x76, 0xF0, 0xE2, 0x10, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0E, 0xF7, 0x90, 0x00, 0x00, -0x00, 0x00, 0x78, 0xD0, 0xC4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEE, 0xD9, 0x90, 0x00, 0x00, -0x00, 0x00, 0x7A, 0xB0, 0xA6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCE, 0xBB, 0x90, 0x00, 0x00, -0x00, 0x00, 0x7C, 0x99, 0xC2, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAE, 0x9D, 0x90, 0x00, 0x00, -0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, -0x03, 0x02, 0x03, 0x02, 0x01, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x01, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x00, 0x00, 0x14, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, -0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, -0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x4C, 0x4D, -0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, -0x53, 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, -0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD3, 0x83, 0x22, 0x01, 0x34, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x0E, 0x54, 0x72, @@ -62882,8 +62888,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { /* Europe/Zaporozhye */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x24, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x24, 0x80, 0x00, 0x00, 0x00, 0xAA, 0x19, 0xA3, 0x30, 0xB5, 0xA4, 0x19, 0x60, 0xCA, 0xAA, 0xE7, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCE, 0xBD, 0xD6, 0x70, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, @@ -62891,9 +62897,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, 0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, -0x28, 0xE4, 0xED, 0x50, 0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, -0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0xBC, 0x90, -0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, +0x28, 0xE4, 0xED, 0x50, 0x29, 0xD5, 0x08, 0x80, 0x2A, 0xC4, 0xF9, 0x80, 0x2B, 0xB4, 0xEA, 0x80, +0x2C, 0xA4, 0xDB, 0x80, 0x2D, 0x94, 0xCC, 0x80, 0x2E, 0x84, 0xBD, 0x80, 0x2F, 0x74, 0xAE, 0x80, +0x30, 0x64, 0x9F, 0x80, 0x31, 0x5D, 0xCB, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, @@ -62916,24 +62922,25 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x00, 0x00, +0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x20, 0xD0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1B, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1B, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, -0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x4C, 0x4D, 0x54, 0x00, -0x2B, 0x30, 0x32, 0x32, 0x30, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, -0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, 0x1C, 0x20, +0x00, 0x0A, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x4C, 0x4D, 0x54, 0x00, 0x2B, 0x30, 0x32, 0x32, +0x30, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, +0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, -0x00, 0x0D, 0x00, 0x00, 0x00, 0x24, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC3, 0x08, 0xFF, 0xFF, +0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, +0x00, 0x0F, 0x00, 0x00, 0x00, 0x24, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC3, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA3, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA, 0xAA, 0xE7, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, @@ -62948,11 +62955,11 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x27, 0x70, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x18, 0x70, 0x00, 0x00, -0x00, 0x00, 0x28, 0xE4, 0xED, 0x50, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, 0x00, -0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, 0x00, -0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, -0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, -0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x00, 0x00, +0x00, 0x00, 0x28, 0xE4, 0xED, 0x50, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, +0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, @@ -62996,20 +63003,21 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x00, 0x7D, 0xAE, 0x9D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, +0x09, 0x08, 0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x20, 0xD0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1B, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1B, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x1F, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x4C, 0x4D, -0x54, 0x00, 0x2B, 0x30, 0x32, 0x32, 0x30, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, -0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, -0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, +0x01, 0x1F, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, +0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x4C, 0x4D, 0x54, 0x00, 0x2B, 0x30, +0x32, 0x32, 0x30, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, +0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, +0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD2, 0x51, 0x25, 0x01, 0x48, @@ -69555,4 +69563,4 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { }; #endif -const timelib_tzdb timezonedb_builtin = { "2021.5", 595, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; +const timelib_tzdb timezonedb_builtin = { "2022.1", 595, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; From 7aefee161329c78e4bb24695517cdcfe4a96c438 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Thu, 7 Apr 2022 10:45:19 +0100 Subject: [PATCH 17/78] Updated to version 2022.1 (2022a) --- ext/date/lib/timezonedb.h | 2136 +++++++++++++++++++------------------ 1 file changed, 1072 insertions(+), 1064 deletions(-) diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h index 411ef5b44254e..60cc4b3ab6cc9 100644 --- a/ext/date/lib/timezonedb.h +++ b/ext/date/lib/timezonedb.h @@ -270,340 +270,340 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[595] = { { "Asia/Dushanbe" , 0x0247C2 }, { "Asia/Famagusta" , 0x02493C }, { "Asia/Gaza" , 0x024D03 }, - { "Asia/Harbin" , 0x0251E7 }, - { "Asia/Hebron" , 0x02537C }, - { "Asia/Ho_Chi_Minh" , 0x025871 }, - { "Asia/Hong_Kong" , 0x025969 }, - { "Asia/Hovd" , 0x025C7C }, - { "Asia/Irkutsk" , 0x025F05 }, - { "Asia/Istanbul" , 0x026223 }, - { "Asia/Jakarta" , 0x0266DF }, - { "Asia/Jayapura" , 0x0267F0 }, - { "Asia/Jerusalem" , 0x0268DD }, - { "Asia/Kabul" , 0x026D1B }, - { "Asia/Kamchatka" , 0x026DC6 }, - { "Asia/Karachi" , 0x0270BB }, - { "Asia/Kashgar" , 0x0271D1 }, - { "Asia/Kathmandu" , 0x027262 }, - { "Asia/Katmandu" , 0x02730F }, - { "Asia/Khandyga" , 0x0273BC }, - { "Asia/Kolkata" , 0x0276ED }, - { "Asia/Krasnoyarsk" , 0x0277D5 }, - { "Asia/Kuala_Lumpur" , 0x027ADF }, - { "Asia/Kuching" , 0x027BFF }, - { "Asia/Kuwait" , 0x027D59 }, - { "Asia/Macao" , 0x027DEA }, - { "Asia/Macau" , 0x02810D }, - { "Asia/Magadan" , 0x028430 }, - { "Asia/Makassar" , 0x02873B }, - { "Asia/Manila" , 0x02884E }, - { "Asia/Muscat" , 0x028948 }, - { "Asia/Nicosia" , 0x0289D9 }, - { "Asia/Novokuznetsk" , 0x028C4D }, - { "Asia/Novosibirsk" , 0x028F40 }, - { "Asia/Omsk" , 0x029251 }, - { "Asia/Oral" , 0x02954F }, - { "Asia/Phnom_Penh" , 0x0297DB }, - { "Asia/Pontianak" , 0x02987F }, - { "Asia/Pyongyang" , 0x029998 }, - { "Asia/Qatar" , 0x029A5B }, - { "Asia/Qostanay" , 0x029AFF }, - { "Asia/Qyzylorda" , 0x029D8C }, - { "Asia/Rangoon" , 0x02A025 }, - { "Asia/Riyadh" , 0x02A0EC }, - { "Asia/Saigon" , 0x02A17D }, - { "Asia/Sakhalin" , 0x02A275 }, - { "Asia/Samarkand" , 0x02A58C }, - { "Asia/Seoul" , 0x02A717 }, - { "Asia/Shanghai" , 0x02A8C2 }, - { "Asia/Singapore" , 0x02AA63 }, - { "Asia/Srednekolymsk" , 0x02AB6F }, - { "Asia/Taipei" , 0x02AE83 }, - { "Asia/Tashkent" , 0x02B08E }, - { "Asia/Tbilisi" , 0x02B219 }, - { "Asia/Tehran" , 0x02B49A }, - { "Asia/Tel_Aviv" , 0x02BC7A }, - { "Asia/Thimbu" , 0x02C0B8 }, - { "Asia/Thimphu" , 0x02C15E }, - { "Asia/Tokyo" , 0x02C204 }, - { "Asia/Tomsk" , 0x02C2E5 }, - { "Asia/Ujung_Pandang" , 0x02C5F0 }, - { "Asia/Ulaanbaatar" , 0x02C6BA }, - { "Asia/Ulan_Bator" , 0x02C92D }, - { "Asia/Urumqi" , 0x02CB8B }, - { "Asia/Ust-Nera" , 0x02CC29 }, - { "Asia/Vientiane" , 0x02CF4C }, - { "Asia/Vladivostok" , 0x02CFF0 }, - { "Asia/Yakutsk" , 0x02D2F5 }, - { "Asia/Yangon" , 0x02D5F9 }, - { "Asia/Yekaterinburg" , 0x02D6C0 }, - { "Asia/Yerevan" , 0x02D9D2 }, - { "Atlantic/Azores" , 0x02DCA2 }, - { "Atlantic/Bermuda" , 0x02E261 }, - { "Atlantic/Canary" , 0x02E66D }, - { "Atlantic/Cape_Verde" , 0x02E865 }, - { "Atlantic/Faeroe" , 0x02E920 }, - { "Atlantic/Faroe" , 0x02EAE5 }, - { "Atlantic/Jan_Mayen" , 0x02ECAA }, - { "Atlantic/Madeira" , 0x02EF5A }, - { "Atlantic/Reykjavik" , 0x02F522 }, - { "Atlantic/South_Georgia" , 0x02F81F }, - { "Atlantic/St_Helena" , 0x02F8AF }, - { "Atlantic/Stanley" , 0x02F93D }, - { "Australia/ACT" , 0x02FC5E }, - { "Australia/Adelaide" , 0x02FFF2 }, - { "Australia/Brisbane" , 0x0303A6 }, - { "Australia/Broken_Hill" , 0x0304EA }, - { "Australia/Canberra" , 0x0308BF }, - { "Australia/Currie" , 0x030C53 }, - { "Australia/Darwin" , 0x03104A }, - { "Australia/Eucla" , 0x031152 }, - { "Australia/Hobart" , 0x0312B1 }, - { "Australia/LHI" , 0x0316B0 }, - { "Australia/Lindeman" , 0x031970 }, - { "Australia/Lord_Howe" , 0x031AE0 }, - { "Australia/Melbourne" , 0x031DB0 }, - { "Australia/North" , 0x03214C }, - { "Australia/NSW" , 0x032242 }, - { "Australia/Perth" , 0x0325D6 }, - { "Australia/Queensland" , 0x032732 }, - { "Australia/South" , 0x03285F }, - { "Australia/Sydney" , 0x032C04 }, - { "Australia/Tasmania" , 0x032FB4 }, - { "Australia/Victoria" , 0x0333AB }, - { "Australia/West" , 0x03373F }, - { "Australia/Yancowinna" , 0x03387D }, - { "Brazil/Acre" , 0x033C36 }, - { "Brazil/DeNoronha" , 0x033DE4 }, - { "Brazil/East" , 0x033FD4 }, - { "Brazil/West" , 0x034398 }, - { "Canada/Atlantic" , 0x034540 }, - { "Canada/Central" , 0x034BD4 }, - { "Canada/Eastern" , 0x0350EE }, - { "Canada/Mountain" , 0x0357AF }, - { "Canada/Newfoundland" , 0x035B85 }, - { "Canada/Pacific" , 0x0362E7 }, - { "Canada/Saskatchewan" , 0x036825 }, - { "Canada/Yukon" , 0x036AAF }, - { "CET" , 0x036EC0 }, - { "Chile/Continental" , 0x037139 }, - { "Chile/EasterIsland" , 0x037647 }, - { "CST6CDT" , 0x037AA1 }, - { "Cuba" , 0x037E64 }, - { "EET" , 0x0382CD }, - { "Egypt" , 0x0384CA }, - { "Eire" , 0x0389D2 }, - { "EST" , 0x038FB6 }, - { "EST5EDT" , 0x039031 }, - { "Etc/GMT" , 0x0393F4 }, - { "Etc/GMT+0" , 0x03946F }, - { "Etc/GMT+1" , 0x0394EA }, - { "Etc/GMT+10" , 0x039567 }, - { "Etc/GMT+11" , 0x0395E5 }, - { "Etc/GMT+12" , 0x039663 }, - { "Etc/GMT+2" , 0x0396E1 }, - { "Etc/GMT+3" , 0x03975E }, - { "Etc/GMT+4" , 0x0397DB }, - { "Etc/GMT+5" , 0x039858 }, - { "Etc/GMT+6" , 0x0398D5 }, - { "Etc/GMT+7" , 0x039952 }, - { "Etc/GMT+8" , 0x0399CF }, - { "Etc/GMT+9" , 0x039A4C }, - { "Etc/GMT-0" , 0x039AC9 }, - { "Etc/GMT-1" , 0x039B44 }, - { "Etc/GMT-10" , 0x039BC2 }, - { "Etc/GMT-11" , 0x039C41 }, - { "Etc/GMT-12" , 0x039CC0 }, - { "Etc/GMT-13" , 0x039D3F }, - { "Etc/GMT-14" , 0x039DBE }, - { "Etc/GMT-2" , 0x039E3D }, - { "Etc/GMT-3" , 0x039EBB }, - { "Etc/GMT-4" , 0x039F39 }, - { "Etc/GMT-5" , 0x039FB7 }, - { "Etc/GMT-6" , 0x03A035 }, - { "Etc/GMT-7" , 0x03A0B3 }, - { "Etc/GMT-8" , 0x03A131 }, - { "Etc/GMT-9" , 0x03A1AF }, - { "Etc/GMT0" , 0x03A22D }, - { "Etc/Greenwich" , 0x03A2A8 }, - { "Etc/UCT" , 0x03A323 }, - { "Etc/Universal" , 0x03A39E }, - { "Etc/UTC" , 0x03A419 }, - { "Etc/Zulu" , 0x03A494 }, - { "Europe/Amsterdam" , 0x03A50F }, - { "Europe/Andorra" , 0x03A94A }, - { "Europe/Astrakhan" , 0x03AADB }, - { "Europe/Athens" , 0x03ADCF }, - { "Europe/Belfast" , 0x03B085 }, - { "Europe/Belgrade" , 0x03B6D0 }, - { "Europe/Berlin" , 0x03B8BA }, - { "Europe/Bratislava" , 0x03BB9B }, - { "Europe/Brussels" , 0x03BE7A }, - { "Europe/Bucharest" , 0x03C2D5 }, - { "Europe/Budapest" , 0x03C576 }, - { "Europe/Busingen" , 0x03C880 }, - { "Europe/Chisinau" , 0x03CA85 }, - { "Europe/Copenhagen" , 0x03CD84 }, - { "Europe/Dublin" , 0x03CFFF }, - { "Europe/Gibraltar" , 0x03D5E3 }, - { "Europe/Guernsey" , 0x03DAB3 }, - { "Europe/Helsinki" , 0x03E0FE }, - { "Europe/Isle_of_Man" , 0x03E2EB }, - { "Europe/Istanbul" , 0x03E936 }, - { "Europe/Jersey" , 0x03EDF2 }, - { "Europe/Kaliningrad" , 0x03F43D }, - { "Europe/Kiev" , 0x03F7E5 }, - { "Europe/Kirov" , 0x03FA2A }, - { "Europe/Lisbon" , 0x03FD11 }, - { "Europe/Ljubljana" , 0x0402DE }, - { "Europe/London" , 0x0404C8 }, - { "Europe/Luxembourg" , 0x040B13 }, - { "Europe/Madrid" , 0x040F5E }, - { "Europe/Malta" , 0x0412FB }, - { "Europe/Mariehamn" , 0x0416A7 }, - { "Europe/Minsk" , 0x041894 }, - { "Europe/Monaco" , 0x041BC8 }, - { "Europe/Moscow" , 0x04202E }, - { "Europe/Nicosia" , 0x0423DA }, - { "Europe/Oslo" , 0x04263B }, - { "Europe/Paris" , 0x0428EB }, - { "Europe/Podgorica" , 0x042D48 }, - { "Europe/Prague" , 0x042F32 }, - { "Europe/Riga" , 0x043211 }, - { "Europe/Rome" , 0x0434D3 }, - { "Europe/Samara" , 0x043892 }, - { "Europe/San_Marino" , 0x043B93 }, - { "Europe/Sarajevo" , 0x043F52 }, - { "Europe/Saratov" , 0x04413C }, - { "Europe/Simferopol" , 0x04442E }, - { "Europe/Skopje" , 0x0447A1 }, - { "Europe/Sofia" , 0x04498B }, - { "Europe/Stockholm" , 0x044BE7 }, - { "Europe/Tallinn" , 0x044DE4 }, - { "Europe/Tirane" , 0x045093 }, - { "Europe/Tiraspol" , 0x0452FB }, - { "Europe/Ulyanovsk" , 0x0455FA }, - { "Europe/Uzhgorod" , 0x045910 }, - { "Europe/Vaduz" , 0x045B3C }, - { "Europe/Vatican" , 0x045D39 }, - { "Europe/Vienna" , 0x0460F8 }, - { "Europe/Vilnius" , 0x046396 }, - { "Europe/Volgograd" , 0x046646 }, - { "Europe/Warsaw" , 0x046943 }, - { "Europe/Zagreb" , 0x046CEA }, - { "Europe/Zaporozhye" , 0x046ED4 }, - { "Europe/Zurich" , 0x04712B }, - { "Factory" , 0x047328 }, - { "GB" , 0x0473A5 }, - { "GB-Eire" , 0x0479F0 }, - { "GMT" , 0x04803B }, - { "GMT+0" , 0x0480B6 }, - { "GMT-0" , 0x048131 }, - { "GMT0" , 0x0481AC }, - { "Greenwich" , 0x048227 }, - { "Hongkong" , 0x0482A2 }, - { "HST" , 0x0485B5 }, - { "Iceland" , 0x048631 }, - { "Indian/Antananarivo" , 0x04892E }, - { "Indian/Chagos" , 0x0489F9 }, - { "Indian/Christmas" , 0x048A9D }, - { "Indian/Cocos" , 0x048B2E }, - { "Indian/Comoro" , 0x048BC6 }, - { "Indian/Kerguelen" , 0x048C91 }, - { "Indian/Mahe" , 0x048D22 }, - { "Indian/Maldives" , 0x048DB3 }, - { "Indian/Mauritius" , 0x048E57 }, - { "Indian/Mayotte" , 0x048F16 }, - { "Indian/Reunion" , 0x048FE1 }, - { "Iran" , 0x049072 }, - { "Israel" , 0x049852 }, - { "Jamaica" , 0x049C90 }, - { "Japan" , 0x049DEF }, - { "Kwajalein" , 0x049ED0 }, - { "Libya" , 0x049FB7 }, - { "MET" , 0x04A172 }, - { "Mexico/BajaNorte" , 0x04A3EB }, - { "Mexico/BajaSur" , 0x04A7F8 }, - { "Mexico/General" , 0x04A973 }, - { "MST" , 0x04AB1B }, - { "MST7MDT" , 0x04AB96 }, - { "Navajo" , 0x04AF59 }, - { "NZ" , 0x04B377 }, - { "NZ-CHAT" , 0x04B796 }, - { "Pacific/Apia" , 0x04BACA }, - { "Pacific/Auckland" , 0x04BC6D }, - { "Pacific/Bougainville" , 0x04C0A4 }, - { "Pacific/Chatham" , 0x04C185 }, - { "Pacific/Chuuk" , 0x04C4C8 }, - { "Pacific/Easter" , 0x04C5A6 }, - { "Pacific/Efate" , 0x04CA0D }, - { "Pacific/Enderbury" , 0x04CB6F }, - { "Pacific/Fakaofo" , 0x04CC27 }, - { "Pacific/Fiji" , 0x04CCCC }, - { "Pacific/Funafuti" , 0x04CE84 }, - { "Pacific/Galapagos" , 0x04CF16 }, - { "Pacific/Gambier" , 0x04CFE2 }, - { "Pacific/Guadalcanal" , 0x04D081 }, - { "Pacific/Guam" , 0x04D113 }, - { "Pacific/Honolulu" , 0x04D27D }, - { "Pacific/Johnston" , 0x04D36C }, - { "Pacific/Kanton" , 0x04D455 }, - { "Pacific/Kiritimati" , 0x04D51C }, - { "Pacific/Kosrae" , 0x04D5E2 }, - { "Pacific/Kwajalein" , 0x04D6E6 }, - { "Pacific/Majuro" , 0x04D7D6 }, - { "Pacific/Marquesas" , 0x04D8D9 }, - { "Pacific/Midway" , 0x04D981 }, - { "Pacific/Nauru" , 0x04DA2D }, - { "Pacific/Niue" , 0x04DAF0 }, - { "Pacific/Norfolk" , 0x04DB96 }, - { "Pacific/Noumea" , 0x04DC99 }, - { "Pacific/Pago_Pago" , 0x04DD6B }, - { "Pacific/Palau" , 0x04DE09 }, - { "Pacific/Pitcairn" , 0x04DEA9 }, - { "Pacific/Pohnpei" , 0x04DF4E }, - { "Pacific/Ponape" , 0x04E03E }, - { "Pacific/Port_Moresby" , 0x04E120 }, - { "Pacific/Rarotonga" , 0x04E1E3 }, - { "Pacific/Saipan" , 0x04E385 }, - { "Pacific/Samoa" , 0x04E4EF }, - { "Pacific/Tahiti" , 0x04E58D }, - { "Pacific/Tarawa" , 0x04E62D }, - { "Pacific/Tongatapu" , 0x04E6CE }, - { "Pacific/Truk" , 0x04E7C7 }, - { "Pacific/Wake" , 0x04E896 }, - { "Pacific/Wallis" , 0x04E933 }, - { "Pacific/Yap" , 0x04E9C5 }, - { "Poland" , 0x04EA94 }, - { "Portugal" , 0x04EE3B }, - { "PRC" , 0x04F3F5 }, - { "PST8PDT" , 0x04F58A }, - { "ROC" , 0x04F94D }, - { "ROK" , 0x04FB58 }, - { "Singapore" , 0x04FD03 }, - { "Turkey" , 0x04FE0F }, - { "UCT" , 0x0502CB }, - { "Universal" , 0x050346 }, - { "US/Alaska" , 0x0503C1 }, - { "US/Aleutian" , 0x05079E }, - { "US/Arizona" , 0x050B73 }, - { "US/Central" , 0x050C6F }, - { "US/East-Indiana" , 0x051355 }, - { "US/Eastern" , 0x051574 }, - { "US/Hawaii" , 0x051C50 }, - { "US/Indiana-Starke" , 0x051D39 }, - { "US/Michigan" , 0x05213D }, - { "US/Mountain" , 0x0524CC }, - { "US/Pacific" , 0x0528EA }, - { "US/Samoa" , 0x052E04 }, - { "UTC" , 0x052EA2 }, - { "W-SU" , 0x052F1D }, - { "WET" , 0x0532B5 }, - { "Zulu" , 0x0534AF }, + { "Asia/Harbin" , 0x0251F1 }, + { "Asia/Hebron" , 0x025386 }, + { "Asia/Ho_Chi_Minh" , 0x025885 }, + { "Asia/Hong_Kong" , 0x02597D }, + { "Asia/Hovd" , 0x025C90 }, + { "Asia/Irkutsk" , 0x025F19 }, + { "Asia/Istanbul" , 0x026237 }, + { "Asia/Jakarta" , 0x0266F3 }, + { "Asia/Jayapura" , 0x026804 }, + { "Asia/Jerusalem" , 0x0268F1 }, + { "Asia/Kabul" , 0x026D2F }, + { "Asia/Kamchatka" , 0x026DDA }, + { "Asia/Karachi" , 0x0270CF }, + { "Asia/Kashgar" , 0x0271E5 }, + { "Asia/Kathmandu" , 0x027276 }, + { "Asia/Katmandu" , 0x027323 }, + { "Asia/Khandyga" , 0x0273D0 }, + { "Asia/Kolkata" , 0x027701 }, + { "Asia/Krasnoyarsk" , 0x0277E9 }, + { "Asia/Kuala_Lumpur" , 0x027AF3 }, + { "Asia/Kuching" , 0x027C13 }, + { "Asia/Kuwait" , 0x027D6D }, + { "Asia/Macao" , 0x027DFE }, + { "Asia/Macau" , 0x028121 }, + { "Asia/Magadan" , 0x028444 }, + { "Asia/Makassar" , 0x02874F }, + { "Asia/Manila" , 0x028862 }, + { "Asia/Muscat" , 0x02895C }, + { "Asia/Nicosia" , 0x0289ED }, + { "Asia/Novokuznetsk" , 0x028C61 }, + { "Asia/Novosibirsk" , 0x028F54 }, + { "Asia/Omsk" , 0x029265 }, + { "Asia/Oral" , 0x029563 }, + { "Asia/Phnom_Penh" , 0x0297EF }, + { "Asia/Pontianak" , 0x029893 }, + { "Asia/Pyongyang" , 0x0299AC }, + { "Asia/Qatar" , 0x029A6F }, + { "Asia/Qostanay" , 0x029B13 }, + { "Asia/Qyzylorda" , 0x029DA0 }, + { "Asia/Rangoon" , 0x02A039 }, + { "Asia/Riyadh" , 0x02A100 }, + { "Asia/Saigon" , 0x02A191 }, + { "Asia/Sakhalin" , 0x02A289 }, + { "Asia/Samarkand" , 0x02A5A0 }, + { "Asia/Seoul" , 0x02A72B }, + { "Asia/Shanghai" , 0x02A8D6 }, + { "Asia/Singapore" , 0x02AA77 }, + { "Asia/Srednekolymsk" , 0x02AB83 }, + { "Asia/Taipei" , 0x02AE97 }, + { "Asia/Tashkent" , 0x02B0A2 }, + { "Asia/Tbilisi" , 0x02B22D }, + { "Asia/Tehran" , 0x02B4AE }, + { "Asia/Tel_Aviv" , 0x02BC8E }, + { "Asia/Thimbu" , 0x02C0CC }, + { "Asia/Thimphu" , 0x02C172 }, + { "Asia/Tokyo" , 0x02C218 }, + { "Asia/Tomsk" , 0x02C2F9 }, + { "Asia/Ujung_Pandang" , 0x02C604 }, + { "Asia/Ulaanbaatar" , 0x02C6CE }, + { "Asia/Ulan_Bator" , 0x02C941 }, + { "Asia/Urumqi" , 0x02CB9F }, + { "Asia/Ust-Nera" , 0x02CC3D }, + { "Asia/Vientiane" , 0x02CF60 }, + { "Asia/Vladivostok" , 0x02D004 }, + { "Asia/Yakutsk" , 0x02D309 }, + { "Asia/Yangon" , 0x02D60D }, + { "Asia/Yekaterinburg" , 0x02D6D4 }, + { "Asia/Yerevan" , 0x02D9E6 }, + { "Atlantic/Azores" , 0x02DCB6 }, + { "Atlantic/Bermuda" , 0x02E275 }, + { "Atlantic/Canary" , 0x02E681 }, + { "Atlantic/Cape_Verde" , 0x02E879 }, + { "Atlantic/Faeroe" , 0x02E934 }, + { "Atlantic/Faroe" , 0x02EAF9 }, + { "Atlantic/Jan_Mayen" , 0x02ECBE }, + { "Atlantic/Madeira" , 0x02EF6E }, + { "Atlantic/Reykjavik" , 0x02F536 }, + { "Atlantic/South_Georgia" , 0x02F833 }, + { "Atlantic/St_Helena" , 0x02F8C3 }, + { "Atlantic/Stanley" , 0x02F951 }, + { "Australia/ACT" , 0x02FC72 }, + { "Australia/Adelaide" , 0x030006 }, + { "Australia/Brisbane" , 0x0303BA }, + { "Australia/Broken_Hill" , 0x0304FE }, + { "Australia/Canberra" , 0x0308D3 }, + { "Australia/Currie" , 0x030C67 }, + { "Australia/Darwin" , 0x03105E }, + { "Australia/Eucla" , 0x031166 }, + { "Australia/Hobart" , 0x0312C5 }, + { "Australia/LHI" , 0x0316C4 }, + { "Australia/Lindeman" , 0x031984 }, + { "Australia/Lord_Howe" , 0x031AF4 }, + { "Australia/Melbourne" , 0x031DC4 }, + { "Australia/North" , 0x032160 }, + { "Australia/NSW" , 0x032256 }, + { "Australia/Perth" , 0x0325EA }, + { "Australia/Queensland" , 0x032746 }, + { "Australia/South" , 0x032873 }, + { "Australia/Sydney" , 0x032C18 }, + { "Australia/Tasmania" , 0x032FC8 }, + { "Australia/Victoria" , 0x0333BF }, + { "Australia/West" , 0x033753 }, + { "Australia/Yancowinna" , 0x033891 }, + { "Brazil/Acre" , 0x033C4A }, + { "Brazil/DeNoronha" , 0x033DF8 }, + { "Brazil/East" , 0x033FE8 }, + { "Brazil/West" , 0x0343AC }, + { "Canada/Atlantic" , 0x034554 }, + { "Canada/Central" , 0x034BE8 }, + { "Canada/Eastern" , 0x035102 }, + { "Canada/Mountain" , 0x0357C3 }, + { "Canada/Newfoundland" , 0x035B99 }, + { "Canada/Pacific" , 0x0362FB }, + { "Canada/Saskatchewan" , 0x036839 }, + { "Canada/Yukon" , 0x036AC3 }, + { "CET" , 0x036ED4 }, + { "Chile/Continental" , 0x03714D }, + { "Chile/EasterIsland" , 0x03765B }, + { "CST6CDT" , 0x037AB5 }, + { "Cuba" , 0x037E78 }, + { "EET" , 0x0382E1 }, + { "Egypt" , 0x0384DE }, + { "Eire" , 0x0389E6 }, + { "EST" , 0x038FCA }, + { "EST5EDT" , 0x039045 }, + { "Etc/GMT" , 0x039408 }, + { "Etc/GMT+0" , 0x039483 }, + { "Etc/GMT+1" , 0x0394FE }, + { "Etc/GMT+10" , 0x03957B }, + { "Etc/GMT+11" , 0x0395F9 }, + { "Etc/GMT+12" , 0x039677 }, + { "Etc/GMT+2" , 0x0396F5 }, + { "Etc/GMT+3" , 0x039772 }, + { "Etc/GMT+4" , 0x0397EF }, + { "Etc/GMT+5" , 0x03986C }, + { "Etc/GMT+6" , 0x0398E9 }, + { "Etc/GMT+7" , 0x039966 }, + { "Etc/GMT+8" , 0x0399E3 }, + { "Etc/GMT+9" , 0x039A60 }, + { "Etc/GMT-0" , 0x039ADD }, + { "Etc/GMT-1" , 0x039B58 }, + { "Etc/GMT-10" , 0x039BD6 }, + { "Etc/GMT-11" , 0x039C55 }, + { "Etc/GMT-12" , 0x039CD4 }, + { "Etc/GMT-13" , 0x039D53 }, + { "Etc/GMT-14" , 0x039DD2 }, + { "Etc/GMT-2" , 0x039E51 }, + { "Etc/GMT-3" , 0x039ECF }, + { "Etc/GMT-4" , 0x039F4D }, + { "Etc/GMT-5" , 0x039FCB }, + { "Etc/GMT-6" , 0x03A049 }, + { "Etc/GMT-7" , 0x03A0C7 }, + { "Etc/GMT-8" , 0x03A145 }, + { "Etc/GMT-9" , 0x03A1C3 }, + { "Etc/GMT0" , 0x03A241 }, + { "Etc/Greenwich" , 0x03A2BC }, + { "Etc/UCT" , 0x03A337 }, + { "Etc/Universal" , 0x03A3B2 }, + { "Etc/UTC" , 0x03A42D }, + { "Etc/Zulu" , 0x03A4A8 }, + { "Europe/Amsterdam" , 0x03A523 }, + { "Europe/Andorra" , 0x03A95E }, + { "Europe/Astrakhan" , 0x03AAEF }, + { "Europe/Athens" , 0x03ADE3 }, + { "Europe/Belfast" , 0x03B099 }, + { "Europe/Belgrade" , 0x03B6E4 }, + { "Europe/Berlin" , 0x03B8CE }, + { "Europe/Bratislava" , 0x03BBAF }, + { "Europe/Brussels" , 0x03BE8E }, + { "Europe/Bucharest" , 0x03C2E9 }, + { "Europe/Budapest" , 0x03C58A }, + { "Europe/Busingen" , 0x03C894 }, + { "Europe/Chisinau" , 0x03CA99 }, + { "Europe/Copenhagen" , 0x03CD98 }, + { "Europe/Dublin" , 0x03D013 }, + { "Europe/Gibraltar" , 0x03D5F7 }, + { "Europe/Guernsey" , 0x03DAC7 }, + { "Europe/Helsinki" , 0x03E112 }, + { "Europe/Isle_of_Man" , 0x03E2FF }, + { "Europe/Istanbul" , 0x03E94A }, + { "Europe/Jersey" , 0x03EE06 }, + { "Europe/Kaliningrad" , 0x03F451 }, + { "Europe/Kiev" , 0x03F7F9 }, + { "Europe/Kirov" , 0x03FA47 }, + { "Europe/Lisbon" , 0x03FD2E }, + { "Europe/Ljubljana" , 0x0402FB }, + { "Europe/London" , 0x0404E5 }, + { "Europe/Luxembourg" , 0x040B30 }, + { "Europe/Madrid" , 0x040F7B }, + { "Europe/Malta" , 0x041318 }, + { "Europe/Mariehamn" , 0x0416C4 }, + { "Europe/Minsk" , 0x0418B1 }, + { "Europe/Monaco" , 0x041BE5 }, + { "Europe/Moscow" , 0x04204B }, + { "Europe/Nicosia" , 0x0423F7 }, + { "Europe/Oslo" , 0x042658 }, + { "Europe/Paris" , 0x042908 }, + { "Europe/Podgorica" , 0x042D65 }, + { "Europe/Prague" , 0x042F4F }, + { "Europe/Riga" , 0x04322E }, + { "Europe/Rome" , 0x0434F0 }, + { "Europe/Samara" , 0x0438AF }, + { "Europe/San_Marino" , 0x043BB0 }, + { "Europe/Sarajevo" , 0x043F6F }, + { "Europe/Saratov" , 0x044159 }, + { "Europe/Simferopol" , 0x04444B }, + { "Europe/Skopje" , 0x0447BE }, + { "Europe/Sofia" , 0x0449A8 }, + { "Europe/Stockholm" , 0x044C04 }, + { "Europe/Tallinn" , 0x044E01 }, + { "Europe/Tirane" , 0x0450B0 }, + { "Europe/Tiraspol" , 0x045318 }, + { "Europe/Ulyanovsk" , 0x045617 }, + { "Europe/Uzhgorod" , 0x04592D }, + { "Europe/Vaduz" , 0x045B62 }, + { "Europe/Vatican" , 0x045D5F }, + { "Europe/Vienna" , 0x04611E }, + { "Europe/Vilnius" , 0x0463BC }, + { "Europe/Volgograd" , 0x04666C }, + { "Europe/Warsaw" , 0x046969 }, + { "Europe/Zagreb" , 0x046D10 }, + { "Europe/Zaporozhye" , 0x046EFA }, + { "Europe/Zurich" , 0x04715A }, + { "Factory" , 0x047357 }, + { "GB" , 0x0473D4 }, + { "GB-Eire" , 0x047A1F }, + { "GMT" , 0x04806A }, + { "GMT+0" , 0x0480E5 }, + { "GMT-0" , 0x048160 }, + { "GMT0" , 0x0481DB }, + { "Greenwich" , 0x048256 }, + { "Hongkong" , 0x0482D1 }, + { "HST" , 0x0485E4 }, + { "Iceland" , 0x048660 }, + { "Indian/Antananarivo" , 0x04895D }, + { "Indian/Chagos" , 0x048A28 }, + { "Indian/Christmas" , 0x048ACC }, + { "Indian/Cocos" , 0x048B5D }, + { "Indian/Comoro" , 0x048BF5 }, + { "Indian/Kerguelen" , 0x048CC0 }, + { "Indian/Mahe" , 0x048D51 }, + { "Indian/Maldives" , 0x048DE2 }, + { "Indian/Mauritius" , 0x048E86 }, + { "Indian/Mayotte" , 0x048F45 }, + { "Indian/Reunion" , 0x049010 }, + { "Iran" , 0x0490A1 }, + { "Israel" , 0x049881 }, + { "Jamaica" , 0x049CBF }, + { "Japan" , 0x049E1E }, + { "Kwajalein" , 0x049EFF }, + { "Libya" , 0x049FE6 }, + { "MET" , 0x04A1A1 }, + { "Mexico/BajaNorte" , 0x04A41A }, + { "Mexico/BajaSur" , 0x04A827 }, + { "Mexico/General" , 0x04A9A2 }, + { "MST" , 0x04AB4A }, + { "MST7MDT" , 0x04ABC5 }, + { "Navajo" , 0x04AF88 }, + { "NZ" , 0x04B3A6 }, + { "NZ-CHAT" , 0x04B7C5 }, + { "Pacific/Apia" , 0x04BAF9 }, + { "Pacific/Auckland" , 0x04BC9C }, + { "Pacific/Bougainville" , 0x04C0D3 }, + { "Pacific/Chatham" , 0x04C1B4 }, + { "Pacific/Chuuk" , 0x04C4F7 }, + { "Pacific/Easter" , 0x04C5D5 }, + { "Pacific/Efate" , 0x04CA3C }, + { "Pacific/Enderbury" , 0x04CB9E }, + { "Pacific/Fakaofo" , 0x04CC56 }, + { "Pacific/Fiji" , 0x04CCFB }, + { "Pacific/Funafuti" , 0x04CEB3 }, + { "Pacific/Galapagos" , 0x04CF45 }, + { "Pacific/Gambier" , 0x04D011 }, + { "Pacific/Guadalcanal" , 0x04D0B0 }, + { "Pacific/Guam" , 0x04D142 }, + { "Pacific/Honolulu" , 0x04D2AC }, + { "Pacific/Johnston" , 0x04D39B }, + { "Pacific/Kanton" , 0x04D484 }, + { "Pacific/Kiritimati" , 0x04D54B }, + { "Pacific/Kosrae" , 0x04D611 }, + { "Pacific/Kwajalein" , 0x04D715 }, + { "Pacific/Majuro" , 0x04D805 }, + { "Pacific/Marquesas" , 0x04D908 }, + { "Pacific/Midway" , 0x04D9B0 }, + { "Pacific/Nauru" , 0x04DA5C }, + { "Pacific/Niue" , 0x04DB1F }, + { "Pacific/Norfolk" , 0x04DBC5 }, + { "Pacific/Noumea" , 0x04DCC8 }, + { "Pacific/Pago_Pago" , 0x04DD9A }, + { "Pacific/Palau" , 0x04DE38 }, + { "Pacific/Pitcairn" , 0x04DED8 }, + { "Pacific/Pohnpei" , 0x04DF7D }, + { "Pacific/Ponape" , 0x04E06D }, + { "Pacific/Port_Moresby" , 0x04E14F }, + { "Pacific/Rarotonga" , 0x04E212 }, + { "Pacific/Saipan" , 0x04E3B4 }, + { "Pacific/Samoa" , 0x04E51E }, + { "Pacific/Tahiti" , 0x04E5BC }, + { "Pacific/Tarawa" , 0x04E65C }, + { "Pacific/Tongatapu" , 0x04E6FD }, + { "Pacific/Truk" , 0x04E7F6 }, + { "Pacific/Wake" , 0x04E8C5 }, + { "Pacific/Wallis" , 0x04E962 }, + { "Pacific/Yap" , 0x04E9F4 }, + { "Poland" , 0x04EAC3 }, + { "Portugal" , 0x04EE6A }, + { "PRC" , 0x04F424 }, + { "PST8PDT" , 0x04F5B9 }, + { "ROC" , 0x04F97C }, + { "ROK" , 0x04FB87 }, + { "Singapore" , 0x04FD32 }, + { "Turkey" , 0x04FE3E }, + { "UCT" , 0x0502FA }, + { "Universal" , 0x050375 }, + { "US/Alaska" , 0x0503F0 }, + { "US/Aleutian" , 0x0507CD }, + { "US/Arizona" , 0x050BA2 }, + { "US/Central" , 0x050C9E }, + { "US/East-Indiana" , 0x051384 }, + { "US/Eastern" , 0x0515A3 }, + { "US/Hawaii" , 0x051C7F }, + { "US/Indiana-Starke" , 0x051D68 }, + { "US/Michigan" , 0x05216C }, + { "US/Mountain" , 0x0524FB }, + { "US/Pacific" , 0x052919 }, + { "US/Samoa" , 0x052E33 }, + { "UTC" , 0x052ED1 }, + { "W-SU" , 0x052F4C }, + { "WET" , 0x0532E4 }, + { "Zulu" , 0x0534DE }, }; -const unsigned char timelib_timezone_db_data_builtin[341290] = { +const unsigned char timelib_timezone_db_data_builtin[341337] = { /* Africa/Abidjan */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -7531,9 +7531,9 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x14, 0xFF, -0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, -0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, -0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, +0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, +0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, +0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, @@ -7596,7 +7596,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, -0x03, 0x05, 0x06, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, +0x03, 0x05, 0x06, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, @@ -8018,9 +8018,9 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0xFF, -0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, -0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, -0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, +0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, +0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, +0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, @@ -8086,8 +8086,8 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, -0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x00, 0xFF, -0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, +0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x00, 0xFF, +0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x0A, 0x3C, 0x2D, 0x30, 0x34, 0x3E, 0x34, 0x3C, 0x2D, 0x30, 0x33, 0x3E, 0x2C, 0x4D, 0x39, @@ -10702,7 +10702,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x59, 0xCF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0xFA, 0xA6, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x38, 0x9C, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE5, 0xEB, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xAC, 0xFE, 0x00, 0xFF, @@ -10761,21 +10761,21 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x5A, 0xB5, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, -0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7B, 0x1D, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x20, 0x50, -0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, -0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, -0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x0A, -0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, -0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x35, 0x2F, 0x31, 0x0A, 0x00, 0xB9, -0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, -0x74, 0x72, 0x69, 0x70, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x20, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, +0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, +0x20, 0x00, 0x11, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, +0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, +0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x37, 0x32, 0x2C, 0x4D, 0x31, 0x30, +0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x32, 0x35, 0x0A, 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, +0x00, 0x00, 0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, /* Asia/Harbin */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -10811,7 +10811,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x59, 0xCF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0xFA, 0xA6, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x38, 0x9C, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE5, 0xEB, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xAC, 0xFE, 0x00, 0xFF, @@ -10871,21 +10871,21 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x5A, 0xB5, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, -0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7B, 0x1D, 0x60, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, +0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, -0x20, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, -0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x4C, 0x4D, 0x54, 0x00, -0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, -0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, -0x2E, 0x34, 0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x35, 0x2F, 0x31, 0x0A, -0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, 0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, 0x74, -0x20, 0x42, 0x61, 0x6E, 0x6B, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x20, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x2A, +0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, +0x00, 0x1C, 0x20, 0x00, 0x11, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, +0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, +0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x37, 0x32, 0x2C, 0x4D, +0x31, 0x30, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x32, 0x35, 0x0A, 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, +0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, 0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, /* Asia/Ho_Chi_Minh */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x56, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -15680,9 +15680,9 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0xFF, -0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, -0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, -0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, +0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, +0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, +0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, @@ -15748,8 +15748,8 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, -0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x00, 0xFF, -0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, +0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x00, 0xFF, +0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x0A, 0x3C, 0x2D, 0x30, 0x34, 0x3E, 0x34, 0x3C, 0x2D, 0x30, 0x33, 0x3E, 0x2C, 0x4D, 0x39, @@ -17987,7 +17987,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC7, 0x64, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA7, 0x64, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA, 0xCD, 0x2E, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, @@ -18002,23 +18002,23 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x20, 0xE0, 0x00, -0x00, 0x00, 0x00, 0x28, 0xE5, 0x17, 0x80, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, -0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x01, -0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, -0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, -0x07, 0x02, 0x07, 0x02, 0x07, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, -0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x1D, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, -0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, -0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, -0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, -0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD6, 0x48, 0xC5, 0x01, 0x41, 0x39, 0x12, 0x00, 0x00, 0x00, -0x14, 0x55, 0x6B, 0x72, 0x61, 0x69, 0x6E, 0x65, 0x20, 0x28, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x61, -0x72, 0x65, 0x61, 0x73, 0x29, +0x00, 0x00, 0x00, 0x28, 0xE5, 0x17, 0x80, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, +0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, +0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x01, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, +0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, +0x03, 0x06, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x00, 0x00, +0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, +0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, +0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x4C, 0x4D, +0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, +0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, +0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, +0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD6, +0x48, 0xC5, 0x01, 0x41, 0x39, 0x12, 0x00, 0x00, 0x00, 0x14, 0x55, 0x6B, 0x72, 0x61, 0x69, 0x6E, +0x65, 0x20, 0x28, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x61, 0x72, 0x65, 0x61, 0x73, 0x29, /* Europe/Kirov */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -19279,9 +19279,9 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x2E, 0xF0, 0x00, -0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2D, 0xC2, 0xC6, 0xD0, 0x00, +0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0xC2, 0xC6, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x85, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0x84, 0x50, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x67, 0x40, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xA0, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, @@ -19617,7 +19617,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1E, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0x6A, 0xEE, 0xB0, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x09, 0x71, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x92, 0x34, 0x10, 0xFF, @@ -19632,21 +19632,22 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x2E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x42, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, -0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x01, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x00, 0x00, 0x14, 0xE8, -0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, -0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, -0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, -0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, -0x45, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, -0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, -0x34, 0x0A, 0x00, 0xD3, 0x83, 0x22, 0x01, 0x34, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x0E, 0x54, 0x72, -0x61, 0x6E, 0x73, 0x63, 0x61, 0x72, 0x70, 0x61, 0x74, 0x68, 0x69, 0x61, +0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, +0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, +0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x01, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, +0x05, 0x06, 0x05, 0x06, 0x05, 0x00, 0x00, 0x14, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, +0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, +0x30, 0x00, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x4C, +0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, +0x4D, 0x53, 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, +0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, +0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD3, 0x83, 0x22, 0x01, +0x34, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x0E, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x63, 0x61, 0x72, 0x70, +0x61, 0x74, 0x68, 0x69, 0x61, /* Europe/Vaduz */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x4C, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -19984,7 +19985,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC3, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA3, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA, 0xAA, 0xE7, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, @@ -20000,23 +20001,24 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x27, 0x70, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE4, 0xED, 0x50, 0x00, -0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, -0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x01, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, -0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, -0x03, 0x06, 0x03, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x00, 0x00, -0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x20, 0xD0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, -0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x1C, 0x20, -0x01, 0x16, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1B, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x4C, 0x4D, -0x54, 0x00, 0x2B, 0x30, 0x32, 0x32, 0x30, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, -0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, -0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, -0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, -0x00, 0xD2, 0x51, 0x25, 0x01, 0x48, 0x51, 0x7A, 0x00, 0x00, 0x00, 0x1B, 0x5A, 0x61, 0x70, 0x6F, -0x72, 0x6F, 0x7A, 0x68, 0x79, 0x65, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x65, 0x61, 0x73, 0x74, 0x20, -0x4C, 0x75, 0x67, 0x61, 0x6E, 0x73, 0x6B, +0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, +0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x01, +0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, +0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x07, 0x02, 0x07, 0x02, 0x07, +0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x20, +0xD0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, +0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x38, 0x40, 0x01, +0x1B, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x4C, 0x4D, 0x54, 0x00, 0x2B, 0x30, 0x32, 0x32, 0x30, +0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, +0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, +0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, +0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD2, 0x51, 0x25, 0x01, 0x48, 0x51, +0x7A, 0x00, 0x00, 0x00, 0x1B, 0x5A, 0x61, 0x70, 0x6F, 0x72, 0x6F, 0x7A, 0x68, 0x79, 0x65, 0x20, +0x61, 0x6E, 0x64, 0x20, 0x65, 0x61, 0x73, 0x74, 0x20, 0x4C, 0x75, 0x67, 0x61, 0x6E, 0x73, 0x6B, + /* Europe/Zurich */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -23690,340 +23692,340 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[595] = { { "Asia/Dushanbe" , 0x0476ED }, { "Asia/Famagusta" , 0x047948 }, { "Asia/Gaza" , 0x04814F }, - { "Asia/Harbin" , 0x048ADA }, - { "Asia/Hebron" , 0x048D17 }, - { "Asia/Ho_Chi_Minh" , 0x0496BD }, - { "Asia/Hong_Kong" , 0x049828 }, - { "Asia/Hovd" , 0x049CE7 }, - { "Asia/Irkutsk" , 0x04A099 }, - { "Asia/Istanbul" , 0x04A59A }, - { "Asia/Jakarta" , 0x04AD41 }, - { "Asia/Jayapura" , 0x04AEBD }, - { "Asia/Jerusalem" , 0x04AFDC }, - { "Asia/Kabul" , 0x04B93C }, - { "Asia/Kamchatka" , 0x04BA18 }, - { "Asia/Karachi" , 0x04BEC4 }, - { "Asia/Kashgar" , 0x04C04B }, - { "Asia/Kathmandu" , 0x04C0FC }, - { "Asia/Katmandu" , 0x04C1DC }, - { "Asia/Khandyga" , 0x04C2BC }, - { "Asia/Kolkata" , 0x04C7DD }, - { "Asia/Krasnoyarsk" , 0x04C906 }, - { "Asia/Kuala_Lumpur" , 0x04CDE2 }, - { "Asia/Kuching" , 0x04CF81 }, - { "Asia/Kuwait" , 0x04D17E }, - { "Asia/Macao" , 0x04D22F }, - { "Asia/Macau" , 0x04D706 }, - { "Asia/Magadan" , 0x04DBDD }, - { "Asia/Makassar" , 0x04E0BF }, - { "Asia/Manila" , 0x04E212 }, - { "Asia/Muscat" , 0x04E366 }, - { "Asia/Nicosia" , 0x04E417 }, - { "Asia/Novokuznetsk" , 0x04EC08 }, - { "Asia/Novosibirsk" , 0x04F0B2 }, - { "Asia/Omsk" , 0x04F597 }, - { "Asia/Oral" , 0x04FA67 }, - { "Asia/Phnom_Penh" , 0x04FE6F }, - { "Asia/Pontianak" , 0x04FF42 }, - { "Asia/Pyongyang" , 0x0500C5 }, - { "Asia/Qatar" , 0x0501BE }, - { "Asia/Qostanay" , 0x050291 }, - { "Asia/Qyzylorda" , 0x0506AA }, - { "Asia/Rangoon" , 0x050AD4 }, - { "Asia/Riyadh" , 0x050BEC }, - { "Asia/Saigon" , 0x050C9D }, - { "Asia/Sakhalin" , 0x050E08 }, - { "Asia/Samarkand" , 0x0512DE }, - { "Asia/Seoul" , 0x05153C }, - { "Asia/Shanghai" , 0x0517B1 }, - { "Asia/Singapore" , 0x0519FA }, - { "Asia/Srednekolymsk" , 0x051B85 }, - { "Asia/Taipei" , 0x05206B }, - { "Asia/Tashkent" , 0x052370 }, - { "Asia/Tbilisi" , 0x0525DC }, - { "Asia/Tehran" , 0x0529F3 }, - { "Asia/Tel_Aviv" , 0x053415 }, - { "Asia/Thimbu" , 0x053D75 }, - { "Asia/Thimphu" , 0x053E4C }, - { "Asia/Tokyo" , 0x053F23 }, - { "Asia/Tomsk" , 0x054064 }, - { "Asia/Ujung_Pandang" , 0x054543 }, - { "Asia/Ulaanbaatar" , 0x05464D }, - { "Asia/Ulan_Bator" , 0x0549E9 }, - { "Asia/Urumqi" , 0x054D70 }, - { "Asia/Ust-Nera" , 0x054E2E }, - { "Asia/Vientiane" , 0x055332 }, - { "Asia/Vladivostok" , 0x055405 }, - { "Asia/Yakutsk" , 0x0558DC }, - { "Asia/Yangon" , 0x055DB2 }, - { "Asia/Yekaterinburg" , 0x055ECA }, - { "Asia/Yerevan" , 0x0563BF }, - { "Atlantic/Azores" , 0x05684A }, - { "Atlantic/Bermuda" , 0x057614 }, - { "Atlantic/Canary" , 0x057F7C }, - { "Atlantic/Cape_Verde" , 0x0586FF }, - { "Atlantic/Faeroe" , 0x058819 }, - { "Atlantic/Faroe" , 0x058F3C }, - { "Atlantic/Jan_Mayen" , 0x05965F }, - { "Atlantic/Madeira" , 0x059F1F }, - { "Atlantic/Reykjavik" , 0x05ACE9 }, - { "Atlantic/South_Georgia" , 0x05B17F }, - { "Atlantic/St_Helena" , 0x05B22F }, - { "Atlantic/Stanley" , 0x05B2CF }, - { "Australia/ACT" , 0x05B799 }, - { "Australia/Adelaide" , 0x05C033 }, - { "Australia/Brisbane" , 0x05C8EE }, - { "Australia/Broken_Hill" , 0x05CAB4 }, - { "Australia/Canberra" , 0x05D391 }, - { "Australia/Currie" , 0x05DC2B }, - { "Australia/Darwin" , 0x05E56D }, - { "Australia/Eucla" , 0x05E6D0 }, - { "Australia/Hobart" , 0x05E8CB }, - { "Australia/LHI" , 0x05F215 }, - { "Australia/Lindeman" , 0x05F965 }, - { "Australia/Lord_Howe" , 0x05FB6B }, - { "Australia/Melbourne" , 0x0602CB }, - { "Australia/North" , 0x060B6D }, - { "Australia/NSW" , 0x060CBE }, - { "Australia/Perth" , 0x061558 }, - { "Australia/Queensland" , 0x061740 }, - { "Australia/South" , 0x0618EF }, - { "Australia/Sydney" , 0x06219B }, - { "Australia/Tasmania" , 0x062A51 }, - { "Australia/Victoria" , 0x063393 }, - { "Australia/West" , 0x063C2D }, - { "Australia/Yancowinna" , 0x063DF7 }, - { "Brazil/Acre" , 0x0646B8 }, - { "Brazil/DeNoronha" , 0x064938 }, - { "Brazil/East" , 0x064C10 }, - { "Brazil/West" , 0x0651C0 }, - { "Canada/Atlantic" , 0x065428 }, - { "Canada/Central" , 0x066194 }, - { "Canada/Eastern" , 0x066CD4 }, - { "Canada/Mountain" , 0x067A86 }, - { "Canada/Newfoundland" , 0x0683AE }, - { "Canada/Pacific" , 0x069201 }, - { "Canada/Saskatchewan" , 0x069D59 }, - { "Canada/Yukon" , 0x06A139 }, - { "CET" , 0x06A793 }, - { "Chile/Continental" , 0x06AFCD }, - { "Chile/EasterIsland" , 0x06B9BA }, - { "CST6CDT" , 0x06C27F }, - { "Cuba" , 0x06CB91 }, - { "EET" , 0x06D50D }, - { "Egypt" , 0x06DC8D }, - { "Eire" , 0x06E43C }, - { "EST" , 0x06F1EC }, - { "EST5EDT" , 0x06F26A }, - { "Etc/GMT" , 0x06FB7C }, - { "Etc/GMT+0" , 0x06FBFA }, - { "Etc/GMT+1" , 0x06FC78 }, - { "Etc/GMT+10" , 0x06FCF8 }, - { "Etc/GMT+11" , 0x06FD79 }, - { "Etc/GMT+12" , 0x06FDFA }, - { "Etc/GMT+2" , 0x06FE7B }, - { "Etc/GMT+3" , 0x06FEFB }, - { "Etc/GMT+4" , 0x06FF7B }, - { "Etc/GMT+5" , 0x06FFFB }, - { "Etc/GMT+6" , 0x07007B }, - { "Etc/GMT+7" , 0x0700FB }, - { "Etc/GMT+8" , 0x07017B }, - { "Etc/GMT+9" , 0x0701FB }, - { "Etc/GMT-0" , 0x07027B }, - { "Etc/GMT-1" , 0x0702F9 }, - { "Etc/GMT-10" , 0x07037A }, - { "Etc/GMT-11" , 0x0703FC }, - { "Etc/GMT-12" , 0x07047E }, - { "Etc/GMT-13" , 0x070500 }, - { "Etc/GMT-14" , 0x070582 }, - { "Etc/GMT-2" , 0x070604 }, - { "Etc/GMT-3" , 0x070685 }, - { "Etc/GMT-4" , 0x070706 }, - { "Etc/GMT-5" , 0x070787 }, - { "Etc/GMT-6" , 0x070808 }, - { "Etc/GMT-7" , 0x070889 }, - { "Etc/GMT-8" , 0x07090A }, - { "Etc/GMT-9" , 0x07098B }, - { "Etc/GMT0" , 0x070A0C }, - { "Etc/Greenwich" , 0x070A8A }, - { "Etc/UCT" , 0x070B08 }, - { "Etc/Universal" , 0x070B86 }, - { "Etc/UTC" , 0x070C04 }, - { "Etc/Zulu" , 0x070C82 }, - { "Europe/Amsterdam" , 0x070D00 }, - { "Europe/Andorra" , 0x07186A }, - { "Europe/Astrakhan" , 0x071F44 }, - { "Europe/Athens" , 0x0723EF }, - { "Europe/Belfast" , 0x072CD1 }, - { "Europe/Belgrade" , 0x073B1D }, - { "Europe/Berlin" , 0x0742A9 }, - { "Europe/Bratislava" , 0x074BC3 }, - { "Europe/Brussels" , 0x0754CC }, - { "Europe/Bucharest" , 0x07604D }, - { "Europe/Budapest" , 0x0768E1 }, - { "Europe/Busingen" , 0x07722D }, - { "Europe/Chisinau" , 0x0779B6 }, - { "Europe/Copenhagen" , 0x078318 }, - { "Europe/Dublin" , 0x078B7D }, - { "Europe/Gibraltar" , 0x07992D }, - { "Europe/Guernsey" , 0x07A525 }, - { "Europe/Helsinki" , 0x07B371 }, - { "Europe/Isle_of_Man" , 0x07BAE9 }, - { "Europe/Istanbul" , 0x07C935 }, - { "Europe/Jersey" , 0x07D0DC }, - { "Europe/Kaliningrad" , 0x07DF28 }, - { "Europe/Kiev" , 0x07E51D }, - { "Europe/Kirov" , 0x07ED65 }, - { "Europe/Lisbon" , 0x07F200 }, - { "Europe/Ljubljana" , 0x07FFC8 }, - { "Europe/London" , 0x080754 }, - { "Europe/Luxembourg" , 0x0815A0 }, - { "Europe/Madrid" , 0x08212E }, - { "Europe/Malta" , 0x082B80 }, - { "Europe/Mariehamn" , 0x0835C8 }, - { "Europe/Minsk" , 0x083D40 }, - { "Europe/Monaco" , 0x084275 }, - { "Europe/Moscow" , 0x084E01 }, - { "Europe/Nicosia" , 0x085420 }, - { "Europe/Oslo" , 0x085BFE }, - { "Europe/Paris" , 0x0864BE }, - { "Europe/Podgorica" , 0x08705C }, - { "Europe/Prague" , 0x0877E8 }, - { "Europe/Riga" , 0x0880F1 }, - { "Europe/Rome" , 0x088993 }, - { "Europe/Samara" , 0x0893F0 }, - { "Europe/San_Marino" , 0x0898D4 }, - { "Europe/Sarajevo" , 0x08A331 }, - { "Europe/Saratov" , 0x08AABD }, - { "Europe/Simferopol" , 0x08AF78 }, - { "Europe/Skopje" , 0x08B537 }, - { "Europe/Sofia" , 0x08BCC3 }, - { "Europe/Stockholm" , 0x08C4EC }, - { "Europe/Tallinn" , 0x08CC6D }, - { "Europe/Tirane" , 0x08D4DD }, - { "Europe/Tiraspol" , 0x08DD0D }, - { "Europe/Ulyanovsk" , 0x08E66F }, - { "Europe/Uzhgorod" , 0x08EB80 }, - { "Europe/Vaduz" , 0x08F39C }, - { "Europe/Vatican" , 0x08FB1D }, - { "Europe/Vienna" , 0x09057A }, - { "Europe/Vilnius" , 0x090E1E }, - { "Europe/Volgograd" , 0x09169C }, - { "Europe/Warsaw" , 0x091B47 }, - { "Europe/Zagreb" , 0x0925B1 }, - { "Europe/Zaporozhye" , 0x092D3D }, - { "Europe/Zurich" , 0x09359E }, - { "Factory" , 0x093D1F }, - { "GB" , 0x093D9F }, - { "GB-Eire" , 0x094BEB }, - { "GMT" , 0x095A37 }, - { "GMT+0" , 0x095AB5 }, - { "GMT-0" , 0x095B33 }, - { "GMT0" , 0x095BB1 }, - { "Greenwich" , 0x095C2F }, - { "Hongkong" , 0x095CAD }, - { "HST" , 0x09616C }, - { "Iceland" , 0x0961EB }, - { "Indian/Antananarivo" , 0x096681 }, - { "Indian/Chagos" , 0x096796 }, - { "Indian/Christmas" , 0x096869 }, - { "Indian/Cocos" , 0x09691A }, - { "Indian/Comoro" , 0x0969D4 }, - { "Indian/Kerguelen" , 0x096AE9 }, - { "Indian/Mahe" , 0x096B9A }, - { "Indian/Maldives" , 0x096C4B }, - { "Indian/Mauritius" , 0x096D1E }, - { "Indian/Mayotte" , 0x096E1B }, - { "Indian/Reunion" , 0x096F30 }, - { "Iran" , 0x096FE1 }, - { "Israel" , 0x097A03 }, - { "Jamaica" , 0x098363 }, - { "Japan" , 0x098551 }, - { "Kwajalein" , 0x098692 }, - { "Libya" , 0x0987DA }, - { "MET" , 0x098A57 }, - { "Mexico/BajaNorte" , 0x099291 }, - { "Mexico/BajaSur" , 0x099BC3 }, - { "Mexico/General" , 0x09A1C5 }, - { "MST" , 0x09A801 }, - { "MST7MDT" , 0x09A87F }, - { "Navajo" , 0x09B191 }, - { "NZ" , 0x09BB29 }, - { "NZ-CHAT" , 0x09C4BA }, - { "Pacific/Apia" , 0x09CCDA }, - { "Pacific/Auckland" , 0x09CF4A }, - { "Pacific/Bougainville" , 0x09D8F3 }, - { "Pacific/Chatham" , 0x09DA17 }, - { "Pacific/Chuuk" , 0x09E246 }, - { "Pacific/Easter" , 0x09E36E }, - { "Pacific/Efate" , 0x09EC40 }, - { "Pacific/Enderbury" , 0x09EE66 }, - { "Pacific/Fakaofo" , 0x09EF5C }, - { "Pacific/Fiji" , 0x09F030 }, - { "Pacific/Funafuti" , 0x09F455 }, - { "Pacific/Galapagos" , 0x09F507 }, - { "Pacific/Gambier" , 0x09F612 }, - { "Pacific/Guadalcanal" , 0x09F6D1 }, - { "Pacific/Guam" , 0x09F783 }, - { "Pacific/Honolulu" , 0x09F97D }, - { "Pacific/Johnston" , 0x09FAD8 }, - { "Pacific/Kanton" , 0x09FC2D }, - { "Pacific/Kiritimati" , 0x09FD32 }, - { "Pacific/Kosrae" , 0x09FE38 }, - { "Pacific/Kwajalein" , 0x09FFA9 }, - { "Pacific/Majuro" , 0x0A00FA }, - { "Pacific/Marquesas" , 0x0A0259 }, - { "Pacific/Midway" , 0x0A0323 }, - { "Pacific/Nauru" , 0x0A03EC }, - { "Pacific/Niue" , 0x0A04F4 }, - { "Pacific/Norfolk" , 0x0A05CB }, - { "Pacific/Noumea" , 0x0A0947 }, - { "Pacific/Pago_Pago" , 0x0A0A83 }, - { "Pacific/Palau" , 0x0A0B3E }, - { "Pacific/Pitcairn" , 0x0A0BFE }, - { "Pacific/Pohnpei" , 0x0A0CD4 }, - { "Pacific/Ponape" , 0x0A0E1D }, - { "Pacific/Port_Moresby" , 0x0A0F58 }, - { "Pacific/Rarotonga" , 0x0A103B }, - { "Pacific/Saipan" , 0x0A12A2 }, - { "Pacific/Samoa" , 0x0A149C }, - { "Pacific/Tahiti" , 0x0A1557 }, - { "Pacific/Tarawa" , 0x0A1617 }, - { "Pacific/Tongatapu" , 0x0A16D8 }, - { "Pacific/Truk" , 0x0A1858 }, - { "Pacific/Wake" , 0x0A1971 }, - { "Pacific/Wallis" , 0x0A1A2E }, - { "Pacific/Yap" , 0x0A1AE0 }, - { "Poland" , 0x0A1BF9 }, - { "Portugal" , 0x0A2663 }, - { "PRC" , 0x0A3418 }, - { "PST8PDT" , 0x0A3655 }, - { "ROC" , 0x0A3F67 }, - { "ROK" , 0x0A426C }, - { "Singapore" , 0x0A44E1 }, - { "Turkey" , 0x0A466C }, - { "UCT" , 0x0A4E13 }, - { "Universal" , 0x0A4E91 }, - { "US/Alaska" , 0x0A4F0F }, - { "US/Aleutian" , 0x0A585E }, - { "US/Arizona" , 0x0A619E }, - { "US/Central" , 0x0A62F2 }, - { "US/East-Indiana" , 0x0A70F6 }, - { "US/Eastern" , 0x0A7784 }, - { "US/Hawaii" , 0x0A8560 }, - { "US/Indiana-Starke" , 0x0A86B5 }, - { "US/Michigan" , 0x0A903D }, - { "US/Mountain" , 0x0A98FF }, - { "US/Pacific" , 0x0AA297 }, - { "US/Samoa" , 0x0AADB7 }, - { "UTC" , 0x0AAE72 }, - { "W-SU" , 0x0AAEF0 }, - { "WET" , 0x0AB4FB }, - { "Zulu" , 0x0ABC78 }, + { "Asia/Harbin" , 0x048ADB }, + { "Asia/Hebron" , 0x048D18 }, + { "Asia/Ho_Chi_Minh" , 0x0496BF }, + { "Asia/Hong_Kong" , 0x04982A }, + { "Asia/Hovd" , 0x049CE9 }, + { "Asia/Irkutsk" , 0x04A09B }, + { "Asia/Istanbul" , 0x04A59C }, + { "Asia/Jakarta" , 0x04AD43 }, + { "Asia/Jayapura" , 0x04AEBF }, + { "Asia/Jerusalem" , 0x04AFDE }, + { "Asia/Kabul" , 0x04B93E }, + { "Asia/Kamchatka" , 0x04BA1A }, + { "Asia/Karachi" , 0x04BEC6 }, + { "Asia/Kashgar" , 0x04C04D }, + { "Asia/Kathmandu" , 0x04C0FE }, + { "Asia/Katmandu" , 0x04C1DE }, + { "Asia/Khandyga" , 0x04C2BE }, + { "Asia/Kolkata" , 0x04C7DF }, + { "Asia/Krasnoyarsk" , 0x04C908 }, + { "Asia/Kuala_Lumpur" , 0x04CDE4 }, + { "Asia/Kuching" , 0x04CF83 }, + { "Asia/Kuwait" , 0x04D180 }, + { "Asia/Macao" , 0x04D231 }, + { "Asia/Macau" , 0x04D708 }, + { "Asia/Magadan" , 0x04DBDF }, + { "Asia/Makassar" , 0x04E0C1 }, + { "Asia/Manila" , 0x04E214 }, + { "Asia/Muscat" , 0x04E368 }, + { "Asia/Nicosia" , 0x04E419 }, + { "Asia/Novokuznetsk" , 0x04EC0A }, + { "Asia/Novosibirsk" , 0x04F0B4 }, + { "Asia/Omsk" , 0x04F599 }, + { "Asia/Oral" , 0x04FA69 }, + { "Asia/Phnom_Penh" , 0x04FE71 }, + { "Asia/Pontianak" , 0x04FF44 }, + { "Asia/Pyongyang" , 0x0500C7 }, + { "Asia/Qatar" , 0x0501C0 }, + { "Asia/Qostanay" , 0x050293 }, + { "Asia/Qyzylorda" , 0x0506AC }, + { "Asia/Rangoon" , 0x050AD6 }, + { "Asia/Riyadh" , 0x050BEE }, + { "Asia/Saigon" , 0x050C9F }, + { "Asia/Sakhalin" , 0x050E0A }, + { "Asia/Samarkand" , 0x0512E0 }, + { "Asia/Seoul" , 0x05153E }, + { "Asia/Shanghai" , 0x0517B3 }, + { "Asia/Singapore" , 0x0519FC }, + { "Asia/Srednekolymsk" , 0x051B87 }, + { "Asia/Taipei" , 0x05206D }, + { "Asia/Tashkent" , 0x052372 }, + { "Asia/Tbilisi" , 0x0525DE }, + { "Asia/Tehran" , 0x0529F5 }, + { "Asia/Tel_Aviv" , 0x053417 }, + { "Asia/Thimbu" , 0x053D77 }, + { "Asia/Thimphu" , 0x053E4E }, + { "Asia/Tokyo" , 0x053F25 }, + { "Asia/Tomsk" , 0x054066 }, + { "Asia/Ujung_Pandang" , 0x054545 }, + { "Asia/Ulaanbaatar" , 0x05464F }, + { "Asia/Ulan_Bator" , 0x0549EB }, + { "Asia/Urumqi" , 0x054D72 }, + { "Asia/Ust-Nera" , 0x054E30 }, + { "Asia/Vientiane" , 0x055334 }, + { "Asia/Vladivostok" , 0x055407 }, + { "Asia/Yakutsk" , 0x0558DE }, + { "Asia/Yangon" , 0x055DB4 }, + { "Asia/Yekaterinburg" , 0x055ECC }, + { "Asia/Yerevan" , 0x0563C1 }, + { "Atlantic/Azores" , 0x05684C }, + { "Atlantic/Bermuda" , 0x057616 }, + { "Atlantic/Canary" , 0x057F7E }, + { "Atlantic/Cape_Verde" , 0x058701 }, + { "Atlantic/Faeroe" , 0x05881B }, + { "Atlantic/Faroe" , 0x058F3E }, + { "Atlantic/Jan_Mayen" , 0x059661 }, + { "Atlantic/Madeira" , 0x059F21 }, + { "Atlantic/Reykjavik" , 0x05ACEB }, + { "Atlantic/South_Georgia" , 0x05B181 }, + { "Atlantic/St_Helena" , 0x05B231 }, + { "Atlantic/Stanley" , 0x05B2D1 }, + { "Australia/ACT" , 0x05B79B }, + { "Australia/Adelaide" , 0x05C035 }, + { "Australia/Brisbane" , 0x05C8F0 }, + { "Australia/Broken_Hill" , 0x05CAB6 }, + { "Australia/Canberra" , 0x05D393 }, + { "Australia/Currie" , 0x05DC2D }, + { "Australia/Darwin" , 0x05E56F }, + { "Australia/Eucla" , 0x05E6D2 }, + { "Australia/Hobart" , 0x05E8CD }, + { "Australia/LHI" , 0x05F217 }, + { "Australia/Lindeman" , 0x05F967 }, + { "Australia/Lord_Howe" , 0x05FB6D }, + { "Australia/Melbourne" , 0x0602CD }, + { "Australia/North" , 0x060B6F }, + { "Australia/NSW" , 0x060CC0 }, + { "Australia/Perth" , 0x06155A }, + { "Australia/Queensland" , 0x061742 }, + { "Australia/South" , 0x0618F1 }, + { "Australia/Sydney" , 0x06219D }, + { "Australia/Tasmania" , 0x062A53 }, + { "Australia/Victoria" , 0x063395 }, + { "Australia/West" , 0x063C2F }, + { "Australia/Yancowinna" , 0x063DF9 }, + { "Brazil/Acre" , 0x0646BA }, + { "Brazil/DeNoronha" , 0x06493A }, + { "Brazil/East" , 0x064C12 }, + { "Brazil/West" , 0x0651C2 }, + { "Canada/Atlantic" , 0x06542A }, + { "Canada/Central" , 0x066196 }, + { "Canada/Eastern" , 0x066CD6 }, + { "Canada/Mountain" , 0x067A88 }, + { "Canada/Newfoundland" , 0x0683B0 }, + { "Canada/Pacific" , 0x069203 }, + { "Canada/Saskatchewan" , 0x069D5B }, + { "Canada/Yukon" , 0x06A13B }, + { "CET" , 0x06A795 }, + { "Chile/Continental" , 0x06AFCF }, + { "Chile/EasterIsland" , 0x06B9BC }, + { "CST6CDT" , 0x06C281 }, + { "Cuba" , 0x06CB93 }, + { "EET" , 0x06D50F }, + { "Egypt" , 0x06DC8F }, + { "Eire" , 0x06E43E }, + { "EST" , 0x06F1EE }, + { "EST5EDT" , 0x06F26C }, + { "Etc/GMT" , 0x06FB7E }, + { "Etc/GMT+0" , 0x06FBFC }, + { "Etc/GMT+1" , 0x06FC7A }, + { "Etc/GMT+10" , 0x06FCFA }, + { "Etc/GMT+11" , 0x06FD7B }, + { "Etc/GMT+12" , 0x06FDFC }, + { "Etc/GMT+2" , 0x06FE7D }, + { "Etc/GMT+3" , 0x06FEFD }, + { "Etc/GMT+4" , 0x06FF7D }, + { "Etc/GMT+5" , 0x06FFFD }, + { "Etc/GMT+6" , 0x07007D }, + { "Etc/GMT+7" , 0x0700FD }, + { "Etc/GMT+8" , 0x07017D }, + { "Etc/GMT+9" , 0x0701FD }, + { "Etc/GMT-0" , 0x07027D }, + { "Etc/GMT-1" , 0x0702FB }, + { "Etc/GMT-10" , 0x07037C }, + { "Etc/GMT-11" , 0x0703FE }, + { "Etc/GMT-12" , 0x070480 }, + { "Etc/GMT-13" , 0x070502 }, + { "Etc/GMT-14" , 0x070584 }, + { "Etc/GMT-2" , 0x070606 }, + { "Etc/GMT-3" , 0x070687 }, + { "Etc/GMT-4" , 0x070708 }, + { "Etc/GMT-5" , 0x070789 }, + { "Etc/GMT-6" , 0x07080A }, + { "Etc/GMT-7" , 0x07088B }, + { "Etc/GMT-8" , 0x07090C }, + { "Etc/GMT-9" , 0x07098D }, + { "Etc/GMT0" , 0x070A0E }, + { "Etc/Greenwich" , 0x070A8C }, + { "Etc/UCT" , 0x070B0A }, + { "Etc/Universal" , 0x070B88 }, + { "Etc/UTC" , 0x070C06 }, + { "Etc/Zulu" , 0x070C84 }, + { "Europe/Amsterdam" , 0x070D02 }, + { "Europe/Andorra" , 0x07186C }, + { "Europe/Astrakhan" , 0x071F46 }, + { "Europe/Athens" , 0x0723F1 }, + { "Europe/Belfast" , 0x072CD3 }, + { "Europe/Belgrade" , 0x073B1F }, + { "Europe/Berlin" , 0x0742AB }, + { "Europe/Bratislava" , 0x074BC5 }, + { "Europe/Brussels" , 0x0754CE }, + { "Europe/Bucharest" , 0x07604F }, + { "Europe/Budapest" , 0x0768E3 }, + { "Europe/Busingen" , 0x07722F }, + { "Europe/Chisinau" , 0x0779B8 }, + { "Europe/Copenhagen" , 0x07831A }, + { "Europe/Dublin" , 0x078B7F }, + { "Europe/Gibraltar" , 0x07992F }, + { "Europe/Guernsey" , 0x07A527 }, + { "Europe/Helsinki" , 0x07B373 }, + { "Europe/Isle_of_Man" , 0x07BAEB }, + { "Europe/Istanbul" , 0x07C937 }, + { "Europe/Jersey" , 0x07D0DE }, + { "Europe/Kaliningrad" , 0x07DF2A }, + { "Europe/Kiev" , 0x07E51F }, + { "Europe/Kirov" , 0x07ED87 }, + { "Europe/Lisbon" , 0x07F222 }, + { "Europe/Ljubljana" , 0x07FFEA }, + { "Europe/London" , 0x080776 }, + { "Europe/Luxembourg" , 0x0815C2 }, + { "Europe/Madrid" , 0x082150 }, + { "Europe/Malta" , 0x082BA2 }, + { "Europe/Mariehamn" , 0x0835EA }, + { "Europe/Minsk" , 0x083D62 }, + { "Europe/Monaco" , 0x084297 }, + { "Europe/Moscow" , 0x084E23 }, + { "Europe/Nicosia" , 0x085442 }, + { "Europe/Oslo" , 0x085C20 }, + { "Europe/Paris" , 0x0864E0 }, + { "Europe/Podgorica" , 0x08707E }, + { "Europe/Prague" , 0x08780A }, + { "Europe/Riga" , 0x088113 }, + { "Europe/Rome" , 0x0889B5 }, + { "Europe/Samara" , 0x089412 }, + { "Europe/San_Marino" , 0x0898F6 }, + { "Europe/Sarajevo" , 0x08A353 }, + { "Europe/Saratov" , 0x08AADF }, + { "Europe/Simferopol" , 0x08AF9A }, + { "Europe/Skopje" , 0x08B569 }, + { "Europe/Sofia" , 0x08BCF5 }, + { "Europe/Stockholm" , 0x08C51E }, + { "Europe/Tallinn" , 0x08CC9F }, + { "Europe/Tirane" , 0x08D50F }, + { "Europe/Tiraspol" , 0x08DD3F }, + { "Europe/Ulyanovsk" , 0x08E6A1 }, + { "Europe/Uzhgorod" , 0x08EBB2 }, + { "Europe/Vaduz" , 0x08F3DE }, + { "Europe/Vatican" , 0x08FB5F }, + { "Europe/Vienna" , 0x0905BC }, + { "Europe/Vilnius" , 0x090E60 }, + { "Europe/Volgograd" , 0x0916DE }, + { "Europe/Warsaw" , 0x091B89 }, + { "Europe/Zagreb" , 0x0925F3 }, + { "Europe/Zaporozhye" , 0x092D7F }, + { "Europe/Zurich" , 0x093600 }, + { "Factory" , 0x093D81 }, + { "GB" , 0x093E01 }, + { "GB-Eire" , 0x094C4D }, + { "GMT" , 0x095A99 }, + { "GMT+0" , 0x095B17 }, + { "GMT-0" , 0x095B95 }, + { "GMT0" , 0x095C13 }, + { "Greenwich" , 0x095C91 }, + { "Hongkong" , 0x095D0F }, + { "HST" , 0x0961CE }, + { "Iceland" , 0x09624D }, + { "Indian/Antananarivo" , 0x0966E3 }, + { "Indian/Chagos" , 0x0967F8 }, + { "Indian/Christmas" , 0x0968CB }, + { "Indian/Cocos" , 0x09697C }, + { "Indian/Comoro" , 0x096A36 }, + { "Indian/Kerguelen" , 0x096B4B }, + { "Indian/Mahe" , 0x096BFC }, + { "Indian/Maldives" , 0x096CAD }, + { "Indian/Mauritius" , 0x096D80 }, + { "Indian/Mayotte" , 0x096E7D }, + { "Indian/Reunion" , 0x096F92 }, + { "Iran" , 0x097043 }, + { "Israel" , 0x097A65 }, + { "Jamaica" , 0x0983C5 }, + { "Japan" , 0x0985B3 }, + { "Kwajalein" , 0x0986F4 }, + { "Libya" , 0x09883C }, + { "MET" , 0x098AB9 }, + { "Mexico/BajaNorte" , 0x0992F3 }, + { "Mexico/BajaSur" , 0x099C25 }, + { "Mexico/General" , 0x09A227 }, + { "MST" , 0x09A863 }, + { "MST7MDT" , 0x09A8E1 }, + { "Navajo" , 0x09B1F3 }, + { "NZ" , 0x09BB8B }, + { "NZ-CHAT" , 0x09C51C }, + { "Pacific/Apia" , 0x09CD3C }, + { "Pacific/Auckland" , 0x09CFAC }, + { "Pacific/Bougainville" , 0x09D955 }, + { "Pacific/Chatham" , 0x09DA79 }, + { "Pacific/Chuuk" , 0x09E2A8 }, + { "Pacific/Easter" , 0x09E3D0 }, + { "Pacific/Efate" , 0x09ECA2 }, + { "Pacific/Enderbury" , 0x09EEC8 }, + { "Pacific/Fakaofo" , 0x09EFBE }, + { "Pacific/Fiji" , 0x09F092 }, + { "Pacific/Funafuti" , 0x09F4B7 }, + { "Pacific/Galapagos" , 0x09F569 }, + { "Pacific/Gambier" , 0x09F674 }, + { "Pacific/Guadalcanal" , 0x09F733 }, + { "Pacific/Guam" , 0x09F7E5 }, + { "Pacific/Honolulu" , 0x09F9DF }, + { "Pacific/Johnston" , 0x09FB3A }, + { "Pacific/Kanton" , 0x09FC8F }, + { "Pacific/Kiritimati" , 0x09FD94 }, + { "Pacific/Kosrae" , 0x09FE9A }, + { "Pacific/Kwajalein" , 0x0A000B }, + { "Pacific/Majuro" , 0x0A015C }, + { "Pacific/Marquesas" , 0x0A02BB }, + { "Pacific/Midway" , 0x0A0385 }, + { "Pacific/Nauru" , 0x0A044E }, + { "Pacific/Niue" , 0x0A0556 }, + { "Pacific/Norfolk" , 0x0A062D }, + { "Pacific/Noumea" , 0x0A09A9 }, + { "Pacific/Pago_Pago" , 0x0A0AE5 }, + { "Pacific/Palau" , 0x0A0BA0 }, + { "Pacific/Pitcairn" , 0x0A0C60 }, + { "Pacific/Pohnpei" , 0x0A0D36 }, + { "Pacific/Ponape" , 0x0A0E7F }, + { "Pacific/Port_Moresby" , 0x0A0FBA }, + { "Pacific/Rarotonga" , 0x0A109D }, + { "Pacific/Saipan" , 0x0A1304 }, + { "Pacific/Samoa" , 0x0A14FE }, + { "Pacific/Tahiti" , 0x0A15B9 }, + { "Pacific/Tarawa" , 0x0A1679 }, + { "Pacific/Tongatapu" , 0x0A173A }, + { "Pacific/Truk" , 0x0A18BA }, + { "Pacific/Wake" , 0x0A19D3 }, + { "Pacific/Wallis" , 0x0A1A90 }, + { "Pacific/Yap" , 0x0A1B42 }, + { "Poland" , 0x0A1C5B }, + { "Portugal" , 0x0A26C5 }, + { "PRC" , 0x0A347A }, + { "PST8PDT" , 0x0A36B7 }, + { "ROC" , 0x0A3FC9 }, + { "ROK" , 0x0A42CE }, + { "Singapore" , 0x0A4543 }, + { "Turkey" , 0x0A46CE }, + { "UCT" , 0x0A4E75 }, + { "Universal" , 0x0A4EF3 }, + { "US/Alaska" , 0x0A4F71 }, + { "US/Aleutian" , 0x0A58C0 }, + { "US/Arizona" , 0x0A6200 }, + { "US/Central" , 0x0A6354 }, + { "US/East-Indiana" , 0x0A7158 }, + { "US/Eastern" , 0x0A77E6 }, + { "US/Hawaii" , 0x0A85C2 }, + { "US/Indiana-Starke" , 0x0A8717 }, + { "US/Michigan" , 0x0A909F }, + { "US/Mountain" , 0x0A9961 }, + { "US/Pacific" , 0x0AA2F9 }, + { "US/Samoa" , 0x0AAE19 }, + { "UTC" , 0x0AAED4 }, + { "W-SU" , 0x0AAF52 }, + { "WET" , 0x0AB55D }, + { "Zulu" , 0x0ABCDA }, }; -const unsigned char timelib_timezone_db_data_builtin[703734] = { +const unsigned char timelib_timezone_db_data_builtin[703832] = { /* Africa/Abidjan */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -37134,8 +37136,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x80, 0x00, 0x00, 0x00, -0x8F, 0x30, 0x47, 0x46, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC6, 0xA1, 0x00, 0x71, 0xC0, -0xB0, 0x5E, 0x77, 0xC6, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, +0x8F, 0x30, 0x47, 0x45, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC5, 0xA1, 0x00, 0x71, 0xC0, +0xB0, 0x5E, 0x77, 0xC5, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, 0xB4, 0x22, 0x34, 0x50, 0xB5, 0x39, 0xA4, 0x40, 0xB6, 0x03, 0x67, 0xD0, 0xB7, 0x1A, 0xD7, 0xC0, 0xB7, 0xE4, 0x9B, 0x50, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xC7, 0x20, 0x50, 0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, 0xD5, 0x33, 0x55, 0xC0, 0xD5, 0x76, 0x92, 0x40, 0xFD, 0xD1, 0x3C, 0x40, @@ -37170,7 +37172,7 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x07, 0x07, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, +0x05, 0x06, 0x05, 0x07, 0x07, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, @@ -37179,9 +37181,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xFC, 0xFF, 0xFF, 0xFF, -0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, -0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, -0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, +0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, +0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, +0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB7, 0x1A, 0xD7, 0xC0, 0xFF, 0xFF, 0xFF, @@ -37244,7 +37246,7 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x07, 0x07, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, +0x07, 0x07, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, @@ -38062,8 +38064,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x80, 0x00, 0x00, 0x00, -0x8F, 0x30, 0x47, 0x46, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC6, 0xA1, 0x00, 0x71, 0xC0, -0xB0, 0x5E, 0x77, 0xC6, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, +0x8F, 0x30, 0x47, 0x45, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC5, 0xA1, 0x00, 0x71, 0xC0, +0xB0, 0x5E, 0x77, 0xC5, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, 0xB4, 0x22, 0x34, 0x50, 0xB5, 0x39, 0xA4, 0x40, 0xB6, 0x03, 0x67, 0xD0, 0xB7, 0x1A, 0xD7, 0xC0, 0xB7, 0xE4, 0x9B, 0x50, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xC7, 0x20, 0x50, 0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, 0xD3, 0xDC, 0x8F, 0xC0, 0xD4, 0x1B, 0xC9, 0xB0, 0xD5, 0x33, 0x55, 0xC0, @@ -38111,8 +38113,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBA, -0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBB, +0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, @@ -38120,9 +38122,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, -0x69, 0x87, 0x1D, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, -0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, -0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, +0x69, 0x87, 0x1D, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, +0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, +0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -38209,8 +38211,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBA, -0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBB, +0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, @@ -43205,15 +43207,15 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x56, 0x29, 0x5C, 0x60, 0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x13, 0xCA, 0x60, 0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF3, 0xAC, 0x60, 0x5A, 0xB5, 0x86, 0xF0, 0x5B, 0xD3, 0x8E, 0x60, 0x5C, 0x9D, 0x43, 0xE0, 0x5D, 0xB3, 0x62, 0x50, 0x5E, 0x7E, 0x77, 0x60, 0x5F, 0x93, 0x52, 0x60, 0x60, 0x5E, 0x59, 0x60, -0x61, 0x7B, 0x1D, 0x60, 0x62, 0x3E, 0x3B, 0x60, 0x63, 0x5A, 0xFF, 0x60, 0x64, 0x1E, 0x1D, 0x60, -0x65, 0x3A, 0xE1, 0x60, 0x66, 0x07, 0x39, 0xE0, 0x67, 0x1A, 0xC3, 0x60, 0x67, 0xE7, 0x1B, 0xE0, -0x69, 0x03, 0xDF, 0xE0, 0x69, 0xC6, 0xFD, 0xE0, 0x6A, 0xE3, 0xC1, 0xE0, 0x6B, 0xA6, 0xDF, 0xE0, -0x6C, 0xC3, 0xA3, 0xE0, 0x6D, 0x86, 0xC1, 0xE0, 0x6E, 0xA3, 0x85, 0xE0, 0x6F, 0x66, 0xA3, 0xE0, -0x70, 0x83, 0x67, 0xE0, 0x71, 0x4F, 0xC0, 0x60, 0x72, 0x63, 0x49, 0xE0, 0x73, 0x2F, 0xA2, 0x60, -0x74, 0x4C, 0x66, 0x60, 0x75, 0x0F, 0x84, 0x60, 0x76, 0x2C, 0x48, 0x60, 0x76, 0xEF, 0x66, 0x60, -0x78, 0x0C, 0x2A, 0x60, 0x78, 0xCF, 0x48, 0x60, 0x79, 0xEC, 0x0C, 0x60, 0x7A, 0xAF, 0x2A, 0x60, -0x7B, 0xCB, 0xEE, 0x60, 0x7C, 0x98, 0x46, 0xE0, 0x7D, 0xB5, 0x0A, 0xE0, 0x7E, 0x78, 0x28, 0xE0, -0x7F, 0x94, 0xEC, 0xE0, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x61, 0x7B, 0x1D, 0x60, 0x62, 0x3F, 0x8C, 0xE0, 0x63, 0x5A, 0xFF, 0x60, 0x64, 0x1F, 0x6E, 0xE0, +0x65, 0x3A, 0xE1, 0x60, 0x66, 0x08, 0x8B, 0x60, 0x67, 0x1A, 0xC3, 0x60, 0x67, 0xE8, 0x6D, 0x60, +0x68, 0xFA, 0xA5, 0x60, 0x69, 0xC8, 0x4F, 0x60, 0x6A, 0xDA, 0x87, 0x60, 0x6B, 0xA8, 0x31, 0x60, +0x6C, 0xC3, 0xA3, 0xE0, 0x6D, 0x88, 0x13, 0x60, 0x6E, 0xA3, 0x85, 0xE0, 0x6F, 0x67, 0xF5, 0x60, +0x70, 0x83, 0x67, 0xE0, 0x71, 0x51, 0x11, 0xE0, 0x72, 0x63, 0x49, 0xE0, 0x73, 0x30, 0xF3, 0xE0, +0x74, 0x43, 0x2B, 0xE0, 0x75, 0x10, 0xD5, 0xE0, 0x76, 0x2C, 0x48, 0x60, 0x76, 0xF0, 0xB7, 0xE0, +0x78, 0x0C, 0x2A, 0x60, 0x78, 0xD0, 0x99, 0xE0, 0x79, 0xEC, 0x0C, 0x60, 0x7A, 0xB0, 0x7B, 0xE0, +0x7B, 0xCB, 0xEE, 0x60, 0x7C, 0x99, 0x98, 0x60, 0x7D, 0xAB, 0xD0, 0x60, 0x7E, 0x79, 0x7A, 0x60, +0x7F, 0x8B, 0xB2, 0x60, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x06, 0x05, 0x06, 0x05, 0x06, 0x07, 0x08, 0x07, 0x08, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, @@ -43291,22 +43293,22 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7B, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x62, -0x3E, 0x3B, 0x60, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5A, 0xFF, 0x60, 0x00, 0x00, 0x00, 0x00, 0x64, -0x1E, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3A, 0xE1, 0x60, 0x00, 0x00, 0x00, 0x00, 0x66, -0x07, 0x39, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1A, 0xC3, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, -0xE7, 0x1B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x69, 0x03, 0xDF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x69, -0xC6, 0xFD, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xE3, 0xC1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6B, -0xA6, 0xDF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC3, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6D, -0x86, 0xC1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA3, 0x85, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6F, -0x66, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x83, 0x67, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x71, -0x4F, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x72, 0x63, 0x49, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x73, -0x2F, 0xA2, 0x60, 0x00, 0x00, 0x00, 0x00, 0x74, 0x4C, 0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x75, -0x0F, 0x84, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2C, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, -0xEF, 0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, -0xCF, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEC, 0x0C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7A, -0xAF, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCB, 0xEE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7C, -0x98, 0x46, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xB5, 0x0A, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7E, -0x78, 0x28, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x94, 0xEC, 0xE0, 0x03, 0x01, 0x02, 0x01, 0x02, +0x3F, 0x8C, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5A, 0xFF, 0x60, 0x00, 0x00, 0x00, 0x00, 0x64, +0x1F, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3A, 0xE1, 0x60, 0x00, 0x00, 0x00, 0x00, 0x66, +0x08, 0x8B, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1A, 0xC3, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, +0xE8, 0x6D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFA, 0xA5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x69, +0xC8, 0x4F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDA, 0x87, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6B, +0xA8, 0x31, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC3, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6D, +0x88, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA3, 0x85, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6F, +0x67, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x70, 0x83, 0x67, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x71, +0x51, 0x11, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x72, 0x63, 0x49, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x73, +0x30, 0xF3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x74, 0x43, 0x2B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x75, +0x10, 0xD5, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2C, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, +0xF0, 0xB7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, +0xD0, 0x99, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEC, 0x0C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7A, +0xB0, 0x7B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCB, 0xEE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7C, +0x99, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAB, 0xD0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7E, +0x79, 0x7A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8B, 0xB2, 0x60, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x06, 0x05, 0x06, 0x05, 0x06, 0x07, 0x08, 0x07, 0x08, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, @@ -43323,9 +43325,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, -0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, -0x2E, 0x35, 0x2F, 0x31, 0x0A, 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, 0x00, -0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, +0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x37, 0x32, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x34, +0x2E, 0x34, 0x2F, 0x32, 0x35, 0x0A, 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, +0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, /* Asia/Harbin */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -43398,15 +43400,15 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x54, 0x49, 0x6C, 0x50, 0x55, 0x15, 0xD2, 0xE0, 0x56, 0x29, 0x5C, 0x60, 0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x13, 0xCA, 0x60, 0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF3, 0xAC, 0x60, 0x5A, 0xB5, 0x86, 0xF0, 0x5B, 0xD3, 0x8E, 0x60, 0x5C, 0x9D, 0x43, 0xE0, 0x5D, 0xB3, 0x62, 0x50, 0x5E, 0x7E, 0x77, 0x60, -0x5F, 0x93, 0x52, 0x60, 0x60, 0x5E, 0x59, 0x60, 0x61, 0x7B, 0x1D, 0x60, 0x62, 0x3E, 0x3B, 0x60, -0x63, 0x5A, 0xFF, 0x60, 0x64, 0x1E, 0x1D, 0x60, 0x65, 0x3A, 0xE1, 0x60, 0x66, 0x07, 0x39, 0xE0, -0x67, 0x1A, 0xC3, 0x60, 0x67, 0xE7, 0x1B, 0xE0, 0x69, 0x03, 0xDF, 0xE0, 0x69, 0xC6, 0xFD, 0xE0, -0x6A, 0xE3, 0xC1, 0xE0, 0x6B, 0xA6, 0xDF, 0xE0, 0x6C, 0xC3, 0xA3, 0xE0, 0x6D, 0x86, 0xC1, 0xE0, -0x6E, 0xA3, 0x85, 0xE0, 0x6F, 0x66, 0xA3, 0xE0, 0x70, 0x83, 0x67, 0xE0, 0x71, 0x4F, 0xC0, 0x60, -0x72, 0x63, 0x49, 0xE0, 0x73, 0x2F, 0xA2, 0x60, 0x74, 0x4C, 0x66, 0x60, 0x75, 0x0F, 0x84, 0x60, -0x76, 0x2C, 0x48, 0x60, 0x76, 0xEF, 0x66, 0x60, 0x78, 0x0C, 0x2A, 0x60, 0x78, 0xCF, 0x48, 0x60, -0x79, 0xEC, 0x0C, 0x60, 0x7A, 0xAF, 0x2A, 0x60, 0x7B, 0xCB, 0xEE, 0x60, 0x7C, 0x98, 0x46, 0xE0, -0x7D, 0xB5, 0x0A, 0xE0, 0x7E, 0x78, 0x28, 0xE0, 0x7F, 0x94, 0xEC, 0xE0, 0x03, 0x01, 0x02, 0x01, +0x5F, 0x93, 0x52, 0x60, 0x60, 0x5E, 0x59, 0x60, 0x61, 0x7B, 0x1D, 0x60, 0x62, 0x3F, 0x8C, 0xE0, +0x63, 0x5A, 0xFF, 0x60, 0x64, 0x1F, 0x6E, 0xE0, 0x65, 0x3A, 0xE1, 0x60, 0x66, 0x08, 0x8B, 0x60, +0x67, 0x1A, 0xC3, 0x60, 0x67, 0xE8, 0x6D, 0x60, 0x68, 0xFA, 0xA5, 0x60, 0x69, 0xC8, 0x4F, 0x60, +0x6A, 0xDA, 0x87, 0x60, 0x6B, 0xA8, 0x31, 0x60, 0x6C, 0xC3, 0xA3, 0xE0, 0x6D, 0x88, 0x13, 0x60, +0x6E, 0xA3, 0x85, 0xE0, 0x6F, 0x67, 0xF5, 0x60, 0x70, 0x83, 0x67, 0xE0, 0x71, 0x51, 0x11, 0xE0, +0x72, 0x63, 0x49, 0xE0, 0x73, 0x30, 0xF3, 0xE0, 0x74, 0x43, 0x2B, 0xE0, 0x75, 0x10, 0xD5, 0xE0, +0x76, 0x2C, 0x48, 0x60, 0x76, 0xF0, 0xB7, 0xE0, 0x78, 0x0C, 0x2A, 0x60, 0x78, 0xD0, 0x99, 0xE0, +0x79, 0xEC, 0x0C, 0x60, 0x7A, 0xB0, 0x7B, 0xE0, 0x7B, 0xCB, 0xEE, 0x60, 0x7C, 0x99, 0x98, 0x60, +0x7D, 0xAB, 0xD0, 0x60, 0x7E, 0x79, 0x7A, 0x60, 0x7F, 0x8B, 0xB2, 0x60, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x06, 0x05, 0x06, 0x05, 0x06, 0x07, 0x08, 0x07, 0x08, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, @@ -43485,23 +43487,23 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, -0x00, 0x61, 0x7B, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x62, 0x3E, 0x3B, 0x60, 0x00, 0x00, 0x00, -0x00, 0x63, 0x5A, 0xFF, 0x60, 0x00, 0x00, 0x00, 0x00, 0x64, 0x1E, 0x1D, 0x60, 0x00, 0x00, 0x00, -0x00, 0x65, 0x3A, 0xE1, 0x60, 0x00, 0x00, 0x00, 0x00, 0x66, 0x07, 0x39, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x67, 0x1A, 0xC3, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, 0xE7, 0x1B, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x69, 0x03, 0xDF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x69, 0xC6, 0xFD, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x6A, 0xE3, 0xC1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6B, 0xA6, 0xDF, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x6C, 0xC3, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x86, 0xC1, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x6E, 0xA3, 0x85, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x66, 0xA3, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x70, 0x83, 0x67, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x71, 0x4F, 0xC0, 0x60, 0x00, 0x00, 0x00, -0x00, 0x72, 0x63, 0x49, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x73, 0x2F, 0xA2, 0x60, 0x00, 0x00, 0x00, -0x00, 0x74, 0x4C, 0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x75, 0x0F, 0x84, 0x60, 0x00, 0x00, 0x00, -0x00, 0x76, 0x2C, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, 0xEF, 0x66, 0x60, 0x00, 0x00, 0x00, -0x00, 0x78, 0x0C, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0xCF, 0x48, 0x60, 0x00, 0x00, 0x00, -0x00, 0x79, 0xEC, 0x0C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xAF, 0x2A, 0x60, 0x00, 0x00, 0x00, -0x00, 0x7B, 0xCB, 0xEE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x98, 0x46, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x7D, 0xB5, 0x0A, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x78, 0x28, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x7F, 0x94, 0xEC, 0xE0, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x61, 0x7B, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x62, 0x3F, 0x8C, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x63, 0x5A, 0xFF, 0x60, 0x00, 0x00, 0x00, 0x00, 0x64, 0x1F, 0x6E, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x65, 0x3A, 0xE1, 0x60, 0x00, 0x00, 0x00, 0x00, 0x66, 0x08, 0x8B, 0x60, 0x00, 0x00, 0x00, +0x00, 0x67, 0x1A, 0xC3, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, 0xE8, 0x6D, 0x60, 0x00, 0x00, 0x00, +0x00, 0x68, 0xFA, 0xA5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x69, 0xC8, 0x4F, 0x60, 0x00, 0x00, 0x00, +0x00, 0x6A, 0xDA, 0x87, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6B, 0xA8, 0x31, 0x60, 0x00, 0x00, 0x00, +0x00, 0x6C, 0xC3, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x88, 0x13, 0x60, 0x00, 0x00, 0x00, +0x00, 0x6E, 0xA3, 0x85, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x67, 0xF5, 0x60, 0x00, 0x00, 0x00, +0x00, 0x70, 0x83, 0x67, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x71, 0x51, 0x11, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x72, 0x63, 0x49, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x73, 0x30, 0xF3, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x74, 0x43, 0x2B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x75, 0x10, 0xD5, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x76, 0x2C, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, 0xF0, 0xB7, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x78, 0x0C, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0xD0, 0x99, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x79, 0xEC, 0x0C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xB0, 0x7B, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x7B, 0xCB, 0xEE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x99, 0x98, 0x60, 0x00, 0x00, 0x00, +0x00, 0x7D, 0xAB, 0xD0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0x7A, 0x60, 0x00, 0x00, 0x00, +0x00, 0x7F, 0x8B, 0xB2, 0x60, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x06, 0x05, 0x06, 0x05, 0x06, 0x07, 0x08, 0x07, 0x08, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, @@ -43518,9 +43520,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, -0x34, 0x2E, 0x34, 0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x35, 0x2F, 0x31, -0x0A, 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, 0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, -0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, +0x34, 0x2E, 0x34, 0x2F, 0x37, 0x32, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x32, +0x35, 0x0A, 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, 0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, +0x73, 0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, /* Asia/Ho_Chi_Minh */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x56, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -52415,8 +52417,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x80, 0x00, 0x00, 0x00, -0x8F, 0x30, 0x47, 0x46, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC6, 0xA1, 0x00, 0x71, 0xC0, -0xB0, 0x5E, 0x77, 0xC6, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, +0x8F, 0x30, 0x47, 0x45, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC5, 0xA1, 0x00, 0x71, 0xC0, +0xB0, 0x5E, 0x77, 0xC5, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, 0xB4, 0x22, 0x34, 0x50, 0xB5, 0x39, 0xA4, 0x40, 0xB6, 0x03, 0x67, 0xD0, 0xB7, 0x1A, 0xD7, 0xC0, 0xB7, 0xE4, 0x9B, 0x50, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xC7, 0x20, 0x50, 0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, 0xD3, 0xDC, 0x8F, 0xC0, 0xD4, 0x1B, 0xC9, 0xB0, 0xD5, 0x33, 0x55, 0xC0, @@ -52464,8 +52466,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBA, -0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBB, +0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, @@ -52473,9 +52475,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, -0x69, 0x87, 0x1D, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, -0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, -0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, +0x69, 0x87, 0x1D, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, +0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, +0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -52562,8 +52564,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBA, -0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBB, +0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, @@ -57536,8 +57538,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { /* Europe/Kiev */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x22, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0x80, 0x00, 0x00, 0x00, 0xAA, 0x19, 0xA7, 0x64, 0xB5, 0xA4, 0x19, 0x60, 0xCA, 0xCD, 0x2E, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCE, 0xCD, 0xA8, 0x70, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, @@ -57545,9 +57547,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, 0x26, 0x8D, 0x20, 0xE0, 0x28, 0xE5, 0x17, 0x80, -0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, -0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, +0x29, 0xD5, 0x08, 0x80, 0x2A, 0xC4, 0xF9, 0x80, 0x2B, 0xB4, 0xEA, 0x80, 0x2C, 0xA4, 0xDB, 0x80, +0x2D, 0x94, 0xCC, 0x80, 0x2E, 0x84, 0xBD, 0x80, 0x2F, 0x74, 0xAE, 0x80, 0x30, 0x64, 0x9F, 0x80, +0x31, 0x5D, 0xCB, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, @@ -57569,24 +57571,25 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x0A, 0x02, 0x0A, 0x02, 0x0A, -0x02, 0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, +0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0B, 0x0C, +0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, +0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, +0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, +0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, +0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, +0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, -0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x2A, 0x30, 0x01, -0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, -0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, -0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, -0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, +0x08, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, +0x30, 0x01, 0x1D, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, +0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, +0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, +0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x22, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC7, 0x64, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA7, 0x64, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA, 0xCD, 0x2E, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, @@ -57601,11 +57604,11 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x20, 0xE0, 0x00, -0x00, 0x00, 0x00, 0x28, 0xE5, 0x17, 0x80, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, -0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x00, +0x00, 0x00, 0x00, 0x28, 0xE5, 0x17, 0x80, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, +0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, @@ -57649,20 +57652,21 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x00, 0x00, 0x7D, 0xAE, 0x9D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, +0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x1D, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x4C, 0x4D, -0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, -0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, +0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, +0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x4D, +0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, +0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD6, 0x48, 0xC5, 0x01, 0x41, 0x39, 0x12, @@ -60829,16 +60833,16 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { /* Europe/Simferopol */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x22, 0x80, 0x00, 0x00, 0x00, 0xAA, 0x19, 0xA4, 0x20, 0xB5, 0xA4, 0x19, 0x60, 0xCB, 0x04, 0x8D, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xCF, 0x9F, 0x38, 0xE0, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, 0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, -0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x8D, 0x2E, 0xF0, 0x29, 0xD4, 0xEC, 0x60, -0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, +0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x8D, 0x2E, 0xF0, 0x29, 0xD5, 0x08, 0x80, +0x2A, 0xC4, 0xF9, 0x80, 0x2B, 0xB4, 0xEA, 0x80, 0x2C, 0xA4, 0xDB, 0x80, 0x2D, 0x94, 0xCC, 0x80, 0x2D, 0xC2, 0xC6, 0xD0, 0x2E, 0x84, 0x85, 0x40, 0x2F, 0x74, 0x84, 0x50, 0x30, 0x64, 0x67, 0x40, 0x31, 0x5D, 0xA0, 0xD0, 0x32, 0x72, 0xA6, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, @@ -60851,73 +60855,74 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x5E, 0x80, 0x54, 0x4C, 0x1D, 0x60, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x05, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x07, 0x03, 0x07, 0x03, 0x09, 0x08, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0D, 0x08, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x04, 0x00, +0x08, 0x09, 0x08, 0x02, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x07, 0x03, 0x07, 0x03, 0x09, 0x08, 0x0C, +0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, +0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, +0x0D, 0x0E, 0x08, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, -0x08, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0C, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x4C, 0x4D, 0x54, -0x00, 0x53, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, -0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x54, 0x5A, 0x69, -0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x4B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC4, -0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA4, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, -0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0x04, 0x8D, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, -0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, -0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x92, 0x34, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x9F, 0x38, -0xE0, 0x00, 0x00, 0x00, 0x00, 0x15, 0x27, 0xA7, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x16, 0x18, 0xDC, -0x40, 0x00, 0x00, 0x00, 0x00, 0x17, 0x08, 0xDB, 0x50, 0x00, 0x00, 0x00, 0x00, 0x17, 0xFA, 0x0F, -0xC0, 0x00, 0x00, 0x00, 0x00, 0x18, 0xEA, 0x0E, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x19, 0xDB, 0x43, -0x40, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xCC, 0x93, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0xA0, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xAC, 0x91, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9C, 0x82, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x8C, 0x73, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x64, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6C, 0x55, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x2E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, -0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, -0x60, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, -0x60, 0x00, 0x00, 0x00, 0x00, 0x2D, 0xC2, 0xC6, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x85, -0x40, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0x84, 0x50, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x67, -0x40, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xA0, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xA6, -0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, -0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, -0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, -0x90, 0x00, 0x00, 0x00, 0x00, 0x38, 0xDD, 0x61, 0x10, 0x00, 0x00, 0x00, 0x00, 0x39, 0xFB, 0x76, -0x90, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xBD, 0x43, 0x10, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xDB, 0x58, -0x90, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xA6, 0x5F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xBB, 0x3A, -0x90, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x86, 0x41, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9B, 0x1C, -0x90, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x23, 0x90, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x39, -0x10, 0x00, 0x00, 0x00, 0x00, 0x42, 0x46, 0x05, 0x90, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x1B, -0x10, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, 0xE7, 0x90, 0x00, 0x00, 0x00, 0x00, 0x45, 0x43, 0xFD, -0x10, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0xC9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0x23, 0xDF, -0x10, 0x00, 0x00, 0x00, 0x00, 0x47, 0xEE, 0xE6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0x03, 0xC1, -0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0xCE, 0xC8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE3, 0xA3, -0x10, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xAE, 0xAA, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xCC, 0xBF, -0x90, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x8E, 0x8C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xAC, 0xA1, -0x90, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6E, 0x6E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8C, 0x83, -0x90, 0x00, 0x00, 0x00, 0x00, 0x51, 0x57, 0x8A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x65, -0x90, 0x00, 0x00, 0x00, 0x00, 0x53, 0x37, 0x5E, 0x80, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x1D, -0x60, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x05, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, -0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x02, 0x0A, 0x02, 0x0A, -0x02, 0x0A, 0x07, 0x03, 0x07, 0x03, 0x09, 0x08, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0D, 0x08, 0x00, 0x00, 0x1F, 0xF8, -0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, -0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, -0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, -0x00, 0x0C, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, -0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0C, -0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x45, 0x45, -0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, -0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, -0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x01, +0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0C, 0x00, 0x00, 0x2A, +0x30, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, +0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, +0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x01, 0x01, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC4, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA4, +0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0x04, 0x8D, +0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, +0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x92, 0x34, +0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x9F, 0x38, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x15, 0x27, 0xA7, +0xD0, 0x00, 0x00, 0x00, 0x00, 0x16, 0x18, 0xDC, 0x40, 0x00, 0x00, 0x00, 0x00, 0x17, 0x08, 0xDB, +0x50, 0x00, 0x00, 0x00, 0x00, 0x17, 0xFA, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x18, 0xEA, 0x0E, +0xD0, 0x00, 0x00, 0x00, 0x00, 0x19, 0xDB, 0x43, 0x40, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xCC, 0x93, +0xD0, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0xA0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xAC, 0x91, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9C, 0x82, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x8C, 0x73, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x64, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6C, 0x55, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x2E, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, +0x80, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, +0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0xC2, 0xC6, +0xD0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x85, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0x84, +0x50, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x67, 0x40, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xA0, +0xD0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, +0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, +0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, +0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, 0x00, 0x00, 0x00, 0x38, 0xDD, 0x61, +0x10, 0x00, 0x00, 0x00, 0x00, 0x39, 0xFB, 0x76, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xBD, 0x43, +0x10, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xDB, 0x58, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xA6, 0x5F, +0x90, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xBB, 0x3A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x86, 0x41, +0x90, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9B, 0x1C, 0x90, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x23, +0x90, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x39, 0x10, 0x00, 0x00, 0x00, 0x00, 0x42, 0x46, 0x05, +0x90, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x1B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, 0xE7, +0x90, 0x00, 0x00, 0x00, 0x00, 0x45, 0x43, 0xFD, 0x10, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0xC9, +0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0x23, 0xDF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x47, 0xEE, 0xE6, +0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0x03, 0xC1, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0xCE, 0xC8, +0x10, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE3, 0xA3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xAE, 0xAA, +0x10, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xCC, 0xBF, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x8E, 0x8C, +0x10, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xAC, 0xA1, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6E, 0x6E, +0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8C, 0x83, 0x90, 0x00, 0x00, 0x00, 0x00, 0x51, 0x57, 0x8A, +0x90, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x65, 0x90, 0x00, 0x00, 0x00, 0x00, 0x53, 0x37, 0x5E, +0x80, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x1D, 0x60, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, +0x05, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, +0x09, 0x08, 0x09, 0x08, 0x02, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x07, 0x03, 0x07, 0x03, 0x09, 0x08, +0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, +0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, +0x0C, 0x0D, 0x0E, 0x08, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x04, +0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, +0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, +0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, +0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, +0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0C, 0x00, 0x00, +0x2A, 0x30, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, +0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, +0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x0A, 0x4D, 0x53, 0x4B, 0x2D, 0x33, 0x0A, 0x00, 0xCD, 0xEA, 0xD7, 0x01, 0x46, 0xB0, 0xD0, 0x00, 0x00, 0x00, 0x06, 0x43, 0x72, 0x69, 0x6D, 0x65, 0x61, @@ -61811,17 +61816,17 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { /* Europe/Uzhgorod */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x1E, 0x80, 0x00, 0x00, 0x00, 0xC8, 0x09, 0x71, 0x90, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0xA1, 0x9E, 0xE0, 0xD1, 0xE5, 0xFD, 0xF0, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, 0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, -0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x8D, 0x2E, 0xF0, 0x27, 0xF5, 0x42, 0xA0, 0x29, 0xD4, 0xEC, 0x60, -0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, -0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, +0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x8D, 0x2E, 0xF0, 0x27, 0xF5, 0x42, 0xA0, 0x29, 0xD5, 0x08, 0x80, +0x2A, 0xC4, 0xF9, 0x80, 0x2B, 0xB4, 0xEA, 0x80, 0x2C, 0xA4, 0xDB, 0x80, 0x2D, 0x94, 0xCC, 0x80, +0x2E, 0x84, 0xBD, 0x80, 0x2F, 0x74, 0xAE, 0x80, 0x30, 0x64, 0x9F, 0x80, 0x31, 0x5D, 0xCB, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, @@ -61844,98 +61849,99 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x01, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x00, 0x00, 0x14, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, +0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x01, 0x08, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, +0x09, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x00, 0x00, 0x14, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, -0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x4C, 0x4D, 0x54, 0x00, +0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, +0x01, 0x19, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, +0x53, 0x44, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, +0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, +0x00, 0x0D, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0x6A, 0xEE, 0xB0, 0x18, 0xFF, 0xFF, +0xFF, 0xFF, 0xC8, 0x09, 0x71, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, +0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, +0xFF, 0xFF, 0xCF, 0x92, 0x34, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xD0, 0xA1, 0x9E, 0xE0, 0xFF, 0xFF, +0xFF, 0xFF, 0xD1, 0xE5, 0xFD, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x15, 0x27, 0xA7, 0xD0, 0x00, 0x00, +0x00, 0x00, 0x16, 0x18, 0xDC, 0x40, 0x00, 0x00, 0x00, 0x00, 0x17, 0x08, 0xDB, 0x50, 0x00, 0x00, +0x00, 0x00, 0x17, 0xFA, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x18, 0xEA, 0x0E, 0xD0, 0x00, 0x00, +0x00, 0x00, 0x19, 0xDB, 0x43, 0x40, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xCC, 0x93, 0xD0, 0x00, 0x00, +0x00, 0x00, 0x1B, 0xBC, 0xA0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xAC, 0x91, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x1D, 0x9C, 0x82, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x8C, 0x73, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x1F, 0x7C, 0x64, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6C, 0x55, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x2E, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x27, 0xF5, 0x42, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, +0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, 0x00, +0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, +0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, +0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, +0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, 0x00, 0x00, 0x00, 0x38, 0xDD, 0x61, 0x10, 0x00, 0x00, +0x00, 0x00, 0x39, 0xFB, 0x76, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xBD, 0x43, 0x10, 0x00, 0x00, +0x00, 0x00, 0x3B, 0xDB, 0x58, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xA6, 0x5F, 0x90, 0x00, 0x00, +0x00, 0x00, 0x3D, 0xBB, 0x3A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x86, 0x41, 0x90, 0x00, 0x00, +0x00, 0x00, 0x3F, 0x9B, 0x1C, 0x90, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x23, 0x90, 0x00, 0x00, +0x00, 0x00, 0x41, 0x84, 0x39, 0x10, 0x00, 0x00, 0x00, 0x00, 0x42, 0x46, 0x05, 0x90, 0x00, 0x00, +0x00, 0x00, 0x43, 0x64, 0x1B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, 0xE7, 0x90, 0x00, 0x00, +0x00, 0x00, 0x45, 0x43, 0xFD, 0x10, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0xC9, 0x90, 0x00, 0x00, +0x00, 0x00, 0x47, 0x23, 0xDF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x47, 0xEE, 0xE6, 0x10, 0x00, 0x00, +0x00, 0x00, 0x49, 0x03, 0xC1, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0xCE, 0xC8, 0x10, 0x00, 0x00, +0x00, 0x00, 0x4A, 0xE3, 0xA3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xAE, 0xAA, 0x10, 0x00, 0x00, +0x00, 0x00, 0x4C, 0xCC, 0xBF, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x8E, 0x8C, 0x10, 0x00, 0x00, +0x00, 0x00, 0x4E, 0xAC, 0xA1, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6E, 0x6E, 0x10, 0x00, 0x00, +0x00, 0x00, 0x50, 0x8C, 0x83, 0x90, 0x00, 0x00, 0x00, 0x00, 0x51, 0x57, 0x8A, 0x90, 0x00, 0x00, +0x00, 0x00, 0x52, 0x6C, 0x65, 0x90, 0x00, 0x00, 0x00, 0x00, 0x53, 0x37, 0x6C, 0x90, 0x00, 0x00, +0x00, 0x00, 0x54, 0x4C, 0x47, 0x90, 0x00, 0x00, 0x00, 0x00, 0x55, 0x17, 0x4E, 0x90, 0x00, 0x00, +0x00, 0x00, 0x56, 0x2C, 0x29, 0x90, 0x00, 0x00, 0x00, 0x00, 0x56, 0xF7, 0x30, 0x90, 0x00, 0x00, +0x00, 0x00, 0x58, 0x15, 0x46, 0x10, 0x00, 0x00, 0x00, 0x00, 0x58, 0xD7, 0x12, 0x90, 0x00, 0x00, +0x00, 0x00, 0x59, 0xF5, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xB6, 0xF4, 0x90, 0x00, 0x00, +0x00, 0x00, 0x5B, 0xD5, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5C, 0xA0, 0x11, 0x10, 0x00, 0x00, +0x00, 0x00, 0x5D, 0xB4, 0xEC, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7F, 0xF3, 0x10, 0x00, 0x00, +0x00, 0x00, 0x5F, 0x94, 0xCE, 0x10, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5F, 0xD5, 0x10, 0x00, 0x00, +0x00, 0x00, 0x61, 0x7D, 0xEA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x62, 0x3F, 0xB7, 0x10, 0x00, 0x00, +0x00, 0x00, 0x63, 0x5D, 0xCC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x64, 0x1F, 0x99, 0x10, 0x00, 0x00, +0x00, 0x00, 0x65, 0x3D, 0xAE, 0x90, 0x00, 0x00, 0x00, 0x00, 0x66, 0x08, 0xB5, 0x90, 0x00, 0x00, +0x00, 0x00, 0x67, 0x1D, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x67, 0xE8, 0x97, 0x90, 0x00, 0x00, +0x00, 0x00, 0x68, 0xFD, 0x72, 0x90, 0x00, 0x00, 0x00, 0x00, 0x69, 0xC8, 0x79, 0x90, 0x00, 0x00, +0x00, 0x00, 0x6A, 0xDD, 0x54, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6B, 0xA8, 0x5B, 0x90, 0x00, 0x00, +0x00, 0x00, 0x6C, 0xC6, 0x71, 0x10, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x88, 0x3D, 0x90, 0x00, 0x00, +0x00, 0x00, 0x6E, 0xA6, 0x53, 0x10, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x68, 0x1F, 0x90, 0x00, 0x00, +0x00, 0x00, 0x70, 0x86, 0x35, 0x10, 0x00, 0x00, 0x00, 0x00, 0x71, 0x51, 0x3C, 0x10, 0x00, 0x00, +0x00, 0x00, 0x72, 0x66, 0x17, 0x10, 0x00, 0x00, 0x00, 0x00, 0x73, 0x31, 0x1E, 0x10, 0x00, 0x00, +0x00, 0x00, 0x74, 0x45, 0xF9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x00, 0x10, 0x00, 0x00, +0x00, 0x00, 0x76, 0x2F, 0x15, 0x90, 0x00, 0x00, 0x00, 0x00, 0x76, 0xF0, 0xE2, 0x10, 0x00, 0x00, +0x00, 0x00, 0x78, 0x0E, 0xF7, 0x90, 0x00, 0x00, 0x00, 0x00, 0x78, 0xD0, 0xC4, 0x10, 0x00, 0x00, +0x00, 0x00, 0x79, 0xEE, 0xD9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xB0, 0xA6, 0x10, 0x00, 0x00, +0x00, 0x00, 0x7B, 0xCE, 0xBB, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x99, 0xC2, 0x90, 0x00, 0x00, +0x00, 0x00, 0x7D, 0xAE, 0x9D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, +0x00, 0x00, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x05, 0x04, 0x05, +0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, +0x01, 0x08, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x00, 0x00, +0x14, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, +0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, +0x00, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, +0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, +0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, -0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x01, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0xFF, -0xFF, 0xFF, 0x6A, 0xEE, 0xB0, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x09, 0x71, 0x90, 0xFF, 0xFF, -0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, -0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x92, 0x34, 0x10, 0xFF, 0xFF, -0xFF, 0xFF, 0xD0, 0xA1, 0x9E, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD1, 0xE5, 0xFD, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x15, 0x27, 0xA7, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x16, 0x18, 0xDC, 0x40, 0x00, 0x00, -0x00, 0x00, 0x17, 0x08, 0xDB, 0x50, 0x00, 0x00, 0x00, 0x00, 0x17, 0xFA, 0x0F, 0xC0, 0x00, 0x00, -0x00, 0x00, 0x18, 0xEA, 0x0E, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x19, 0xDB, 0x43, 0x40, 0x00, 0x00, -0x00, 0x00, 0x1A, 0xCC, 0x93, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0xA0, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x1C, 0xAC, 0x91, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9C, 0x82, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x1E, 0x8C, 0x73, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x64, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x20, 0x6C, 0x55, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x26, 0x8D, 0x2E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x42, 0xA0, 0x00, 0x00, -0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, 0x00, -0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, -0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, -0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, -0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x00, 0x00, -0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, -0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, -0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, 0x00, -0x00, 0x00, 0x38, 0xDD, 0x61, 0x10, 0x00, 0x00, 0x00, 0x00, 0x39, 0xFB, 0x76, 0x90, 0x00, 0x00, -0x00, 0x00, 0x3A, 0xBD, 0x43, 0x10, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xDB, 0x58, 0x90, 0x00, 0x00, -0x00, 0x00, 0x3C, 0xA6, 0x5F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xBB, 0x3A, 0x90, 0x00, 0x00, -0x00, 0x00, 0x3E, 0x86, 0x41, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9B, 0x1C, 0x90, 0x00, 0x00, -0x00, 0x00, 0x40, 0x66, 0x23, 0x90, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x39, 0x10, 0x00, 0x00, -0x00, 0x00, 0x42, 0x46, 0x05, 0x90, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x1B, 0x10, 0x00, 0x00, -0x00, 0x00, 0x44, 0x25, 0xE7, 0x90, 0x00, 0x00, 0x00, 0x00, 0x45, 0x43, 0xFD, 0x10, 0x00, 0x00, -0x00, 0x00, 0x46, 0x05, 0xC9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0x23, 0xDF, 0x10, 0x00, 0x00, -0x00, 0x00, 0x47, 0xEE, 0xE6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0x03, 0xC1, 0x10, 0x00, 0x00, -0x00, 0x00, 0x49, 0xCE, 0xC8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE3, 0xA3, 0x10, 0x00, 0x00, -0x00, 0x00, 0x4B, 0xAE, 0xAA, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xCC, 0xBF, 0x90, 0x00, 0x00, -0x00, 0x00, 0x4D, 0x8E, 0x8C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xAC, 0xA1, 0x90, 0x00, 0x00, -0x00, 0x00, 0x4F, 0x6E, 0x6E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8C, 0x83, 0x90, 0x00, 0x00, -0x00, 0x00, 0x51, 0x57, 0x8A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x65, 0x90, 0x00, 0x00, -0x00, 0x00, 0x53, 0x37, 0x6C, 0x90, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x47, 0x90, 0x00, 0x00, -0x00, 0x00, 0x55, 0x17, 0x4E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x56, 0x2C, 0x29, 0x90, 0x00, 0x00, -0x00, 0x00, 0x56, 0xF7, 0x30, 0x90, 0x00, 0x00, 0x00, 0x00, 0x58, 0x15, 0x46, 0x10, 0x00, 0x00, -0x00, 0x00, 0x58, 0xD7, 0x12, 0x90, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF5, 0x28, 0x10, 0x00, 0x00, -0x00, 0x00, 0x5A, 0xB6, 0xF4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD5, 0x0A, 0x10, 0x00, 0x00, -0x00, 0x00, 0x5C, 0xA0, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB4, 0xEC, 0x10, 0x00, 0x00, -0x00, 0x00, 0x5E, 0x7F, 0xF3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x94, 0xCE, 0x10, 0x00, 0x00, -0x00, 0x00, 0x60, 0x5F, 0xD5, 0x10, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7D, 0xEA, 0x90, 0x00, 0x00, -0x00, 0x00, 0x62, 0x3F, 0xB7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5D, 0xCC, 0x90, 0x00, 0x00, -0x00, 0x00, 0x64, 0x1F, 0x99, 0x10, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3D, 0xAE, 0x90, 0x00, 0x00, -0x00, 0x00, 0x66, 0x08, 0xB5, 0x90, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1D, 0x90, 0x90, 0x00, 0x00, -0x00, 0x00, 0x67, 0xE8, 0x97, 0x90, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFD, 0x72, 0x90, 0x00, 0x00, -0x00, 0x00, 0x69, 0xC8, 0x79, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDD, 0x54, 0x90, 0x00, 0x00, -0x00, 0x00, 0x6B, 0xA8, 0x5B, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC6, 0x71, 0x10, 0x00, 0x00, -0x00, 0x00, 0x6D, 0x88, 0x3D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA6, 0x53, 0x10, 0x00, 0x00, -0x00, 0x00, 0x6F, 0x68, 0x1F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x70, 0x86, 0x35, 0x10, 0x00, 0x00, -0x00, 0x00, 0x71, 0x51, 0x3C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x72, 0x66, 0x17, 0x10, 0x00, 0x00, -0x00, 0x00, 0x73, 0x31, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x74, 0x45, 0xF9, 0x10, 0x00, 0x00, -0x00, 0x00, 0x75, 0x11, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2F, 0x15, 0x90, 0x00, 0x00, -0x00, 0x00, 0x76, 0xF0, 0xE2, 0x10, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0E, 0xF7, 0x90, 0x00, 0x00, -0x00, 0x00, 0x78, 0xD0, 0xC4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEE, 0xD9, 0x90, 0x00, 0x00, -0x00, 0x00, 0x7A, 0xB0, 0xA6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCE, 0xBB, 0x90, 0x00, 0x00, -0x00, 0x00, 0x7C, 0x99, 0xC2, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAE, 0x9D, 0x90, 0x00, 0x00, -0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, -0x03, 0x02, 0x03, 0x02, 0x01, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x01, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x00, 0x00, 0x14, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, -0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, -0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x4C, 0x4D, -0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, -0x53, 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, -0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD3, 0x83, 0x22, 0x01, 0x34, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x0E, 0x54, 0x72, @@ -62882,8 +62888,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { /* Europe/Zaporozhye */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x24, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x24, 0x80, 0x00, 0x00, 0x00, 0xAA, 0x19, 0xA3, 0x30, 0xB5, 0xA4, 0x19, 0x60, 0xCA, 0xAA, 0xE7, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCE, 0xBD, 0xD6, 0x70, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, @@ -62891,9 +62897,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, 0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, -0x28, 0xE4, 0xED, 0x50, 0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, -0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0xBC, 0x90, -0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, +0x28, 0xE4, 0xED, 0x50, 0x29, 0xD5, 0x08, 0x80, 0x2A, 0xC4, 0xF9, 0x80, 0x2B, 0xB4, 0xEA, 0x80, +0x2C, 0xA4, 0xDB, 0x80, 0x2D, 0x94, 0xCC, 0x80, 0x2E, 0x84, 0xBD, 0x80, 0x2F, 0x74, 0xAE, 0x80, +0x30, 0x64, 0x9F, 0x80, 0x31, 0x5D, 0xCB, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, @@ -62916,24 +62922,25 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x00, 0x00, +0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x20, 0xD0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1B, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1B, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, -0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x4C, 0x4D, 0x54, 0x00, -0x2B, 0x30, 0x32, 0x32, 0x30, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, -0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, 0x1C, 0x20, +0x00, 0x0A, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x4C, 0x4D, 0x54, 0x00, 0x2B, 0x30, 0x32, 0x32, +0x30, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, +0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, -0x00, 0x0D, 0x00, 0x00, 0x00, 0x24, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC3, 0x08, 0xFF, 0xFF, +0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, +0x00, 0x0F, 0x00, 0x00, 0x00, 0x24, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC3, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA3, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA, 0xAA, 0xE7, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, @@ -62948,11 +62955,11 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x27, 0x70, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x18, 0x70, 0x00, 0x00, -0x00, 0x00, 0x28, 0xE4, 0xED, 0x50, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, 0x00, -0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, 0x00, -0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, -0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, -0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x00, 0x00, +0x00, 0x00, 0x28, 0xE4, 0xED, 0x50, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, +0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, @@ -62996,20 +63003,21 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x00, 0x7D, 0xAE, 0x9D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, +0x09, 0x08, 0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x20, 0xD0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1B, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1B, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x1F, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x4C, 0x4D, -0x54, 0x00, 0x2B, 0x30, 0x32, 0x32, 0x30, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, -0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, -0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, +0x01, 0x1F, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, +0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x4C, 0x4D, 0x54, 0x00, 0x2B, 0x30, +0x32, 0x32, 0x30, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, +0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, +0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD2, 0x51, 0x25, 0x01, 0x48, @@ -69555,4 +69563,4 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { }; #endif -const timelib_tzdb timezonedb_builtin = { "2021.5", 595, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; +const timelib_tzdb timezonedb_builtin = { "2022.1", 595, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; From 7e829d15369ef0225fab417f9e3a0ee8327b19e3 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Thu, 7 Apr 2022 10:45:20 +0100 Subject: [PATCH 18/78] Updated to version 2022.1 (2022a) --- ext/date/lib/timezonedb.h | 2136 +++++++++++++++++++------------------ 1 file changed, 1072 insertions(+), 1064 deletions(-) diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h index 411ef5b44254e..60cc4b3ab6cc9 100644 --- a/ext/date/lib/timezonedb.h +++ b/ext/date/lib/timezonedb.h @@ -270,340 +270,340 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[595] = { { "Asia/Dushanbe" , 0x0247C2 }, { "Asia/Famagusta" , 0x02493C }, { "Asia/Gaza" , 0x024D03 }, - { "Asia/Harbin" , 0x0251E7 }, - { "Asia/Hebron" , 0x02537C }, - { "Asia/Ho_Chi_Minh" , 0x025871 }, - { "Asia/Hong_Kong" , 0x025969 }, - { "Asia/Hovd" , 0x025C7C }, - { "Asia/Irkutsk" , 0x025F05 }, - { "Asia/Istanbul" , 0x026223 }, - { "Asia/Jakarta" , 0x0266DF }, - { "Asia/Jayapura" , 0x0267F0 }, - { "Asia/Jerusalem" , 0x0268DD }, - { "Asia/Kabul" , 0x026D1B }, - { "Asia/Kamchatka" , 0x026DC6 }, - { "Asia/Karachi" , 0x0270BB }, - { "Asia/Kashgar" , 0x0271D1 }, - { "Asia/Kathmandu" , 0x027262 }, - { "Asia/Katmandu" , 0x02730F }, - { "Asia/Khandyga" , 0x0273BC }, - { "Asia/Kolkata" , 0x0276ED }, - { "Asia/Krasnoyarsk" , 0x0277D5 }, - { "Asia/Kuala_Lumpur" , 0x027ADF }, - { "Asia/Kuching" , 0x027BFF }, - { "Asia/Kuwait" , 0x027D59 }, - { "Asia/Macao" , 0x027DEA }, - { "Asia/Macau" , 0x02810D }, - { "Asia/Magadan" , 0x028430 }, - { "Asia/Makassar" , 0x02873B }, - { "Asia/Manila" , 0x02884E }, - { "Asia/Muscat" , 0x028948 }, - { "Asia/Nicosia" , 0x0289D9 }, - { "Asia/Novokuznetsk" , 0x028C4D }, - { "Asia/Novosibirsk" , 0x028F40 }, - { "Asia/Omsk" , 0x029251 }, - { "Asia/Oral" , 0x02954F }, - { "Asia/Phnom_Penh" , 0x0297DB }, - { "Asia/Pontianak" , 0x02987F }, - { "Asia/Pyongyang" , 0x029998 }, - { "Asia/Qatar" , 0x029A5B }, - { "Asia/Qostanay" , 0x029AFF }, - { "Asia/Qyzylorda" , 0x029D8C }, - { "Asia/Rangoon" , 0x02A025 }, - { "Asia/Riyadh" , 0x02A0EC }, - { "Asia/Saigon" , 0x02A17D }, - { "Asia/Sakhalin" , 0x02A275 }, - { "Asia/Samarkand" , 0x02A58C }, - { "Asia/Seoul" , 0x02A717 }, - { "Asia/Shanghai" , 0x02A8C2 }, - { "Asia/Singapore" , 0x02AA63 }, - { "Asia/Srednekolymsk" , 0x02AB6F }, - { "Asia/Taipei" , 0x02AE83 }, - { "Asia/Tashkent" , 0x02B08E }, - { "Asia/Tbilisi" , 0x02B219 }, - { "Asia/Tehran" , 0x02B49A }, - { "Asia/Tel_Aviv" , 0x02BC7A }, - { "Asia/Thimbu" , 0x02C0B8 }, - { "Asia/Thimphu" , 0x02C15E }, - { "Asia/Tokyo" , 0x02C204 }, - { "Asia/Tomsk" , 0x02C2E5 }, - { "Asia/Ujung_Pandang" , 0x02C5F0 }, - { "Asia/Ulaanbaatar" , 0x02C6BA }, - { "Asia/Ulan_Bator" , 0x02C92D }, - { "Asia/Urumqi" , 0x02CB8B }, - { "Asia/Ust-Nera" , 0x02CC29 }, - { "Asia/Vientiane" , 0x02CF4C }, - { "Asia/Vladivostok" , 0x02CFF0 }, - { "Asia/Yakutsk" , 0x02D2F5 }, - { "Asia/Yangon" , 0x02D5F9 }, - { "Asia/Yekaterinburg" , 0x02D6C0 }, - { "Asia/Yerevan" , 0x02D9D2 }, - { "Atlantic/Azores" , 0x02DCA2 }, - { "Atlantic/Bermuda" , 0x02E261 }, - { "Atlantic/Canary" , 0x02E66D }, - { "Atlantic/Cape_Verde" , 0x02E865 }, - { "Atlantic/Faeroe" , 0x02E920 }, - { "Atlantic/Faroe" , 0x02EAE5 }, - { "Atlantic/Jan_Mayen" , 0x02ECAA }, - { "Atlantic/Madeira" , 0x02EF5A }, - { "Atlantic/Reykjavik" , 0x02F522 }, - { "Atlantic/South_Georgia" , 0x02F81F }, - { "Atlantic/St_Helena" , 0x02F8AF }, - { "Atlantic/Stanley" , 0x02F93D }, - { "Australia/ACT" , 0x02FC5E }, - { "Australia/Adelaide" , 0x02FFF2 }, - { "Australia/Brisbane" , 0x0303A6 }, - { "Australia/Broken_Hill" , 0x0304EA }, - { "Australia/Canberra" , 0x0308BF }, - { "Australia/Currie" , 0x030C53 }, - { "Australia/Darwin" , 0x03104A }, - { "Australia/Eucla" , 0x031152 }, - { "Australia/Hobart" , 0x0312B1 }, - { "Australia/LHI" , 0x0316B0 }, - { "Australia/Lindeman" , 0x031970 }, - { "Australia/Lord_Howe" , 0x031AE0 }, - { "Australia/Melbourne" , 0x031DB0 }, - { "Australia/North" , 0x03214C }, - { "Australia/NSW" , 0x032242 }, - { "Australia/Perth" , 0x0325D6 }, - { "Australia/Queensland" , 0x032732 }, - { "Australia/South" , 0x03285F }, - { "Australia/Sydney" , 0x032C04 }, - { "Australia/Tasmania" , 0x032FB4 }, - { "Australia/Victoria" , 0x0333AB }, - { "Australia/West" , 0x03373F }, - { "Australia/Yancowinna" , 0x03387D }, - { "Brazil/Acre" , 0x033C36 }, - { "Brazil/DeNoronha" , 0x033DE4 }, - { "Brazil/East" , 0x033FD4 }, - { "Brazil/West" , 0x034398 }, - { "Canada/Atlantic" , 0x034540 }, - { "Canada/Central" , 0x034BD4 }, - { "Canada/Eastern" , 0x0350EE }, - { "Canada/Mountain" , 0x0357AF }, - { "Canada/Newfoundland" , 0x035B85 }, - { "Canada/Pacific" , 0x0362E7 }, - { "Canada/Saskatchewan" , 0x036825 }, - { "Canada/Yukon" , 0x036AAF }, - { "CET" , 0x036EC0 }, - { "Chile/Continental" , 0x037139 }, - { "Chile/EasterIsland" , 0x037647 }, - { "CST6CDT" , 0x037AA1 }, - { "Cuba" , 0x037E64 }, - { "EET" , 0x0382CD }, - { "Egypt" , 0x0384CA }, - { "Eire" , 0x0389D2 }, - { "EST" , 0x038FB6 }, - { "EST5EDT" , 0x039031 }, - { "Etc/GMT" , 0x0393F4 }, - { "Etc/GMT+0" , 0x03946F }, - { "Etc/GMT+1" , 0x0394EA }, - { "Etc/GMT+10" , 0x039567 }, - { "Etc/GMT+11" , 0x0395E5 }, - { "Etc/GMT+12" , 0x039663 }, - { "Etc/GMT+2" , 0x0396E1 }, - { "Etc/GMT+3" , 0x03975E }, - { "Etc/GMT+4" , 0x0397DB }, - { "Etc/GMT+5" , 0x039858 }, - { "Etc/GMT+6" , 0x0398D5 }, - { "Etc/GMT+7" , 0x039952 }, - { "Etc/GMT+8" , 0x0399CF }, - { "Etc/GMT+9" , 0x039A4C }, - { "Etc/GMT-0" , 0x039AC9 }, - { "Etc/GMT-1" , 0x039B44 }, - { "Etc/GMT-10" , 0x039BC2 }, - { "Etc/GMT-11" , 0x039C41 }, - { "Etc/GMT-12" , 0x039CC0 }, - { "Etc/GMT-13" , 0x039D3F }, - { "Etc/GMT-14" , 0x039DBE }, - { "Etc/GMT-2" , 0x039E3D }, - { "Etc/GMT-3" , 0x039EBB }, - { "Etc/GMT-4" , 0x039F39 }, - { "Etc/GMT-5" , 0x039FB7 }, - { "Etc/GMT-6" , 0x03A035 }, - { "Etc/GMT-7" , 0x03A0B3 }, - { "Etc/GMT-8" , 0x03A131 }, - { "Etc/GMT-9" , 0x03A1AF }, - { "Etc/GMT0" , 0x03A22D }, - { "Etc/Greenwich" , 0x03A2A8 }, - { "Etc/UCT" , 0x03A323 }, - { "Etc/Universal" , 0x03A39E }, - { "Etc/UTC" , 0x03A419 }, - { "Etc/Zulu" , 0x03A494 }, - { "Europe/Amsterdam" , 0x03A50F }, - { "Europe/Andorra" , 0x03A94A }, - { "Europe/Astrakhan" , 0x03AADB }, - { "Europe/Athens" , 0x03ADCF }, - { "Europe/Belfast" , 0x03B085 }, - { "Europe/Belgrade" , 0x03B6D0 }, - { "Europe/Berlin" , 0x03B8BA }, - { "Europe/Bratislava" , 0x03BB9B }, - { "Europe/Brussels" , 0x03BE7A }, - { "Europe/Bucharest" , 0x03C2D5 }, - { "Europe/Budapest" , 0x03C576 }, - { "Europe/Busingen" , 0x03C880 }, - { "Europe/Chisinau" , 0x03CA85 }, - { "Europe/Copenhagen" , 0x03CD84 }, - { "Europe/Dublin" , 0x03CFFF }, - { "Europe/Gibraltar" , 0x03D5E3 }, - { "Europe/Guernsey" , 0x03DAB3 }, - { "Europe/Helsinki" , 0x03E0FE }, - { "Europe/Isle_of_Man" , 0x03E2EB }, - { "Europe/Istanbul" , 0x03E936 }, - { "Europe/Jersey" , 0x03EDF2 }, - { "Europe/Kaliningrad" , 0x03F43D }, - { "Europe/Kiev" , 0x03F7E5 }, - { "Europe/Kirov" , 0x03FA2A }, - { "Europe/Lisbon" , 0x03FD11 }, - { "Europe/Ljubljana" , 0x0402DE }, - { "Europe/London" , 0x0404C8 }, - { "Europe/Luxembourg" , 0x040B13 }, - { "Europe/Madrid" , 0x040F5E }, - { "Europe/Malta" , 0x0412FB }, - { "Europe/Mariehamn" , 0x0416A7 }, - { "Europe/Minsk" , 0x041894 }, - { "Europe/Monaco" , 0x041BC8 }, - { "Europe/Moscow" , 0x04202E }, - { "Europe/Nicosia" , 0x0423DA }, - { "Europe/Oslo" , 0x04263B }, - { "Europe/Paris" , 0x0428EB }, - { "Europe/Podgorica" , 0x042D48 }, - { "Europe/Prague" , 0x042F32 }, - { "Europe/Riga" , 0x043211 }, - { "Europe/Rome" , 0x0434D3 }, - { "Europe/Samara" , 0x043892 }, - { "Europe/San_Marino" , 0x043B93 }, - { "Europe/Sarajevo" , 0x043F52 }, - { "Europe/Saratov" , 0x04413C }, - { "Europe/Simferopol" , 0x04442E }, - { "Europe/Skopje" , 0x0447A1 }, - { "Europe/Sofia" , 0x04498B }, - { "Europe/Stockholm" , 0x044BE7 }, - { "Europe/Tallinn" , 0x044DE4 }, - { "Europe/Tirane" , 0x045093 }, - { "Europe/Tiraspol" , 0x0452FB }, - { "Europe/Ulyanovsk" , 0x0455FA }, - { "Europe/Uzhgorod" , 0x045910 }, - { "Europe/Vaduz" , 0x045B3C }, - { "Europe/Vatican" , 0x045D39 }, - { "Europe/Vienna" , 0x0460F8 }, - { "Europe/Vilnius" , 0x046396 }, - { "Europe/Volgograd" , 0x046646 }, - { "Europe/Warsaw" , 0x046943 }, - { "Europe/Zagreb" , 0x046CEA }, - { "Europe/Zaporozhye" , 0x046ED4 }, - { "Europe/Zurich" , 0x04712B }, - { "Factory" , 0x047328 }, - { "GB" , 0x0473A5 }, - { "GB-Eire" , 0x0479F0 }, - { "GMT" , 0x04803B }, - { "GMT+0" , 0x0480B6 }, - { "GMT-0" , 0x048131 }, - { "GMT0" , 0x0481AC }, - { "Greenwich" , 0x048227 }, - { "Hongkong" , 0x0482A2 }, - { "HST" , 0x0485B5 }, - { "Iceland" , 0x048631 }, - { "Indian/Antananarivo" , 0x04892E }, - { "Indian/Chagos" , 0x0489F9 }, - { "Indian/Christmas" , 0x048A9D }, - { "Indian/Cocos" , 0x048B2E }, - { "Indian/Comoro" , 0x048BC6 }, - { "Indian/Kerguelen" , 0x048C91 }, - { "Indian/Mahe" , 0x048D22 }, - { "Indian/Maldives" , 0x048DB3 }, - { "Indian/Mauritius" , 0x048E57 }, - { "Indian/Mayotte" , 0x048F16 }, - { "Indian/Reunion" , 0x048FE1 }, - { "Iran" , 0x049072 }, - { "Israel" , 0x049852 }, - { "Jamaica" , 0x049C90 }, - { "Japan" , 0x049DEF }, - { "Kwajalein" , 0x049ED0 }, - { "Libya" , 0x049FB7 }, - { "MET" , 0x04A172 }, - { "Mexico/BajaNorte" , 0x04A3EB }, - { "Mexico/BajaSur" , 0x04A7F8 }, - { "Mexico/General" , 0x04A973 }, - { "MST" , 0x04AB1B }, - { "MST7MDT" , 0x04AB96 }, - { "Navajo" , 0x04AF59 }, - { "NZ" , 0x04B377 }, - { "NZ-CHAT" , 0x04B796 }, - { "Pacific/Apia" , 0x04BACA }, - { "Pacific/Auckland" , 0x04BC6D }, - { "Pacific/Bougainville" , 0x04C0A4 }, - { "Pacific/Chatham" , 0x04C185 }, - { "Pacific/Chuuk" , 0x04C4C8 }, - { "Pacific/Easter" , 0x04C5A6 }, - { "Pacific/Efate" , 0x04CA0D }, - { "Pacific/Enderbury" , 0x04CB6F }, - { "Pacific/Fakaofo" , 0x04CC27 }, - { "Pacific/Fiji" , 0x04CCCC }, - { "Pacific/Funafuti" , 0x04CE84 }, - { "Pacific/Galapagos" , 0x04CF16 }, - { "Pacific/Gambier" , 0x04CFE2 }, - { "Pacific/Guadalcanal" , 0x04D081 }, - { "Pacific/Guam" , 0x04D113 }, - { "Pacific/Honolulu" , 0x04D27D }, - { "Pacific/Johnston" , 0x04D36C }, - { "Pacific/Kanton" , 0x04D455 }, - { "Pacific/Kiritimati" , 0x04D51C }, - { "Pacific/Kosrae" , 0x04D5E2 }, - { "Pacific/Kwajalein" , 0x04D6E6 }, - { "Pacific/Majuro" , 0x04D7D6 }, - { "Pacific/Marquesas" , 0x04D8D9 }, - { "Pacific/Midway" , 0x04D981 }, - { "Pacific/Nauru" , 0x04DA2D }, - { "Pacific/Niue" , 0x04DAF0 }, - { "Pacific/Norfolk" , 0x04DB96 }, - { "Pacific/Noumea" , 0x04DC99 }, - { "Pacific/Pago_Pago" , 0x04DD6B }, - { "Pacific/Palau" , 0x04DE09 }, - { "Pacific/Pitcairn" , 0x04DEA9 }, - { "Pacific/Pohnpei" , 0x04DF4E }, - { "Pacific/Ponape" , 0x04E03E }, - { "Pacific/Port_Moresby" , 0x04E120 }, - { "Pacific/Rarotonga" , 0x04E1E3 }, - { "Pacific/Saipan" , 0x04E385 }, - { "Pacific/Samoa" , 0x04E4EF }, - { "Pacific/Tahiti" , 0x04E58D }, - { "Pacific/Tarawa" , 0x04E62D }, - { "Pacific/Tongatapu" , 0x04E6CE }, - { "Pacific/Truk" , 0x04E7C7 }, - { "Pacific/Wake" , 0x04E896 }, - { "Pacific/Wallis" , 0x04E933 }, - { "Pacific/Yap" , 0x04E9C5 }, - { "Poland" , 0x04EA94 }, - { "Portugal" , 0x04EE3B }, - { "PRC" , 0x04F3F5 }, - { "PST8PDT" , 0x04F58A }, - { "ROC" , 0x04F94D }, - { "ROK" , 0x04FB58 }, - { "Singapore" , 0x04FD03 }, - { "Turkey" , 0x04FE0F }, - { "UCT" , 0x0502CB }, - { "Universal" , 0x050346 }, - { "US/Alaska" , 0x0503C1 }, - { "US/Aleutian" , 0x05079E }, - { "US/Arizona" , 0x050B73 }, - { "US/Central" , 0x050C6F }, - { "US/East-Indiana" , 0x051355 }, - { "US/Eastern" , 0x051574 }, - { "US/Hawaii" , 0x051C50 }, - { "US/Indiana-Starke" , 0x051D39 }, - { "US/Michigan" , 0x05213D }, - { "US/Mountain" , 0x0524CC }, - { "US/Pacific" , 0x0528EA }, - { "US/Samoa" , 0x052E04 }, - { "UTC" , 0x052EA2 }, - { "W-SU" , 0x052F1D }, - { "WET" , 0x0532B5 }, - { "Zulu" , 0x0534AF }, + { "Asia/Harbin" , 0x0251F1 }, + { "Asia/Hebron" , 0x025386 }, + { "Asia/Ho_Chi_Minh" , 0x025885 }, + { "Asia/Hong_Kong" , 0x02597D }, + { "Asia/Hovd" , 0x025C90 }, + { "Asia/Irkutsk" , 0x025F19 }, + { "Asia/Istanbul" , 0x026237 }, + { "Asia/Jakarta" , 0x0266F3 }, + { "Asia/Jayapura" , 0x026804 }, + { "Asia/Jerusalem" , 0x0268F1 }, + { "Asia/Kabul" , 0x026D2F }, + { "Asia/Kamchatka" , 0x026DDA }, + { "Asia/Karachi" , 0x0270CF }, + { "Asia/Kashgar" , 0x0271E5 }, + { "Asia/Kathmandu" , 0x027276 }, + { "Asia/Katmandu" , 0x027323 }, + { "Asia/Khandyga" , 0x0273D0 }, + { "Asia/Kolkata" , 0x027701 }, + { "Asia/Krasnoyarsk" , 0x0277E9 }, + { "Asia/Kuala_Lumpur" , 0x027AF3 }, + { "Asia/Kuching" , 0x027C13 }, + { "Asia/Kuwait" , 0x027D6D }, + { "Asia/Macao" , 0x027DFE }, + { "Asia/Macau" , 0x028121 }, + { "Asia/Magadan" , 0x028444 }, + { "Asia/Makassar" , 0x02874F }, + { "Asia/Manila" , 0x028862 }, + { "Asia/Muscat" , 0x02895C }, + { "Asia/Nicosia" , 0x0289ED }, + { "Asia/Novokuznetsk" , 0x028C61 }, + { "Asia/Novosibirsk" , 0x028F54 }, + { "Asia/Omsk" , 0x029265 }, + { "Asia/Oral" , 0x029563 }, + { "Asia/Phnom_Penh" , 0x0297EF }, + { "Asia/Pontianak" , 0x029893 }, + { "Asia/Pyongyang" , 0x0299AC }, + { "Asia/Qatar" , 0x029A6F }, + { "Asia/Qostanay" , 0x029B13 }, + { "Asia/Qyzylorda" , 0x029DA0 }, + { "Asia/Rangoon" , 0x02A039 }, + { "Asia/Riyadh" , 0x02A100 }, + { "Asia/Saigon" , 0x02A191 }, + { "Asia/Sakhalin" , 0x02A289 }, + { "Asia/Samarkand" , 0x02A5A0 }, + { "Asia/Seoul" , 0x02A72B }, + { "Asia/Shanghai" , 0x02A8D6 }, + { "Asia/Singapore" , 0x02AA77 }, + { "Asia/Srednekolymsk" , 0x02AB83 }, + { "Asia/Taipei" , 0x02AE97 }, + { "Asia/Tashkent" , 0x02B0A2 }, + { "Asia/Tbilisi" , 0x02B22D }, + { "Asia/Tehran" , 0x02B4AE }, + { "Asia/Tel_Aviv" , 0x02BC8E }, + { "Asia/Thimbu" , 0x02C0CC }, + { "Asia/Thimphu" , 0x02C172 }, + { "Asia/Tokyo" , 0x02C218 }, + { "Asia/Tomsk" , 0x02C2F9 }, + { "Asia/Ujung_Pandang" , 0x02C604 }, + { "Asia/Ulaanbaatar" , 0x02C6CE }, + { "Asia/Ulan_Bator" , 0x02C941 }, + { "Asia/Urumqi" , 0x02CB9F }, + { "Asia/Ust-Nera" , 0x02CC3D }, + { "Asia/Vientiane" , 0x02CF60 }, + { "Asia/Vladivostok" , 0x02D004 }, + { "Asia/Yakutsk" , 0x02D309 }, + { "Asia/Yangon" , 0x02D60D }, + { "Asia/Yekaterinburg" , 0x02D6D4 }, + { "Asia/Yerevan" , 0x02D9E6 }, + { "Atlantic/Azores" , 0x02DCB6 }, + { "Atlantic/Bermuda" , 0x02E275 }, + { "Atlantic/Canary" , 0x02E681 }, + { "Atlantic/Cape_Verde" , 0x02E879 }, + { "Atlantic/Faeroe" , 0x02E934 }, + { "Atlantic/Faroe" , 0x02EAF9 }, + { "Atlantic/Jan_Mayen" , 0x02ECBE }, + { "Atlantic/Madeira" , 0x02EF6E }, + { "Atlantic/Reykjavik" , 0x02F536 }, + { "Atlantic/South_Georgia" , 0x02F833 }, + { "Atlantic/St_Helena" , 0x02F8C3 }, + { "Atlantic/Stanley" , 0x02F951 }, + { "Australia/ACT" , 0x02FC72 }, + { "Australia/Adelaide" , 0x030006 }, + { "Australia/Brisbane" , 0x0303BA }, + { "Australia/Broken_Hill" , 0x0304FE }, + { "Australia/Canberra" , 0x0308D3 }, + { "Australia/Currie" , 0x030C67 }, + { "Australia/Darwin" , 0x03105E }, + { "Australia/Eucla" , 0x031166 }, + { "Australia/Hobart" , 0x0312C5 }, + { "Australia/LHI" , 0x0316C4 }, + { "Australia/Lindeman" , 0x031984 }, + { "Australia/Lord_Howe" , 0x031AF4 }, + { "Australia/Melbourne" , 0x031DC4 }, + { "Australia/North" , 0x032160 }, + { "Australia/NSW" , 0x032256 }, + { "Australia/Perth" , 0x0325EA }, + { "Australia/Queensland" , 0x032746 }, + { "Australia/South" , 0x032873 }, + { "Australia/Sydney" , 0x032C18 }, + { "Australia/Tasmania" , 0x032FC8 }, + { "Australia/Victoria" , 0x0333BF }, + { "Australia/West" , 0x033753 }, + { "Australia/Yancowinna" , 0x033891 }, + { "Brazil/Acre" , 0x033C4A }, + { "Brazil/DeNoronha" , 0x033DF8 }, + { "Brazil/East" , 0x033FE8 }, + { "Brazil/West" , 0x0343AC }, + { "Canada/Atlantic" , 0x034554 }, + { "Canada/Central" , 0x034BE8 }, + { "Canada/Eastern" , 0x035102 }, + { "Canada/Mountain" , 0x0357C3 }, + { "Canada/Newfoundland" , 0x035B99 }, + { "Canada/Pacific" , 0x0362FB }, + { "Canada/Saskatchewan" , 0x036839 }, + { "Canada/Yukon" , 0x036AC3 }, + { "CET" , 0x036ED4 }, + { "Chile/Continental" , 0x03714D }, + { "Chile/EasterIsland" , 0x03765B }, + { "CST6CDT" , 0x037AB5 }, + { "Cuba" , 0x037E78 }, + { "EET" , 0x0382E1 }, + { "Egypt" , 0x0384DE }, + { "Eire" , 0x0389E6 }, + { "EST" , 0x038FCA }, + { "EST5EDT" , 0x039045 }, + { "Etc/GMT" , 0x039408 }, + { "Etc/GMT+0" , 0x039483 }, + { "Etc/GMT+1" , 0x0394FE }, + { "Etc/GMT+10" , 0x03957B }, + { "Etc/GMT+11" , 0x0395F9 }, + { "Etc/GMT+12" , 0x039677 }, + { "Etc/GMT+2" , 0x0396F5 }, + { "Etc/GMT+3" , 0x039772 }, + { "Etc/GMT+4" , 0x0397EF }, + { "Etc/GMT+5" , 0x03986C }, + { "Etc/GMT+6" , 0x0398E9 }, + { "Etc/GMT+7" , 0x039966 }, + { "Etc/GMT+8" , 0x0399E3 }, + { "Etc/GMT+9" , 0x039A60 }, + { "Etc/GMT-0" , 0x039ADD }, + { "Etc/GMT-1" , 0x039B58 }, + { "Etc/GMT-10" , 0x039BD6 }, + { "Etc/GMT-11" , 0x039C55 }, + { "Etc/GMT-12" , 0x039CD4 }, + { "Etc/GMT-13" , 0x039D53 }, + { "Etc/GMT-14" , 0x039DD2 }, + { "Etc/GMT-2" , 0x039E51 }, + { "Etc/GMT-3" , 0x039ECF }, + { "Etc/GMT-4" , 0x039F4D }, + { "Etc/GMT-5" , 0x039FCB }, + { "Etc/GMT-6" , 0x03A049 }, + { "Etc/GMT-7" , 0x03A0C7 }, + { "Etc/GMT-8" , 0x03A145 }, + { "Etc/GMT-9" , 0x03A1C3 }, + { "Etc/GMT0" , 0x03A241 }, + { "Etc/Greenwich" , 0x03A2BC }, + { "Etc/UCT" , 0x03A337 }, + { "Etc/Universal" , 0x03A3B2 }, + { "Etc/UTC" , 0x03A42D }, + { "Etc/Zulu" , 0x03A4A8 }, + { "Europe/Amsterdam" , 0x03A523 }, + { "Europe/Andorra" , 0x03A95E }, + { "Europe/Astrakhan" , 0x03AAEF }, + { "Europe/Athens" , 0x03ADE3 }, + { "Europe/Belfast" , 0x03B099 }, + { "Europe/Belgrade" , 0x03B6E4 }, + { "Europe/Berlin" , 0x03B8CE }, + { "Europe/Bratislava" , 0x03BBAF }, + { "Europe/Brussels" , 0x03BE8E }, + { "Europe/Bucharest" , 0x03C2E9 }, + { "Europe/Budapest" , 0x03C58A }, + { "Europe/Busingen" , 0x03C894 }, + { "Europe/Chisinau" , 0x03CA99 }, + { "Europe/Copenhagen" , 0x03CD98 }, + { "Europe/Dublin" , 0x03D013 }, + { "Europe/Gibraltar" , 0x03D5F7 }, + { "Europe/Guernsey" , 0x03DAC7 }, + { "Europe/Helsinki" , 0x03E112 }, + { "Europe/Isle_of_Man" , 0x03E2FF }, + { "Europe/Istanbul" , 0x03E94A }, + { "Europe/Jersey" , 0x03EE06 }, + { "Europe/Kaliningrad" , 0x03F451 }, + { "Europe/Kiev" , 0x03F7F9 }, + { "Europe/Kirov" , 0x03FA47 }, + { "Europe/Lisbon" , 0x03FD2E }, + { "Europe/Ljubljana" , 0x0402FB }, + { "Europe/London" , 0x0404E5 }, + { "Europe/Luxembourg" , 0x040B30 }, + { "Europe/Madrid" , 0x040F7B }, + { "Europe/Malta" , 0x041318 }, + { "Europe/Mariehamn" , 0x0416C4 }, + { "Europe/Minsk" , 0x0418B1 }, + { "Europe/Monaco" , 0x041BE5 }, + { "Europe/Moscow" , 0x04204B }, + { "Europe/Nicosia" , 0x0423F7 }, + { "Europe/Oslo" , 0x042658 }, + { "Europe/Paris" , 0x042908 }, + { "Europe/Podgorica" , 0x042D65 }, + { "Europe/Prague" , 0x042F4F }, + { "Europe/Riga" , 0x04322E }, + { "Europe/Rome" , 0x0434F0 }, + { "Europe/Samara" , 0x0438AF }, + { "Europe/San_Marino" , 0x043BB0 }, + { "Europe/Sarajevo" , 0x043F6F }, + { "Europe/Saratov" , 0x044159 }, + { "Europe/Simferopol" , 0x04444B }, + { "Europe/Skopje" , 0x0447BE }, + { "Europe/Sofia" , 0x0449A8 }, + { "Europe/Stockholm" , 0x044C04 }, + { "Europe/Tallinn" , 0x044E01 }, + { "Europe/Tirane" , 0x0450B0 }, + { "Europe/Tiraspol" , 0x045318 }, + { "Europe/Ulyanovsk" , 0x045617 }, + { "Europe/Uzhgorod" , 0x04592D }, + { "Europe/Vaduz" , 0x045B62 }, + { "Europe/Vatican" , 0x045D5F }, + { "Europe/Vienna" , 0x04611E }, + { "Europe/Vilnius" , 0x0463BC }, + { "Europe/Volgograd" , 0x04666C }, + { "Europe/Warsaw" , 0x046969 }, + { "Europe/Zagreb" , 0x046D10 }, + { "Europe/Zaporozhye" , 0x046EFA }, + { "Europe/Zurich" , 0x04715A }, + { "Factory" , 0x047357 }, + { "GB" , 0x0473D4 }, + { "GB-Eire" , 0x047A1F }, + { "GMT" , 0x04806A }, + { "GMT+0" , 0x0480E5 }, + { "GMT-0" , 0x048160 }, + { "GMT0" , 0x0481DB }, + { "Greenwich" , 0x048256 }, + { "Hongkong" , 0x0482D1 }, + { "HST" , 0x0485E4 }, + { "Iceland" , 0x048660 }, + { "Indian/Antananarivo" , 0x04895D }, + { "Indian/Chagos" , 0x048A28 }, + { "Indian/Christmas" , 0x048ACC }, + { "Indian/Cocos" , 0x048B5D }, + { "Indian/Comoro" , 0x048BF5 }, + { "Indian/Kerguelen" , 0x048CC0 }, + { "Indian/Mahe" , 0x048D51 }, + { "Indian/Maldives" , 0x048DE2 }, + { "Indian/Mauritius" , 0x048E86 }, + { "Indian/Mayotte" , 0x048F45 }, + { "Indian/Reunion" , 0x049010 }, + { "Iran" , 0x0490A1 }, + { "Israel" , 0x049881 }, + { "Jamaica" , 0x049CBF }, + { "Japan" , 0x049E1E }, + { "Kwajalein" , 0x049EFF }, + { "Libya" , 0x049FE6 }, + { "MET" , 0x04A1A1 }, + { "Mexico/BajaNorte" , 0x04A41A }, + { "Mexico/BajaSur" , 0x04A827 }, + { "Mexico/General" , 0x04A9A2 }, + { "MST" , 0x04AB4A }, + { "MST7MDT" , 0x04ABC5 }, + { "Navajo" , 0x04AF88 }, + { "NZ" , 0x04B3A6 }, + { "NZ-CHAT" , 0x04B7C5 }, + { "Pacific/Apia" , 0x04BAF9 }, + { "Pacific/Auckland" , 0x04BC9C }, + { "Pacific/Bougainville" , 0x04C0D3 }, + { "Pacific/Chatham" , 0x04C1B4 }, + { "Pacific/Chuuk" , 0x04C4F7 }, + { "Pacific/Easter" , 0x04C5D5 }, + { "Pacific/Efate" , 0x04CA3C }, + { "Pacific/Enderbury" , 0x04CB9E }, + { "Pacific/Fakaofo" , 0x04CC56 }, + { "Pacific/Fiji" , 0x04CCFB }, + { "Pacific/Funafuti" , 0x04CEB3 }, + { "Pacific/Galapagos" , 0x04CF45 }, + { "Pacific/Gambier" , 0x04D011 }, + { "Pacific/Guadalcanal" , 0x04D0B0 }, + { "Pacific/Guam" , 0x04D142 }, + { "Pacific/Honolulu" , 0x04D2AC }, + { "Pacific/Johnston" , 0x04D39B }, + { "Pacific/Kanton" , 0x04D484 }, + { "Pacific/Kiritimati" , 0x04D54B }, + { "Pacific/Kosrae" , 0x04D611 }, + { "Pacific/Kwajalein" , 0x04D715 }, + { "Pacific/Majuro" , 0x04D805 }, + { "Pacific/Marquesas" , 0x04D908 }, + { "Pacific/Midway" , 0x04D9B0 }, + { "Pacific/Nauru" , 0x04DA5C }, + { "Pacific/Niue" , 0x04DB1F }, + { "Pacific/Norfolk" , 0x04DBC5 }, + { "Pacific/Noumea" , 0x04DCC8 }, + { "Pacific/Pago_Pago" , 0x04DD9A }, + { "Pacific/Palau" , 0x04DE38 }, + { "Pacific/Pitcairn" , 0x04DED8 }, + { "Pacific/Pohnpei" , 0x04DF7D }, + { "Pacific/Ponape" , 0x04E06D }, + { "Pacific/Port_Moresby" , 0x04E14F }, + { "Pacific/Rarotonga" , 0x04E212 }, + { "Pacific/Saipan" , 0x04E3B4 }, + { "Pacific/Samoa" , 0x04E51E }, + { "Pacific/Tahiti" , 0x04E5BC }, + { "Pacific/Tarawa" , 0x04E65C }, + { "Pacific/Tongatapu" , 0x04E6FD }, + { "Pacific/Truk" , 0x04E7F6 }, + { "Pacific/Wake" , 0x04E8C5 }, + { "Pacific/Wallis" , 0x04E962 }, + { "Pacific/Yap" , 0x04E9F4 }, + { "Poland" , 0x04EAC3 }, + { "Portugal" , 0x04EE6A }, + { "PRC" , 0x04F424 }, + { "PST8PDT" , 0x04F5B9 }, + { "ROC" , 0x04F97C }, + { "ROK" , 0x04FB87 }, + { "Singapore" , 0x04FD32 }, + { "Turkey" , 0x04FE3E }, + { "UCT" , 0x0502FA }, + { "Universal" , 0x050375 }, + { "US/Alaska" , 0x0503F0 }, + { "US/Aleutian" , 0x0507CD }, + { "US/Arizona" , 0x050BA2 }, + { "US/Central" , 0x050C9E }, + { "US/East-Indiana" , 0x051384 }, + { "US/Eastern" , 0x0515A3 }, + { "US/Hawaii" , 0x051C7F }, + { "US/Indiana-Starke" , 0x051D68 }, + { "US/Michigan" , 0x05216C }, + { "US/Mountain" , 0x0524FB }, + { "US/Pacific" , 0x052919 }, + { "US/Samoa" , 0x052E33 }, + { "UTC" , 0x052ED1 }, + { "W-SU" , 0x052F4C }, + { "WET" , 0x0532E4 }, + { "Zulu" , 0x0534DE }, }; -const unsigned char timelib_timezone_db_data_builtin[341290] = { +const unsigned char timelib_timezone_db_data_builtin[341337] = { /* Africa/Abidjan */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -7531,9 +7531,9 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x14, 0xFF, -0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, -0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, -0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, +0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, +0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, +0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, @@ -7596,7 +7596,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, -0x03, 0x05, 0x06, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, +0x03, 0x05, 0x06, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, @@ -8018,9 +8018,9 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0xFF, -0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, -0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, -0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, +0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, +0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, +0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, @@ -8086,8 +8086,8 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, -0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x00, 0xFF, -0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, +0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x00, 0xFF, +0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x0A, 0x3C, 0x2D, 0x30, 0x34, 0x3E, 0x34, 0x3C, 0x2D, 0x30, 0x33, 0x3E, 0x2C, 0x4D, 0x39, @@ -10702,7 +10702,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x59, 0xCF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0xFA, 0xA6, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x38, 0x9C, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE5, 0xEB, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xAC, 0xFE, 0x00, 0xFF, @@ -10761,21 +10761,21 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x5A, 0xB5, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, -0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7B, 0x1D, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x20, 0x50, -0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, -0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, -0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x0A, -0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, -0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x35, 0x2F, 0x31, 0x0A, 0x00, 0xB9, -0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, -0x74, 0x72, 0x69, 0x70, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x20, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, +0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, +0x20, 0x00, 0x11, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, +0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, +0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x37, 0x32, 0x2C, 0x4D, 0x31, 0x30, +0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x32, 0x35, 0x0A, 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, +0x00, 0x00, 0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, /* Asia/Harbin */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -10811,7 +10811,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0xBD, 0x4A, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x59, 0xCF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0xFA, 0xA6, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x38, 0x9C, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE5, 0xEB, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xAC, 0xFE, 0x00, 0xFF, @@ -10871,21 +10871,21 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x5A, 0xB5, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, -0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7B, 0x1D, 0x60, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, +0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, -0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, -0x20, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, -0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x11, 0x4C, 0x4D, 0x54, 0x00, -0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, -0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, -0x2E, 0x34, 0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x35, 0x2F, 0x31, 0x0A, -0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, 0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, 0x74, -0x20, 0x42, 0x61, 0x6E, 0x6B, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x00, 0x20, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x2A, +0x30, 0x01, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x09, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x0D, 0x00, +0x00, 0x1C, 0x20, 0x00, 0x11, 0x4C, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, +0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, +0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x37, 0x32, 0x2C, 0x4D, +0x31, 0x30, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x32, 0x35, 0x0A, 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, +0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, 0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, /* Asia/Ho_Chi_Minh */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x56, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -15680,9 +15680,9 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0xFF, -0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, -0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, -0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, +0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, +0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, +0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, @@ -15748,8 +15748,8 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, -0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x00, 0xFF, -0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, +0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0x05, 0x03, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x00, 0xFF, +0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, 0x0A, 0x3C, 0x2D, 0x30, 0x34, 0x3E, 0x34, 0x3C, 0x2D, 0x30, 0x33, 0x3E, 0x2C, 0x4D, 0x39, @@ -17987,7 +17987,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC7, 0x64, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA7, 0x64, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA, 0xCD, 0x2E, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, @@ -18002,23 +18002,23 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x20, 0xE0, 0x00, -0x00, 0x00, 0x00, 0x28, 0xE5, 0x17, 0x80, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, -0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x01, -0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, -0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, -0x07, 0x02, 0x07, 0x02, 0x07, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, -0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, -0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x1D, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, -0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, -0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, -0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, -0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD6, 0x48, 0xC5, 0x01, 0x41, 0x39, 0x12, 0x00, 0x00, 0x00, -0x14, 0x55, 0x6B, 0x72, 0x61, 0x69, 0x6E, 0x65, 0x20, 0x28, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x61, -0x72, 0x65, 0x61, 0x73, 0x29, +0x00, 0x00, 0x00, 0x28, 0xE5, 0x17, 0x80, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, +0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, +0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x01, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, +0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, +0x03, 0x06, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x00, 0x00, +0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, +0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, +0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x4C, 0x4D, +0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, +0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, +0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, +0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD6, +0x48, 0xC5, 0x01, 0x41, 0x39, 0x12, 0x00, 0x00, 0x00, 0x14, 0x55, 0x6B, 0x72, 0x61, 0x69, 0x6E, +0x65, 0x20, 0x28, 0x6D, 0x6F, 0x73, 0x74, 0x20, 0x61, 0x72, 0x65, 0x61, 0x73, 0x29, /* Europe/Kirov */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -19279,9 +19279,9 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x2E, 0xF0, 0x00, -0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2D, 0xC2, 0xC6, 0xD0, 0x00, +0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0xC2, 0xC6, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x85, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0x84, 0x50, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x67, 0x40, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xA0, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, @@ -19617,7 +19617,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1E, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0x6A, 0xEE, 0xB0, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x09, 0x71, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x92, 0x34, 0x10, 0xFF, @@ -19632,21 +19632,22 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x2E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x42, 0xA0, 0x00, -0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, -0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, -0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, -0x04, 0x01, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x00, 0x00, 0x14, 0xE8, -0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, -0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, -0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, -0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, -0x45, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, -0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, -0x34, 0x0A, 0x00, 0xD3, 0x83, 0x22, 0x01, 0x34, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x0E, 0x54, 0x72, -0x61, 0x6E, 0x73, 0x63, 0x61, 0x72, 0x70, 0x61, 0x74, 0x68, 0x69, 0x61, +0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, +0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, +0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x01, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, +0x05, 0x06, 0x05, 0x06, 0x05, 0x00, 0x00, 0x14, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, +0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, +0x30, 0x00, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x4C, +0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, +0x4D, 0x53, 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, +0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, +0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD3, 0x83, 0x22, 0x01, +0x34, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x0E, 0x54, 0x72, 0x61, 0x6E, 0x73, 0x63, 0x61, 0x72, 0x70, +0x61, 0x74, 0x68, 0x69, 0x61, /* Europe/Vaduz */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x4C, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -19984,7 +19985,7 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC3, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA3, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA, 0xAA, 0xE7, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, @@ -20000,23 +20001,24 @@ const unsigned char timelib_timezone_db_data_builtin[341290] = { 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x27, 0x70, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x28, 0xE4, 0xED, 0x50, 0x00, -0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, -0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, -0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x01, 0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, -0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, -0x03, 0x06, 0x03, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x00, 0x00, -0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x20, 0xD0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, -0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x1C, 0x20, -0x01, 0x16, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1B, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x4C, 0x4D, -0x54, 0x00, 0x2B, 0x30, 0x32, 0x32, 0x30, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, -0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, -0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, -0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, -0x00, 0xD2, 0x51, 0x25, 0x01, 0x48, 0x51, 0x7A, 0x00, 0x00, 0x00, 0x1B, 0x5A, 0x61, 0x70, 0x6F, -0x72, 0x6F, 0x7A, 0x68, 0x79, 0x65, 0x20, 0x61, 0x6E, 0x64, 0x20, 0x65, 0x61, 0x73, 0x74, 0x20, -0x4C, 0x75, 0x67, 0x61, 0x6E, 0x73, 0x6B, +0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, +0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x01, +0x02, 0x03, 0x05, 0x04, 0x05, 0x04, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, +0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x06, 0x03, 0x07, 0x02, 0x07, 0x02, 0x07, +0x02, 0x07, 0x02, 0x07, 0x02, 0x07, 0x02, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x20, +0xD0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, +0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x38, 0x40, 0x01, +0x1B, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x4C, 0x4D, 0x54, 0x00, 0x2B, 0x30, 0x32, 0x32, 0x30, +0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, +0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, +0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, +0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD2, 0x51, 0x25, 0x01, 0x48, 0x51, +0x7A, 0x00, 0x00, 0x00, 0x1B, 0x5A, 0x61, 0x70, 0x6F, 0x72, 0x6F, 0x7A, 0x68, 0x79, 0x65, 0x20, +0x61, 0x6E, 0x64, 0x20, 0x65, 0x61, 0x73, 0x74, 0x20, 0x4C, 0x75, 0x67, 0x61, 0x6E, 0x73, 0x6B, + /* Europe/Zurich */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -23690,340 +23692,340 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[595] = { { "Asia/Dushanbe" , 0x0476ED }, { "Asia/Famagusta" , 0x047948 }, { "Asia/Gaza" , 0x04814F }, - { "Asia/Harbin" , 0x048ADA }, - { "Asia/Hebron" , 0x048D17 }, - { "Asia/Ho_Chi_Minh" , 0x0496BD }, - { "Asia/Hong_Kong" , 0x049828 }, - { "Asia/Hovd" , 0x049CE7 }, - { "Asia/Irkutsk" , 0x04A099 }, - { "Asia/Istanbul" , 0x04A59A }, - { "Asia/Jakarta" , 0x04AD41 }, - { "Asia/Jayapura" , 0x04AEBD }, - { "Asia/Jerusalem" , 0x04AFDC }, - { "Asia/Kabul" , 0x04B93C }, - { "Asia/Kamchatka" , 0x04BA18 }, - { "Asia/Karachi" , 0x04BEC4 }, - { "Asia/Kashgar" , 0x04C04B }, - { "Asia/Kathmandu" , 0x04C0FC }, - { "Asia/Katmandu" , 0x04C1DC }, - { "Asia/Khandyga" , 0x04C2BC }, - { "Asia/Kolkata" , 0x04C7DD }, - { "Asia/Krasnoyarsk" , 0x04C906 }, - { "Asia/Kuala_Lumpur" , 0x04CDE2 }, - { "Asia/Kuching" , 0x04CF81 }, - { "Asia/Kuwait" , 0x04D17E }, - { "Asia/Macao" , 0x04D22F }, - { "Asia/Macau" , 0x04D706 }, - { "Asia/Magadan" , 0x04DBDD }, - { "Asia/Makassar" , 0x04E0BF }, - { "Asia/Manila" , 0x04E212 }, - { "Asia/Muscat" , 0x04E366 }, - { "Asia/Nicosia" , 0x04E417 }, - { "Asia/Novokuznetsk" , 0x04EC08 }, - { "Asia/Novosibirsk" , 0x04F0B2 }, - { "Asia/Omsk" , 0x04F597 }, - { "Asia/Oral" , 0x04FA67 }, - { "Asia/Phnom_Penh" , 0x04FE6F }, - { "Asia/Pontianak" , 0x04FF42 }, - { "Asia/Pyongyang" , 0x0500C5 }, - { "Asia/Qatar" , 0x0501BE }, - { "Asia/Qostanay" , 0x050291 }, - { "Asia/Qyzylorda" , 0x0506AA }, - { "Asia/Rangoon" , 0x050AD4 }, - { "Asia/Riyadh" , 0x050BEC }, - { "Asia/Saigon" , 0x050C9D }, - { "Asia/Sakhalin" , 0x050E08 }, - { "Asia/Samarkand" , 0x0512DE }, - { "Asia/Seoul" , 0x05153C }, - { "Asia/Shanghai" , 0x0517B1 }, - { "Asia/Singapore" , 0x0519FA }, - { "Asia/Srednekolymsk" , 0x051B85 }, - { "Asia/Taipei" , 0x05206B }, - { "Asia/Tashkent" , 0x052370 }, - { "Asia/Tbilisi" , 0x0525DC }, - { "Asia/Tehran" , 0x0529F3 }, - { "Asia/Tel_Aviv" , 0x053415 }, - { "Asia/Thimbu" , 0x053D75 }, - { "Asia/Thimphu" , 0x053E4C }, - { "Asia/Tokyo" , 0x053F23 }, - { "Asia/Tomsk" , 0x054064 }, - { "Asia/Ujung_Pandang" , 0x054543 }, - { "Asia/Ulaanbaatar" , 0x05464D }, - { "Asia/Ulan_Bator" , 0x0549E9 }, - { "Asia/Urumqi" , 0x054D70 }, - { "Asia/Ust-Nera" , 0x054E2E }, - { "Asia/Vientiane" , 0x055332 }, - { "Asia/Vladivostok" , 0x055405 }, - { "Asia/Yakutsk" , 0x0558DC }, - { "Asia/Yangon" , 0x055DB2 }, - { "Asia/Yekaterinburg" , 0x055ECA }, - { "Asia/Yerevan" , 0x0563BF }, - { "Atlantic/Azores" , 0x05684A }, - { "Atlantic/Bermuda" , 0x057614 }, - { "Atlantic/Canary" , 0x057F7C }, - { "Atlantic/Cape_Verde" , 0x0586FF }, - { "Atlantic/Faeroe" , 0x058819 }, - { "Atlantic/Faroe" , 0x058F3C }, - { "Atlantic/Jan_Mayen" , 0x05965F }, - { "Atlantic/Madeira" , 0x059F1F }, - { "Atlantic/Reykjavik" , 0x05ACE9 }, - { "Atlantic/South_Georgia" , 0x05B17F }, - { "Atlantic/St_Helena" , 0x05B22F }, - { "Atlantic/Stanley" , 0x05B2CF }, - { "Australia/ACT" , 0x05B799 }, - { "Australia/Adelaide" , 0x05C033 }, - { "Australia/Brisbane" , 0x05C8EE }, - { "Australia/Broken_Hill" , 0x05CAB4 }, - { "Australia/Canberra" , 0x05D391 }, - { "Australia/Currie" , 0x05DC2B }, - { "Australia/Darwin" , 0x05E56D }, - { "Australia/Eucla" , 0x05E6D0 }, - { "Australia/Hobart" , 0x05E8CB }, - { "Australia/LHI" , 0x05F215 }, - { "Australia/Lindeman" , 0x05F965 }, - { "Australia/Lord_Howe" , 0x05FB6B }, - { "Australia/Melbourne" , 0x0602CB }, - { "Australia/North" , 0x060B6D }, - { "Australia/NSW" , 0x060CBE }, - { "Australia/Perth" , 0x061558 }, - { "Australia/Queensland" , 0x061740 }, - { "Australia/South" , 0x0618EF }, - { "Australia/Sydney" , 0x06219B }, - { "Australia/Tasmania" , 0x062A51 }, - { "Australia/Victoria" , 0x063393 }, - { "Australia/West" , 0x063C2D }, - { "Australia/Yancowinna" , 0x063DF7 }, - { "Brazil/Acre" , 0x0646B8 }, - { "Brazil/DeNoronha" , 0x064938 }, - { "Brazil/East" , 0x064C10 }, - { "Brazil/West" , 0x0651C0 }, - { "Canada/Atlantic" , 0x065428 }, - { "Canada/Central" , 0x066194 }, - { "Canada/Eastern" , 0x066CD4 }, - { "Canada/Mountain" , 0x067A86 }, - { "Canada/Newfoundland" , 0x0683AE }, - { "Canada/Pacific" , 0x069201 }, - { "Canada/Saskatchewan" , 0x069D59 }, - { "Canada/Yukon" , 0x06A139 }, - { "CET" , 0x06A793 }, - { "Chile/Continental" , 0x06AFCD }, - { "Chile/EasterIsland" , 0x06B9BA }, - { "CST6CDT" , 0x06C27F }, - { "Cuba" , 0x06CB91 }, - { "EET" , 0x06D50D }, - { "Egypt" , 0x06DC8D }, - { "Eire" , 0x06E43C }, - { "EST" , 0x06F1EC }, - { "EST5EDT" , 0x06F26A }, - { "Etc/GMT" , 0x06FB7C }, - { "Etc/GMT+0" , 0x06FBFA }, - { "Etc/GMT+1" , 0x06FC78 }, - { "Etc/GMT+10" , 0x06FCF8 }, - { "Etc/GMT+11" , 0x06FD79 }, - { "Etc/GMT+12" , 0x06FDFA }, - { "Etc/GMT+2" , 0x06FE7B }, - { "Etc/GMT+3" , 0x06FEFB }, - { "Etc/GMT+4" , 0x06FF7B }, - { "Etc/GMT+5" , 0x06FFFB }, - { "Etc/GMT+6" , 0x07007B }, - { "Etc/GMT+7" , 0x0700FB }, - { "Etc/GMT+8" , 0x07017B }, - { "Etc/GMT+9" , 0x0701FB }, - { "Etc/GMT-0" , 0x07027B }, - { "Etc/GMT-1" , 0x0702F9 }, - { "Etc/GMT-10" , 0x07037A }, - { "Etc/GMT-11" , 0x0703FC }, - { "Etc/GMT-12" , 0x07047E }, - { "Etc/GMT-13" , 0x070500 }, - { "Etc/GMT-14" , 0x070582 }, - { "Etc/GMT-2" , 0x070604 }, - { "Etc/GMT-3" , 0x070685 }, - { "Etc/GMT-4" , 0x070706 }, - { "Etc/GMT-5" , 0x070787 }, - { "Etc/GMT-6" , 0x070808 }, - { "Etc/GMT-7" , 0x070889 }, - { "Etc/GMT-8" , 0x07090A }, - { "Etc/GMT-9" , 0x07098B }, - { "Etc/GMT0" , 0x070A0C }, - { "Etc/Greenwich" , 0x070A8A }, - { "Etc/UCT" , 0x070B08 }, - { "Etc/Universal" , 0x070B86 }, - { "Etc/UTC" , 0x070C04 }, - { "Etc/Zulu" , 0x070C82 }, - { "Europe/Amsterdam" , 0x070D00 }, - { "Europe/Andorra" , 0x07186A }, - { "Europe/Astrakhan" , 0x071F44 }, - { "Europe/Athens" , 0x0723EF }, - { "Europe/Belfast" , 0x072CD1 }, - { "Europe/Belgrade" , 0x073B1D }, - { "Europe/Berlin" , 0x0742A9 }, - { "Europe/Bratislava" , 0x074BC3 }, - { "Europe/Brussels" , 0x0754CC }, - { "Europe/Bucharest" , 0x07604D }, - { "Europe/Budapest" , 0x0768E1 }, - { "Europe/Busingen" , 0x07722D }, - { "Europe/Chisinau" , 0x0779B6 }, - { "Europe/Copenhagen" , 0x078318 }, - { "Europe/Dublin" , 0x078B7D }, - { "Europe/Gibraltar" , 0x07992D }, - { "Europe/Guernsey" , 0x07A525 }, - { "Europe/Helsinki" , 0x07B371 }, - { "Europe/Isle_of_Man" , 0x07BAE9 }, - { "Europe/Istanbul" , 0x07C935 }, - { "Europe/Jersey" , 0x07D0DC }, - { "Europe/Kaliningrad" , 0x07DF28 }, - { "Europe/Kiev" , 0x07E51D }, - { "Europe/Kirov" , 0x07ED65 }, - { "Europe/Lisbon" , 0x07F200 }, - { "Europe/Ljubljana" , 0x07FFC8 }, - { "Europe/London" , 0x080754 }, - { "Europe/Luxembourg" , 0x0815A0 }, - { "Europe/Madrid" , 0x08212E }, - { "Europe/Malta" , 0x082B80 }, - { "Europe/Mariehamn" , 0x0835C8 }, - { "Europe/Minsk" , 0x083D40 }, - { "Europe/Monaco" , 0x084275 }, - { "Europe/Moscow" , 0x084E01 }, - { "Europe/Nicosia" , 0x085420 }, - { "Europe/Oslo" , 0x085BFE }, - { "Europe/Paris" , 0x0864BE }, - { "Europe/Podgorica" , 0x08705C }, - { "Europe/Prague" , 0x0877E8 }, - { "Europe/Riga" , 0x0880F1 }, - { "Europe/Rome" , 0x088993 }, - { "Europe/Samara" , 0x0893F0 }, - { "Europe/San_Marino" , 0x0898D4 }, - { "Europe/Sarajevo" , 0x08A331 }, - { "Europe/Saratov" , 0x08AABD }, - { "Europe/Simferopol" , 0x08AF78 }, - { "Europe/Skopje" , 0x08B537 }, - { "Europe/Sofia" , 0x08BCC3 }, - { "Europe/Stockholm" , 0x08C4EC }, - { "Europe/Tallinn" , 0x08CC6D }, - { "Europe/Tirane" , 0x08D4DD }, - { "Europe/Tiraspol" , 0x08DD0D }, - { "Europe/Ulyanovsk" , 0x08E66F }, - { "Europe/Uzhgorod" , 0x08EB80 }, - { "Europe/Vaduz" , 0x08F39C }, - { "Europe/Vatican" , 0x08FB1D }, - { "Europe/Vienna" , 0x09057A }, - { "Europe/Vilnius" , 0x090E1E }, - { "Europe/Volgograd" , 0x09169C }, - { "Europe/Warsaw" , 0x091B47 }, - { "Europe/Zagreb" , 0x0925B1 }, - { "Europe/Zaporozhye" , 0x092D3D }, - { "Europe/Zurich" , 0x09359E }, - { "Factory" , 0x093D1F }, - { "GB" , 0x093D9F }, - { "GB-Eire" , 0x094BEB }, - { "GMT" , 0x095A37 }, - { "GMT+0" , 0x095AB5 }, - { "GMT-0" , 0x095B33 }, - { "GMT0" , 0x095BB1 }, - { "Greenwich" , 0x095C2F }, - { "Hongkong" , 0x095CAD }, - { "HST" , 0x09616C }, - { "Iceland" , 0x0961EB }, - { "Indian/Antananarivo" , 0x096681 }, - { "Indian/Chagos" , 0x096796 }, - { "Indian/Christmas" , 0x096869 }, - { "Indian/Cocos" , 0x09691A }, - { "Indian/Comoro" , 0x0969D4 }, - { "Indian/Kerguelen" , 0x096AE9 }, - { "Indian/Mahe" , 0x096B9A }, - { "Indian/Maldives" , 0x096C4B }, - { "Indian/Mauritius" , 0x096D1E }, - { "Indian/Mayotte" , 0x096E1B }, - { "Indian/Reunion" , 0x096F30 }, - { "Iran" , 0x096FE1 }, - { "Israel" , 0x097A03 }, - { "Jamaica" , 0x098363 }, - { "Japan" , 0x098551 }, - { "Kwajalein" , 0x098692 }, - { "Libya" , 0x0987DA }, - { "MET" , 0x098A57 }, - { "Mexico/BajaNorte" , 0x099291 }, - { "Mexico/BajaSur" , 0x099BC3 }, - { "Mexico/General" , 0x09A1C5 }, - { "MST" , 0x09A801 }, - { "MST7MDT" , 0x09A87F }, - { "Navajo" , 0x09B191 }, - { "NZ" , 0x09BB29 }, - { "NZ-CHAT" , 0x09C4BA }, - { "Pacific/Apia" , 0x09CCDA }, - { "Pacific/Auckland" , 0x09CF4A }, - { "Pacific/Bougainville" , 0x09D8F3 }, - { "Pacific/Chatham" , 0x09DA17 }, - { "Pacific/Chuuk" , 0x09E246 }, - { "Pacific/Easter" , 0x09E36E }, - { "Pacific/Efate" , 0x09EC40 }, - { "Pacific/Enderbury" , 0x09EE66 }, - { "Pacific/Fakaofo" , 0x09EF5C }, - { "Pacific/Fiji" , 0x09F030 }, - { "Pacific/Funafuti" , 0x09F455 }, - { "Pacific/Galapagos" , 0x09F507 }, - { "Pacific/Gambier" , 0x09F612 }, - { "Pacific/Guadalcanal" , 0x09F6D1 }, - { "Pacific/Guam" , 0x09F783 }, - { "Pacific/Honolulu" , 0x09F97D }, - { "Pacific/Johnston" , 0x09FAD8 }, - { "Pacific/Kanton" , 0x09FC2D }, - { "Pacific/Kiritimati" , 0x09FD32 }, - { "Pacific/Kosrae" , 0x09FE38 }, - { "Pacific/Kwajalein" , 0x09FFA9 }, - { "Pacific/Majuro" , 0x0A00FA }, - { "Pacific/Marquesas" , 0x0A0259 }, - { "Pacific/Midway" , 0x0A0323 }, - { "Pacific/Nauru" , 0x0A03EC }, - { "Pacific/Niue" , 0x0A04F4 }, - { "Pacific/Norfolk" , 0x0A05CB }, - { "Pacific/Noumea" , 0x0A0947 }, - { "Pacific/Pago_Pago" , 0x0A0A83 }, - { "Pacific/Palau" , 0x0A0B3E }, - { "Pacific/Pitcairn" , 0x0A0BFE }, - { "Pacific/Pohnpei" , 0x0A0CD4 }, - { "Pacific/Ponape" , 0x0A0E1D }, - { "Pacific/Port_Moresby" , 0x0A0F58 }, - { "Pacific/Rarotonga" , 0x0A103B }, - { "Pacific/Saipan" , 0x0A12A2 }, - { "Pacific/Samoa" , 0x0A149C }, - { "Pacific/Tahiti" , 0x0A1557 }, - { "Pacific/Tarawa" , 0x0A1617 }, - { "Pacific/Tongatapu" , 0x0A16D8 }, - { "Pacific/Truk" , 0x0A1858 }, - { "Pacific/Wake" , 0x0A1971 }, - { "Pacific/Wallis" , 0x0A1A2E }, - { "Pacific/Yap" , 0x0A1AE0 }, - { "Poland" , 0x0A1BF9 }, - { "Portugal" , 0x0A2663 }, - { "PRC" , 0x0A3418 }, - { "PST8PDT" , 0x0A3655 }, - { "ROC" , 0x0A3F67 }, - { "ROK" , 0x0A426C }, - { "Singapore" , 0x0A44E1 }, - { "Turkey" , 0x0A466C }, - { "UCT" , 0x0A4E13 }, - { "Universal" , 0x0A4E91 }, - { "US/Alaska" , 0x0A4F0F }, - { "US/Aleutian" , 0x0A585E }, - { "US/Arizona" , 0x0A619E }, - { "US/Central" , 0x0A62F2 }, - { "US/East-Indiana" , 0x0A70F6 }, - { "US/Eastern" , 0x0A7784 }, - { "US/Hawaii" , 0x0A8560 }, - { "US/Indiana-Starke" , 0x0A86B5 }, - { "US/Michigan" , 0x0A903D }, - { "US/Mountain" , 0x0A98FF }, - { "US/Pacific" , 0x0AA297 }, - { "US/Samoa" , 0x0AADB7 }, - { "UTC" , 0x0AAE72 }, - { "W-SU" , 0x0AAEF0 }, - { "WET" , 0x0AB4FB }, - { "Zulu" , 0x0ABC78 }, + { "Asia/Harbin" , 0x048ADB }, + { "Asia/Hebron" , 0x048D18 }, + { "Asia/Ho_Chi_Minh" , 0x0496BF }, + { "Asia/Hong_Kong" , 0x04982A }, + { "Asia/Hovd" , 0x049CE9 }, + { "Asia/Irkutsk" , 0x04A09B }, + { "Asia/Istanbul" , 0x04A59C }, + { "Asia/Jakarta" , 0x04AD43 }, + { "Asia/Jayapura" , 0x04AEBF }, + { "Asia/Jerusalem" , 0x04AFDE }, + { "Asia/Kabul" , 0x04B93E }, + { "Asia/Kamchatka" , 0x04BA1A }, + { "Asia/Karachi" , 0x04BEC6 }, + { "Asia/Kashgar" , 0x04C04D }, + { "Asia/Kathmandu" , 0x04C0FE }, + { "Asia/Katmandu" , 0x04C1DE }, + { "Asia/Khandyga" , 0x04C2BE }, + { "Asia/Kolkata" , 0x04C7DF }, + { "Asia/Krasnoyarsk" , 0x04C908 }, + { "Asia/Kuala_Lumpur" , 0x04CDE4 }, + { "Asia/Kuching" , 0x04CF83 }, + { "Asia/Kuwait" , 0x04D180 }, + { "Asia/Macao" , 0x04D231 }, + { "Asia/Macau" , 0x04D708 }, + { "Asia/Magadan" , 0x04DBDF }, + { "Asia/Makassar" , 0x04E0C1 }, + { "Asia/Manila" , 0x04E214 }, + { "Asia/Muscat" , 0x04E368 }, + { "Asia/Nicosia" , 0x04E419 }, + { "Asia/Novokuznetsk" , 0x04EC0A }, + { "Asia/Novosibirsk" , 0x04F0B4 }, + { "Asia/Omsk" , 0x04F599 }, + { "Asia/Oral" , 0x04FA69 }, + { "Asia/Phnom_Penh" , 0x04FE71 }, + { "Asia/Pontianak" , 0x04FF44 }, + { "Asia/Pyongyang" , 0x0500C7 }, + { "Asia/Qatar" , 0x0501C0 }, + { "Asia/Qostanay" , 0x050293 }, + { "Asia/Qyzylorda" , 0x0506AC }, + { "Asia/Rangoon" , 0x050AD6 }, + { "Asia/Riyadh" , 0x050BEE }, + { "Asia/Saigon" , 0x050C9F }, + { "Asia/Sakhalin" , 0x050E0A }, + { "Asia/Samarkand" , 0x0512E0 }, + { "Asia/Seoul" , 0x05153E }, + { "Asia/Shanghai" , 0x0517B3 }, + { "Asia/Singapore" , 0x0519FC }, + { "Asia/Srednekolymsk" , 0x051B87 }, + { "Asia/Taipei" , 0x05206D }, + { "Asia/Tashkent" , 0x052372 }, + { "Asia/Tbilisi" , 0x0525DE }, + { "Asia/Tehran" , 0x0529F5 }, + { "Asia/Tel_Aviv" , 0x053417 }, + { "Asia/Thimbu" , 0x053D77 }, + { "Asia/Thimphu" , 0x053E4E }, + { "Asia/Tokyo" , 0x053F25 }, + { "Asia/Tomsk" , 0x054066 }, + { "Asia/Ujung_Pandang" , 0x054545 }, + { "Asia/Ulaanbaatar" , 0x05464F }, + { "Asia/Ulan_Bator" , 0x0549EB }, + { "Asia/Urumqi" , 0x054D72 }, + { "Asia/Ust-Nera" , 0x054E30 }, + { "Asia/Vientiane" , 0x055334 }, + { "Asia/Vladivostok" , 0x055407 }, + { "Asia/Yakutsk" , 0x0558DE }, + { "Asia/Yangon" , 0x055DB4 }, + { "Asia/Yekaterinburg" , 0x055ECC }, + { "Asia/Yerevan" , 0x0563C1 }, + { "Atlantic/Azores" , 0x05684C }, + { "Atlantic/Bermuda" , 0x057616 }, + { "Atlantic/Canary" , 0x057F7E }, + { "Atlantic/Cape_Verde" , 0x058701 }, + { "Atlantic/Faeroe" , 0x05881B }, + { "Atlantic/Faroe" , 0x058F3E }, + { "Atlantic/Jan_Mayen" , 0x059661 }, + { "Atlantic/Madeira" , 0x059F21 }, + { "Atlantic/Reykjavik" , 0x05ACEB }, + { "Atlantic/South_Georgia" , 0x05B181 }, + { "Atlantic/St_Helena" , 0x05B231 }, + { "Atlantic/Stanley" , 0x05B2D1 }, + { "Australia/ACT" , 0x05B79B }, + { "Australia/Adelaide" , 0x05C035 }, + { "Australia/Brisbane" , 0x05C8F0 }, + { "Australia/Broken_Hill" , 0x05CAB6 }, + { "Australia/Canberra" , 0x05D393 }, + { "Australia/Currie" , 0x05DC2D }, + { "Australia/Darwin" , 0x05E56F }, + { "Australia/Eucla" , 0x05E6D2 }, + { "Australia/Hobart" , 0x05E8CD }, + { "Australia/LHI" , 0x05F217 }, + { "Australia/Lindeman" , 0x05F967 }, + { "Australia/Lord_Howe" , 0x05FB6D }, + { "Australia/Melbourne" , 0x0602CD }, + { "Australia/North" , 0x060B6F }, + { "Australia/NSW" , 0x060CC0 }, + { "Australia/Perth" , 0x06155A }, + { "Australia/Queensland" , 0x061742 }, + { "Australia/South" , 0x0618F1 }, + { "Australia/Sydney" , 0x06219D }, + { "Australia/Tasmania" , 0x062A53 }, + { "Australia/Victoria" , 0x063395 }, + { "Australia/West" , 0x063C2F }, + { "Australia/Yancowinna" , 0x063DF9 }, + { "Brazil/Acre" , 0x0646BA }, + { "Brazil/DeNoronha" , 0x06493A }, + { "Brazil/East" , 0x064C12 }, + { "Brazil/West" , 0x0651C2 }, + { "Canada/Atlantic" , 0x06542A }, + { "Canada/Central" , 0x066196 }, + { "Canada/Eastern" , 0x066CD6 }, + { "Canada/Mountain" , 0x067A88 }, + { "Canada/Newfoundland" , 0x0683B0 }, + { "Canada/Pacific" , 0x069203 }, + { "Canada/Saskatchewan" , 0x069D5B }, + { "Canada/Yukon" , 0x06A13B }, + { "CET" , 0x06A795 }, + { "Chile/Continental" , 0x06AFCF }, + { "Chile/EasterIsland" , 0x06B9BC }, + { "CST6CDT" , 0x06C281 }, + { "Cuba" , 0x06CB93 }, + { "EET" , 0x06D50F }, + { "Egypt" , 0x06DC8F }, + { "Eire" , 0x06E43E }, + { "EST" , 0x06F1EE }, + { "EST5EDT" , 0x06F26C }, + { "Etc/GMT" , 0x06FB7E }, + { "Etc/GMT+0" , 0x06FBFC }, + { "Etc/GMT+1" , 0x06FC7A }, + { "Etc/GMT+10" , 0x06FCFA }, + { "Etc/GMT+11" , 0x06FD7B }, + { "Etc/GMT+12" , 0x06FDFC }, + { "Etc/GMT+2" , 0x06FE7D }, + { "Etc/GMT+3" , 0x06FEFD }, + { "Etc/GMT+4" , 0x06FF7D }, + { "Etc/GMT+5" , 0x06FFFD }, + { "Etc/GMT+6" , 0x07007D }, + { "Etc/GMT+7" , 0x0700FD }, + { "Etc/GMT+8" , 0x07017D }, + { "Etc/GMT+9" , 0x0701FD }, + { "Etc/GMT-0" , 0x07027D }, + { "Etc/GMT-1" , 0x0702FB }, + { "Etc/GMT-10" , 0x07037C }, + { "Etc/GMT-11" , 0x0703FE }, + { "Etc/GMT-12" , 0x070480 }, + { "Etc/GMT-13" , 0x070502 }, + { "Etc/GMT-14" , 0x070584 }, + { "Etc/GMT-2" , 0x070606 }, + { "Etc/GMT-3" , 0x070687 }, + { "Etc/GMT-4" , 0x070708 }, + { "Etc/GMT-5" , 0x070789 }, + { "Etc/GMT-6" , 0x07080A }, + { "Etc/GMT-7" , 0x07088B }, + { "Etc/GMT-8" , 0x07090C }, + { "Etc/GMT-9" , 0x07098D }, + { "Etc/GMT0" , 0x070A0E }, + { "Etc/Greenwich" , 0x070A8C }, + { "Etc/UCT" , 0x070B0A }, + { "Etc/Universal" , 0x070B88 }, + { "Etc/UTC" , 0x070C06 }, + { "Etc/Zulu" , 0x070C84 }, + { "Europe/Amsterdam" , 0x070D02 }, + { "Europe/Andorra" , 0x07186C }, + { "Europe/Astrakhan" , 0x071F46 }, + { "Europe/Athens" , 0x0723F1 }, + { "Europe/Belfast" , 0x072CD3 }, + { "Europe/Belgrade" , 0x073B1F }, + { "Europe/Berlin" , 0x0742AB }, + { "Europe/Bratislava" , 0x074BC5 }, + { "Europe/Brussels" , 0x0754CE }, + { "Europe/Bucharest" , 0x07604F }, + { "Europe/Budapest" , 0x0768E3 }, + { "Europe/Busingen" , 0x07722F }, + { "Europe/Chisinau" , 0x0779B8 }, + { "Europe/Copenhagen" , 0x07831A }, + { "Europe/Dublin" , 0x078B7F }, + { "Europe/Gibraltar" , 0x07992F }, + { "Europe/Guernsey" , 0x07A527 }, + { "Europe/Helsinki" , 0x07B373 }, + { "Europe/Isle_of_Man" , 0x07BAEB }, + { "Europe/Istanbul" , 0x07C937 }, + { "Europe/Jersey" , 0x07D0DE }, + { "Europe/Kaliningrad" , 0x07DF2A }, + { "Europe/Kiev" , 0x07E51F }, + { "Europe/Kirov" , 0x07ED87 }, + { "Europe/Lisbon" , 0x07F222 }, + { "Europe/Ljubljana" , 0x07FFEA }, + { "Europe/London" , 0x080776 }, + { "Europe/Luxembourg" , 0x0815C2 }, + { "Europe/Madrid" , 0x082150 }, + { "Europe/Malta" , 0x082BA2 }, + { "Europe/Mariehamn" , 0x0835EA }, + { "Europe/Minsk" , 0x083D62 }, + { "Europe/Monaco" , 0x084297 }, + { "Europe/Moscow" , 0x084E23 }, + { "Europe/Nicosia" , 0x085442 }, + { "Europe/Oslo" , 0x085C20 }, + { "Europe/Paris" , 0x0864E0 }, + { "Europe/Podgorica" , 0x08707E }, + { "Europe/Prague" , 0x08780A }, + { "Europe/Riga" , 0x088113 }, + { "Europe/Rome" , 0x0889B5 }, + { "Europe/Samara" , 0x089412 }, + { "Europe/San_Marino" , 0x0898F6 }, + { "Europe/Sarajevo" , 0x08A353 }, + { "Europe/Saratov" , 0x08AADF }, + { "Europe/Simferopol" , 0x08AF9A }, + { "Europe/Skopje" , 0x08B569 }, + { "Europe/Sofia" , 0x08BCF5 }, + { "Europe/Stockholm" , 0x08C51E }, + { "Europe/Tallinn" , 0x08CC9F }, + { "Europe/Tirane" , 0x08D50F }, + { "Europe/Tiraspol" , 0x08DD3F }, + { "Europe/Ulyanovsk" , 0x08E6A1 }, + { "Europe/Uzhgorod" , 0x08EBB2 }, + { "Europe/Vaduz" , 0x08F3DE }, + { "Europe/Vatican" , 0x08FB5F }, + { "Europe/Vienna" , 0x0905BC }, + { "Europe/Vilnius" , 0x090E60 }, + { "Europe/Volgograd" , 0x0916DE }, + { "Europe/Warsaw" , 0x091B89 }, + { "Europe/Zagreb" , 0x0925F3 }, + { "Europe/Zaporozhye" , 0x092D7F }, + { "Europe/Zurich" , 0x093600 }, + { "Factory" , 0x093D81 }, + { "GB" , 0x093E01 }, + { "GB-Eire" , 0x094C4D }, + { "GMT" , 0x095A99 }, + { "GMT+0" , 0x095B17 }, + { "GMT-0" , 0x095B95 }, + { "GMT0" , 0x095C13 }, + { "Greenwich" , 0x095C91 }, + { "Hongkong" , 0x095D0F }, + { "HST" , 0x0961CE }, + { "Iceland" , 0x09624D }, + { "Indian/Antananarivo" , 0x0966E3 }, + { "Indian/Chagos" , 0x0967F8 }, + { "Indian/Christmas" , 0x0968CB }, + { "Indian/Cocos" , 0x09697C }, + { "Indian/Comoro" , 0x096A36 }, + { "Indian/Kerguelen" , 0x096B4B }, + { "Indian/Mahe" , 0x096BFC }, + { "Indian/Maldives" , 0x096CAD }, + { "Indian/Mauritius" , 0x096D80 }, + { "Indian/Mayotte" , 0x096E7D }, + { "Indian/Reunion" , 0x096F92 }, + { "Iran" , 0x097043 }, + { "Israel" , 0x097A65 }, + { "Jamaica" , 0x0983C5 }, + { "Japan" , 0x0985B3 }, + { "Kwajalein" , 0x0986F4 }, + { "Libya" , 0x09883C }, + { "MET" , 0x098AB9 }, + { "Mexico/BajaNorte" , 0x0992F3 }, + { "Mexico/BajaSur" , 0x099C25 }, + { "Mexico/General" , 0x09A227 }, + { "MST" , 0x09A863 }, + { "MST7MDT" , 0x09A8E1 }, + { "Navajo" , 0x09B1F3 }, + { "NZ" , 0x09BB8B }, + { "NZ-CHAT" , 0x09C51C }, + { "Pacific/Apia" , 0x09CD3C }, + { "Pacific/Auckland" , 0x09CFAC }, + { "Pacific/Bougainville" , 0x09D955 }, + { "Pacific/Chatham" , 0x09DA79 }, + { "Pacific/Chuuk" , 0x09E2A8 }, + { "Pacific/Easter" , 0x09E3D0 }, + { "Pacific/Efate" , 0x09ECA2 }, + { "Pacific/Enderbury" , 0x09EEC8 }, + { "Pacific/Fakaofo" , 0x09EFBE }, + { "Pacific/Fiji" , 0x09F092 }, + { "Pacific/Funafuti" , 0x09F4B7 }, + { "Pacific/Galapagos" , 0x09F569 }, + { "Pacific/Gambier" , 0x09F674 }, + { "Pacific/Guadalcanal" , 0x09F733 }, + { "Pacific/Guam" , 0x09F7E5 }, + { "Pacific/Honolulu" , 0x09F9DF }, + { "Pacific/Johnston" , 0x09FB3A }, + { "Pacific/Kanton" , 0x09FC8F }, + { "Pacific/Kiritimati" , 0x09FD94 }, + { "Pacific/Kosrae" , 0x09FE9A }, + { "Pacific/Kwajalein" , 0x0A000B }, + { "Pacific/Majuro" , 0x0A015C }, + { "Pacific/Marquesas" , 0x0A02BB }, + { "Pacific/Midway" , 0x0A0385 }, + { "Pacific/Nauru" , 0x0A044E }, + { "Pacific/Niue" , 0x0A0556 }, + { "Pacific/Norfolk" , 0x0A062D }, + { "Pacific/Noumea" , 0x0A09A9 }, + { "Pacific/Pago_Pago" , 0x0A0AE5 }, + { "Pacific/Palau" , 0x0A0BA0 }, + { "Pacific/Pitcairn" , 0x0A0C60 }, + { "Pacific/Pohnpei" , 0x0A0D36 }, + { "Pacific/Ponape" , 0x0A0E7F }, + { "Pacific/Port_Moresby" , 0x0A0FBA }, + { "Pacific/Rarotonga" , 0x0A109D }, + { "Pacific/Saipan" , 0x0A1304 }, + { "Pacific/Samoa" , 0x0A14FE }, + { "Pacific/Tahiti" , 0x0A15B9 }, + { "Pacific/Tarawa" , 0x0A1679 }, + { "Pacific/Tongatapu" , 0x0A173A }, + { "Pacific/Truk" , 0x0A18BA }, + { "Pacific/Wake" , 0x0A19D3 }, + { "Pacific/Wallis" , 0x0A1A90 }, + { "Pacific/Yap" , 0x0A1B42 }, + { "Poland" , 0x0A1C5B }, + { "Portugal" , 0x0A26C5 }, + { "PRC" , 0x0A347A }, + { "PST8PDT" , 0x0A36B7 }, + { "ROC" , 0x0A3FC9 }, + { "ROK" , 0x0A42CE }, + { "Singapore" , 0x0A4543 }, + { "Turkey" , 0x0A46CE }, + { "UCT" , 0x0A4E75 }, + { "Universal" , 0x0A4EF3 }, + { "US/Alaska" , 0x0A4F71 }, + { "US/Aleutian" , 0x0A58C0 }, + { "US/Arizona" , 0x0A6200 }, + { "US/Central" , 0x0A6354 }, + { "US/East-Indiana" , 0x0A7158 }, + { "US/Eastern" , 0x0A77E6 }, + { "US/Hawaii" , 0x0A85C2 }, + { "US/Indiana-Starke" , 0x0A8717 }, + { "US/Michigan" , 0x0A909F }, + { "US/Mountain" , 0x0A9961 }, + { "US/Pacific" , 0x0AA2F9 }, + { "US/Samoa" , 0x0AAE19 }, + { "UTC" , 0x0AAED4 }, + { "W-SU" , 0x0AAF52 }, + { "WET" , 0x0AB55D }, + { "Zulu" , 0x0ABCDA }, }; -const unsigned char timelib_timezone_db_data_builtin[703734] = { +const unsigned char timelib_timezone_db_data_builtin[703832] = { /* Africa/Abidjan */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -37134,8 +37136,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x80, 0x00, 0x00, 0x00, -0x8F, 0x30, 0x47, 0x46, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC6, 0xA1, 0x00, 0x71, 0xC0, -0xB0, 0x5E, 0x77, 0xC6, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, +0x8F, 0x30, 0x47, 0x45, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC5, 0xA1, 0x00, 0x71, 0xC0, +0xB0, 0x5E, 0x77, 0xC5, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, 0xB4, 0x22, 0x34, 0x50, 0xB5, 0x39, 0xA4, 0x40, 0xB6, 0x03, 0x67, 0xD0, 0xB7, 0x1A, 0xD7, 0xC0, 0xB7, 0xE4, 0x9B, 0x50, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xC7, 0x20, 0x50, 0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, 0xD5, 0x33, 0x55, 0xC0, 0xD5, 0x76, 0x92, 0x40, 0xFD, 0xD1, 0x3C, 0x40, @@ -37170,7 +37172,7 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x07, 0x07, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, +0x05, 0x06, 0x05, 0x07, 0x07, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, @@ -37179,9 +37181,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, 0x69, 0x87, 0x1D, 0xFC, 0xFF, 0xFF, 0xFF, -0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, -0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, -0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, +0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, +0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, +0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB7, 0x1A, 0xD7, 0xC0, 0xFF, 0xFF, 0xFF, @@ -37244,7 +37246,7 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, -0x07, 0x07, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, +0x07, 0x07, 0xFF, 0xFF, 0xBD, 0x84, 0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x00, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, @@ -38062,8 +38064,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x80, 0x00, 0x00, 0x00, -0x8F, 0x30, 0x47, 0x46, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC6, 0xA1, 0x00, 0x71, 0xC0, -0xB0, 0x5E, 0x77, 0xC6, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, +0x8F, 0x30, 0x47, 0x45, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC5, 0xA1, 0x00, 0x71, 0xC0, +0xB0, 0x5E, 0x77, 0xC5, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, 0xB4, 0x22, 0x34, 0x50, 0xB5, 0x39, 0xA4, 0x40, 0xB6, 0x03, 0x67, 0xD0, 0xB7, 0x1A, 0xD7, 0xC0, 0xB7, 0xE4, 0x9B, 0x50, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xC7, 0x20, 0x50, 0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, 0xD3, 0xDC, 0x8F, 0xC0, 0xD4, 0x1B, 0xC9, 0xB0, 0xD5, 0x33, 0x55, 0xC0, @@ -38111,8 +38113,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBA, -0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBB, +0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, @@ -38120,9 +38122,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, -0x69, 0x87, 0x1D, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, -0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, -0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, +0x69, 0x87, 0x1D, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, +0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, +0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -38209,8 +38211,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBA, -0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBB, +0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, @@ -43205,15 +43207,15 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x56, 0x29, 0x5C, 0x60, 0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x13, 0xCA, 0x60, 0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF3, 0xAC, 0x60, 0x5A, 0xB5, 0x86, 0xF0, 0x5B, 0xD3, 0x8E, 0x60, 0x5C, 0x9D, 0x43, 0xE0, 0x5D, 0xB3, 0x62, 0x50, 0x5E, 0x7E, 0x77, 0x60, 0x5F, 0x93, 0x52, 0x60, 0x60, 0x5E, 0x59, 0x60, -0x61, 0x7B, 0x1D, 0x60, 0x62, 0x3E, 0x3B, 0x60, 0x63, 0x5A, 0xFF, 0x60, 0x64, 0x1E, 0x1D, 0x60, -0x65, 0x3A, 0xE1, 0x60, 0x66, 0x07, 0x39, 0xE0, 0x67, 0x1A, 0xC3, 0x60, 0x67, 0xE7, 0x1B, 0xE0, -0x69, 0x03, 0xDF, 0xE0, 0x69, 0xC6, 0xFD, 0xE0, 0x6A, 0xE3, 0xC1, 0xE0, 0x6B, 0xA6, 0xDF, 0xE0, -0x6C, 0xC3, 0xA3, 0xE0, 0x6D, 0x86, 0xC1, 0xE0, 0x6E, 0xA3, 0x85, 0xE0, 0x6F, 0x66, 0xA3, 0xE0, -0x70, 0x83, 0x67, 0xE0, 0x71, 0x4F, 0xC0, 0x60, 0x72, 0x63, 0x49, 0xE0, 0x73, 0x2F, 0xA2, 0x60, -0x74, 0x4C, 0x66, 0x60, 0x75, 0x0F, 0x84, 0x60, 0x76, 0x2C, 0x48, 0x60, 0x76, 0xEF, 0x66, 0x60, -0x78, 0x0C, 0x2A, 0x60, 0x78, 0xCF, 0x48, 0x60, 0x79, 0xEC, 0x0C, 0x60, 0x7A, 0xAF, 0x2A, 0x60, -0x7B, 0xCB, 0xEE, 0x60, 0x7C, 0x98, 0x46, 0xE0, 0x7D, 0xB5, 0x0A, 0xE0, 0x7E, 0x78, 0x28, 0xE0, -0x7F, 0x94, 0xEC, 0xE0, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x61, 0x7B, 0x1D, 0x60, 0x62, 0x3F, 0x8C, 0xE0, 0x63, 0x5A, 0xFF, 0x60, 0x64, 0x1F, 0x6E, 0xE0, +0x65, 0x3A, 0xE1, 0x60, 0x66, 0x08, 0x8B, 0x60, 0x67, 0x1A, 0xC3, 0x60, 0x67, 0xE8, 0x6D, 0x60, +0x68, 0xFA, 0xA5, 0x60, 0x69, 0xC8, 0x4F, 0x60, 0x6A, 0xDA, 0x87, 0x60, 0x6B, 0xA8, 0x31, 0x60, +0x6C, 0xC3, 0xA3, 0xE0, 0x6D, 0x88, 0x13, 0x60, 0x6E, 0xA3, 0x85, 0xE0, 0x6F, 0x67, 0xF5, 0x60, +0x70, 0x83, 0x67, 0xE0, 0x71, 0x51, 0x11, 0xE0, 0x72, 0x63, 0x49, 0xE0, 0x73, 0x30, 0xF3, 0xE0, +0x74, 0x43, 0x2B, 0xE0, 0x75, 0x10, 0xD5, 0xE0, 0x76, 0x2C, 0x48, 0x60, 0x76, 0xF0, 0xB7, 0xE0, +0x78, 0x0C, 0x2A, 0x60, 0x78, 0xD0, 0x99, 0xE0, 0x79, 0xEC, 0x0C, 0x60, 0x7A, 0xB0, 0x7B, 0xE0, +0x7B, 0xCB, 0xEE, 0x60, 0x7C, 0x99, 0x98, 0x60, 0x7D, 0xAB, 0xD0, 0x60, 0x7E, 0x79, 0x7A, 0x60, +0x7F, 0x8B, 0xB2, 0x60, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x06, 0x05, 0x06, 0x05, 0x06, 0x07, 0x08, 0x07, 0x08, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, @@ -43291,22 +43293,22 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7B, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x62, -0x3E, 0x3B, 0x60, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5A, 0xFF, 0x60, 0x00, 0x00, 0x00, 0x00, 0x64, -0x1E, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3A, 0xE1, 0x60, 0x00, 0x00, 0x00, 0x00, 0x66, -0x07, 0x39, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1A, 0xC3, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, -0xE7, 0x1B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x69, 0x03, 0xDF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x69, -0xC6, 0xFD, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xE3, 0xC1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6B, -0xA6, 0xDF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC3, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6D, -0x86, 0xC1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA3, 0x85, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6F, -0x66, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x70, 0x83, 0x67, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x71, -0x4F, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x72, 0x63, 0x49, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x73, -0x2F, 0xA2, 0x60, 0x00, 0x00, 0x00, 0x00, 0x74, 0x4C, 0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x75, -0x0F, 0x84, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2C, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, -0xEF, 0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, -0xCF, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEC, 0x0C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7A, -0xAF, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCB, 0xEE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7C, -0x98, 0x46, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xB5, 0x0A, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7E, -0x78, 0x28, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x94, 0xEC, 0xE0, 0x03, 0x01, 0x02, 0x01, 0x02, +0x3F, 0x8C, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5A, 0xFF, 0x60, 0x00, 0x00, 0x00, 0x00, 0x64, +0x1F, 0x6E, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3A, 0xE1, 0x60, 0x00, 0x00, 0x00, 0x00, 0x66, +0x08, 0x8B, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1A, 0xC3, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, +0xE8, 0x6D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFA, 0xA5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x69, +0xC8, 0x4F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDA, 0x87, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6B, +0xA8, 0x31, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC3, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6D, +0x88, 0x13, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA3, 0x85, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6F, +0x67, 0xF5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x70, 0x83, 0x67, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x71, +0x51, 0x11, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x72, 0x63, 0x49, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x73, +0x30, 0xF3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x74, 0x43, 0x2B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x75, +0x10, 0xD5, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2C, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, +0xF0, 0xB7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, +0xD0, 0x99, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEC, 0x0C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7A, +0xB0, 0x7B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCB, 0xEE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7C, +0x99, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAB, 0xD0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7E, +0x79, 0x7A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8B, 0xB2, 0x60, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x06, 0x05, 0x06, 0x05, 0x06, 0x07, 0x08, 0x07, 0x08, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, @@ -43323,9 +43325,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, -0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, -0x2E, 0x35, 0x2F, 0x31, 0x0A, 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, 0x00, -0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, +0x2C, 0x4D, 0x33, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x37, 0x32, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x34, +0x2E, 0x34, 0x2F, 0x32, 0x35, 0x0A, 0x00, 0xB9, 0x64, 0xF0, 0x01, 0x47, 0x40, 0x0A, 0x00, 0x00, +0x00, 0x0A, 0x47, 0x61, 0x7A, 0x61, 0x20, 0x53, 0x74, 0x72, 0x69, 0x70, /* Asia/Harbin */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -43398,15 +43400,15 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x54, 0x49, 0x6C, 0x50, 0x55, 0x15, 0xD2, 0xE0, 0x56, 0x29, 0x5C, 0x60, 0x56, 0xF5, 0xC2, 0xF0, 0x58, 0x13, 0xCA, 0x60, 0x58, 0xD5, 0xA4, 0xF0, 0x59, 0xF3, 0xAC, 0x60, 0x5A, 0xB5, 0x86, 0xF0, 0x5B, 0xD3, 0x8E, 0x60, 0x5C, 0x9D, 0x43, 0xE0, 0x5D, 0xB3, 0x62, 0x50, 0x5E, 0x7E, 0x77, 0x60, -0x5F, 0x93, 0x52, 0x60, 0x60, 0x5E, 0x59, 0x60, 0x61, 0x7B, 0x1D, 0x60, 0x62, 0x3E, 0x3B, 0x60, -0x63, 0x5A, 0xFF, 0x60, 0x64, 0x1E, 0x1D, 0x60, 0x65, 0x3A, 0xE1, 0x60, 0x66, 0x07, 0x39, 0xE0, -0x67, 0x1A, 0xC3, 0x60, 0x67, 0xE7, 0x1B, 0xE0, 0x69, 0x03, 0xDF, 0xE0, 0x69, 0xC6, 0xFD, 0xE0, -0x6A, 0xE3, 0xC1, 0xE0, 0x6B, 0xA6, 0xDF, 0xE0, 0x6C, 0xC3, 0xA3, 0xE0, 0x6D, 0x86, 0xC1, 0xE0, -0x6E, 0xA3, 0x85, 0xE0, 0x6F, 0x66, 0xA3, 0xE0, 0x70, 0x83, 0x67, 0xE0, 0x71, 0x4F, 0xC0, 0x60, -0x72, 0x63, 0x49, 0xE0, 0x73, 0x2F, 0xA2, 0x60, 0x74, 0x4C, 0x66, 0x60, 0x75, 0x0F, 0x84, 0x60, -0x76, 0x2C, 0x48, 0x60, 0x76, 0xEF, 0x66, 0x60, 0x78, 0x0C, 0x2A, 0x60, 0x78, 0xCF, 0x48, 0x60, -0x79, 0xEC, 0x0C, 0x60, 0x7A, 0xAF, 0x2A, 0x60, 0x7B, 0xCB, 0xEE, 0x60, 0x7C, 0x98, 0x46, 0xE0, -0x7D, 0xB5, 0x0A, 0xE0, 0x7E, 0x78, 0x28, 0xE0, 0x7F, 0x94, 0xEC, 0xE0, 0x03, 0x01, 0x02, 0x01, +0x5F, 0x93, 0x52, 0x60, 0x60, 0x5E, 0x59, 0x60, 0x61, 0x7B, 0x1D, 0x60, 0x62, 0x3F, 0x8C, 0xE0, +0x63, 0x5A, 0xFF, 0x60, 0x64, 0x1F, 0x6E, 0xE0, 0x65, 0x3A, 0xE1, 0x60, 0x66, 0x08, 0x8B, 0x60, +0x67, 0x1A, 0xC3, 0x60, 0x67, 0xE8, 0x6D, 0x60, 0x68, 0xFA, 0xA5, 0x60, 0x69, 0xC8, 0x4F, 0x60, +0x6A, 0xDA, 0x87, 0x60, 0x6B, 0xA8, 0x31, 0x60, 0x6C, 0xC3, 0xA3, 0xE0, 0x6D, 0x88, 0x13, 0x60, +0x6E, 0xA3, 0x85, 0xE0, 0x6F, 0x67, 0xF5, 0x60, 0x70, 0x83, 0x67, 0xE0, 0x71, 0x51, 0x11, 0xE0, +0x72, 0x63, 0x49, 0xE0, 0x73, 0x30, 0xF3, 0xE0, 0x74, 0x43, 0x2B, 0xE0, 0x75, 0x10, 0xD5, 0xE0, +0x76, 0x2C, 0x48, 0x60, 0x76, 0xF0, 0xB7, 0xE0, 0x78, 0x0C, 0x2A, 0x60, 0x78, 0xD0, 0x99, 0xE0, +0x79, 0xEC, 0x0C, 0x60, 0x7A, 0xB0, 0x7B, 0xE0, 0x7B, 0xCB, 0xEE, 0x60, 0x7C, 0x99, 0x98, 0x60, +0x7D, 0xAB, 0xD0, 0x60, 0x7E, 0x79, 0x7A, 0x60, 0x7F, 0x8B, 0xB2, 0x60, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x06, 0x05, 0x06, 0x05, 0x06, 0x07, 0x08, 0x07, 0x08, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, @@ -43485,23 +43487,23 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x5B, 0xD3, 0x8E, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x9D, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB3, 0x62, 0x50, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7E, 0x77, 0x60, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x93, 0x52, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5E, 0x59, 0x60, 0x00, 0x00, 0x00, -0x00, 0x61, 0x7B, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x62, 0x3E, 0x3B, 0x60, 0x00, 0x00, 0x00, -0x00, 0x63, 0x5A, 0xFF, 0x60, 0x00, 0x00, 0x00, 0x00, 0x64, 0x1E, 0x1D, 0x60, 0x00, 0x00, 0x00, -0x00, 0x65, 0x3A, 0xE1, 0x60, 0x00, 0x00, 0x00, 0x00, 0x66, 0x07, 0x39, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x67, 0x1A, 0xC3, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, 0xE7, 0x1B, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x69, 0x03, 0xDF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x69, 0xC6, 0xFD, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x6A, 0xE3, 0xC1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6B, 0xA6, 0xDF, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x6C, 0xC3, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x86, 0xC1, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x6E, 0xA3, 0x85, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x66, 0xA3, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x70, 0x83, 0x67, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x71, 0x4F, 0xC0, 0x60, 0x00, 0x00, 0x00, -0x00, 0x72, 0x63, 0x49, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x73, 0x2F, 0xA2, 0x60, 0x00, 0x00, 0x00, -0x00, 0x74, 0x4C, 0x66, 0x60, 0x00, 0x00, 0x00, 0x00, 0x75, 0x0F, 0x84, 0x60, 0x00, 0x00, 0x00, -0x00, 0x76, 0x2C, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, 0xEF, 0x66, 0x60, 0x00, 0x00, 0x00, -0x00, 0x78, 0x0C, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0xCF, 0x48, 0x60, 0x00, 0x00, 0x00, -0x00, 0x79, 0xEC, 0x0C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xAF, 0x2A, 0x60, 0x00, 0x00, 0x00, -0x00, 0x7B, 0xCB, 0xEE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x98, 0x46, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x7D, 0xB5, 0x0A, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x78, 0x28, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x7F, 0x94, 0xEC, 0xE0, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x00, 0x61, 0x7B, 0x1D, 0x60, 0x00, 0x00, 0x00, 0x00, 0x62, 0x3F, 0x8C, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x63, 0x5A, 0xFF, 0x60, 0x00, 0x00, 0x00, 0x00, 0x64, 0x1F, 0x6E, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x65, 0x3A, 0xE1, 0x60, 0x00, 0x00, 0x00, 0x00, 0x66, 0x08, 0x8B, 0x60, 0x00, 0x00, 0x00, +0x00, 0x67, 0x1A, 0xC3, 0x60, 0x00, 0x00, 0x00, 0x00, 0x67, 0xE8, 0x6D, 0x60, 0x00, 0x00, 0x00, +0x00, 0x68, 0xFA, 0xA5, 0x60, 0x00, 0x00, 0x00, 0x00, 0x69, 0xC8, 0x4F, 0x60, 0x00, 0x00, 0x00, +0x00, 0x6A, 0xDA, 0x87, 0x60, 0x00, 0x00, 0x00, 0x00, 0x6B, 0xA8, 0x31, 0x60, 0x00, 0x00, 0x00, +0x00, 0x6C, 0xC3, 0xA3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x88, 0x13, 0x60, 0x00, 0x00, 0x00, +0x00, 0x6E, 0xA3, 0x85, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x67, 0xF5, 0x60, 0x00, 0x00, 0x00, +0x00, 0x70, 0x83, 0x67, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x71, 0x51, 0x11, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x72, 0x63, 0x49, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x73, 0x30, 0xF3, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x74, 0x43, 0x2B, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x75, 0x10, 0xD5, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x76, 0x2C, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x76, 0xF0, 0xB7, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x78, 0x0C, 0x2A, 0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0xD0, 0x99, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x79, 0xEC, 0x0C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xB0, 0x7B, 0xE0, 0x00, 0x00, 0x00, +0x00, 0x7B, 0xCB, 0xEE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x99, 0x98, 0x60, 0x00, 0x00, 0x00, +0x00, 0x7D, 0xAB, 0xD0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0x7A, 0x60, 0x00, 0x00, 0x00, +0x00, 0x7F, 0x8B, 0xB2, 0x60, 0x03, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03, 0x04, 0x06, 0x05, 0x06, 0x05, 0x06, 0x07, 0x08, 0x07, 0x08, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, @@ -43518,9 +43520,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x49, 0x44, 0x54, 0x00, 0x49, 0x53, 0x54, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, -0x34, 0x2E, 0x34, 0x2F, 0x34, 0x38, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x35, 0x2F, 0x31, -0x0A, 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, 0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, 0x73, -0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, +0x34, 0x2E, 0x34, 0x2F, 0x37, 0x32, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x34, 0x2E, 0x34, 0x2F, 0x32, +0x35, 0x0A, 0x00, 0xB9, 0x71, 0xF5, 0x01, 0x48, 0x35, 0x7C, 0x00, 0x00, 0x00, 0x09, 0x57, 0x65, +0x73, 0x74, 0x20, 0x42, 0x61, 0x6E, 0x6B, /* Asia/Ho_Chi_Minh */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x56, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -52415,8 +52417,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x80, 0x00, 0x00, 0x00, -0x8F, 0x30, 0x47, 0x46, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC6, 0xA1, 0x00, 0x71, 0xC0, -0xB0, 0x5E, 0x77, 0xC6, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, +0x8F, 0x30, 0x47, 0x45, 0x9B, 0x5C, 0xE5, 0x50, 0x9F, 0x7C, 0xE2, 0xC5, 0xA1, 0x00, 0x71, 0xC0, +0xB0, 0x5E, 0x77, 0xC5, 0xB1, 0x77, 0x3D, 0x40, 0xB2, 0x41, 0x00, 0xD0, 0xB3, 0x58, 0x70, 0xC0, 0xB4, 0x22, 0x34, 0x50, 0xB5, 0x39, 0xA4, 0x40, 0xB6, 0x03, 0x67, 0xD0, 0xB7, 0x1A, 0xD7, 0xC0, 0xB7, 0xE4, 0x9B, 0x50, 0xB8, 0xFD, 0x5C, 0xC0, 0xB9, 0xC7, 0x20, 0x50, 0xCC, 0x1C, 0x6E, 0x40, 0xCC, 0x6C, 0xE7, 0xD0, 0xD3, 0xDC, 0x8F, 0xC0, 0xD4, 0x1B, 0xC9, 0xB0, 0xD5, 0x33, 0x55, 0xC0, @@ -52464,8 +52466,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBA, -0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBB, +0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, @@ -52473,9 +52475,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x54, 0x5A, 0x69, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, -0x69, 0x87, 0x1D, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, -0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, -0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, +0x69, 0x87, 0x1D, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x30, 0x47, 0x45, 0xFF, 0xFF, 0xFF, 0xFF, +0x9B, 0x5C, 0xE5, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x7C, 0xE2, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, +0xA1, 0x00, 0x71, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x5E, 0x77, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x77, 0x3D, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x41, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x58, 0x70, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB4, 0x22, 0x34, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0x39, 0xA4, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x03, 0x67, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, @@ -52562,8 +52564,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, -0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBA, -0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBA, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, +0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x06, 0xFF, 0xFF, 0xBD, 0xBB, +0x00, 0x00, 0xFF, 0xFF, 0xBD, 0xBB, 0x00, 0x04, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x08, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0xFF, 0xFF, 0xC7, 0xC0, 0x01, 0x0C, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xD5, 0xD0, 0x01, 0x10, 0xFF, 0xFF, 0xC7, 0xC0, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x2D, 0x30, 0x35, 0x00, 0x2D, 0x30, 0x34, 0x00, 0x2D, 0x30, 0x33, 0x00, @@ -57536,8 +57538,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { /* Europe/Kiev */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x22, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0x80, 0x00, 0x00, 0x00, 0xAA, 0x19, 0xA7, 0x64, 0xB5, 0xA4, 0x19, 0x60, 0xCA, 0xCD, 0x2E, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCE, 0xCD, 0xA8, 0x70, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, @@ -57545,9 +57547,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, 0x26, 0x8D, 0x20, 0xE0, 0x28, 0xE5, 0x17, 0x80, -0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, -0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, -0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, +0x29, 0xD5, 0x08, 0x80, 0x2A, 0xC4, 0xF9, 0x80, 0x2B, 0xB4, 0xEA, 0x80, 0x2C, 0xA4, 0xDB, 0x80, +0x2D, 0x94, 0xCC, 0x80, 0x2E, 0x84, 0xBD, 0x80, 0x2F, 0x74, 0xAE, 0x80, 0x30, 0x64, 0x9F, 0x80, +0x31, 0x5D, 0xCB, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, 0x3F, 0x9B, 0x1C, 0x90, @@ -57569,24 +57571,25 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x78, 0xD0, 0xC4, 0x10, 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, -0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x0A, 0x02, 0x0A, 0x02, 0x0A, -0x02, 0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, +0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0B, 0x0C, +0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, +0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, +0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, +0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, +0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, +0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, -0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x2A, 0x30, 0x01, -0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, -0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, -0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, -0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, +0x08, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, +0x30, 0x01, 0x1D, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, +0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, +0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, +0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x22, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC7, 0x64, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA7, 0x64, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA, 0xCD, 0x2E, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, @@ -57601,11 +57604,11 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x20, 0xE0, 0x00, -0x00, 0x00, 0x00, 0x28, 0xE5, 0x17, 0x80, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, -0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, -0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x00, +0x00, 0x00, 0x00, 0x28, 0xE5, 0x17, 0x80, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, +0x00, 0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, +0x00, 0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, @@ -57649,20 +57652,21 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x00, 0x00, 0x7D, 0xAE, 0x9D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, +0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x9C, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x1D, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x4C, 0x4D, -0x54, 0x00, 0x4B, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, -0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, +0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, +0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x4C, 0x4D, 0x54, 0x00, 0x4B, 0x4D, +0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, +0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD6, 0x48, 0xC5, 0x01, 0x41, 0x39, 0x12, @@ -60829,16 +60833,16 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { /* Europe/Simferopol */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x22, 0x80, 0x00, 0x00, 0x00, 0xAA, 0x19, 0xA4, 0x20, 0xB5, 0xA4, 0x19, 0x60, 0xCB, 0x04, 0x8D, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xCF, 0x9F, 0x38, 0xE0, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, 0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, -0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x8D, 0x2E, 0xF0, 0x29, 0xD4, 0xEC, 0x60, -0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, +0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x8D, 0x2E, 0xF0, 0x29, 0xD5, 0x08, 0x80, +0x2A, 0xC4, 0xF9, 0x80, 0x2B, 0xB4, 0xEA, 0x80, 0x2C, 0xA4, 0xDB, 0x80, 0x2D, 0x94, 0xCC, 0x80, 0x2D, 0xC2, 0xC6, 0xD0, 0x2E, 0x84, 0x85, 0x40, 0x2F, 0x74, 0x84, 0x50, 0x30, 0x64, 0x67, 0x40, 0x31, 0x5D, 0xA0, 0xD0, 0x32, 0x72, 0xA6, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, @@ -60851,73 +60855,74 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x4F, 0x6E, 0x6E, 0x10, 0x50, 0x8C, 0x83, 0x90, 0x51, 0x57, 0x8A, 0x90, 0x52, 0x6C, 0x65, 0x90, 0x53, 0x37, 0x5E, 0x80, 0x54, 0x4C, 0x1D, 0x60, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x05, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, -0x08, 0x09, 0x08, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x07, 0x03, 0x07, 0x03, 0x09, 0x08, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, -0x0C, 0x0D, 0x08, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x04, 0x00, +0x08, 0x09, 0x08, 0x02, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x07, 0x03, 0x07, 0x03, 0x09, 0x08, 0x0C, +0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, +0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, +0x0D, 0x0E, 0x08, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, -0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, -0x08, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0C, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x4C, 0x4D, 0x54, -0x00, 0x53, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, -0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, -0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x54, 0x5A, 0x69, -0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x4B, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC4, -0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA4, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, -0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0x04, 0x8D, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, -0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, -0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x92, 0x34, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x9F, 0x38, -0xE0, 0x00, 0x00, 0x00, 0x00, 0x15, 0x27, 0xA7, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x16, 0x18, 0xDC, -0x40, 0x00, 0x00, 0x00, 0x00, 0x17, 0x08, 0xDB, 0x50, 0x00, 0x00, 0x00, 0x00, 0x17, 0xFA, 0x0F, -0xC0, 0x00, 0x00, 0x00, 0x00, 0x18, 0xEA, 0x0E, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x19, 0xDB, 0x43, -0x40, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xCC, 0x93, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0xA0, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xAC, 0x91, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9C, 0x82, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x8C, 0x73, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x64, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6C, 0x55, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, -0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x2E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, -0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, -0x60, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, -0x60, 0x00, 0x00, 0x00, 0x00, 0x2D, 0xC2, 0xC6, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x85, -0x40, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0x84, 0x50, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x67, -0x40, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xA0, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xA6, -0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, -0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, -0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, -0x90, 0x00, 0x00, 0x00, 0x00, 0x38, 0xDD, 0x61, 0x10, 0x00, 0x00, 0x00, 0x00, 0x39, 0xFB, 0x76, -0x90, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xBD, 0x43, 0x10, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xDB, 0x58, -0x90, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xA6, 0x5F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xBB, 0x3A, -0x90, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x86, 0x41, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9B, 0x1C, -0x90, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x23, 0x90, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x39, -0x10, 0x00, 0x00, 0x00, 0x00, 0x42, 0x46, 0x05, 0x90, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x1B, -0x10, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, 0xE7, 0x90, 0x00, 0x00, 0x00, 0x00, 0x45, 0x43, 0xFD, -0x10, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0xC9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0x23, 0xDF, -0x10, 0x00, 0x00, 0x00, 0x00, 0x47, 0xEE, 0xE6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0x03, 0xC1, -0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0xCE, 0xC8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE3, 0xA3, -0x10, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xAE, 0xAA, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xCC, 0xBF, -0x90, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x8E, 0x8C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xAC, 0xA1, -0x90, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6E, 0x6E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8C, 0x83, -0x90, 0x00, 0x00, 0x00, 0x00, 0x51, 0x57, 0x8A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x65, -0x90, 0x00, 0x00, 0x00, 0x00, 0x53, 0x37, 0x5E, 0x80, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x1D, -0x60, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x05, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, -0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x02, 0x0A, 0x02, 0x0A, -0x02, 0x0A, 0x07, 0x03, 0x07, 0x03, 0x09, 0x08, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0D, 0x08, 0x00, 0x00, 0x1F, 0xF8, -0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, -0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, -0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, -0x00, 0x0C, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, -0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0C, -0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x45, 0x45, -0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, -0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, -0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x01, +0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0C, 0x00, 0x00, 0x2A, +0x30, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, +0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, +0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x01, 0x01, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, +0x22, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC4, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA4, +0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCB, 0x04, 0x8D, +0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, +0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x92, 0x34, +0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x9F, 0x38, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x15, 0x27, 0xA7, +0xD0, 0x00, 0x00, 0x00, 0x00, 0x16, 0x18, 0xDC, 0x40, 0x00, 0x00, 0x00, 0x00, 0x17, 0x08, 0xDB, +0x50, 0x00, 0x00, 0x00, 0x00, 0x17, 0xFA, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x18, 0xEA, 0x0E, +0xD0, 0x00, 0x00, 0x00, 0x00, 0x19, 0xDB, 0x43, 0x40, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xCC, 0x93, +0xD0, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0xA0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xAC, 0x91, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9C, 0x82, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x8C, 0x73, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x64, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6C, 0x55, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x2E, +0xF0, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xF9, +0x80, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xDB, +0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0xC2, 0xC6, +0xD0, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x85, 0x40, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0x84, +0x50, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0x67, 0x40, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xA0, +0xD0, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, +0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, +0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, +0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, 0x00, 0x00, 0x00, 0x38, 0xDD, 0x61, +0x10, 0x00, 0x00, 0x00, 0x00, 0x39, 0xFB, 0x76, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xBD, 0x43, +0x10, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xDB, 0x58, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xA6, 0x5F, +0x90, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xBB, 0x3A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x86, 0x41, +0x90, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9B, 0x1C, 0x90, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x23, +0x90, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x39, 0x10, 0x00, 0x00, 0x00, 0x00, 0x42, 0x46, 0x05, +0x90, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x1B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, 0xE7, +0x90, 0x00, 0x00, 0x00, 0x00, 0x45, 0x43, 0xFD, 0x10, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0xC9, +0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0x23, 0xDF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x47, 0xEE, 0xE6, +0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0x03, 0xC1, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0xCE, 0xC8, +0x10, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE3, 0xA3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xAE, 0xAA, +0x10, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xCC, 0xBF, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x8E, 0x8C, +0x10, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xAC, 0xA1, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6E, 0x6E, +0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8C, 0x83, 0x90, 0x00, 0x00, 0x00, 0x00, 0x51, 0x57, 0x8A, +0x90, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x65, 0x90, 0x00, 0x00, 0x00, 0x00, 0x53, 0x37, 0x5E, +0x80, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x1D, 0x60, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, +0x05, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, +0x09, 0x08, 0x09, 0x08, 0x02, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x07, 0x03, 0x07, 0x03, 0x09, 0x08, +0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, +0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, 0x0C, 0x0D, +0x0C, 0x0D, 0x0E, 0x08, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x04, +0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x0E, 0x10, +0x00, 0x10, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x14, 0x00, 0x00, +0x38, 0x40, 0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x38, 0x40, 0x01, 0x19, +0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x2A, 0x30, +0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x08, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0C, 0x00, 0x00, +0x2A, 0x30, 0x00, 0x0C, 0x4C, 0x4D, 0x54, 0x00, 0x53, 0x4D, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, +0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, +0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, +0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x0A, 0x4D, 0x53, 0x4B, 0x2D, 0x33, 0x0A, 0x00, 0xCD, 0xEA, 0xD7, 0x01, 0x46, 0xB0, 0xD0, 0x00, 0x00, 0x00, 0x06, 0x43, 0x72, 0x69, 0x6D, 0x65, 0x61, @@ -61811,17 +61816,17 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { /* Europe/Uzhgorod */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x1E, 0x80, 0x00, 0x00, 0x00, 0xC8, 0x09, 0x71, 0x90, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCF, 0x92, 0x34, 0x10, 0xD0, 0xA1, 0x9E, 0xE0, 0xD1, 0xE5, 0xFD, 0xF0, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, 0x19, 0xDB, 0x43, 0x40, 0x1A, 0xCC, 0x93, 0xD0, 0x1B, 0xBC, 0xA0, 0xF0, 0x1C, 0xAC, 0x91, 0xF0, 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, -0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x8D, 0x2E, 0xF0, 0x27, 0xF5, 0x42, 0xA0, 0x29, 0xD4, 0xEC, 0x60, -0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, 0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, -0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0xBC, 0x90, 0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, +0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x8D, 0x2E, 0xF0, 0x27, 0xF5, 0x42, 0xA0, 0x29, 0xD5, 0x08, 0x80, +0x2A, 0xC4, 0xF9, 0x80, 0x2B, 0xB4, 0xEA, 0x80, 0x2C, 0xA4, 0xDB, 0x80, 0x2D, 0x94, 0xCC, 0x80, +0x2E, 0x84, 0xBD, 0x80, 0x2F, 0x74, 0xAE, 0x80, 0x30, 0x64, 0x9F, 0x80, 0x31, 0x5D, 0xCB, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, @@ -61844,98 +61849,99 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x79, 0xEE, 0xD9, 0x90, 0x7A, 0xB0, 0xA6, 0x10, 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x01, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x00, 0x00, 0x14, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, +0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x01, 0x08, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, +0x09, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x00, 0x00, 0x14, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, -0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x4C, 0x4D, 0x54, 0x00, +0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, +0x01, 0x19, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, +0x53, 0x44, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, +0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, +0x00, 0x0D, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0x6A, 0xEE, 0xB0, 0x18, 0xFF, 0xFF, +0xFF, 0xFF, 0xC8, 0x09, 0x71, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, +0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, +0xFF, 0xFF, 0xCF, 0x92, 0x34, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xD0, 0xA1, 0x9E, 0xE0, 0xFF, 0xFF, +0xFF, 0xFF, 0xD1, 0xE5, 0xFD, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x15, 0x27, 0xA7, 0xD0, 0x00, 0x00, +0x00, 0x00, 0x16, 0x18, 0xDC, 0x40, 0x00, 0x00, 0x00, 0x00, 0x17, 0x08, 0xDB, 0x50, 0x00, 0x00, +0x00, 0x00, 0x17, 0xFA, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x18, 0xEA, 0x0E, 0xD0, 0x00, 0x00, +0x00, 0x00, 0x19, 0xDB, 0x43, 0x40, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xCC, 0x93, 0xD0, 0x00, 0x00, +0x00, 0x00, 0x1B, 0xBC, 0xA0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xAC, 0x91, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x1D, 0x9C, 0x82, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x8C, 0x73, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x1F, 0x7C, 0x64, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6C, 0x55, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x8D, 0x2E, 0xF0, 0x00, 0x00, +0x00, 0x00, 0x27, 0xF5, 0x42, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, +0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, 0x00, +0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, +0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, +0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, +0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, 0x00, 0x00, 0x00, 0x38, 0xDD, 0x61, 0x10, 0x00, 0x00, +0x00, 0x00, 0x39, 0xFB, 0x76, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xBD, 0x43, 0x10, 0x00, 0x00, +0x00, 0x00, 0x3B, 0xDB, 0x58, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xA6, 0x5F, 0x90, 0x00, 0x00, +0x00, 0x00, 0x3D, 0xBB, 0x3A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x86, 0x41, 0x90, 0x00, 0x00, +0x00, 0x00, 0x3F, 0x9B, 0x1C, 0x90, 0x00, 0x00, 0x00, 0x00, 0x40, 0x66, 0x23, 0x90, 0x00, 0x00, +0x00, 0x00, 0x41, 0x84, 0x39, 0x10, 0x00, 0x00, 0x00, 0x00, 0x42, 0x46, 0x05, 0x90, 0x00, 0x00, +0x00, 0x00, 0x43, 0x64, 0x1B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x44, 0x25, 0xE7, 0x90, 0x00, 0x00, +0x00, 0x00, 0x45, 0x43, 0xFD, 0x10, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0xC9, 0x90, 0x00, 0x00, +0x00, 0x00, 0x47, 0x23, 0xDF, 0x10, 0x00, 0x00, 0x00, 0x00, 0x47, 0xEE, 0xE6, 0x10, 0x00, 0x00, +0x00, 0x00, 0x49, 0x03, 0xC1, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0xCE, 0xC8, 0x10, 0x00, 0x00, +0x00, 0x00, 0x4A, 0xE3, 0xA3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xAE, 0xAA, 0x10, 0x00, 0x00, +0x00, 0x00, 0x4C, 0xCC, 0xBF, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x8E, 0x8C, 0x10, 0x00, 0x00, +0x00, 0x00, 0x4E, 0xAC, 0xA1, 0x90, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6E, 0x6E, 0x10, 0x00, 0x00, +0x00, 0x00, 0x50, 0x8C, 0x83, 0x90, 0x00, 0x00, 0x00, 0x00, 0x51, 0x57, 0x8A, 0x90, 0x00, 0x00, +0x00, 0x00, 0x52, 0x6C, 0x65, 0x90, 0x00, 0x00, 0x00, 0x00, 0x53, 0x37, 0x6C, 0x90, 0x00, 0x00, +0x00, 0x00, 0x54, 0x4C, 0x47, 0x90, 0x00, 0x00, 0x00, 0x00, 0x55, 0x17, 0x4E, 0x90, 0x00, 0x00, +0x00, 0x00, 0x56, 0x2C, 0x29, 0x90, 0x00, 0x00, 0x00, 0x00, 0x56, 0xF7, 0x30, 0x90, 0x00, 0x00, +0x00, 0x00, 0x58, 0x15, 0x46, 0x10, 0x00, 0x00, 0x00, 0x00, 0x58, 0xD7, 0x12, 0x90, 0x00, 0x00, +0x00, 0x00, 0x59, 0xF5, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xB6, 0xF4, 0x90, 0x00, 0x00, +0x00, 0x00, 0x5B, 0xD5, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5C, 0xA0, 0x11, 0x10, 0x00, 0x00, +0x00, 0x00, 0x5D, 0xB4, 0xEC, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x7F, 0xF3, 0x10, 0x00, 0x00, +0x00, 0x00, 0x5F, 0x94, 0xCE, 0x10, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5F, 0xD5, 0x10, 0x00, 0x00, +0x00, 0x00, 0x61, 0x7D, 0xEA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x62, 0x3F, 0xB7, 0x10, 0x00, 0x00, +0x00, 0x00, 0x63, 0x5D, 0xCC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x64, 0x1F, 0x99, 0x10, 0x00, 0x00, +0x00, 0x00, 0x65, 0x3D, 0xAE, 0x90, 0x00, 0x00, 0x00, 0x00, 0x66, 0x08, 0xB5, 0x90, 0x00, 0x00, +0x00, 0x00, 0x67, 0x1D, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x67, 0xE8, 0x97, 0x90, 0x00, 0x00, +0x00, 0x00, 0x68, 0xFD, 0x72, 0x90, 0x00, 0x00, 0x00, 0x00, 0x69, 0xC8, 0x79, 0x90, 0x00, 0x00, +0x00, 0x00, 0x6A, 0xDD, 0x54, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6B, 0xA8, 0x5B, 0x90, 0x00, 0x00, +0x00, 0x00, 0x6C, 0xC6, 0x71, 0x10, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x88, 0x3D, 0x90, 0x00, 0x00, +0x00, 0x00, 0x6E, 0xA6, 0x53, 0x10, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x68, 0x1F, 0x90, 0x00, 0x00, +0x00, 0x00, 0x70, 0x86, 0x35, 0x10, 0x00, 0x00, 0x00, 0x00, 0x71, 0x51, 0x3C, 0x10, 0x00, 0x00, +0x00, 0x00, 0x72, 0x66, 0x17, 0x10, 0x00, 0x00, 0x00, 0x00, 0x73, 0x31, 0x1E, 0x10, 0x00, 0x00, +0x00, 0x00, 0x74, 0x45, 0xF9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x00, 0x10, 0x00, 0x00, +0x00, 0x00, 0x76, 0x2F, 0x15, 0x90, 0x00, 0x00, 0x00, 0x00, 0x76, 0xF0, 0xE2, 0x10, 0x00, 0x00, +0x00, 0x00, 0x78, 0x0E, 0xF7, 0x90, 0x00, 0x00, 0x00, 0x00, 0x78, 0xD0, 0xC4, 0x10, 0x00, 0x00, +0x00, 0x00, 0x79, 0xEE, 0xD9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7A, 0xB0, 0xA6, 0x10, 0x00, 0x00, +0x00, 0x00, 0x7B, 0xCE, 0xBB, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x99, 0xC2, 0x90, 0x00, 0x00, +0x00, 0x00, 0x7D, 0xAE, 0x9D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, +0x00, 0x00, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x05, 0x04, 0x05, +0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, +0x01, 0x08, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0A, 0x09, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, +0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x00, 0x00, +0x14, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, +0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, +0x00, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, +0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, +0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, -0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x01, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1E, 0xFF, 0xFF, -0xFF, 0xFF, 0x6A, 0xEE, 0xB0, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xC8, 0x09, 0x71, 0x90, 0xFF, 0xFF, -0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, -0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x92, 0x34, 0x10, 0xFF, 0xFF, -0xFF, 0xFF, 0xD0, 0xA1, 0x9E, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD1, 0xE5, 0xFD, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x15, 0x27, 0xA7, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x16, 0x18, 0xDC, 0x40, 0x00, 0x00, -0x00, 0x00, 0x17, 0x08, 0xDB, 0x50, 0x00, 0x00, 0x00, 0x00, 0x17, 0xFA, 0x0F, 0xC0, 0x00, 0x00, -0x00, 0x00, 0x18, 0xEA, 0x0E, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x19, 0xDB, 0x43, 0x40, 0x00, 0x00, -0x00, 0x00, 0x1A, 0xCC, 0x93, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xBC, 0xA0, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x1C, 0xAC, 0x91, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x9C, 0x82, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x1E, 0x8C, 0x73, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7C, 0x64, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x20, 0x6C, 0x55, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x21, 0x5C, 0x46, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x22, 0x4C, 0x37, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, -0x00, 0x00, 0x26, 0x8D, 0x2E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x42, 0xA0, 0x00, 0x00, -0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, 0x00, -0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, -0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, -0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, -0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x00, 0x00, -0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, -0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, -0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1B, 0x94, 0x90, 0x00, 0x00, -0x00, 0x00, 0x38, 0xDD, 0x61, 0x10, 0x00, 0x00, 0x00, 0x00, 0x39, 0xFB, 0x76, 0x90, 0x00, 0x00, -0x00, 0x00, 0x3A, 0xBD, 0x43, 0x10, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xDB, 0x58, 0x90, 0x00, 0x00, -0x00, 0x00, 0x3C, 0xA6, 0x5F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xBB, 0x3A, 0x90, 0x00, 0x00, -0x00, 0x00, 0x3E, 0x86, 0x41, 0x90, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9B, 0x1C, 0x90, 0x00, 0x00, -0x00, 0x00, 0x40, 0x66, 0x23, 0x90, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x39, 0x10, 0x00, 0x00, -0x00, 0x00, 0x42, 0x46, 0x05, 0x90, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x1B, 0x10, 0x00, 0x00, -0x00, 0x00, 0x44, 0x25, 0xE7, 0x90, 0x00, 0x00, 0x00, 0x00, 0x45, 0x43, 0xFD, 0x10, 0x00, 0x00, -0x00, 0x00, 0x46, 0x05, 0xC9, 0x90, 0x00, 0x00, 0x00, 0x00, 0x47, 0x23, 0xDF, 0x10, 0x00, 0x00, -0x00, 0x00, 0x47, 0xEE, 0xE6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x49, 0x03, 0xC1, 0x10, 0x00, 0x00, -0x00, 0x00, 0x49, 0xCE, 0xC8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xE3, 0xA3, 0x10, 0x00, 0x00, -0x00, 0x00, 0x4B, 0xAE, 0xAA, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xCC, 0xBF, 0x90, 0x00, 0x00, -0x00, 0x00, 0x4D, 0x8E, 0x8C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xAC, 0xA1, 0x90, 0x00, 0x00, -0x00, 0x00, 0x4F, 0x6E, 0x6E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8C, 0x83, 0x90, 0x00, 0x00, -0x00, 0x00, 0x51, 0x57, 0x8A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x52, 0x6C, 0x65, 0x90, 0x00, 0x00, -0x00, 0x00, 0x53, 0x37, 0x6C, 0x90, 0x00, 0x00, 0x00, 0x00, 0x54, 0x4C, 0x47, 0x90, 0x00, 0x00, -0x00, 0x00, 0x55, 0x17, 0x4E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x56, 0x2C, 0x29, 0x90, 0x00, 0x00, -0x00, 0x00, 0x56, 0xF7, 0x30, 0x90, 0x00, 0x00, 0x00, 0x00, 0x58, 0x15, 0x46, 0x10, 0x00, 0x00, -0x00, 0x00, 0x58, 0xD7, 0x12, 0x90, 0x00, 0x00, 0x00, 0x00, 0x59, 0xF5, 0x28, 0x10, 0x00, 0x00, -0x00, 0x00, 0x5A, 0xB6, 0xF4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xD5, 0x0A, 0x10, 0x00, 0x00, -0x00, 0x00, 0x5C, 0xA0, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xB4, 0xEC, 0x10, 0x00, 0x00, -0x00, 0x00, 0x5E, 0x7F, 0xF3, 0x10, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x94, 0xCE, 0x10, 0x00, 0x00, -0x00, 0x00, 0x60, 0x5F, 0xD5, 0x10, 0x00, 0x00, 0x00, 0x00, 0x61, 0x7D, 0xEA, 0x90, 0x00, 0x00, -0x00, 0x00, 0x62, 0x3F, 0xB7, 0x10, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5D, 0xCC, 0x90, 0x00, 0x00, -0x00, 0x00, 0x64, 0x1F, 0x99, 0x10, 0x00, 0x00, 0x00, 0x00, 0x65, 0x3D, 0xAE, 0x90, 0x00, 0x00, -0x00, 0x00, 0x66, 0x08, 0xB5, 0x90, 0x00, 0x00, 0x00, 0x00, 0x67, 0x1D, 0x90, 0x90, 0x00, 0x00, -0x00, 0x00, 0x67, 0xE8, 0x97, 0x90, 0x00, 0x00, 0x00, 0x00, 0x68, 0xFD, 0x72, 0x90, 0x00, 0x00, -0x00, 0x00, 0x69, 0xC8, 0x79, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xDD, 0x54, 0x90, 0x00, 0x00, -0x00, 0x00, 0x6B, 0xA8, 0x5B, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6C, 0xC6, 0x71, 0x10, 0x00, 0x00, -0x00, 0x00, 0x6D, 0x88, 0x3D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xA6, 0x53, 0x10, 0x00, 0x00, -0x00, 0x00, 0x6F, 0x68, 0x1F, 0x90, 0x00, 0x00, 0x00, 0x00, 0x70, 0x86, 0x35, 0x10, 0x00, 0x00, -0x00, 0x00, 0x71, 0x51, 0x3C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x72, 0x66, 0x17, 0x10, 0x00, 0x00, -0x00, 0x00, 0x73, 0x31, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x74, 0x45, 0xF9, 0x10, 0x00, 0x00, -0x00, 0x00, 0x75, 0x11, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x76, 0x2F, 0x15, 0x90, 0x00, 0x00, -0x00, 0x00, 0x76, 0xF0, 0xE2, 0x10, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0E, 0xF7, 0x90, 0x00, 0x00, -0x00, 0x00, 0x78, 0xD0, 0xC4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x79, 0xEE, 0xD9, 0x90, 0x00, 0x00, -0x00, 0x00, 0x7A, 0xB0, 0xA6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xCE, 0xBB, 0x90, 0x00, 0x00, -0x00, 0x00, 0x7C, 0x99, 0xC2, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7D, 0xAE, 0x9D, 0x90, 0x00, 0x00, -0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, -0x03, 0x02, 0x03, 0x02, 0x01, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x06, 0x07, 0x06, -0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x01, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, -0x0A, 0x0B, 0x0A, 0x0B, 0x0A, 0x0B, 0x00, 0x00, 0x14, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x10, -0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x08, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x04, 0x00, 0x00, -0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x11, -0x00, 0x00, 0x38, 0x40, 0x01, 0x0D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x4C, 0x4D, -0x54, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, -0x53, 0x4B, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, -0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD3, 0x83, 0x22, 0x01, 0x34, 0xAF, 0x70, 0x00, 0x00, 0x00, 0x0E, 0x54, 0x72, @@ -62882,8 +62888,8 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { /* Europe/Zaporozhye */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x24, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x24, 0x80, 0x00, 0x00, 0x00, 0xAA, 0x19, 0xA3, 0x30, 0xB5, 0xA4, 0x19, 0x60, 0xCA, 0xAA, 0xE7, 0xD0, 0xCC, 0xE7, 0x4B, 0x10, 0xCD, 0xA9, 0x17, 0x90, 0xCE, 0xA2, 0x43, 0x10, 0xCE, 0xBD, 0xD6, 0x70, 0x15, 0x27, 0xA7, 0xD0, 0x16, 0x18, 0xDC, 0x40, 0x17, 0x08, 0xDB, 0x50, 0x17, 0xFA, 0x0F, 0xC0, 0x18, 0xEA, 0x0E, 0xD0, @@ -62891,9 +62897,9 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x1D, 0x9C, 0x82, 0xF0, 0x1E, 0x8C, 0x73, 0xF0, 0x1F, 0x7C, 0x64, 0xF0, 0x20, 0x6C, 0x55, 0xF0, 0x21, 0x5C, 0x46, 0xF0, 0x22, 0x4C, 0x37, 0xF0, 0x23, 0x3C, 0x28, 0xF0, 0x24, 0x2C, 0x19, 0xF0, 0x25, 0x1C, 0x0A, 0xF0, 0x26, 0x0B, 0xFB, 0xF0, 0x27, 0x05, 0x27, 0x70, 0x27, 0xF5, 0x18, 0x70, -0x28, 0xE4, 0xED, 0x50, 0x29, 0xD4, 0xEC, 0x60, 0x2A, 0xC4, 0xCF, 0x50, 0x2B, 0xB4, 0xCE, 0x60, -0x2C, 0xA4, 0xB1, 0x50, 0x2D, 0x94, 0xB0, 0x60, 0x2E, 0x84, 0x93, 0x50, 0x2F, 0x74, 0xBC, 0x90, -0x30, 0x64, 0xAD, 0x90, 0x31, 0x5D, 0xD9, 0x10, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, +0x28, 0xE4, 0xED, 0x50, 0x29, 0xD5, 0x08, 0x80, 0x2A, 0xC4, 0xF9, 0x80, 0x2B, 0xB4, 0xEA, 0x80, +0x2C, 0xA4, 0xDB, 0x80, 0x2D, 0x94, 0xCC, 0x80, 0x2E, 0x84, 0xBD, 0x80, 0x2F, 0x74, 0xAE, 0x80, +0x30, 0x64, 0x9F, 0x80, 0x31, 0x5D, 0xCB, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x33, 0x3D, 0xBB, 0x10, 0x34, 0x52, 0x96, 0x10, 0x35, 0x1D, 0x9D, 0x10, 0x36, 0x32, 0x78, 0x10, 0x36, 0xFD, 0x7F, 0x10, 0x38, 0x1B, 0x94, 0x90, 0x38, 0xDD, 0x61, 0x10, 0x39, 0xFB, 0x76, 0x90, 0x3A, 0xBD, 0x43, 0x10, 0x3B, 0xDB, 0x58, 0x90, 0x3C, 0xA6, 0x5F, 0x90, 0x3D, 0xBB, 0x3A, 0x90, 0x3E, 0x86, 0x41, 0x90, @@ -62916,24 +62922,25 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x7B, 0xCE, 0xBB, 0x90, 0x7C, 0x99, 0xC2, 0x90, 0x7D, 0xAE, 0x9D, 0x90, 0x7E, 0x79, 0xA4, 0x90, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x00, 0x00, +0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x20, 0xD0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1B, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1B, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, -0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x4C, 0x4D, 0x54, 0x00, -0x2B, 0x30, 0x32, 0x32, 0x30, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, -0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, +0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, 0x1C, 0x20, +0x00, 0x0A, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x4C, 0x4D, 0x54, 0x00, 0x2B, 0x30, 0x32, 0x32, +0x30, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, 0x43, 0x45, +0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, -0x00, 0x0D, 0x00, 0x00, 0x00, 0x24, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC3, 0x08, 0xFF, 0xFF, +0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, +0x00, 0x0F, 0x00, 0x00, 0x00, 0x24, 0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xB6, 0xC3, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x19, 0xA3, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xB5, 0xA4, 0x19, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xCA, 0xAA, 0xE7, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0xE7, 0x4B, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xA9, 0x17, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xA2, 0x43, 0x10, 0xFF, 0xFF, @@ -62948,11 +62955,11 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x00, 0x23, 0x3C, 0x28, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2C, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x0A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x26, 0x0B, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27, 0x05, 0x27, 0x70, 0x00, 0x00, 0x00, 0x00, 0x27, 0xF5, 0x18, 0x70, 0x00, 0x00, -0x00, 0x00, 0x28, 0xE4, 0xED, 0x50, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD4, 0xEC, 0x60, 0x00, 0x00, -0x00, 0x00, 0x2A, 0xC4, 0xCF, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xCE, 0x60, 0x00, 0x00, -0x00, 0x00, 0x2C, 0xA4, 0xB1, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xB0, 0x60, 0x00, 0x00, -0x00, 0x00, 0x2E, 0x84, 0x93, 0x50, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xBC, 0x90, 0x00, 0x00, -0x00, 0x00, 0x30, 0x64, 0xAD, 0x90, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xD9, 0x10, 0x00, 0x00, +0x00, 0x00, 0x28, 0xE4, 0xED, 0x50, 0x00, 0x00, 0x00, 0x00, 0x29, 0xD5, 0x08, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2A, 0xC4, 0xF9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xB4, 0xEA, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2C, 0xA4, 0xDB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x94, 0xCC, 0x80, 0x00, 0x00, +0x00, 0x00, 0x2E, 0x84, 0xBD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x74, 0xAE, 0x80, 0x00, 0x00, +0x00, 0x00, 0x30, 0x64, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x5D, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x72, 0xB4, 0x10, 0x00, 0x00, 0x00, 0x00, 0x33, 0x3D, 0xBB, 0x10, 0x00, 0x00, 0x00, 0x00, 0x34, 0x52, 0x96, 0x10, 0x00, 0x00, 0x00, 0x00, 0x35, 0x1D, 0x9D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0x32, 0x78, 0x10, 0x00, 0x00, 0x00, 0x00, 0x36, 0xFD, 0x7F, 0x10, 0x00, 0x00, @@ -62996,20 +63003,21 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { 0x00, 0x00, 0x7D, 0xAE, 0x9D, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x79, 0xA4, 0x90, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8E, 0x7F, 0x90, 0x01, 0x02, 0x03, 0x06, 0x04, 0x05, 0x04, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x03, 0x07, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, -0x09, 0x08, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, -0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, +0x09, 0x08, 0x0A, 0x02, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0C, 0x0B, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, +0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x0E, 0x0D, 0x00, 0x00, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x20, 0xD0, 0x00, 0x04, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x0E, 0x10, 0x00, 0x12, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x1C, 0x20, 0x01, 0x16, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1B, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0E, 0x00, 0x00, 0x38, 0x40, 0x01, 0x1B, 0x00, 0x00, 0x2A, 0x30, -0x01, 0x1F, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x4C, 0x4D, -0x54, 0x00, 0x2B, 0x30, 0x32, 0x32, 0x30, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, -0x43, 0x45, 0x54, 0x00, 0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, -0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, +0x01, 0x1F, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, +0x1C, 0x20, 0x00, 0x0A, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1F, 0x4C, 0x4D, 0x54, 0x00, 0x2B, 0x30, +0x32, 0x32, 0x30, 0x00, 0x45, 0x45, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x43, 0x45, 0x54, 0x00, +0x43, 0x45, 0x53, 0x54, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, +0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0A, 0x45, 0x45, 0x54, 0x2D, 0x32, 0x45, 0x45, 0x53, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x33, 0x2C, 0x4D, 0x31, 0x30, 0x2E, 0x35, 0x2E, 0x30, 0x2F, 0x34, 0x0A, 0x00, 0xD2, 0x51, 0x25, 0x01, 0x48, @@ -69555,4 +69563,4 @@ const unsigned char timelib_timezone_db_data_builtin[703734] = { }; #endif -const timelib_tzdb timezonedb_builtin = { "2021.5", 595, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; +const timelib_tzdb timezonedb_builtin = { "2022.1", 595, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; From 7c702b72f28d2b47540f98dc3fed1efad771b09c Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Tue, 29 Mar 2022 13:53:15 +0200 Subject: [PATCH 19/78] Fix GH-8267: MySQLi uses unsupported format specifier on Windows Instead of using the unsupported `%I64u` and `%I64d` format specifiers on Windows, we use the portable `PRIu64` and `PRId64` specifiers. The `L64()` macro and the `my_longlong` typedef should be adapted as well, as the `i64` literal suffix is still supported by MSVC, but using `LL` or `ll` is recommended[1], and the standard `int64_t` is available there anyway. This is not urgent, though. [1] Closes GH-8268. --- NEWS | 5 ++++- ext/mysqli/php_mysqli_structs.h | 11 +++++------ ext/mysqli/tests/gh8267.phpt | 22 ++++++++++++++++++++++ 3 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 ext/mysqli/tests/gh8267.phpt diff --git a/NEWS b/NEWS index c26dfd03a1988..a28ed64e8c4d7 100644 --- a/NEWS +++ b/NEWS @@ -3,10 +3,13 @@ PHP NEWS ?? ??? 2022, PHP 8.0.19 - Core: - . Fixed bug GH-8289 (Exceptions thrown within a yielded from iterator are not rethrown into the generator). (Bob) +- MySQLi: + . Fixed bug GH-8267 (MySQLi uses unsupported format specifier on Windows). + (cmb) + 14 Apr 2022, PHP 8.0.18 - Core: diff --git a/ext/mysqli/php_mysqli_structs.h b/ext/mysqli/php_mysqli_structs.h index 16ed9ddefce5c..eb74a35697a04 100644 --- a/ext/mysqli/php_mysqli_structs.h +++ b/ext/mysqli/php_mysqli_structs.h @@ -134,8 +134,6 @@ typedef struct { #ifdef PHP_WIN32 #define PHP_MYSQLI_API __declspec(dllexport) -#define MYSQLI_LLU_SPEC "%I64u" -#define MYSQLI_LL_SPEC "%I64d" #ifndef L64 #define L64(x) x##i64 #endif @@ -146,16 +144,17 @@ typedef __int64 my_longlong; # else # define PHP_MYSQLI_API # endif -/* we need this for PRIu64 and PRId64 */ -#include -#define MYSQLI_LLU_SPEC "%" PRIu64 -#define MYSQLI_LL_SPEC "%" PRId64 #ifndef L64 #define L64(x) x##LL #endif typedef int64_t my_longlong; #endif +/* we need this for PRIu64 and PRId64 */ +#include +#define MYSQLI_LLU_SPEC "%" PRIu64 +#define MYSQLI_LL_SPEC "%" PRId64 + #ifdef ZTS #include "TSRM.h" #endif diff --git a/ext/mysqli/tests/gh8267.phpt b/ext/mysqli/tests/gh8267.phpt new file mode 100644 index 0000000000000..204bfbb79caf9 --- /dev/null +++ b/ext/mysqli/tests/gh8267.phpt @@ -0,0 +1,22 @@ +--TEST-- +Bug GH-8267 (MySQLi uses unsupported format specifier on Windows) +--SKIPIF-- + +--FILE-- +query("DROP TABLE IF EXISTS foo"); +$mysqli->query("CREATE TABLE foo (id BIGINT UNSIGNED AUTO_INCREMENT, PRIMARY KEY (id))"); +$mysqli->query("INSERT INTO foo VALUES (9223372036854775807)"); +var_dump($mysqli->insert_id); +$mysqli->query("INSERT INTO foo VALUES (0)"); +var_dump($mysqli->insert_id); +?> +--EXPECT-- +string(19) "9223372036854775807" +string(19) "9223372036854775808" From 5de1cd9e48fb7ce658bff260b4a4f72cfc0af191 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Fri, 1 Apr 2022 17:15:33 +0200 Subject: [PATCH 20/78] Add nightly for GitHub actions --- .github/nightly_matrix.php | 71 +++++++++++++++++ .github/workflows/nightly.yml | 146 ++++++++++++++++++++++++++++++++++ .gitignore | 5 ++ azure-pipelines.yml | 37 +-------- azure/macos/brew.yml | 33 -------- azure/macos/job.yml | 99 ----------------------- azure/macos/test.yml | 29 ------- 7 files changed, 224 insertions(+), 196 deletions(-) create mode 100644 .github/nightly_matrix.php create mode 100644 .github/workflows/nightly.yml delete mode 100644 azure/macos/brew.yml delete mode 100644 azure/macos/job.yml delete mode 100644 azure/macos/test.yml diff --git a/.github/nightly_matrix.php b/.github/nightly_matrix.php new file mode 100644 index 0000000000000..a099a3ba2ad67 --- /dev/null +++ b/.github/nightly_matrix.php @@ -0,0 +1,71 @@ + $branch_key, + 'ref' => $branch, + ]; + }, $branches); + + return $result; +} + +function get_branches() { + $branch_commit_cache_file = get_branch_commit_cache_file_path(); + $branch_commit_map = []; + if (file_exists($branch_commit_cache_file)) { + $branch_commit_map = json_decode(file_get_contents($branch_commit_cache_file), JSON_THROW_ON_ERROR); + } + + $changed_branches = []; + foreach (BRANCHES as $branch) { + $previous_commit_hash = $branch_commit_map[$branch] ?? null; + $current_commit_hash = trim(shell_exec('git rev-parse origin/' . $branch)); + + if ($previous_commit_hash !== $current_commit_hash) { + $changed_branches[] = $branch; + } + + $branch_commit_map[$branch] = $current_commit_hash; + } + + file_put_contents($branch_commit_cache_file, json_encode($branch_commit_map)); + + return get_branch_matrix($changed_branches); +} + +function get_asan_matrix(array $branches) { + $jobs = []; + foreach ($branches as $branch) { + $jobs[] = [ + 'name' => '_ASAN_UBSAN', + 'branch' => $branch, + 'debug' => true, + 'zts' => true, + 'configuration_parameters' => "CFLAGS='-fsanitize=undefined,address -DZEND_TRACK_ARENA_ALLOC' LDFLAGS='-fsanitize=undefined,address'", + 'run_tests_parameters' => '--asan', + ]; + } + return $jobs; +} + +$trigger = $argv[1] ?? 'schedule'; +$attempt = (int) ($argv[2] ?? 1); +$discard_cache = ($trigger === 'schedule' && $attempt !== 1) || $trigger === 'workflow_dispatch'; +if ($discard_cache) { + @unlink(get_branch_commit_cache_file_path()); +} + +$branches = get_branches(); +$asan_matrix = get_asan_matrix($branches); + +echo '::set-output name=branches::' . json_encode($branches, JSON_UNESCAPED_SLASHES) . "\n"; +echo '::set-output name=asan-matrix::' . json_encode($asan_matrix, JSON_UNESCAPED_SLASHES) . "\n"; diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 0000000000000..121308be6c551 --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,146 @@ +name: Nightly +on: + schedule: + - cron: "0 1 * * *" + workflow_dispatch: ~ + issue_comment: + types: [created] +jobs: + GENERATE_MATRIX: + name: Generate Matrix + runs-on: ubuntu-latest + outputs: + branches: ${{ steps.set-matrix.outputs.branches }} + asan-matrix: ${{ steps.set-matrix.outputs.asan-matrix }} + steps: + - uses: actions/checkout@v2 + with: + # Set fetch-depth to 0 to clone the full repository + # including all branches. This is required to find + # the correct commit hashes. + fetch-depth: 0 + - name: Grab the commit mapping + uses: actions/cache@v3 + with: + path: branch-commit-cache.json + # The cache key needs to change every time for the + # cache to be updated after this job finishes. + key: nightly-${{ github.run_id }}-${{ github.run_attempt }} + restore-keys: | + nightly- + - name: Generate Matrix + id: set-matrix + run: php .github/nightly_matrix.php "${{ github.event_name }}" "${{ github.run_attempt }}" + LINUX_X64: + needs: GENERATE_MATRIX + if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }} + strategy: + fail-fast: false + matrix: + branch: ${{ fromJson(needs.GENERATE_MATRIX.outputs.branches) }} + debug: [true, false] + zts: [true, false] + include: ${{ fromJson(needs.GENERATE_MATRIX.outputs.asan-matrix) }} + name: "${{ matrix.branch.name }}_LINUX_X64${{ matrix.name }}_${{ matrix.debug && 'DEBUG' || 'RELEASE' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}" + runs-on: ubuntu-20.04 + steps: + - name: git checkout + uses: actions/checkout@v2 + with: + ref: ${{ matrix.branch.ref }} + - name: Create mssql container + uses: ./.github/actions/mssql + - name: apt + uses: ./.github/actions/apt-x64 + - name: ./configure + uses: ./.github/actions/configure-x64 + with: + configurationParameters: >- + ${{ matrix.configuration_parameters }} + --${{ matrix.debug && 'enable' || 'disable' }}-debug + --${{ matrix.zts && 'enable' || 'disable' }}-zts + - name: make + run: make -j$(/usr/bin/nproc) >/dev/null + - name: make install + uses: ./.github/actions/install-linux + - name: Setup + uses: ./.github/actions/setup-x64 + - name: Test + uses: ./.github/actions/test-linux + with: + runTestsParameters: >- + ${{ matrix.run_tests_parameters }} + - name: Test Tracing JIT + uses: ./.github/actions/test-linux + with: + runTestsParameters: >- + ${{ matrix.run_tests_parameters }} + -d zend_extension=opcache.so + -d opcache.jit_buffer_size=16M + - name: Test OpCache + uses: ./.github/actions/test-linux + with: + runTestsParameters: >- + ${{ matrix.run_tests_parameters }} + -d zend_extension=opcache.so + - name: Test Function JIT + uses: ./.github/actions/test-linux + with: + runTestsParameters: >- + ${{ matrix.run_tests_parameters }} + -d zend_extension=opcache.so + -d opcache.jit_buffer_size=16M + -d opcache.jit=1205 + MACOS: + needs: GENERATE_MATRIX + if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }} + strategy: + fail-fast: false + matrix: + branch: ${{ fromJson(needs.GENERATE_MATRIX.outputs.branches) }} + debug: [true, false] + zts: [true, false] + name: "${{ matrix.branch.name }}_MACOS_${{ matrix.debug && 'DEBUG' || 'RELEASE' }}_${{ matrix.zts && 'ZTS' || 'NTS' }}" + runs-on: macos-10.15 + steps: + - name: git checkout + uses: actions/checkout@v2 + with: + ref: ${{ matrix.branch.ref }} + - name: brew + uses: ./.github/actions/brew + - name: ./configure + uses: ./.github/actions/configure-macos + with: + configurationParameters: >- + --${{ matrix.debug && 'enable' || 'disable' }}-debug + --${{ matrix.zts && 'enable' || 'disable' }}-zts + - name: make + run: |- + export PATH="/usr/local/opt/bison/bin:$PATH" + make -j$(sysctl -n hw.logicalcpu) >/dev/null + - name: make install + run: sudo make install + - name: Test + uses: ./.github/actions/test-macos + - name: Test Tracing JIT + uses: ./.github/actions/test-macos + with: + runTestsParameters: >- + -d zend_extension=opcache.so + -d opcache.protect_memory=1 + -d opcache.jit_buffer_size=16M + - name: Test OpCache + uses: ./.github/actions/test-macos + with: + runTestsParameters: >- + -d zend_extension=opcache.so + -d opcache.protect_memory=1 + - name: Test Function JIT + uses: ./.github/actions/test-macos + with: + runTestsParameters: >- + -d zend_extension=opcache.so + -d opcache.protect_memory=1 + -d opcache.jit_buffer_size=16M + -d opcache.jit=1205 diff --git a/.gitignore b/.gitignore index 1eab1d32ac417..362de559b3240 100644 --- a/.gitignore +++ b/.gitignore @@ -274,6 +274,11 @@ tmp-php.ini /Zend/zend_dtrace_gen.h /Zend/zend_dtrace_gen.h.bak +# ------------------------------------------------------------------------------ +# GitHub actions cache +# ------------------------------------------------------------------------------ +/branch-commit-cache.json + # ------------------------------------------------------------------------------ # Special cases to invert previous ignore patterns # ------------------------------------------------------------------------------ diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a633ceae01cbf..e896c993896de 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -4,6 +4,7 @@ trigger: include: - PHP-7.4 - PHP-8.0 + - PHP-8.1 - master paths: exclude: @@ -19,6 +20,7 @@ schedules: include: - PHP-7.4 - PHP-8.0 + - PHP-8.1 - master jobs: @@ -27,14 +29,6 @@ jobs: configurationName: I386_DEBUG_ZTS configurationParameters: '--enable-debug --enable-zts' - ${{ if eq(variables['Build.Reason'], 'Schedule') }}: - - template: azure/job.yml - parameters: - configurationName: DEBUG_ZTS - configurationParameters: '--enable-debug --enable-zts' - - template: azure/job.yml - parameters: - configurationName: RELEASE_NTS - configurationParameters: '--disable-debug --disable-zts' - template: azure/i386/job.yml parameters: configurationName: I386_DEBUG_NTS @@ -47,33 +41,6 @@ jobs: parameters: configurationName: I386_RELEASE_ZTS configurationParameters: '--disable-debug --enable-zts' - - template: azure/macos/job.yml - parameters: - configurationName: MACOS_DEBUG_ZTS - configurationParameters: '--enable-debug --enable-zts' - - template: azure/macos/job.yml - parameters: - configurationName: MACOS_RELEASE_NTS - configurationParameters: '--disable-debug --disable-zts' - - template: azure/macos/job.yml - parameters: - configurationName: MACOS_RELEASE_ZTS - configurationParameters: '--disable-debug --enable-zts' - - template: azure/job.yml - parameters: - configurationName: DEBUG_ZTS_ASAN_UBSAN - configurationParameters: >- - --enable-debug --enable-zts - CFLAGS='-fsanitize=undefined,address -DZEND_TRACK_ARENA_ALLOC' - LDFLAGS='-fsanitize=undefined,address' - runTestsParameters: --asan - timeoutInMinutes: 360 - - template: azure/msan_job.yml - parameters: - configurationName: DEBUG_ZTS_MSAN - configurationParameters: '--enable-debug --enable-zts' - runTestsParameters: --msan - timeoutInMinutes: 90 - template: azure/community_job.yml parameters: configurationName: COMMUNITY diff --git a/azure/macos/brew.yml b/azure/macos/brew.yml deleted file mode 100644 index df4c5a532d740..0000000000000 --- a/azure/macos/brew.yml +++ /dev/null @@ -1,33 +0,0 @@ -parameters: - packages: '' - -steps: - - script: | - brew install pkg-config \ - autoconf \ - bison \ - re2c - displayName: 'Install Build Tools' - - script: | - brew install openssl@1.1 \ - krb5 \ - bzip2 \ - enchant \ - libffi \ - libpng \ - webp \ - freetype \ - intltool \ - icu4c \ - libiconv \ - zlib \ - t1lib \ - gd \ - libzip \ - gmp \ - tidyp \ - libxml2 \ - libxslt \ - postgresql - brew link icu4c gettext --force - displayName: 'Install Build Dependencies' diff --git a/azure/macos/job.yml b/azure/macos/job.yml deleted file mode 100644 index 39fe19268b9fd..0000000000000 --- a/azure/macos/job.yml +++ /dev/null @@ -1,99 +0,0 @@ -parameters: - configurationName: '' - configurationParameters: '' - -jobs: - - job: ${{ parameters.configurationName }} - pool: - vmImage: 'macOS-10.15' - steps: - - template: brew.yml - - script: | - export PATH="/usr/local/opt/bison/bin:$PATH" - export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/openssl@1.1/lib/pkgconfig" - export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/krb5/lib/pkgconfig" - export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/libffi/lib/pkgconfig" - export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/libxml2/lib/pkgconfig" - export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/libxslt/lib/pkgconfig" - export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/zlib/lib/pkgconfig" - export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/opt/icu4c/lib/pkgconfig" - ./buildconf --force - ./configure ${{ parameters.configurationParameters }} \ - --enable-option-checking=fatal \ - --prefix=/usr/local \ - --disable-phpdbg \ - --enable-fpm \ - --with-pdo-mysql=mysqlnd \ - --with-mysqli=mysqlnd \ - --with-pgsql=/usr/local/opt/libpq \ - --with-pdo-pgsql=/usr/local/opt/libpq \ - --with-pdo-sqlite \ - --without-pear \ - --enable-gd \ - --with-jpeg \ - --with-webp \ - --with-freetype \ - --enable-exif \ - --with-zip \ - --with-zlib \ - --enable-soap \ - --enable-xmlreader \ - --with-xsl \ - --with-tidy=/usr/local/opt/tidyp \ - --with-libxml \ - --enable-sysvsem \ - --enable-sysvshm \ - --enable-shmop \ - --enable-pcntl \ - --with-readline=/usr/local/opt/readline \ - --enable-mbstring \ - --with-curl \ - --with-gettext=/usr/local/opt/gettext \ - --enable-sockets \ - --with-bz2=/usr/local/opt/bzip2 \ - --with-openssl \ - --with-gmp=/usr/local/opt/gmp \ - --with-iconv=/usr/local/opt/libiconv \ - --enable-bcmath \ - --enable-calendar \ - --enable-ftp \ - --with-pspell=/usr/local/opt/aspell \ - --with-kerberos \ - --enable-sysvmsg \ - --with-ffi \ - --enable-zend-test \ - --enable-intl \ - --with-mhash \ - --with-sodium \ - --enable-dba \ - --enable-werror \ - --with-config-file-path=/etc \ - --with-config-file-scan-dir=/etc/php.d - displayName: 'Configure Build' - - script: | - export PATH="/usr/local/opt/bison/bin:$PATH" - make -j$(sysctl -n hw.ncpu) >/dev/null - displayName: 'Make Build' - - script: | - sudo make install - displayName: 'Install Build' - - template: test.yml - parameters: - configurationName: ${{ parameters.configurationName }} - - ${{ if eq(variables['Build.Reason'], 'Schedule') }}: - - template: test.yml - parameters: - configurationName: ${{ parameters.configurationName }} - runTestsName: 'OpCache' - runTestsParameters: -d zend_extension=opcache.so -d opcache.enable_cli=1 -d opcache.protect_memory=1 - - ${{ if eq(variables['Build.Reason'], 'Schedule') }}: - - template: test.yml - parameters: - configurationName: ${{ parameters.configurationName }} - runTestsName: 'Function JIT' - runTestsParameters: -d zend_extension=opcache.so -d opcache.enable_cli=1 -d opcache.protect_memory=1 -d opcache.jit_buffer_size=16M -d opcache.jit=1205 - - template: test.yml - parameters: - configurationName: ${{ parameters.configurationName }} - runTestsName: 'Tracing JIT' - runTestsParameters: -d zend_extension=opcache.so -d opcache.enable_cli=1 -d opcache.protect_memory=1 -d opcache.jit_buffer_size=16M diff --git a/azure/macos/test.yml b/azure/macos/test.yml deleted file mode 100644 index f139e53e404bf..0000000000000 --- a/azure/macos/test.yml +++ /dev/null @@ -1,29 +0,0 @@ -parameters: - runTestsName: '' - runTestsParameters: '' - -steps: - - script: | - export TEST_PHP_JUNIT=junit.xml - export REPORT_EXIT_STATUS=no - export SKIP_IO_CAPTURE_TESTS=1 - export CI_NO_IPV6=1 - rm -rf junit.xml | true - /usr/local/bin/php run-tests.php -P -q \ - -j$(sysctl -n hw.ncpu) \ - -g FAIL,XFAIL,BORK,WARN,LEAK,XLEAK,SKIP \ - --offline \ - --show-diff \ - --show-slow 1000 \ - --set-timeout 120 \ - ${{ parameters.runTestsParameters }} - displayName: 'Test ${{ parameters.configurationName }} ${{ parameters.runTestsName }}' - condition: or(succeeded(), failed()) - - task: PublishTestResults@2 - inputs: - testResultsFormat: 'JUnit' - testResultsFiles: junit.xml - testRunTitle: '${{ parameters.configurationName }} ${{ parameters.runTestsName }}' - failTaskOnFailedTests: true - displayName: 'Export ${{ parameters.configurationName }} ${{ parameters.runTestsName }} Results' - condition: or(succeeded(), failed()) From 9af3759987d66a9af9c62f0709ea62acb67d6af6 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Sun, 10 Apr 2022 01:10:25 +0200 Subject: [PATCH 21/78] Remove issue_comment trigger on nightly This was a left-over from the attept to trigger nightly via comment. --- .github/workflows/nightly.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 121308be6c551..1b847554afe9a 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -3,8 +3,6 @@ on: schedule: - cron: "0 1 * * *" workflow_dispatch: ~ - issue_comment: - types: [created] jobs: GENERATE_MATRIX: name: Generate Matrix From 323f3c6914da3fda8658eb7452117370846b1426 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 10 Apr 2022 10:41:20 +0200 Subject: [PATCH 22/78] Improve file/line information for narrowing warning Report the file/line of the opline rather than the include location. This should make issues like #8251 easier to debug. --- Zend/Optimizer/zend_inference.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Zend/Optimizer/zend_inference.c b/Zend/Optimizer/zend_inference.c index 4c75cf330a3b9..abb8bdfa50d55 100644 --- a/Zend/Optimizer/zend_inference.c +++ b/Zend/Optimizer/zend_inference.c @@ -1864,7 +1864,10 @@ static void emit_type_narrowing_warning(const zend_op_array *op_array, zend_ssa int def_op_num = ssa->vars[var].definition; const zend_op *def_opline = def_op_num >= 0 ? &op_array->opcodes[def_op_num] : NULL; const char *def_op_name = def_opline ? zend_get_opcode_name(def_opline->opcode) : "PHI"; - zend_error(E_WARNING, "Narrowing occurred during type inference of %s. Please file a bug report on bugs.php.net", def_op_name); + uint32_t lineno = def_opline ? def_opline->lineno : 0; + zend_error_at( + E_WARNING, op_array->filename, lineno, + "Narrowing occurred during type inference of %s. Please file a bug report on https://github.com/php/php-src/issues", def_op_name); } ZEND_API uint32_t zend_array_element_type(uint32_t t1, zend_uchar op_type, int write, int insert) From c72e9621ce3095e9de1cd6fdfec777ab27c05a06 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 10 Apr 2022 11:13:55 +0200 Subject: [PATCH 23/78] Improve type narrowing fix We need to explicitly model the null return type for property accesses on non-objects. --- Zend/Optimizer/zend_inference.c | 62 ++++----- ext/opcache/tests/opt/inference_001.phpt | 163 +++-------------------- 2 files changed, 52 insertions(+), 173 deletions(-) diff --git a/Zend/Optimizer/zend_inference.c b/Zend/Optimizer/zend_inference.c index abb8bdfa50d55..5f56342ed48f9 100644 --- a/Zend/Optimizer/zend_inference.c +++ b/Zend/Optimizer/zend_inference.c @@ -1764,11 +1764,6 @@ static uint32_t get_ssa_alias_types(zend_ssa_alias_kind alias) { (ssa_var_info[__var].type & MAY_BE_REF) \ == (__type & MAY_BE_REF)); \ if (ssa_var_info[__var].type & ~__type) { \ - if ((ssa_var_info[__var].type & ~__type & \ - ~(MAY_BE_RC1|MAY_BE_RCN)) == 0) { \ - ssa_var_info[__var].type |= __type; \ - break; \ - } \ emit_type_narrowing_warning(op_array, ssa, __var); \ return FAILURE; \ } \ @@ -3375,33 +3370,40 @@ static zend_always_inline int _zend_update_type_info( case ZEND_FETCH_OBJ_UNSET: case ZEND_FETCH_OBJ_FUNC_ARG: if (ssa_op->result_def >= 0) { - zend_property_info *prop_info = zend_fetch_prop_info(op_array, ssa, opline, ssa_op); - - tmp = zend_fetch_prop_type(script, prop_info, &ce); - if (opline->result_type == IS_VAR) { - tmp |= MAY_BE_REF | MAY_BE_INDIRECT; - } else if (!(opline->op1_type & (IS_VAR|IS_TMP_VAR)) || !(t1 & MAY_BE_RC1)) { - zend_class_entry *ce = NULL; - - if (opline->op1_type == IS_UNUSED) { - ce = op_array->scope; - } else if (ssa_op->op1_use >= 0 && !ssa->var_info[ssa_op->op1_use].is_instanceof) { - ce = ssa->var_info[ssa_op->op1_use].ce; - } - if (prop_info) { - /* FETCH_OBJ_R/IS for plain property increments reference counter, - so it can't be 1 */ - if (ce && !ce->create_object && !result_may_be_separated(ssa, ssa_op)) { - tmp &= ~MAY_BE_RC1; + uint32_t tmp = 0; + ce = NULL; + if (opline->op1_type != IS_UNUSED + && (t1 & (MAY_BE_ANY | MAY_BE_UNDEF) & ~MAY_BE_OBJECT)) { + tmp |= MAY_BE_NULL; + } + if (opline->op1_type == IS_UNUSED || (t1 & MAY_BE_OBJECT)) { + zend_property_info *prop_info = zend_fetch_prop_info(op_array, ssa, opline, ssa_op); + tmp |= zend_fetch_prop_type(script, prop_info, &ce); + if (opline->result_type == IS_VAR) { + tmp |= MAY_BE_REF | MAY_BE_INDIRECT; + } else if (!(opline->op1_type & (IS_VAR|IS_TMP_VAR)) || !(t1 & MAY_BE_RC1)) { + zend_class_entry *ce = NULL; + + if (opline->op1_type == IS_UNUSED) { + ce = op_array->scope; + } else if (ssa_op->op1_use >= 0 && !ssa->var_info[ssa_op->op1_use].is_instanceof) { + ce = ssa->var_info[ssa_op->op1_use].ce; } - } else { - if (ce && !ce->create_object && !ce->__get && !result_may_be_separated(ssa, ssa_op)) { - tmp &= ~MAY_BE_RC1; + if (prop_info) { + /* FETCH_OBJ_R/IS for plain property increments reference counter, + so it can't be 1 */ + if (ce && !ce->create_object && !result_may_be_separated(ssa, ssa_op)) { + tmp &= ~MAY_BE_RC1; + } + } else { + if (ce && !ce->create_object && !ce->__get && !result_may_be_separated(ssa, ssa_op)) { + tmp &= ~MAY_BE_RC1; + } + } + if (opline->opcode == ZEND_FETCH_OBJ_IS) { + /* IS check may return null for uninitialized typed property. */ + tmp |= MAY_BE_NULL; } - } - if (opline->opcode == ZEND_FETCH_OBJ_IS) { - /* IS check may return null for uninitialized typed property. */ - tmp |= MAY_BE_NULL; } } UPDATE_SSA_TYPE(tmp, ssa_op->result_def); diff --git a/ext/opcache/tests/opt/inference_001.phpt b/ext/opcache/tests/opt/inference_001.phpt index 2c7389573462f..1005d28408f9e 100644 --- a/ext/opcache/tests/opt/inference_001.phpt +++ b/ext/opcache/tests/opt/inference_001.phpt @@ -7,157 +7,34 @@ opcache.optimization_level=-1 --FILE-- $e; - $i += $a; - $j++; - $e; - $a == $Z + $a .= $i+= $a; - $j++; - $e; - $a == $Z + $j++; - $e; - $a == $Z + $a = $a + $b = $i += $a; + for ($i = 0; $i < 2; $i++) { + $obj->x; $obj = new stdClass; - $obj->prop1 = set_error_handler(function () { - $$GLOBALS['a'] = null; - }); - $obj->$a .= $i += $a; - $obj = new stdClass; - $obj->prop1 = $j++; - $e; - $a == $Z + $a = $a + $j++; - $e; - $a == $Z + $a = $a + $b = $aa = $a; } } test(); + +class Test { + public int $x = 1; +} + +function test2() { + for ($i = 0; $i < 2; $i++) { + $obj->x; + $obj = new Test; + } +} +test2(); ?> DONE --EXPECTF-- -Warning: Undefined variable $a in %sinference_001.php on line 6 - -Warning: Undefined variable $obj in %sinference_001.php on line 7 - -Warning: Undefined variable $e in %sinference_001.php on line 7 - -Warning: Attempt to read property "" on null in %sinference_001.php on line 7 - -Warning: Undefined variable $Z in %sinference_001.php on line 11 - -Warning: Undefined variable $Z in %sinference_001.php on line 14 - -Warning: Undefined variable $Z in %sinference_001.php on line 16 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 +Warning: Undefined variable $obj in %s on line %d -Warning: Array to string conversion in %sinference_001.php on line 19 +Warning: Attempt to read property "x" on null in %s on line %d -Warning: Array to string conversion in %sinference_001.php on line 19 +Warning: Undefined property: stdClass::$x in %s on line %d -Warning: Array to string conversion in %sinference_001.php on line 19 +Warning: Undefined variable $obj in %s on line %d -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Warning: Array to string conversion in %sinference_001.php on line 19 - -Fatal error: Uncaught TypeError: Unsupported operand types: null + string in %sinference_001.php:11 -Stack trace: -#0 %sinference_001.php(30): test() -#1 {main} - thrown in %sinference_001.php on line 11 +Warning: Attempt to read property "x" on null in %s on line %d +DONE From 5b048dd05cf2fb7922be87cb99805877eb5bd060 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 11 Apr 2022 11:42:01 +0300 Subject: [PATCH 24/78] Tracing JIT: Fixed incorrect assumption about stack slot type Fixes oss-fuzz #46404 --- ext/opcache/jit/zend_jit_internal.h | 3 +++ ext/opcache/jit/zend_jit_trace.c | 3 +++ ext/opcache/tests/jit/fetch_dim_r_014.phpt | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 ext/opcache/tests/jit/fetch_dim_r_014.phpt diff --git a/ext/opcache/jit/zend_jit_internal.h b/ext/opcache/jit/zend_jit_internal.h index 11a63cfb364c0..fcfc3080346f0 100644 --- a/ext/opcache/jit/zend_jit_internal.h +++ b/ext/opcache/jit/zend_jit_internal.h @@ -360,6 +360,9 @@ typedef union _zend_jit_trace_stack { (_stack)[_slot].reg = _reg; \ (_stack)[_slot].flags = _flags; \ } while (0) +#define RESET_STACK_MEM_TYPE(_stack, _slot) do { \ + (_stack)[_slot].mem_type = IS_UNKNOWN; \ + } while (0) /* trace info flags */ #define ZEND_JIT_TRACE_CHECK_INTERRUPT (1<<0) diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index adfcb6fa403be..2890f7ebfd75c 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -5939,6 +5939,9 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par } else { SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), type, (type == IS_UNKNOWN || !ra || !ra[ssa_op->result_def])); + if (ssa->var_info[ssa_op->result_def].type & MAY_BE_INDIRECT) { + RESET_STACK_MEM_TYPE(stack, EX_VAR_TO_NUM(opline->result.var)); + } if (type != IS_UNKNOWN) { ssa->var_info[ssa_op->result_def].type &= ~MAY_BE_GUARD; if (opline->opcode == ZEND_FETCH_THIS diff --git a/ext/opcache/tests/jit/fetch_dim_r_014.phpt b/ext/opcache/tests/jit/fetch_dim_r_014.phpt new file mode 100644 index 0000000000000..e910f11166a29 --- /dev/null +++ b/ext/opcache/tests/jit/fetch_dim_r_014.phpt @@ -0,0 +1,19 @@ +--TEST-- +JIT FETCH_DIM_R: 014 +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.file_update_protection=0 +opcache.jit_buffer_size=1M +--FILE-- + +DONE +--EXPECT-- +DONE From 3aaf2f6f897d879030e14ac048d6f4f288fe4564 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 11 Apr 2022 12:17:05 +0300 Subject: [PATCH 25/78] JIT: Fix memory lek Fixes oss-fuzz #46462 --- ext/opcache/jit/zend_jit_x86.dasc | 5 ++++- ext/opcache/tests/jit/mul_009.phpt | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 ext/opcache/tests/jit/mul_009.phpt diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index 3430baf0a0737..71eb54dfbc1f4 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -4940,7 +4940,10 @@ static int zend_jit_math_helper(dasm_State **Dst, | FREE_OP op1_type, op1, op1_info, 0, opline | FREE_OP op2_type, op2, op2_info, 0, opline if (may_throw) { - if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RX) { + if (opline->opcode == ZEND_ASSIGN_DIM_OP && (opline->op2_type & (IS_VAR|IS_TMP_VAR))) { + | MEM_OP2_1_ZTS cmp, aword, executor_globals, exception, 0, r0 + | jne ->exception_handler_free_op2 + } else if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RX) { zend_jit_check_exception_undef_result(Dst, opline); } else { zend_jit_check_exception(Dst); diff --git a/ext/opcache/tests/jit/mul_009.phpt b/ext/opcache/tests/jit/mul_009.phpt new file mode 100644 index 0000000000000..51789527115f2 --- /dev/null +++ b/ext/opcache/tests/jit/mul_009.phpt @@ -0,0 +1,20 @@ +--TEST-- +JIT MUL: 009 memory leak +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.file_update_protection=0 +opcache.jit_buffer_size=1M +opcache.protect_memory=1 +--FILE-- + +--EXPECTF-- +Warning: Undefined variable $y in %smul_009.php on line 3 + +Fatal error: Uncaught TypeError: Unsupported operand types: array * int in %smul_009.php:3 +Stack trace: +#0 {main} + thrown in %smul_009.php on line 3 \ No newline at end of file From 84c18f9f04cb9852d992194e613927154f765192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernd=20Holzm=C3=BCller?= Date: Sat, 9 Apr 2022 17:49:47 +0200 Subject: [PATCH 26/78] Preserve file-position when php://temp switches to temporary file Closes GH-8333. --- NEWS | 4 ++++ .../tests/streams/temp_stream_seek.phpt | 20 +++++++++++++++++++ main/streams/memory.c | 10 ++++++---- 3 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 ext/standard/tests/streams/temp_stream_seek.phpt diff --git a/NEWS b/NEWS index a28ed64e8c4d7..358fb5ca6f6eb 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,10 @@ PHP NEWS . Fixed bug GH-8267 (MySQLi uses unsupported format specifier on Windows). (cmb) +- Streams: + . Fixed php://temp does not preserve file-position when switched to temporary + file. (Bernd Holzmüller) + 14 Apr 2022, PHP 8.0.18 - Core: diff --git a/ext/standard/tests/streams/temp_stream_seek.phpt b/ext/standard/tests/streams/temp_stream_seek.phpt new file mode 100644 index 0000000000000..821c6b2784d7d --- /dev/null +++ b/ext/standard/tests/streams/temp_stream_seek.phpt @@ -0,0 +1,20 @@ +--TEST-- +BUG: php://temp does not preserve file-pointer once it switches from memory to temporary file +--FILE-- + +--EXPECT-- +string(16) "2222222222222222" +int(738) diff --git a/main/streams/memory.c b/main/streams/memory.c index 0def3b1a3d752..3d09d6d086ccc 100644 --- a/main/streams/memory.c +++ b/main/streams/memory.c @@ -375,10 +375,11 @@ static ssize_t php_stream_temp_write(php_stream *stream, const char *buf, size_t return -1; } if (php_stream_is(ts->innerstream, PHP_STREAM_IS_MEMORY)) { - size_t memsize; - char *membuf = php_stream_memory_get_buffer(ts->innerstream, &memsize); - - if (memsize + count >= ts->smax) { + zend_off_t pos = php_stream_tell(ts->innerstream); + + if (pos + count >= ts->smax) { + size_t memsize; + char *membuf = php_stream_memory_get_buffer(ts->innerstream, &memsize); php_stream *file = php_stream_fopen_temporary_file(ts->tmpdir, "php", NULL); if (file == NULL) { php_error_docref(NULL, E_WARNING, "Unable to create temporary file, Check permissions in temporary files directory."); @@ -388,6 +389,7 @@ static ssize_t php_stream_temp_write(php_stream *stream, const char *buf, size_t php_stream_free_enclosed(ts->innerstream, PHP_STREAM_FREE_CLOSE); ts->innerstream = file; php_stream_encloses(stream, ts->innerstream); + php_stream_seek(ts->innerstream, pos, SEEK_SET); } } return php_stream_write(ts->innerstream, buf, count); From 1a75269c8eb2c82505856d507f409c8c2dafc8a2 Mon Sep 17 00:00:00 2001 From: ryancaicse <73822648+ryancaicse@users.noreply.github.com> Date: Sun, 3 Apr 2022 23:28:44 +0800 Subject: [PATCH 27/78] Move locks in TSRM.c to prevent races Closes GH-8298. --- NEWS | 1 + TSRM/TSRM.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 358fb5ca6f6eb..b3f4351316e54 100644 --- a/NEWS +++ b/NEWS @@ -21,6 +21,7 @@ PHP NEWS . Fixed bug GH-8070 (memory leak of internal function attribute hash). (Tim Düsterhus) . Fixed bug GH-8160 (ZTS support on Alpine is broken). (Michael Voříšek) + . Fixed potential race condition during resource ID allocation. (ryancaicse) - Filter: . Fixed signedness confusion in php_filter_validate_domain(). (cmb) diff --git a/TSRM/TSRM.c b/TSRM/TSRM.c index c2a9130b5d4d4..1401ab2d88581 100644 --- a/TSRM/TSRM.c +++ b/TSRM/TSRM.c @@ -288,9 +288,9 @@ TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate tsrm_resource_type *_tmp; _tmp = (tsrm_resource_type *) realloc(resource_types_table, sizeof(tsrm_resource_type)*id_count); if (!_tmp) { - tsrm_mutex_unlock(tsmm_mutex); TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate storage for resource")); *rsrc_id = 0; + tsrm_mutex_unlock(tsmm_mutex); return 0; } resource_types_table = _tmp; @@ -331,10 +331,10 @@ TSRM_API ts_rsrc_id ts_allocate_fast_id(ts_rsrc_id *rsrc_id, size_t *offset, siz size = TSRM_ALIGNED_SIZE(size); if (tsrm_reserved_size - tsrm_reserved_pos < size) { - tsrm_mutex_unlock(tsmm_mutex); TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate space for fast resource")); *rsrc_id = 0; *offset = 0; + tsrm_mutex_unlock(tsmm_mutex); return 0; } @@ -346,9 +346,9 @@ TSRM_API ts_rsrc_id ts_allocate_fast_id(ts_rsrc_id *rsrc_id, size_t *offset, siz tsrm_resource_type *_tmp; _tmp = (tsrm_resource_type *) realloc(resource_types_table, sizeof(tsrm_resource_type)*id_count); if (!_tmp) { - tsrm_mutex_unlock(tsmm_mutex); TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate storage for resource")); *rsrc_id = 0; + tsrm_mutex_unlock(tsmm_mutex); return 0; } resource_types_table = _tmp; From 1a0514992d777d9d5bb9d430b779e4e7e7202a71 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Tue, 12 Apr 2022 11:31:33 +0100 Subject: [PATCH 28/78] Prep NEWS for 7.4.29 release --- NEWS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS b/NEWS index fa117f5185fa4..e63c141f04e72 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 7.4.29 +- Core: + . No source changes to this release. + Version number added for reproduction of Windows builds. 17 Feb 2022, PHP 7.4.28 From c14e2e4fc9a4621447f857422cd59ec8669ced10 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Tue, 12 Apr 2022 11:53:17 +0100 Subject: [PATCH 29/78] Add tz update into NEWS --- NEWS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS b/NEWS index e63c141f04e72..3c3c8249dcfbd 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,9 @@ PHP NEWS . No source changes to this release. Version number added for reproduction of Windows builds. +- Date: + . Updated to latest IANA timezone database (2022a). (Derick) + 17 Feb 2022, PHP 7.4.28 - Filter: From fbee73df14a661c3c50703b031c59721194f35e7 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Tue, 12 Apr 2022 15:41:55 +0100 Subject: [PATCH 30/78] Prepare for 7.4.30 --- NEWS | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 3c3c8249dcfbd..b4e26799750bd 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -?? ??? ????, PHP 7.4.29 +?? ??? ????, PHP 7.4.30 + + +14 Apr 2022, PHP 7.4.29 - Core: . No source changes to this release. From 33bb201b3eddbda0cc93c9cd1cb9adb4c77d0df2 Mon Sep 17 00:00:00 2001 From: Jakub Zelenka Date: Sat, 9 Apr 2022 13:20:07 +0100 Subject: [PATCH 31/78] Fix bug #76003: FPM /status reports wrong number of active processe The fix introduces early locking of scoreboard when it is updated which prevents the race condition causing an incorrect number of active processes being set. --- NEWS | 4 ++++ sapi/fpm/fpm/fpm_process_ctl.c | 35 ++++++++++++++++++--------------- sapi/fpm/fpm/fpm_request.c | 8 ++++++-- sapi/fpm/fpm/fpm_scoreboard.c | 36 ++++++++++++++++++++++++++++++++-- sapi/fpm/fpm/fpm_scoreboard.h | 3 +++ 5 files changed, 66 insertions(+), 20 deletions(-) diff --git a/NEWS b/NEWS index b3f4351316e54..9645c031c6132 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,10 @@ PHP NEWS . Fixed bug GH-8289 (Exceptions thrown within a yielded from iterator are not rethrown into the generator). (Bob) +- FPM: + . Fixed bug #76003 (FPM /status reports wrong number of active processe). + (Jakub Zelenka) + - MySQLi: . Fixed bug GH-8267 (MySQLi uses unsupported format specifier on Windows). (cmb) diff --git a/sapi/fpm/fpm/fpm_process_ctl.c b/sapi/fpm/fpm/fpm_process_ctl.c index a2f0f935e443c..4b8dca4690ccb 100644 --- a/sapi/fpm/fpm/fpm_process_ctl.c +++ b/sapi/fpm/fpm/fpm_process_ctl.c @@ -324,21 +324,6 @@ static void fpm_pctl_perform_idle_server_maintenance(struct timeval *now) /* {{{ if (wp->config == NULL) continue; - for (child = wp->children; child; child = child->next) { - if (fpm_request_is_idle(child)) { - if (last_idle_child == NULL) { - last_idle_child = child; - } else { - if (timercmp(&child->started, &last_idle_child->started, <)) { - last_idle_child = child; - } - } - idle++; - } else { - active++; - } - } - /* update status structure for all PMs */ if (wp->listen_address_domain == FPM_AF_INET) { if (0 > fpm_socket_get_listening_queue(wp->listening_socket, &cur_lq, NULL)) { @@ -356,7 +341,25 @@ static void fpm_pctl_perform_idle_server_maintenance(struct timeval *now) /* {{{ #endif } } - fpm_scoreboard_update(idle, active, cur_lq, -1, -1, -1, 0, FPM_SCOREBOARD_ACTION_SET, wp->scoreboard); + + fpm_scoreboard_update_begin(wp->scoreboard); + + for (child = wp->children; child; child = child->next) { + if (fpm_request_is_idle(child)) { + if (last_idle_child == NULL) { + last_idle_child = child; + } else { + if (timercmp(&child->started, &last_idle_child->started, <)) { + last_idle_child = child; + } + } + idle++; + } else { + active++; + } + } + + fpm_scoreboard_update_commit(idle, active, cur_lq, -1, -1, -1, 0, FPM_SCOREBOARD_ACTION_SET, wp->scoreboard); /* this is specific to PM_STYLE_ONDEMAND */ if (wp->config->pm == PM_STYLE_ONDEMAND) { diff --git a/sapi/fpm/fpm/fpm_request.c b/sapi/fpm/fpm/fpm_request.c index 0a6f6a7cfbf0d..4f51824138d4d 100644 --- a/sapi/fpm/fpm/fpm_request.c +++ b/sapi/fpm/fpm/fpm_request.c @@ -41,6 +41,8 @@ void fpm_request_accepting() /* {{{ */ fpm_clock_get(&now); + fpm_scoreboard_update_begin(NULL); + proc = fpm_scoreboard_proc_acquire(NULL, -1, 0); if (proc == NULL) { zlog(ZLOG_WARNING, "failed to acquire proc scoreboard"); @@ -52,7 +54,7 @@ void fpm_request_accepting() /* {{{ */ fpm_scoreboard_proc_release(proc); /* idle++, active-- */ - fpm_scoreboard_update(1, -1, 0, 0, 0, 0, 0, FPM_SCOREBOARD_ACTION_INC, NULL); + fpm_scoreboard_update_commit(1, -1, 0, 0, 0, 0, 0, FPM_SCOREBOARD_ACTION_INC, NULL); } /* }}} */ @@ -72,6 +74,8 @@ void fpm_request_reading_headers() /* {{{ */ times(&cpu); #endif + fpm_scoreboard_update_begin(NULL); + proc = fpm_scoreboard_proc_acquire(NULL, -1, 0); if (proc == NULL) { zlog(ZLOG_WARNING, "failed to acquire proc scoreboard"); @@ -95,7 +99,7 @@ void fpm_request_reading_headers() /* {{{ */ fpm_scoreboard_proc_release(proc); /* idle--, active++, request++ */ - fpm_scoreboard_update(-1, 1, 0, 0, 1, 0, 0, FPM_SCOREBOARD_ACTION_INC, NULL); + fpm_scoreboard_update_commit(-1, 1, 0, 0, 1, 0, 0, FPM_SCOREBOARD_ACTION_INC, NULL); } /* }}} */ diff --git a/sapi/fpm/fpm/fpm_scoreboard.c b/sapi/fpm/fpm/fpm_scoreboard.c index ec28af49d7c4b..bf847d9dcac98 100644 --- a/sapi/fpm/fpm/fpm_scoreboard.c +++ b/sapi/fpm/fpm/fpm_scoreboard.c @@ -74,18 +74,39 @@ int fpm_scoreboard_init_main() /* {{{ */ } /* }}} */ -void fpm_scoreboard_update(int idle, int active, int lq, int lq_len, int requests, int max_children_reached, int slow_rq, int action, struct fpm_scoreboard_s *scoreboard) /* {{{ */ +static struct fpm_scoreboard_s *fpm_scoreboard_get_for_update(struct fpm_scoreboard_s *scoreboard) /* {{{ */ { if (!scoreboard) { scoreboard = fpm_scoreboard; } if (!scoreboard) { zlog(ZLOG_WARNING, "Unable to update scoreboard: the SHM has not been found"); - return; } + return scoreboard; +} +/* }}} */ + +void fpm_scoreboard_update_begin(struct fpm_scoreboard_s *scoreboard) /* {{{ */ +{ + scoreboard = fpm_scoreboard_get_for_update(scoreboard); + if (!scoreboard) { + return; + } fpm_spinlock(&scoreboard->lock, 0); +} +/* }}} */ + +void fpm_scoreboard_update_commit( + int idle, int active, int lq, int lq_len, int requests, int max_children_reached, + int slow_rq, int action, struct fpm_scoreboard_s *scoreboard) /* {{{ */ +{ + scoreboard = fpm_scoreboard_get_for_update(scoreboard); + if (!scoreboard) { + return; + } + if (action == FPM_SCOREBOARD_ACTION_SET) { if (idle >= 0) { scoreboard->idle = idle; @@ -154,6 +175,17 @@ void fpm_scoreboard_update(int idle, int active, int lq, int lq_len, int request } /* }}} */ + +void fpm_scoreboard_update( + int idle, int active, int lq, int lq_len, int requests, int max_children_reached, + int slow_rq, int action, struct fpm_scoreboard_s *scoreboard) /* {{{ */ +{ + fpm_scoreboard_update_begin(scoreboard); + fpm_scoreboard_update_commit( + idle, active, lq, lq_len, requests, max_children_reached, slow_rq, action, scoreboard); +} +/* }}} */ + struct fpm_scoreboard_s *fpm_scoreboard_get() /* {{{*/ { return fpm_scoreboard; diff --git a/sapi/fpm/fpm/fpm_scoreboard.h b/sapi/fpm/fpm/fpm_scoreboard.h index e22d6d933a00a..6925094936495 100644 --- a/sapi/fpm/fpm/fpm_scoreboard.h +++ b/sapi/fpm/fpm/fpm_scoreboard.h @@ -73,7 +73,10 @@ struct fpm_scoreboard_s { int fpm_scoreboard_init_main(); int fpm_scoreboard_init_child(struct fpm_worker_pool_s *wp); +void fpm_scoreboard_update_begin(struct fpm_scoreboard_s *scoreboard); +void fpm_scoreboard_update_commit(int idle, int active, int lq, int lq_len, int requests, int max_children_reached, int slow_rq, int action, struct fpm_scoreboard_s *scoreboard); void fpm_scoreboard_update(int idle, int active, int lq, int lq_len, int requests, int max_children_reached, int slow_rq, int action, struct fpm_scoreboard_s *scoreboard); + struct fpm_scoreboard_s *fpm_scoreboard_get(); struct fpm_scoreboard_proc_s *fpm_scoreboard_proc_get(struct fpm_scoreboard_s *scoreboard, int child_index); struct fpm_scoreboard_proc_s *fpm_scoreboard_proc_get_from_child(struct fpm_child_s *child); From 5655f1abe3ca4326035a680f85232550ae756ebd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20D=C3=BCsterhus?= Date: Wed, 13 Apr 2022 09:33:15 +0200 Subject: [PATCH 32/78] Fix `--EXTENSIONS--` section for two tests in ext/zend_test The extension name got broken in e6cf583160f2054da92426e69143e80ee28e8e16. Closes GH-8357. --- ext/zend_test/tests/observer_bug81430_1.phpt | 2 +- ext/zend_test/tests/observer_bug81430_2.phpt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/zend_test/tests/observer_bug81430_1.phpt b/ext/zend_test/tests/observer_bug81430_1.phpt index 1d1e3c4256e0e..cac53ef70cbbb 100644 --- a/ext/zend_test/tests/observer_bug81430_1.phpt +++ b/ext/zend_test/tests/observer_bug81430_1.phpt @@ -1,7 +1,7 @@ --TEST-- Bug #81430 (Attribute instantiation frame accessing invalid frame pointer) --EXTENSIONS-- -zend-test +zend_test --INI-- memory_limit=20M zend_test.observer.enabled=1 diff --git a/ext/zend_test/tests/observer_bug81430_2.phpt b/ext/zend_test/tests/observer_bug81430_2.phpt index a575fb9d7a038..4d56248a80f34 100644 --- a/ext/zend_test/tests/observer_bug81430_2.phpt +++ b/ext/zend_test/tests/observer_bug81430_2.phpt @@ -1,7 +1,7 @@ --TEST-- Bug #81430 (Attribute instantiation leaves dangling execute_data pointer) --EXTENSIONS-- -zend-test +zend_test --INI-- memory_limit=20M zend_test.observer.enabled=1 From 16bf8331e0c3706b589af94faab8f96deaa06bb0 Mon Sep 17 00:00:00 2001 From: Mikko Pesari Date: Wed, 13 Apr 2022 13:50:35 +0300 Subject: [PATCH 33/78] Fix openssl_csr_export() stub Closes GH-8362. --- ext/openssl/openssl.stub.php | 2 +- ext/openssl/openssl_arginfo.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/openssl/openssl.stub.php b/ext/openssl/openssl.stub.php index 9bcd35ac405ff..fd2b324034aa9 100644 --- a/ext/openssl/openssl.stub.php +++ b/ext/openssl/openssl.stub.php @@ -50,7 +50,7 @@ function openssl_pkcs12_read(string $pkcs12, &$certificates, string $passphrase) function openssl_csr_export_to_file(OpenSSLCertificateSigningRequest|string $csr, string $output_filename, bool $no_text = true): bool {} -/** @param OpenSSLAsymmetricKey $output */ +/** @param string $output */ function openssl_csr_export(OpenSSLCertificateSigningRequest|string $csr, &$output, bool $no_text = true): bool {} /** @param OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $private_key */ diff --git a/ext/openssl/openssl_arginfo.h b/ext/openssl/openssl_arginfo.h index 50d27fb6d83ec..8ba1979f9fe92 100644 --- a/ext/openssl/openssl_arginfo.h +++ b/ext/openssl/openssl_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: b58bd453ee5bedc500fe0e81c00c6a8e0eca85a0 */ + * Stub hash: 90fe9bfde63940e050f74dd9dccae7773fc57eff */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_openssl_x509_export_to_file, 0, 2, _IS_BOOL, 0) ZEND_ARG_OBJ_TYPE_MASK(0, certificate, OpenSSLCertificate, MAY_BE_STRING, NULL) From cd90ddca8544ad0edcd0957d7a071789cc8607ca Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Thu, 14 Apr 2022 09:35:37 +0200 Subject: [PATCH 34/78] Run nightly on php org only unless triggered via workflow_dispatch --- .github/workflows/nightly.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 1b847554afe9a..b201994b58497 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -6,6 +6,7 @@ on: jobs: GENERATE_MATRIX: name: Generate Matrix + if: github.repository_owner == 'php' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest outputs: branches: ${{ steps.set-matrix.outputs.branches }} From e3f2846bbb8920b2b5e1f9f10f5a24e692456053 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Tue, 12 Apr 2022 14:37:00 +0200 Subject: [PATCH 35/78] Fix opcache testing in CI Closes GH-8350 --- .github/actions/install-linux/action.yml | 2 -- .github/workflows/nightly.yml | 6 ++++++ .github/workflows/push.yml | 6 +++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/actions/install-linux/action.yml b/.github/actions/install-linux/action.yml index 6db48f0ec3e1d..e0f6726dbd1d3 100644 --- a/.github/actions/install-linux/action.yml +++ b/.github/actions/install-linux/action.yml @@ -10,5 +10,3 @@ runs: sudo chmod 777 /etc/php.d echo mysqli.default_socket=/var/run/mysqld/mysqld.sock > /etc/php.d/mysqli.ini echo pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock > /etc/php.d/pdo_mysql.ini - echo opcache.enable_cli=1 >> /etc/php.d/opcache.ini - echo opcache.protect_memory=1 >> /etc/php.d/opcache.ini diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index b201994b58497..67259e503b1db 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -75,6 +75,7 @@ jobs: runTestsParameters: >- ${{ matrix.run_tests_parameters }} -d zend_extension=opcache.so + -d opcache.enable_cli=1 -d opcache.jit_buffer_size=16M - name: Test OpCache uses: ./.github/actions/test-linux @@ -82,12 +83,14 @@ jobs: runTestsParameters: >- ${{ matrix.run_tests_parameters }} -d zend_extension=opcache.so + -d opcache.enable_cli=1 - name: Test Function JIT uses: ./.github/actions/test-linux with: runTestsParameters: >- ${{ matrix.run_tests_parameters }} -d zend_extension=opcache.so + -d opcache.enable_cli=1 -d opcache.jit_buffer_size=16M -d opcache.jit=1205 MACOS: @@ -127,6 +130,7 @@ jobs: with: runTestsParameters: >- -d zend_extension=opcache.so + -d opcache.enable_cli=1 -d opcache.protect_memory=1 -d opcache.jit_buffer_size=16M - name: Test OpCache @@ -134,12 +138,14 @@ jobs: with: runTestsParameters: >- -d zend_extension=opcache.so + -d opcache.enable_cli=1 -d opcache.protect_memory=1 - name: Test Function JIT uses: ./.github/actions/test-macos with: runTestsParameters: >- -d zend_extension=opcache.so + -d opcache.enable_cli=1 -d opcache.protect_memory=1 -d opcache.jit_buffer_size=16M -d opcache.jit=1205 diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 7e348802b1e6e..4e2879a8ab517 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -53,7 +53,10 @@ jobs: - name: Test Tracing JIT uses: ./.github/actions/test-linux with: - runTestsParameters: -d zend_extension=opcache.so -d opcache.jit_buffer_size=16M + runTestsParameters: >- + -d zend_extension=opcache.so + -d opcache.enable_cli=1 + -d opcache.jit_buffer_size=16M MACOS_DEBUG_NTS: runs-on: macos-10.15 steps: @@ -78,5 +81,6 @@ jobs: with: runTestsParameters: >- -d zend_extension=opcache.so + -d opcache.enable_cli=1 -d opcache.protect_memory=1 -d opcache.jit_buffer_size=16M From 287c8a86b4201322163ae6bae1d0fa2b21f349b1 Mon Sep 17 00:00:00 2001 From: Cody Mann Date: Sun, 6 Mar 2022 15:02:16 -0600 Subject: [PATCH 36/78] GH-7979: iterator advances when checking if valid --- ext/date/php_date.c | 32 +++++++----- .../tests/DatePeriod_no_advance_on_valid.phpt | 51 +++++++++++++++++++ 2 files changed, 71 insertions(+), 12 deletions(-) create mode 100644 ext/date/tests/DatePeriod_no_advance_on_valid.phpt diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 2d5cffb963667..270d507a92298 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1451,16 +1451,6 @@ static int date_period_it_has_more(zend_object_iterator *iter) { date_period_it *iterator = (date_period_it *)iter; php_period_obj *object = Z_PHPPERIOD_P(&iterator->intern.data); - timelib_time *it_time = object->current; - - /* apply modification if it's not the first iteration */ - if (!object->include_start_date || iterator->current_index > 0) { - it_time->have_relative = 1; - it_time->relative = *object->interval; - it_time->sse_uptodate = 0; - timelib_update_ts(it_time, NULL); - timelib_update_from_sse(it_time); - } if (object->end) { return object->current->sse < object->end->sse ? SUCCESS : FAILURE; @@ -1505,9 +1495,17 @@ static void date_period_it_current_key(zend_object_iterator *iter, zval *key) /* {{{ date_period_it_move_forward */ static void date_period_it_move_forward(zend_object_iterator *iter) { - date_period_it *iterator = (date_period_it *)iter; + date_period_it *iterator = (date_period_it *)iter; + php_period_obj *object = Z_PHPPERIOD_P(&iterator->intern.data); + timelib_time *it_time = object->current; + + it_time->have_relative = 1; + it_time->relative = *object->interval; + it_time->sse_uptodate = 0; + timelib_update_ts(it_time, NULL); + timelib_update_from_sse(it_time); - iterator->current_index++; + iterator->current_index++; date_period_it_invalidate_current(iter); } /* }}} */ @@ -1525,7 +1523,17 @@ static void date_period_it_rewind(zend_object_iterator *iter) zend_throw_error(NULL, "DatePeriod has not been initialized correctly"); return; } + iterator->object->current = timelib_time_clone(iterator->object->start); + + if (!iterator->object->include_start_date) { + iterator->object->current->have_relative = 1; + iterator->object->current->relative = *iterator->object->interval; + iterator->object->current->sse_uptodate = 0; + timelib_update_ts(iterator->object->current, NULL); + timelib_update_from_sse(iterator->object->current); + } + date_period_it_invalidate_current(iter); } /* }}} */ diff --git a/ext/date/tests/DatePeriod_no_advance_on_valid.phpt b/ext/date/tests/DatePeriod_no_advance_on_valid.phpt new file mode 100644 index 0000000000000..dce1e9f6eb701 --- /dev/null +++ b/ext/date/tests/DatePeriod_no_advance_on_valid.phpt @@ -0,0 +1,51 @@ +--TEST-- +Date Period iterators do not advance on `valid()` +--FILE-- +getIterator(); + +foreach ($iterator as $item) { + echo $item->format('Y-m-d') . "\n"; +} + +echo "---------STEP 2\n"; + +foreach ($iterator as $item) { + $iterator->valid(); + echo $item->format('Y-m-d') . "\n"; +} + +$period = new DatePeriod($start, $interval, $end, DatePeriod::EXCLUDE_START_DATE); +$iterator = $period->getIterator(); + +echo "---------STEP 3\n"; + +foreach ($iterator as $item) { + echo $item->format('Y-m-d') . "\n"; +} + +echo "---------STEP 4\n"; + +foreach ($iterator as $item) { + $iterator->valid(); + echo $item->format('Y-m-d') . "\n"; +} +--EXPECT-- +2022-01-01 +2022-01-02 +2022-01-03 +---------STEP 2 +2022-01-01 +2022-01-02 +2022-01-03 +---------STEP 3 +2022-01-02 +2022-01-03 +---------STEP 4 +2022-01-02 +2022-01-03 From 24085d0192240aa7102ca5e4cc5dfc2aecb2fa3c Mon Sep 17 00:00:00 2001 From: Cody Mann Date: Mon, 28 Mar 2022 17:05:44 -0500 Subject: [PATCH 37/78] style/readability updates --- ext/date/php_date.c | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 270d507a92298..24b6b911368f0 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1495,17 +1495,17 @@ static void date_period_it_current_key(zend_object_iterator *iter, zval *key) /* {{{ date_period_it_move_forward */ static void date_period_it_move_forward(zend_object_iterator *iter) { - date_period_it *iterator = (date_period_it *)iter; - php_period_obj *object = Z_PHPPERIOD_P(&iterator->intern.data); - timelib_time *it_time = object->current; + date_period_it *iterator = (date_period_it *)iter; + php_period_obj *object = Z_PHPPERIOD_P(&iterator->intern.data); + timelib_time *it_time = object->current; - it_time->have_relative = 1; - it_time->relative = *object->interval; - it_time->sse_uptodate = 0; - timelib_update_ts(it_time, NULL); - timelib_update_from_sse(it_time); + it_time->have_relative = 1; + it_time->relative = *object->interval; + it_time->sse_uptodate = 0; + timelib_update_ts(it_time, NULL); + timelib_update_from_sse(it_time); - iterator->current_index++; + iterator->current_index++; date_period_it_invalidate_current(iter); } /* }}} */ @@ -1526,13 +1526,16 @@ static void date_period_it_rewind(zend_object_iterator *iter) iterator->object->current = timelib_time_clone(iterator->object->start); - if (!iterator->object->include_start_date) { - iterator->object->current->have_relative = 1; - iterator->object->current->relative = *iterator->object->interval; - iterator->object->current->sse_uptodate = 0; - timelib_update_ts(iterator->object->current, NULL); - timelib_update_from_sse(iterator->object->current); - } + if (!iterator->object->include_start_date) { + timelib_time *it_time = iterator->object->current; + + it_time->have_relative = 1; + it_time->relative = *iterator->object->interval; + it_time->sse_uptodate = 0; + + timelib_update_ts(it_time, NULL); + timelib_update_from_sse(it_time); + } date_period_it_invalidate_current(iter); } From e38d300a70c66775e540a2e7a7e39b0f24c81dfa Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Thu, 14 Apr 2022 10:32:10 +0100 Subject: [PATCH 38/78] Refactor code to avoid duplication --- NEWS | 4 ++++ ext/date/php_date.c | 24 +++++++++---------- .../tests/DatePeriod_no_advance_on_valid.phpt | 3 ++- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/NEWS b/NEWS index 9645c031c6132..79ff4202e2ef4 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,10 @@ PHP NEWS . Fixed bug GH-8289 (Exceptions thrown within a yielded from iterator are not rethrown into the generator). (Bob) +- Date: + . Fixed bug GH-7979 (DatePeriod iterator advances when checking if valid). + (Derick, Cody Mann) + - FPM: . Fixed bug #76003 (FPM /status reports wrong number of active processe). (Jakub Zelenka) diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 24b6b911368f0..5d0b57eab25a9 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1492,6 +1492,15 @@ static void date_period_it_current_key(zend_object_iterator *iter, zval *key) } /* }}} */ +static void date_period_advance(timelib_time *it_time, timelib_rel_time *interval) +{ + it_time->have_relative = 1; + it_time->relative = *interval; + it_time->sse_uptodate = 0; + timelib_update_ts(it_time, NULL); + timelib_update_from_sse(it_time); +} + /* {{{ date_period_it_move_forward */ static void date_period_it_move_forward(zend_object_iterator *iter) { @@ -1499,11 +1508,7 @@ static void date_period_it_move_forward(zend_object_iterator *iter) php_period_obj *object = Z_PHPPERIOD_P(&iterator->intern.data); timelib_time *it_time = object->current; - it_time->have_relative = 1; - it_time->relative = *object->interval; - it_time->sse_uptodate = 0; - timelib_update_ts(it_time, NULL); - timelib_update_from_sse(it_time); + date_period_advance(it_time, object->interval); iterator->current_index++; date_period_it_invalidate_current(iter); @@ -1527,14 +1532,7 @@ static void date_period_it_rewind(zend_object_iterator *iter) iterator->object->current = timelib_time_clone(iterator->object->start); if (!iterator->object->include_start_date) { - timelib_time *it_time = iterator->object->current; - - it_time->have_relative = 1; - it_time->relative = *iterator->object->interval; - it_time->sse_uptodate = 0; - - timelib_update_ts(it_time, NULL); - timelib_update_from_sse(it_time); + date_period_advance(iterator->object->current, iterator->object->interval); } date_period_it_invalidate_current(iter); diff --git a/ext/date/tests/DatePeriod_no_advance_on_valid.phpt b/ext/date/tests/DatePeriod_no_advance_on_valid.phpt index dce1e9f6eb701..6a8a9d0f5d04a 100644 --- a/ext/date/tests/DatePeriod_no_advance_on_valid.phpt +++ b/ext/date/tests/DatePeriod_no_advance_on_valid.phpt @@ -1,5 +1,5 @@ --TEST-- -Date Period iterators do not advance on `valid()` +Date Period iterators do not advance on valid() --FILE-- valid(); echo $item->format('Y-m-d') . "\n"; } +?> --EXPECT-- 2022-01-01 2022-01-02 From 1762a879323177b4a6e6b597b48bdf53a052d345 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Thu, 14 Apr 2022 16:07:36 +0200 Subject: [PATCH 39/78] Fix GH-8366: ArrayIterator may leak when calling __construct() When we detach an iterator, we also have to delete it. Closes GH-8374. --- NEWS | 4 ++++ ext/spl/spl_array.c | 5 ++++- ext/spl/tests/gh8366.phpt | 9 +++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 ext/spl/tests/gh8366.phpt diff --git a/NEWS b/NEWS index 79ff4202e2ef4..a04955990868f 100644 --- a/NEWS +++ b/NEWS @@ -18,6 +18,10 @@ PHP NEWS . Fixed bug GH-8267 (MySQLi uses unsupported format specifier on Windows). (cmb) +- SPL: + . Fixed bug GH-8366 (ArrayIterator may leak when calling __construct()). + (cmb) + - Streams: . Fixed php://temp does not preserve file-position when switched to temporary file. (Bernd Holzmüller) diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index 9c8f95ee78481..c8008e6b22abe 100644 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -1129,7 +1129,10 @@ static void spl_array_set_array(zval *object, spl_array_object *intern, zval *ar intern->ar_flags &= ~SPL_ARRAY_IS_SELF & ~SPL_ARRAY_USE_OTHER; intern->ar_flags |= ar_flags; - intern->ht_iter = (uint32_t)-1; + if (intern->ht_iter != (uint32_t)-1) { + zend_hash_iterator_del(intern->ht_iter); + intern->ht_iter = (uint32_t)-1; + } } /* }}} */ diff --git a/ext/spl/tests/gh8366.phpt b/ext/spl/tests/gh8366.phpt new file mode 100644 index 0000000000000..1da5360cc96b5 --- /dev/null +++ b/ext/spl/tests/gh8366.phpt @@ -0,0 +1,9 @@ +--TEST-- +Bug GH-8366 (ArrayIterator may leak when calling __construct()) +--FILE-- +__construct([]); +?> +--EXPECT-- From b08aac0451d4f421be3cbfea235ac61613e07196 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 15 Apr 2022 22:14:44 +0200 Subject: [PATCH 40/78] Fix inference for assignment of known object to reference We cannot retain the ce information in that case, we have to assume the ce may change indirectly through the reference. Fixes oss-fuzz #46720. --- Zend/tests/assign_obj_to_ref_inference.phpt | 21 +++++++++++++++++++++ ext/opcache/Optimizer/zend_inference.c | 6 +++++- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 Zend/tests/assign_obj_to_ref_inference.phpt diff --git a/Zend/tests/assign_obj_to_ref_inference.phpt b/Zend/tests/assign_obj_to_ref_inference.phpt new file mode 100644 index 0000000000000..3ed788715a8d6 --- /dev/null +++ b/Zend/tests/assign_obj_to_ref_inference.phpt @@ -0,0 +1,21 @@ +--TEST-- +Assigning an object of known type to a reference variable +--FILE-- +x = 3.141; + var_dump(is_float($o->x)); +} +test(); + +?> +--EXPECT-- +bool(true) diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index ca3b7dc2401b0..9e17e132e3626 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -2740,7 +2740,11 @@ static zend_always_inline int _zend_update_type_info( tmp |= MAY_BE_DOUBLE; } UPDATE_SSA_TYPE(tmp, ssa_op->op1_def); - COPY_SSA_OBJ_TYPE(ssa_op->op2_use, ssa_op->op1_def); + if (tmp & MAY_BE_REF) { + UPDATE_SSA_OBJ_TYPE(NULL, 0, ssa_op->op1_def); + } else { + COPY_SSA_OBJ_TYPE(ssa_op->op2_use, ssa_op->op1_def); + } } if (ssa_op->result_def >= 0) { if (tmp & MAY_BE_REF) { From 41f33b9dc37bd642e7c77101df4b7fa01970c3fa Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 15 Apr 2022 22:36:13 +0200 Subject: [PATCH 41/78] Don't use CE info from pi node for MAY_BE_REF var Once again, the actual class type may be reassigned indirectly. --- Zend/tests/assign_obj_to_ref_inference.phpt | 16 ++++++++++++++-- ext/opcache/Optimizer/zend_inference.c | 6 +++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Zend/tests/assign_obj_to_ref_inference.phpt b/Zend/tests/assign_obj_to_ref_inference.phpt index 3ed788715a8d6..ecfc517b1e7f3 100644 --- a/Zend/tests/assign_obj_to_ref_inference.phpt +++ b/Zend/tests/assign_obj_to_ref_inference.phpt @@ -7,15 +7,27 @@ class Test { public int $x = 42; } -function test() { +function test1() { $r =& $o; $o = new Test; $r = new stdClass; $r->x = 3.141; var_dump(is_float($o->x)); } -test(); + +function test2($o) { + $r =& $o; + if ($o instanceof Test) { + $r = new stdClass; + $r->x = 3.141; + var_dump(is_float($o->x)); + } +} + +test1(); +test2(new Test); ?> --EXPECT-- bool(true) +bool(true) diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index 9e17e132e3626..4b52f468a0957 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -3629,7 +3629,11 @@ int zend_infer_types_ex(const zend_op_array *op_array, const zend_script *script } UPDATE_SSA_TYPE(tmp, j); - UPDATE_SSA_OBJ_TYPE(ce, is_instanceof, j); + if (tmp & MAY_BE_REF) { + UPDATE_SSA_OBJ_TYPE(NULL, 0, j); + } else { + UPDATE_SSA_OBJ_TYPE(ce, is_instanceof, j); + } } else { int first = 1; int is_instanceof = 0; From 5d072578cd0e9f10c583f4ceadf1f3f3fc1ac732 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 15 Apr 2022 23:00:43 +0200 Subject: [PATCH 42/78] Don't use CE for by-ref arguments --- Zend/tests/assign_obj_to_ref_inference.phpt | 9 +++++++++ ext/opcache/Optimizer/zend_inference.c | 1 + 2 files changed, 10 insertions(+) diff --git a/Zend/tests/assign_obj_to_ref_inference.phpt b/Zend/tests/assign_obj_to_ref_inference.phpt index ecfc517b1e7f3..5a91210371aec 100644 --- a/Zend/tests/assign_obj_to_ref_inference.phpt +++ b/Zend/tests/assign_obj_to_ref_inference.phpt @@ -24,10 +24,19 @@ function test2($o) { } } +function test3(Test &$o) { + $GLOBALS['r'] = new stdClass; + $GLOBALS['r']->x = 3.141; + var_dump(is_float($o->x)); +} + test1(); test2(new Test); +$r = new Test; +test3($r); ?> --EXPECT-- bool(true) bool(true) +bool(true) diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index 4b52f468a0957..53a6408b90457 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -2936,6 +2936,7 @@ static zend_always_inline int _zend_update_type_info( tmp = zend_fetch_arg_info_type(script, arg_info, &ce); if (ZEND_ARG_SEND_MODE(arg_info)) { tmp |= MAY_BE_REF; + ce = NULL; } if (opline->opcode == ZEND_RECV_VARIADIC) { From d16d251e2047b8364a188f676452dc2c1f6f42ab Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 15 Apr 2022 23:11:47 +0200 Subject: [PATCH 43/78] Move MAY_BE_REF check into COPY_SSA_OBJ_TYPE ZEND_ASSIGN is not the only place where this is relevant, so handle it generically inside COPY_SSA_OBJ_TYPE instead. --- ext/opcache/Optimizer/zend_inference.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index 53a6408b90457..119ee91cd625f 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -1741,7 +1741,7 @@ static uint32_t get_ssa_alias_types(zend_ssa_alias_kind alias) { #define COPY_SSA_OBJ_TYPE(from_var, to_var) do { \ if ((from_var) >= 0 && (ssa_var_info[(from_var)].type & MAY_BE_OBJECT) \ - && ssa_var_info[(from_var)].ce) { \ + && ssa_var_info[(from_var)].ce && !(ssa_var_info[(to_var)].type & MAY_BE_REF)) { \ UPDATE_SSA_OBJ_TYPE(ssa_var_info[(from_var)].ce, \ ssa_var_info[(from_var)].is_instanceof, (to_var)); \ } else { \ @@ -2740,11 +2740,7 @@ static zend_always_inline int _zend_update_type_info( tmp |= MAY_BE_DOUBLE; } UPDATE_SSA_TYPE(tmp, ssa_op->op1_def); - if (tmp & MAY_BE_REF) { - UPDATE_SSA_OBJ_TYPE(NULL, 0, ssa_op->op1_def); - } else { - COPY_SSA_OBJ_TYPE(ssa_op->op2_use, ssa_op->op1_def); - } + COPY_SSA_OBJ_TYPE(ssa_op->op2_use, ssa_op->op1_def); } if (ssa_op->result_def >= 0) { if (tmp & MAY_BE_REF) { From fc9fecbd09b107c428e67e6ec68c3ca6c029a67d Mon Sep 17 00:00:00 2001 From: David Carlier Date: Fri, 15 Apr 2022 20:31:22 +0100 Subject: [PATCH 44/78] Fix FPM zlog warning with var being uninitialized --- sapi/fpm/fpm/zlog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapi/fpm/fpm/zlog.c b/sapi/fpm/fpm/zlog.c index 0938f08e89de4..22f62b3cabe73 100644 --- a/sapi/fpm/fpm/zlog.c +++ b/sapi/fpm/fpm/zlog.c @@ -348,7 +348,7 @@ static ssize_t zlog_stream_direct_write( static inline ssize_t zlog_stream_unbuffered_write( struct zlog_stream *stream, const char *buf, size_t len) /* {{{ */ { - const char *append; + const char *append = NULL; size_t append_len = 0, required_len, reserved_len; ssize_t written; From 2f0918c638cbba0f5d36b9b2f3d0aa8cf95651c9 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Fri, 8 Apr 2022 19:14:18 +0100 Subject: [PATCH 45/78] Fix FPM socket clean up reallocation clang build warning --- sapi/fpm/fpm/fpm_sockets.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/sapi/fpm/fpm/fpm_sockets.c b/sapi/fpm/fpm/fpm_sockets.c index 99205a8fcf968..c2b4ea1c64a05 100644 --- a/sapi/fpm/fpm/fpm_sockets.c +++ b/sapi/fpm/fpm/fpm_sockets.c @@ -65,10 +65,18 @@ static void fpm_sockets_cleanup(int which, void *arg) /* {{{ */ close(ls->sock); } else { /* on PARENT EXEC we want socket fds to be inherited through environment variable */ char fd[32]; + char *tmpenv_value; sprintf(fd, "%d", ls->sock); socket_set_buf = (i % FPM_ENV_SOCKET_SET_SIZE == 0 && i) ? 1 : 0; - env_value = realloc(env_value, p + (p ? 1 : 0) + strlen(ls->key) + 1 + strlen(fd) + socket_set_buf + 1); + tmpenv_value = realloc(env_value, p + (p ? 1 : 0) + strlen(ls->key) + 1 + strlen(fd) + socket_set_buf + 1); + if (!tmpenv_value) { + zlog(ZLOG_SYSERROR, "failure to inherit data on parent exec for socket `%s` due to memory allocation failure", ls->key); + free(ls->key); + break; + } + + env_value = tmpenv_value; if (i % FPM_ENV_SOCKET_SET_SIZE == 0) { socket_set[socket_set_count] = p + socket_set_buf; From b0ab5d0fb07bec809e63b7655f67e976bab5c8d3 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 15 Apr 2022 23:53:26 +0200 Subject: [PATCH 46/78] Don't set ce for by-ref return type For the case where we upgrade a prototype to a possible by-ref return from an inheriting method. --- Zend/Optimizer/zend_func_info.c | 1 + 1 file changed, 1 insertion(+) diff --git a/Zend/Optimizer/zend_func_info.c b/Zend/Optimizer/zend_func_info.c index 16e09d8337d7b..c84ef70e1d7f1 100644 --- a/Zend/Optimizer/zend_func_info.c +++ b/Zend/Optimizer/zend_func_info.c @@ -186,6 +186,7 @@ ZEND_API uint32_t zend_get_func_info( /* It's allowed to override a method that return non-reference with a method that returns a reference */ if (call_info->is_prototype && (ret & ~MAY_BE_REF)) { ret |= MAY_BE_REF; + *ce = NULL; } } } From 04e59c916f12b322ac55f22314e31bd0176d01cb Mon Sep 17 00:00:00 2001 From: Alex Dowad Date: Fri, 15 Apr 2022 15:57:35 +0200 Subject: [PATCH 47/78] Error handling for UTF-8 complies with WHATWG specification MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In 7502c86342, I adjusted the number of error markers emitted on invalid UTF-8 text to be more consistent with mbstring's behavior on other text encodings (generally, it emits one error marker for one unexpected byte). I didn't expect that anybody would actually care one way or the other, but felt that it was better to be consistent than not. Later, Martin Auswöger kindly pointed out that the WHATWG encoding specification, which governs how various text encodings are handled by web browsers, does actually specify how many error markers should be generated for any given piece of invalid UTF-8 text. Until now, we have never really paid much attention to the WHATWG specification, but we do want to comply with as many relevant specifications as possible. And since PHP is commonly used for web applications, compatibility with the behavior of web browsers is obviously a good thing. --- NEWS | 4 ++ ext/mbstring/libmbfl/filters/mbfilter_utf8.c | 16 ++---- .../tests/illformed_utf_sequences.phpt | 18 +++--- ext/mbstring/tests/utf8_error_handling.phpt | 56 +++++++++++++++++++ ext/mbstring/tests/utf_encodings.phpt | 16 +++--- 5 files changed, 81 insertions(+), 29 deletions(-) create mode 100644 ext/mbstring/tests/utf8_error_handling.phpt diff --git a/NEWS b/NEWS index 61c8ee41dae9d..effe93adba390 100644 --- a/NEWS +++ b/NEWS @@ -22,6 +22,10 @@ PHP NEWS - Hash: . Fixed bug #81714 (segfault when serializing finalized HashContext). (cmb) +- MBString: + . Number of error markers emitted for invalid UTF-8 text matches WHATWG specification. + This is a return to the behavior of PHP 8.0 and earlier. (alexdowad) + - MySQLi: . Fixed bug GH-8267 (MySQLi uses unsupported format specifier on Windows). (cmb) diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8.c b/ext/mbstring/libmbfl/filters/mbfilter_utf8.c index 524c9c079a137..37512b7c8ecba 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf8.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8.c @@ -122,9 +122,7 @@ int mbfl_filt_conv_utf8_wchar(int c, mbfl_convert_filter *filter) CK((*filter->output_function)(s, filter->data)); } else { CK(mbfl_filt_put_invalid_char(filter)); - if (c < 0x80 || (c >= 0xc2 && c <= 0xf4)) { - goto retry; - } + goto retry; } break; case 0x20: /* 3byte code 2nd char: 0:0xa0-0xbf,D:0x80-9F,1-C,E-F:0x80-0x9f */ @@ -139,9 +137,7 @@ int mbfl_filt_conv_utf8_wchar(int c, mbfl_convert_filter *filter) filter->status++; } else { CK(mbfl_filt_put_invalid_char(filter)); - if (c < 0x80 || (c >= 0xc2 && c <= 0xf4)) { - goto retry; - } + goto retry; } break; case 0x30: /* 4byte code 2nd char: 0:0x90-0xbf,1-3:0x80-0xbf,4:0x80-0x8f */ @@ -156,9 +152,7 @@ int mbfl_filt_conv_utf8_wchar(int c, mbfl_convert_filter *filter) filter->status++; } else { CK(mbfl_filt_put_invalid_char(filter)); - if (c < 0x80 || (c >= 0xc2 && c <= 0xf4)) { - goto retry; - } + goto retry; } break; case 0x31: /* 4byte code 3rd char: 0x80-0xbf */ @@ -167,9 +161,7 @@ int mbfl_filt_conv_utf8_wchar(int c, mbfl_convert_filter *filter) filter->status++; } else { CK(mbfl_filt_put_invalid_char(filter)); - if (c < 0x80 || (c >= 0xc2 && c <= 0xf4)) { - goto retry; - } + goto retry; } break; default: diff --git a/ext/mbstring/tests/illformed_utf_sequences.phpt b/ext/mbstring/tests/illformed_utf_sequences.phpt index a9c97cce118f8..c028368157337 100644 --- a/ext/mbstring/tests/illformed_utf_sequences.phpt +++ b/ext/mbstring/tests/illformed_utf_sequences.phpt @@ -22,28 +22,28 @@ var_dump(chk_enc("\x31\x32\x33", 0)); var_dump(chk_enc("\x41\x42\x43", 0)); var_dump(chk_enc("\xc0\xb1\xc0\xb2\xc0\xb3", 6)); var_dump(chk_enc("\xc1\x81\xc1\x82\xc1\x83", 6)); -var_dump(chk_enc("\xe0\x80\xb1\xe0\x80\xb2\xe0\x80\xb3", 6)); -var_dump(chk_enc("\xe0\x81\x81\xe0\x81\x82\xe0\x81\x83", 6)); -var_dump(chk_enc("\xf0\x80\x80\xb1\xf0\x80\x80\xb2\xf0\x80\x80\xb3", 9)); -var_dump(chk_enc("\xf0\x80\x81\x81\xf0\x80\x81\x82\xf0\x81\x83", 8)); +var_dump(chk_enc("\xe0\x80\xb1\xe0\x80\xb2\xe0\x80\xb3", 9)); +var_dump(chk_enc("\xe0\x81\x81\xe0\x81\x82\xe0\x81\x83", 9)); +var_dump(chk_enc("\xf0\x80\x80\xb1\xf0\x80\x80\xb2\xf0\x80\x80\xb3", 12)); +var_dump(chk_enc("\xf0\x80\x81\x81\xf0\x80\x81\x82\xf0\x81\x83", 11)); var_dump(chk_enc("\xf8\x80\x80\x80\xb1\xf8\x80\x80\x80\xb2\xf8\x80\x80\x80\xb3", 15)); var_dump(chk_enc("\xf8\x80\x80\x81\x81\xf8\x80\x80\x81\x82\xf8\x80\x80\x81\x83", 15)); var_dump(chk_enc("\xfc\x80\x80\x80\x80\xb1\xfc\x80\x80\x80\x80\xb2\xfc\x80\x80\x80\x80\xb3", 18)); var_dump(chk_enc("\xfc\x80\x80\x80\x81\x81\xfc\x80\x80\x80\x81\x82\xfc\x80\x80\x80\x81\x83", 18)); var_dump(chk_enc("\xc2\xa2\xc2\xa3\xc2\xa5", 0)); -var_dump(chk_enc("\xe0\x82\xa2\xe0\x82\xa3\xe0\x82\xa5", 6)); -var_dump(chk_enc("\xf0\x80\x82\xa2\xf0\x80\x82\xa3\xf0\x80\x82\xa5", 9)); +var_dump(chk_enc("\xe0\x82\xa2\xe0\x82\xa3\xe0\x82\xa5", 9)); +var_dump(chk_enc("\xf0\x80\x82\xa2\xf0\x80\x82\xa3\xf0\x80\x82\xa5", 12)); var_dump(chk_enc("\xf8\x80\x80\x82\xa2\xf8\x80\x80\x82\xa3\xf8\x80\x80\x82\xa5", 15)); var_dump(chk_enc("\xfc\x80\x80\x80\x82\xa2\xfc\x80\x80\x80\x82\xa3\xfc\x80\x80\x80\x82\xa5", 18)); var_dump(chk_enc("\xc1\xbf", 2)); var_dump(chk_enc("\xc2\x80", 0)); var_dump(chk_enc("\xdf\xbf", 0)); -var_dump(chk_enc("\xe0\x9f\xff", 2)); +var_dump(chk_enc("\xe0\x9f\xff", 3)); var_dump(chk_enc("\xe0\xa0\x80", 2)); var_dump(chk_enc("\xef\xbf\xbf", 0)); -var_dump(chk_enc("\xf0\x8f\xbf\xbf", 3)); +var_dump(chk_enc("\xf0\x8f\xbf\xbf", 4)); var_dump(chk_enc("\xf0\x90\x80\x80", 0)); var_dump(chk_enc("\xf7\xbf\xbf\xbf", 4)); var_dump(chk_enc("\xf8\x87\xbf\xbf\xbf", 5)); @@ -58,7 +58,7 @@ echo "UTF-8 and surrogates area\n"; $out = ''; $cnt = 0; for ($i = 0xd7ff; $i <= 0xe000; ++$i) { - $s = chk_enc(pack('C3', 0xe0 | ($i >> 12), 0x80 | ($i >> 6) & 0x3f, 0x80 | $i & 0x3f), 2); + $s = chk_enc(pack('C3', 0xe0 | ($i >> 12), 0x80 | ($i >> 6) & 0x3f, 0x80 | $i & 0x3f), 3); if ($s === false) { $cnt++; } else { diff --git a/ext/mbstring/tests/utf8_error_handling.phpt b/ext/mbstring/tests/utf8_error_handling.phpt new file mode 100644 index 0000000000000..0592778cd1c12 --- /dev/null +++ b/ext/mbstring/tests/utf8_error_handling.phpt @@ -0,0 +1,56 @@ +--TEST-- +Confirm error handling for UTF-8 complies with WHATWG spec +--EXTENSIONS-- +mbstring +--FILE-- + +--EXPECT-- +All done! diff --git a/ext/mbstring/tests/utf_encodings.phpt b/ext/mbstring/tests/utf_encodings.phpt index 9e47fe36ce480..b0973e527e7ba 100644 --- a/ext/mbstring/tests/utf_encodings.phpt +++ b/ext/mbstring/tests/utf_encodings.phpt @@ -761,14 +761,14 @@ testValidString('', '', 'UTF-8', 'UTF-32BE'); $invalid = array( // Codepoints outside of valid 0-0x10FFFF range for Unicode - "\xF4\x90\x80\x80" => str_repeat("\x00\x00\x00%", 3), // CP 0x110000 + "\xF4\x90\x80\x80" => str_repeat("\x00\x00\x00%", 4), // CP 0x110000 "\xF7\x80\x80\x80" => str_repeat("\x00\x00\x00%", 4), // CP 0x1C0000 "\xF7\xBF\xBF\xBF" => str_repeat("\x00\x00\x00%", 4), // CP 0x1FFFFF // Reserved range for UTF-16 surrogate pairs - "\xED\xA0\x80" => str_repeat("\x00\x00\x00%", 2), // CP 0xD800 - "\xED\xAF\xBF" => str_repeat("\x00\x00\x00%", 2), // CP 0xDBFF - "\xED\xBF\xBF" => str_repeat("\x00\x00\x00%", 2), // CP 0xDFFF + "\xED\xA0\x80" => str_repeat("\x00\x00\x00%", 3), // CP 0xD800 + "\xED\xAF\xBF" => str_repeat("\x00\x00\x00%", 3), // CP 0xDBFF + "\xED\xBF\xBF" => str_repeat("\x00\x00\x00%", 3), // CP 0xDFFF // Truncated characters "\xDF" => "\x00\x00\x00%", // should have been 2-byte @@ -788,8 +788,8 @@ $invalid = array( // Multi-byte characters which end too soon and go to a junk byte // (Which isn't even valid to start a new character) - "\xF0\xBF\xBF\xFF" => "\x00\x00\x00%", - "\xF0\xBF\xFF" => "\x00\x00\x00%", + "\xF0\xBF\xBF\xFF" => str_repeat("\x00\x00\x00%", 2), + "\xF0\xBF\xFF" => str_repeat("\x00\x00\x00%", 2), // Continuation bytes which appear outside of a MB char "\x80" => "\x00\x00\x00%", @@ -799,8 +799,8 @@ $invalid = array( // Overlong code units // (Using more bytes than needed to encode a character) "\xC1\xBF" => str_repeat("\x00\x00\x00%", 2), // didn't need 2 bytes - "\xE0\x9F\xBF" => str_repeat("\x00\x00\x00%", 2), // didn't need 3 bytes - "\xF0\x8F\xBF\xBF" => str_repeat("\x00\x00\x00%", 3) // didn't need 4 bytes + "\xE0\x9F\xBF" => str_repeat("\x00\x00\x00%", 3), // didn't need 3 bytes + "\xF0\x8F\xBF\xBF" => str_repeat("\x00\x00\x00%", 4) // didn't need 4 bytes ); testInvalidCodepoints($invalid, 'UTF-8'); From c3a30544ada06b2de681991308b2e8212a912689 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 18 Apr 2022 11:34:18 +0300 Subject: [PATCH 48/78] JIT: Fixed incorrect guard Fixes oss-fuzz #46704 --- ext/opcache/jit/zend_jit_trace.c | 4 +++- ext/opcache/tests/jit/fetch_obj_010.phpt | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 ext/opcache/tests/jit/fetch_obj_010.phpt diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index e787d40dc8eab..88dbee76e6c73 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -2027,7 +2027,9 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin || Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))[0] == '\0') { break; } - ADD_OP1_TRACE_GUARD(); + if (opline->op1_type != IS_UNUSED && op1_type == IS_OBJECT) { + ADD_OP1_TRACE_GUARD(); + } break; case ZEND_INIT_METHOD_CALL: if (opline->op2_type != IS_CONST diff --git a/ext/opcache/tests/jit/fetch_obj_010.phpt b/ext/opcache/tests/jit/fetch_obj_010.phpt new file mode 100644 index 0000000000000..2755590f11077 --- /dev/null +++ b/ext/opcache/tests/jit/fetch_obj_010.phpt @@ -0,0 +1,19 @@ +--TEST-- +JIT: FETCH_OBJ 010 +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.file_update_protection=0 +opcache.jit_buffer_size=1M +--FILE-- +ary["bas"] ??= $obj = new stdClass; + } +} +foo(); +?> +DONE +--EXPECT-- +DONE From 11f950e77ecd8d54b6d3692d5f3a76b6489164e6 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Mon, 18 Apr 2022 17:56:30 +0200 Subject: [PATCH 49/78] Don't optimize trailing args for prototype fbc --- Zend/Optimizer/optimize_func_calls.c | 22 ++++++++++++++++++---- Zend/tests/add_optional_by_ref_arg.phpt | 22 ++++++++++++++++++++++ 2 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 Zend/tests/add_optional_by_ref_arg.phpt diff --git a/Zend/Optimizer/optimize_func_calls.c b/Zend/Optimizer/optimize_func_calls.c index 351010177f630..91ed11a4106d1 100644 --- a/Zend/Optimizer/optimize_func_calls.c +++ b/Zend/Optimizer/optimize_func_calls.c @@ -149,6 +149,20 @@ static void zend_try_inline_call(zend_op_array *op_array, zend_op *fcall, zend_o } } +/* arg_num is 1-based here, to match SEND encoding. */ +static bool has_known_send_mode(const optimizer_call_info *info, uint32_t arg_num) +{ + if (!info->func) { + return false; + } + + /* For prototype functions we should not make assumptions about arguments that are not part of + * the signature: And inheriting method can add an optional by-ref argument. */ + return !info->is_prototype + || arg_num <= info->func->common.num_args + || (info->func->common.fn_flags & ZEND_ACC_VARIADIC); +} + void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx) { zend_op *opline = op_array->opcodes; @@ -261,7 +275,7 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx) } break; case ZEND_SEND_VAL_EX: - if (call_stack[call - 1].func) { + if (has_known_send_mode(&call_stack[call - 1], opline->op2.num)) { if (opline->op2_type == IS_CONST) { call_stack[call - 1].try_inline = 0; break; @@ -276,7 +290,7 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx) } break; case ZEND_CHECK_FUNC_ARG: - if (call_stack[call - 1].func) { + if (has_known_send_mode(&call_stack[call - 1], opline->op2.num)) { if (opline->op2_type == IS_CONST) { call_stack[call - 1].try_inline = 0; call_stack[call - 1].func_arg_num = (uint32_t)-1; @@ -289,7 +303,7 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx) break; case ZEND_SEND_VAR_EX: case ZEND_SEND_FUNC_ARG: - if (call_stack[call - 1].func) { + if (has_known_send_mode(&call_stack[call - 1], opline->op2.num)) { if (opline->op2_type == IS_CONST) { call_stack[call - 1].try_inline = 0; break; @@ -304,7 +318,7 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx) } break; case ZEND_SEND_VAR_NO_REF_EX: - if (call_stack[call - 1].func) { + if (has_known_send_mode(&call_stack[call - 1], opline->op2.num)) { if (opline->op2_type == IS_CONST) { call_stack[call - 1].try_inline = 0; break; diff --git a/Zend/tests/add_optional_by_ref_arg.phpt b/Zend/tests/add_optional_by_ref_arg.phpt new file mode 100644 index 0000000000000..7ce4fd5a46f46 --- /dev/null +++ b/Zend/tests/add_optional_by_ref_arg.phpt @@ -0,0 +1,22 @@ +--TEST-- +Adding an optional by-ref arg in a child method +--FILE-- +method2($x); + var_dump($x); + } + public function method2() {} +} +class Test2 extends Test1 { + public function method2(&$x = null) { + ++$x; + } +} +(new Test2)->method1(); + +?> +--EXPECT-- +int(1) From 18b4e36df15747c6cbb8c119e50fcab2bf0e7cee Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Mon, 18 Apr 2022 18:20:38 +0200 Subject: [PATCH 50/78] Move check for named params in fcall optimization earlier I don't think this is strictly necessary, but I think it makes sense to check this before interpreting opline->op2.num as an argument number. This also adds one more has_known_send_mode() check that I had missed before. --- Zend/Optimizer/optimize_func_calls.c | 46 ++++++++++++++-------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/Zend/Optimizer/optimize_func_calls.c b/Zend/Optimizer/optimize_func_calls.c index 91ed11a4106d1..154baddc65426 100644 --- a/Zend/Optimizer/optimize_func_calls.c +++ b/Zend/Optimizer/optimize_func_calls.c @@ -249,8 +249,8 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx) case ZEND_FETCH_STATIC_PROP_FUNC_ARG: case ZEND_FETCH_OBJ_FUNC_ARG: case ZEND_FETCH_DIM_FUNC_ARG: - if (call_stack[call - 1].func - && call_stack[call - 1].func_arg_num != (uint32_t)-1) { + if (call_stack[call - 1].func_arg_num != (uint32_t)-1 + && has_known_send_mode(&call_stack[call - 1], call_stack[call - 1].func_arg_num)) { if (ARG_SHOULD_BE_SENT_BY_REF(call_stack[call - 1].func, call_stack[call - 1].func_arg_num)) { if (opline->opcode != ZEND_FETCH_STATIC_PROP_FUNC_ARG) { opline->opcode -= 9; @@ -275,12 +275,12 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx) } break; case ZEND_SEND_VAL_EX: - if (has_known_send_mode(&call_stack[call - 1], opline->op2.num)) { - if (opline->op2_type == IS_CONST) { - call_stack[call - 1].try_inline = 0; - break; - } + if (opline->op2_type == IS_CONST) { + call_stack[call - 1].try_inline = 0; + break; + } + if (has_known_send_mode(&call_stack[call - 1], opline->op2.num)) { if (ARG_MUST_BE_SENT_BY_REF(call_stack[call - 1].func, opline->op2.num)) { /* We won't convert it into_DO_FCALL to emit error at run-time */ call_stack[call - 1].opline = NULL; @@ -290,25 +290,25 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx) } break; case ZEND_CHECK_FUNC_ARG: - if (has_known_send_mode(&call_stack[call - 1], opline->op2.num)) { - if (opline->op2_type == IS_CONST) { - call_stack[call - 1].try_inline = 0; - call_stack[call - 1].func_arg_num = (uint32_t)-1; - break; - } + if (opline->op2_type == IS_CONST) { + call_stack[call - 1].try_inline = 0; + call_stack[call - 1].func_arg_num = (uint32_t)-1; + break; + } + if (has_known_send_mode(&call_stack[call - 1], opline->op2.num)) { call_stack[call - 1].func_arg_num = opline->op2.num; MAKE_NOP(opline); } break; case ZEND_SEND_VAR_EX: case ZEND_SEND_FUNC_ARG: - if (has_known_send_mode(&call_stack[call - 1], opline->op2.num)) { - if (opline->op2_type == IS_CONST) { - call_stack[call - 1].try_inline = 0; - break; - } + if (opline->op2_type == IS_CONST) { + call_stack[call - 1].try_inline = 0; + break; + } + if (has_known_send_mode(&call_stack[call - 1], opline->op2.num)) { call_stack[call - 1].func_arg_num = (uint32_t)-1; if (ARG_SHOULD_BE_SENT_BY_REF(call_stack[call - 1].func, opline->op2.num)) { opline->opcode = ZEND_SEND_REF; @@ -318,12 +318,12 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx) } break; case ZEND_SEND_VAR_NO_REF_EX: - if (has_known_send_mode(&call_stack[call - 1], opline->op2.num)) { - if (opline->op2_type == IS_CONST) { - call_stack[call - 1].try_inline = 0; - break; - } + if (opline->op2_type == IS_CONST) { + call_stack[call - 1].try_inline = 0; + break; + } + if (has_known_send_mode(&call_stack[call - 1], opline->op2.num)) { if (ARG_MUST_BE_SENT_BY_REF(call_stack[call - 1].func, opline->op2.num)) { opline->opcode = ZEND_SEND_VAR_NO_REF; } else if (ARG_MAY_BE_SENT_BY_REF(call_stack[call - 1].func, opline->op2.num)) { From dad5cb442dd7683973b584774d6daa7369396cb7 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Wed, 20 Apr 2022 16:38:13 +0200 Subject: [PATCH 51/78] Fix GH-8408: bug68547.phpt fails without multibyte support --- ext/exif/tests/bug68547.phpt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ext/exif/tests/bug68547.phpt b/ext/exif/tests/bug68547.phpt index 0fb9e06ccec13..5680ef6023ed5 100644 --- a/ext/exif/tests/bug68547.phpt +++ b/ext/exif/tests/bug68547.phpt @@ -1,7 +1,10 @@ --TEST-- Bug #68547 (Exif Header component value check error) --SKIPIF-- - + --FILE-- Date: Thu, 14 Apr 2022 14:54:34 +0200 Subject: [PATCH 52/78] Fix preloading of constants containing enums Fixes GH-8133 --- NEWS | 2 ++ Zend/zend_ast.c | 13 ++++++------- ext/opcache/ZendAccelerator.c | 19 +++---------------- ext/opcache/tests/gh8133.inc | 12 ++++++++++++ ext/opcache/tests/gh8133.phpt | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 56 insertions(+), 23 deletions(-) create mode 100644 ext/opcache/tests/gh8133.inc create mode 100644 ext/opcache/tests/gh8133.phpt diff --git a/NEWS b/NEWS index effe93adba390..b9bfd76525e36 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,8 @@ PHP NEWS - Core: . Fixed bug GH-8310 (Registry settings are no longer recognized). (cmb) . Fixed potential race condition during resource ID allocation. (ryancaicse) + . Fixed bug GH-8133 (Preloading of constants containing arrays with enums + segfaults). (ilutov) - Date: . Fixed bug GH-7752 (DateTimeZone::getTransitions() returns insufficient diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index 0d69bfbaca369..d0a180ee6a9c1 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -750,6 +750,12 @@ ZEND_API zend_result ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast break; case ZEND_AST_CONST_ENUM_INIT: { + // Preloading will attempt to resolve constants but objects can't be stored in shm + // Aborting here to store the const AST instead + if (CG(in_compilation)) { + return FAILURE; + } + zend_ast *class_name_ast = ast->child[0]; zend_string *class_name = zend_ast_get_str(class_name_ast); @@ -762,13 +768,6 @@ ZEND_API zend_result ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast : NULL; zend_class_entry *ce = zend_lookup_class(class_name); - if (!ce) { - /* Class may not be available when resolving constants on a dynamically - * declared enum during preloading. */ - ZEND_ASSERT(CG(compiler_options) & ZEND_COMPILE_PRELOAD); - return FAILURE; - } - zend_enum_new(result, ce, case_name, case_value_zv); break; } diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index c9ba5cf5551fe..5f6b854d477d0 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -3725,19 +3725,6 @@ static zend_result preload_resolve_deps(preload_error *error, const zend_class_e return SUCCESS; } -static zend_result preload_update_constant(zval *val, zend_class_entry *scope) -{ - zval tmp; - ZVAL_COPY(&tmp, val); - if (zval_update_constant_ex(&tmp, scope) == FAILURE || Z_TYPE(tmp) == IS_OBJECT) { - zval_ptr_dtor(&tmp); - return FAILURE; - } - zval_ptr_dtor_nogc(val); - ZVAL_COPY_VALUE(val, &tmp); - return SUCCESS; -} - static bool preload_try_resolve_constants(zend_class_entry *ce) { bool ok, changed, was_changed = 0; @@ -3751,7 +3738,7 @@ static bool preload_try_resolve_constants(zend_class_entry *ce) ZEND_HASH_FOREACH_PTR(&ce->constants_table, c) { val = &c->value; if (Z_TYPE_P(val) == IS_CONSTANT_AST) { - if (EXPECTED(preload_update_constant(val, c->ce) == SUCCESS)) { + if (EXPECTED(zval_update_constant_ex(val, c->ce) == SUCCESS)) { was_changed = changed = 1; } else { ok = 0; @@ -3769,7 +3756,7 @@ static bool preload_try_resolve_constants(zend_class_entry *ce) val = &ce->default_properties_table[i]; if (Z_TYPE_P(val) == IS_CONSTANT_AST) { zend_property_info *prop = ce->properties_info_table[i]; - if (UNEXPECTED(preload_update_constant(val, prop->ce) != SUCCESS)) { + if (UNEXPECTED(zval_update_constant_ex(val, prop->ce) != SUCCESS)) { resolved = ok = 0; } } @@ -3785,7 +3772,7 @@ static bool preload_try_resolve_constants(zend_class_entry *ce) val = ce->default_static_members_table + ce->default_static_members_count - 1; while (count) { if (Z_TYPE_P(val) == IS_CONSTANT_AST) { - if (UNEXPECTED(preload_update_constant(val, ce) != SUCCESS)) { + if (UNEXPECTED(zval_update_constant_ex(val, ce) != SUCCESS)) { resolved = ok = 0; } } diff --git a/ext/opcache/tests/gh8133.inc b/ext/opcache/tests/gh8133.inc new file mode 100644 index 0000000000000..11c38e62e140b --- /dev/null +++ b/ext/opcache/tests/gh8133.inc @@ -0,0 +1,12 @@ + +--FILE-- + +--EXPECT-- +array(2) { + [0]=> + enum(Foo::Bar) + [1]=> + enum(Foo::Baz) +} +array(2) { + [0]=> + enum(Foo::Bar) + [1]=> + enum(Foo::Baz) +} From 36de002cc62feb01527cc348e9c2ca9f94d4e43e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Sat, 2 Apr 2022 22:59:21 +0200 Subject: [PATCH 53/78] Verify generated files are up to date in CI Closes GH-8295 --- .github/actions/apt-x64/action.yml | 8 ++++---- .github/actions/verify-generated-files/action.yml | 12 ++++++++++++ .github/workflows/nightly.yml | 4 ++++ .github/workflows/push.yml | 4 ++++ build/gen_stub.php | 2 +- .../tests/mysqli_pam_sha256_public_key_ini.phpt | 1 + ext/pgsql/tests/80_bug14383.phpt | 4 ++++ ext/standard/basic_functions_arginfo.h | 2 +- 8 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 .github/actions/verify-generated-files/action.yml diff --git a/.github/actions/apt-x64/action.yml b/.github/actions/apt-x64/action.yml index c21a34534aea8..a5b0db49e8270 100644 --- a/.github/actions/apt-x64/action.yml +++ b/.github/actions/apt-x64/action.yml @@ -59,10 +59,10 @@ runs: libpng-dev \ libfreetype6-dev mkdir /opt/oracle - wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip - unzip instantclient-basiclite-linuxx64.zip - wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-sdk-linuxx64.zip - unzip instantclient-sdk-linuxx64.zip + wget -nv https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip + unzip instantclient-basiclite-linuxx64.zip && rm instantclient-basiclite-linuxx64.zip + wget -nv https://download.oracle.com/otn_software/linux/instantclient/instantclient-sdk-linuxx64.zip + unzip instantclient-sdk-linuxx64.zip && rm instantclient-sdk-linuxx64.zip mv instantclient_*_* /opt/oracle/instantclient # Interferes with libldap2 headers. rm /opt/oracle/instantclient/sdk/include/ldap.h diff --git a/.github/actions/verify-generated-files/action.yml b/.github/actions/verify-generated-files/action.yml new file mode 100644 index 0000000000000..02ca79160b0d7 --- /dev/null +++ b/.github/actions/verify-generated-files/action.yml @@ -0,0 +1,12 @@ +name: Verify generated files are up to date +runs: + using: composite + steps: + - shell: bash + run: | + set -x + [[ "$OSTYPE" == "darwin"* ]] && export PATH="/usr/local/opt/bison/bin:$PATH" + scripts/dev/genfiles + Zend/zend_vm_gen.php + build/gen_stub.php -f + git add . -N && git diff --exit-code diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 67259e503b1db..4d347323e89b3 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -93,6 +93,8 @@ jobs: -d opcache.enable_cli=1 -d opcache.jit_buffer_size=16M -d opcache.jit=1205 + - name: Verify generated files are up to date + uses: ./.github/actions/verify-generated-files MACOS: needs: GENERATE_MATRIX if: ${{ needs.GENERATE_MATRIX.outputs.branches != '[]' }} @@ -149,3 +151,5 @@ jobs: -d opcache.protect_memory=1 -d opcache.jit_buffer_size=16M -d opcache.jit=1205 + - name: Verify generated files are up to date + uses: ./.github/actions/verify-generated-files diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 4e2879a8ab517..4a1619ab5d106 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -57,6 +57,8 @@ jobs: -d zend_extension=opcache.so -d opcache.enable_cli=1 -d opcache.jit_buffer_size=16M + - name: Verify generated files are up to date + uses: ./.github/actions/verify-generated-files MACOS_DEBUG_NTS: runs-on: macos-10.15 steps: @@ -84,3 +86,5 @@ jobs: -d opcache.enable_cli=1 -d opcache.protect_memory=1 -d opcache.jit_buffer_size=16M + - name: Verify generated files are up to date + uses: ./.github/actions/verify-generated-files diff --git a/build/gen_stub.php b/build/gen_stub.php index e288a4a7df1aa..d3edf91081a07 100755 --- a/build/gen_stub.php +++ b/build/gen_stub.php @@ -1801,7 +1801,7 @@ function initPhpParser() { } $isInitialized = true; - $version = "4.9.0"; + $version = "4.13.0"; $phpParserDir = __DIR__ . "/PHP-Parser-$version"; if (!is_dir($phpParserDir)) { installPhpParser($version, $phpParserDir); diff --git a/ext/mysqli/tests/mysqli_pam_sha256_public_key_ini.phpt b/ext/mysqli/tests/mysqli_pam_sha256_public_key_ini.phpt index 86e27fbaff7d9..e45aff93dd33e 100644 --- a/ext/mysqli/tests/mysqli_pam_sha256_public_key_ini.phpt +++ b/ext/mysqli/tests/mysqli_pam_sha256_public_key_ini.phpt @@ -59,6 +59,7 @@ if (strlen($key) != fwrite($fp, $key)) { if (!$link->query("SET @@session.old_passwords=2")) { + @unlink($file); die(sprintf("skip Cannot set @@session.old_passwords=2 [%d] %s", $link->errno, $link->error)); } diff --git a/ext/pgsql/tests/80_bug14383.phpt b/ext/pgsql/tests/80_bug14383.phpt index e9c6093888161..14a241ffa5505 100644 --- a/ext/pgsql/tests/80_bug14383.phpt +++ b/ext/pgsql/tests/80_bug14383.phpt @@ -18,6 +18,10 @@ pg_close($dbh); require_once(__DIR__.'/../../dba/tests/test.inc'); require_once(__DIR__.'/../../dba/tests/dba_handler.inc'); +?> +--CLEAN-- + --EXPECTF-- database handler: %s diff --git a/ext/standard/basic_functions_arginfo.h b/ext/standard/basic_functions_arginfo.h index ac6e4c65aa1a9..8b97a129f6934 100644 --- a/ext/standard/basic_functions_arginfo.h +++ b/ext/standard/basic_functions_arginfo.h @@ -829,7 +829,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_trim, 0, 1, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, characters, IS_STRING, 0, "\" \\n\\r\\t\\v\\0\"") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, characters, IS_STRING, 0, "\" \\n\\r\\t\\v\\x00\"") ZEND_END_ARG_INFO() #define arginfo_rtrim arginfo_trim From 1dc6dba014aa970e6558398121f1e8e71c852787 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Fri, 22 Apr 2022 00:28:32 +0200 Subject: [PATCH 54/78] Only check tracked files in verify-generated-files --- .github/actions/verify-generated-files/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/verify-generated-files/action.yml b/.github/actions/verify-generated-files/action.yml index 02ca79160b0d7..21aa125a1cbbc 100644 --- a/.github/actions/verify-generated-files/action.yml +++ b/.github/actions/verify-generated-files/action.yml @@ -9,4 +9,4 @@ runs: scripts/dev/genfiles Zend/zend_vm_gen.php build/gen_stub.php -f - git add . -N && git diff --exit-code + git add . -Nu && git diff --exit-code From c854bb2472c18764a155be0de07eae2e63d2cce9 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Fri, 22 Apr 2022 10:29:35 +0100 Subject: [PATCH 55/78] Fixed GH-8400: bug73837.phpt makes no sense Replaces the indeed silly test with something that actually does the job, albeit much slower. --- ext/date/tests/bug73837.phpt | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/ext/date/tests/bug73837.phpt b/ext/date/tests/bug73837.phpt index c11aa2c56bfa7..33b2afb898670 100644 --- a/ext/date/tests/bug73837.phpt +++ b/ext/date/tests/bug73837.phpt @@ -1,19 +1,23 @@ --TEST-- Bug #73837: Milliseconds in DateTime() +--SKIPIF-- + --FILE-- format( "u" ); - $collect[$key] = true; +$startTS = time(); +$prev_dt = new DateTime(); +while (time() < $startTS + 2) { + $dt = new DateTime(); + if ($prev_dt > $dt) { + var_dump($prev_dt->format("Y-m-d H:i:s.u")); + var_dump($dt->format("Y-m-d H:i:s.u")); + break; + } + $prev_dt = $dt; } - -var_dump($n = count( $collect )); -echo ( $n > 700 ) ? "microseconds differ\n" : "microseconds do not differ enough ($n)\n"; +echo "Finished\n"; ?> --EXPECTF-- -int(%d) -microseconds differ +Finished From f20e11cbe12057bddade6ff9a2ff9ea1bb6084c9 Mon Sep 17 00:00:00 2001 From: Arnaud Le Blanc Date: Sun, 3 Apr 2022 13:16:33 +0200 Subject: [PATCH 56/78] Clear recorded errors before executing shutdown functions Recorded errors may be attached to the wrong cached script when a fatal error occurs during recording. This happens because the fatal error will cause a bailout, which may prevent the recorded errors from being freed. If an other script is compiled after bailout, or if a class is linked after bailout, the recorded errors will be attached to it. This change fixes this by freeing recorded errors before executing shutdown functions. Fixes GH-8063 --- Zend/zend_inheritance.c | 207 ++++++++++++++----------- ext/opcache/tests/gh8063-001.phpt | 31 ++++ ext/opcache/tests/gh8063-002.phpt | 31 ++++ ext/opcache/tests/gh8063-003.phpt | 30 ++++ ext/opcache/tests/gh8063/BadClass.inc | 8 + ext/opcache/tests/gh8063/BadClass2.inc | 15 ++ ext/opcache/tests/gh8063/Bar.inc | 3 + ext/opcache/tests/gh8063/Baz.inc | 3 + ext/opcache/tests/gh8063/Foo.inc | 8 + 9 files changed, 242 insertions(+), 94 deletions(-) create mode 100644 ext/opcache/tests/gh8063-001.phpt create mode 100644 ext/opcache/tests/gh8063-002.phpt create mode 100644 ext/opcache/tests/gh8063-003.phpt create mode 100644 ext/opcache/tests/gh8063/BadClass.inc create mode 100644 ext/opcache/tests/gh8063/BadClass2.inc create mode 100644 ext/opcache/tests/gh8063/Bar.inc create mode 100644 ext/opcache/tests/gh8063/Baz.inc create mode 100644 ext/opcache/tests/gh8063/Foo.inc diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index 020c5e6553920..45b284d0237b8 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -2775,101 +2775,113 @@ ZEND_API zend_class_entry *zend_do_link_class(zend_class_entry *ce, zend_string #endif bool orig_record_errors = EG(record_errors); - if (ce->ce_flags & ZEND_ACC_IMMUTABLE) { - if (is_cacheable) { - if (zend_inheritance_cache_get && zend_inheritance_cache_add) { - zend_class_entry *ret = zend_inheritance_cache_get(ce, parent, traits_and_interfaces); - if (ret) { - if (traits_and_interfaces) { - free_alloca(traits_and_interfaces, use_heap); - } - zv = zend_hash_find_known_hash(CG(class_table), key); - Z_CE_P(zv) = ret; - return ret; - } - /* Make sure warnings (such as deprecations) thrown during inheritance - * will be recoreded in the inheritance cache. */ - zend_begin_record_errors(); - } else { - is_cacheable = 0; + if (ce->ce_flags & ZEND_ACC_IMMUTABLE && is_cacheable) { + if (zend_inheritance_cache_get && zend_inheritance_cache_add) { + zend_class_entry *ret = zend_inheritance_cache_get(ce, parent, traits_and_interfaces); + if (ret) { + if (traits_and_interfaces) { + free_alloca(traits_and_interfaces, use_heap); + } + zv = zend_hash_find_known_hash(CG(class_table), key); + Z_CE_P(zv) = ret; + return ret; } - proto = ce; + + /* Make sure warnings (such as deprecations) thrown during inheritance + * will be recorded in the inheritance cache. */ + zend_begin_record_errors(); + } else { + is_cacheable = 0; } - /* Lazy class loading */ - ce = zend_lazy_class_load(ce); - zv = zend_hash_find_known_hash(CG(class_table), key); - Z_CE_P(zv) = ce; - } else if (ce->ce_flags & ZEND_ACC_FILE_CACHED) { - /* Lazy class loading */ - ce = zend_lazy_class_load(ce); - ce->ce_flags &= ~ZEND_ACC_FILE_CACHED; - zv = zend_hash_find_known_hash(CG(class_table), key); - Z_CE_P(zv) = ce; + proto = ce; } - if (CG(unlinked_uses)) { - zend_hash_index_del(CG(unlinked_uses), (zend_long)(zend_uintptr_t) ce); - } + zend_try { + if (ce->ce_flags & ZEND_ACC_IMMUTABLE) { + /* Lazy class loading */ + ce = zend_lazy_class_load(ce); + zv = zend_hash_find_known_hash(CG(class_table), key); + Z_CE_P(zv) = ce; + } else if (ce->ce_flags & ZEND_ACC_FILE_CACHED) { + /* Lazy class loading */ + ce = zend_lazy_class_load(ce); + ce->ce_flags &= ~ZEND_ACC_FILE_CACHED; + zv = zend_hash_find_known_hash(CG(class_table), key); + Z_CE_P(zv) = ce; + } - orig_linking_class = CG(current_linking_class); - CG(current_linking_class) = is_cacheable ? ce : NULL; + if (CG(unlinked_uses)) { + zend_hash_index_del(CG(unlinked_uses), (zend_long)(zend_uintptr_t) ce); + } - if (ce->ce_flags & ZEND_ACC_ENUM) { - /* Only register builtin enum methods during inheritance to avoid persisting them in - * opcache. */ - zend_enum_register_funcs(ce); - } + orig_linking_class = CG(current_linking_class); + CG(current_linking_class) = is_cacheable ? ce : NULL; - if (parent) { - if (!(parent->ce_flags & ZEND_ACC_LINKED)) { - add_dependency_obligation(ce, parent); + if (ce->ce_flags & ZEND_ACC_ENUM) { + /* Only register builtin enum methods during inheritance to avoid persisting them in + * opcache. */ + zend_enum_register_funcs(ce); } - zend_do_inheritance(ce, parent); - } - if (ce->num_traits) { - zend_do_bind_traits(ce, traits_and_interfaces); - } - if (ce->num_interfaces) { - /* Also copy the parent interfaces here, so we don't need to reallocate later. */ - uint32_t num_parent_interfaces = parent ? parent->num_interfaces : 0; - zend_class_entry **interfaces = emalloc( - sizeof(zend_class_entry *) * (ce->num_interfaces + num_parent_interfaces)); - if (num_parent_interfaces) { - memcpy(interfaces, parent->interfaces, - sizeof(zend_class_entry *) * num_parent_interfaces); + if (parent) { + if (!(parent->ce_flags & ZEND_ACC_LINKED)) { + add_dependency_obligation(ce, parent); + } + zend_do_inheritance(ce, parent); + } + if (ce->num_traits) { + zend_do_bind_traits(ce, traits_and_interfaces); } - memcpy(interfaces + num_parent_interfaces, traits_and_interfaces + ce->num_traits, - sizeof(zend_class_entry *) * ce->num_interfaces); + if (ce->num_interfaces) { + /* Also copy the parent interfaces here, so we don't need to reallocate later. */ + uint32_t num_parent_interfaces = parent ? parent->num_interfaces : 0; + zend_class_entry **interfaces = emalloc( + sizeof(zend_class_entry *) * (ce->num_interfaces + num_parent_interfaces)); - zend_do_implement_interfaces(ce, interfaces); - } else if (parent && parent->num_interfaces) { - zend_do_inherit_interfaces(ce, parent); - } - if (!(ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_TRAIT)) - && (ce->ce_flags & (ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) - ) { - zend_verify_abstract_class(ce); - } - if (ce->ce_flags & ZEND_ACC_ENUM) { - zend_verify_enum(ce); - } + if (num_parent_interfaces) { + memcpy(interfaces, parent->interfaces, + sizeof(zend_class_entry *) * num_parent_interfaces); + } + memcpy(interfaces + num_parent_interfaces, traits_and_interfaces + ce->num_traits, + sizeof(zend_class_entry *) * ce->num_interfaces); - /* Normally Stringable is added during compilation. However, if it is imported from a trait, - * we need to explicilty add the interface here. */ - if (ce->__tostring && !(ce->ce_flags & ZEND_ACC_TRAIT) + zend_do_implement_interfaces(ce, interfaces); + } else if (parent && parent->num_interfaces) { + zend_do_inherit_interfaces(ce, parent); + } + if (!(ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_TRAIT)) + && (ce->ce_flags & (ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) + ) { + zend_verify_abstract_class(ce); + } + if (ce->ce_flags & ZEND_ACC_ENUM) { + zend_verify_enum(ce); + } + + /* Normally Stringable is added during compilation. However, if it is imported from a trait, + * we need to explicilty add the interface here. */ + if (ce->__tostring && !(ce->ce_flags & ZEND_ACC_TRAIT) && !zend_class_implements_interface(ce, zend_ce_stringable)) { - ZEND_ASSERT(ce->__tostring->common.fn_flags & ZEND_ACC_TRAIT_CLONE); - ce->ce_flags |= ZEND_ACC_RESOLVED_INTERFACES; - ce->num_interfaces++; - ce->interfaces = perealloc(ce->interfaces, - sizeof(zend_class_entry *) * ce->num_interfaces, ce->type == ZEND_INTERNAL_CLASS); - ce->interfaces[ce->num_interfaces - 1] = zend_ce_stringable; - do_interface_implementation(ce, zend_ce_stringable); - } + ZEND_ASSERT(ce->__tostring->common.fn_flags & ZEND_ACC_TRAIT_CLONE); + ce->ce_flags |= ZEND_ACC_RESOLVED_INTERFACES; + ce->num_interfaces++; + ce->interfaces = perealloc(ce->interfaces, + sizeof(zend_class_entry *) * ce->num_interfaces, ce->type == ZEND_INTERNAL_CLASS); + ce->interfaces[ce->num_interfaces - 1] = zend_ce_stringable; + do_interface_implementation(ce, zend_ce_stringable); + } + + zend_build_properties_info_table(ce); + } zend_catch { + /* Do not leak recorded errors to the next linked class. */ + if (!orig_record_errors) { + EG(record_errors) = false; + zend_free_recorded_errors(); + } + zend_bailout(); + } zend_end_try(); - zend_build_properties_info_table(ce); EG(record_errors) = orig_record_errors; if (!(ce->ce_flags & ZEND_ACC_UNRESOLVED_VARIANCE)) { @@ -3038,22 +3050,29 @@ zend_class_entry *zend_try_early_bind(zend_class_entry *ce, zend_class_entry *pa orig_linking_class = CG(current_linking_class); CG(current_linking_class) = is_cacheable ? ce : NULL; - if (is_cacheable) { - zend_begin_record_errors(); - } + zend_try{ + if (is_cacheable) { + zend_begin_record_errors(); + } - zend_do_inheritance_ex(ce, parent_ce, status == INHERITANCE_SUCCESS); - if (parent_ce && parent_ce->num_interfaces) { - zend_do_inherit_interfaces(ce, parent_ce); - } - zend_build_properties_info_table(ce); - if ((ce->ce_flags & (ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_INTERFACE|ZEND_ACC_TRAIT|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) == ZEND_ACC_IMPLICIT_ABSTRACT_CLASS) { - zend_verify_abstract_class(ce); - } - ZEND_ASSERT(!(ce->ce_flags & ZEND_ACC_UNRESOLVED_VARIANCE)); - ce->ce_flags |= ZEND_ACC_LINKED; + zend_do_inheritance_ex(ce, parent_ce, status == INHERITANCE_SUCCESS); + if (parent_ce && parent_ce->num_interfaces) { + zend_do_inherit_interfaces(ce, parent_ce); + } + zend_build_properties_info_table(ce); + if ((ce->ce_flags & (ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_INTERFACE|ZEND_ACC_TRAIT|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) == ZEND_ACC_IMPLICIT_ABSTRACT_CLASS) { + zend_verify_abstract_class(ce); + } + ZEND_ASSERT(!(ce->ce_flags & ZEND_ACC_UNRESOLVED_VARIANCE)); + ce->ce_flags |= ZEND_ACC_LINKED; + + CG(current_linking_class) = orig_linking_class; + } zend_catch { + EG(record_errors) = false; + zend_free_recorded_errors(); + zend_bailout(); + } zend_end_try(); - CG(current_linking_class) = orig_linking_class; EG(record_errors) = false; if (is_cacheable) { diff --git a/ext/opcache/tests/gh8063-001.phpt b/ext/opcache/tests/gh8063-001.phpt new file mode 100644 index 0000000000000..320d40aa3a8c0 --- /dev/null +++ b/ext/opcache/tests/gh8063-001.phpt @@ -0,0 +1,31 @@ +--TEST-- +Bug GH-8063 (Opcache breaks autoloading after E_COMPILE_ERROR) 001 +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.record_warnings=0 +--EXTENSIONS-- +opcache +--FILE-- + Date: Sat, 16 Apr 2022 22:49:39 +0100 Subject: [PATCH 57/78] Fix bug #77023: FPM cannot shutdown processes This change introduces subsequent kill of the process when idle process quit (SIGQUIT) does not succeed. It can happen in some situations and means that FPM is not able to scale down in dynamic pm. Using SIGKILL fixes the issue. --- NEWS | 1 + sapi/fpm/fpm/fpm_process_ctl.c | 20 ++++-- sapi/fpm/fpm/fpm_process_ctl.h | 3 +- .../bug77023-pm-dynamic-blocking-sigquit.phpt | 65 +++++++++++++++++++ 4 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 sapi/fpm/tests/bug77023-pm-dynamic-blocking-sigquit.phpt diff --git a/NEWS b/NEWS index a04955990868f..0b44185be8fcb 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,7 @@ PHP NEWS - FPM: . Fixed bug #76003 (FPM /status reports wrong number of active processe). (Jakub Zelenka) + . Fixed bug #77023 (FPM cannot shutdown processes). (Jakub Zelenka) - MySQLi: . Fixed bug GH-8267 (MySQLi uses unsupported format specifier on Windows). diff --git a/sapi/fpm/fpm/fpm_process_ctl.c b/sapi/fpm/fpm/fpm_process_ctl.c index 4b8dca4690ccb..6f439651f5138 100644 --- a/sapi/fpm/fpm/fpm_process_ctl.c +++ b/sapi/fpm/fpm/fpm_process_ctl.c @@ -138,6 +138,9 @@ int fpm_pctl_kill(pid_t pid, int how) /* {{{ */ case FPM_PCTL_QUIT : s = SIGQUIT; break; + case FPM_PCTL_KILL: + s = SIGKILL; + break; default : break; } @@ -310,6 +313,17 @@ static void fpm_pctl_check_request_timeout(struct timeval *now) /* {{{ */ } /* }}} */ +static void fpm_pctl_kill_idle_child(struct fpm_child_s *child) /* {{{ */ +{ + if (child->idle_kill) { + fpm_pctl_kill(child->pid, FPM_PCTL_KILL); + } else { + child->idle_kill = 1; + fpm_pctl_kill(child->pid, FPM_PCTL_QUIT); + } +} +/* }}} */ + static void fpm_pctl_perform_idle_server_maintenance(struct timeval *now) /* {{{ */ { struct fpm_worker_pool_s *wp; @@ -372,8 +386,7 @@ static void fpm_pctl_perform_idle_server_maintenance(struct timeval *now) /* {{{ fpm_request_last_activity(last_idle_child, &last); fpm_clock_get(&now); if (last.tv_sec < now.tv_sec - wp->config->pm_process_idle_timeout) { - last_idle_child->idle_kill = 1; - fpm_pctl_kill(last_idle_child->pid, FPM_PCTL_QUIT); + fpm_pctl_kill_idle_child(last_idle_child); } continue; @@ -385,8 +398,7 @@ static void fpm_pctl_perform_idle_server_maintenance(struct timeval *now) /* {{{ zlog(ZLOG_DEBUG, "[pool %s] currently %d active children, %d spare children, %d running children. Spawning rate %d", wp->config->name, active, idle, wp->running_children, wp->idle_spawn_rate); if (idle > wp->config->pm_max_spare_servers && last_idle_child) { - last_idle_child->idle_kill = 1; - fpm_pctl_kill(last_idle_child->pid, FPM_PCTL_QUIT); + fpm_pctl_kill_idle_child(last_idle_child); wp->idle_spawn_rate = 1; continue; } diff --git a/sapi/fpm/fpm/fpm_process_ctl.h b/sapi/fpm/fpm/fpm_process_ctl.h index f39a489f6177a..bae1036e26f07 100644 --- a/sapi/fpm/fpm/fpm_process_ctl.h +++ b/sapi/fpm/fpm/fpm_process_ctl.h @@ -44,7 +44,8 @@ enum { FPM_PCTL_TERM, FPM_PCTL_STOP, FPM_PCTL_CONT, - FPM_PCTL_QUIT + FPM_PCTL_QUIT, + FPM_PCTL_KILL }; #endif diff --git a/sapi/fpm/tests/bug77023-pm-dynamic-blocking-sigquit.phpt b/sapi/fpm/tests/bug77023-pm-dynamic-blocking-sigquit.phpt new file mode 100644 index 0000000000000..6fc0849343571 --- /dev/null +++ b/sapi/fpm/tests/bug77023-pm-dynamic-blocking-sigquit.phpt @@ -0,0 +1,65 @@ +--TEST-- +FPM: Blocked SIGQUIT prevents idle process to be killed +--EXTENSIONS-- +pcntl +--SKIPIF-- + +--FILE-- +start(); +$tester->expectLogStartNotices(); +$tester->multiRequest(2); +$tester->status([ + 'total processes' => 2, +]); +// wait for process to be killed +sleep(7); +$tester->expectLogWarning('child \\d+ exited on signal 9 \\(SIGKILL\\) after \\d+.\\d+ seconds from start', 'unconfined'); +$tester->expectLogNotice('child \\d+ started', 'unconfined'); +$tester->expectLogWarning('child \\d+ exited on signal 9 \\(SIGKILL\\) after \\d+.\\d+ seconds from start', 'unconfined'); +$tester->expectLogNotice('child \\d+ started', 'unconfined'); +$tester->status([ + 'total processes' => 1, +]); +$tester->terminate(); +$tester->expectLogTerminatingNotices(); +$tester->close(); + +?> +Done +--EXPECT-- +Done +--CLEAN-- + From d0f1b987a58085487ad91c18d6ad79b89d094283 Mon Sep 17 00:00:00 2001 From: Ollie Read Date: Fri, 22 Apr 2022 11:21:47 +0100 Subject: [PATCH 58/78] Fix GH-8421: Attributes that target functions are not valid for anonymous functions defined within a method Closes GH-8424 --- Zend/tests/attributes/gh8421.phpt | 59 +++++++++++++++++++++++++++++++ ext/reflection/php_reflection.c | 2 +- 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 Zend/tests/attributes/gh8421.phpt diff --git a/Zend/tests/attributes/gh8421.phpt b/Zend/tests/attributes/gh8421.phpt new file mode 100644 index 0000000000000..605772c704c59 --- /dev/null +++ b/Zend/tests/attributes/gh8421.phpt @@ -0,0 +1,59 @@ +--TEST-- +Bug GH-8421: Attributes that target functions are not valid for anonymous functions defined within a method +--FILE-- + true; +$globalStaticClosure = #[FunctionAttribute] +static fn() => true; + +class ClosureHolder +{ + public function getClosureDefinedInScope(): Closure + { + return #[FunctionAttribute] + fn() => true; + } + + public function getStaticClosureDefinedInScope(): Closure + { + return #[FunctionAttribute] + static fn() => true; + } + + public static function getClosureDefinedInScopeStatically(): Closure + { + return #[FunctionAttribute] + fn() => true; + } + + public static function getStaticClosureDefinedInScopeStatically(): Closure + { + return #[FunctionAttribute] + static fn() => true; + } +} + +var_dump((new ReflectionFunction($globalClosure))->getAttributes(FunctionAttribute::class)[0]->newInstance()->number); +var_dump((new ReflectionFunction($globalStaticClosure))->getAttributes(FunctionAttribute::class)[0]->newInstance()->number); +var_dump((new ReflectionFunction(ClosureHolder::getClosureDefinedInScopeStatically()))->getAttributes(FunctionAttribute::class)[0]->newInstance()->number); +var_dump((new ReflectionFunction(ClosureHolder::getStaticClosureDefinedInScopeStatically()))->getAttributes(FunctionAttribute::class)[0]->newInstance()->number); + +$holder = new ClosureHolder; + +var_dump((new ReflectionFunction($holder->getClosureDefinedInScope()))->getAttributes(FunctionAttribute::class)[0]->newInstance()->number); +var_dump((new ReflectionFunction($holder->getStaticClosureDefinedInScope()))->getAttributes(FunctionAttribute::class)[0]->newInstance()->number); +?> +--EXPECT-- +int(1) +int(1) +int(1) +int(1) +int(1) +int(1) diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 0210fa5ef3fd5..55ab84511e307 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -1770,7 +1770,7 @@ ZEND_METHOD(ReflectionFunctionAbstract, getAttributes) GET_REFLECTION_OBJECT_PTR(fptr); - if (fptr->common.scope) { + if (fptr->common.scope && !(fptr->common.fn_flags & ZEND_ACC_CLOSURE)) { target = ZEND_ATTRIBUTE_TARGET_METHOD; } else { target = ZEND_ATTRIBUTE_TARGET_FUNCTION; From 4d6965dcecfb097e0c3d31d9a58de302fba3ed7c Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Sat, 23 Apr 2022 11:21:51 +0200 Subject: [PATCH 59/78] Add missing news entry for GH-8421 --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index 0b44185be8fcb..574552c1202c8 100644 --- a/NEWS +++ b/NEWS @@ -95,6 +95,8 @@ PHP NEWS - Reflection: . Fixed bug GH-8080 (ReflectionClass::getConstants() depends on def. order). (cmb) + . Fixed bug GH-8421 (Closures should accept attributes with + Attribute::TARGET_FUNCTION). (ollieread) - Zlib: . Fixed bug GH-7953 (ob_clean() only does not set Content-Encoding). (cmb) From 6186ecd43634917fbe18aa3aed71499db6b30e73 Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Thu, 7 Apr 2022 14:24:04 +0100 Subject: [PATCH 60/78] Fix GH-8273: SplFileObject: key() returns wrong value --- NEWS | 3 +- ext/spl/spl_directory.c | 17 +++++--- .../SplFileObject_key_fgets_and seek.phpt | 39 +++++++++++++++++++ ext/spl/tests/gh8273.phpt | 24 ++++++++++++ 4 files changed, 76 insertions(+), 7 deletions(-) create mode 100644 ext/spl/tests/SplFileObject_key_fgets_and seek.phpt create mode 100644 ext/spl/tests/gh8273.phpt diff --git a/NEWS b/NEWS index 574552c1202c8..10f9f5210ab1e 100644 --- a/NEWS +++ b/NEWS @@ -22,6 +22,7 @@ PHP NEWS - SPL: . Fixed bug GH-8366 (ArrayIterator may leak when calling __construct()). (cmb) + . Fixed bug GH-8273 (SplFileObject: key() returns wrong value). (Girgias) - Streams: . Fixed php://temp does not preserve file-position when switched to temporary @@ -95,7 +96,7 @@ PHP NEWS - Reflection: . Fixed bug GH-8080 (ReflectionClass::getConstants() depends on def. order). (cmb) - . Fixed bug GH-8421 (Closures should accept attributes with + . Fixed bug GH-8421 (Closures should accept attributes with Attribute::TARGET_FUNCTION). (ollieread) - Zlib: diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index 165b986615999..8646ba20b0e7f 100644 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -1856,11 +1856,10 @@ static int spl_filesystem_object_cast(zend_object *readobj, zval *writeobj, int } /* }}} */ -static int spl_filesystem_file_read(spl_filesystem_object *intern, int silent) /* {{{ */ +static zend_result spl_filesystem_file_read_ex(spl_filesystem_object *intern, bool silent, zend_long line_add) /* {{{ */ { char *buf; size_t line_len = 0; - zend_long line_add = (intern->u.file.current_line || !Z_ISUNDEF(intern->u.file.current_zval)) ? 1 : 0; spl_filesystem_file_free_line(intern); @@ -1905,7 +1904,13 @@ static int spl_filesystem_file_read(spl_filesystem_object *intern, int silent) / return SUCCESS; } /* }}} */ -static int spl_filesystem_file_read_csv(spl_filesystem_object *intern, char delimiter, char enclosure, int escape, zval *return_value) /* {{{ */ +static inline zend_result spl_filesystem_file_read(spl_filesystem_object *intern, bool silent) +{ + zend_long line_add = (intern->u.file.current_line) ? 1 : 0; + return spl_filesystem_file_read_ex(intern, silent, line_add); +} + +static zend_result spl_filesystem_file_read_csv(spl_filesystem_object *intern, char delimiter, char enclosure, int escape, zval *return_value) /* {{{ */ { int ret = SUCCESS; zval *value; @@ -2185,7 +2190,7 @@ PHP_METHOD(SplFileObject, fgets) CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern); - if (spl_filesystem_file_read(intern, 0) == FAILURE) { + if (spl_filesystem_file_read_ex(intern, /* silent */ false, /* line_add */ 1) == FAILURE) { RETURN_THROWS(); } RETURN_STRINGL(intern->u.file.current_line, intern->u.file.current_line_len); @@ -2225,8 +2230,8 @@ PHP_METHOD(SplFileObject, key) RETURN_THROWS(); } -/* Do not read the next line to support correct counting with fgetc() - if (!intern->current_line) { + /* Do not read the next line to support correct counting with fgetc() + if (!intern->u.file.current_line) { spl_filesystem_file_read_line(ZEND_THIS, intern, 1); } */ RETURN_LONG(intern->u.file.current_line_num); diff --git a/ext/spl/tests/SplFileObject_key_fgets_and seek.phpt b/ext/spl/tests/SplFileObject_key_fgets_and seek.phpt new file mode 100644 index 0000000000000..eef6c37745d09 --- /dev/null +++ b/ext/spl/tests/SplFileObject_key_fgets_and seek.phpt @@ -0,0 +1,39 @@ +--TEST-- +SplFileObject verify interactions between seeking, getting the key and fgets +--FILE-- +fwrite("Foo $i\n"); +} + +$file->seek(50); + +var_dump( + ['line' => $file->key(), 'contents' => trim($file->fgets())], + ['line' => $file->key(), 'contents' => trim($file->fgets())], + ['line' => $file->key(), 'contents' => trim($file->fgets())], +); + +?> +--EXPECT-- +array(2) { + ["line"]=> + int(50) + ["contents"]=> + string(6) "Foo 50" +} +array(2) { + ["line"]=> + int(51) + ["contents"]=> + string(6) "Foo 51" +} +array(2) { + ["line"]=> + int(52) + ["contents"]=> + string(6) "Foo 52" +} diff --git a/ext/spl/tests/gh8273.phpt b/ext/spl/tests/gh8273.phpt new file mode 100644 index 0000000000000..87931541653b6 --- /dev/null +++ b/ext/spl/tests/gh8273.phpt @@ -0,0 +1,24 @@ +--TEST-- +GH-8273 (SplFileObject: key() returns wrong value) +--FILE-- +fwrite("line {$i}" . PHP_EOL); +} + +// read from file +$file->rewind(); +while ($file->valid()) { + echo $file->key(), ': ', $file->fgets(); +} +?> +--EXPECT-- +0: line 0 +1: line 1 +2: line 2 +3: line 3 +4: line 4 From 660ef91fbc359b31aa897e04b5e2d7b75e0c1633 Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Thu, 7 Apr 2022 14:24:04 +0100 Subject: [PATCH 61/78] Fix GH-8273: SplFileObject: key() returns wrong value --- NEWS | 1 + ext/spl/spl_directory.c | 17 +++++--- .../SplFileObject_key_fgets_and seek.phpt | 39 +++++++++++++++++++ ext/spl/tests/gh8273.phpt | 24 ++++++++++++ 4 files changed, 75 insertions(+), 6 deletions(-) create mode 100644 ext/spl/tests/SplFileObject_key_fgets_and seek.phpt create mode 100644 ext/spl/tests/gh8273.phpt diff --git a/NEWS b/NEWS index 048fdfea12fab..7f10a49abfb79 100644 --- a/NEWS +++ b/NEWS @@ -36,6 +36,7 @@ PHP NEWS - SPL: . Fixed bug GH-8366 (ArrayIterator may leak when calling __construct()). (cmb) + . Fixed bug GH-8273 (SplFileObject: key() returns wrong value). (Girgias) - Streams: . Fixed php://temp does not preserve file-position when switched to temporary diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index 9b4509461af34..4edc6361605fb 100644 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -1864,11 +1864,10 @@ static int spl_filesystem_object_cast(zend_object *readobj, zval *writeobj, int } /* }}} */ -static int spl_filesystem_file_read(spl_filesystem_object *intern, int silent) /* {{{ */ +static zend_result spl_filesystem_file_read_ex(spl_filesystem_object *intern, bool silent, zend_long line_add) /* {{{ */ { char *buf; size_t line_len = 0; - zend_long line_add = (intern->u.file.current_line || !Z_ISUNDEF(intern->u.file.current_zval)) ? 1 : 0; spl_filesystem_file_free_line(intern); @@ -1913,7 +1912,13 @@ static int spl_filesystem_file_read(spl_filesystem_object *intern, int silent) / return SUCCESS; } /* }}} */ -static int spl_filesystem_file_read_csv(spl_filesystem_object *intern, char delimiter, char enclosure, int escape, zval *return_value) /* {{{ */ +static inline zend_result spl_filesystem_file_read(spl_filesystem_object *intern, bool silent) +{ + zend_long line_add = (intern->u.file.current_line) ? 1 : 0; + return spl_filesystem_file_read_ex(intern, silent, line_add); +} + +static zend_result spl_filesystem_file_read_csv(spl_filesystem_object *intern, char delimiter, char enclosure, int escape, zval *return_value) /* {{{ */ { do { int ret = spl_filesystem_file_read(intern, 1); @@ -2176,7 +2181,7 @@ PHP_METHOD(SplFileObject, fgets) CHECK_SPL_FILE_OBJECT_IS_INITIALIZED(intern); - if (spl_filesystem_file_read(intern, 0) == FAILURE) { + if (spl_filesystem_file_read_ex(intern, /* silent */ false, /* line_add */ 1) == FAILURE) { RETURN_THROWS(); } RETURN_STRINGL(intern->u.file.current_line, intern->u.file.current_line_len); @@ -2214,8 +2219,8 @@ PHP_METHOD(SplFileObject, key) RETURN_THROWS(); } -/* Do not read the next line to support correct counting with fgetc() - if (!intern->current_line) { + /* Do not read the next line to support correct counting with fgetc() + if (!intern->u.file.current_line) { spl_filesystem_file_read_line(ZEND_THIS, intern, 1); } */ RETURN_LONG(intern->u.file.current_line_num); diff --git a/ext/spl/tests/SplFileObject_key_fgets_and seek.phpt b/ext/spl/tests/SplFileObject_key_fgets_and seek.phpt new file mode 100644 index 0000000000000..eef6c37745d09 --- /dev/null +++ b/ext/spl/tests/SplFileObject_key_fgets_and seek.phpt @@ -0,0 +1,39 @@ +--TEST-- +SplFileObject verify interactions between seeking, getting the key and fgets +--FILE-- +fwrite("Foo $i\n"); +} + +$file->seek(50); + +var_dump( + ['line' => $file->key(), 'contents' => trim($file->fgets())], + ['line' => $file->key(), 'contents' => trim($file->fgets())], + ['line' => $file->key(), 'contents' => trim($file->fgets())], +); + +?> +--EXPECT-- +array(2) { + ["line"]=> + int(50) + ["contents"]=> + string(6) "Foo 50" +} +array(2) { + ["line"]=> + int(51) + ["contents"]=> + string(6) "Foo 51" +} +array(2) { + ["line"]=> + int(52) + ["contents"]=> + string(6) "Foo 52" +} diff --git a/ext/spl/tests/gh8273.phpt b/ext/spl/tests/gh8273.phpt new file mode 100644 index 0000000000000..87931541653b6 --- /dev/null +++ b/ext/spl/tests/gh8273.phpt @@ -0,0 +1,24 @@ +--TEST-- +GH-8273 (SplFileObject: key() returns wrong value) +--FILE-- +fwrite("line {$i}" . PHP_EOL); +} + +// read from file +$file->rewind(); +while ($file->valid()) { + echo $file->key(), ': ', $file->fgets(); +} +?> +--EXPECT-- +0: line 0 +1: line 1 +2: line 2 +3: line 3 +4: line 4 From ff90d42b8bc292bd7bfc532e29e5cdff242ee3e1 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Mon, 18 Apr 2022 10:57:34 +0100 Subject: [PATCH 62/78] Fix FPM kqueue handler fix remove callback typo It avoids confusion on failed event. --- NEWS | 1 + sapi/fpm/fpm/events/kqueue.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 10f9f5210ab1e..92b0554c756ca 100644 --- a/NEWS +++ b/NEWS @@ -14,6 +14,7 @@ PHP NEWS . Fixed bug #76003 (FPM /status reports wrong number of active processe). (Jakub Zelenka) . Fixed bug #77023 (FPM cannot shutdown processes). (Jakub Zelenka) + . Fixed comment in kqueue remove callback log message. (David Carlier) - MySQLi: . Fixed bug GH-8267 (MySQLi uses unsupported format specifier on Windows). diff --git a/sapi/fpm/fpm/events/kqueue.c b/sapi/fpm/fpm/events/kqueue.c index 69a3f2405733f..bd904d6b90942 100644 --- a/sapi/fpm/fpm/events/kqueue.c +++ b/sapi/fpm/fpm/events/kqueue.c @@ -191,11 +191,11 @@ static int fpm_event_kqueue_remove(struct fpm_event_s *ev) /* {{{ */ EV_SET(&k, ev->fd, EVFILT_READ, flags, 0, 0, (void *)ev); if (kevent(kfd, &k, 1, NULL, 0, NULL) < 0) { - zlog(ZLOG_ERROR, "kevent: unable to add event"); + zlog(ZLOG_ERROR, "kevent: unable to delete event"); return -1; } - /* mark the vent as not registered */ + /* mark the event as not registered */ ev->index = -1; return 0; } From f5d9e7c031dd6f76a9970212d1627499a83ca2e3 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Wed, 20 Apr 2022 15:38:00 +0200 Subject: [PATCH 63/78] Fix GH-8364: msgfmt_format $values may not support references We need to deref any references passed in the `$values` array. While we could handle this in the type switch, doing it right away in the foreach loop makes that more explicit, and also circumvents the missing range checks for integers which are not passed as int or double. Closes GH-8407. --- NEWS | 3 +++ ext/intl/msgformat/msgformat_helpers.cpp | 1 + ext/intl/tests/gh8364.phpt | 20 ++++++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 ext/intl/tests/gh8364.phpt diff --git a/NEWS b/NEWS index 92b0554c756ca..e11cb461cc073 100644 --- a/NEWS +++ b/NEWS @@ -16,6 +16,9 @@ PHP NEWS . Fixed bug #77023 (FPM cannot shutdown processes). (Jakub Zelenka) . Fixed comment in kqueue remove callback log message. (David Carlier) +- Intl: + . Fixed bug GH-8364 (msgfmt_format $values may not support references). (cmb) + - MySQLi: . Fixed bug GH-8267 (MySQLi uses unsupported format specifier on Windows). (cmb) diff --git a/ext/intl/msgformat/msgformat_helpers.cpp b/ext/intl/msgformat/msgformat_helpers.cpp index 730a445577994..c1853c0340fe5 100644 --- a/ext/intl/msgformat/msgformat_helpers.cpp +++ b/ext/intl/msgformat/msgformat_helpers.cpp @@ -392,6 +392,7 @@ U_CFUNC void umsg_format_helper(MessageFormatter_object *mfo, zend_ulong num_index; ZEND_HASH_FOREACH_KEY_VAL(args, num_index, str_index, elem) { + ZVAL_DEREF(elem); Formattable& formattable = fargs[argNum]; UnicodeString& key = farg_names[argNum]; Formattable::Type argType = Formattable::kObject, //unknown diff --git a/ext/intl/tests/gh8364.phpt b/ext/intl/tests/gh8364.phpt new file mode 100644 index 0000000000000..74a0b5629ec9c --- /dev/null +++ b/ext/intl/tests/gh8364.phpt @@ -0,0 +1,20 @@ +--TEST-- +Bug GH-8364 (msgfmt_format $values may not support references) +--SKIPIF-- + +--FILE-- +format($args); +var_dump($result); +var_dump(intl_get_error_code()); +?> +--EXPECT-- +string(16) "translate string" +int(0) From 2397e7685e3bad9b06bafa69e478708f3c3aed4b Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Sun, 24 Apr 2022 14:53:04 +0200 Subject: [PATCH 64/78] Fix GH-8433: Assigning function pointers to structs in FFI leaks memory --- NEWS | 4 ++++ ext/ffi/ffi.c | 33 ++++++++++++++++++++++++++++++--- ext/ffi/tests/gh8433.phpt | 20 ++++++++++++++++++++ 3 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 ext/ffi/tests/gh8433.phpt diff --git a/NEWS b/NEWS index e11cb461cc073..e41da8a4516a2 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,10 @@ PHP NEWS . Fixed bug GH-7979 (DatePeriod iterator advances when checking if valid). (Derick, Cody Mann) +- FFI: + . Fixed bug GH-8433 (Assigning function pointers to structs in FFI leaks). + (Bob) + - FPM: . Fixed bug #76003 (FPM /status reports wrong number of active processe). (Jakub Zelenka) diff --git a/ext/ffi/ffi.c b/ext/ffi/ffi.c index 8f4a25b0d6227..fc8bb9a1b09f7 100644 --- a/ext/ffi/ffi.c +++ b/ext/ffi/ffi.c @@ -864,6 +864,14 @@ static void zend_ffi_callback_hash_dtor(zval *zv) /* {{{ */ if (callback_data->fcc.function_handler->common.fn_flags & ZEND_ACC_CLOSURE) { OBJ_RELEASE(ZEND_CLOSURE_OBJECT(callback_data->fcc.function_handler)); } + for (int i = 0; i < callback_data->arg_count; ++i) { + if (callback_data->arg_types[i]->type == FFI_TYPE_STRUCT) { + efree(callback_data->arg_types[i]); + } + } + if (callback_data->ret_type->type == FFI_TYPE_STRUCT) { + efree(callback_data->ret_type); + } efree(callback_data); } /* }}} */ @@ -917,6 +925,8 @@ static void zend_ffi_callback_trampoline(ffi_cif* cif, void* ret, void** args, v if (ret_type->kind != ZEND_FFI_TYPE_VOID) { zend_ffi_zval_to_cdata(ret, ret_type, &retval); } + + zval_ptr_dtor(&retval); } /* }}} */ @@ -967,6 +977,11 @@ static void *zend_ffi_create_callback(zend_ffi_type *type, zval *value) /* {{{ * callback_data->arg_types[n] = zend_ffi_get_type(arg_type); if (!callback_data->arg_types[n]) { zend_ffi_pass_unsupported(arg_type); + for (int i = 0; i < n; ++i) { + if (callback_data->arg_types[i]->type == FFI_TYPE_STRUCT) { + efree(callback_data->arg_types[i]); + } + } efree(callback_data); ffi_closure_free(callback); return NULL; @@ -977,6 +992,11 @@ static void *zend_ffi_create_callback(zend_ffi_type *type, zval *value) /* {{{ * callback_data->ret_type = zend_ffi_get_type(ZEND_FFI_TYPE(type->func.ret_type)); if (!callback_data->ret_type) { zend_ffi_return_unsupported(type->func.ret_type); + for (int i = 0; i < callback_data->arg_count; ++i) { + if (callback_data->arg_types[i]->type == FFI_TYPE_STRUCT) { + efree(callback_data->arg_types[i]); + } + } efree(callback_data); ffi_closure_free(callback); return NULL; @@ -984,13 +1004,20 @@ static void *zend_ffi_create_callback(zend_ffi_type *type, zval *value) /* {{{ * if (ffi_prep_cif(&callback_data->cif, type->func.abi, callback_data->arg_count, callback_data->ret_type, callback_data->arg_types) != FFI_OK) { zend_throw_error(zend_ffi_exception_ce, "Cannot prepare callback CIF"); - efree(callback_data); - ffi_closure_free(callback); - return NULL; + goto free_on_failure; } if (ffi_prep_closure_loc(callback, &callback_data->cif, zend_ffi_callback_trampoline, callback_data, code) != FFI_OK) { zend_throw_error(zend_ffi_exception_ce, "Cannot prepare callback"); +free_on_failure: ; + for (int i = 0; i < callback_data->arg_count; ++i) { + if (callback_data->arg_types[i]->type == FFI_TYPE_STRUCT) { + efree(callback_data->arg_types[i]); + } + } + if (callback_data->ret_type->type == FFI_TYPE_STRUCT) { + efree(callback_data->ret_type); + } efree(callback_data); ffi_closure_free(callback); return NULL; diff --git a/ext/ffi/tests/gh8433.phpt b/ext/ffi/tests/gh8433.phpt new file mode 100644 index 0000000000000..be5b5110313c3 --- /dev/null +++ b/ext/ffi/tests/gh8433.phpt @@ -0,0 +1,20 @@ +--TEST-- +GH-8433 (Assigning function pointers to structs in FFI leaks memory) +--FILE-- +new("bar(*)(void)"); +FFI::addr($x)[0] = function() use ($ffi) { + $bar = $ffi->new("bar"); + $bar->a = 2; + return $bar; +}; +var_dump($x()); + +?> +--EXPECTF-- +object(FFI\CData:struct )#%d (1) { + ["a"]=> + int(2) +} From a74b865123c66b135e5a95cce44a85a61055baca Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Sun, 24 Apr 2022 18:02:46 +0200 Subject: [PATCH 65/78] Add missing SKIPIF for new ext/ffi test --- ext/ffi/tests/gh8433.phpt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ext/ffi/tests/gh8433.phpt b/ext/ffi/tests/gh8433.phpt index be5b5110313c3..1b9d3c394427a 100644 --- a/ext/ffi/tests/gh8433.phpt +++ b/ext/ffi/tests/gh8433.phpt @@ -1,5 +1,9 @@ --TEST-- GH-8433 (Assigning function pointers to structs in FFI leaks memory) +--SKIPIF-- + --FILE-- Date: Mon, 25 Apr 2022 11:16:10 +0300 Subject: [PATCH 66/78] Fix type narrowing warning during type inference of ZEND_FETCH_DIM_W Fixes oss-fuzz #45820 --- ext/opcache/Optimizer/zend_inference.c | 5 +++-- ext/opcache/tests/opt/inference_004.phpt | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 ext/opcache/tests/opt/inference_004.phpt diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index 119ee91cd625f..36b63b8a1c8a8 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -3294,11 +3294,12 @@ static zend_always_inline int _zend_update_type_info( ZEND_ASSERT(j < 0 && "There should only be one use"); } } - if ((tmp & MAY_BE_ARRAY) && (tmp & MAY_BE_ARRAY_KEY_ANY)) { + if (((tmp & MAY_BE_ARRAY) && (tmp & MAY_BE_ARRAY_KEY_ANY)) || opline->opcode == ZEND_FETCH_DIM_FUNC_ARG) { UPDATE_SSA_TYPE(tmp, ssa_op->op1_def); } else { /* invalid key type */ - tmp = (tmp & (MAY_BE_RC1|MAY_BE_RCN)) | (t1 & ~(MAY_BE_RC1|MAY_BE_RCN)); + tmp = (tmp & (MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ARRAY)) | + (t1 & ~(MAY_BE_RC1|MAY_BE_RCN|MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE)); UPDATE_SSA_TYPE(tmp, ssa_op->op1_def); } COPY_SSA_OBJ_TYPE(ssa_op->op1_use, ssa_op->op1_def); diff --git a/ext/opcache/tests/opt/inference_004.phpt b/ext/opcache/tests/opt/inference_004.phpt new file mode 100644 index 0000000000000..377cef95d7cbe --- /dev/null +++ b/ext/opcache/tests/opt/inference_004.phpt @@ -0,0 +1,18 @@ +--TEST-- +Type inference 004: Type narrowing warning during type inference of ZEND_FETCH_DIM_W +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.optimization_level=-1 +--FILE-- +y = c; + $arr = c; + } +} +?> +DONE +--EXPECT-- +DONE From 3e78964742c05f6529615a48f75cbde7f7b3a1e2 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 25 Apr 2022 12:15:55 +0300 Subject: [PATCH 67/78] Fix type inference Use MAY_BE_NULL result (insted of empty) for ASSIGN_DIM with invalid arguments This fixes oss-fuzz #46840 --- ext/opcache/Optimizer/zend_inference.c | 3 +++ ext/opcache/tests/opt/inference_005.phpt | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 ext/opcache/tests/opt/inference_005.phpt diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index 36b63b8a1c8a8..aa9521a023359 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -2639,6 +2639,9 @@ static zend_always_inline int _zend_update_type_info( tmp |= MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING; } } + if (!tmp) { + tmp = MAY_BE_NULL; + } tmp |= MAY_BE_RC1 | MAY_BE_RCN; UPDATE_SSA_TYPE(tmp, ssa_op->result_def); } diff --git a/ext/opcache/tests/opt/inference_005.phpt b/ext/opcache/tests/opt/inference_005.phpt new file mode 100644 index 0000000000000..35d9c7b1a6fe0 --- /dev/null +++ b/ext/opcache/tests/opt/inference_005.phpt @@ -0,0 +1,16 @@ +--TEST-- +Type inference 005: Use MAY_BE_NULL result (insted of empty) for ASSIGN_DIM with invalid arguments +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.optimization_level=-1 +--FILE-- + +DONE +--EXPECT-- +DONE From 3b735456c6ef83ecb820dff3fb5ceb9edd753241 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 25 Apr 2022 13:09:05 +0300 Subject: [PATCH 68/78] Reorder optimization passes to avoid miss-optimization --- ext/opcache/Optimizer/zend_optimizer.c | 12 ++++++- ext/opcache/tests/opt/nullsafe_002.phpt | 4 +-- ext/opcache/tests/opt/prop_types.phpt | 48 ++++++++++++------------- ext/opcache/tests/opt/tmp_001.phpt | 18 ++++++++++ 4 files changed, 55 insertions(+), 27 deletions(-) create mode 100644 ext/opcache/tests/opt/tmp_001.phpt diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c index 62c32a5858c00..029ed233421f2 100644 --- a/ext/opcache/Optimizer/zend_optimizer.c +++ b/ext/opcache/Optimizer/zend_optimizer.c @@ -986,7 +986,8 @@ static void zend_optimize(zend_op_array *op_array, /* pass 9: * - Optimize temp variables usage */ - if (ZEND_OPTIMIZER_PASS_9 & ctx->optimization_level) { + if ((ZEND_OPTIMIZER_PASS_9 & ctx->optimization_level) && + !(ZEND_OPTIMIZER_PASS_7 & ctx->optimization_level)) { zend_optimize_temporary_variables(op_array, ctx); if (ctx->debug_level & ZEND_DUMP_AFTER_PASS_9) { zend_dump_op_array(op_array, 0, "after pass 9", NULL); @@ -1474,6 +1475,15 @@ int zend_optimize_script(zend_script *script, zend_long optimization_level, zend } } + if (ZEND_OPTIMIZER_PASS_9 & optimization_level) { + for (i = 0; i < call_graph.op_arrays_count; i++) { + zend_optimize_temporary_variables(call_graph.op_arrays[i], &ctx); + if (debug_level & ZEND_DUMP_AFTER_PASS_9) { + zend_dump_op_array(call_graph.op_arrays[i], 0, "after pass 9", NULL); + } + } + } + if (ZEND_OPTIMIZER_PASS_11 & optimization_level) { for (i = 0; i < call_graph.op_arrays_count; i++) { zend_optimizer_compact_literals(call_graph.op_arrays[i], &ctx); diff --git a/ext/opcache/tests/opt/nullsafe_002.phpt b/ext/opcache/tests/opt/nullsafe_002.phpt index 099fce11f0066..f98d8af064339 100644 --- a/ext/opcache/tests/opt/nullsafe_002.phpt +++ b/ext/opcache/tests/opt/nullsafe_002.phpt @@ -30,7 +30,7 @@ BB0: 0000 RETURN int(1) test: - ; (lines=7, args=1, vars=1, tmps=1, ssa_vars=6, no_loops) + ; (lines=7, args=1, vars=1, tmps=2, ssa_vars=6, no_loops) ; (before dfa pass) ; %s ; return [null] RANGE[0..0] @@ -41,7 +41,7 @@ BB0: ; level=0 ; children=(BB1, BB2) 0000 #1.CV0($test) [null, object (instanceof Test)] = RECV 1 -0001 INIT_FCALL 1 %d string("var_dump") +0001 INIT_FCALL 1 96 string("var_dump") 0002 #2.T1 [null] = JMP_NULL #1.CV0($test) [null, object (instanceof Test)] BB2 BB1: diff --git a/ext/opcache/tests/opt/prop_types.phpt b/ext/opcache/tests/opt/prop_types.phpt index c5858999d02c6..63246bd5c5491 100644 --- a/ext/opcache/tests/opt/prop_types.phpt +++ b/ext/opcache/tests/opt/prop_types.phpt @@ -50,7 +50,7 @@ BB0: 0000 RETURN int(1) noScope: - ; (lines=10, args=1, vars=1, tmps=1, ssa_vars=5, no_loops) + ; (lines=10, args=1, vars=1, tmps=4, ssa_vars=5, no_loops) ; (before dfa pass) ; %s ; return [null] RANGE[0..0] @@ -59,36 +59,36 @@ BB0: ; start exit lines=[0-9] ; level=0 0000 #1.CV0($test) [object (instanceof Test)] = RECV 1 -0001 INIT_FCALL 3 %d string("var_dump") +0001 INIT_FCALL 3 128 string("var_dump") 0002 #2.T1 [bool] = FETCH_OBJ_R #1.CV0($test) [object (instanceof Test)] string("public") 0003 SEND_VAL #2.T1 [bool] 1 -0004 #3.T1 [any] = FETCH_OBJ_R #1.CV0($test) [object (instanceof Test)] string("protected") -0005 SEND_VAL #3.T1 [any] 2 -0006 #4.T1 [any] = FETCH_OBJ_R #1.CV0($test) [object (instanceof Test)] string("private") -0007 SEND_VAL #4.T1 [any] 3 +0004 #3.T2 [any] = FETCH_OBJ_R #1.CV0($test) [object (instanceof Test)] string("protected") +0005 SEND_VAL #3.T2 [any] 2 +0006 #4.T3 [any] = FETCH_OBJ_R #1.CV0($test) [object (instanceof Test)] string("private") +0007 SEND_VAL #4.T3 [any] 3 0008 DO_ICALL 0009 RETURN null Test::inTest: - ; (lines=9, args=0, vars=0, tmps=1, ssa_vars=3, no_loops) + ; (lines=9, args=0, vars=0, tmps=4, ssa_vars=3, no_loops) ; (before dfa pass) ; %s ; return [null] RANGE[0..0] BB0: ; start exit lines=[0-8] ; level=0 -0000 INIT_FCALL 3 %d string("var_dump") +0000 INIT_FCALL 3 128 string("var_dump") 0001 #0.T0 [bool] = FETCH_OBJ_R THIS string("public") 0002 SEND_VAL #0.T0 [bool] 1 -0003 #1.T0 [long] = FETCH_OBJ_R THIS string("protected") -0004 SEND_VAL #1.T0 [long] 2 -0005 #2.T0 [double] = FETCH_OBJ_R THIS string("private") -0006 SEND_VAL #2.T0 [double] 3 +0003 #1.T1 [long] = FETCH_OBJ_R THIS string("protected") +0004 SEND_VAL #1.T1 [long] 2 +0005 #2.T2 [double] = FETCH_OBJ_R THIS string("private") +0006 SEND_VAL #2.T2 [double] 3 0007 DO_ICALL 0008 RETURN null Test::inTestWithTest2: - ; (lines=10, args=1, vars=1, tmps=1, ssa_vars=5, no_loops) + ; (lines=10, args=1, vars=1, tmps=4, ssa_vars=5, no_loops) ; (before dfa pass) ; %s ; return [null] RANGE[0..0] @@ -97,30 +97,30 @@ BB0: ; start exit lines=[0-9] ; level=0 0000 #1.CV0($test2) [object (instanceof Test2)] = RECV 1 -0001 INIT_FCALL 3 %d string("var_dump") +0001 INIT_FCALL 3 128 string("var_dump") 0002 #2.T1 [bool] = FETCH_OBJ_R #1.CV0($test2) [object (instanceof Test2)] string("public") 0003 SEND_VAL #2.T1 [bool] 1 -0004 #3.T1 [long] = FETCH_OBJ_R #1.CV0($test2) [object (instanceof Test2)] string("protected") -0005 SEND_VAL #3.T1 [long] 2 -0006 #4.T1 [double] = FETCH_OBJ_R #1.CV0($test2) [object (instanceof Test2)] string("private") -0007 SEND_VAL #4.T1 [double] 3 +0004 #3.T2 [long] = FETCH_OBJ_R #1.CV0($test2) [object (instanceof Test2)] string("protected") +0005 SEND_VAL #3.T2 [long] 2 +0006 #4.T3 [double] = FETCH_OBJ_R #1.CV0($test2) [object (instanceof Test2)] string("private") +0007 SEND_VAL #4.T3 [double] 3 0008 DO_ICALL 0009 RETURN null Test2::inTest2: - ; (lines=9, args=0, vars=0, tmps=1, ssa_vars=3, no_loops) + ; (lines=9, args=0, vars=0, tmps=4, ssa_vars=3, no_loops) ; (before dfa pass) ; %s ; return [null] RANGE[0..0] BB0: ; start exit lines=[0-8] ; level=0 -0000 INIT_FCALL 3 %d string("var_dump") +0000 INIT_FCALL 3 128 string("var_dump") 0001 #0.T0 [bool] = FETCH_OBJ_R THIS string("public") 0002 SEND_VAL #0.T0 [bool] 1 -0003 #1.T0 [long] = FETCH_OBJ_R THIS string("protected") -0004 SEND_VAL #1.T0 [long] 2 -0005 #2.T0 [array of [any, ref]] = FETCH_OBJ_R THIS string("private") -0006 SEND_VAL #2.T0 [array of [any, ref]] 3 +0003 #1.T1 [long] = FETCH_OBJ_R THIS string("protected") +0004 SEND_VAL #1.T1 [long] 2 +0005 #2.T2 [array of [any, ref]] = FETCH_OBJ_R THIS string("private") +0006 SEND_VAL #2.T2 [array of [any, ref]] 3 0007 DO_ICALL 0008 RETURN null diff --git a/ext/opcache/tests/opt/tmp_001.phpt b/ext/opcache/tests/opt/tmp_001.phpt new file mode 100644 index 0000000000000..83b679f5f76f1 --- /dev/null +++ b/ext/opcache/tests/opt/tmp_001.phpt @@ -0,0 +1,18 @@ +--TEST-- +TMP variable optimization 001: TMP variable renumbering should be done after DFA optimizations +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.optimization_level=-1 +--FILE-- + +--EXPECTF-- +Warning: Undefined variable $y in %stmp_001.php on line 2 + +Fatal error: Uncaught ArgumentCountError: is_a() expects at least 2 arguments, 1 given in %stmp_001.php:2 +Stack trace: +#0 %stmp_001.php(2): is_a(0) +#1 {main} + thrown in %stmp_001.php on line 2 \ No newline at end of file From 948ef10dd0f9ad5781f906d8a75f00ac1af059bd Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 25 Apr 2022 13:31:01 +0300 Subject: [PATCH 69/78] Fix ISSET_ISEMPTY_VAR missoptimization This fixes oss-fuzz #46909 --- Zend/Optimizer/zend_optimizer.c | 2 ++ ext/opcache/tests/opt/isset_var_001.phpt | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 ext/opcache/tests/opt/isset_var_001.phpt diff --git a/Zend/Optimizer/zend_optimizer.c b/Zend/Optimizer/zend_optimizer.c index c85d329a583eb..acde2d3f36863 100644 --- a/Zend/Optimizer/zend_optimizer.c +++ b/Zend/Optimizer/zend_optimizer.c @@ -323,6 +323,8 @@ int zend_optimizer_update_op1_const(zend_op_array *op_array, case ZEND_FETCH_IS: case ZEND_FETCH_UNSET: case ZEND_FETCH_FUNC_ARG: + case ZEND_ISSET_ISEMPTY_VAR: + case ZEND_UNSET_VAR: TO_STRING_NOWARN(val); if (opline->opcode == ZEND_CONCAT && opline->op2_type == IS_CONST) { opline->opcode = ZEND_FAST_CONCAT; diff --git a/ext/opcache/tests/opt/isset_var_001.phpt b/ext/opcache/tests/opt/isset_var_001.phpt new file mode 100644 index 0000000000000..4efdbb59786b3 --- /dev/null +++ b/ext/opcache/tests/opt/isset_var_001.phpt @@ -0,0 +1,19 @@ +--TEST-- +ISSET_ISEMPTY_VAR 001: CONST operand of ISSET_ISEMPTY_VAR must be converted to STRING +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.optimization_level=-1 +--FILE-- + +DONE +--EXPECT-- +DONE From 30f4c725cb7ed77f60bfcf1f71b7cb02c918bfce Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Tue, 12 Apr 2022 17:18:00 +0200 Subject: [PATCH 70/78] Fix GH-8218: ob_end_clean does not reset Content-Encoding header The fix for GH-7953 introduced a regression by being to deliberate adding the respective headers. These must only be added, if the handler starts, but is not finalizing. Closes GH-8353. --- NEWS | 8 ++++++++ ext/iconv/iconv.c | 2 +- ext/zlib/zlib.c | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index e41da8a4516a2..a0c66e675b585 100644 --- a/NEWS +++ b/NEWS @@ -20,6 +20,10 @@ PHP NEWS . Fixed bug #77023 (FPM cannot shutdown processes). (Jakub Zelenka) . Fixed comment in kqueue remove callback log message. (David Carlier) +- Iconv: + . Fixed bug GH-8218 (ob_end_clean does not reset Content-Encoding header). + (cmb) + - Intl: . Fixed bug GH-8364 (msgfmt_format $values may not support references). (cmb) @@ -36,6 +40,10 @@ PHP NEWS . Fixed php://temp does not preserve file-position when switched to temporary file. (Bernd Holzmüller) +- zlib: + . Fixed bug GH-8218 (ob_end_clean does not reset Content-Encoding header). + (cmb) + 14 Apr 2022, PHP 8.0.18 - Core: diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c index 7a66c965e3cbf..f23aa90f52db2 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -311,7 +311,7 @@ static int php_iconv_output_handler(void **nothing, php_output_context *output_c mimetype = SG(default_mimetype) ? SG(default_mimetype) : SAPI_DEFAULT_MIMETYPE; } - if (mimetype != NULL && (!(output_context->op & PHP_OUTPUT_HANDLER_CLEAN) || (output_context->op & PHP_OUTPUT_HANDLER_START))) { + if (mimetype != NULL && (!(output_context->op & PHP_OUTPUT_HANDLER_CLEAN) || ((output_context->op & PHP_OUTPUT_HANDLER_START) && !(output_context->op & PHP_OUTPUT_HANDLER_FINAL)))) { size_t len; char *p = strstr(get_output_encoding(), "//"); diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index f7cf0d5dac76a..774a31e18cd4e 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -281,7 +281,7 @@ static int php_zlib_output_handler(void **handler_context, php_output_context *o return FAILURE; } - if (!(output_context->op & PHP_OUTPUT_HANDLER_CLEAN) || (output_context->op & PHP_OUTPUT_HANDLER_START)) { + if (!(output_context->op & PHP_OUTPUT_HANDLER_CLEAN) || ((output_context->op & PHP_OUTPUT_HANDLER_START) && !(output_context->op & PHP_OUTPUT_HANDLER_FINAL))) { int flags; if (SUCCESS == php_output_handler_hook(PHP_OUTPUT_HANDLER_HOOK_GET_FLAGS, &flags)) { From 3564eaff42806e2fcc24e4faedd89076d34c9339 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Tue, 26 Apr 2022 08:31:42 +0300 Subject: [PATCH 71/78] Fixed tests --- ext/opcache/tests/opt/nullsafe_002.phpt | 2 +- ext/opcache/tests/opt/prop_types.phpt | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ext/opcache/tests/opt/nullsafe_002.phpt b/ext/opcache/tests/opt/nullsafe_002.phpt index f98d8af064339..a78e37e7e31bc 100644 --- a/ext/opcache/tests/opt/nullsafe_002.phpt +++ b/ext/opcache/tests/opt/nullsafe_002.phpt @@ -41,7 +41,7 @@ BB0: ; level=0 ; children=(BB1, BB2) 0000 #1.CV0($test) [null, object (instanceof Test)] = RECV 1 -0001 INIT_FCALL 1 96 string("var_dump") +0001 INIT_FCALL 1 %d string("var_dump") 0002 #2.T1 [null] = JMP_NULL #1.CV0($test) [null, object (instanceof Test)] BB2 BB1: diff --git a/ext/opcache/tests/opt/prop_types.phpt b/ext/opcache/tests/opt/prop_types.phpt index 63246bd5c5491..3be115520f359 100644 --- a/ext/opcache/tests/opt/prop_types.phpt +++ b/ext/opcache/tests/opt/prop_types.phpt @@ -59,7 +59,7 @@ BB0: ; start exit lines=[0-9] ; level=0 0000 #1.CV0($test) [object (instanceof Test)] = RECV 1 -0001 INIT_FCALL 3 128 string("var_dump") +0001 INIT_FCALL 3 %d string("var_dump") 0002 #2.T1 [bool] = FETCH_OBJ_R #1.CV0($test) [object (instanceof Test)] string("public") 0003 SEND_VAL #2.T1 [bool] 1 0004 #3.T2 [any] = FETCH_OBJ_R #1.CV0($test) [object (instanceof Test)] string("protected") @@ -77,7 +77,7 @@ Test::inTest: BB0: ; start exit lines=[0-8] ; level=0 -0000 INIT_FCALL 3 128 string("var_dump") +0000 INIT_FCALL 3 %d string("var_dump") 0001 #0.T0 [bool] = FETCH_OBJ_R THIS string("public") 0002 SEND_VAL #0.T0 [bool] 1 0003 #1.T1 [long] = FETCH_OBJ_R THIS string("protected") @@ -97,7 +97,7 @@ BB0: ; start exit lines=[0-9] ; level=0 0000 #1.CV0($test2) [object (instanceof Test2)] = RECV 1 -0001 INIT_FCALL 3 128 string("var_dump") +0001 INIT_FCALL 3 %d string("var_dump") 0002 #2.T1 [bool] = FETCH_OBJ_R #1.CV0($test2) [object (instanceof Test2)] string("public") 0003 SEND_VAL #2.T1 [bool] 1 0004 #3.T2 [long] = FETCH_OBJ_R #1.CV0($test2) [object (instanceof Test2)] string("protected") @@ -115,7 +115,7 @@ Test2::inTest2: BB0: ; start exit lines=[0-8] ; level=0 -0000 INIT_FCALL 3 128 string("var_dump") +0000 INIT_FCALL 3 %d string("var_dump") 0001 #0.T0 [bool] = FETCH_OBJ_R THIS string("public") 0002 SEND_VAL #0.T0 [bool] 1 0003 #1.T1 [long] = FETCH_OBJ_R THIS string("protected") From 52a18a6620649c6c9382701aaf803e1a6346cddd Mon Sep 17 00:00:00 2001 From: Gabriel Caruso Date: Tue, 26 Apr 2022 10:17:50 +0200 Subject: [PATCH 72/78] Prepare for PHP 8.0.20 --- NEWS | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index a0c66e675b585..19706b19b06a3 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -?? ??? 2022, PHP 8.0.19 +?? ??? 2022, PHP 8.0.20 + + +12 May 2022, PHP 8.0.19 - Core: . Fixed bug GH-8289 (Exceptions thrown within a yielded from iterator are From 4bb0dd49d836c14754823d03f978794a48058005 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Mon, 11 Apr 2022 18:23:33 +0000 Subject: [PATCH 73/78] Haiku fix ZTS build disabling `tsrm_ls_cache` usage. --- NEWS | 2 ++ TSRM/TSRM.c | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 19706b19b06a3..b3bfd952d8757 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,8 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2022, PHP 8.0.20 +- Core: + . Fixed Haiku ZTS builds. (David Carlier) 12 May 2022, PHP 8.0.19 diff --git a/TSRM/TSRM.c b/TSRM/TSRM.c index 1401ab2d88581..11f9cdb8ed4bc 100644 --- a/TSRM/TSRM.c +++ b/TSRM/TSRM.c @@ -736,13 +736,15 @@ TSRM_API size_t tsrm_get_ls_cache_tcb_offset(void) #if defined(__APPLE__) && defined(__x86_64__) // TODO: Implement support for fast JIT ZTS code ??? return 0; -#elif defined(__x86_64__) && defined(__GNUC__) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__MUSL__) +#elif defined(__x86_64__) && defined(__GNUC__) && !defined(__FreeBSD__) && \ + !defined(__OpenBSD__) && !defined(__MUSL__) && !defined(__HAIKU__) size_t ret; asm ("movq _tsrm_ls_cache@gottpoff(%%rip),%0" : "=r" (ret)); return ret; -#elif defined(__i386__) && defined(__GNUC__) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__MUSL__) +#elif defined(__i386__) && defined(__GNUC__) && !defined(__FreeBSD__) && \ + !defined(__OpenBSD__) && !defined(__MUSL__) && !defined(__HAIKU__) size_t ret; asm ("leal _tsrm_ls_cache@ntpoff,%0" From 87f341b1c2841062128290e56991924c6f73a5bd Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Tue, 26 Apr 2022 16:43:30 +0100 Subject: [PATCH 74/78] Return early when the timezone info is NULL. The guess_timezone function does throw an error, but throwing an error doesn't immediate make the PHP_FUNCTION return. This check is really only necessary for distributions that patch PHP's timelib to use system tzdata, but not correct enough to account for their implementation to guarantee to return a timezone. --- ext/date/php_date.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 5d0b57eab25a9..a0dcdeb1c12fb 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1035,6 +1035,9 @@ PHP_FUNCTION(strtotime) } tzi = get_timezone_info(); + if (!tzi) { + return; + } now = timelib_time_ctor(); now->tz_info = tzi; @@ -1094,6 +1097,9 @@ PHPAPI void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gmt) timelib_unixtime2gmt(now, (timelib_sll) php_time()); } else { tzi = get_timezone_info(); + if (!tzi) { + return; + } now->tz_info = tzi; now->zone_type = TIMELIB_ZONETYPE_ID; timelib_unixtime2local(now, (timelib_sll) php_time()); @@ -1215,6 +1221,9 @@ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) timelib_unixtime2gmt(ts, (timelib_sll) timestamp); } else { tzi = get_timezone_info(); + if (!tzi) { + return; + } ts->tz_info = tzi; ts->zone_type = TIMELIB_ZONETYPE_ID; timelib_unixtime2local(ts, (timelib_sll) timestamp); @@ -1323,6 +1332,9 @@ PHP_FUNCTION(localtime) } tzi = get_timezone_info(); + if (!tzi) { + return; + } ts = timelib_time_ctor(); ts->tz_info = tzi; ts->zone_type = TIMELIB_ZONETYPE_ID; @@ -1374,6 +1386,9 @@ PHP_FUNCTION(getdate) } tzi = get_timezone_info(); + if (!tzi) { + return; + } ts = timelib_time_ctor(); ts->tz_info = tzi; ts->zone_type = TIMELIB_ZONETYPE_ID; @@ -2276,6 +2291,9 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, const char *time_str, size tzi = dateobj->time->tz_info; } else { tzi = get_timezone_info(); + if (!tzi) { + return 0; + } } now = timelib_time_ctor(); @@ -4464,6 +4482,9 @@ PHP_FUNCTION(date_default_timezone_get) ZEND_PARSE_PARAMETERS_NONE(); default_tz = get_timezone_info(); + if (!default_tz) { + return; + } RETVAL_STRING(default_tz->name); } /* }}} */ @@ -4519,8 +4540,11 @@ static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_su altitude = 90 - zenith; /* Initialize time struct */ - t = timelib_time_ctor(); tzi = get_timezone_info(); + if (!tzi) { + return; + } + t = timelib_time_ctor(); t->tz_info = tzi; t->zone_type = TIMELIB_ZONETYPE_ID; @@ -4590,8 +4614,11 @@ PHP_FUNCTION(date_sun_info) ZEND_PARSE_PARAMETERS_END(); /* Initialize time struct */ - t = timelib_time_ctor(); tzi = get_timezone_info(); + if (!tzi) { + return; + } + t = timelib_time_ctor(); t->tz_info = tzi; t->zone_type = TIMELIB_ZONETYPE_ID; timelib_unixtime2local(t, time); From b461c4673bc15372556d40ab5e8ac9a0d02e7704 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Tue, 26 Apr 2022 17:57:47 +0100 Subject: [PATCH 75/78] Use the new RETURN_THROWS() instead of just returning NULL --- ext/date/php_date.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ext/date/php_date.c b/ext/date/php_date.c index a0dcdeb1c12fb..ac14ed9f50a56 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1333,7 +1333,7 @@ PHP_FUNCTION(localtime) tzi = get_timezone_info(); if (!tzi) { - return; + RETURN_THROWS(); } ts = timelib_time_ctor(); ts->tz_info = tzi; @@ -1387,7 +1387,7 @@ PHP_FUNCTION(getdate) tzi = get_timezone_info(); if (!tzi) { - return; + RETURN_THROWS(); } ts = timelib_time_ctor(); ts->tz_info = tzi; @@ -4483,7 +4483,7 @@ PHP_FUNCTION(date_default_timezone_get) default_tz = get_timezone_info(); if (!default_tz) { - return; + RETURN_THROWS(); } RETVAL_STRING(default_tz->name); } @@ -4542,7 +4542,7 @@ static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_su /* Initialize time struct */ tzi = get_timezone_info(); if (!tzi) { - return; + RETURN_THROWS(); } t = timelib_time_ctor(); t->tz_info = tzi; @@ -4616,7 +4616,7 @@ PHP_FUNCTION(date_sun_info) /* Initialize time struct */ tzi = get_timezone_info(); if (!tzi) { - return; + RETURN_THROWS(); } t = timelib_time_ctor(); t->tz_info = tzi; From a4fdeaebe419b88e3b4a1f5aba845c2d4e81fd4e Mon Sep 17 00:00:00 2001 From: Ben Ramsey Date: Tue, 26 Apr 2022 19:04:15 -0500 Subject: [PATCH 76/78] Update NEWS for PHP 8.1.6RC1 --- NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS b/NEWS index ea99ae16d0d1f..bb427af2d2c8a 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,6 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -?? ??? ????, PHP 8.1.6 +28 Apr 2022, PHP 8.1.6RC1 - Core: . Fixed bug GH-8310 (Registry settings are no longer recognized). (cmb) From 11fde11221e5298021d4f211aeea3396f652490c Mon Sep 17 00:00:00 2001 From: Ben Ramsey Date: Tue, 10 May 2022 20:02:08 -0500 Subject: [PATCH 77/78] Prepare for PHP 8.1.6 GA --- NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS b/NEWS index bb427af2d2c8a..6d693999e573f 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,6 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -28 Apr 2022, PHP 8.1.6RC1 +12 May 2022, PHP 8.1.6 - Core: . Fixed bug GH-8310 (Registry settings are no longer recognized). (cmb) From 4d2e782aaaf8ff7579a0a9120f942f10b6f1785a Mon Sep 17 00:00:00 2001 From: Ben Ramsey Date: Tue, 10 May 2022 20:04:44 -0500 Subject: [PATCH 78/78] Update versions for PHP 8.1.6 --- Zend/zend.h | 2 +- configure.ac | 2 +- main/php_version.h | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Zend/zend.h b/Zend/zend.h index 568f42de2a828..7f22ff7ac54dc 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -20,7 +20,7 @@ #ifndef ZEND_H #define ZEND_H -#define ZEND_VERSION "4.1.6-dev" +#define ZEND_VERSION "4.1.6" #define ZEND_ENGINE_3 diff --git a/configure.ac b/configure.ac index 8e5f67e232597..ef531199f4b88 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,7 @@ dnl Basic autoconf initialization, generation of config.nice. dnl ---------------------------------------------------------------------------- AC_PREREQ([2.68]) -AC_INIT([PHP],[8.1.6-dev],[https://bugs.php.net],[php],[https://www.php.net]) +AC_INIT([PHP],[8.1.6],[https://bugs.php.net],[php],[https://www.php.net]) AC_CONFIG_SRCDIR([main/php_version.h]) AC_CONFIG_AUX_DIR([build]) AC_PRESERVE_HELP_ORDER diff --git a/main/php_version.h b/main/php_version.h index 7c86754855360..f03f4edf78ef2 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -3,6 +3,6 @@ #define PHP_MAJOR_VERSION 8 #define PHP_MINOR_VERSION 1 #define PHP_RELEASE_VERSION 6 -#define PHP_EXTRA_VERSION "-dev" -#define PHP_VERSION "8.1.6-dev" +#define PHP_EXTRA_VERSION "" +#define PHP_VERSION "8.1.6" #define PHP_VERSION_ID 80106