Module Name:    src
Committed By:   kre
Date:           Mon Feb  5 21:52:39 UTC 2024

Modified Files:
        src/external/public-domain/tz: tzdata2netbsd
        src/external/public-domain/tz/dist: TZDATA_VERSION asia australasia
            leap-seconds.list leapseconds version

Log Message:
Complete tzdata2024a update (using tzdata2024agtz) by fixing files that
the script manages to forget to handle.


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/external/public-domain/tz/tzdata2netbsd
cvs rdiff -u -r1.36 -r1.37 src/external/public-domain/tz/dist/TZDATA_VERSION
cvs rdiff -u -r1.11 -r1.12 src/external/public-domain/tz/dist/asia \
    src/external/public-domain/tz/dist/version
cvs rdiff -u -r1.8 -r1.9 src/external/public-domain/tz/dist/australasia
cvs rdiff -u -r1.6 -r1.7 src/external/public-domain/tz/dist/leap-seconds.list \
    src/external/public-domain/tz/dist/leapseconds

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/public-domain/tz/tzdata2netbsd
diff -u src/external/public-domain/tz/tzdata2netbsd:1.15 src/external/public-domain/tz/tzdata2netbsd:1.16
--- src/external/public-domain/tz/tzdata2netbsd:1.15	Wed Aug 17 14:32:34 2022
+++ src/external/public-domain/tz/tzdata2netbsd	Mon Feb  5 21:52:38 2024
@@ -1,4 +1,4 @@
-# $NetBSD: tzdata2netbsd,v 1.15 2022/08/17 14:32:34 kre Exp $
+# $NetBSD: tzdata2netbsd,v 1.16 2024/02/05 21:52:38 kre Exp $
 
 # For use by NetBSD developers when updating to new versions of tzdata.
 #
@@ -22,7 +22,7 @@ VERS_PATTERN='2[0-9][0-9][0-9][a-z]'
 # First in the late xx90's sometime, allow the new one by changing the leading
 # digit from a specific value to the class containing the current and
 # following values (eg: in 2098 or so, change '2' to be '[23]').
-# Tnen in the following early xx00's sometime, delete the class, and insert
+# Then in the following early xx00's sometime, delete the class, and
 # leave only the current value as valid (eg: in 3001 or 3002,
 # change '[23]' to be just '3'
 # Doing it this way helps guard against invalid specifications.
@@ -42,13 +42,20 @@ VERS_PATTERN='2[0-9][0-9][0-9][a-z]'
 # need to match those.
 # If that convention changes (as of date of writing, it has never been
 # exercised) then code changes below will be required.
+# Note it doesn't matter (here) if nnnnz is followed by nnnnaa or nnnnza
 
 DIST_HOST=ftp.iana.org
 DIST_PATH=tz
 DIST_FILES=releases
 
+GTZURL=https://github.com/JodaOrg/global-tz/releases/download
+
 EDITOR=${EDITOR:-vi}
-WORK_PFX=$(pwd)/update-work || fail "Cannot obtain PWD"
+
+TZBASE=$(pwd)	|| fail 'Cannot find myself ($PWD)'
+cd -P "$TZBASE"	|| fail "Cannot return home: ${TZBASE}"
+
+WORK_PFX=${TZBASE}/update-work
 UPDATE_FROM=${WORK_PFX}/updating.from.version
 
 usage()
@@ -58,7 +65,11 @@ usage()
 		"     where a version-id is of the form YYYYx (eg: 2018c)" \
 		"     or '' for new-version-id (to specify only the old)"  \
 		"     and where new-version-id can have =fetch-version-id" \
-		"     appended to specify fetching that version instead"
+		"     appended to specify fetching that version instead" \
+		"     where the 'fetch-version-id' can be omitted if it" \
+		"     is \${new-version-id}gtz  - and simply using '=' means" \
+		"     to work out the new-version-id but then use the gtz fork"
+
 	exit 2
 }
 
@@ -138,15 +149,29 @@ argparse()
 	case "$#" in
 	0|1)
 		# once we have obtained OLDVER once, never guess it again.
-		test -f "${UPDATE_FROM}" && OLDVER=$(cat "${UPDATE_FROM}") ||
+		if  [ -f "${UPDATE_FROM}" ]
+		then
+			OLDVER=$(cat "${UPDATE_FROM}")
+		elif [ -f dist/TZDATA_VERSION ]
+		then
+			OLDVER=$(cat dist/TZDATA_VERSION)
+		elif [ -f dist/version ]
+		then
+			OLDVER=$(cat dist/version)
+		fi
+		OLDVER=${OLDVER#tzdata}		# TZDATA_VERS is tzdata-nnnnX
+		OLDVER=${OLDVER#-}		# but the '-' is optional
+		OLDVERGTZ=${OLDVER}		# This would have been the cvs tag
+		OLDVER=${OLDVER%gtz}		# want the base version elsewhere
 
-		OLDVER=$(cat dist/version) || {
+		if [ -z "${OLDVER}" ]
+		then
 			printf >&2 '%s\n'  \
-			    "Cannot determine current installed version"  \
-			    "Specify it on the command line."  \
-			    ""
+			    'Cannot determine current installed version'  \
+			    'Specify it on the command line.'  \
+			    ''
 			usage
-		}
+		fi
 
 		valid_vers old "${OLDVER}" ||
 			fail "Calculated bad OLDVER, give as 2nd arg"
@@ -159,9 +184,12 @@ argparse()
 		;;
 	esac
 
+	GLOBAL=false
 	case "$#:$1" in
 	0: | 1: | 2: )
 		;;
+	1:=|2:=)
+		GLOBAL=true;;
 	1:=?*|2:=?*)	
 		valid_vers fetch "${1#=}" && FETCHVER="${1#=}" || usage
 		;;
@@ -179,19 +207,27 @@ argparse()
 
 	test -z "${NEWVER}" && get_curvers
 
-	test -z "${FETCHVER}" && FETCHVER=${NEWVER}
+	if [ -z "${FETCHVER}" ]
+	then
+		if $GLOBAL
+		then
+			FETCHVER=${NEWVER}gtz
+		else
+			FETCHVER=${NEWVER}
+		fi
+	fi
 
 	case "${FETCHVER}" in
 	*gtz)	GLOBAL=true;;
 	*)	GLOBAL=false;;
 	esac
 
-	test "${NEWVER}" = "${OLDVER}" && {
-		printf '%s\n' \
-		     "New and old versions both ${NEWVER}: nothing to do"
+	if [ "${NEWVER}" = "${OLDVER}" ]
+	then
+		printf 'New and old versions both %s; nothing to do\n' \
+		     "${NEWVER}"
 		exit 0
-
-	}
+	fi
 
 	printf '%s\n' "${OLDVER}" > "${UPDATE_FROM}" ||
 	    fail "Unable to preserve old version ${OLDVER} in ${UPDATE_FROM}"
@@ -247,7 +283,7 @@ argparse()
 setup_versions()
 {
 	# Uppercase variants of OLDVER and NEWVER
-	OLDVER_UC="$( echo "${OLDVER}" | tr '[a-z]' '[A-Z]' )"
+	OLDVER_UC="$( echo "${OLDVERGTZ}" | tr '[a-z]' '[A-Z]' )"
 	NEWVER_UC="$( echo "${NEWVER}" | tr '[a-z]' '[A-Z]' )"
 
 	# Tags for use with version control systems
@@ -264,8 +300,7 @@ setup_versions()
 	# URLs for fetching distribution files, etc.
 	if $GLOBAL
 	then
-		DISTURL=https://github.com/JodaOrg/global-tz/releases/download
-		DISTURL=${DISTURL}/${FETCHVER}/tzdata${FETCHVER}.tar.gz
+		DISTURL=${GTZURL}/${FETCHVER}/tzdata${FETCHVER}.tar.gz
 		unset SIGURL
 	else
 		DISTURL="ftp://${DIST_HOST}/${DIST_PATH}/${DIST_FILES}";
@@ -422,6 +457,13 @@ mkworkdir()
 	mkdir -p "${WORKDIR}" || fail "Unable to make missing ${WORKDIR}"
 }
 
+cvsupdate()
+(
+	# Make sure our working directory is up to date (and HEAD)
+	cd "${TZBASE}/dist"			|| exit 1
+	cvs -d "${CVSROOT}" -q update -AdP	|| exit 2
+)
+
 fetch()
 {
 	[ -f "${DISTFILE}" ] || ftp -o "${DISTFILE}" "${DISTURL}" ||
@@ -464,6 +506,121 @@ extract()
 	tar -z -xf "${DISTFILE}" -C "${EXTRACTDIR}"
 }
 
+rflist()
+(
+	 test "${1}" && cd "${1}" && find * -print | sort
+)
+
+zonelists()
+{
+	[ -f "${WORKDIR}"/addedzones ] && return
+
+	rm -fr "${WORK_PFX}"/oldzones "${WORK_PFX}"/newzones
+
+	(
+		cd "${TZBASE}/share/zoneinfo" || exit 1
+
+		make	TOOL_ZIC=/usr/sbin/zic			\
+			DESTDIR=				\
+			TZBUILDDIR="${WORK_PFX}"/oldzones	\
+			TZDIR="${WORK_PFX}"/oldzones		\
+			TZDISTDIR="${TZBASE}"/dist		\
+				posix_only >/dev/null 2>&1
+
+	) || fail 'Unable to compile old zone data files'
+
+	(
+		cd "${TZBASE}/share/zoneinfo" || exit 1
+
+		make	TOOL_ZIC=/usr/sbin/zic			\
+			DESTDIR=				\
+			TZBUILDDIR="${WORK_PFX}"/newzones	\
+			TZDIR="${WORK_PFX}"/newzones		\
+			TZDISTDIR="${EXTRACTDIR}"		\
+				posix_only >/dev/null 2>&1
+
+	) || fail 'Unable to compile new zone data files'
+
+	rflist "${WORK_PFX}"/oldzones > "${WORKDIR}"/oldzones
+	rflist "${WORK_PFX}"/newzones > "${WORKDIR}"/newzones
+
+	if cmp -s "${WORKDIR}"/oldzones "${WORKDIR}"/newzones >/dev/null
+	then
+		printf "No zones added or deleted by this update"
+		> "${WORKDIR}"/removedzones
+		> "${WORKDIR}"/addedzones
+		return 0
+	fi
+
+	comm -23 "${WORKDIR}"/oldzones "${WORKDIR}"/newzones \
+		> "${WORKDIR}"/removedzones
+
+	test "${REMOVEOK:-no}" != yes && test -s "${WORKDIR}"/removedzones && {
+		printf '%s\n' 'This update wants to remove these zone files:' ''
+		sed 's/^/	/' < "${WORKDIR}"/removedzones
+		printf '%s\n' '' 'It probably should not' ''
+
+		printf 'If this is OK, rerun this script with REMOVEOK=yes\n'
+		printf 'Otherwise, fix the problem, and then rerun the script\n'
+		exit 1
+	}
+
+	comm -13 "${WORKDIR}"/oldzones "${WORKDIR}"/newzones \
+		> "${WORKDIR}"/addedzones
+
+	test -s "${WORKDIR}"/addedzones && {
+		printf '%s\n' '' '********************************* NOTE:' \
+			'********************************* New Zones Created' \
+			''
+		sed 's/^/	/' < "${WORKDIR}"/addedzones
+		printf '%s\n' '' '*********************************' ''
+	}
+
+	return 0
+}
+
+updatedzones()
+{
+	[ -f "${WORKDIR}"/.zonesOK ] && return
+
+	rm -fr "${WORK_PFX}"/updzones
+
+	(
+		cd "${TZBASE}/share/zoneinfo" || exit 1
+
+		make	TOOL_ZIC=/usr/sbin/zic			\
+			DESTDIR=				\
+			TZBUILDDIR="${WORK_PFX}"/updzones	\
+			TZDIR="${WORK_PFX}"/updzones		\
+			TZDISTDIR="${TZBASE}"/dist		\
+				posix_only >/dev/null 2>&1
+
+	) || fail 'Unable to compile updated zone data.   HELP'
+
+	rflist "${WORK_PFX}"/updzones > "${WORKDIR}"/updzones
+
+	cmp -s "${WORKDIR}"/newzones "${WORKDIR}"/updzones || {
+
+		printf '%s\n' '' '*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*' \
+			'After cvs work, zones created are not as intended' \
+			'-------------------------------------------------' \
+			'Zones not created but should have been:'
+		comm -23 "${WORKDIR}"/newzones "${WORKDIR}"/updzones |
+			sed 's/^/	/'
+		printf '%s\n' \
+			'-------------------------------------------------' \
+			'Zones created that should not have been:'
+		comm -13 "${WORKDIR}"/newzones "${WORKDIR}"/updzones |
+			sed 's/^/	/'
+		prinrf '%s\n' \
+			'-------------------------------------------------'
+
+		fail 'cvs import/merge/update/commit botch'
+	}
+
+	> "${WORKDIR}"/.zonesOK
+}
+
 addnews()
 {
 	[ -f "${EXTRACTDIR}/NEWS" ] && return
@@ -492,7 +649,13 @@ trimnews()
 		// { if (inrange) print; }
 	    ' \
 		<"${NEWSFILE}" >"${NEWSTRIMFILE}"
-	echo "tzdata-${NEWVER}" > ${TZDISTDIR}/TZDATA_VERSION
+
+	if $GLOBAL
+	then
+		printf '%s\n' "tzdata-${NEWVER}gtz"
+	else
+		printf '%s\n' "tzdata-${NEWVER}"
+	fi > ${TZDISTDIR}/TZDATA_VERSION
 }
 
 # Create IMPORTMSGFILE from NEWSTRIMFILE, by ignoring some sections,
@@ -558,12 +721,24 @@ EOF
 	    ' \
 		<"${NEWSTRIMFILE}"
 	} >"${IMPORTMSGFILE}"
+
+	if [ -s "${WORKDIR}"/addedzones ]
+	then
+		printf '%s\n' '' 'Zones added by this update:'
+		sed 's/^/	/' < "${WORKDIR}"/addedzones
+	fi >> "${IMPORTMSGFILE}"
+
+	if [ -s "${WORKDIR}"/removedzones ]
+	then
+		printf '%s\n' '' 'Zones removed by this update:'
+		sed 's/^/	/' < "${WORKDIR}"/removedzones
+	fi >> "${IMPORTMSGFILE}"
+
 }
 
 editimportmsg()
 {
-	if [ -s "${IMPORTMSGFILE}" ] \
-	&& ! grep -q '^EDIT' "${IMPORTMSGFILE}"
+	if [ -s "${IMPORTMSGFILE}" ] && ! grep -q '^EDIT' "${IMPORTMSGFILE}"
 	then
 		return 0 # file has already been edited
 	fi
@@ -580,8 +755,7 @@ The CVS import has already been performe
 EOF
 		return 0
 	fi
-	if ! [ -s "${IMPORTMSGFILE}" ] \
-	|| grep -q '^EDIT' "${IMPORTMSGFILE}"
+	if ! [ -s "${IMPORTMSGFILE}" ] || grep -q '^EDIT' "${IMPORTMSGFILE}"
 	then
 		cat >&2 <<EOF
 The message file ${IMPORTMSGFILE}
@@ -591,7 +765,7 @@ EOF
 		return 1
 	fi
 	( cd "${EXTRACTDIR}" &&
-	  DOIT cvs -d "${CVSROOT}" import -m "$(cat "${IMPORTMSGFILE}")" \
+	  DOIT cvs -d "${CVSROOT}" import -I ! -m "$(cat "${IMPORTMSGFILE}")" \
 		"${REPODIR}" "${CVSBRANCHTAG}" "${CVSNEWTAG}"
 	) && touch "${IMPORTDONEFILE}"
 }
@@ -600,14 +774,20 @@ cvsmerge()
 {
 
 	cd "${TZDISTDIR}" || exit 1
-	if [ -e "${MERGEDONEFILE}" ]; then
+	if [ -e "${MERGEDONEFILE}" ]
+	then
 		cat >&2 <<EOF
 The CVS merge has already been performed.
 EOF
 		return 0
 	fi
-	DOIT cvs -d "${CVSROOT}" update -j"${CVSOLDTAG}" -j"${CVSNEWTAG}" \
-	&& touch "${MERGEDONEFILE}"
+	DOIT cvs -d "${CVSROOT}" update -j"${CVSOLDTAG}" -j"${CVSNEWTAG}" &&
+		touch "${MERGEDONEFILE}"
+	printf '%s\n' ================================== \
+		'The following differences exist between the merge results' \
+		'and the imported files:' '================================='
+	diff -ur "${EXTRACTDIR}" .
+	printf '%s\n' ==================================
 }
 
 resolveconflicts()
@@ -640,8 +820,128 @@ The CVS commmit (of the merge result) ha
 EOF
 		return 0
 	fi
-	DOIT cvs -d "${CVSROOT}" commit -m "Merge tzdata${NEWVER}" \
-	&& touch "${COMMITMERGEDONEFILE}"
+	DOIT cvs -d "${CVSROOT}" commit -m "Merge tzdata${NEWVER}" &&
+		touch "${COMMITMERGEDONEFILE}"
+}
+
+setlistupdate()
+{
+	if [ -s "${WORKDIR}"/addedzones ] ||
+	   [ -s "${WORKDIR}"/removedzones ]
+	then	(
+			# Do all the preparatory work first, so
+			# when we get to manipulating the sets list file
+			# it all happens quickly...
+
+			while read file
+			do
+				printf '\\!zoneinfo/%s!{ %s ; %s ; }\n'     \
+					"${file}"			    \
+					's/sys-share	/obsolete	/'  \
+					's/	share$/	obsolete/'
+			done < "${WORKDIR}"/removedzones > "${WORKDIR}/sedcmds"
+
+			while read file
+			do
+				P=./usr/share/zoneinfo/"${file}"
+				T2='		'
+				case "$(( 48 - ${#P} ))" in
+				-*|0)	T2='	'	T='	'	 ;;
+				[12345678])		T='	'	 ;;
+				9|1[0123456])		T='		';;
+				1[789]|2[01234]) T='			';;
+				2[5-9]|3[012])
+					T='				';;
+				# the following cases can't happen,
+				# but for completeness...
+				3[3-9])
+				    T='					';;
+				*)  T='				'
+				    T="${T}		"		;;
+				esac
+
+				if [ -d "${WORKDIR}/newzones/${file}" ]
+				then
+					printf '%s%sbase-sys-share\n' \
+						"${P}" "${T}"
+					continue
+				fi
+
+				printf '%s%sbase-sys-share%sshare\n' \
+					"${P}" "${T}" "${T2}"
+
+				# Deal with possibility that a new file
+				# might have previously existed, and then
+				# been deleted - marked obsolete
+				printf '\\!^%s	.*obsolete!d\n' "${P}" \
+					>> "${WORKDIR}/sedcmds"
+
+			done < "${WORKDIR}"/addedzones > "${WORKDIR}/setadded"
+
+			printf '$r %s\n' "${WORKDIR}/setadded" \
+				>> "${WORKDIR}/sedcmds"
+
+			if ! [ -s "${WORKDIR}/sedcmds" ]	# impossible?
+			then
+				exit 0
+			fi
+
+			MSG=$( 
+				printf 'tzdata update to %s\n' "$NEWVER"
+				if [ -s "${WORKDIR}"/addedzones ]
+				then
+					printf 'Added zoneinfo files:\n'
+					sed 's/^/	/'	\
+						< "${WORKDIR}"/addedzones
+				fi
+				if [ -s "${WORKDIR}"/removedzones ]
+				then
+					printf  'Removed zoneinfo files:\n'
+					sed 's/^/	/'	\
+						< "${WORKDIR}"/removedzones
+				fi
+				printf '\nX'
+			)
+			MSG=${MSG%X}
+
+			# Now is where the changes start happening...
+
+			cd ${TZBASE}/../../../distrib/sets || exit 1
+			cd lists/base || exit 2
+			DOIT cvs -d "${CVSROOT}" -q update mi || exit 3
+			cp mi mi.unsorted || exit 4
+			sh ../../sort-list mi || exit 5
+			cmp -s mi mi.unsorted ||
+				DOIT cvs -d "${CVSROOT}" -q commit \
+					-m 'Sort (NFCI)' mi || exit 6
+			rm -f mi.unsorted
+			sed -f "${WORKDIR}/sedcmds" < mi > mi.new || exit 7
+			test ! -s mi.new || cmp -s mi mi.new && {
+				printf 'Failed to make changes to set lists'
+				exit 8
+			}
+			mv mi.new mi || exit 9
+			sh ../../sort-list mi || exit 10
+			DOIT cvs -d "${CVSROOT}" commit -m "${MSG}" mi ||
+				exit 11
+			printf 'Sets list successfully updated'
+			exit 0
+		) || {
+			printf '%s: %d\n%s %s\n' 'Sets list update failed' "$?"\
+				'Update the sets list' \
+				'(src/distrib/sets/lists/base/mi) manually'
+			if [ -s "${WORKDIR}"/removedzones ]
+			then
+				printf 'Removed Zones:'
+				sed 's/^/	/' < "${WORKDIR}"/removedzones
+			fi
+			if [ -s "${WORKDIR}"/addedzones ]
+			then
+				printf 'Added Zones:'
+				sed 's/^/	/' < "${WORKDIR}"/addedzones
+			fi
+		}
+	fi
 }
 
 extra()
@@ -651,7 +951,7 @@ Also do the following:
  * Edit and commit  src/doc/3RDPARTY
  * Edit and commit  src/doc/CHANGES
  * Edit and commit  src/distrib/sets/lists/base/mi
- *      if the set of installed files altered.
+ *      if the set of installed files altered (if not done by the script).
  * Submit pullup requests for all active release branches.
  * rm -rf ${WORK_PFX}  (optional)
  * Verify that
@@ -666,12 +966,19 @@ main()
 	validate_pwd
 	findcvsroot
 	mkworkpfx
+
 	argparse "$@"
+
+	cvsupdate || fail 'working directory (dist) cvs update failed:'" $?"
+
 	setup_versions
 	mkworkdir
 	fetch
 	$GLOBAL || checksig
 	extract
+
+	zonelists
+
 	addnews
 	trimnews
 	mkimportmsg
@@ -680,7 +987,14 @@ main()
 	cvsmerge
 	resolveconflicts
 	cvscommitmerge
+	updatedzones
+
+	setlistupdate
+
 	rm -f "${UPDATE_FROM}"
+	rm -fr	"${WORK_PFX}"/oldzones \
+		"${WORK_PFX}"/newzones \
+		"${WORK_PFX}"/updzones
 	extra
 }
 

Index: src/external/public-domain/tz/dist/TZDATA_VERSION
diff -u src/external/public-domain/tz/dist/TZDATA_VERSION:1.36 src/external/public-domain/tz/dist/TZDATA_VERSION:1.37
--- src/external/public-domain/tz/dist/TZDATA_VERSION:1.36	Sat Dec 23 15:46:44 2023
+++ src/external/public-domain/tz/dist/TZDATA_VERSION	Mon Feb  5 21:52:38 2024
@@ -1 +1 @@
-tzdata-2023dgtz
+tzdata-2024agtz

Index: src/external/public-domain/tz/dist/asia
diff -u src/external/public-domain/tz/dist/asia:1.11 src/external/public-domain/tz/dist/asia:1.12
--- src/external/public-domain/tz/dist/asia:1.11	Sat Dec 23 15:46:44 2023
+++ src/external/public-domain/tz/dist/asia	Mon Feb  5 21:52:38 2024
@@ -2478,18 +2478,33 @@ Zone	Asia/Amman	2:23:44 -	LMT	1931
 # effective December 21st, 2018....
 # http://adilet.zan.kz/rus/docs/P1800000817 (russian language).
 
+# From Zhanbolat Raimbekov (2024-01-19):
+# Kazakhstan (all parts) switching to UTC+5 on March 1, 2024
+# https://www.gov.kz/memleket/entities/mti/press/news/details/688998?lang=ru
+# [in Russian]
+# (2024-01-20): https://primeminister.kz/ru/decisions/19012024-20
+#
+# From Alexander Krivenyshev (2024-01-19):
+# According to a different news and the official web site for the Ministry of
+# Trade and Integration of the Republic of Kazakhstan:
+# https://en.inform.kz/news/kazakhstan-to-switch-to-single-hour-zone-mar-1-54ad0b/
+
 # Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 #
 # Almaty (formerly Alma-Ata), representing most locations in Kazakhstan
-# This includes KZ-AKM, KZ-ALA, KZ-ALM, KZ-AST, KZ-BAY, KZ-VOS, KZ-ZHA,
-# KZ-KAR, KZ-SEV, KZ-PAV, and KZ-YUZ.
+# This includes Abai/Abay (ISO 3166-2 code KZ-10), Aqmola/Akmola (KZ-11),
+# Almaty (KZ-19), Almaty city (KZ-75), Astana city (KZ-71),
+# East Kazkhstan (KZ-63), Jambyl/Zhambyl (KZ-31), Jetisu/Zhetysu (KZ-33),
+# Karaganda (KZ-35), North Kazakhstan (KZ-59), Pavlodar (KZ-55),
+# Shyumkent city (KZ-79), Turkistan (KZ-61), and Ulytau (KZ-62).
 Zone	Asia/Almaty	5:07:48 -	LMT	1924 May  2 # or Alma-Ata
 			5:00	-	+05	1930 Jun 21
 			6:00 RussiaAsia +06/+07	1991 Mar 31  2:00s
 			5:00 RussiaAsia	+05/+06	1992 Jan 19  2:00s
 			6:00 RussiaAsia	+06/+07	2004 Oct 31  2:00s
-			6:00	-	+06
-# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-KZY)
+			6:00	-	+06	2024 Mar  1  0:00
+			5:00	-	+05
+# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-43)
 Zone	Asia/Qyzylorda	4:21:52 -	LMT	1924 May  2
 			4:00	-	+04	1930 Jun 21
 			5:00	-	+05	1981 Apr  1
@@ -2502,8 +2517,7 @@ Zone	Asia/Qyzylorda	4:21:52 -	LMT	1924 M
 			5:00 RussiaAsia	+05/+06	2004 Oct 31  2:00s
 			6:00	-	+06	2018 Dec 21  0:00
 			5:00	-	+05
-#
-# Qostanay (aka Kostanay, Kustanay) (KZ-KUS)
+# Qostanay (aka Kostanay, Kustanay) (KZ-39)
 # The 1991/2 rules are unclear partly because of the 1997 Turgai
 # reorganization.
 Zone	Asia/Qostanay	4:14:28 -	LMT	1924 May  2
@@ -2514,9 +2528,9 @@ Zone	Asia/Qostanay	4:14:28 -	LMT	1924 Ma
 			5:00 RussiaAsia	+05/+06	1991 Mar 31  2:00s
 			4:00 RussiaAsia	+04/+05	1992 Jan 19  2:00s
 			5:00 RussiaAsia	+05/+06	2004 Oct 31  2:00s
-			6:00	-	+06
-
-# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-AKT)
+			6:00	-	+06	2024 Mar  1  0:00
+			5:00	-	+05
+# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-15)
 Zone	Asia/Aqtobe	3:48:40	-	LMT	1924 May  2
 			4:00	-	+04	1930 Jun 21
 			5:00	-	+05	1981 Apr  1
@@ -2526,7 +2540,7 @@ Zone	Asia/Aqtobe	3:48:40	-	LMT	1924 May 
 			4:00 RussiaAsia	+04/+05	1992 Jan 19  2:00s
 			5:00 RussiaAsia	+05/+06	2004 Oct 31  2:00s
 			5:00	-	+05
-# Mangghystaū (KZ-MAN)
+# Mangghystaū (KZ-47)
 # Aqtau was not founded until 1963, but it represents an inhabited region,
 # so include timestamps before 1963.
 Zone	Asia/Aqtau	3:21:04	-	LMT	1924 May  2
@@ -2538,7 +2552,7 @@ Zone	Asia/Aqtau	3:21:04	-	LMT	1924 May  
 			5:00 RussiaAsia	+05/+06	1994 Sep 25  2:00s
 			4:00 RussiaAsia	+04/+05	2004 Oct 31  2:00s
 			5:00	-	+05
-# Atyraū (KZ-ATY) is like Mangghystaū except it switched from
+# Atyraū (KZ-23) is like Mangghystaū except it switched from
 # +04/+05 to +05/+06 in spring 1999, not fall 1994.
 Zone	Asia/Atyrau	3:27:44	-	LMT	1924 May  2
 			3:00	-	+03	1930 Jun 21
@@ -2549,7 +2563,7 @@ Zone	Asia/Atyrau	3:27:44	-	LMT	1924 May 
 			5:00 RussiaAsia	+05/+06	1999 Mar 28  2:00s
 			4:00 RussiaAsia	+04/+05	2004 Oct 31  2:00s
 			5:00	-	+05
-# West Kazakhstan (KZ-ZAP)
+# West Kazakhstan (KZ-27)
 # From Paul Eggert (2016-03-18):
 # The 1989 transition is from USSR act No. 227 (1989-03-14).
 Zone	Asia/Oral	3:25:24	-	LMT	1924 May  2 # or Ural'sk
@@ -3480,19 +3494,26 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 # ... winter time will begin in Palestine from Saturday 10-28-2023,
 # 02:00 AM by 60 minutes back.
 #
-# From Paul Eggert (2023-03-22):
+# From Heba Hamad (2024-01-25):
+# the summer time for the years 2024,2025 will begin in Palestine
+# from Saturday at 02:00 AM by 60 minutes forward as shown below:
+# year date
+# 2024 2024-04-20
+# 2025 2025-04-12
+#
+# From Paul Eggert (2024-01-25):
 # For now, guess that spring and fall transitions will normally
 # continue to use 2022's rules, that during DST Palestine will switch
 # to standard time at 02:00 the last Saturday before Ramadan and back
-# to DST at 02:00 the first Saturday after Ramadan, and that
+# to DST at 02:00 the second Saturday after Ramadan, and that
 # if the normal spring-forward or fall-back transition occurs during
 # Ramadan the former is delayed and the latter advanced.
 # To implement this, I predicted Ramadan-oriented transition dates for
-# 2023 through 2086 by running the following program under GNU Emacs 28.2,
+# 2026 through 2086 by running the following program under GNU Emacs 29.2,
 # with the results integrated by hand into the table below.
 # Predictions after 2086 are approximated without Ramadan.
 #
-# (let ((islamic-year 1444))
+# (let ((islamic-year 1447))
 #   (require 'cal-islam)
 #   (while (< islamic-year 1510)
 #     (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
@@ -3501,6 +3522,7 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 #       (while (/= saturday (mod (setq a (1- a)) 7)))
 #       (while (/= saturday (mod b 7))
 #         (setq b (1+ b)))
+#       (setq b (+ 7 b))
 #       (setq a (calendar-gregorian-from-absolute a))
 #       (setq b (calendar-gregorian-from-absolute b))
 #       (insert
@@ -3551,84 +3573,84 @@ Rule Palestine	2021	only	-	Oct	29	1:00	0
 Rule Palestine	2022	only	-	Mar	27	0:00	1:00	S
 Rule Palestine	2022	2035	-	Oct	Sat<=30	2:00	0	-
 Rule Palestine	2023	only	-	Apr	29	2:00	1:00	S
-Rule Palestine	2024	only	-	Apr	13	2:00	1:00	S
-Rule Palestine	2025	only	-	Apr	 5	2:00	1:00	S
+Rule Palestine	2024	only	-	Apr	20	2:00	1:00	S
+Rule Palestine	2025	only	-	Apr	12	2:00	1:00	S
 Rule Palestine	2026	2054	-	Mar	Sat<=30	2:00	1:00	S
 Rule Palestine	2036	only	-	Oct	18	2:00	0	-
 Rule Palestine	2037	only	-	Oct	10	2:00	0	-
 Rule Palestine	2038	only	-	Sep	25	2:00	0	-
 Rule Palestine	2039	only	-	Sep	17	2:00	0	-
-Rule Palestine	2039	only	-	Oct	22	2:00	1:00	S
-Rule Palestine	2039	2067	-	Oct	Sat<=30	2:00	0	-
 Rule Palestine	2040	only	-	Sep	 1	2:00	0	-
-Rule Palestine	2040	only	-	Oct	13	2:00	1:00	S
+Rule Palestine	2040	only	-	Oct	20	2:00	1:00	S
+Rule Palestine	2040	2067	-	Oct	Sat<=30	2:00	0	-
 Rule Palestine	2041	only	-	Aug	24	2:00	0	-
-Rule Palestine	2041	only	-	Sep	28	2:00	1:00	S
+Rule Palestine	2041	only	-	Oct	 5	2:00	1:00	S
 Rule Palestine	2042	only	-	Aug	16	2:00	0	-
-Rule Palestine	2042	only	-	Sep	20	2:00	1:00	S
+Rule Palestine	2042	only	-	Sep	27	2:00	1:00	S
 Rule Palestine	2043	only	-	Aug	 1	2:00	0	-
-Rule Palestine	2043	only	-	Sep	12	2:00	1:00	S
+Rule Palestine	2043	only	-	Sep	19	2:00	1:00	S
 Rule Palestine	2044	only	-	Jul	23	2:00	0	-
-Rule Palestine	2044	only	-	Aug	27	2:00	1:00	S
+Rule Palestine	2044	only	-	Sep	 3	2:00	1:00	S
 Rule Palestine	2045	only	-	Jul	15	2:00	0	-
-Rule Palestine	2045	only	-	Aug	19	2:00	1:00	S
+Rule Palestine	2045	only	-	Aug	26	2:00	1:00	S
 Rule Palestine	2046	only	-	Jun	30	2:00	0	-
-Rule Palestine	2046	only	-	Aug	11	2:00	1:00	S
+Rule Palestine	2046	only	-	Aug	18	2:00	1:00	S
 Rule Palestine	2047	only	-	Jun	22	2:00	0	-
-Rule Palestine	2047	only	-	Jul	27	2:00	1:00	S
+Rule Palestine	2047	only	-	Aug	 3	2:00	1:00	S
 Rule Palestine	2048	only	-	Jun	 6	2:00	0	-
-Rule Palestine	2048	only	-	Jul	18	2:00	1:00	S
+Rule Palestine	2048	only	-	Jul	25	2:00	1:00	S
 Rule Palestine	2049	only	-	May	29	2:00	0	-
-Rule Palestine	2049	only	-	Jul	 3	2:00	1:00	S
+Rule Palestine	2049	only	-	Jul	10	2:00	1:00	S
 Rule Palestine	2050	only	-	May	21	2:00	0	-
-Rule Palestine	2050	only	-	Jun	25	2:00	1:00	S
+Rule Palestine	2050	only	-	Jul	 2	2:00	1:00	S
 Rule Palestine	2051	only	-	May	 6	2:00	0	-
-Rule Palestine	2051	only	-	Jun	17	2:00	1:00	S
+Rule Palestine	2051	only	-	Jun	24	2:00	1:00	S
 Rule Palestine	2052	only	-	Apr	27	2:00	0	-
-Rule Palestine	2052	only	-	Jun	 1	2:00	1:00	S
+Rule Palestine	2052	only	-	Jun	 8	2:00	1:00	S
 Rule Palestine	2053	only	-	Apr	12	2:00	0	-
-Rule Palestine	2053	only	-	May	24	2:00	1:00	S
+Rule Palestine	2053	only	-	May	31	2:00	1:00	S
 Rule Palestine	2054	only	-	Apr	 4	2:00	0	-
-Rule Palestine	2054	only	-	May	16	2:00	1:00	S
-Rule Palestine	2055	only	-	May	 1	2:00	1:00	S
-Rule Palestine	2056	only	-	Apr	22	2:00	1:00	S
-Rule Palestine	2057	only	-	Apr	 7	2:00	1:00	S
-Rule Palestine	2058	max	-	Mar	Sat<=30	2:00	1:00	S
+Rule Palestine	2054	only	-	May	23	2:00	1:00	S
+Rule Palestine	2055	only	-	May	 8	2:00	1:00	S
+Rule Palestine	2056	only	-	Apr	29	2:00	1:00	S
+Rule Palestine	2057	only	-	Apr	14	2:00	1:00	S
+Rule Palestine	2058	only	-	Apr	 6	2:00	1:00	S
+Rule Palestine	2059	max	-	Mar	Sat<=30	2:00	1:00	S
 Rule Palestine	2068	only	-	Oct	20	2:00	0	-
 Rule Palestine	2069	only	-	Oct	12	2:00	0	-
 Rule Palestine	2070	only	-	Oct	 4	2:00	0	-
 Rule Palestine	2071	only	-	Sep	19	2:00	0	-
 Rule Palestine	2072	only	-	Sep	10	2:00	0	-
-Rule Palestine	2072	only	-	Oct	15	2:00	1:00	S
+Rule Palestine	2072	only	-	Oct	22	2:00	1:00	S
 Rule Palestine	2072	max	-	Oct	Sat<=30	2:00	0	-
 Rule Palestine	2073	only	-	Sep	 2	2:00	0	-
-Rule Palestine	2073	only	-	Oct	 7	2:00	1:00	S
+Rule Palestine	2073	only	-	Oct	14	2:00	1:00	S
 Rule Palestine	2074	only	-	Aug	18	2:00	0	-
-Rule Palestine	2074	only	-	Sep	29	2:00	1:00	S
+Rule Palestine	2074	only	-	Oct	 6	2:00	1:00	S
 Rule Palestine	2075	only	-	Aug	10	2:00	0	-
-Rule Palestine	2075	only	-	Sep	14	2:00	1:00	S
+Rule Palestine	2075	only	-	Sep	21	2:00	1:00	S
 Rule Palestine	2076	only	-	Jul	25	2:00	0	-
-Rule Palestine	2076	only	-	Sep	 5	2:00	1:00	S
+Rule Palestine	2076	only	-	Sep	12	2:00	1:00	S
 Rule Palestine	2077	only	-	Jul	17	2:00	0	-
-Rule Palestine	2077	only	-	Aug	28	2:00	1:00	S
+Rule Palestine	2077	only	-	Sep	 4	2:00	1:00	S
 Rule Palestine	2078	only	-	Jul	 9	2:00	0	-
-Rule Palestine	2078	only	-	Aug	13	2:00	1:00	S
+Rule Palestine	2078	only	-	Aug	20	2:00	1:00	S
 Rule Palestine	2079	only	-	Jun	24	2:00	0	-
-Rule Palestine	2079	only	-	Aug	 5	2:00	1:00	S
+Rule Palestine	2079	only	-	Aug	12	2:00	1:00	S
 Rule Palestine	2080	only	-	Jun	15	2:00	0	-
-Rule Palestine	2080	only	-	Jul	20	2:00	1:00	S
+Rule Palestine	2080	only	-	Jul	27	2:00	1:00	S
 Rule Palestine	2081	only	-	Jun	 7	2:00	0	-
-Rule Palestine	2081	only	-	Jul	12	2:00	1:00	S
+Rule Palestine	2081	only	-	Jul	19	2:00	1:00	S
 Rule Palestine	2082	only	-	May	23	2:00	0	-
-Rule Palestine	2082	only	-	Jul	 4	2:00	1:00	S
+Rule Palestine	2082	only	-	Jul	11	2:00	1:00	S
 Rule Palestine	2083	only	-	May	15	2:00	0	-
-Rule Palestine	2083	only	-	Jun	19	2:00	1:00	S
+Rule Palestine	2083	only	-	Jun	26	2:00	1:00	S
 Rule Palestine	2084	only	-	Apr	29	2:00	0	-
-Rule Palestine	2084	only	-	Jun	10	2:00	1:00	S
+Rule Palestine	2084	only	-	Jun	17	2:00	1:00	S
 Rule Palestine	2085	only	-	Apr	21	2:00	0	-
-Rule Palestine	2085	only	-	Jun	 2	2:00	1:00	S
+Rule Palestine	2085	only	-	Jun	 9	2:00	1:00	S
 Rule Palestine	2086	only	-	Apr	13	2:00	0	-
-Rule Palestine	2086	only	-	May	18	2:00	1:00	S
+Rule Palestine	2086	only	-	May	25	2:00	1:00	S
 
 # Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
@@ -3656,7 +3678,7 @@ Zone	Asia/Hebron	2:20:23	-	LMT	1900 Oct
 
 # Philippines
 
-# From Paul Eggert (2018-11-18):
+# From Paul Eggert (2024-01-21):
 # The Spanish initially used American (west-of-Greenwich) time.
 # It is unknown what time Manila kept when the British occupied it from
 # 1762-10-06 through 1764-04; for now assume it kept American time.
@@ -3664,7 +3686,7 @@ Zone	Asia/Hebron	2:20:23	-	LMT	1900 Oct
 # Philippines, issued a proclamation announcing that 1844-12-30 was to
 # be immediately followed by 1845-01-01; see R.H. van Gent's
 # History of the International Date Line
-# https://www.staff.science.uu.nl/~gent0113/idl/idl_philippines.htm
+# https://webspace.science.uu.nl/~gent0113/idl/idl_philippines.htm
 # The rest of the data entries are from Shanks & Pottenger.
 
 # From Jesper Nørgaard Welen (2006-04-26):
@@ -4081,7 +4103,8 @@ Zone	Asia/Tashkent	4:37:11 -	LMT	1924 Ma
 # The English-language name of Vietnam's most populous city is "Ho Chi Minh
 # City"; use Ho_Chi_Minh below to avoid a name of more than 14 characters.
 
-# From Paul Eggert (2022-07-27) after a 2014 heads-up from Trần Ngọc Quân:
+# From Paul Eggert (2024-01-14) after a 2014 heads-up from Trần Ngọc Quân
+# and a 2024-01-14 heads-up from Đoàn Trần Công Danh:
 # Trần Tiến Bình's authoritative book "Lịch Việt Nam: thế kỷ XX-XXI (1901-2100)"
 # (Nhà xuất bản Văn Hoá - Thông Tin, Hanoi, 2005), pp 49-50,
 # is quoted verbatim in:
@@ -4111,14 +4134,35 @@ Zone	Asia/Tashkent	4:37:11 -	LMT	1924 Ma
 #
 # Trần cites the following sources; it's unclear which supplied the info above.
 #
-# Hoàng Xuân Hãn: "Lịch và lịch Việt Nam". Tập san Khoa học Xã hội,
-# No. 9, Paris, February 1982.
+#   Hoàng Xuân Hãn: "Lịch và lịch Việt Nam". Tập san Khoa học Xã hội,
+#   No. 9, Paris, February 1982.
+#
+#   Lê Thành Lân: "Lịch và niên biểu lịch sử hai mươi thế kỷ (0001-2010)",
+#   NXB Thống kê, Hanoi, 2000.
 #
-# Lê Thành Lân: "Lịch và niên biểu lịch sử hai mươi thế kỷ (0001-2010)",
-# NXB Thống kê, Hanoi, 2000.
+#   Lê Thành Lân: "Lịch hai thế kỷ (1802-2010) và các lịch vĩnh cửu",
+#   NXB Thuận Hoá, Huế, 1995.
 #
-# Lê Thành Lân: "Lịch hai thế kỷ (1802-2010) và các lịch vĩnh cửu",
-# NXB Thuận Hoá, Huế, 1995.
+# Here is the decision for the September 1945 transition:
+# Võ Nguyên Giáp, Việt Nam Dân Quốc Công Báo, No. 1 (1945-09-29), page 13
+# http://baochi.nlv.gov.vn/baochi/cgi-bin/baochi?a=d&d=JwvzO19450929.2.5&dliv=none
+# It says that on 1945-09-01 at 24:00, Vietnam moved back two hours, to +07.
+# It also mentions a 1945-03-29 decree (by a Japanese Goveror-General)
+# to set the time zone to +09, but does not say whether that decree
+# merely legalized an earlier change to +09.
+#
+# July 1955 transition:
+# Ngô Đình Diệm, Công Báo Việt Nam, No. 92 (1955-07-02), page 1780-1781
+# Ordinance (Dụ) No. 46 (1955-06-25)
+# http://ddsnext.crl.edu/titles/32341#?c=0&m=29&s=0&cv=4&r=0&xywh=-89%2C342%2C1724%2C1216
+# It says that on 1955-07-01 at 01:00, South Vietnam moved back 1 hour (to +07).
+#
+# December 1959 transition:
+# Ngô Đình Diệm, Công Báo Việt Nam Cộng Hòa, 1960 part 1 (1960-01-02), page 62
+# Decree (Sắc lệnh) No. 362-TTP (1959-12-30)
+# http://ddsnext.crl.edu/titles/32341#?c=0&m=138&s=0&cv=793&r=0&xywh=-54%2C1504%2C1705%2C1202
+# It says that on 1959-12-31 at 23:00, South Vietnam moved forward 1 hour (to +08).
+
 
 # Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
 		#STDOFF	7:06:30.13
@@ -4126,9 +4170,9 @@ Zone Asia/Ho_Chi_Minh	7:06:30 -	LMT	1906
 			7:06:30	-	PLMT	1911 May  1 # Phù Liễn MT
 			7:00	-	+07	1942 Dec 31 23:00
 			8:00	-	+08	1945 Mar 14 23:00
-			9:00	-	+09	1945 Sep  2
+			9:00	-	+09	1945 Sep  1 24:00
 			7:00	-	+07	1947 Apr  1
-			8:00	-	+08	1955 Jul  1
+			8:00	-	+08	1955 Jul  1 01:00
 			7:00	-	+07	1959 Dec 31 23:00
 			8:00	-	+08	1975 Jun 13
 			7:00	-	+07
Index: src/external/public-domain/tz/dist/version
diff -u src/external/public-domain/tz/dist/version:1.11 src/external/public-domain/tz/dist/version:1.12
--- src/external/public-domain/tz/dist/version:1.11	Sat Dec 23 15:46:44 2023
+++ src/external/public-domain/tz/dist/version	Mon Feb  5 21:52:38 2024
@@ -1 +1 @@
-2023dgtz
+2024agtz

Index: src/external/public-domain/tz/dist/australasia
diff -u src/external/public-domain/tz/dist/australasia:1.8 src/external/public-domain/tz/dist/australasia:1.9
--- src/external/public-domain/tz/dist/australasia:1.8	Sat Dec 23 15:46:44 2023
+++ src/external/public-domain/tz/dist/australasia	Mon Feb  5 21:52:38 2024
@@ -430,11 +430,11 @@ Zone	Pacific/Fiji	11:55:44 -	LMT	1915 Oc
 
 # French Polynesia
 # Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
-Zone	Pacific/Gambier	 -8:59:48 -	LMT	1912 Oct # Rikitea
+Zone	Pacific/Gambier	 -8:59:48 -	LMT	1912 Oct  1 # Rikitea
 			 -9:00	-	-09
-Zone	Pacific/Marquesas -9:18:00 -	LMT	1912 Oct
+Zone	Pacific/Marquesas -9:18:00 -	LMT	1912 Oct  1
 			 -9:30	-	-0930
-Zone	Pacific/Tahiti	 -9:58:16 -	LMT	1912 Oct # Papeete
+Zone	Pacific/Tahiti	 -9:58:16 -	LMT	1912 Oct  1 # Papeete
 			-10:00	-	-10
 # Clipperton (near North America) is administered from French Polynesia;
 # it is uninhabited.
@@ -843,7 +843,7 @@ Zone Pacific/Apia	 12:33:04 -	LMT	1892 J
 # Solomon Is
 # excludes Bougainville, for which see Papua New Guinea
 # Zone	NAME		STDOFF	RULES	FORMAT	[UNTIL]
-Zone Pacific/Guadalcanal 10:39:48 -	LMT	1912 Oct # Honiara
+Zone Pacific/Guadalcanal 10:39:48 -	LMT	1912 Oct  1 # Honiara
 			11:00	-	+11
 
 # Tokelau
@@ -1025,6 +1025,10 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
 # https://www.jstor.org/stable/1774359
 #
+# For the 1911/1912 establishment of standard time in French possessions, see:
+# Société Française de Physique, Recueil de constantes physiques (1913),
+# page 752, 18b.
+#
 # A reliable and entertaining source about time zones is
 # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
 #
@@ -2101,7 +2105,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # ordaining - by a masterpiece of diplomatic flattery - that
 # the Fourth of July should be celebrated twice in that year."
 # This happened in 1892, according to the Evening News (Sydney) of 1892-07-20.
-# https://www.staff.science.uu.nl/~gent0113/idl/idl.htm
+# https://webspace.science.uu.nl/~gent0113/idl/idl_alaska_samoa.htm
 
 # Although Shanks & Pottenger says they both switched to UT -11:30
 # in 1911, and to -11 in 1950. many earlier sources give -11

Index: src/external/public-domain/tz/dist/leap-seconds.list
diff -u src/external/public-domain/tz/dist/leap-seconds.list:1.6 src/external/public-domain/tz/dist/leap-seconds.list:1.7
--- src/external/public-domain/tz/dist/leap-seconds.list:1.6	Sat Dec 23 15:46:44 2023
+++ src/external/public-domain/tz/dist/leap-seconds.list	Mon Feb  5 21:52:38 2024
@@ -1,255 +1,120 @@
+#	ATOMIC TIME.
+#	The Coordinated Universal Time (UTC) is the reference time scale derived
+#	from The "Temps Atomique International" (TAI) calculated by the Bureau
+#	International des Poids et Mesures (BIPM) using a worldwide network of atomic
+#	clocks. UTC differs from TAI by an integer number of seconds; it is the basis
+#	of all activities in the world.
 #
-#	In the following text, the symbol '#' introduces
-#	a comment, which continues from that symbol until
-#	the end of the line. A plain comment line has a
-#	whitespace character following the comment indicator.
-#	There are also special comment lines defined below.
-#	A special comment will always have a non-whitespace
-#	character in column 2.
-#
-#	A blank line should be ignored.
-#
-#	The following table shows the corrections that must
-#	be applied to compute International Atomic Time (TAI)
-#	from the Coordinated Universal Time (UTC) values that
-#	are transmitted by almost all time services.
-#
-#	The first column shows an epoch as a number of seconds
-#	since 1 January 1900, 00:00:00 (1900.0 is also used to
-#	indicate the same epoch.) Both of these time stamp formats
-#	ignore the complexities of the time scales that were
-#	used before the current definition of UTC at the start
-#	of 1972. (See note 3 below.)
-#	The second column shows the number of seconds that
-#	must be added to UTC to compute TAI for any timestamp
-#	at or after that epoch. The value on each line is
-#	valid from the indicated initial instant until the
-#	epoch given on the next one or indefinitely into the
-#	future if there is no next line.
-#	(The comment on each line shows the representation of
-#	the corresponding initial epoch in the usual
-#	day-month-year format. The epoch always begins at
-#	00:00:00 UTC on the indicated day. See Note 5 below.)
-#
-#	Important notes:
-#
-#	1. Coordinated Universal Time (UTC) is often referred to
-#	as Greenwich Mean Time (GMT). The GMT time scale is no
-#	longer used, and the use of GMT to designate UTC is
-#	discouraged.
-#
-#	2. The UTC time scale is realized by many national
-#	laboratories and timing centers. Each laboratory
-#	identifies its realization with its name: Thus
-#	UTC(NIST), UTC(USNO), etc. The differences among
-#	these different realizations are typically on the
-#	order of a few nanoseconds (i.e., 0.000 000 00x s)
-#	and can be ignored for many purposes. These differences
-#	are tabulated in Circular T, which is published monthly
-#	by the International Bureau of Weights and Measures
-#	(BIPM). See www.bipm.org for more information.
-#
-#	3. The current definition of the relationship between UTC
-#	and TAI dates from 1 January 1972. A number of different
-#	time scales were in use before that epoch, and it can be
-#	quite difficult to compute precise timestamps and time
-#	intervals in those "prehistoric" days. For more information,
-#	consult:
-#
-#		The Explanatory Supplement to the Astronomical
-#		Ephemeris.
-#	or
-#		Terry Quinn, "The BIPM and the Accurate Measurement
-#		of Time," Proc. of the IEEE, Vol. 79, pp. 894-905,
-#		July, 1991. <http://dx.doi.org/10.1109/5.84965>
-#		reprinted in:
-#		   Christine Hackman and Donald B Sullivan (eds.)
-#		   Time and Frequency Measurement
-#		   American Association of Physics Teachers (1996)
-#		   <http://tf.nist.gov/general/pdf/1168.pdf>, pp. 75-86
-#
-#	4. The decision to insert a leap second into UTC is currently
-#	the responsibility of the International Earth Rotation and
-#	Reference Systems Service. (The name was changed from the
-#	International Earth Rotation Service, but the acronym IERS
-#	is still used.)
-#
-#	Leap seconds are announced by the IERS in its Bulletin C.
-#
-#	See www.iers.org for more details.
-#
-#	Every national laboratory and timing center uses the
-#	data from the BIPM and the IERS to construct UTC(lab),
-#	their local realization of UTC.
-#
-#	Although the definition also includes the possibility
-#	of dropping seconds ("negative" leap seconds), this has
-#	never been done and is unlikely to be necessary in the
-#	foreseeable future.
-#
-#	5. If your system keeps time as the number of seconds since
-#	some epoch (e.g., NTP timestamps), then the algorithm for
-#	assigning a UTC time stamp to an event that happens during a positive
-#	leap second is not well defined. The official name of that leap
-#	second is 23:59:60, but there is no way of representing that time
-#	in these systems.
-#	Many systems of this type effectively stop the system clock for
-#	one second during the leap second and use a time that is equivalent
-#	to 23:59:59 UTC twice. For these systems, the corresponding TAI
-#	timestamp would be obtained by advancing to the next entry in the
-#	following table when the time equivalent to 23:59:59 UTC
-#	is used for the second time. Thus the leap second which
-#	occurred on 30 June 1972 at 23:59:59 UTC would have TAI
-#	timestamps computed as follows:
-#
-#	...
-#	30 June 1972 23:59:59 (2287785599, first time):	TAI= UTC + 10 seconds
-#	30 June 1972 23:59:60 (2287785599,second time):	TAI= UTC + 11 seconds
-#	1  July 1972 00:00:00 (2287785600)		TAI= UTC + 11 seconds
-#	...
-#
-#	If your system realizes the leap second by repeating 00:00:00 UTC twice
-#	(this is possible but not usual), then the advance to the next entry
-#	in the table must occur the second time that a time equivalent to
-#	00:00:00 UTC is used. Thus, using the same example as above:
-#
-#	...
-#       30 June 1972 23:59:59 (2287785599):		TAI= UTC + 10 seconds
-#       30 June 1972 23:59:60 (2287785600, first time):	TAI= UTC + 10 seconds
-#       1  July 1972 00:00:00 (2287785600,second time):	TAI= UTC + 11 seconds
-#	...
-#
-#	in both cases the use of timestamps based on TAI produces a smooth
-#	time scale with no discontinuity in the time interval. However,
-#	although the long-term behavior of the time scale is correct in both
-#	methods, the second method is technically not correct because it adds
-#	the extra second to the wrong day.
-#
-#	This complexity would not be needed for negative leap seconds (if they
-#	are ever used). The UTC time would skip 23:59:59 and advance from
-#	23:59:58 to 00:00:00 in that case. The TAI offset would decrease by
-#	1 second at the same instant. This is a much easier situation to deal
-#	with, since the difficulty of unambiguously representing the epoch
-#	during the leap second does not arise.
-#
-#	Some systems implement leap seconds by amortizing the leap second
-#	over the last few minutes of the day. The frequency of the local
-#	clock is decreased (or increased) to realize the positive (or
-#	negative) leap second. This method removes the time step described
-#	above. Although the long-term behavior of the time scale is correct
-#	in this case, this method introduces an error during the adjustment
-#	period both in time and in frequency with respect to the official
-#	definition of UTC.
-#
-#	Questions or comments to:
-#		Judah Levine
-#		Time and Frequency Division
-#		NIST
-#		Boulder, Colorado
-#		[email protected]
-#
-#	Last Update of leap second values:   8 July 2016
-#
-#	The following line shows this last update date in NTP timestamp
-#	format. This is the date on which the most recent change to
-#	the leap second data was added to the file. This line can
-#	be identified by the unique pair of characters in the first two
-#	columns as shown below.
-#
-#$	 3676924800
-#
-#	The NTP timestamps are in units of seconds since the NTP epoch,
-#	which is 1 January 1900, 00:00:00. The Modified Julian Day number
-#	corresponding to the NTP time stamp, X, can be computed as
-#
-#	X/86400 + 15020
-#
-#	where the first term converts seconds to days and the second
-#	term adds the MJD corresponding to the time origin defined above.
-#	The integer portion of the result is the integer MJD for that
-#	day, and any remainder is the time of day, expressed as the
-#	fraction of the day since 0 hours UTC. The conversion from day
-#	fraction to seconds or to hours, minutes, and seconds may involve
-#	rounding or truncation, depending on the method used in the
-#	computation.
-#
-#	The data in this file will be updated periodically as new leap
-#	seconds are announced. In addition to being entered on the line
-#	above, the update time (in NTP format) will be added to the basic
-#	file name leap-seconds to form the name leap-seconds.<NTP TIME>.
-#	In addition, the generic name leap-seconds.list will always point to
-#	the most recent version of the file.
-#
-#	This update procedure will be performed only when a new leap second
-#	is announced.
-#
-#	The following entry specifies the expiration date of the data
-#	in this file in units of seconds since the origin at the instant
-#	1 January 1900, 00:00:00. This expiration date will be changed
-#	at least twice per year whether or not a new leap second is
-#	announced. These semi-annual changes will be made no later
-#	than 1 June and 1 December of each year to indicate what
-#	action (if any) is to be taken on 30 June and 31 December,
-#	respectively. (These are the customary effective dates for new
-#	leap seconds.) This expiration date will be identified by a
-#	unique pair of characters in columns 1 and 2 as shown below.
-#	In the unlikely event that a leap second is announced with an
-#	effective date other than 30 June or 31 December, then this
-#	file will be edited to include that leap second as soon as it is
-#	announced or at least one month before the effective date
-#	(whichever is later).
-#	If an announcement by the IERS specifies that no leap second is
-#	scheduled, then only the expiration date of the file will
-#	be advanced to show that the information in the file is still
-#	current -- the update time stamp, the data and the name of the file
-#	will not change.
-#
-#	Updated through IERS Bulletin C66
-#	File expires on:  28 June 2024
-#
-#@	3928521600
-#
-2272060800	10	# 1 Jan 1972
-2287785600	11	# 1 Jul 1972
-2303683200	12	# 1 Jan 1973
-2335219200	13	# 1 Jan 1974
-2366755200	14	# 1 Jan 1975
-2398291200	15	# 1 Jan 1976
-2429913600	16	# 1 Jan 1977
-2461449600	17	# 1 Jan 1978
-2492985600	18	# 1 Jan 1979
-2524521600	19	# 1 Jan 1980
-2571782400	20	# 1 Jul 1981
-2603318400	21	# 1 Jul 1982
-2634854400	22	# 1 Jul 1983
-2698012800	23	# 1 Jul 1985
-2776982400	24	# 1 Jan 1988
-2840140800	25	# 1 Jan 1990
-2871676800	26	# 1 Jan 1991
-2918937600	27	# 1 Jul 1992
-2950473600	28	# 1 Jul 1993
-2982009600	29	# 1 Jul 1994
-3029443200	30	# 1 Jan 1996
-3076704000	31	# 1 Jul 1997
-3124137600	32	# 1 Jan 1999
-3345062400	33	# 1 Jan 2006
-3439756800	34	# 1 Jan 2009
-3550089600	35	# 1 Jul 2012
-3644697600	36	# 1 Jul 2015
-3692217600	37	# 1 Jan 2017
-#
-#	the following special comment contains the
-#	hash value of the data in this file computed
-#	use the secure hash algorithm as specified
-#	by FIPS 180-1. See the files in ~/pub/sha for
-#	the details of how this hash value is
-#	computed. Note that the hash computation
-#	ignores comments and whitespace characters
-#	in data lines. It includes the NTP values
-#	of both the last modification time and the
-#	expiration time of the file, but not the
-#	white space on those lines.
-#	the hash line is also ignored in the
-#	computation.
 #
-#h 	16edd0f0 3666784f 37db6bdd e74ced87 59af48f1
+#	ASTRONOMICAL TIME (UT1) is the time scale based on the rate of rotation of the earth.
+#	It is now mainly derived from Very Long Baseline Interferometry (VLBI). The various
+#	irregular fluctuations progressively detected in the rotation rate of the Earth lead
+#	in 1972 to the replacement of UT1 by UTC as the reference time scale.
+#
+#
+#	LEAP SECOND
+#	Atomic clocks are more stable than the rate of the earth rotation since the latter
+#	undergoes a full range of geophysical perturbations at various time scales: lunisolar
+#	and core-mantle torques, atmospheric and oceanic effetcs, etc.
+#	Leap seconds are needed to keep the two time scales in agreement, i.e. UT1-UTC smaller
+#	than 0.9 second. Therefore, when necessary a "leap second" is applied to UTC.
+#	Since the adoption of this system in 1972 it has been necessary to add a number of seconds to UTC,
+#	firstly due to the initial choice of the value of the second (1/86400 mean solar day of
+#	the year 1820) and secondly to the general slowing down of the Earth's rotation. It is
+#	theorically possible to have a negative leap second (a second removed from UTC), but so far,
+#	all leap seconds have been positive (a second has been added to UTC). Based on what we know about
+#	the earth's rotation, it is unlikely that we will ever have a negative leap second.
+#
+#
+#	HISTORY
+#	The first leap second was added on June 30, 1972. Until yhe year 2000, it was necessary in average to add a
+#       leap second at a rate of 1 to 2 years. Since the year 2000 leap seconds are introduced with an
+#	average interval of 3 to 4 years due to the acceleration of the Earth rotation speed.
+#
+#
+#	RESPONSABILITY OF THE DECISION TO INTRODUCE A LEAP SECOND IN UTC
+#	The decision to introduce a leap second in UTC is the responsibility of the Earth Orientation Center of
+#	the International Earth Rotation and reference System Service (IERS). This center is located at Paris
+#	Observatory. According to international agreements, leap seconds should only be scheduled for certain dates:
+#	first preference is given to the end of December and June, and second preference at the end of March
+#	and September. Since the introduction of leap seconds in 1972, only dates in June and December were used.
+#
+#		Questions or comments to:
+#			Christian Bizouard:  [email protected]
+#			Earth orientation Center of the IERS
+#			Paris Observatory, France
+#
+#
+#
+#    	COPYRIGHT STATUS OF THIS FILE
+#    	This file is in the public domain.
+#
+#
+#	VALIDITY OF THE FILE
+#	It is important to express the validity of the file. These next two dates are
+#	given in units of seconds since 1900.0.
+#
+#	1) Last update of the file.
+#
+#	Updated through IERS Bulletin C (https://hpiers.obspm.fr/iers/bul/bulc/bulletinc.dat)
+#
+#	The following line shows the last update of this file in NTP timestamp:
+#
+#$	3913697179
+#
+#	2) Expiration date of the file given on a semi-annual basis: last June or last December
+#
+#	File expires on 28 December 2024
+#
+#	Expire date in NTP timestamp:
+#
+#@	3944332800
+#
+#
+#	LIST OF LEAP SECONDS
+#	NTP timestamp (X parameter) is the number of seconds since 1900.0
+#
+#	MJD: The Modified Julian Day number. MJD = X/86400 + 15020
+#
+#	DTAI: The difference DTAI= TAI-UTC in units of seconds
+#	It is the quantity to add to UTC to get the time in TAI
+#
+#	Day Month Year : epoch in clear
+#
+#NTP Time      DTAI    Day Month Year
+#
+2272060800      10      # 1 Jan 1972
+2287785600      11      # 1 Jul 1972
+2303683200      12      # 1 Jan 1973
+2335219200      13      # 1 Jan 1974
+2366755200      14      # 1 Jan 1975
+2398291200      15      # 1 Jan 1976
+2429913600      16      # 1 Jan 1977
+2461449600      17      # 1 Jan 1978
+2492985600      18      # 1 Jan 1979
+2524521600      19      # 1 Jan 1980
+2571782400      20      # 1 Jul 1981
+2603318400      21      # 1 Jul 1982
+2634854400      22      # 1 Jul 1983
+2698012800      23      # 1 Jul 1985
+2776982400      24      # 1 Jan 1988
+2840140800      25      # 1 Jan 1990
+2871676800      26      # 1 Jan 1991
+2918937600      27      # 1 Jul 1992
+2950473600      28      # 1 Jul 1993
+2982009600      29      # 1 Jul 1994
+3029443200      30      # 1 Jan 1996
+3076704000      31      # 1 Jul 1997
+3124137600      32      # 1 Jan 1999
+3345062400      33      # 1 Jan 2006
+3439756800      34      # 1 Jan 2009
+3550089600      35      # 1 Jul 2012
+3644697600      36      # 1 Jul 2015
+3692217600      37      # 1 Jan 2017
+#
+#	A hash code has been generated to be able to verify the integrity
+#	of this file. For more information about using this hash code,
+#	please see the readme file in the 'source' directory :
+#	https://hpiers.obspm.fr/iers/bul/bulc/ntp/sources/README
+#
+#h	9dac5845 8acd32c0 2947d462 daf4a943 f58d9391
Index: src/external/public-domain/tz/dist/leapseconds
diff -u src/external/public-domain/tz/dist/leapseconds:1.6 src/external/public-domain/tz/dist/leapseconds:1.7
--- src/external/public-domain/tz/dist/leapseconds:1.6	Sat Dec 23 15:46:44 2023
+++ src/external/public-domain/tz/dist/leapseconds	Mon Feb  5 21:52:38 2024
@@ -3,13 +3,10 @@
 # This file is in the public domain.
 
 # This file is generated automatically from the data in the public-domain
-# NIST format leap-seconds.list file, which can be copied from
-# <ftp://ftp.nist.gov/pub/time/leap-seconds.list>
-# or <ftp://ftp.boulder.nist.gov/pub/time/leap-seconds.list>.
-# The NIST file is used instead of its IERS upstream counterpart
+# NIST/IERS format leap-seconds.list file, which can be copied from
 # <https://hpiers.obspm.fr/iers/bul/bulc/ntp/leap-seconds.list>
-# because under US law the NIST file is public domain
-# whereas the IERS file's copyright and license status is unclear.
+# or, in a variant with different comments, from
+# <ftp://ftp.boulder.nist.gov/pub/time/leap-seconds.list>.
 # For more about leap-seconds.list, please see
 # The NTP Timescale and Leap Seconds
 # <https://www.eecis.udel.edu/~mills/leap.html>.
@@ -72,11 +69,11 @@ Leap	2016	Dec	31	23:59:60	+	S
 # Any additional leap seconds will come after this.
 # This Expires line is commented out for now,
 # so that pre-2020a zic implementations do not reject this file.
-#Expires 2024	Jun	28	00:00:00
+#Expires 2024	Dec	28	00:00:00
 
 # POSIX timestamps for the data in this file:
-#updated 1467936000 (2016-07-08 00:00:00 UTC)
-#expires 1719532800 (2024-06-28 00:00:00 UTC)
+#updated 1704708379 (2024-01-08 10:06:19 UTC)
+#expires 1735344000 (2024-12-28 00:00:00 UTC)
 
-#	Updated through IERS Bulletin C66
-#	File expires on:  28 June 2024
+#	Updated through IERS Bulletin C (https://hpiers.obspm.fr/iers/bul/bulc/bulletinc.dat)
+#	File expires on 28 December 2024

Reply via email to