texlive[57365] Master/texmf-dist: latex-dev (9jan21)

commits+karl at tug.org commits+karl at tug.org
Sat Jan 9 22:36:18 CET 2021


Revision: 57365
          http://tug.org/svn/texlive?view=revision&revision=57365
Author:   karl
Date:     2021-01-09 22:36:18 +0100 (Sat, 09 Jan 2021)
Log Message:
-----------
latex-dev (9jan21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex-dev/base/README.md
    trunk/Master/texmf-dist/doc/latex-dev/base/alltt.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/cfgguide.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/changes.txt
    trunk/Master/texmf-dist/doc/latex-dev/base/classes.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/clsguide.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/cyrguide.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/encguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/encguide.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/exscale.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/fix-cm.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/fntguide.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/latexchanges.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/latexchanges.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lb2.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/letter.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lppl.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltfilehook-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltfilehook-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lthooks-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/lthooks-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews01.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews02.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews03.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews04.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews05.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews06.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews07.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews08.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews09.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews10.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews11.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews12.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews13.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews14.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews15.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews16.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews17.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews18.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews19.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews22.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews23.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews24.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews25.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews26.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews27.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews28.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews29.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltnews33.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltshipout-code.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltshipout-doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/ltx3info.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/manifest.txt
    trunk/Master/texmf-dist/doc/latex-dev/base/manual.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/modguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/modguide.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/proc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/slides.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/source2e.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/source2e.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/tulm.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/usrguide.tex
    trunk/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf
    trunk/Master/texmf-dist/source/latex-dev/base/alltt.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/alltt.ins
    trunk/Master/texmf-dist/source/latex-dev/base/classes.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/classes.ins
    trunk/Master/texmf-dist/source/latex-dev/base/cmextra.ins
    trunk/Master/texmf-dist/source/latex-dev/base/cmfonts.ins
    trunk/Master/texmf-dist/source/latex-dev/base/doc.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/docstrip.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/docstrip.ins
    trunk/Master/texmf-dist/source/latex-dev/base/ec.ins
    trunk/Master/texmf-dist/source/latex-dev/base/exscale.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/exscale.ins
    trunk/Master/texmf-dist/source/latex-dev/base/fix-cm.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/fix-cm.ins
    trunk/Master/texmf-dist/source/latex-dev/base/fontdef.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/format.ins
    trunk/Master/texmf-dist/source/latex-dev/base/graphpap.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/graphpap.ins
    trunk/Master/texmf-dist/source/latex-dev/base/ifthen.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ifthen.ins
    trunk/Master/texmf-dist/source/latex-dev/base/inputenc.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/inputenc.ins
    trunk/Master/texmf-dist/source/latex-dev/base/latex209.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/latex209.ins
    trunk/Master/texmf-dist/source/latex-dev/base/latexrelease.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/latexrelease.ins
    trunk/Master/texmf-dist/source/latex-dev/base/latexsym.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/latexsym.ins
    trunk/Master/texmf-dist/source/latex-dev/base/letter.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/letter.ins
    trunk/Master/texmf-dist/source/latex-dev/base/ltalloc.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltbibl.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltboxes.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltclass.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltcntrl.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltcounts.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltdirchk.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/lterror.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltexpl.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltfilehook.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltfiles.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltfloat.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltfntcmd.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltfssaxes.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltfssbas.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltfsscmp.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltfssdcl.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltfssini.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltfsstrc.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/lthooks.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/lthyphen.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltidxglo.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltlength.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltlists.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltlogos.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltmath.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltmiscen.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltoutenc.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltoutenc.ins
    trunk/Master/texmf-dist/source/latex-dev/base/ltoutput.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltpage.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltpageno.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltpar.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltpictur.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltplain.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltsect.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltshipout.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltspace.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/lttab.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/lttextcomp.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltthm.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltvers.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltxdoc.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/ltxref.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/makeindx.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/makeindx.ins
    trunk/Master/texmf-dist/source/latex-dev/base/newdc.ins
    trunk/Master/texmf-dist/source/latex-dev/base/newlfont.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/nfssfont.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/nfssfont.ins
    trunk/Master/texmf-dist/source/latex-dev/base/olddc.ins
    trunk/Master/texmf-dist/source/latex-dev/base/oldlfont.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/preload.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/proc.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/proc.ins
    trunk/Master/texmf-dist/source/latex-dev/base/slides.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/slides.ins
    trunk/Master/texmf-dist/source/latex-dev/base/syntonly.dtx
    trunk/Master/texmf-dist/source/latex-dev/base/syntonly.ins
    trunk/Master/texmf-dist/source/latex-dev/base/tulm.ins
    trunk/Master/texmf-dist/source/latex-dev/base/unpack.ins
    trunk/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx
    trunk/Master/texmf-dist/tex/latex-dev/base/alltt.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/ansinew.def
    trunk/Master/texmf-dist/tex/latex-dev/base/applemac.def
    trunk/Master/texmf-dist/tex/latex-dev/base/article.cls
    trunk/Master/texmf-dist/tex/latex-dev/base/article.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/ascii.def
    trunk/Master/texmf-dist/tex/latex-dev/base/atbegshi-ltx.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/atveryend-ltx.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/bezier.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/bk10.clo
    trunk/Master/texmf-dist/tex/latex-dev/base/bk11.clo
    trunk/Master/texmf-dist/tex/latex-dev/base/bk12.clo
    trunk/Master/texmf-dist/tex/latex-dev/base/book.cls
    trunk/Master/texmf-dist/tex/latex-dev/base/book.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/cp1250.def
    trunk/Master/texmf-dist/tex/latex-dev/base/cp1252.def
    trunk/Master/texmf-dist/tex/latex-dev/base/cp1257.def
    trunk/Master/texmf-dist/tex/latex-dev/base/cp437.def
    trunk/Master/texmf-dist/tex/latex-dev/base/cp437de.def
    trunk/Master/texmf-dist/tex/latex-dev/base/cp850.def
    trunk/Master/texmf-dist/tex/latex-dev/base/cp852.def
    trunk/Master/texmf-dist/tex/latex-dev/base/cp858.def
    trunk/Master/texmf-dist/tex/latex-dev/base/cp865.def
    trunk/Master/texmf-dist/tex/latex-dev/base/decmulti.def
    trunk/Master/texmf-dist/tex/latex-dev/base/doc.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/docstrip.tex
    trunk/Master/texmf-dist/tex/latex-dev/base/everyshi-ltx.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/exscale.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/fix-cm.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/fixltx2e.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/flafter.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/fleqn.clo
    trunk/Master/texmf-dist/tex/latex-dev/base/fleqn.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/fltrace.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/fontenc.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/fontmath.cfg
    trunk/Master/texmf-dist/tex/latex-dev/base/fontmath.ltx
    trunk/Master/texmf-dist/tex/latex-dev/base/fonttext.cfg
    trunk/Master/texmf-dist/tex/latex-dev/base/fonttext.ltx
    trunk/Master/texmf-dist/tex/latex-dev/base/graphpap.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/hyphen.ltx
    trunk/Master/texmf-dist/tex/latex-dev/base/idx.tex
    trunk/Master/texmf-dist/tex/latex-dev/base/ifthen.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/inputenc.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/lablst.tex
    trunk/Master/texmf-dist/tex/latex-dev/base/latex.ltx
    trunk/Master/texmf-dist/tex/latex-dev/base/latex209.def
    trunk/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/latexsym.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/latin1.def
    trunk/Master/texmf-dist/tex/latex-dev/base/latin10.def
    trunk/Master/texmf-dist/tex/latex-dev/base/latin2.def
    trunk/Master/texmf-dist/tex/latex-dev/base/latin3.def
    trunk/Master/texmf-dist/tex/latex-dev/base/latin4.def
    trunk/Master/texmf-dist/tex/latex-dev/base/latin5.def
    trunk/Master/texmf-dist/tex/latex-dev/base/latin9.def
    trunk/Master/texmf-dist/tex/latex-dev/base/lcyenc.dfu
    trunk/Master/texmf-dist/tex/latex-dev/base/leqno.clo
    trunk/Master/texmf-dist/tex/latex-dev/base/leqno.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/letter.cls
    trunk/Master/texmf-dist/tex/latex-dev/base/letter.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex
    trunk/Master/texmf-dist/tex/latex-dev/base/ltxcheck.tex
    trunk/Master/texmf-dist/tex/latex-dev/base/ltxdoc.cls
    trunk/Master/texmf-dist/tex/latex-dev/base/ly1enc.dfu
    trunk/Master/texmf-dist/tex/latex-dev/base/macce.def
    trunk/Master/texmf-dist/tex/latex-dev/base/makeidx.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/newlfont.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/next.def
    trunk/Master/texmf-dist/tex/latex-dev/base/nfssfont.tex
    trunk/Master/texmf-dist/tex/latex-dev/base/oldlfont.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/omlcmm.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/omlcmr.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/omlenc.def
    trunk/Master/texmf-dist/tex/latex-dev/base/omllcmm.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/omscmr.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/omscmsy.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/omsenc.def
    trunk/Master/texmf-dist/tex/latex-dev/base/omsenc.dfu
    trunk/Master/texmf-dist/tex/latex-dev/base/omslcmsy.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/omxcmex.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/omxlcmex.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/openbib.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmdh.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmfib.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmfr.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmr.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmss.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmtt.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmvtt.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ot1enc.def
    trunk/Master/texmf-dist/tex/latex-dev/base/ot1enc.dfu
    trunk/Master/texmf-dist/tex/latex-dev/base/ot1lcmss.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ot1lcmtt.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ot2enc.dfu
    trunk/Master/texmf-dist/tex/latex-dev/base/ot4enc.def
    trunk/Master/texmf-dist/tex/latex-dev/base/preload.cfg
    trunk/Master/texmf-dist/tex/latex-dev/base/preload.ltx
    trunk/Master/texmf-dist/tex/latex-dev/base/proc.cls
    trunk/Master/texmf-dist/tex/latex-dev/base/proc.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/report.cls
    trunk/Master/texmf-dist/tex/latex-dev/base/report.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/sfonts.def
    trunk/Master/texmf-dist/tex/latex-dev/base/shortvrb.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/showidx.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/size10.clo
    trunk/Master/texmf-dist/tex/latex-dev/base/size11.clo
    trunk/Master/texmf-dist/tex/latex-dev/base/size12.clo
    trunk/Master/texmf-dist/tex/latex-dev/base/slides.cls
    trunk/Master/texmf-dist/tex/latex-dev/base/slides.def
    trunk/Master/texmf-dist/tex/latex-dev/base/slides.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/source2edoc.cls
    trunk/Master/texmf-dist/tex/latex-dev/base/structuredlog.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/syntonly.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/t1cmdh.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/t1cmfib.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/t1cmfr.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/t1cmr.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/t1cmss.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/t1cmtt.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/t1cmvtt.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/t1enc.def
    trunk/Master/texmf-dist/tex/latex-dev/base/t1enc.dfu
    trunk/Master/texmf-dist/tex/latex-dev/base/t1enc.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/t1lcmss.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/t1lcmtt.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/t2aenc.dfu
    trunk/Master/texmf-dist/tex/latex-dev/base/t2benc.dfu
    trunk/Master/texmf-dist/tex/latex-dev/base/t2cenc.dfu
    trunk/Master/texmf-dist/tex/latex-dev/base/testpage.tex
    trunk/Master/texmf-dist/tex/latex-dev/base/texsys.cfg
    trunk/Master/texmf-dist/tex/latex-dev/base/textcomp-2018-08-11.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/textcomp.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/tracefnt.sty
    trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmr.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmss.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmtt.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmvtt.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ts1enc.def
    trunk/Master/texmf-dist/tex/latex-dev/base/ts1enc.dfu
    trunk/Master/texmf-dist/tex/latex-dev/base/tuenc.def
    trunk/Master/texmf-dist/tex/latex-dev/base/tulmdh.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/tulmr.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/tulmss.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/tulmssq.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/tulmtt.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/tulmvtt.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ucmr.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ucmss.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ucmtt.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ulasy.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/ullasy.fd
    trunk/Master/texmf-dist/tex/latex-dev/base/utf8-2018.def
    trunk/Master/texmf-dist/tex/latex-dev/base/utf8.def
    trunk/Master/texmf-dist/tex/latex-dev/base/utf8enc.dfu
    trunk/Master/texmf-dist/tex/latex-dev/base/x2enc.dfu

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex-dev/base/usrguide3.pdf
    trunk/Master/texmf-dist/doc/latex-dev/base/usrguide3.tex

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/README.md	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/README.md	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,7 +1,7 @@
 The LaTeX kernel
 ================
 
-Release 2021-05-01 pre-release 0
+Release 2021-05-01 pre-release 1
 
 Overview
 --------

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/alltt.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/cfgguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/cfgguide.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/cfgguide.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/changes.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/changes.txt	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/changes.txt	2021-01-09 21:36:18 UTC (rev 57365)
@@ -6,11 +6,187 @@
 are not part of the distribution.
 ================================================================================
 
+2020-12-22  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltfssaxes.dtx (subsection{Changing to a new series}):
+	Distangle series and shape update by delaying the font series
+	and font shape merging (gh/444)
+
+	Move the rollback info for \normalshape after its main definition
+	otherwise it will not be undone	(gh/458)
+
+2020-12-22  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltfsstrc.dtx (subsection{General font loading}):
+	Alter \selectfont to do the delayed merging of  font series
+	and font shape (gh/444)
+
+2020-12-27  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* letter.dtx (subsubsection{Page breaking control}):
+	The \opening argument was splitting name and address using \\
+	but did not allow to use \\[...] for this (gh/427)
+
+2020-12-10  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltbibl.dtx (section{Bibliography Generation}):
+	Delay any \cs{nocite} in the preamble instead of raising
+	an error (gh/424)
+
+2020-12-06  Johannes Braams  <Johannes.Braams at latex-project.org>
+
+	* miscelaneous files: gh/428, gh/429 and gh/430 list a number of
+	typing mistakes and missing documentation that have crept in over
+	the years. The following files were affected and have been
+	corrected:
+	alltt.dtx, classes.dtx, doc.dtx, docstrip.dtx, fix-cm.dtx,
+	fontdef.dtx, ifthen.dtx, inputenc.dtx, latex209.dtx,
+	latexrelease.dtx, ltbibl.dtx, ltboxes.dtx, ltclass.dtx,
+	ltcntrl.dtx, ltcounts.dtx, ltdefns.dtx, ltdirchk.dtx, ltexpl.dtx,
+	ltfilehook.dtx, ltfiles.dtx, ltfinal.dtx, ltfloat.dtx,
+	ltfntcmd.dtx, ltfssaxes.dtx, ltfssbas.dtx, ltfsscmp.dtx,
+	ltfssdcl.dtx, ltfssini.dtx, ltfsstrc.dtx, lthooks.dtx,
+	ltlength.dtx, ltlists.dtx, ltluatex.dtx, ltmath.dtx, ltmiscen.dtx,
+	ltoutenc.dtx, ltoutput.dtx, ltpage.dtx, ltpageno.dtx,
+	ltpictur.dtx, ltplain.dtx, ltsect.dtx, ltshipout.dtx,
+	lttextcomp.dtx, ltvers.dtx, ltxdoc.dtx, ltxref.dtx, nfssfont.dtx,
+	proc.dtx, slides.dtx, utf8ienc.dtx.
+
+2020-12-04  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltfilehook.dtx (subsection{Declaring a file substitution}):
+	Don't drop file substitution declarations when rolling back
+	just render them no-ops
+
+2020-12-04  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+	Add a hook to \selectfont to be executed after the switch to the
+	new font. This implements the functionality formerly in the everysel
+	package.
+
+2020-12-04  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltfinal.dtx (subsection{File substitutions}):
+	Emulate everysel package
+
+2020-12-04  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltfssini.dtx (subsection{Miscellaneous}):
+	Setting up \f at series and \f at shape default values directly (gh/444)
+
+2020-11-23  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltshipout.dtx:
+	Check for both kernel and user hooks and execute if either is non-empty (gh/431)}
+
+2020-10-26  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltmiscen.dtx (subsection{Environments}):
+	\enddocument should always start out in vmode (gh/385)
+
 ================================================================================
 All changes above are only part of the development branch for the next release.
 ================================================================================
 
+
 #########################
+# 2020-10-01 PL 4 Release
+#########################
+
+2021-01-07  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* ltfilehook.dtx:
+	Undefine \@expl@@@filehook at file@pop@@ to avoid error when rolling back (gh/463).
+
+	* lthooks.dtx:
+	Modified internal copies of l3tl commands to avoid errors with l3debug (gh/463).
+
+2020-12-18  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* lthooks.dtx:
+	Preserve trailing slash in file hook name if the file name is empty (gh/464).
+
+	* ltfilehook.dtx:
+	Restore \CurrentFile(Path)(Used) after the file is input (gh/464).
+
+2020-12-03  Joseph Wright  <Joseph.Wright at latex-project.org>
+
+        * usrguide3.tex
+          New file to cover creation of document commands
+
+
+#########################
+# 2020-10-01 PL 3 Release
+#########################
+
+2020-12-18  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* lthooks.dtx:
+	Moved 'top-level' code label at the very end of hooks.
+	- In reverse hooks, 'top-level' goes at the beginning.
+	- 'top-level' cannot be used as a label outside of the top-level.
+	- The label for the 'top-level' cannot be changed.
+	- Simplified internal managing of default label.
+	Renamed \DeclareDefaultHookLabel to \SetDefaultHookLabel (the old name
+		will be kept until the next release).
+	Provide \PushDefaultHookLabel and \PopDefaultHookLabel.
+	Fixed a small bug in \ShowHook and \LogHook.
+
+	* ltclass.dtx:
+	Remove \@expl@@@hook at curr@name at push@@n from \@pushfilename to
+		follow changes to lthooks.dtx.
+
+2020-12-10  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltfssbas.dtx (subsection{Macros for the user}):
+	Drop ``m'' if the series value is a member of a fixed list
+	and issue warning if doing it (gh/453)
+
+2020-11-24  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* latexrelease.ins:
+	reorder module loading to match the order used
+	in the format to correctly resolve dependencies (gh/434)
+
+	* ltexpl.dtx (subsection{Loader}):
+	Load xparse in latexrelease if necessary and add missing
+	IncludeInRelease guards (gh/434)
+
+	* ltdefns.dtx, ltfilehook.dtx, lthooks.dtx, ltxshipout.dtx:
+	Add rollback support for forward case (gh/434)
+
+2020-11-20  Phelype Oleinik  <phelype.oleinik at latex-project.org>
+
+	* ltclass.dtx:
+	Remove file path from \@currname and use only \@currname to identify
+		a package internally (gh/422).
+	Add \@currpath and (temporarily) \@kernel at currpathstack.
+	In \ProvidesPackage check the argument with \strcmp instead of \ifx.
+	In case of substitution, copy the option list to the requested package.
+
+	* ltfilehook.dtx:
+	Keep path in the replacement file (#2) in \declare at file@substitution.
+	In case of a replacement, pass the actually loaded file to \@addtofilelist.
+	Explicitly clear replacement flag after using it.
+
+2020-11-17  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* fntguide.tex:
+	Updated documentation of virtual shapes \updefault and \ulcdefault
+
+2020-11-09  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltmath.dtx:
+	\negmedspace and \negthickspace have been only in amsmath,
+	so we need to undefine for rollback because amsmath used
+	\newcommand back then (gh/423)
+
+2020-11-09  Frank Mittelbach  <Frank.Mittelbach at latex-project.org>
+
+	* ltclass.dtx (section{Package/class rollback mechanism}):
+	Change help text for suspicous rollback, because the package may have
+		existed then --- there is just no rollback data (gh/423)
+
+#########################
 # 2020-10-01 PL 2 Release
 #########################
 

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/classes.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/clsguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/clsguide.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/clsguide.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/cyrguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/cyrguide.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/cyrguide.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/encguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/encguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/encguide.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/encguide.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/exscale.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/fix-cm.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/fntguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/fntguide.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/fntguide.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 %
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
@@ -42,7 +42,7 @@
     newer NFSS features of 2020}\\
    All rights reserved.}
 
-\date{July 2020}
+\date{November 2020}
 
 \begin{document}
 
@@ -340,22 +340,25 @@
 \end{verbatim}
 The author commands for fonts set the five attributes:
 \begin{center}
+  \hspace*{-1em}%
   \begin{tabular}{rcl}
     \emph{Author command} & \emph{Attribute}
                           & \emph{Value in} |article| \emph{class} \\
     |\textnormal{..}| or |\normalfont| & family & |cmr|     \\
+                                       & series & |m|       \\
+                                       & shape  & |n|       \\[1pt]
     |\textrm{..}| or |\rmfamily|       & family & |cmr|     \\
     |\textsf{..}| or |\sffamily|       & family & |cmss|    \\
     |\texttt{..}| or |\ttfamily|       & family & |cmtt|    \\
     |\textmd{..}| or |\mdseries|       & series & |m|       \\
-    |\textbf{..}| or |\bfseries|       & series & |bx|      \\
-    |\textup{..}| or |\upshape|        & shape  & |n|       \\
+    |\textbf{..}| or |\bfseries|       & series & |bx|      \\[1pt]
     |\textit{..}| or |\itshape|        & shape  & |it|      \\
     |\textsl{..}| or |\slshape|        & shape  & |sl|      \\
     |\textsc{..}| or |\scshape|        & shape  & |sc|      \\
     |\textssc{..}| or |\sscshape|      & shape  & |ssc|     \\
     |\textsw{..}| or |\swshape|        & shape  & |sw|      \\
-    |\textulc{..}| or |\ulcshape|      & shape  & |ulc|     \\
+    |\textulc{..}| or |\ulcshape|      & shape  & |ulc| (virtual) $\to$ |n|, |it|, |sl| or |ssc| \\
+    |\textup{..}| or |\upshape|        & shape  & |up|  (virtual) $\to$ |n| or |sc|    \\[1pt]
     |\tiny|                            & size   & |5pt|     \\
     |\scriptsize|                      & size   & |7pt|     \\
     |\footnotesize|                    & size   & |8pt|     \\
@@ -520,8 +523,9 @@
 The shapes selected by |\textit|, |\itshape|, |\textsl|, |\slshape|,
 |\textsc|, |\scshape|, |\textssc|, |\sscshape|, |\textsw|, |\swshape|,
 |\textulc|, |\ulcshape|, |\textup| and |\upshape|.  By default these are
-|it|, |sl|, |sc|, |ssc|, |sw|, |ulc| and |n|.  |ulc| is special here
-since it is a virtual one; it doesn't exist as a real shape.  The
+|it|, |sl|, |sc|, |ssc|, |sw|, |ulc| and |up|.  Note that |ulc| and |up| are special here
+because they are virtual shapes; they don't exist as real shape values. Instead they alter
+the existing shape value based on rules, i.e., the result depends on context. The
 respective macros |\textulc| or |\ulcshape| change small capitals back
 to upper/lower case but will not change the font with respect to
 italics, slanted or swash.  |\upshape| or |\textup| in contrast will

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/latexchanges.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/latexchanges.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/latexchanges.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/latexchanges.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2015-2020
+% Copyright (C) 2015-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -38,10 +38,10 @@
 
 \title{Changes to the \LaTeXe{} format}
 
-\author{\copyright~Copyright 2015--2020, \LaTeX3 Project Team.\\
+\author{\copyright~Copyright 2015--2021, \LaTeX3 Project Team.\\
    All rights reserved.}
 
-\date{2020-02-02}
+\date{2021-01-08}
 
 % a few commands from doc
 \newcommand\Lpack[1]{\mbox{\textsf{#1}}}
@@ -75,16 +75,15 @@
      \url{https://tex.stackexchange.com/q/#1}}
 \fi
 
-\begin{document}
 
-\maketitle
+\setcounter{tocdepth}{1}  % don't show subsections
 
-\tableofcontents
 
-\newpage
+\begin{document}
 
-\section{Introduction}
+\maketitle
 
+\begin{abstract}
 This document describes changes that were made to the
 \LaTeX\ format since the  2014-05-01 \LaTeX\ releases.
 
@@ -99,14 +98,80 @@
 but changes in any patch releases will be listed in more
 detail here.
 
-More  detailed change logs are available as
+More detailed change logs are available as
 \texttt{changes.txt} in the base distribution, and full code
   differences may be browsed via the code repository on GitHub
 see for example
 \url{https://github.com/latex3/latex2e/commits/master}.
+\end{abstract}
 
+\tableofcontents
 
+\newpage
 
+%\section{Introduction}
+
+
+
+\section{Changes introduced in 2020-10-01 patch~4}
+
+This patch fixed two bugs in the hook management: if debugging for the
+L3 programming layer was turned on it reported inconsistent use of
+local/global variables. This was a spurious warning but nevertheless
+disconcerting (\ghissue{463}). The other bug was more serious, in some
+situations a wrong value of \verb=\CurrentFile= inside of file-related hooks
+could lead to errors (\ghissue{464}).
+
+We also added the documentation file \texttt{userguide3.pdf} which
+will become the main home for documenting new features of \LaTeX. At
+this point in time it covers the \Lpack{xparse} functionality that has
+been added to the kernel.
+
+\section{Changes introduced in 2020-10-01 patch~3}
+
+This patch fixed some rollback issues that prevented successful
+rollback to other release levels in some cases.  It also fixed an issue
+with file hooks involving files with explicit paths  (\ghissue{422}).
+
+One important change was to handle hook declarations done in the
+document preamble in a special way, e.g., those done with
+\verb=\AtBeginDocument=. They are now always executed last and are not
+subject to the normal code sorting for hooks, because they are nearly always
+needed to overwrite earlier settings made in packages.
+
+Finally, the NFSS series handling was slightly changed to
+automatically drop surplus ``\texttt{m}''s from series specifications
+when needed (and warn about them when encountered), e.g.,
+``\texttt{mc}'' automatically becomes ``\texttt{c}'' which is the
+official NFSS name for a \emph{medium compact} series (\ghissue{453}).
+This was done to improve the fix in 2020-02-02 PL~5.
+
+\section{Changes introduced in 2020-10-01 patch~2}
+
+This patch fixed the passing of options to packages and classes when
+they are stored in a special place (denoted by \verb=\input at path=)
+instead of their normal location (\ghissue{414}). In that case the
+options got lost.
+
+\section{Changes introduced in 2020-10-01 patch~1}
+
+This patch fixed a file handling issue: to allow for spaces in file
+names quotes were used but this upsets Bib\TeX{} (\ghissue{400}).  In
+addition, two rollback issues got corrected.
+
+\section{Changes introduced in 2020-10-01}
+
+Major enhancements in this release include pre-loading of the
+\Lpack{xparse} package for producing document-level commands with more
+complicated argument signatures and the new hook management system for
+\LaTeX{} documented in \texttt{lthooks-doc.pdf},
+\texttt{ltfilehook-doc.pdf} and \texttt{ltshipout-doc.pdf}.
+
+In addition there have been many smaller fixes and enhancements.
+Please see \ltnewsissue{32} for an overview of the new features and
+the change log in \texttt{changes.txt} for a more detailed list of
+individual changes.
+
 \section{Changes introduced in 2020-02-02 patch~5}
 
 The patch~4 dropped a bit too much in certain situations, e.g., it
@@ -167,7 +232,7 @@
 to improve startup times, especially with Lua\TeX\ and Xe\TeX, and
 extra features in the font selection mechanism. Please see
 \ltnewsissue{31}  for an overview of the new features and the change
-log in \texttt{changelog.txt} for a more detailed list of individual
+log in \texttt{changes.txt} for a more detailed list of individual
 changes.
 
 
@@ -248,7 +313,7 @@
 value as an argument instead of just acting as a prefix to them. These
 packages also provided the \verb|\labelformat| macro to change the prefix
 macro and \verb|\Ref| so that using counters defined that way in the
-beginning of sentences would have the proper capitalisation. These features
+beginning of sentences would have the proper capitalization. These features
 were added to the \LaTeXe{} kernel.
 
 The kernel now says ``Trying to load\ldots''
@@ -283,7 +348,7 @@
 The use of potrusion in tables of contents is suppressed by default,
 see \sxquestion{172785}.
 
-The handling of visible space in verbation was adjusted for
+The handling of visible space in verbatim was adjusted for
 \ghissue{69} and \ghissue{70}.
 
 Spaces are removed from the argument passed to BiBTeX, \ghissue{88}.
@@ -295,7 +360,7 @@
 
 
 \section{Changes  introduced in 2018-04-01 patch~5}
-Improved support for non ASCII filenames on the commandline on
+Improved support for non ASCII filenames on the command line on
 filesystems using legacy encodings.
 
 Adjusted the new package rollback code so that some edge cases where rollback
@@ -344,11 +409,11 @@
 
 Previously defining an encoding-specific composite with an undeclared
 accent (or an accent declared later) gave no error, but did nothing useful.
-\LaTeX\ will now detect this and give the accent comamnd a default definition
+\LaTeX\ will now detect this and give the accent command a default definition
 as an error, allowing the declared composite to work as intended.
 
 The definition of \verb|\-| is adjusted to match the comments in
-\gnatsissue{3855} to accomodate non standard settings of \verb|\hyphenchar|.
+\gnatsissue{3855} to accommodate non standard settings of \verb|\hyphenchar|.
 
 In parboxes and similar settings, \verb|\lineskiplimit| is now
 reset (to the existing default value, \verb|\normallineskiplimit|).
@@ -409,7 +474,7 @@
 
 \section{Changes  introduced in 2015/10/01 patch~2}
 
-This release fixes the behaviour of the allocation mechanism if the switch
+This release fixes the behavior of the allocation mechanism if the switch
 from the standard to extended pool takes place within a group.
 
 \section{Changes  introduced in 2015/10/01 patch~1}
@@ -444,7 +509,7 @@
 \textcommabelow{S}\,\textcommabelow{s}\,\textcommabelow{T}\,\textcommabelow{t}.
 
 \subsection{Unicode 8}
-The file |unicode-letters.def| used to initialise character data in
+The file |unicode-letters.def| used to initialize character data in
 Unicode \TeX\ variants has been regenerated from data files updated
 to Unicode~8.
 

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/lb2.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/letter.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/lppl.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltfilehook-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltfilehook-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/lthooks-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/lthooks-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews01.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews01.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews01.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews02.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews02.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews02.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews03.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews03.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews03.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews04.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews04.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews04.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews05.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews05.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews05.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews06.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews06.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews06.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews07.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews07.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews07.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews08.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews08.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews08.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews09.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews09.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews09.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews10.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews10.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews10.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews11.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews11.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews11.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews12.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews12.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews12.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews13.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews13.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews13.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews14.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews14.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews14.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews15.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews15.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews15.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews16.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews16.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews16.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews17.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews17.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews17.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews18.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews18.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews18.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews19.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews19.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews19.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews22.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews22.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews22.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2015-2020
+% Copyright (C) 2015-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews23.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews23.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews23.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2015-2020
+% Copyright (C) 2015-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews24.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews24.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews24.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2015-2020
+% Copyright (C) 2015-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews25.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews25.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews25.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2016-2020
+% Copyright (C) 2016-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews26.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews26.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews26.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2017-2020
+% Copyright (C) 2017-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews27.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews27.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews27.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2017-2020
+% Copyright (C) 2017-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews28.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews28.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews28.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2017-2020
+% Copyright (C) 2017-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews29.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews29.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews29.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2018-2020
+% Copyright (C) 2018-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltnews33.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltnews33.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltnews33.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -114,8 +114,68 @@
 \section{Other changes to the \LaTeX{} kernel}
 
 
+\subsection{\cs{end}\texttt{\textbraceleft document\textbraceright}
+  should always start in v-mode}
+
+Until now \verb=\end{document}= executed the code from the
+\cs{AtEndDocument} hook as its first action. This meant that it was
+executed in horizontal mode if the user left no empty line after the
+last paragraph.  As a result one could get a spurious space added, for
+example, when that code contained a \cs{write} statement. This was
+fixed and now \cs{enddocument} first issues a \cs{par} to ensure that
+it always starts out in vertical mode.
+%
+\githubissue{385}
+
+
+
+\subsection{Allow extra space between name and address in \pkg{letter} class}
+
+The \cs{opening} command in the the \pkg{letter} class expects the
+name and address to be separated by \verb=\\= but it didn't allow to
+use an optional argument at this point to add some extra space after
+the name. The coding has now been slightly altered to allow for this.
+%
+\githubissue{427}
+
+
+
+\subsection{Provide hook in \cs{selectfont}}
+
+After \cs{selectfont} has altered the font we run a hook so that
+packages can make final adjustments. This functionality was originally
+provided by the \pkg{everysel} package, the new implementation is
+slightly different and uses the standard hook management.
+%
+\githubissue{444}
+
+
+\subsection{Delay change of font series and shape to \cs{selectfont} call}
+
+With the NFSS extensions introduced in 2020 the font series and shape
+settings be be influenced by changes to the font family. The setting
+is therefore delayed until \cs{selectfont} is executed to avoid
+unnecessary or incorrect substitutions that may otherwise happen due
+to the order of declarations.
+%
+\githubissue{444}
+
+
+
+\subsection{Allow \cs{nocite} in preamble}
+
+A natural place for \verb=\nocite{*}= would be the preamble of the
+document, but for historical reasons \LaTeX{} issued an error message
+if it was placed there. From the new release on it is now allowed in
+the preamble.
+%
+\githubissue{424}
+
+
+
 \subsection{\ldots}
 
+\emph{to be written}
 %
 \githubissue{xxx}
 

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltshipout-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltshipout-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltx3info.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/ltx3info.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/ltx3info.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/manifest.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/manifest.txt	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/manifest.txt	2021-01-09 21:36:18 UTC (rev 57365)
@@ -38,6 +38,7 @@
 % fntguide.tex    --  Guide to font selection.
 % modguide.tex    --  Guide to modifying and distributing LaTeX.
 % usrguide.tex    --  User guide for this release.
+% usrguide3.tex   --  User guide for expl3-based methods.
 %
 % ltnews01.tex    --  What was new in the release dated 1994/06.
 % ltnews02.tex    --  What was new in the release dated 1994/12.

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/manual.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/modguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/modguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/modguide.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/modguide.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/proc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/slides.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/source2e.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/source2e.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/source2e.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/source2e.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/tulm.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/usrguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/usrguide.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/usrguide.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Added: trunk/Master/texmf-dist/doc/latex-dev/base/usrguide3.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex-dev/base/usrguide3.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/usrguide3.pdf	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/usrguide3.pdf	2021-01-09 21:36:18 UTC (rev 57365)

Property changes on: trunk/Master/texmf-dist/doc/latex-dev/base/usrguide3.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex-dev/base/usrguide3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/base/usrguide3.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex-dev/base/usrguide3.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -0,0 +1,701 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2020,2021
+% The LaTeX3 Project and any individual authors listed elsewhere
+% in this file.
+%
+% This file is part of the LaTeX base system.
+% -------------------------------------------
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%    http://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008 or later.
+%
+% This file has the LPPL maintenance status "maintained".
+%
+% The list of all files belonging to the LaTeX base distribution is
+% given in the file `manifest.txt'. See also `legal.txt' for additional
+% information.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is defined by the unpacking scripts (with
+% extension .ins) which are part of the distribution.
+%
+% \fi
+% Filename: usrguide3.tex
+
+\documentclass{ltxguide}
+
+\usepackage[T1]{fontenc}  % needed for \textbackslash in tt
+
+\title{\LaTeX3 methods for authors}
+\author{\copyright~Copyright 2020, \LaTeX\ Project Team.\\
+   All rights reserved.}
+
+\date{Released 2020-12-02}
+
+\NewDocumentCommand\cs{m}{\texttt{\textbackslash\detokenize{#1}}}
+\NewDocumentCommand\marg{m}{\arg{#1}}
+\NewDocumentCommand\meta{m}{\ensuremath{\langle}\textit{#1}\ensuremath{\rangle}}
+\NewDocumentCommand\pkg{m}{\textsf{#1}}
+\NewDocumentCommand\text{m}{\ifmmode\mbox{#1}\else#1\fi}
+% Fix a 'feature'
+\makeatletter
+\renewcommand \verbatim at font {\normalfont \ttfamily}
+\makeatother
+
+\begin{document}
+
+\maketitle
+
+\tableofcontents
+
+\section{Introduction}
+
+\LaTeXe{} was released in 1994 and added a number of then-new concepts to
+\LaTeX{}. These are described in \texttt{usrguide}, which has largely remained
+unchanged. Since then, the \LaTeX{} team have worked on a number of ideas,
+firstly a programming language for \LaTeX{} (\pkg{expl3}) and then a range of
+tools for document authors which build on that language. Here, we describe
+\emph{stable} and \emph{widely-usable} concepts that have resulted from that
+work. These `new' ideas have been transferred from development packages
+into the \LaTeXe{} kernel. As such, they are now available to \emph{all}
+\LaTeX{} users and have the \emph{same stability} as any other part of the
+kernel. The fact that `behind the scenes' they are built on \pkg{expl3}
+is useful for the development team, but is not directly important to users.
+
+\section{Creating document commands and environments}
+
+\subsection{Overview}
+
+Creating document commands and environments using the \LaTeX3 toolset is based
+around the idea that a common set of descriptions can be used to cover almost
+all argument types used in real documents. Thus parsing is reduced to a simple
+description of which arguments a command takes: this description provides the
+`glue' between the document syntax and the implementation of the
+command.
+
+First, we will describe the argument types, then move on to explain how these
+can be used to create both document commands and environments. Various more
+specialized features are then described, which allow an even richer application
+of a simple interface set up.
+
+The details here are intended to help users create document commands in
+general. More technical detail, suitable for \TeX{} programmers, is included
+in \texttt{interface3}.
+
+\subsection{Describing argument types}
+
+In order to allow each argument to be defined independently, the parser does
+not simply need to know the number of arguments for a function, but also the
+nature of each one. This is done by constructing an \emph{argument
+specification}, which defines the number of arguments, the type of each
+argument and any additional information needed for the parser to read the user
+input and properly pass it through to internal functions.
+
+The basic form of the argument specifier is a list of letters, where each
+letter defines a type of argument. As will be described below, some of the
+types need additional information, such as default values. The argument types
+can be divided into two, those which define arguments that are mandatory
+(potentially raising an error if not found) and those which define optional
+arguments. The mandatory types
+\begin{itemize}
+  \item[\texttt{m}] A standard mandatory argument, which can either be a single token
+    alone or multiple tokens surrounded by curly braces |{}|. Regardless of the
+    input, the argument will be passed to the internal code without the outer
+    braces. This is the type specifier for a normal \TeX{} argument.
+  \item[\texttt{r}] Given as \texttt{r}\meta{token1}\meta{token2}, this denotes a
+    `required' delimited argument, where the delimiters are
+    \meta{token1} and \meta{token2}. If the opening delimiter \meta{token1} is
+    missing, the default marker |-NoValue-| will be inserted after a suitable
+    error.
+  \item[\texttt{R}] Given as \texttt{R}\meta{token1}\meta{token2}\marg{default},
+    this is a `required' delimited argument as for~\texttt{r},
+    but it has a user-definable recovery \meta{default} instead of
+    |-NoValue-|.
+  \item[\texttt{v}] Reads an argument `verbatim', between the following
+    character and its next occurrence, in a way similar to the argument
+    of the \LaTeXe{} command \cs{verb}. Thus a \texttt{v}-type argument
+    is read between two identical characters, which cannot be any of |%|, |\|,
+    |#|, |{|, |}| or \verb*| |. The verbatim argument can also be enclosed
+    between braces, |{| and |}|. A command with a verbatim argument will
+    produce an error when it appears within an argument of another function.
+  \item[\texttt{b}] Only suitable in the argument specification of an
+    environment, it denotes the body of the environment, between
+    |\begin|\marg{environment} and |\end|\marg{environment}.  See
+    Section~\ref{sec:cmd:body} for details.
+\end{itemize}
+The types which define optional arguments are:
+\begin{itemize}
+  \item[\texttt{o}] A standard \LaTeX{} optional argument, surrounded with square
+    brackets, which will supply the special |-NoValue-| marker if not given
+    (as described later).
+  \item[\texttt{d}] Given as \texttt{d}\meta{token1}\meta{token2}, an optional
+    argument which is delimited by \meta{token1} and \meta{token2}. As with
+    \texttt{o}, if no value is given the special marker |-NoValue-| is
+    returned.
+  \item[\texttt{O}] Given as \texttt{O}\marg{default}, is like \texttt{o}, but returns
+    \meta{default} if no value is given.
+  \item[\texttt{D}] Given as \texttt{D}\meta{token1}\meta{token2}\marg{default}, it is
+    as for \texttt{d}, but returns \meta{default} if no value is given.
+    Internally, the \texttt{o}, \texttt{d} and \texttt{O} types are
+    short-cuts to an appropriated-constructed \texttt{D} type argument.
+  \item[\texttt{s}] An optional star, which will result in a value
+    \cs{BooleanTrue} if a star is present and \cs{BooleanFalse}
+    otherwise (as described later).
+  \item[\texttt{t}] An optional \meta{token}, which will result in a value
+    \cs{BooleanTrue} if \meta{token} is present and \cs{BooleanFalse}
+    otherwise. Given as \texttt{t}\meta{token}.
+  \item[\texttt{e}] Given as \texttt{e}\marg{tokens}, a set of optional
+    \emph{embellishments}, each of which requires a \emph{value}.
+    If an embellishment is not present, |-NoValue-| is returned.  Each
+    embellishment gives one argument, ordered as for the list of
+    \meta{tokens} in the argument specification.  All \meta{tokens}
+    must be distinct.
+  \item[\texttt{E}] As for \texttt{e} but returns one or more \meta{defaults}
+    if values are not given: \texttt{E}\marg{tokens}\marg{defaults}. See
+    Section~\ref{sec:cmd:embellishment} for more details.
+\end{itemize}
+
+\subsection{Modifying argument descriptions}
+
+In addition to the argument \emph{types} discussed above, the argument
+description also gives special meaning to three other characters.
+
+First, \texttt{+} is used to make an argument long (to accept paragraph
+tokens). In contrast to \cs{newcommand}, this applies on an
+argument-by-argument basis. So modifying the example to `|s o o +m O{default}|'
+means that the mandatory argument is now \cs{long}, whereas the optional
+arguments are not.
+
+Secondly, \texttt{!} is used to control whether spaces are allowed before
+optional arguments. There are some subtleties to this, as \TeX{} itself
+has some restrictions on where spaces can be `detected': more detail
+is given in Section~\ref{sec:cmd:opt-space}.
+
+Finally, the character \texttt{>} is used to declare so-called
+`argument processors', which can be used to modify the contents of an
+argument before it is passed to the macro definition. The use of argument
+processors is a somewhat advanced topic, (or at least a less commonly used
+feature) and is covered in Section~\ref{sec:cmd:processors}.
+
+\subsection{Creating document commands and environments}
+
+\begin{decl}
+  |\NewDocumentCommand|     \arg{cmd} \arg{arg spec} \arg{code} \\
+  |\RenewDocumentCommand|   \arg{cmd} \arg{arg spec} \arg{code} \\
+  |\ProvideDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\
+  |\DeclareDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code}
+\end{decl}
+This family of commands are used to create a \meta{cmd}. The argument
+specification for the function is given by \meta{arg spec}, and the command
+uses the \meta{code} with |#1|, |#2|, etc.\ replaced by the arguments found
+by the parser.
+
+An example:
+\begin{verbatim}
+  \NewDocumentCommand\chapter{s o m}
+    {%
+      \IfBooleanTF{#1}%
+        {\typesetstarchapter{#3}}%
+        {\typesetnormalchapter{#2}{#3}}%
+    }
+\end{verbatim}
+would be a way to define a \cs{chapter} command which would essentially behave
+like the current \LaTeXe{} command (except that it would accept an optional
+argument even when a \texttt{*} was parsed). The \cs{typesetnormalchapter}
+could test its first argument for being |-NoValue-| to see if an optional
+argument was present. (See Section~\ref{sec:cmd:special} for details of
+\cs{IfBooleanTF} and testing for |-NoValue-|.)
+
+The difference between the \cs{New...} \cs{Renew...}, \cs{Provide...}
+and \cs{Declare...} versions is the behavior if \meta{cmd} is already
+defined.
+\begin{itemize}
+ \item \cs{NewDocumentCommand} will issue an error if \meta{cmd}
+   has already been defined.
+ \item \cs{RenewDocumentCommand} will issue an error if \meta{cmd}
+   has not previously been defined.
+ \item \cs{ProvideDocumentCommand} creates a new definition for
+   \meta{function} only if one has not already been given.
+ \item \cs{DeclareDocumentCommand} will always create the new
+   definition, irrespective of any existing \meta{cmd} with the
+   same name.  This should be used sparingly.
+\end{itemize}
+
+\begin{decl}
+  |\NewDocumentEnvironment|     \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\
+  |\RenewDocumentEnvironment|   \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\
+  |\ProvideDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code} \\
+  |\DeclareDocumentEnvironment| \arg{env} \arg{arg spec} \arg{beg-code} \arg{end-code}
+\end{decl}
+These commands work in the same way as \cs{NewDocumentCommand}, etc.\@, but
+create environments (\cs{begin}\arg{env} \ldots{}
+\cs{end}\arg{environment}). Both the \meta{beg-code} and \meta{end-code}
+may access the arguments as defined by \meta{arg spec}. The arguments will be
+given following \cs{begin}\arg{environment}.
+
+\subsection{Optional arguments}
+\label{sec:cmd:opt}
+
+In contrast to commands created using \LaTeXe{}'s \cs{newcommand}, optional
+arguments created using \cs{NewDocumentCommand} may safely be nested. Thus for
+example, following
+\begin{verbatim}
+\NewDocumentCommand\foo{om}{I grabbed `#1' and `#2'}
+\NewDocumentCommand\baz{o}{#1-#1}
+\end{verbatim}
+using the command as
+\begin{verbatim}
+\foo[\baz[stuff]]{more stuff}
+\end{verbatim}
+will print
+\begin{quote}
+I grabbed `stuff-stuff' and `more stuff'
+\end{quote}
+This is particularly useful when placing a command with an optional argument
+\emph{inside} the optional argument of a second command.
+
+When an optional argument is followed by a mandatory argument with the same
+delimiter, the parser issues a warning because the optional argument could not
+be omitted by the user, thus becoming in effect mandatory. This can apply to
+\texttt{o}, \texttt{d}, \texttt{O}, \texttt{D}, \texttt{s}, \texttt{t},
+\texttt{e}, and \texttt{E} type arguments followed by \texttt{r} or
+\texttt{R}-type required arguments.
+
+The default for \texttt{O}, \texttt{D} and \texttt{E} arguments can be
+the result of grabbing another argument. Thus for example
+\begin{verbatim}
+  \NewDocumentCommand\foo{O{#2} m}
+\end{verbatim}
+would use the mandatory argument as the default for the leading optional
+one.
+
+\subsection{Spacing and optional arguments}
+\label{sec:cmd:opt-space}
+
+\TeX{} will find the first argument after a function name irrespective of any
+intervening spaces. This is true for both mandatory and optional arguments. So
+|\foo[arg]| and \verb*|\foo [arg]| are equivalent. Spaces are also ignored when
+collecting arguments up to the last mandatory argument to be collected (as it
+must exist). So after
+\begin{verbatim}
+  \NewDocumentCommand\foo{m o m}{ ... }
+\end{verbatim}
+the user input |\foo{arg1}[arg2]{arg3}| and \verb*|\foo{arg1} [arg2] {arg3}|
+will both be parsed in the same way.
+ 
+The behavior of optional arguments \emph{after} any mandatory arguments is
+selectable. The standard settings will allow spaces here, and thus with
+\begin{verbatim}
+  \NewDocumentCommand\foobar{m o}{ ... }
+\end{verbatim}
+both |\foobar{arg1}[arg2]| and \verb*|\foobar{arg1} [arg2]| will find an
+optional argument. This can be changed by giving the modified |!| in the
+argument specification:
+\begin{verbatim}
+  \NewDocumentCommand\foobar{m !o}{ ... }
+\end{verbatim}
+where \verb*|\foobar{arg1} [arg2]| will not find an optional argument.
+
+There is one subtly here due to the difference in handling by \TeX{} of
+`control symbols', where the command name is made up of a single
+character, such as `\texttt{\textbackslash\textbackslash}'.
+Spaces are not ignored by \TeX{} here,
+and thus it is possible to require an optional argument directly follow such a
+command. The most common example is the use of \texttt{\textbackslash\textbackslash}
+in \pkg{amsmath} environments, which in the terms here would be defined as
+\begin{verbatim}
+  \NewDocumentCommand\\{!s !o}{ ... }
+\end{verbatim}
+
+\subsection{`Embellishments'}
+\label{sec:cmd:embellishment}
+
+The \texttt{E}-type argument allows one default value per test token. This is
+achieved by giving a list of defaults for each entry in the list, for example:
+\begin{verbatim}
+  E{^_}{{UP}{DOWN}}
+\end{verbatim}
+If the list of default values is \emph{shorter} than the list of test tokens,
+the special |-NoValue-| marker will be returned (as for the \texttt{e}-type
+argument). Thus for example
+\begin{verbatim}
+  E{^_}{{UP}}
+\end{verbatim}
+has default \texttt{UP} for the |^| test character, but will return the
+|-NoValue-| marker as a default for |_|. This allows mixing of explicit
+defaults with testing for missing values.
+
+
+\subsection{Testing special values}
+\label{sec:cmd:special}
+
+Optional arguments make use of dedicated variables to return information about
+the nature of the argument received.
+
+\begin{decl}
+  |\IfNoValueTF| \arg{arg} \arg{true code} \arg{false code} \\
+  |\IfNoValueT|  \arg{arg} \arg{true code} \arg{false code} \\
+  |\IfNoValueF|  \arg{arg} \arg{true code} \arg{false code}
+\end{decl}
+The \cs{IfNoValue(TF)} tests are used to check if \meta{argument} (|#1|,
+|#2|, \emph{etc.}) is the special |-NoValue-| marker For example
+\begin{verbatim}
+  \NewDocumentCommand\foo{o m}
+    {%
+      \IfNoValueTF {#1}%
+        {\DoSomethingJustWithMandatoryArgument{#2}}%
+        {\DoSomethingWithBothArguments{#1}{#2}}%
+    }
+\end{verbatim}
+will use a different internal function if the optional argument
+is given than if it is not present.
+
+Note that three tests are available, depending on which outcome
+branches are required: \cs{IfNoValueTF}, \cs{IfNoValueT} and
+\cs{IfNoValueF}.
+
+As the \cs{IfNoValue(TF)} tests are expandable, it is possible to
+test these values later, for example at the point of typesetting or
+in an expansion context.
+
+It is important to note that |-NoValue-| is constructed such that it
+will \emph{not} match the simple text input |-NoValue-|, i.e.~that
+\begin{verbatim}
+  \IfNoValueTF{-NoValue-}
+\end{verbatim}
+will be logically \texttt{false}.
+When two optional arguments follow each other (a syntax we typically
+discourage), it can make sense to allow users of the command to
+specify only the second argument by providing an empty first
+argument.  Rather than testing separately for emptiness and for
+|-NoValue-| it is then best to use the argument type~|O| with an
+empty default value, and simply test for emptiness using the
+\pkg{expl3} conditional \cs{tl_if_blank:nTF} or its \pkg{etoolbox}
+analogue \cs{ifblank}.
+
+\begin{decl}
+  |\IfValueTF| \arg{arg} \arg{true code} \arg{false code} \\
+  |\IfValueT|  \arg{arg} \arg{true code} \arg{false code} \\
+  |\IfValueF|  \arg{arg} \arg{true code} \arg{false code}
+\end{decl}
+The reverse form of the \cs{IfNoValue(TF)} tests are also available
+as \cs{IfValue(TF)}. The context will determine which logical
+form makes the most sense for a given code scenario.
+
+\begin{decl}
+  |\BooleanFalse|  \\
+  |\BooleanTrue|
+\end{decl}
+The \texttt{true} and \texttt{false} flags set when searching for
+an optional character (using \texttt{s} or \texttt{t\meta{char}}) have
+names which are accessible outside of code blocks.
+
+\begin{decl}
+  |\IfBooleanTF| \arg{arg} \arg{true code} \arg{false code} \\
+  |\IfBooleanT|  \arg{arg} \arg{true code} \arg{false code} \\
+  |\IfBooleanF|  \arg{arg} \arg{true code} \arg{false code}
+\end{decl}
+Used to test if \meta{argument} (|#1|, |#2|, \emph{etc.}) is
+\cs{BooleanTrue} or \cs{BooleanFalse}. For example
+\begin{verbatim}
+  \NewDocumentCommand\foo{sm}
+    {%
+      \IfBooleanTF {#1}%
+        {\DoSomethingWithStar{#2}}%
+        {\DoSomethingWithoutStar{#2}}%
+    }
+\end{verbatim}
+checks for a star as the first argument, then chooses the action to
+take based on this information.
+
+\subsection{Argument processors}
+\label{sec:cmd:processors}
+
+Argument processor are applied to an argument \emph{after} it has been grabbed
+by the underlying system but before it is passed to \meta{code}. An argument
+processor can therefore be used to regularize input at an early stage, allowing
+the internal functions to be completely independent of input form. Processors
+are applied to user input and to default values for optional arguments, but
+\emph{not} to the special |-NoValue-| marker.
+
+Each argument processor is specified by the syntax \texttt{>}\marg{processor}
+in the argument specification. Processors are applied from right to left, so
+that
+\begin{verbatim}
+  >{\ProcessorB} >{\ProcessorA} m
+\end{verbatim}
+would apply \cs{ProcessorA} followed by \cs{ProcessorB} to the tokens grabbed
+by the \texttt{m} argument.
+
+\begin{decl}
+  |\SplitArgument| \arg{number} \arg{token(s)}
+\end{decl}
+This processor splits the argument given at each occurrence of the
+\meta{tokens} up to a maximum of \meta{number} tokens (thus
+dividing the input into $\text{\meta{number}} + 1$ parts).
+An error is given if too many \meta{tokens} are present in the
+input. The processed input is placed inside
+$\text{\meta{number}} + 1$ sets of braces for further use.
+If there are fewer than \arg{number} of \arg{tokens} in the argument
+then |-NoValue-| markers are added at the end of the processed
+argument.
+\begin{verbatim}
+  \NewDocumentCommand \foo {>{\SplitArgument{2}{;}} m}
+    {\InternalFunctionOfThreeArguments#1}
+\end{verbatim}
+If only a single character \meta{token} is used for the split, any
+category code $13$ (active) character matching the \meta{token} will
+be replaced before the split takes place.
+Spaces are trimmed at each end of each item parsed.
+
+\begin{decl}
+  |\SplitList| \arg{token(s)}
+\end{decl}
+This processor splits the argument given at each occurrence of the
+\meta{token(s)} where the number of items is not fixed. Each item is
+then wrapped in braces within |#1|. The result is that the
+processed argument can be further processed using a mapping function
+(see below).
+\begin{verbatim}
+  \NewDocumentCommand \foo {>{\SplitList{;}} m}
+    {\MappingFunction#1}
+\end{verbatim}
+If only a single character \meta{token} is used for the split, any
+category code $13$ (active) character matching the \meta{token} will
+be replaced before the split takes place.
+Spaces are trimmed at each end of each item parsed.
+
+\begin{decl}
+  |\ProcessList| \arg{list} \arg{function}
+\end{decl}
+To support \cs{SplitList}, the function \cs{ProcessList} is available
+to apply a \meta{function} to every entry in a \meta{list}. The
+\meta{function} should absorb one argument: the list entry. For example
+\begin{verbatim}
+  \NewDocumentCommand \foo {>{\SplitList{;}} m}
+    {\ProcessList{#1}{\SomeDocumentCommand}}
+\end{verbatim}
+
+\begin{decl}
+  |\ReverseBoolean|
+\end{decl}
+This processor reverses the logic of \cs{BooleanTrue} and
+\cs{BooleanFalse}, so that the example from earlier would become
+\begin{verbatim}
+  \NewDocumentCommand\foo{>{\ReverseBoolean} s m}
+   {%
+      \IfBooleanTF#1%
+        {\DoSomethingWithoutStar{#2}}%
+        {\DoSomethingWithStar{#2}}%
+    }
+\end{verbatim}
+
+\begin{decl}
+  |\TrimSpaces|
+\end{decl}
+Removes any leading and trailing spaces (tokens with character code~$32$
+and category code~$10$) for the ends of the argument. Thus for example
+declaring a function
+\begin{verbatim}
+  \NewDocumentCommand\foo {>{\TrimSpaces} m}
+    {\showtokens{#1}}
+\end{verbatim}
+and using it in a document as
+\begin{flushleft}
+  \verb=  =\verb*=\foo{ hello world }=
+\end{flushleft}
+will show `\verb*=hello world=' at the terminal, with the space at each
+end removed. \cs{TrimSpaces} will remove multiple spaces from the ends of
+the input in cases where these have been included such that the standard
+\TeX{} conversion of multiple spaces to a single space does not apply.
+
+\subsection{Body of an environment}
+\label{sec:cmd:body}
+
+While environments |\begin|\marg{environment}\ \dots{}\,|\end|\marg{environment}
+are typically used in cases where the code implementing the \meta{environment}
+does not need to access the contents of the environment (its `body'),
+it is sometimes useful to have the body as a standard argument.
+
+This is achieved by ending the argument specification with~\texttt{b}, which is
+a dedicated argument type for this situation. For instance
+\begin{verbatim}
+  \NewDocumentEnvironment{twice} {O{\ttfamily} +b}
+    {#2#1#2} {}
+\end{verbatim}
+\begin{verbatim}
+  \begin{twice}[\itshape]
+    Hello world!
+  \end{twice}
+\end{verbatim}
+typesets `Hello world!{\itshape Hello world!}'.
+
+The prefix |+| is used to allow multiple paragraphs in the environment's body.
+Argument processors can also be applied to \texttt{b}~arguments. By default,
+spaces are trimmed at both ends of the body: in the example there would
+otherwise be spaces coming from the ends the lines after |[\itshape]| and
+|world!|. Putting the prefix |!| before \texttt{b} suppresses space-trimming.
+
+When \texttt{b} is used in the argument specification, the last argument of the environment declaration (e.g., \cs{NewDocumentEnvironment}), which consists of an \meta{end code} to insert at
+|\end|\marg{environment}, is redundant since one can simply put that code at
+the end of the \meta{start code}. Nevertheless this (empty) \meta{end code}
+must be provided.
+
+Environments that use this feature can be nested.
+
+\subsection{Fully-expandable document commands}
+
+Document commands created using \cs{NewDocumentCommand}, etc.\@, are normally
+created so that they do not expand unexpectedly. This is done using engine
+features, so is more powerful than \LaTeXe{}'s \cs{protect} mechanism. There
+are \emph{very rare} occasion when it may be useful to create functions using a
+expansion-only grabber. This imposes a number of restrictions on the
+nature of the arguments accepted by a function, and the code it implements.
+This facility should only be used when \emph{absolutely necessary}.
+
+\begin{decl}
+  |\NewExpandableDocumentCommand|     \arg{cmd} \arg{arg spec} \arg{code} \\
+  |\RenewExpandableDocumentCommand|   \arg{cmd} \arg{arg spec} \arg{code} \\
+  |\ProvideExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\
+  |\DeclareExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code}
+\end{decl}
+This family of commands is used to create a document-level \meta{function},
+which will grab its arguments in a fully-expandable manner. The
+argument specification for the function is given by \meta{arg spec},
+and the function will execute \meta{code}. In  general, \meta{code} will
+also be fully expandable, although it is possible that this will
+not be the case (for example, a function for use in a table might
+expand so that \cs{omit} is the first non-expandable non-space token).
+
+Parsing arguments by pure expansion imposes a number of restrictions on
+both the type of arguments that can be read and the error checking
+available:
+\begin{itemize}
+  \item The last argument (if any are present) must be one of the
+    mandatory types \texttt{m}, \texttt{r} or \texttt{R}.
+  \item The `verbatim' argument type \texttt{v} is not available.
+  \item Argument processors (using \texttt{>}) are not available.
+  \item It is not possible to differentiate between, for example
+    |\foo[| and |\foo{[}|: in both cases the \texttt{[} will be
+    interpreted as the start of an optional argument. As a
+    result, checking for optional arguments is less robust than
+    in the standard version.
+\end{itemize}
+
+\subsection{Details about argument delimiters}
+
+In normal (non-expandable) commands, the delimited types look for the
+initial delimiter by peeking ahead (using \pkg{expl3}'s |\peek_...|
+functions) looking for the delimiter token.  The token has to have the
+same meaning and `shape' of the token defined as delimiter.
+There are three possible cases of delimiters: character tokens, control
+sequence tokens, and active character tokens.  For all practical purposes
+of this description, active character tokens will behave exactly as
+control sequence tokens.
+
+\subsubsection{Character tokens}
+
+A character token is characterized by its character code, and its meaning
+is the category code~(|\catcode|).  When a command is defined, the meaning
+of the character token is fixed into the definition of the command and
+cannot change.  A command will correctly see an argument delimiter if
+the open delimiter has the same character and category codes as at the
+time of the definition.  For example in:
+\begin{verbatim}
+  \NewDocumentCommand { \foobar } { D<>{default} } {(#1)}
+\end{verbatim}
+\begin{verbatim}
+  \foobar <hello> \par
+  \char_set_catcode_letter:N <
+  \foobar <hello>
+\end{verbatim}
+the output would be:
+\begin{verbatim}
+  (hello)
+  (default)<hello>
+\end{verbatim}
+as the open-delimiter |<| changed in meaning between the two calls to
+|\foobar|, so the second one doesn't see the |<| as a valid delimiter.
+Commands assume that if a valid open-delimiter was found, a matching
+close-delimiter will also be there.  If it is not (either by being
+omitted or by changing in meaning), a low-level \TeX{} error is raised
+and the command call is aborted.
+
+\subsubsection{Control sequence tokens}
+
+A control sequence (or control character) token is characterized by is
+its name, and its meaning is its definition.
+A token cannot have two different meanings at the same time.
+When a control sequence is defined as delimiter in a command,
+it will be detected as delimiter whenever the control sequence name
+is found in the document regardless of its current definition.
+For example in:
+\begin{verbatim}
+  \cs_set:Npn \x { abc }
+  \NewDocumentCommand { \foobar } { D\x\y{default} } {(#1)}
+  \foobar \x hello\y \par
+  \cs_set:Npn \x { def }
+  \foobar \x hello\y
+\end{verbatim}
+the output would be:
+\begin{verbatim}
+  (hello)
+  (hello)
+\end{verbatim}
+with both calls to the command seeing the delimiter |\x|.
+
+\subsection{Creating new argument processors}
+
+\begin{decl}
+  |\ProcessedArgument| 
+\end{decl}
+Argument processors allow manipulation of a grabbed argument before it is
+passed to the underlying code. New processor implementations may be created
+as functions which take one trailing argument, and which leave their result in
+the \cs{ProcessedArgument} variable. For example, \cs{ReverseBoolean} is
+defined as
+\begin{verbatim}
+\ExplSyntaxOn
+  \cs_new_protected:Npn \ReverseBoolean #1
+    {
+      \bool_if:NTF #1
+        { \tl_set:Nn \ProcessedArgument { \c_false_bool } }
+        { \tl_set:Nn \ProcessedArgument { \c_true_bool } }
+    }
+\ExplSyntaxOff
+\end{verbatim}
+[As an aside: the code is written in \pkg{expl3}, so we don't have to
+  worry about spaces creeping into the definition.]
+
+\subsection{Access to the argument specification}
+
+The argument specifications for document commands and environments are
+available for examination and use.
+
+\begin{decl}
+  |\GetDocumentCommandArgSpec| \arg{function}         \\
+  |\GetDocumentEnvironmentArgSpec| \arg{environment}
+\end{decl}
+These functions transfer the current argument specification for the
+requested \meta{function} or \meta{environment} into the token list
+variable \cs{ArgumentSpecification}. If the \meta{function} or
+\meta{environment} has no known argument specification then an error
+is issued. The assignment to \cs{ArgumentSpecification} is local to
+the current \TeX{} group.
+
+\begin{decl}
+  |\ShowDocumentCommandArgSpec| \arg{function}         \\
+  |\ShowDocumentEnvironmentArgSpec| \arg{environment}
+\end{decl}
+These functions show the current argument specification for the
+requested \meta{function} or \meta{environment} at the terminal. If
+the \meta{function} or \meta{environment} has no known argument
+specification then an error is issued.
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex-dev/base/usrguide3.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex-dev/base/alltt.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/alltt.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/alltt.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -30,7 +30,7 @@
 %%
 %% File `alltt.dtx'.
 %% Copyright (C) 1987 by Leslie Lamport
-%% Copyright (C) 1994--1997 LaTeX3 project, Johannes Braams
+%% Copyright (C) 1994--2020 LaTeX3 project, Johannes Braams
 %%                       all rights reserved.
 %%
 %<*dtx>
@@ -40,7 +40,7 @@
 %<package>\ProvidesPackage{alltt}
 %<driver>\ProvidesFile{alltt.drv}
 %\ProvidesFile{alltt.dtx}
-              [1997/06/16 v2.0g defines alltt environment]
+              [2020/11/23 v2.0g defines alltt environment]
 %
 %<*driver>
 \documentclass{ltxdoc}
@@ -173,7 +173,7 @@
 %    control sequence |\do| between the characters. We use that to
 %    check whether a character has to be removed.
 %
-%    The macro |\g at remfrom@specials| takes one argument, the chracter
+%    The macro |\g at remfrom@specials| takes one argument, the character
 %    to be removed from the list.
 %    \begin{macrocode}
 \def\g at remfrom@specials#1{%

Modified: trunk/Master/texmf-dist/source/latex-dev/base/alltt.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/alltt.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/alltt.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/classes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/classes.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/classes.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -53,7 +53,7 @@
 %<*driver>
 \ProvidesFile{classes.drv}
 %</driver>
-              [2020/04/10 v1.4m
+              [2020/11/23 v1.4m
 %<article|report|book> Standard LaTeX document class]
 %<10pt|11pt|12pt>      Standard LaTeX file (size option)]
 %    \end{macrocode}
@@ -116,7 +116,7 @@
 \DoNotIndex{\viipt,\vipt,\vskip,\vspace}
 \DoNotIndex{\wd,\xiipt,\year,\z@}
 %    \end{macrocode}
-%    We do want an index, using linenumbers
+%    We do want an index, using line numbers
 %    \begin{macrocode}
 \EnableCrossrefs
 \CodelineIndex
@@ -199,7 +199,7 @@
 % \changes{v1.2o}{1994/05/24}{Changed file information}
 % \changes{v1.2p}{1994/05/27}{Moved identification and driver to the
 %    front of the file}
-% \changes{v1.2t}{1994/06/22}{Refrased a few sentences to prevent
+% \changes{v1.2t}{1994/06/22}{Rephrased a few sentences to prevent
 %    overfull hboxes}
 % \changes{v1.2v}{1994/12/01}{Made the oneside option work for the
 %    book class}
@@ -423,7 +423,7 @@
 %<!article>\fi
 %    \end{macrocode}
 %
-%  \subsection{Twocolumn printing}
+%  \subsection{Two-column printing}
 %
 %    Two-column and one-column printing is again realized via a switch.
 %    \begin{macrocode}
@@ -788,7 +788,7 @@
 % \begin{macro}{\parindent}
 %    |\parskip| gives extra vertical space between paragraphs and
 %    |\parindent| is the width of the paragraph indentation. The value
-%    of |\parindent| depends on whether we are in two column mode.
+%    of |\parindent| depends on whether we are in two-column mode.
 % \changes{v1.0m}{1994/01/12}{\cs{parindent} should be different,
 %    depending on the pointsize}
 %    \begin{macrocode}
@@ -998,7 +998,7 @@
 %    Now we can set the |\textwidth|, depending on whether we will be
 %    setting one or two columns.
 %
-%    In two column mode each \emph{column} shouldn't be wider than
+%    In two-column mode each \emph{column} shouldn't be wider than
 %    |\@tempdimb| (which could happen on \textsc{a3} paper for
 %    instance).
 %    \begin{macrocode}
@@ -1010,7 +1010,7 @@
     \fi
 %    \end{macrocode}
 %
-%    In one column mode the text should not be wider than the minimum
+%    In one-column mode the text should not be wider than the minimum
 %    of the paperwidth (minus 2 inches for the margins) and the
 %    maximum length of a line as defined by the number of characters.
 %    \begin{macrocode}
@@ -1168,7 +1168,7 @@
   \fi
 %</!bk>
 %    \end{macrocode}
-%    And values for two column mode:
+%    And values for two-column mode:
 %    \begin{macrocode}
   \if at twocolumn
      \setlength\oddsidemargin  {30\p@}
@@ -1389,7 +1389,7 @@
 %
 % \begin{macro}{\c at dbltopnumber}
 %    The \Lcount{dbltopnumber} counter holds the maximum number of
-%    two column floats that can appear on the top of a two column text
+%    two-column floats that can appear on the top of a two-column text
 %    page.
 %    \begin{macrocode}
 \setcounter{dbltopnumber}{2}
@@ -1397,8 +1397,8 @@
 % \end{macro}
 %
 % \begin{macro}{\dbltopfraction}
-%    This indicates the maximum part of a two column text page that
-%    can be occupied by two column floats at the top.
+%    This indicates the maximum part of a two-column text page that
+%    can be occupied by two-column floats at the top.
 % \changes{v1.0h}{1993/12/18}{Replaced \cs{newcommand} with
 %    \cs{renewcommand}.  ASAJ.}
 %    \begin{macrocode}
@@ -1408,7 +1408,7 @@
 %
 % \begin{macro}{\dblfloatpagefraction}
 %    This indicates the minimum part of a page that has to be
-%    occupied by two column wide floating objects before a `float
+%    occupied by two-column wide floating objects before a `float
 %    page' is produced.
 % \changes{v1.0h}{1993/12/18}{Replaced \cs{newcommand} with
 %    \cs{renewcommand}.  ASAJ.}
@@ -1459,7 +1459,7 @@
 % \begin{macro}{\dblfloatsep}
 % \begin{macro}{\dbltextfloatsep}
 %    When floating objects that span the whole |\textwidth| are placed
-%    on a text page when we are in twocolumn mode the separation
+%    on a text page when we are in two-column mode the separation
 %    between the float and the text is controlled by |\dblfloatsep|
 %    and |\dbltextfloatsep|.
 %
@@ -1498,7 +1498,7 @@
 %    whitespace. Between adjacent floats the |\@fpsep| is inserted.
 %
 %    These parameters are used for the placement of floating objects
-%    in one column mode, or in single column floats in two column
+%    in one-column mode, or in single-column floats in two-column
 %    mode.
 %
 %    Note that at least one of the two parameters |\@fptop| and
@@ -1528,7 +1528,7 @@
 % \begin{macro}{\@dblfptop}
 % \begin{macro}{\@dblfpsep}
 % \begin{macro}{\@dblfpbot}
-%    Double column floats in two column mode are handled with similar
+%    Double-column floats in two-column mode are handled with similar
 %    parameters.
 %    \begin{macrocode}
 %<*10pt>
@@ -1809,7 +1809,7 @@
   \let \footnote \thanks
 %    \end{macrocode}
 %    We center the entire title vertically; the centering is set off a
-%    little by adding a |\vskip|. (In compatibility mode the pagenumber
+%    little by adding a |\vskip|. (In compatibility mode the page number
 %    is set to 0 by the titlepage environment to keep the behaviour
 %    of \LaTeX\ 2.09 style files.)
 % \changes{v1.0g}{1993/12/09}{Removed the setting of the page number,
@@ -1872,7 +1872,7 @@
 %    \end{macrocode}
 %    When the title is not on a page of its own, the layout of the
 %    title is a little different. We use symbols to mark the footnotes
-%    and we have to deal with two column documents.
+%    and we have to deal with two-column documents.
 %
 %    Therefore we first start a new group to keep changes local. Then
 %    we redefine |\thefootnote| to use |\fnsymbol|; and change
@@ -1893,7 +1893,7 @@
               \hb at xt@1.8em{%
                 \hss\@textsuperscript{\normalfont\@thefnmark}}##1}%
 %    \end{macrocode}
-%    If this is a twocolumn document we start a new page in twocolumn
+%    If this is a two-column document we start a new page in two-column
 %    mode, with the title set to the full width of the text. The
 %    actual printing of the title information is left to
 %    |\@maketitle|.
@@ -1908,7 +1908,7 @@
         \fi
       \else
 %    \end{macrocode}
-%    When this is not a twocolumn document we just start a new page,
+%    When this is not a two-column document we just start a new page,
 %    prevent floating objects from appearing on the top of this page
 %    and print the title information.
 %    \begin{macrocode}
@@ -2133,10 +2133,10 @@
 %    \Lcount{COUNTER} as an arabic numeral.
 %
 %    |\roman{|\Lcount{COUNTER}|}| prints the value of
-%    \Lcount{COUNTER} as a lowercase roman numberal.
+%    \Lcount{COUNTER} as a lowercase roman numeral.
 %
 %    |\Roman{|\Lcount{COUNTER}|}| prints the value of
-%    \Lcount{COUNTER} as an uppercase roman numberal.
+%    \Lcount{COUNTER} as an uppercase roman numeral.
 %
 %    |\alph{|\Lcount{COUNTER}|}| prints the value of \Lcount{COUNTER}
 %    as a lowercase letter: $1 =$~a, $2 =$~ b, etc.
@@ -2144,7 +2144,7 @@
 %    |\Alph{|\Lcount{COUNTER}|}| prints the value of \Lcount{COUNTER}
 %    as an uppercase letter: $1 =$~A, $2 =$~B, etc.
 %
-%    Actually to save space the internal counter repesentations
+%    Actually to save space the internal counter representations
 %    and the commands operating on those are used.
 %    \begin{macrocode}
 \renewcommand \thepart {\@Roman\c at part}
@@ -2281,7 +2281,7 @@
   \fi
   \thispagestyle{plain}%
 %    \end{macrocode}
-%    When we are making a two column document, this will be a one
+%    When we are making a two-column document, this will be a one
 %    column page. We use |@tempswa| to remember to switch back to two
 %    columns.
 %    \begin{macrocode}
@@ -2453,8 +2453,8 @@
                \fi
               \fi
 %    \end{macrocode}
-%    When this was a two column document we have to switch back to two
-%    column mode.
+%    When this was a two-column document we have to switch back to
+%    two-column mode.
 %    \begin{macrocode}
               \if at tempswa
                 \twocolumn
@@ -2522,8 +2522,8 @@
 %    \end{macrocode}
 %    Then we call upon |\@makechapterhead| to format the actual
 %    chapter title. We have to do this in a special way when we are in
-%    twocolumn mode in order to have the chapter title use the entire
-%    |\textwidth|. In one column mode we call |\@afterheading| which
+%    two-column mode in order to have the chapter title use the entire
+%    |\textwidth|. In one-column mode we call |\@afterheading| which
 %    takes care of suppressing the indentation.
 %    \begin{macrocode}
                     \if at twocolumn
@@ -2705,7 +2705,7 @@
 % \changes{v1.3q}{1995/12/20}{Temporary(?) fix: revert to setting
 %    \cs{leftmargin} at outer level}
 %
-% When we are in two column mode some of the margins are set somewhat
+% When we are in two-column mode some of the margins are set somewhat
 % smaller.
 %    \begin{macrocode}
 \if at twocolumn
@@ -3036,7 +3036,7 @@
      {\par\vfil\null\endtitlepage}
 %    \end{macrocode}
 %    When we are not making a separate titlepage --the default for the
-%    article document class-- we have to check if we are in twocolumn
+%    article document class-- we have to check if we are in two-column
 %    mode. In that case the abstract is as a |\section*|, otherwise
 %    the quotation environment is used to typeset the abstract.
 %    \begin{macrocode}
@@ -3125,13 +3125,16 @@
 %
 % \begin{environment}{titlepage}
 %  In the normal environments, the titlepage environment does nothing
-%  but start and end a page, and inhibit page numbers.  In the report
-%  style, it also resets the page number to one, and then sets it
-%  back to one at the end.  In compatibility mode, it sets the
-%  page number to zero. This is incorrect since it results in using
-%  the page parameters for a right-hand page but it is the way it was.
-%  In two-column style, it still makes a
-%  one-column page.
+%  but start and end a page, and inhibit page numbers. When \LaTeX\ is
+%  in two-column mode, the environmont temporarily switches to
+%  one-column mode.
+%  In the report class, it also resets the page number to one, and
+%  then, in two-column mode, sets it back to one at the end.
+%  For the book class the environment makes sure that the title page
+%  is on a recto page by issueing a \cs{cleardouplepage}-command.
+%  In compatibility mode, it sets the page number to zero. This is
+%  incorrect since it results in using the page parameters for a
+%  right-hand page but it is the way it was. 
 %
 % \changes{v1.0g}{1993/12/09}{Moved the setting of
 %    \cs{@restonecolfalse}}
@@ -3291,7 +3294,7 @@
 % \begin{macro}{\@minipagerestore}
 %    The macro |\@minipagerestore| is called upon entry to a minipage
 %    environment to set up things that are to be handled differently
-%    inside a minipage environment. In the current styles, it does
+%    inside a minipage environment. In the current classes, it does
 %    nothing.
 % \end{macro}
 %
@@ -3397,7 +3400,7 @@
 %    a figure is defined using the macros |\@float| and |\end at float|,
 %    which are defined in \file{latex.dtx}.
 %
-%    An environment that implements a single column floating object is
+%    An environment that implements a single-column floating object is
 %    started with |\@float{|\texttt{TYPE}|}[|\meta{placement}|]| of type
 %    \texttt{TYPE} with \meta{placement} as the placement specifier.
 %    The default value of \meta{PLACEMENT} is defined by |\fps at TYPE|.
@@ -3449,7 +3452,7 @@
 % \begin{environment}{figure}
 % \begin{environment}{figure*}
 %    And the definition of the actual environment. The form with the
-%    |*| is used for double column figures.
+%    |*| is used for double-column figures.
 %    \begin{macrocode}
 \newenvironment{figure}
                {\@float{figure}}
@@ -3506,7 +3509,7 @@
 % \begin{environment}{table}
 % \begin{environment}{table*}
 %    And the definition of the actual environment. The form with the
-%    |*| is used for double column tables.
+%    |*| is used for double-column tables.
 %    \begin{macrocode}
 \newenvironment{table}
                {\@float{table}}
@@ -3743,7 +3746,7 @@
 % \begin{macro}{\tableofcontents}
 %    This macro is used to request that \LaTeX{} produces a table of
 %    contents. In the report and book document classes the tables of
-%    contents, figures etc. are always set in single-column style.
+%    contents, figures etc. are always set in single-column mode.
 %
 % \changes{v1.0g}{1993/12/09}{Moved the setting of
 %    \cs{@restonecolfalse}}
@@ -3778,7 +3781,7 @@
            \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
 %    \end{macrocode}
 %    The actual table of contents is made by calling
-%    |\@starttoc{toc}|. After that we restore twocolumn mode if
+%    |\@starttoc{toc}|. After that we restore two-column mode if
 %    necessary.
 %    \begin{macrocode}
     \@starttoc{toc}%
@@ -3823,13 +3826,13 @@
     \begingroup
 %    \end{macrocode}
 %    We set |\parindent| to 0pt and use |\rightskip| to leave
-%    enough room for the pagenumbers.\footnote{^^A
+%    enough room for the page numbers.\footnote{^^A
 %        We should really set \cs{rightskip} to \cs{@tocrmarg} instead
 %        of \cs{@pnumwidth} (no version of {\LaTeX} ever did this),
 %        otherwise the \cs{rightskip} is too small.
 %        Unfortunately this can't be changed in {\LaTeXe} as we don't
 %        want to create different versions of {\LaTeXe} which produce
-%        different typset output unless this is absolutely necessary;
+%        different typeset output unless this is absolutely necessary;
 %        instead we suspend it for \LaTeX3.}
 %    To prevent overfull box messages the |\parfillskip| is set to a
 %    negative value.
@@ -3838,7 +3841,7 @@
       \parfillskip -\@pnumwidth
 %    \end{macrocode}
 %    Now we can set the entry, in a large bold font. We make sure to
-%    leave vertical mode, set the part title and add the pagenumber,
+%    leave vertical mode, set the part title and add the page number,
 %    set flush right.
 %    \begin{macrocode}
       {\leavevmode
@@ -4238,9 +4241,9 @@
                 \columnsep 35\p@
                 \let\item\@idxitem}
 %    \end{macrocode}
-%    When the document continues after the index and it was a one
-%    column document we have to switch back to one column after the
-%    index.
+%    When the document continues after the index and it was a
+%    one-column document we have to switch back to one column after
+%    the index.
 %    \begin{macrocode}
                {\if at restonecol\onecolumn\else\clearpage\fi}
 %    \end{macrocode}
@@ -4293,7 +4296,7 @@
 %
 % \begin{macro}{\c at footnote}
 %    Footnotes are numbered within chapters in the report and book
-%    document styles.
+%    document classes.
 %    \begin{macrocode}
 %<!article>\@addtoreset{footnote}{chapter}
 %    \end{macrocode}
@@ -4433,10 +4436,10 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \subsection{Two column mode}
+% \subsection{Two-column mode}
 %
 % \begin{macro}{\columnsep}
-%    This gives the distance between two columns in two column mode.
+%    This gives the distance between two columns in two-column mode.
 %    \begin{macrocode}
 \setlength\columnsep{10\p@}
 %    \end{macrocode}
@@ -4443,8 +4446,8 @@
 % \end{macro}
 %
 % \begin{macro}{\columnseprule}
-%    This gives the width of the rule between two columns in two
-%    column mode. We have no visible rule.
+%    This gives the width of the rule between two columns in
+%    two-column mode. We have no visible rule.
 %    \begin{macrocode}
 \setlength\columnseprule{0\p@}
 %    \end{macrocode}
@@ -4454,7 +4457,7 @@
 %    We have \pstyle{plain} pages in the document classes article and
 %    report unless the user specified otherwise. In the `book'
 %    document class we use the page style \pstyle{headings} by
-%    default. We use arabic pagenumbers.
+%    default. We use arabic page numbers.
 %    \begin{macrocode}
 %<!book>\pagestyle{plain}
 %<book>\pagestyle{headings}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/classes.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/classes.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/classes.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/cmextra.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/cmextra.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/cmextra.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/cmfonts.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/cmfonts.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/cmfonts.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/doc.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/doc.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -35,7 +35,7 @@
 %<+package|shortvrb>\NeedsTeXFormat{LaTeX2e}[1994/12/01]
 %<+package> \ProvidesPackage{doc}
 %<+shortvrb>\ProvidesPackage{shortvrb}
-%<+package|shortvrb>  [2020/06/15 v2.1m
+%<+package|shortvrb>  [2020/11/23 v2.1m
 %<+package|shortvrb>   Standard LaTeX documentation package (FMi)]
 %\catcode`\<=12
 %
@@ -47,7 +47,7 @@
 %
 %
 %% Package `doc' to use with LaTeX 2e
-%% Copyright (C) 1989-1999 Frank Mittelbach, all rights reserved.
+%% Copyright (C) 1989-2020 Frank Mittelbach, all rights reserved.
 %
 %
 % Version:     Date:     Changes:
@@ -751,7 +751,7 @@
 % in your package file.  Precede it by any bibliography commands
 % necessary for your citations.
 % Alternatively, it may be more convenient to put all such calls
-% amongst the arguments of the |\StopEventually| macro, in
+% amongt the arguments of the |\StopEventually| macro, in
 % which case a |\Finale| command should appear at the end of
 % your file.
 %
@@ -949,7 +949,7 @@
 % macro.}
 % \DescribeMacro\changes
 % To maintain a change history within the file, the |\changes|
-% command may be placed amongst the description part of the changed
+% command may be placed amongt the description part of the changed
 % code.  It takes three arguments, thus:
 % \begin{quote}
 % |\changes{|\meta{version}|}{|\meta{date}|}{|^^A
@@ -2200,7 +2200,7 @@
 %
 % \begin{environment}{environment}
 % \changes{v1.8c}{1993/10/25}{Environment added}
-%    The ``environment'' envrionment will be implemented just like the
+%    The ``environment'' environment will be implemented just like the
 %    ``macro'' environment flagging any differences in the code by
 %    passing |\iffalse| or |\iftrue| to the |\m at cro@| environment
 %    doing the actual work.
@@ -3029,7 +3029,7 @@
 % \begin{macro}{\addto at hook}
 % The code for adding tokens (the second argument) to a token list
 % (the first argument) is taken from~\cite{art:verbatim}, but it needs
-% to be "\long" in case "\par" is amongst the tokens.
+% to be "\long" in case "\par" is amongt the tokens.
 %    \begin{macrocode}
 \long\def\addto at hook#1#2{#1\expandafter{\the#1#2}}
 %    \end{macrocode}
@@ -3149,7 +3149,7 @@
 % of an `index style file'; the character selected for this function
 % is |=|, and therefore this character too must be specially treated
 % when it is met in a \TeX\ command.  A suitable index style file is
-% provided amongst the supporting files for this style file in
+% provided amongt the supporting files for this style file in
 % \texttt{gind.ist} and is generated from this source by processing
 % with \texttt{docstrip} to extract the module \textbf{gind}.  A
 % similar style file \texttt{gglo.ist} is supplied for sorting the
@@ -4219,7 +4219,7 @@
 %
 % \begin{macro}{\meta at font@select}
 % \changes{v2.0k}{2000/05/26}{Macro added (pr/3170)}
-%    Maske font used inside |\meta| customizable.
+%    Make font used inside |\meta| customizable.
 %    \begin{macrocode}
 \def\meta at font@select{\itshape}
 %    \end{macrocode}
@@ -4431,7 +4431,7 @@
     \global\catcode`#1\csname cc\string#1\endcsname
 %    \end{macrocode}
 % \changes{v1.9e.2}{1994/02/07}{-js: Reset `cc`\protect\meta{c} in
-%                       in \cs{DeleteShortVerb}}
+%                       \cs{DeleteShortVerb}}
 % We must not forget to reset "\cc\"\meta{c}, otherwise the check in
 % "\MakeShortVerb" for a repeated definition will not work.
 %    \begin{macrocode}
@@ -4532,7 +4532,7 @@
 %
 % \begin{macro}{\init at checksum}
 % The checksum mechanism works by counting backslashes in the
-% macrocode.  This initialises the count (when called from
+% macrocode.  This initializes the count (when called from
 % "\StopEventually").
 % \changes{v1.5k}{1989/09/04}{Macro added to support checksum.}
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/docstrip.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/docstrip.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -30,8 +30,8 @@
 \catcode`\}=2
 \def\filename{docstrip.dtx}
 \def\fileversion{v2.6a}
-\def\filedate{2020-07-07}
-\def\docdate {2020-07-11}
+\def\filedate{2020-11-23}
+\def\docdate {2020-11-23}
 %%
 %
 %\iffalse
@@ -77,7 +77,7 @@
 %                         less/more dirty---all uses of \cs{afterfi}}
 % \changes{2.3e}{1995/09/25}{Directories support}
 % \changes{2.3e}{1995/10/24}{added \cs{makepathname} to support
-%                         systems with bizzare pathnames}
+%                         systems with bizare pathnames}
 % \changes{2.3e}{1995/10/25}{batch files work by \cs{input}}
 % \changes{2.3e}{1996/10/02}{Introduced ``open lists''}
 % \changes{2.4a}{1996/06/06}{Add stream limits (MDW)}
@@ -122,7 +122,7 @@
 %
 % \changes{2.1b}{1993/02/23}{modified mailaddress of Johannes}
 % \changes{2.4i}{1998/01/18}{removed mail addresses as it is hopeless
-%                            to keep them uptodate}
+%                            to keep them up-to-date}
 % \author{%
 %   Frank Mittelbach
 %  \and
@@ -809,7 +809,7 @@
 % \end{verbatim}
 %
 %    To extract the code using \ds, the original `guard'
-%    mecahnism is extended by the introduction of the syntax
+%    mechanism is extended by the introduction of the syntax
 %    \texttt{\%<@@=\meta{module}>}. The \meta{module} name then
 %    replaces the |@@| when the code is extracted, so that
 % \begin{verbatim}
@@ -2305,7 +2305,7 @@
 %    delimited with |\endLine|) on all active output files i.e.
 %    those with off-counters equal to zero. It uses the
 %    search-and-replace macro \cs{replaceModuleInLine} to replace any
-%    occurences of \texttt{@@} with the current module name.
+%    occurrences of \texttt{@@} with the current module name.
 %    If statistics are included, the counter
 %    |\codeLinesPassed| is incremented by $1$.
 %    \begin{macrocode}
@@ -4310,7 +4310,7 @@
 %  \begin{macro}{\WriteToDir}
 %    Macro |\WriteToDir| is either empty or holds the prefix
 %    necessary to read a file from the current directory. Under UNIX
-%    this is |./| but a lot of other systems addopted this concept.
+%    this is |./| but a lot of other systems adopted this concept.
 %    This macro is a default value for |\destdir|.
 %
 %    The definition of this macro is now delayed until |\@setwritedir|

Modified: trunk/Master/texmf-dist/source/latex-dev/base/docstrip.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/docstrip.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/docstrip.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -52,7 +52,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ec.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ec.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ec.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/exscale.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/exscale.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/exscale.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/exscale.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/exscale.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/exscale.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/fix-cm.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/fix-cm.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/fix-cm.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -37,7 +37,7 @@
 %<driver>\ProvidesFile{fix-cm.drv}
 % \fi
 %         \ProvidesFile{fix-cm.dtx}
-          [2015/01/14 v1.1t fixes to LaTeX]
+          [2020/11/24 v1.1t fixes to LaTeX]
 %
 % \iffalse
 %<*driver>
@@ -446,7 +446,7 @@
        {<->sub * cmtt/m/sl}{}
 %    \end{macrocode}
 %
-% \paragraph{CM Typewiter (var.)}
+% \paragraph{CM Typewriter (var.)}
 %    \begin{macrocode}
 \DeclareFontFamily{T1}{cmvtt}{}
 \DeclareFontShape{T1}{cmvtt}{m}{n}{

Modified: trunk/Master/texmf-dist/source/latex-dev/base/fix-cm.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/fix-cm.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/fix-cm.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/fontdef.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/fontdef.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/fontdef.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -39,13 +39,13 @@
 %<driver, >\ProvidesFile{fontdef.drv}
 % \fi
 %          \ProvidesFile{fontdef.dtx}
-%<-latexrelease>           [2020/08/01 v3.0i LaTeX Kernel
+%<-latexrelease>           [2020/11/24 v3.0i LaTeX Kernel
 % \iftrue  (\else
 %<text,   >(Text
 %<math,   >(Math
-%<+cfgtext>(Uncustomised text
-%<+cfgmath>(Uncustomised math
-%<+cfgprel>(Uncustomised preload
+%<+cfgtext>(Uncustomized text
+%<+cfgmath>(Uncustomized math
+%<+cfgprel>(Uncustomized preload
 % \fi
 %<-latexrelease>           font setup)]
 %
@@ -110,7 +110,7 @@
 % If you don't plan to use Computer Modern much or at all, it might
 % (!)  be a good idea to make your own \texttt{fonttext.cfg}. Look at
 % the comments below (docstrip module `text') to see what should
-% should go into such a file.
+% go into such a file.
 %
 % To change the math font setup use a copy of \texttt{fontmath.ltx}
 % under the name \texttt{fontmath.cfg} and change this copy. However,

Modified: trunk/Master/texmf-dist/source/latex-dev/base/format.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/format.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/format.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 
@@ -123,7 +123,7 @@
 
 This is a generated file.
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/graphpap.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/graphpap.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/graphpap.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/graphpap.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/graphpap.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/graphpap.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ifthen.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ifthen.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ifthen.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -42,7 +42,7 @@
 %<driver>\ProvidesFile{ifthen.drv}
 % \fi
 %         \ProvidesFile{ifthen.dtx}
-          [2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)]
+          [2020/11/24 v1.1c Standard LaTeX ifthen package (DPC)]
 %
 % \iffalse
 %<*driver>
@@ -368,7 +368,7 @@
 % \end{macro}
 %
 % \begin{macro}{\TE at endeval}
-% Finalise a term. (Expanded on the first pass).
+% Finalize a term. (Expanded on the first pass).
 %    \begin{macrocode}
 \def\TE at endeval{\relax
       \noexpand\TE at setvaltrue\noexpand

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ifthen.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ifthen.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ifthen.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/inputenc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/inputenc.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/inputenc.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -123,7 +123,7 @@
 %       THIS MAY CHANGE}
 % \changes{v0.95}{1997/12/20}{Updated documentation}
 % \changes{v0.97}{1998/03/05}{Spanish ords changed to text chars, pr/2579}
-% \changes{v1.1b}{2006/03/04}{Number of normalisations in the LICR
+% \changes{v1.1b}{2006/03/04}{Number of normalizations in the LICR
 %                             representation (pr/3849)}
 % \changes{v1.1c}{2006/11/18}{Added missing \cs{ProvidesFile} line for cp1257 (pr/3892)}
 %
@@ -410,7 +410,7 @@
 %<cp1252&!ansinew>  \ProvidesFile{cp1252.def}
 %<cp1250>  \ProvidesFile{cp1250.def}
 %<cp1257>  \ProvidesFile{cp1257.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 %<cp850>%%
 %<cp850>%% If you need a Euro symbol, try cp858 instead.
 %<cp850>%%
@@ -1053,7 +1053,7 @@
 %
 % The ISO Latin-3 encoding file defines the characters
 % in the ISO 8859-3 encoding.  It was contributed by
-% by J\"org Knappen (\texttt{joerg.knappen at uni-mainz.de}) and
+% J\"org Knappen (\texttt{joerg.knappen at uni-mainz.de}) and
 % adapted by Chris Rowley.
 %
 % It can be used for general purpose applications in

Modified: trunk/Master/texmf-dist/source/latex-dev/base/inputenc.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/inputenc.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/inputenc.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/latex209.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/latex209.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/latex209.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -200,7 +200,7 @@
 %    \end{macrocode}
 % Describe the file.
 %    \begin{macrocode}
-\ProvidesFile{latex209.def}[2020/08/21 v0.55 Standard LaTeX file]
+\ProvidesFile{latex209.def}[2020/11/26 v0.55 Standard LaTeX file]
 %    \end{macrocode}
 % \changes{v0.24}{1994/05/14}{Removed date.}
 % \changes{v0.40}{1995/03/21}
@@ -712,7 +712,7 @@
 %
 % \changes{v0.18}{1994/03/11}{Added the catcode changes}
 %
-% By default, \LaTeXe{} makes the input charactes 0--8, 11, 14--31 and
+% By default, \LaTeXe{} makes the input characters 0--8, 11, 14--31 and
 % 128--255 illegal.  In compatibility mode, we restore their old
 % meanings.
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/latex209.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/latex209.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/latex209.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/latexrelease.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/latexrelease.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/latexrelease.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -40,7 +40,7 @@
 %<*!fixltx2e>
 % \fi
 %         \ProvidesFile{latexrelease.dtx}
-          [2018/05/08 v1.0k LaTeX release emulation and tests
+          [2020/12/06 v1.0k LaTeX release emulation and tests
               (including releases up to \latexreleaseversion)]
 % \iffalse
 %</!fixltx2e>
@@ -345,7 +345,7 @@
 %
 % Now if you make a further change to |\widget| in the future you
 % simply copy the current definition into the empty block and add a new
-% empty declaration with todays date and the current format date. This
+% empty declaration with today's date and the current format date. This
 % way your main code stays readable and the old versions accumulate at
 % the end of the package.\footnote{Of course there may be some cases
 % in which the old code has to be in a specific place within the
@@ -396,7 +396,7 @@
 % \end{macro}
 %
 % \changes{v1.0c}{2015/02/19}{Swap argument order}
-% \changes{v1.0k}{2018/05/08}{reset \cs{\requestedLaTeXdate} for current and latest options, gitub issue 43}
+% \changes{v1.0k}{2018/05/08}{reset \cs{\requestedLaTeXdate} for current and latest options, github issue 43}
 %    \begin{macrocode}
 \DeclareOption*{%
   \def\@IncludeInRelease#1[#2]{\@IncludeInRele at se{#1}}%

Modified: trunk/Master/texmf-dist/source/latex-dev/base/latexrelease.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/latexrelease.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/latexrelease.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 
@@ -81,11 +81,16 @@
 %\keepsilent
 \usedir{tex/latex/base}
 
+% the order should match the order in the format in case there are dependencies
+% (something defined in one module and used in another)
+
 \generateFile{latexrelease.sty}{t}{%
   \from{ltclass.dtx}     {latexreleasefirst,tracerollback}%
   \from{ltvers.dtx}      {latexrelease}%
   \from{latexrelease.dtx}{latexrelease}%
   \from{ltdirchk.dtx}    {latexrelease}%
+  \from{ltplain.dtx}     {latexrelease}%
+  \from{ltluatex.dtx}    {latexrelease}% empty 
   \from{ltexpl.dtx}      {latexrelease}% empty 
   \from{ltdefns.dtx}     {latexrelease}%
   \from{lthooks.dtx}     {latexrelease}% empty  % L3 layer module
@@ -93,42 +98,39 @@
   \from{ltcntrl.dtx}     {latexrelease}% empty
   \from{lterror.dtx}     {latexrelease}% empty
   \from{ltpar.dtx}       {latexrelease}% empty
+  \from{ltspace.dtx}     {latexrelease}%
+  \from{ltlogos.dtx}     {latexrelease}% empty
+  \from{ltfiles.dtx}     {latexrelease}%
+  \from{ltoutenc.dtx}    {latexrelease}%
+  \from{ltcounts.dtx}    {latexrelease}%
+  \from{ltlength.dtx}    {latexrelease}%
+  \from{ltfssbas.dtx}    {latexrelease}%
+  \from{ltfssaxes.dtx}   {latexrelease}%
+  \from{ltfsstrc.dtx}    {latexrelease}%
+  \from{ltfssdcl.dtx}    {latexrelease}%
+  \from{ltfssini.dtx}    {latexrelease}%
+  \from{fontdef.dtx}     {latexrelease}% (covering fontmath and fonttext)
+  \from{ltfntcmd.dtx}    {latexrelease}% empty
+  \from{lttextcomp.dtx}  {latexrelease}%
+  \from{ltpageno.dtx}    {latexrelease}% empty
+  \from{ltxref.dtx}      {latexrelease}% empty
+  \from{ltmiscen.dtx}    {latexrelease}%
+  \from{ltmath.dtx}      {latexrelease}%
   \from{ltlists.dtx}     {latexrelease}% empty
   \from{ltboxes.dtx}     {latexrelease}%
   \from{lttab.dtx}       {latexrelease}% empty
-  \from{ltmath.dtx}      {latexrelease}%
   \from{ltpictur.dtx}    {latexrelease}%
   \from{ltthm.dtx}       {latexrelease}% empty
   \from{ltsect.dtx}      {latexrelease}% empty
-  \from{ltfiles.dtx}     {latexrelease}%
-  \from{ltoutenc.dtx}    {latexrelease}%
-  \from{ltcounts.dtx}    {latexrelease}%
-  \from{ltlength.dtx}    {latexrelease}%
   \from{ltfloat.dtx}     {latexrelease}%
   \from{ltidxglo.dtx}    {latexrelease}% empty
   \from{ltbibl.dtx}      {latexrelease}% empty
   \from{ltpage.dtx}      {latexrelease}% empty
+  \from{ltclass.dtx}     {latexrelease,tracerollback}%
   \from{ltfilehook.dtx}  {latexrelease}% empty  % L3 layer module
   \from{ltshipout.dtx}   {latexrelease}% empty  % L3 layer module
   \from{ltoutput.dtx}    {latexrelease}%
-  \from{ltclass.dtx}     {latexrelease,tracerollback}%
-  \from{ltspace.dtx}     {latexrelease}%
-  \from{ltlogos.dtx}     {latexrelease}% empty
-  \from{ltplain.dtx}     {latexrelease}%
-  \from{ltfssdcl.dtx}    {latexrelease}%
-  \from{ltfssini.dtx}    {latexrelease}%
-  \from{fontdef.dtx}     {latexrelease}% (covering fontmath and fonttext)
-  \from{ltfntcmd.dtx}    {latexrelease}% empty
-  \from{lttextcomp.dtx}  {latexrelease}%
-  \from{ltfssbas.dtx}    {latexrelease}%
-  \from{ltfssaxes.dtx}   {latexrelease}%
-  \from{ltfsstrc.dtx}    {latexrelease}%
-  \from{ltfsscmp.dtx}    {latexrelease}%
-  \from{ltpageno.dtx}    {latexrelease}% empty
-  \from{ltxref.dtx}      {latexrelease}% empty
-  \from{ltmiscen.dtx}    {latexrelease}%
-  \from{ltluatex.dtx}    {latexrelease}%
-  \from{ltexpl.dtx}      {latexrelease}%
+  \from{ltfsscmp.dtx}    {latexrelease}% only in latexrelease!
   \from{ltfinal.dtx}     {latexrelease}%
 }
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/latexsym.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/latexsym.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/latexsym.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/latexsym.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/latexsym.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/latexsym.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 
@@ -87,7 +87,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/letter.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/letter.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/letter.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -45,7 +45,7 @@
 %<*driver>
        \ProvidesFile{letter.drv}
 %</driver>
-              [2020/03/11 v1.3b
+              [2021/01/07 v1.3c
 %<+letter>               Standard LaTeX document class]
 %    \end{macrocode}
 %
@@ -1019,7 +1019,29 @@
       \@date \end{tabular}\par}%
   \fi
   \vspace{2\parskip}%
-  {\raggedright \toname \\ \toaddress \par}%
+%    \end{macrocode}
+%    If the address field used \verb=\\[...]= then we have
+%    \cs{toaddress} starting with the bracket argument as the split
+%    was done simply at \verb=\\=. So we add \cs{expandafter} here so
+%    that is will be used and not typeset. A better fix would be to do
+%    a proper parsing but \ldots
+%
+%    Other classes based on \texttt{letter.cls} could benefit from the same fix, e.g.,
+%    \texttt{akletter.cls},
+%    \texttt{bletter.cls},
+%    \texttt{letter.cls},
+%    \texttt{chletter.cls},
+%    \texttt{extletter.cls},\\
+%    \texttt{frletter.cls},
+%    \texttt{hletter.cls},
+%    \texttt{scrlttr2.cls},
+%    \texttt{lettre.cls},
+%    \texttt{beletter.cls},\\
+%    \texttt{brief.cls} and perhaps others.
+%
+% \changes{v1.3c}{2020/12/28}{Add \cs{expandafter} (gh/427)}
+%    \begin{macrocode}
+  {\raggedright \toname \expandafter\\\toaddress \par}%
   \vspace{2\parskip}%
   #1\par\nobreak}
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/letter.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/letter.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/letter.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltalloc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltalloc.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltalloc.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltbibl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltbibl.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltbibl.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -32,7 +32,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltbibl.dtx}
-             [2018/11/09 v1.1r LaTeX Kernel (Bibliography)]
+             [2020/12/10 v1.1s LaTeX Kernel (Bibliography)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltbibl.dtx}
@@ -104,7 +104,7 @@
 % but puts nothing in the text.
 %
 % |\nocite{*}| is special: it tells \BibTeX{} to put the whole of a
-% collection of references into the bibiography.
+% collection of references into the bibliography.
 %
 % \StopEventually{}
 %
@@ -253,7 +253,7 @@
 %    year citations it becomes more than questionable.
 %
 %    So Chris added yet another hook here, as suggested by, at least,
-%    Donald Arsenau.  Note that this one is inside the first argument
+%    Donald Arseneau.  Note that this one is inside the first argument
 %    of the |\@cite| hook.
 %    This decouples the top-level typesetting of the citation from
 %    the details of the other business conducted here.  All this really
@@ -327,6 +327,10 @@
 % \changes{v1.1g}{1995/05/08}{Use \cs{@firstofone}}
 % \changes{v1.1k}{1995/10/20}{Removed refundefined flag}
 %    \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2021/05/01}%
+%<latexrelease>                 {\nocite}{Allow nocite in preamble}%
 \def\nocite#1{\@bsphack
 %    \end{macrocode}
 %    With the implementation designed already in \LaTeX\,2.09 the
@@ -335,10 +339,15 @@
 %    that point. As a result the ``reference'' will appear on the
 %    terminal and nothing else will happen.
 %
-%    This would be easy to fix, but then a document using the fix will
+%    [This would be easy to fix, but then a document using the fix will
 %    silently fail on an older release of \LaTeX{}, missing all
 %    citations done with |\nocite|. Thus we do only generate an error
-%    message and leave the fix for a \LaTeXe{} successor.
+%    message and leave the fix for a \LaTeXe{} successor.]
+%  
+%    Given that we are now a quarter century into using \LaTeXe{}
+%    there is no good reason any more do limit ourself to 2.09
+%    conciderations. So we now simply delay the \cs{nocide} if it is
+%    issued in the preamble.
 %
 % \changes{v1.1o}{2003/05/18}{Check if we are after \cs{document}}
 % \changes{v1.1p}{2004/01/04}{Changed error message}
@@ -354,18 +363,48 @@
           \@latex at warning{Citation `\@citeb' undefined}}{}}%
   \else
 %    \end{macrocode}
-%    But before |\begin{document}| we raise an error message:
+%    But before |\begin{document}| we raised an error message in the
+%    past but as of 2021/05 not any longer.
 %    \begin{macrocode}
-    \@latex at error{Cannot be used in preamble}\@eha
+%    \@latex at error{Cannot be used in preamble}\@eha
 %    \end{macrocode}
-%    Without the compatibility problems we could fix the problem as follows:
+%    Instead we delay the declaration to the start of the document.
+%    We have to use a late hook for this, so that it comes after the
+%    \texttt{.aux} file is open for writing and after
+%    \cs{@preamblecmds} was executed to change the above
+%    test. Therefore \cs{AtBeginDocument} would still be too early.
+% \changes{v1.1s}{2020/12/10}{Delay any \cs{nocite} in the preamble
+%    instead of raising an error}
 %    \begin{macrocode}
-    % \AtBeginDocument{\nocite{#1}}
+    \AddToHook{begindocument/end}[kernel]{\nocite{#1}}%
   \fi
   \@esphack}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
 %    \end{macrocode}
+%
+%    \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\nocite}{Allow nocite in preamble}%
+%<latexrelease>
+%<latexrelease>\def\nocite#1{\@bsphack
+%<latexrelease>  \ifx\@onlypreamble\document
+%<latexrelease>    \@for\@citeb:=#1\do{%
+%<latexrelease>      \edef\@citeb{\expandafter\@firstofone\@citeb}%
+%<latexrelease>      \if at filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
+%<latexrelease>      \@ifundefined{b@\@citeb}{\G at refundefinedtrue
+%<latexrelease>          \@latex at warning{Citation `\@citeb' undefined}}{}}%
+%<latexrelease>  \else
+%<latexrelease>    \@latex at error{Cannot be used in preamble}\@eha
+%<latexrelease>  \fi
+%<latexrelease>  \@esphack}
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+%    \end{macrocode}
+%
 %    Since |\nocite{*}| should not produce a warning about undefined
-%    citation keys (seee PR 557), we need to set the control sequence
+%    citation keys (see PR 557), we need to set the control sequence
 %    `|\b@*|' to something other than |\relax|. As a result |\cite{*}|
 %    will not warn either (but that never worked with \BibTeX{} in the
 %    first place).

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltboxes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltboxes.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltboxes.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltboxes.dtx}
-             [2020/09/27 v1.4a LaTeX Kernel (Box Commands)]
+             [2020/12/05 v1.4a LaTeX Kernel (Box Commands)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltboxes.dtx}
@@ -539,7 +539,7 @@
 % \changes{v1.0b}{1994/03/14}
 %         {Use \cs{color at setgroup}}
 % \changes{v1.0d}{1994/04/15}
-%         {Added missing procent character.}
+%         {Added missing percent character.}
 % \changes{v1.0v}{1995/07/20}
 %         {Use \cs{sbox}}
 %    \begin{macrocode}
@@ -888,7 +888,7 @@
 %
 % The rational for allowing two normally global flags to be set
 % locally here was stated originally by
-% Donald Arsenau and extended by Chris Rowley.
+% Donald Arseneau and extended by Chris Rowley.
 % It is because these flags are only set globally to
 % true by section commands, and these should never appear within
 % boxes or, indeed, in any group; and they are only ever

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltclass.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltclass.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltclass.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltclass.dtx}
-             [2020/10/18 v1.3t LaTeX Kernel (Class & Package Interface)]
+             [2020/12/17 v1.3v LaTeX Kernel (Class & Package Interface)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltclass.dtx}
@@ -427,7 +427,7 @@
 % \changes{v0.2h}{1993/11/28}
 %         {Primitive filenames now terminated by space not \cs{relax}.}
 % \changes{v0.2h}{1993/11/28}
-%         {Directory syntax checing moved to dircheck.dtx}
+%         {Directory syntax checking moved to dircheck.dtx}
 % \changes{v0.2h}{1993/11/28}
 %         {Assorted commands now in the kernel removed.}
 % \changes{v0.2i}{1993/12/03}
@@ -486,7 +486,7 @@
 %  \begin{macro}{\@declaredoptions}
 %    This list is automatically built by |\DeclareOption|.
 %    It is the list of options (separated by commas) declared in
-%    the class or package file and it defines the order in which the
+%    the class or package file and it defines the order in which
 %    the corresponding |\ds@|\meta{option} commands are executed.
 %    All local \meta{option}s which are not declared will be processed
 %    in the order defined by the optional argument of |\documentclass|
@@ -524,6 +524,27 @@
 %    \end{macrocode}
 %  \end{macro}
 %
+% \begin{macro}{\@currpath}
+%   Path to the current file if explicitly given.
+%   \changes{v1.3u}{2020/11/20}{Macro added}
+%    \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}{\@currpath}%
+%<latexrelease>  {Add \@currpath}%
+\let\@currpath\@empty
+%<latexrelease>\EndIncludeInRelease
+%
+%<latexrelease>\IncludeInRelease{0000/00/00}{\@currpath}%
+%<latexrelease>  {Add \@currpath}%
+%<latexrelease>\let\@currpath\@undefined
+%<latexrelease>\EndIncludeInRelease
+%</2ekernel|latexrelease>
+%<*2ekernel>
+%    \end{macrocode}
+% \end{macro}
+%
 %  \begin{macro}{\@currname}
 %    Name of current package or option.
 %    \begin{macrocode}
@@ -562,6 +583,7 @@
 % \changes{v1.3l}{2020/06/05}{Added \cs{@expl at push@filename@@}
 %          and \cs{@expl at push@filename at aux@@}}
 % \changes{v1.3s}{2020/10/08}{Added missing 2020/02/02 \cs{IncludeInRelease}}
+% \changes{v1.3v}{2020/12/14}{Removed \cs{@expl@@@hook at curr@name at push@@n}}
 %    \begin{macrocode}
 %</2ekernel>
 %<*2ekernel|latexrelease>
@@ -578,7 +600,6 @@
 %   here, e.g., \cs{@expl at push@filename@@} needs cleanup and (and
 %   should probably not have this name either).
 %    \begin{macrocode}
-  \@expl@@@hook at curr@name at push@@n{}%
   \@expl at push@filename@@
   \xdef\@currnamestack{%
     {\@currname}%
@@ -585,6 +606,16 @@
     {\@currext}%
     {\the\catcode`\@}%
     \@currnamestack}%
+%    \end{macrocode}
+%   Temporarily add a stack for \cs{@currpath} here.  This should be
+%   integrated in the main file stack eventually, but other packages
+%   rely on \cs{@currnamestack} having three elements per file, so that
+%   isn't a trivial change.  The prefix \cs{@kernel at ...} hopefully
+%   discourages people from using it.
+%    \begin{macrocode}
+  \xdef\@kernel at currpathstack{%
+    {\@currpath}%
+    \@kernel at currpathstack}%
   \@expl at push@filename at aux@@}
 %<latexrelease>\EndIncludeInRelease
 %    \end{macrocode}
@@ -632,6 +663,10 @@
 %<latexrelease>  {Add \@expl at pop@filename@@}%
 \def\@popfilename{\@expl@@@hook at curr@name at pop@@
   \expandafter\@p at pfilename\@currnamestack\@nil
+%    \end{macrocode}
+%   Same for popping:
+%    \begin{macrocode}
+  \expandafter\@p at pfilepath\@kernel at currpathstack\@nil
   \@expl at pop@filename@@}
 %<latexrelease>\EndIncludeInRelease
 %<latexrelease>
@@ -672,6 +707,36 @@
 % \end{macro}
 % \end{macro}
 %
+%
+% \begin{macro}{\@kernel at currpathstack}
+%   Path to the current file if explicitly given.  The auxiliary is
+%   needed here to insert a \cs{@empty} to prevent the loss of braces.
+%   \changes{v1.3u}{2020/11/20}{Macro added}
+%    \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}{\@kernel at currpathstack}%
+%<latexrelease>  {Add \@kernel at currpathstack}%
+\gdef\@kernel at currpathstack{}
+\def\@p at pfilepath#1{%
+  \gdef\@currpath{#1}\@p at pfilepath@aux\@empty}
+\def\@p at pfilepath@aux#1\@nil{%
+  \xdef\@kernel at currpathstack{#1}}
+%<latexrelease>\EndIncludeInRelease
+%
+%<latexrelease>\IncludeInRelease{0000/00/00}{\@kernel at currpathstack}%
+%<latexrelease>  {Add \@kernel at currpathstack}%
+%<latexrelease>\let\@kernel at currpathstack\@undefined
+%<latexrelease>\let\@p at pfilepath\@undefined
+%<latexrelease>\let\@p at pfilepath@aux\@undefined
+%<latexrelease>\EndIncludeInRelease
+%</2ekernel|latexrelease>
+%<*2ekernel>
+%    \end{macrocode}
+% \end{macro}
+%
+%
 % \begin{macro}{\@ptionlist}
 %    Returns the option list of the file.
 %    \begin{macrocode}
@@ -915,15 +980,42 @@
 % \changes{v0.3c}{1994/03/12}
 %         {use \cs{@gtempa}}
 %    \begin{macrocode}
+%</2ekernel>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease>  {\ProvidesPackage}{Check name with \strcmp}%
+%<*2ekernel|latexrelease>
 \def\ProvidesPackage#1{%
   \xdef\@gtempa{#1}%
-  \ifx\@gtempa\@currname\else
+%    \end{macrocode}
+% \changes{v1.3u}{2020/11/20}
+%         {Use string comparison instead of \cs{ifx}}
+%   Here \cs{@currpath} is explicitly added to the file name to report
+%   when a package or class is loaded using an explicit path.  Loading
+%   using a path in the argument is supported but not encouraged.
+%    \begin{macrocode}
+  \@expandtwoargs\@expl at str@if at eq@@nnTF
+      {\@gtempa}{\@currpath\@currname}{}{%
     \@latex at warning@no at line{You have requested
-      \@cls at pkg\space`\@currname',\MessageBreak
+      \@cls at pkg\space`\@currpath\@currname',\MessageBreak
        but the \@cls at pkg\space provides `#1'}%
-  \fi
+    }%
   \@ifnextchar[\@pr at videpackage{\@pr at videpackage[]}}%]
 \@onlypreamble\ProvidesPackage
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>  {\ProvidesPackage}{Undo: check name with \strcmp}%
+%<latexrelease>\def\ProvidesPackage#1{%
+%<latexrelease>  \xdef\@gtempa{#1}%
+%<latexrelease>  \ifx\@gtempa\@currname\else
+%<latexrelease>    \@latex at warning@no at line{You have requested
+%<latexrelease>      \@cls at pkg\space`\@currname',\MessageBreak
+%<latexrelease>       but the \@cls at pkg\space provides `#1'}%
+%<latexrelease>  \fi
+%<latexrelease>  \@ifnextchar[\@pr at videpackage{\@pr at videpackage[]}}%]
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
 %    \end{macrocode}
 %  \end{macro}
 %
@@ -934,12 +1026,12 @@
 %    be cautious when handling the identification string in case it
 %    contains UTF-8 characters.
 % \changes{v1.3e}{2019/11/29}{Protect package info text (gh/52)}
-% \changes{v1.3r}{2020/10/01}{Allow for package subsitution}
+% \changes{v1.3r}{2020/10/01}{Allow for package substitution}
 %    \begin{macrocode}
 %</2ekernel>
 %<*2ekernel|latexrelease>
 %<latexrelease>\IncludeInRelease{2020/10/01}%
-%<latexrelease>                 {\@pr at videpackage}{Allow for package subsitution}%
+%<latexrelease>                 {\@pr at videpackage}{Allow for package substitution}%
 \def\@pr at videpackage[#1]{%
   \expandafter\protected at xdef                %     <-- protected...
      \csname ver@\@currname.\@currext\endcsname{#1}% Loaded package
@@ -1007,9 +1099,18 @@
 %
 % \begin{macro}{\ProvidesClass}
 %    Like |\ProvidesPackage|, but for classes.
+%    This needs a dummy \pkg{latexrelease} block to copy the definition
+%    of \cs{ProvidesPackage} as it changes across releases.
 %    \begin{macrocode}
+%</2ekernel>
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>  {\ProvidesClass}{Track \ProvidesPackage}%
+%<*2ekernel|latexrelease>
 \let\ProvidesClass\ProvidesPackage
 \@onlypreamble\ProvidesClass
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1075,10 +1176,18 @@
   \@expl@@@filehook at set@curr at file@@nNN
     {\@expl@@@filehook at resolve@file at subst@@w #3.#1\@nil}%
       \reserved at a\reserved at b
+  \@expl@@@filehook at clear@replacement at flag@@
   \expandafter\xdef\csname opt@\reserved at a\endcsname{%
     \@ifundefined{opt@\reserved at a}\@empty
       {\csname opt@\reserved at a\endcsname,}%
-    \zap at space#2 \@empty}}
+    \zap at space#2 \@empty}%
+%    \end{macrocode}
+% \changes{v1.3u}{2020/11/20}
+%         {Copy option list to the requested package.}
+%    \begin{macrocode}
+  \expandafter\let
+    \csname opt@#3.#1\expandafter\endcsname
+    \csname opt@\reserved at a\endcsname}
 %</2ekernel|latexrelease>
 %<latexrelease>\EndIncludeInRelease
 %
@@ -1170,7 +1279,7 @@
 % \changes{v0.2a}{1993/11/14}
 %         {Stop adding the global option list inside class files.}
 % \changes{v0.2a}{1993/11/14}
-%         {Optimise `empty option' code.}
+%         {Optimize `empty option' code.}
 % \changes{v0.2b}{1993/11/15}
 %         {Star form added.}
 % \changes{v0.2c}{1993/11/17}
@@ -1351,7 +1460,7 @@
 % the internal command, |\@fileswithoptions|.
 % \begin{macro}{\documentclass}
 % \changes{v1.0q}{1995/06/19}
-%         {Dont redefine \cs{usepackage} in compat mode for /1634}
+%         {Don't redefine \cs{usepackage} in compat mode for /1634}
 % The main new-style class declaration.
 %    \begin{macrocode}
 \def\documentclass{%
@@ -1642,7 +1751,7 @@
       \ifx\@nnil##1\relax\else
 %    \end{macrocode}
 %  If |\ifx\@nnil##1\n at nil| is true then |#1| is (presumably) empty
-% (Older code used |\relax| which is slighly easier to get into |#1|
+% (Older code used |\relax| which is slightly easier to get into |#1|
 % by mistake, which would spoil this test.)
 %    \begin{macrocode}
         \ifx\@nnil##1\@nnil\else
@@ -1719,8 +1828,38 @@
 %<latexrelease>\IncludeInRelease{2020/10/01}%
 %<latexrelease>      {\@onefilewithoptions}{Hooks and unused options issue}%
 \def\@onefilewithoptions#1[#2][#3]#4{%
+%    \end{macrocode}
+%    We have to sanitise file names, so that something like
+% \begin{verbatim}
+%   \usepackage{some/local/path/array}
+%   \usepackage{array}
+% \end{verbatim}
+%    won't load \file{array.sty} twice.  It is remotely possible that
+%    those are two different files, but as a matter of principles, we
+%    will consider that the base file name uniquely identifies a
+%    package, regardless of where it lives.  This assumption already
+%    holds for file hooks, for example, which address the hook to a file
+%    by its base name only.
+%
+%    We'll use \cs{@expl@@@filehook at set@curr at file@@nNN} to parse the
+%    file name and return the \meta{path} and \meta{base+ext} in
+%    separate token lists.  Further ahead, most operations use
+%    \cs{@currname} which doesn't have a path attached to it;  only few
+%    actions prepend \cs{@currpath} to \cs{@currname} (namely loading,
+%    as we have to respect the given path).
+%
+%    A file substituiton isn't followed just yet because at this point
+%    we are parsing user input, so the file is still what the user
+%    asked for, and not the file actually loaded.
+%    \begin{macrocode}
+  \@expl@@@filehook at set@curr at file@@nNN{#1.#4}\reserved at a\reserved at b
+  \edef\reserved at c{\def\noexpand\reserved at c####1%
+    \detokenize\expandafter{\expanded{.#4}}%
+    \noexpand\@nil{\def\noexpand\reserved at a{####1}}}\reserved at c
+  \expandafter\reserved at c\reserved at a\@nil
   \@pushfilename
-  \xdef\@currname{#1}%
+  \xdef\@currname{\string at makeletter\reserved at a}%
+  \xdef\@currpath{\ifx\reserved at b\@empty\else\reserved at b/\fi}%
   \global\let\@currext#4%
 %    \end{macrocode}
 %    The command \cs{ver@\meta{file}.\meta{ext}} is used to signal that
@@ -1765,9 +1904,11 @@
 %    \end{macrocode}
 %    First we take the \meta{name} and \meta{ext} given in the argument
 %    and check if the file exists, and issue an error otherwise asking
-%    for a correction with \cs{@missingfileerror}.
+%    for a correction with \cs{@missingfileerror}.  For checking if the
+%    file exists we use \cs{@currpath} (usually empty) before
+%    \cs{@currname}.
 %    \begin{macrocode}
-     \IfFileExists{\@currname.\@currext}{}%
+     \IfFileExists{\@currpath\@currname.\@currext}{}%
        {\@missing at onefilewithoptions{#2}}%
 %    \end{macrocode}
 %    If \cs{@currname} is empty (the user replied to the ``Enter file
@@ -1784,11 +1925,12 @@
 %    do the bookkeeping with \cs{@filehook at file@push}
 %    then call \cs{set at curr@file} to set \cs{@curr at file} (and do any
 %    required substitution), then actually load the class/package with
-%    \cs{load at onefile@withoptions}.
+%    \cs{load at onefile@withoptions}.  \cs{set at curr@file} also needs the
+%    file path.
 %    \begin{macrocode}
        \@disable at packageload@do{\@currname.\@currext}%
          {\@expl@@@filehook at file@push@@
-          \set at curr@file{\@currname.\@currext}%
+          \set at curr@file{\@currpath\@currname.\@currext}%
           \@filehook at set@CurrentFile
 %    \end{macrocode}
 %    \changes{v1.3q}{2020/09/06}
@@ -1812,10 +1954,15 @@
           \expandafter\@swaptwoargs\expandafter
             {\expandafter{\@currpkg at reqd}}%
             {% <
+%    \end{macrocode}
+%    \cs{@currpkg at reqd} doesn't take a path because it is used later to
+%    assign \cs[no-index]{opt at ...} and \cs[no-index]{ver at ...}.
+%    \begin{macrocode}
           \edef\@currpkg at reqd{\@currname.\@currext}%
           \ifx\CurrentFile\CurrentFileUsed
           \else
             \filename at parse\@curr at file
+            \edef\@currpath{\string at makeletter\filename at area}%
             \edef\@currname{\string at makeletter\filename at base}%
             \edef\@currext{\string at makeletter\filename at ext}%
           \fi
@@ -1864,11 +2011,13 @@
 % \end{macro}
 %
 % \begin{macro}{\@missing at onefilewithoptions}
-%    Now the action taken when a file is not found.
+%    Now the action taken when a file is not found.  Path must be
+%    included here as it eventually leads to a file lookup.
 %    \begin{macrocode}
 \def\@missing at onefilewithoptions#1{%
-  \@missingfileerror\@currname\@currext
-  \xdef\@currname{\@missingfile at area\@missingfile at base}%
+  \@missingfileerror{\@currpath\@currname}\@currext
+  \global\let\@currpath\@missingfile at area
+  \global\let\@currname\@missingfile at base
   \global\let\@currext\@missingfile at ext}
 %    \end{macrocode}
 % \end{macro}
@@ -1887,6 +2036,13 @@
 %    \begin{macrocode}
   \def\reserved at a{%
     \@pass at ptions\@currext{#1}{\@currname}%
+%    \end{macrocode}
+% \changes{v1.3u}{2020/11/20}
+%         {Copy option list to the requested package.}
+%    \begin{macrocode}
+    \expandafter\let
+      \csname opt@\@currpkg at reqd\expandafter\endcsname
+      \csname opt@\@currname.\@currext\endcsname
     \global\expandafter
     \let\csname ver@\@currname.\@currext\endcsname\@empty
 %    \end{macrocode}
@@ -1912,11 +2068,12 @@
     \fi
 %    \end{macrocode}
 %    Now actually load the file (at this point we are certain it exists,
-%    but use \cs{InputIfFileExists} so that file hooks are executed):
+%    but use \cs{InputIfFileExists} so that file hooks are executed).
+%    \cs{@currpath} is needed here too.
 %    \begin{macrocode}
-    \InputIfFileExists{\@currpkg at reqd}{}%
+    \InputIfFileExists{\@currpath\@currpkg at reqd}{}%
       {\@latex at error
-        {The \@cls at pkg\space\@currpkg at reqd\space failed to load.}\@ehd}%
+        {The \@cls at pkg\space\@currpkg at reqd\space failed to load}\@ehd}%
 %-----------------------------------------
 %    \end{macrocode}
 %    In older versions of the code |\@unprocessedoptions| would
@@ -1930,7 +2087,7 @@
 %    loaded.}
 %
 %    This has changed in 2020. We now use a separate macro per package
-%    to avoid interferences in case of nested packages.  The whole
+%    to avoid interference in case of nested packages.  The whole
 %    code for handling this issue (GitHub 22) was provided by Hironobu
 %    Yamashita, thanks for that.
 % \changes{v1.3k}{2020/04/07}{Use different method to ignore
@@ -2267,7 +2424,7 @@
 % \changes{v0.2r}{1993/12/19}{Different message when ignoring a file}
 % \changes{v0.3g}{1994/04/11}
 %         {Add star form,
-%          dont write \cs{endinput} at the end of the file.}
+%          don't write \cs{endinput} at the end of the file.}
 % \changes{v1.0c}{1994/05/11}
 %         {Add checks for form feed and tab}
 % \changes{v1.0m}{1995/04/21}
@@ -2819,7 +2976,7 @@
 %    YYYYMMDD (if there was one, otherwise the value of
 %    |\requestedLaTeXdate|) and |\pkgcls at targetlabel| will be
 %    empty. If there was a request for a named version then
-%    |\pkgcls at targetlabel| holds the verion name and
+%    |\pkgcls at targetlabel| holds the version name and
 %    |\pkgcls at targetdate| is set to \texttt{1}.
 %
 %    |\pkgcls at targetdate=0| is used to indicate that there was no
@@ -2906,7 +3063,7 @@
   \pkgcls at parse@date at arg{#3}%
 %    \end{macrocode}
 %    When determining the correct release to load we keep track of
-%    candiates in |\pkgcls at candidate| and initially we don't have any:
+%    candidates in |\pkgcls at candidate| and initially we don't have any:
 %    \begin{macrocode}
   \let\pkgcls at candidate\@empty
 %    \end{macrocode}
@@ -2946,7 +3103,7 @@
 %
 %   But if it starts with an equal sign followed by a date string or
 %   followed by a version name then this means that we should roll
-%   back to the state of the package at tht date or to the version
+%   back to the state of the package at that date or to the version
 %   with the requested name.
 %
 %   If there was no optional argument or the optional argument
@@ -3224,7 +3381,7 @@
 %
 %  \begin{macro}{\pkgcls at show@selection}
 %    This command records what selection was made. As that is needed
-%    in two places (and it is rather lengthly) it was placed in a
+%    in two places (and it is rather lengthy) it was placed in a
 %    separate command. The first argument is the name of the external
 %    file that is being loaded and is only needed for debugging.  The
 %    second argument is the date that corresponds to this file and it
@@ -3271,19 +3428,20 @@
 %    A similar error is given if global rollback date and min-date on
 %    a specific package conflict with each other, but that case is
 %    happens only once so it is inlined.
+% \changes{v1.3u}{2020/11/09}{Change help text because the package may have
+%    existed then --- there is just no rollback data (gh/423).}
 %    \begin{macrocode}
 \def\pkgcls at rollbackdate@error#1{%
   \@latex at error{Suspicious rollback date given}%
-     {The \@cls at pkg\space'\@currname'  claims that it
-      came into existence on #1 which\MessageBreak
+     {The \@cls at pkg\space'\@currname'  has no rollback data
+      before #1 which\MessageBreak
       is after your requested rollback date --- so
-      something is wrong here.\MessageBreak
+      something may be wrong here.\MessageBreak
       Continue and we use the earliest known release.}}
 %    \end{macrocode}
 %  \end{macro}
 %
 %
-%
 %  \begin{macro}{\DeclareCurrentRelease}
 %    This declares the date (and possible name) of the current version
 %    of a package or class.
@@ -3326,7 +3484,7 @@
                                   \pkgcls at releasedate
         \fi
 %    \end{macrocode}
-%    Otherwise the curent file is the right release, so we record that
+%    Otherwise the current file is the right release, so we record that
 %    in the transcript and then carry on.
 %    \begin{macrocode}
       \else

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltcntrl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltcntrl.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltcntrl.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -32,7 +32,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltcntrl.dtx}
-             [2014/04/21 v1.0h LaTeX Kernel (program control)]
+             [2020/12/04 v1.0h LaTeX Kernel (program control)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltcntrl.dtx}
@@ -241,7 +241,7 @@
 %
 % \begin{macro}{\@for}
 % \changes{v1.0d}{1995/04/24}
-%      {Dont expand second argument with \cs{edef}: /1317 (DPC)}
+%      {Don't expand second argument with \cs{edef}: /1317 (DPC)}
 %    \begin{macrocode}
 \long\def\@for#1:=#2\do#3{%
   \expandafter\def\expandafter\@fortmp\expandafter{#2}%

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltcounts.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltcounts.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltcounts.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltcounts.dtx}
-             [2018/04/22 v1.1l LaTeX Kernel (Counters)]
+             [2020/12/04 v1.1l LaTeX Kernel (Counters)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltcounts.dtx}
@@ -630,7 +630,7 @@
 %    always selects the correct branch in an |\ifmmode| switch with
 %    the usual disadvantage of ruining kerning. For the application we
 %    use it for here that shouldn't matter. The alternative would be
-%    to mimic |\IeC| from \textsf{inputenc} but then it wil have the
+%    to mimic |\IeC| from \textsf{inputenc} but then it will have the
 %    disadvantage of choosing the wrong branch if appearing at the
 %    beginning of an alignment cell. However, users of e\TeX\ will be
 %    pleasantly surprised to get the best of both worlds and no bad

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -32,7 +32,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltdefns.dtx}
-             [2020/09/25 v1.5n LaTeX Kernel (definition commands)]
+             [2020/11/25 v1.5o LaTeX Kernel (definition commands)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltdefns.dtx}
@@ -103,7 +103,7 @@
 %    \end{macrocode}
 %
 %
-% \subsection{Initex initialisations}
+% \subsection{Initex initializations}
 %
 % \task{???}{This section needs extension}
 %
@@ -385,8 +385,19 @@
 %  \begin{macro}{\@carcube}
 % |\@carcube T1 ... Tn\@nil| = |T1| |T2| |T3| , $n > 3$
 % \changes{v1.5k}{2020/08/19}{Made \cs{long} for \cs{NewCommandCopy}}
+% \changes{v1.5o}{2020/11/25}{Added missing latexrelease entry}
 %    \begin{macrocode}
+%</2ekernel>
+%<latexrelease>\IncludeInRelease{2020/10/01}{\@carcube}{Make \@carcube long}%
+%<*2ekernel|latexrelease>
 \long\def\@carcube#1#2#3#4\@nil{#1#2#3}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%
+%<latexrelease>\IncludeInRelease{0000/00/00}{\@carcube}{Undo: Make \@carcube long}%
+%<latexrelease>\def\@carcube#1#2#3#4\@nil{#1#2#3}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
 %    \end{macrocode}
 %  \end{macro}
 %
@@ -847,7 +858,7 @@
 %    |\CheckCommand| takes the same arguments as |\newcommand|. If
 %    the command already exists, with the same definition, then
 %    nothing happens, otherwise a warning is issued. Useful for
-%    checking the current state befor a macro package starts
+%    checking the current state before a macro package starts
 %    redefining things.  Currently two macros are considered to have
 %    the same definition if they are the same except for different
 %    default arguments.  That is, if the old definition was:
@@ -1206,7 +1217,7 @@
 %    top-level definition to have the right kind of structure, but
 %    this is somewhat problematical as we then have to distinguish
 %    between \cs{long} macros and others and also take into account
-%    that sometimes the top-level is deliberately dones manually (like
+%    that sometimes the top-level is deliberately done manually (like
 %    with \cs{begin}).
 %
 %    The macro firstly checks if the control sequence in question exists
@@ -1352,12 +1363,12 @@
 % \end{macro}
 %
 %  \begin{macro}{\kernel at make@fragile}
-%    The opposite of |\MakeRobust| execpt that it doesn't do many
+%    The opposite of |\MakeRobust| except that it doesn't do many
 %    checks as it is internal to the kernel. Why does one want such a
 %    thing?
 %    Only for compatibility reasons if \texttt{latexrelease} requests
 %    a rollback of the kernel. For this reason we pretend that this
-%    command existed in all earler versions of \LaTeX{} i.e., we are
+%    command existed in all earlier versions of \LaTeX{} i.e., we are
 %    not rolling it back since we need it precisely then. But we have
 %    to get it into the \texttt{latexrelease} file so that a roll
 %    forward is possible too.
@@ -1441,7 +1452,7 @@
 %   robust commands.  This code will then be used to test if a command is
 %   robust, considered the different types of robustness, and then either copy
 %   that definition, if \cs{DeclareCommandCopy} (or similar) is used, or show
-%   the definition of the command, if \cs{ShowCommmand} is used.
+%   the definition of the command, if \cs{ShowCommand} is used.
 %
 % \begin{macro}{\robust at command@act}
 % \changes{v1.5k}{2020/08/19}{Made \cs{robust at command@act}
@@ -1700,7 +1711,7 @@
 % \begin{macro}{\@showcommandlisthook}
 %   The initial definition of \cs{@showcommandlisthook} contains the same tests
 %   as used for copying, but \cs{@show at ...} commands instead of \cs{@copy at ...}.
-%   Same as before, it is initialised to cope with \cs{DeclareRobustCommand} and
+%   Same as before, it is initialized to cope with \cs{DeclareRobustCommand} and
 %   \cs{newcommand} with optional arguments.
 %    \begin{macrocode}
 \def\@showcommandlisthook{%
@@ -2272,7 +2283,7 @@
 %
 % The primitive |\-| command adds a discretionary hyphen using the
 % current font's |\hyphenchar|. Monospace fonts are usually declared
-% with |\hyphenchar| set to $-1$ to suppress hyhenation.
+% with |\hyphenchar| set to $-1$ to suppress hyphenation.
 %
 % \LaTeX, from \LaTeX2.09 in 1986 defined |\-| by
 % \begin{verbatim}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltdirchk.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltdirchk.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltdirchk.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -37,7 +37,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltdirchk.dtx}
-             [2020/08/21 v1.3a LaTeX Kernel (System Dependent Parts)]
+             [2020/12/05 v1.3a LaTeX Kernel (System Dependent Parts)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltdirchk.dtx}
@@ -63,7 +63,7 @@
 %         {Add unstripped module,
 %          so that dircheck.dtx may be used with initex}
 % \changes{v1.0a}{1994/03/08}
-%         {Reorganise driver module into `new style'}
+%         {Reorganize driver module into `new style'}
 % \changes{v1.0b}{1994/03/12}
 %         {Change name from dircheck.dtx}
 % \changes{v1.0b}{1994/03/12}
@@ -81,13 +81,13 @@
 % \changes{v1.0w}{1998/08/17}{(RmS) Documentation improvements.}
 %
 %
-% \section{\LaTeX\ System Dependent Initialisations}
+% \section{\LaTeX\ System Dependent Initializations}
 %
 % \changes{v0.2g}{1994/01/21}
-%         {Improve documentation, reorganise docstrip module}
+%         {Improve documentation, reorganize docstrip module}
 %
 % This file implements the semi-automatic determination of various
-% system dependent parts of the initialisation. The actual definitions
+% system dependent parts of the initialization. The actual definitions
 % may be placed in a file |texsys.cfg|. Thus for operating systems for
 % which the tests here do not result in acceptable settings, a `hand
 % written' |texsys.cfg| may be produced.
@@ -153,7 +153,7 @@
 %
 % \DescribeMacro{\@TeXversion}
 % \changes{v1.0f}{1994/05/23}{Document \cs{@TeXversion}}
-% |\@TeXversion| is now set automatically by the initialisation tests
+% |\@TeXversion| is now set automatically by the initialization tests
 % in this file. You should not need to set it in |texsys.cfg|, however
 % the following documentation is left for information. \LaTeX\ does
 % not set this variable exactly, the automatic tests set it to:\\
@@ -206,7 +206,7 @@
 %
 % \StopEventually{}
 %
-% \section{Initialisation}
+% \section{Initialization}
 % As this file is read at a very early stage, some definitions that
 % are normally considered to be part of the format must be made here.
 %
@@ -481,7 +481,7 @@
 %
 % Normally one would not need to define this macro in |texsys.cfg| as
 % the automatic tests can supply parsers that work with UNIX and VMS
-% syntax, as well as a basic parser that willcover many other cases.
+% syntax, as well as a basic parser that will cover many other cases.
 % However some operating systems may need a `hand produced' parser
 % in which case it should be defined in this file.
 %
@@ -794,7 +794,7 @@
 % to supply the correct information to the prompts. Now the interaction
 % is omitted. After the format is made the installer can attempt to run
 % the test document |ltxcheck.tex| through \LaTeXe. This will check,
-% amongst other things, whether |texsys.cfg| will need to be edited and
+% among other things, whether |texsys.cfg| will need to be edited and
 % the format remade.
 %
 % \begin{macro}{\input at path}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/lterror.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/lterror.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/lterror.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltexpl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltexpl.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltexpl.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2019-2020
+% Copyright (C) 2019-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltexpl.dtx}
-             [2020/09/06 v1.2f LaTeX Kernel (expl3-dependent code)]
+             [2020/12/18 v1.2h LaTeX Kernel (expl3-dependent code)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltexpl.dtx}
@@ -72,16 +72,45 @@
 %         {Define a local version of some \LaTeXe{} basic macros to support
 %          package loading}
 %
+% \begin{macro}{\@kernel at after@enddocument,
+%                \@kernel at after@enddocument at afterlastpage}
+%   These two kernel hooks are used by the shipout code.  They are
+%   defined earlier here because the \pkg{lthooks} code adds material
+%   to them.
+% \changes{v1.2h}{2020/12/18}
+%         {Define kernel \cs{enddocument} hooks early}
+%    \begin{macrocode}
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease>  {kernel at enddocument hooks}{Define kernel enddocument Hooks}%
+\let\@kernel at after@enddocument\@empty
+\let\@kernel at after@enddocument at afterlastpage\@empty
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>  {kernel at enddocument hooks}{Define kernel enddocument Hooks}%
+%<latexrelease>\let\@kernel at after@enddocument\@undefined
+%<latexrelease>\let\@kernel at after@enddocument at afterlastpage\@undefined
+%<latexrelease>\EndIncludeInRelease
+%</2ekernel|latexrelease>
+%    \end{macrocode}
+% \end{macro}
+%
 % First define some blank commands, so that in case something goes wrong while
 % loading \textsf{expl3}, we won't get strange \texttt{Undefined control
 % sequence} errors.
 %    \begin{macrocode}
-%<*2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease>            {\@expl at sys@load at backend@@}{Roll forward support}%
 \def\@expl at sys@load at backend@@{}
 \def\@expl at push@filename@@{}
 \def\@expl at push@filename at aux@@{}
 \def\@expl at pop@filename@@{}
-%</2ekernel>
+%<latexrelease>\EndIncludeInRelease
+%</2ekernel|latexrelease>
 %    \end{macrocode}
 %
 % \changes{v1.2d}{2020/07/08}
@@ -183,9 +212,20 @@
         \errmessage{LaTeX requires expl3}%
         \batchmode \read -1 to \reserved at a
 %</2ekernel>
+%    \end{macrocode}
+%    We do not support a roll forward across 2019. You need to start
+%    with 2019 if you want to get to 2020 or beyond. 
+% \changes{v1.2g}{2020/11/24}{Support for roll forward (gh/434)}
+%    \begin{macrocode}
 %<*latexrelease>
-        \@latex at error{LaTeX requires expl3}\@ehd
-        \@gobble
+        \@latex at warning@no at line
+          {You need a format that already contains a recent\MessageBreak
+           expl3 as part of the kernel, e.g. at least a kernel\MessageBreak
+           from 2019 to roll forward to that date!\MessageBreak
+           --- I'm giving up!\MessageBreak\MessageBreak
+           Note that manually loading the expl3 package\MessageBreak
+           from your distribution is not enough}%
+        \@@end  % die
 %</latexrelease>
       }%
       {%
@@ -222,9 +262,39 @@
 %<latexrelease>\EndIncludeInRelease
 %    \end{macrocode}
 %
+%
+%    Starting with 2020-10 the kernel contains most of the
+%    \texttt{xparse} interfaces loaded above. These interfaces are
+%    later used to define various user command. However, if somebody
+%    with an earlier installation tries to roll forward (using a
+%    \texttt{latexrelease} package from a newer release) this will not
+%    work as the earlier kernel doesn't contain commands such as
+%    \cs{NewDocumentCommand}.
+%
+%    We therefore add code into \texttt{latexrelease.sty} to load the
+%    \texttt{xparse} package of the current installation instead. this
+%    may not work if the installation is really old, but roll forward
+%    can't do miracles.
+%
+%    If the kernel is 2020-10 or later \cs{NewDocumentCommand} is
+%    already known (whether or not you roll forward or back) so
+%    nothing happens, but if you start from am earlier kernel the
+%    \texttt{xparse} package gets loaded by \texttt{latexrelease}.
+% \changes{v1.2g}{2020/11/24}{Load xparse in latexrelease if needed (gh/434)}
+%    \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease>                 {\NewDocumentCommand}{Emergency loading xparse}%
+%<latexrelease>
+%<latexrelease>\ifdefined\NewDocumentCommand \else
+%<latexrelease>  \RequirePackage{xparse}
+%<latexrelease>\fi
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
+%
 %    \subsection{Using expl3 code}
 %
-%    In order to ease the implemantation of some new features in
+%    In order to ease the implementation of some new features in
 %    \LaTeXe\ we may (temporarily) use some coding based on the
 %    \pkg{expl3}-code.
 %    Such macros will eventually vanish and may be changed
@@ -242,9 +312,6 @@
 %    if that \pkg{expl3} command is needed in places that are others
 %    coded in \LaTeXe{} conventions.
 %
-%    \begin{macrocode}
-\ExplSyntaxOn
-%    \end{macrocode}
 %
 %    In this file, each release of LaTeX adds an \cs{IncludeInRelease}
 %    block, in which the macros copied for that release were defined.
@@ -259,10 +326,18 @@
 %    redefinitions.
 %
 %    \begin{macrocode}
-%<latexrelease>\IncludeInRelease{2020/10/01}{expl3~2020-10-01}%
-%<latexrelease>        {expl3~macros~added~for~the~2020-10-01~release}%
+%<latexrelease>\IncludeInRelease{2020/10/01}{\@expl at cs@to at str@@N}%
+%<latexrelease>        {expl3 macros added for the 2020-10-01 release}%
 %    \end{macrocode}
 %
+%    The expl3 activation needs to be inside the release guards as
+%    otherwise rolling forward is broken in old kernels that do not
+%    have expl3 loaded.
+% \changes{v1.2g}{2020/11/24}{Support for roll forward (gh/434)}
+%    \begin{macrocode}
+\ExplSyntaxOn
+%    \end{macrocode}
+%
 % \changes{v1.2e}{2020/08/19}
 %         {Add \cs{@expl at cs@to at str@@N} and \cs{@expl at str@if at eq@@nnTF}
 %          for \cs{NewCommandCopy} (gh/239)}
@@ -290,21 +365,27 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
+\ExplSyntaxOff
+%    \end{macrocode}
+%
+%
+%    Here we can't assume that expl3 is available. It will be if we
+%    roll back but if this code is executed rolling forward it needs
+%    to be pure 2e.
+% \changes{v1.2g}{2020/11/24}{Support for roll forward (gh/434)}
+%    \begin{macrocode}
 %<latexrelease>\EndIncludeInRelease
-%<latexrelease>\IncludeInRelease{0000/00/00}{expl3~2020-10-01}%
-%<latexrelease>        {expl3~macros~added~for~the~2020-10-01~release}%
-%<latexrelease>\cs_undefine:N \@expl at cs@to at str@@N
-%<latexrelease>\cs_undefine:N \@expl at str@if at eq@@nnTF
-%<latexrelease>\cs_undefine:N \@expl at cs@prefix at spec@@N
-%<latexrelease>\cs_undefine:N \@expl at cs@argument at spec@@N
-%<latexrelease>\cs_undefine:N \@expl at cs@replacement at spec@@N
-%<latexrelease>\cs_undefine:N \@expl at str@map at function@@NN
+%<latexrelease>\IncludeInRelease{0000/00/00}{\@expl at cs@to at str@@N}%
+%<latexrelease>        {expl3 macros added for the 2020-10-01 release}%
+%<latexrelease>\let \@expl at cs@to at str@@N \@undefined
+%<latexrelease>\let \@expl at str@if at eq@@nnTF \@undefined
+%<latexrelease>\let \@expl at cs@prefix at spec@@N \@undefined
+%<latexrelease>\let \@expl at cs@argument at spec@@N \@undefined
+%<latexrelease>\let \@expl at cs@replacement at spec@@N \@undefined
+%<latexrelease>\let \@expl at str@map at function@@NN \@undefined
 %<latexrelease>\EndIncludeInRelease
 %</2ekernel|latexrelease>
 %    \end{macrocode}
 %
-%    \begin{macrocode}
-\ExplSyntaxOff
-%    \end{macrocode}
 %
 % \Finale

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltfilehook.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltfilehook.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltfilehook.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %%
-%% File: ltfilehook.dtx (C) Copyright 2020 Frank Mittelbach,
+%% File: ltfilehook.dtx (C) Copyright 2020,2021 Frank Mittelbach,
 %%                                         Phelype Oleinik & LaTeX Team
 %
 % This file is part of the LaTeX base system.
@@ -31,8 +31,8 @@
 %%% From File: ltfilehook.dtx
 %
 %    \begin{macrocode}
-\providecommand\ltfilehookversion{v1.0c}
-\providecommand\ltfilehookdate{2020/10/18}
+\providecommand\ltfilehookversion{v1.0e}
+\providecommand\ltfilehookdate{2021/01/07}
 %    \end{macrocode}
 %
 %<*driver>
@@ -75,7 +75,7 @@
 %    \ltfilehookversion\ dated \ltfilehookdate, \copyright\ \LaTeX\
 %    Project.}}
 %
-% \author{Frank Mittelbach}
+% \author{Frank Mittelbach, Phelype Oleinik, \LaTeX{} Project Team}
 %
 % \maketitle
 %
@@ -339,9 +339,12 @@
 %
 % \subsection{High-level interfaces for \LaTeX{}}
 %
-%    We do not provide any high-level \LaTeX{} commands (like
-%    \pkg{filehook} or \pkg{scrlfile} do) but think that for package
-%    writers the commands from for hook management are sufficient.
+%    We do not provide any additional wrappers around the hooks (like
+%    \pkg{filehook} or \pkg{scrlfile} do) because we believe that for
+%    package writers the high-level commands from the hook management,
+%    e.g., \cs{AddToHook}, etc.\
+%    are sufficient and in fact easier to work with, given that the hooks
+%    have consistent naming conventions.
 %
 %
 %
@@ -371,7 +374,7 @@
 %      \em
 %      Please do not misuse this functionality and replace a file with
 %      another unless if really needed and only if the new version is
-%      implementating the same functionality as the original one!
+%      implementing the same functionality as the original one!
 %    \end{quote}
 %  \end{function}
 %
@@ -514,11 +517,10 @@
 % \begin{macro}{
 %     \@@_file_parse_full_name:nN,
 %     \@@_full_name:nn,
-%     \@@_set_curr_file_assign:nnnNN
 %   }
 %   A utility macro to trigger \pkg{expl3}'s file-parsing and lookup,
 %   and return a normalized representation of the file name.  If the
-%   queried file doesn't exist, no normalisation takes place.
+%   queried file doesn't exist, no normalization takes place.
 %   The output of \cs{@@_file_parse_full_name:nN} is passed on to the
 %   |#2|---a 3-argument macro that takes the \meta{path}, \meta{base},
 %   and \meta{ext} parts of the file name.
@@ -615,6 +617,62 @@
 %    \begin{macrocode}
 %</2ekernel|latexrelease>
 %<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
+%
+%    When rolling forward the following expl3 functions may not be defined.
+%    If we roll back the code does nothing.
+% \changes{v1.0d}{2020/11/24}{Support for roll forward (gh/434)}
+%    \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease>                 {\file_parse_full_name_apply:nN}{Roll forward help}%
+%<latexrelease>
+%<latexrelease>\ExplSyntaxOn
+%<latexrelease>\cs_if_exist:NF\file_parse_full_name_apply:nN
+%<latexrelease>{
+%<latexrelease>\cs_new:Npn \file_parse_full_name_apply:nN #1
+%<latexrelease>  {
+%<latexrelease>    \exp_args:Ne \__file_parse_full_name_auxi:nN
+%<latexrelease>      { \__kernel_file_name_sanitize:n {#1} }
+%<latexrelease>  }
+%<latexrelease>\cs_new:Npn \__file_parse_full_name_auxi:nN #1
+%<latexrelease>  {
+%<latexrelease>    \__file_parse_full_name_area:nw { } #1
+%<latexrelease>      / \s__file_stop
+%<latexrelease>  }
+%<latexrelease>\cs_new:Npn \__file_parse_full_name_area:nw #1 #2 / #3 \s__file_stop
+%<latexrelease>  {
+%<latexrelease>    \tl_if_empty:nTF {#3}
+%<latexrelease>      { \__file_parse_full_name_base:nw { } #2 . \s__file_stop {#1} }
+%<latexrelease>      { \__file_parse_full_name_area:nw { #1 / #2 } #3 \s__file_stop }
+%<latexrelease>  }
+%<latexrelease>\cs_new:Npn \__file_parse_full_name_base:nw #1 #2 . #3 \s__file_stop
+%<latexrelease>  {
+%<latexrelease>    \tl_if_empty:nTF {#3}
+%<latexrelease>      {
+%<latexrelease>        \tl_if_empty:nTF {#1}
+%<latexrelease>          {
+%<latexrelease>            \tl_if_empty:nTF {#2}
+%<latexrelease>              { \__file_parse_full_name_tidy:nnnN { } { } }
+%<latexrelease>              { \__file_parse_full_name_tidy:nnnN { .#2 } { } }
+%<latexrelease>          }
+%<latexrelease>          { \__file_parse_full_name_tidy:nnnN {#1} { .#2 } }
+%<latexrelease>      }
+%<latexrelease>      { \__file_parse_full_name_base:nw { #1 . #2 } #3 \s__file_stop }
+%<latexrelease>  }
+%<latexrelease>\cs_new:Npn \__file_parse_full_name_tidy:nnnN #1 #2 #3 #4
+%<latexrelease>  {
+%<latexrelease>    \exp_args:Nee #4
+%<latexrelease>      {
+%<latexrelease>        \str_if_eq:nnF {#3} { / } { \use_none:n }
+%<latexrelease>        #3 \prg_do_nothing:
+%<latexrelease>      }
+%<latexrelease>      { \use_none:n #1 \prg_do_nothing: }
+%<latexrelease>      {#2}
+%<latexrelease>  }
+%<latexrelease>}  
+%<latexrelease>\ExplSyntaxOff
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
 %<*2ekernel>
 %    \end{macrocode}
 %
@@ -643,6 +701,8 @@
 %  kernel we  do this only now and not in \texttt{ltfiles}.
 %
 % \begin{macro}{\InputIfFileExists}
+% \begin{macro}{\@input at file@exists at with@hooks}
+% \begin{macro}{\unqu at tefilef@und}
 %    \cs{InputIfFileExists} loads any file if it is available so we
 %    have to add the hooks \texttt{file/before} and
 %    \texttt{file/after} in the right places. If the file doesn't
@@ -653,19 +713,38 @@
 %<latexrelease>          {\InputIfFileExists}{Hook management (files)}%
 %<*2ekernel|latexrelease>
 %    \end{macrocode}
-%    
+%
 %    \begin{macrocode}
 \let\InputIfFileExists\@undefined
 \DeclareRobustCommand \InputIfFileExists[2]{%
   \IfFileExists{#1}%
     {%
-     \@expl@@@filehook at file@push@@
-     \@filehook at set@CurrentFile
+      \@expl@@@filehook at file@push@@
+      \@filehook at set@CurrentFile
 %    \end{macrocode}
+%    We pre-expand \cs{@filef at und} so that in case another file is
+%    loaded in the true branch of \cs{InputIfFileExists}, these don't
+%    change their value meanwhile. This isn't a worry with
+%    \cs[no-index]{CurrentFile...} because they are kept in a stack.
+%
+% \changes{v1.0d}{2020/11/20}
+%   {Move loading to \cs{@input at file@exists at with@hooks} and expand
+%    \cs{@filef at und} to avoid getting the wrong file name in the case of
+%    a substitution.}
+%    \begin{macrocode}
+      \expandafter\@swaptwoargs\expandafter
+        {\expandafter\@input at file@exists at with@hooks
+          \expandafter{\@filef at und}}%
+        {#2}%
+      \@expl@@@filehook at file@pop@@
+    }%
+}
+\def\@input at file@exists at with@hooks#1{%
+%    \end{macrocode}
 %    If the file exists then \cs{CurrentFile} holds its name. But we
 %    can't rely on that still being true after the file has been
 %    processed. Thus for using the name in the file hooks we need to
-%    preserve the name and then restored it for the
+%    preserve the name and then restore it for the
 %    \texttt{file/after/...} hook.
 %
 %    The hook always refers to the file requested by the user.  The hook
@@ -682,34 +761,54 @@
 %    the file name and extension are returned so that file hooks can
 %    refer to the file by their name only.  The path to the file is
 %    returned in \cs{CurrentFilePath}.
+%    \changes{v1.0e}{2021/01/07}{Restore \cs[no-index]{CurrentFile(Path)(Used)}
+%      after the input (gh/464)}
 %    \begin{macrocode}
-      \edef\reserved at a{\@filef at und
-        \@expl@@@filehook at file@pop at assign@@nnnn
-          {\CurrentFilePathUsed}%
-          {\CurrentFileUsed}%
-          {\CurrentFilePath}%
-          {\CurrentFile}}%
-      \expandafter\@swaptwoargs\expandafter
-        {\reserved at a}%
-        {%
-          #2%
-          \@addtofilelist{#1}%
-          \UseHook{file/before}%
+  \edef\reserved at a{%
+    \@expl@@@filehook at file@pop at assign@@nnnn
+      {\CurrentFilePathUsed}%
+      {\CurrentFileUsed}%
+      {\CurrentFilePath}%
+      {\CurrentFile}}%
+  \expandafter\@swaptwoargs\expandafter{\reserved at a}%
 %    \end{macrocode}
+%
+% Before adding to the file list we need to make all (letter) characters
+% catcode~11, because several packages use constructions like
+% \begin{verbatim}
+% \filename at parse{<filename>}
+% \ifx\filename at ext\@clsextension
+%   ...
+% \fi
+% \end{verbatim}
+% and that doesn't work if \cs{filename at ext} is \cs{detokenize}d.
+% Making \cs{@clsextension} a string doesn't help much because some
+% packages define their own \cs[no-index]{<prefix>@someextension} with
+% normal catcodes.  This is not entirely correct because packages loaded
+% (somehow) with catcode~12 alphabetic tokens (say, as the result of
+% a \cs{string} or \cs{detokenize} command, or from a \TeX{} string like
+% \cs{jobname}) will have these character tokens incorrectly turned into
+% letter tokens.  This however is rare, so we'll go for the all-letters
+% approach (grepping the packages in \TeX{} Live didn't bring up any
+% obvious candidate for breaking with this catcode change).
+%    \begin{macrocode}
+    {\edef\reserved at a{\unqu at tefilef@und#1\@nil}%
+     \@addtofilelist{\string at makeletter\reserved at a}%
+     \UseHook{file/before}%
+%    \end{macrocode}
 %    The current file name is available in \cs{CurrentFile} so we use
 %    that in the specific hook.
 %    \begin{macrocode}
-          \UseHook{file/before/\CurrentFile}%
-          \@@input
-        }%
+     \UseHook{file/before/\CurrentFile}%
+     \@@input #1% <- trailing space comes from \@filef at und
+    }%
 %    \end{macrocode}
-%    And it is restored here so we can use it once more.
+%    And here, \cs{CurrentFile} is restored
+%    (by \cs{@expl@@@filehook at file@pop at assign@@nnnn}) so we can use it once more.
 %    \begin{macrocode}
-      \UseHook{file/after/\CurrentFile}%
-      \UseHook{file/after}%
-      \@expl@@@filehook at file@pop@@
-    }%
-}
+  \UseHook{file/after/\CurrentFile}%
+  \UseHook{file/after}}
+\def\unqu at tefilef@und"#1" \@nil{#1}
 %<latexrelease>\EndIncludeInRelease
 %</2ekernel|latexrelease>
 %    \end{macrocode}
@@ -737,6 +836,8 @@
 %<latexrelease>    {%
 %<latexrelease>  \expandafter\@swaptwoargs\expandafter
 %<latexrelease>      {\@filef at und}{#2\@addtofilelist{#1}\@@input}}}
+%<latexrelease>\let\@input at file@exists at with@hooks\@undefined
+%<latexrelease>\let\unqu at tefilef@und\@undefined
 %<latexrelease>\EndIncludeInRelease
 %    \end{macrocode}
 %
@@ -746,10 +847,14 @@
 %<latexrelease>\long\def \InputIfFileExists#1#2{%
 %<latexrelease>  \IfFileExists{#1}%
 %<latexrelease>    {#2\@addtofilelist{#1}\@@input \@filef at und}}
+%<latexrelease>\let\@input at file@exists at with@hooks\@undefined
+%<latexrelease>\let\unqu at tefilef@und\@undefined
 %<latexrelease>\EndIncludeInRelease
 %<*2ekernel>
 %    \end{macrocode}
 %  \end{macro}
+%  \end{macro}
+%  \end{macro}
 %
 %
 %
@@ -772,8 +877,8 @@
 %
 %
 % \begin{macro}{\@@_subst_add:nn,\@@_subst_remove:n,
-%               \@@_subst_file_normalize:n,\@@_subst_empty_name_chk:NN}
-%   \cs{@@_substitution_lthooadd:nn} declares a file substitution by
+%               \@@_subst_file_normalize:Nn,\@@_subst_empty_name_chk:NN}
+%   \cs{@@_subst_add:nn} declares a file substitution by
 %   doing a (global) definition of the form
 %   |\def|\cs{@file-subst@\meta{file}}|{|\meta{replacement}|}|.
 %   The file names are properly sanitised, and normalized with the same
@@ -787,8 +892,12 @@
     \group_begin:
       \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } }
       \int_set:Nn \tex_escapechar:D { -1 }
-      \cs_gset:cpx { @file-subst@ \@@_subst_file_normalize:n {#1} }
-        { \@@_subst_file_normalize:n {#2} }
+      \cs_gset:cpx
+        {
+          @file-subst@
+          \@@_subst_file_normalize:Nn \use_ii_iii:nnn {#1}
+        }
+        { \@@_subst_file_normalize:Nn \@@_file_name_compose:nnn {#2} }
     \group_end:
   }
 \cs_new_protected:Npn \@@_subst_remove:n #1
@@ -796,14 +905,18 @@
     \group_begin:
       \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } }
       \int_set:Nn \tex_escapechar:D { -1 }
-      \cs_undefine:c { @file-subst@ \@@_subst_file_normalize:n {#1} }
+      \cs_undefine:c
+        {
+          @file-subst@
+          \@@_subst_file_normalize:Nn \use_ii_iii:nnn {#1}
+        }
     \group_end:
   }
-\cs_new:Npn \@@_subst_file_normalize:n #1
+\cs_new:Npn \@@_subst_file_normalize:Nn #1 #2
   {
     \exp_after:wN \@@_subst_empty_name_chk:NN
       \cs:w \exp_after:wN \cs_end:
-        \cs:w \@@_file_parse_full_name:nN {#1} \use_ii_iii:nnn \cs_end:
+        \cs:w \@@_file_parse_full_name:nN {#2} #1 \cs_end:
   }
 \cs_new:Npn \@@_subst_empty_name_chk:NN #1 #2
   { \if_meaning:w #1 #2 .tex \else: \token_to_str:N #2 \fi: }
@@ -847,12 +960,18 @@
 %<latexrelease>\EndIncludeInRelease
 %    \end{macrocode}
 %
+%    We are not fully rolling back the file substitutions in case a
+%    rollback encounters a package that contains them, but is itself
+%    not setup for rollback. So we just bypass them and hope for the
+%    best.
+% \changes{v1.0d}{2020/12/04}{Don't drop file substitution commands on
+%    rollback}
 %    \begin{macrocode}
 %<latexrelease>\IncludeInRelease{0000/00/00}%
 %<latexrelease>          {\declare at file@substitution}{File substitution}%
 %<latexrelease>
-%<latexrelease>\let \declare at file@substitution   \@undefined
-%<latexrelease>\let \undeclare at file@substitution \@undefined
+%<latexrelease>\let \declare at file@substitution   \@gobbletwo
+%<latexrelease>\let \undeclare at file@substitution \@gobble
 %<latexrelease>
 %<latexrelease>\EndIncludeInRelease
 %<*2ekernel>
@@ -878,7 +997,7 @@
 %   A file name is built using
 %   \cs{expandafter}\cs{string}\cs{csname}\meta{filename}\cs{endcsname}
 %   to avoid expanding utf8 active characters.  The \cs{csname} expands
-%   the normalisation machinery and the routine to resolve a file
+%   the normalization machinery and the routine to resolve a file
 %   substitution, returning a control sequence with the same name as the
 %   file.
 %
@@ -908,7 +1027,7 @@
 %   actual loaded file.  \cs{@curr at file} is resolved first, to check if
 %   a substitution happens.  If it doesn't,
 %   \cs{@expl@@@filehook at if@file at replaced@@TF} short-cuts and just copies
-%   \cs{@curr at file}, otherwise the full normalisation procedure is
+%   \cs{@curr at file}, otherwise the full normalization procedure is
 %   executed.
 %
 %   At this stage the file name is parsed and normalized, but if the
@@ -929,6 +1048,7 @@
        \if at tempswa \@expl@@@filehook at drop@extension@@N\@curr at file@reqd \fi}%
       {\if at tempswa \@expl@@@filehook at drop@extension@@N\@curr at file \fi
        \global\let\@curr at file@reqd\@curr at file}%
+    \@expl@@@filehook at clear@replacement at flag@@
   \endgroup}
 %</2ekernel|latexrelease>
 %<latexrelease>\EndIncludeInRelease
@@ -1059,7 +1179,7 @@
 % \begin{macro}{\@@_resolve_file_subst:w}
 % \begin{macro}{\@@_normalize_file_name:w}
 % \begin{macro}{\@@_file_name_compose:nnn}
-%   Start by sanitising the file with \cs{@@_file_parse_full_name:nN}
+%   Start by sanitizing the file with \cs{@@_file_parse_full_name:nN}
 %   then do \cs{@@_file_subst_begin:nnn}\Arg{path}\Arg{name}\Arg{ext}.
 %    \begin{macrocode}
 %</2ekernel>
@@ -1079,18 +1199,25 @@
 %
 % \begin{macro}{flag @@_file_replaced}
 % \begin{macro}{\@@_if_file_replaced:TF}
+% \begin{macro}{\@@_clear_replacement_flag:}
 %   Since the file replacement is done expandably in a \cs{csname}, use
 %   a flag to remember if a substitution happened.  We use this in
 %   \cs{set at curr@file} to short-circuit some of it in case no
 %   substitution happened (by far the most common case, so it's worth
-%   optimising).
+%   optimizing).  The flag raised during the file substitution algorithm
+%   must be explicitly cleared after the \cs{@@_if_file_replaced:TF}
+%   conditional is no longer needed, otherwise further uses of
+%   \cs{@@_if_file_replaced:TF} will wrongly return true.
 %    \begin{macrocode}
 \flag_new:n { @@_file_replaced }
 \cs_new:Npn \@@_if_file_replaced:TF #1 #2
-   { \flag_if_raised:nTF { @@_file_replaced } {#1} {#2} }
+  { \flag_if_raised:nTF { @@_file_replaced } {#1} {#2} }
+\cs_new_protected:Npn \@@_clear_replacement_flag:
+  { \flag_clear:n { @@_file_replaced } }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
+% \end{macro}
 %
 % \begin{macro}{\@@_file_subst_begin:nnn}
 %   First off, start by checking if the current file ($\meta{name} +
@@ -1140,8 +1267,8 @@
 %   the macro below, \cs{@@_file_subst_loop:cc} is called with
 %   \cs[no-index]{@file-subst@\meta{file}} and
 %   \cs[no-index]{@file-subst@\cs[no-index]{@file-subst@\meta{file}}};
-%   that is, the substitution of \meta{file} and the substution of that
-%   substution:  the Tortoise walks one step while the Hare walks two.
+%   that is, the substitution of \meta{file} and the substitution of that
+%   substitution: the Tortoise walks one step while the Hare walks two.
 %
 %   Within \cs{@@_file_subst_loop:NN} the two substitutions are
 %   compared, and if they lead to the same file it means that there is
@@ -1343,8 +1470,13 @@
 \cs_new_eq:NN \@expl@@@filehook at if@file at replaced@@TF
               \__filehook_if_file_replaced:TF
 %    \end{macrocode}
-%    
+%
 %    \begin{macrocode}
+\cs_new_eq:NN \@expl@@@filehook at clear@replacement at flag@@
+              \__filehook_clear_replacement_flag:
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 \cs_new_eq:NN \@expl@@@filehook at drop@extension@@N
               \__filehook_drop_extension:N
 %    \end{macrocode}
@@ -1368,10 +1500,22 @@
 %    \begin{macrocode}
 \ExplSyntaxOff
 %    \end{macrocode}
-%    
+%
+% This one specifically has to be undefined because it is left over in
+% the input stream from \cs{InputIfFileExists} and executed when
+% \pkg{latexrelease} is loaded.  It cannot be \cs{let} to \cs{@undefined}
+% otherwise it would error as well, so it is \cs{let} to \cs{relax} to
+% be silently ignored when loading \cs{latexrelease}.
+% \changes{v1.0e}{2021/01/07}{Added rollback for this case to avoid
+%   spurious errors (part of gh/463)}
 %    \begin{macrocode}
 %</2ekernel|latexrelease>
 %<latexrelease>\EndIncludeInRelease
+%<latexrelease>
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>    {\@expl@@@filehook at if@no at extension@@nTF}{2e tmp interfaces}%
+%<latexrelease>\let\@expl@@@filehook at file@pop@@\relax
+%<latexrelease>\EndIncludeInRelease
 %<*2ekernel>
 %    \end{macrocode}
 %
@@ -1410,7 +1554,7 @@
 % \end{macro}
 %
 % \begin{macro}{\@@_log_file_record:n}
-%   This macro is responsible for increasing and decresing the file
+%   This macro is responsible for increasing and decreasing the file
 %   nesting level, as well as printing to the log.  The argument is
 %   either |STOPTART| or |STOP| and the action it takes on the nesting
 %   integer depends on that.

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltfiles.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltfiles.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltfiles.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -32,7 +32,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltfiles.dtx}
-             [2020/10/04 v1.2j LaTeX Kernel (File Handling)]
+             [2020/12/04 v1.2j LaTeX Kernel (File Handling)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltfiles.dtx}
@@ -334,7 +334,7 @@
 % locally in the output routine. In particular it allows hyphenation
 % in the page head even if the page break happens in verbatim.
 % If this has already been set by a package, set to the value of |\language|
-% at this spoint.
+% at this point.
 % \changes{v1.1n}{2017/03/10}{Save language default}
 %    \begin{macrocode}
   \ifx\document at default@language\m at ne
@@ -456,7 +456,7 @@
 %    harmless), however, in more complicated scenarios where several
 %    full documents are combined to a single document it might get
 %    applied several times with harmful effects. We therefore
-%    explicitly drop it at this point. the coing is somewhat obscure
+%    explicitly drop it at this point. the coding is somewhat obscure
 %    due to the name of the macro which requires constructing.
 %    \begin{macrocode}
 \edef \@kernel at after@begindocument at before {%
@@ -710,8 +710,8 @@
     \@latex at error{\string\include\space cannot be nested}\@eha
   \else
 %    \end{macrocode}
-%    Here the normalisation will add |.tex| for all files, (it uses the
-%    the same normalisation as the hooks), so we need to remove that
+%    Here the normalization will add |.tex| for all files, (it uses
+%    the same normalization as the hooks), so we need to remove that
 %    manually.  \cs{@strip at tex@ext} does that.
 %    \begin{macrocode}
     \set at curr@file{#1}%
@@ -718,7 +718,7 @@
     \edef\@curr at file{\@strip at tex@ext\@curr at file}%
 %    \end{macrocode}
 %    For historical reasons \cs{@include} expects an argument
-%    delimited by a space. This is kept (though uncessary now) to avoid
+%    delimited by a space. This is kept (though unnecessary now) to avoid
 %    errors in other packages that use \cs{@include} directly.
 %    \begin{macrocode}
     \expandafter\@include\expandafter{\@curr at file} % deliberate space
@@ -726,13 +726,13 @@
 %    \end{macrocode}
 %
 %    Here in \cs{includeonly} we also need to strip |.tex| after
-%    normalisation:
+%    normalization:
 %    \begin{macrocode}
 \def\includeonly#1{%
   \@partswtrue
 %    \end{macrocode}
 %    Because the argument to |\includeonly| is a comma-separated list
-%    of filenames where there may be comma's precedeing some of the
+%    of filenames where there may be comma's preceding some of the
 %    filenames or trailing them. Therefore we need to take the list
 %    apart, remove the unwanted spaces while leaving the spaces
 %    \emph{in} the filenames intact.
@@ -996,7 +996,7 @@
 %   A side effect of the new code is that we will see quotes around
 %   file name displays where there haven't been any before.
 %
-%   For compatibilty with existing code using |{abc}.tex| or |{one.two}.png|
+%   For compatibility with existing code using |{abc}.tex| or |{one.two}.png|
 %   an initial brace group is discarded before expansion and |\string| is applied
 %   The content of the brace group is discarded. This means that a leading space
 %   will be lost unless protected (by |{ }| or |" "| or |\space|) but filenames
@@ -1058,7 +1058,7 @@
 %
 % \changes{v1.2a}{2019/07/01}{Support UTF-8}
 % \changes{v1.2b}{2019/08/27}{Make command robust}
-% \changes{v1.2d}{2019/10/26}{dont quote name}
+% \changes{v1.2d}{2019/10/26}{don't quote name}
 %    \begin{macrocode}
 \DeclareRobustCommand\IfFileExists[1]{%
   \set at curr@file{#1}%

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltfinal.dtx}
-             [2020-09-26 v2.2j LaTeX Kernel (Final Settings)]
+             [2021/01/06 v2.2l LaTeX Kernel (Final Settings)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltfinal.dtx}
@@ -57,7 +57,7 @@
 %
 %
 % \section{Final settings}
-% This section contains the final settings for \LaTeX.  It initialises
+% This section contains the final settings for \LaTeX.  It initializes
 % some debugging and typesetting parameters, sets the default
 % |\catcode|s and uc/lc codes, and inputs the hyphenation file.
 %
@@ -90,6 +90,9 @@
 % \changes{v2.0s}{2016/10/15}{Tidy up status of char 127}
 % \changes{v2.2i}{2020/08/21}{Integration of new hook management interface}
 %
+%
+%
+%
 % \subsection{Debugging}
 %
 % By default, \LaTeX{} shows statistics:
@@ -150,7 +153,7 @@
 %\begin{macro}{\newXeTeXintercharclass}
 % \changes{v2.0a}{2014/12/30}{macro added}
 % \changes{v2.0b}{2015/01/23}{use reserved count 257}
-% \changes{v2.0f}{2015/04/28}{define \cs{xe at alloc@intercharclass} for compatibility with older xelatex initilisation}
+% \changes{v2.0f}{2015/04/28}{define \cs{xe at alloc@intercharclass} for compatibility with older xelatex initialization}
 %\begin{macro}{\xe at alloc@intercharclass}
 %\begin{macro}{\e at alloc@intercharclass at top}
 % \changes{v2.0j}{2016/01/04}{Start allocation at one not three}
@@ -632,7 +635,7 @@
 %
 % \begin{macro}{\UseRawInputEncoding}
 % \changes{v2.1a}{2018/03/25}{Macro added}
-% Reset 8 bit characters to catcode 12 so the input endcoing matches the ``Raw''
+% Reset 8 bit characters to catcode 12 so the input encoding matches the ``Raw''
 % font encoding.
 % Useful for special behaviours, or for compatibility with older \LaTeX\ formats.
 % \changes{v2.1b}{2018/04/06}{Undo changes to \cs{DeclareFontEncoding@} and
@@ -939,7 +942,7 @@
       \expandafter\reserved at a\@uclclist\reserved at b{\reserved at b\@gobble}%
 %    \end{macrocode}
 %    Tell UTF-8 processing to process chars even though we are in an \cs{protected at edef}.
-% \changes{v2.1h}{2019/09/14}{Expand UTF8 chrs when case changing (github/177)}
+% \changes{v2.1h}{2019/09/14}{Expand UTF8 chars when case changing (github/177)}
 %    \begin{macrocode}
       \let\UTF at two@octets at noexpand\@empty
       \let\UTF at three@octets at noexpand\@empty

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltfloat.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltfloat.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltfloat.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -31,7 +31,7 @@
 %
 %<*driver>
 % \fi
-\ProvidesFile{ltfloat.dtx}[2020/04/09 v1.2d LaTeX Kernel (Floats)]
+\ProvidesFile{ltfloat.dtx}[2020/12/05 v1.2d LaTeX Kernel (Floats)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltfloat.dtx}
@@ -356,7 +356,7 @@
 % \changes{v1.1f}{1994/11/21}
 %     {Missing percents reinserted after 4, 8: these are not numbers.}
 % \changes{v1.1g}{1994/12/10}{Old version reinstated temporarily}
-% \changes{v1.1g}{1994/12/10}{Sanitisation added temporarily}
+% \changes{v1.1g}{1994/12/10}{Sanitization added temporarily}
 %     The first part of this sets the count register that stores all
 %     the information about the type and fps of the float.
 %
@@ -574,7 +574,7 @@
 %
 %  \begin{macro}{\@setnobreak}
 % \changes{v1.1f}{1994/11/21}{Macro added}
-% \changes{v1.1n}{1996/07/26}{remove unecessary \cs{global} before
+% \changes{v1.1n}{1996/07/26}{remove unnecessary \cs{global} before
 %                 \cs{@nobreak...}}
 %    \begin{macrocode}
 \def \@setnobreak{%
@@ -588,7 +588,7 @@
 %
 %  \begin{macro}{\@setminipage}
 % \changes{v1.1f}{1994/11/21}{Macro added}
-% \changes{v1.1n}{1996/07/26}{remove unecessary \cs{global} before
+% \changes{v1.1n}{1996/07/26}{remove unnecessary \cs{global} before
 %                 \cs{@minipage...}}
 %    \begin{macrocode}
 \def \@setminipage{%
@@ -734,7 +734,7 @@
 %         {Use new \cs{color at hbox} concept.}
 % \changes{v1.1f}{1994/11/21}{Corrected position of \cs{outer at nobreak}}
 % \changes{v1.1f}{1994/11/21}{Added reset of minipage flag}
-% \changes{v1.1n}{1996/07/26}{remove unecessary \cs{global} before
+% \changes{v1.1n}{1996/07/26}{remove unnecessary \cs{global} before
 %                 \cs{@minipage...}}
 %    \begin{macrocode}
       \@minipagefalse
@@ -1002,7 +1002,7 @@
 % \changes{v1.1f}{1994/11/21}{Added \cs{@setminipage} etc}
 % \changes{v1.1f}{1994/11/21}{Added resetting of size and font}
 % \changes{v1.1m}{1995/05/25}{(CAR) Resettings moved to hook}
-% \changes{v1.1n}{1996/07/26}{remove unecessary \cs{global} before
+% \changes{v1.1n}{1996/07/26}{remove unnecessary \cs{global} before
 %                 \cs{@minipage...}}
 %    \begin{macrocode}
 \long\def \@savemarbox #1#2{%
@@ -1026,7 +1026,7 @@
 %
 % The rational for allowing these normally global flags to be set
 % locally here, via |\@parboxrestore| was stated originally by
-% Donald Arsenau and extended by Chris Rowley.
+% Donald Arseneau and extended by Chris Rowley.
 % It is because these flags are only set globally to
 % true by section commands, and these should never appear within
 % marginals or floats or, indeed, in any group; and they are only ever

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltfntcmd.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltfntcmd.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltfntcmd.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -32,7 +32,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltfntcmd.dtx}
-             [2019/12/17 v3.4c LaTeX Kernel (Font commands)]
+             [2020/12/05 v3.4c LaTeX Kernel (Font commands)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltfntcmd.dtx}
@@ -303,7 +303,7 @@
 %    character in an unsloped font; we believe (in early 2003) that
 %    this is perhaps inefficient but not dangerous.
 %
-%    It also now checks for empty contents of the text command and optimises
+%    It also now checks for empty contents of the text command and optimizes
 %    this case.  Some care is also taken to check that doing dangerous
 %    things in vertical mode is avoided.
 %
@@ -539,7 +539,7 @@
 %
 % \begin{macro}{\ifmaybe at ic}
 % \changes{v3.4a}{2009/12/14}{Macro added}
-%    Switch used soley within |\maybe at ic| not interfering with other
+%    Switch used solely within |\maybe at ic| not interfering with other
 %    switches.
 %    \begin{macrocode}
 \newif\ifmaybe at ic
@@ -585,7 +585,7 @@
 %    \begin{macrocode}
     \do \t at st@ic
 %    \end{macrocode}
-%    Frank thinks that the next bit it is inefficient if done after
+%    Frank thinks that the next bit is inefficient if done after
 %    the second change.  Chris thinks that most all of this is
 %    inefficient for the commonest cases: but that is the price of a
 %    cleverer algorithm.  It is certainly needed to deal with the use

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltfssaxes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltfssaxes.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltfssaxes.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2019-2020
+% Copyright (C) 2019-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -35,7 +35,7 @@
 %
 %
 \ProvidesFile{ltfssaxes.dtx}
-             [2020/08/21 v1.0g LaTeX Kernel (NFSS Axes handing)]
+             [2020/12/22 v1.0h LaTeX Kernel (NFSS Axes handing)]
 % \iffalse
 \documentclass{ltxdoc}
 \begin{document}
@@ -68,11 +68,11 @@
 %
 % \StopEventually{}
 %
-% Everything in the this file got introduced 2020/02/02, so we do a
-% single rollback (for now).
+% \changes{v1.0h}{2020/12/04}{Reorganized the rollback data}
+%
+% Everything in the this file got introduced 2020/02/02, so we use large rollback
+% chunks, only interrupted if necessary.
 %    \begin{macrocode}
-%<*2ekernel>
-%</2ekernel>
 %<*2ekernel|latexrelease>
 %<latexrelease>\IncludeInRelease{2020/02/02}%
 %<latexrelease>   {\DeclareFontSeriesChangeRule}{Series change rules}%
@@ -168,13 +168,13 @@
 %    request (i.e., second argument).
 %
 %    In particular this is also true for cases involving \texttt{m},
-%    e.g., \texttt{bm} (bold medium width) which automatially gets
+%    e.g., \texttt{bm} (bold medium width) which automatically gets
 %    reduced result in \texttt{b} or \texttt{mc} (medium weight
 %    condensed) which becomes \texttt{c} as a result.
 %
 % \item
 %
-%    Only a few entries have ``alterative'' values and perhaps most of
+%    Only a few entries have ``alternative'' values and perhaps most of
 %    them should get dropped. Or maybe not \ldots{} needs some thought
 %    perhaps.
 %
@@ -183,7 +183,7 @@
 %    to stay with \texttt{b} when a change to \texttt{c} is requested
 %    and \texttt{bc} doesn't exist, than to go to first change the
 %    shape to \texttt{n} and then find that \texttt{bc/n} doesn't
-%    exist either and thus ending up wth \texttt{m/n}.
+%    exist either and thus ending up with \texttt{m/n}.
 %
 % \item
 %
@@ -678,21 +678,59 @@
 %    \end{macrocode}
 %
 %
-
-
+% Supporting rollback \ldots
+%    \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>   {\DeclareFontSeriesChangeRule}{Series change rules}%
+%<latexrelease>
+%<latexrelease>\let\DeclareFontSeriesChangeRule\@undefined
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
+%
+%
+%
+%
+%
 % \subsection{Changing to a new series}
 %
 %
-
-%  \begin{macro}{\if at forced@series}
-%    If the series gets forced we need to know that fact later on.
+%    \begin{macrocode}
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2021/05/01}%
+%<latexrelease>                 {\fontseries}{delay fontseries update}%
+%    \end{macrocode}
+%
+%
+%  \begin{macro}{\fontseries}
+%    The \cs{fontseries} command takes one argument which is the requested new
+%    font series. In the orginal implementation  it simply saved the
+%    expanded value in \cs{f at series}. Now we do a bit more processing
+%    and look up the final value in the font series data base. This is
+%    done by \cs{merge at font@series}. But the lookup should be done
+%    within the target family and call to \cs{fontseries} might be
+%    followed by a \cs{fontfamily} call. So we delay the processing to
+%    \cs{selectfont} and only record the necessary action in
+%    \cs{delayed at f@adjustment}.
 % \changes{v1.0c}{2020/02/10}{Switch \cs{if at forced@series} added}
+% \changes{v1.0h}{2020/12/04}{Distangle series and shape update (gh/444)}
 %    \begin{macrocode}
-\newif\if at forced@series
+\DeclareRobustCommand\fontseries[1]{\@forced at seriesfalse
+    \expandafter\def\expandafter\delayed at f@adjustment\expandafter
+        {\delayed at f@adjustment\delayed at merge@font at series{#1}}}
 %    \end{macrocode}
 %  \end{macro}
 %
 %
+%  \begin{macro}{\delayed at f@adjustment}
+%    The macro holding the delayed action(s) for use in \cs{selectfont}.
+%    \begin{macrocode}
+\let\delayed at f@adjustment\@empty
+%    \end{macrocode}
+%  \end{macro}
+%
 %  \begin{macro}{\fontseriesforce}
 %    To change unconditionally to a new series you can use
 %    \cs{fontseriesforce}. Of course, if the series doesn't exist for
@@ -700,24 +738,66 @@
 %    dependency on the current series.
 % \changes{v1.0c}{2020/02/10}{Switch \cs{if at forced@series} added}
 %    \begin{macrocode}
-\DeclareRobustCommand\fontseriesforce[1]{\@forced at seriestrue\edef\f at series{#1}}
+\DeclareRobustCommand\fontseriesforce[1]{\@forced at seriestrue
+    \expandafter\def\expandafter\delayed at f@adjustment\expandafter
+      {\delayed at f@adjustment\edef\f at series{#1}}}
 %    \end{macrocode}
 %  \end{macro}
 %
 %
-%  \begin{macro}{\fontseries}
-%    The \cs{fontseries} command takes one argument which is the requested new
-%    font series. In the orginal implementation  it simply saved the
-%    expanded value in \cs{f at series}. Now we do a bit more processing
-%    and look up the final value in the font series data base. This is
-%    done by \cs{merge at font@series}.
+%
+%  \begin{macro}{\if at forced@series}
+%    If the series gets forced we need to know that fact later on.
 % \changes{v1.0c}{2020/02/10}{Switch \cs{if at forced@series} added}
 %    \begin{macrocode}
-\DeclareRobustCommand\fontseries[1]{\@forced at seriesfalse\merge at font@series{#1}}
+\newif\if at forced@series
 %    \end{macrocode}
 %  \end{macro}
-
-
+%
+%
+%    \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2020/02/02}%
+%<latexrelease>                 {\fontseries}{delay fontseries update}%
+%<latexrelease>
+%<latexrelease>\DeclareRobustCommand\fontseries[1]{\@forced at seriesfalse\merge at font@series{#1}}
+%<latexrelease>\DeclareRobustCommand\fontseriesforce[1]{\@forced at seriestrue\edef\f at series{#1}}
+%<latexrelease>\let\delayed at f@adjustment\@undefined
+%<latexrelease>
+%    \end{macrocode}
+%    For a roll forward we may have to define \cs{if at forced@series}
+%    but this needs doing in a somewhat roundabout way.
+%    \begin{macrocode}
+%<latexrelease>\ifx\@forced at seriestrue\@undefined \else
+%<latexrelease>  \expandafter\newif\csname if at forced@series\endcsname
+%<latexrelease>\fi
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\fontseries}{delay fontseries update}%
+%<latexrelease>
+%<latexrelease>\DeclareRobustCommand\fontseries[1]{\edef\f at series{#1}}
+%<latexrelease>\let\fontseriesforce\@undefined
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
+%
+%
+%
+%    \begin{macrocode}
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/02/02}%
+%<latexrelease>   {\merge at font@series}{Merge series values}%
+%    \end{macrocode}
+%
+%
 %  \begin{macro}{\merge at font@series}
 %    We look up the data base value by expanding the right command
 %    twice. If no such value exist then the result will be \cs{relax}
@@ -734,9 +814,9 @@
 }
 %    \end{macrocode}
 %  \end{macro}
-
-
-
+%
+%
+%
 %  \begin{macro}{\merge at font@series@}
 %    This now defines the new \cs{f at series}:
 %    \begin{macrocode}
@@ -758,11 +838,9 @@
 %    \end{macrocode}
 %    Otherwise we check if the desired result for the series
 %    (\texttt{\#1}) exists for the font family and the current shape.
-%    As the \texttt{.fd} is perhaps not loaded yet, we first
-%    have to do that, otherwise the test would fail even if the face
-%    is actually available.
+%    All this happens inside \cs{selectfont} which has already taken care to load
+%    the \texttt{.fd}, file if necessary.
 %    \begin{macrocode}
-    \maybe at load@fontshape
     \edef\reserved at a{\f at encoding /\f at family /#1/\f at shape}%
      \ifcsname \reserved at a \endcsname
 %    \end{macrocode}
@@ -798,9 +876,10 @@
 %    \end{macrocode}
 %    It is possible that the previous font and the new one are
 %    actually identical (and the font was not found because it still
-%    needs loading) in which case a warning  would look rather odd. So
-%    we make a quick check for that (which is the reason why we defined
-%    \cs{@reserveda} above.
+%    needs loading) in which case a warning would look rather odd. So
+%    we make a quick check for that (which is the reason why we
+%    defined \cs{@reserveda} above instead of doing inline testing
+%    inside \cs{ifcsname}).
 %    \begin{macrocode}
 \def\@font at shape@subst at warning{%
    \edef\reserved at b{\curr at fontshape}%
@@ -814,13 +893,71 @@
 %
 %
 %
+%  \begin{macro}{\merge at font@series at without@substitution,
+%                \merge at font@series at without@substitution@,
+%                \delayed at merge@font at series}
 %
+% \changes{v1.0h}{2020/12/22}{Distangle series and shape update (gh/444)}
+%
+%    \cs{merge at font@series at without@substitution} works like
+%    \cs{merge at font@series}, i.e., it looks up the combination in the
+%    rule base and if there exists an entry it uses it and if not it
+%    uses the new series value. However, it doesn't check if there is
+%    actually a font face with the new series value as
+%    \cs{merge at font@series} does. This simplified command is used in
+%    \cs{selectfont} at a point where other font attributes are not
+%    yet updated so that checking the font face might result incorrect
+%    in substitutions.
+%
+%    \begin{macrocode}
+\def\merge at font@series at without@substitution#1{%
+  \expandafter\expandafter\expandafter
+  \merge at font@series at without@substitution@
+    \csname series@\f at series @#1\endcsname
+    {#1}%
+    \@nil
+}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\def\merge at font@series at without@substitution@#1#2#3\@nil{%
+  \def\reserved at a{#3}%
+  \ifx\reserved at a\@empty
+    \set at target@series{#2}%
+  \else
+    \set at target@series{#1}%
+  \fi
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
+%  \begin{macro}{\delayed at merge@font at series}
+%
+%    When we delay the merge action in \cs{fontseries} we first
+%    attempt to use merging without substitution. If that results in a
+%    non-existing font face the merge is redone in \cs{selectfont}
+%    using a version with substitution. See \cs{selectfont} for details.
+%
+% \changes{v1.0h}{2020/12/22}{Distangle series and shape update
+%    (gh/444)}
+%    \begin{macrocode}
+\let\delayed at merge@font at series\merge at font@series at without@substitution
+%    \end{macrocode}
+%  \end{macro}
+%
 %  \begin{macro}{\maybe at load@fontshape}
 %    A small helper that we use a couple of times: try loading a
 %    fontshape (in a group because \cs{try at load@fontshape} normalizes
-%    catcodes).
+%    catcodes and we also want to change \cs{typeout} so that it
+%    doesn't report missing \texttt{.fd} files on the terminal).
 %    \begin{macrocode}
-\def\maybe at load@fontshape{\begingroup\try at load@fontshape\endgroup}
+\def\maybe at load@fontshape{%
+  \begingroup
+    \let \typeout \@font at info
+    \try at load@fontshape
+  \endgroup}
 %    \end{macrocode}
 %  \end{macro}
 %
@@ -836,7 +973,7 @@
 %    condensed series, etc.). We do this in all branches above because a user
 %    might have written
 %\begin{verbatim}
-\DeclareFontSeriesChangeRule {m}{sc}{msc}{mc}
+%    \DeclareFontSeriesChangeRule {m}{sc}{msc}{mc}
 %\end{verbatim}
 %    instead of using \texttt{sc} and \texttt{c} as needed in the
 %    \texttt{.fd} file.
@@ -845,7 +982,7 @@
 %    \end{macrocode}
 %    We need to \cs{edef} the argument first in case it starts with a
 %    conditional. Then we check (and perhaps drop) an ``m'' from the
-%    value andassign the result to \cs{f at series}.
+%    value and assign the result to \cs{f at series}.
 % \changes{v1.0d}{2020/02/27}{Drop ``m'' only in a specific set of values (gh/293)}
 %    \begin{macrocode}
     \edef\f at series{#1}%
@@ -916,9 +1053,33 @@
 }
 %    \end{macrocode}
 %  \end{macro}
+%
+%
+%
+% Supporting rollback \ldots
+%    \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>   {\merge at font@series}{Merge series values}%
+%<latexrelease>
+%<latexrelease>\let\merge at font@series\@undefined
+%<latexrelease>\let\merge at font@series@\@undefined
+%<latexrelease>\let\@font at shape@subst at warning\@undefined
+%<latexrelease>\let\merge at font@series at without@substitution\@undefined
+%<latexrelease>\let\merge at font@series at without@substitution@\@undefined
+%<latexrelease>\let\delayed at merge@font at series\@undefined
+%<latexrelease>\let\maybe at load@fontshape\@undefined
+%<latexrelease>\let\set at target@series\@undefined
+%<latexrelease>\let\series at maybe@drop at one@m\@undefined
+%<latexrelease>\let\series at drop@one at m\@undefined
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
 
 
 
+
 % \section{Changing the shape}
 %
 %    Shapes are also split in two axes (though it could be more if
@@ -925,8 +1086,14 @@
 %    that is desirable), essentially building in an ``sc''
 %    axis).
 %
+%    \begin{macrocode}
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/02/02}%
+%<latexrelease>   {\DeclareFontShapeChangeRule}{Font shape change rules}%
+%    \end{macrocode}
 %
 %
+%
 %  \begin{macro}{\DeclareFontShapeChangeRule}
 %    The database for shapes is done in exactly the same way, only
 %    that it is much smaller and we usually have no alternative shape
@@ -948,8 +1115,9 @@
 %    resets everything and \texttt{up} changes italic or slanted to
 %    upright and \texttt{ulc} undoes small caps.
 %
-%    So we now offer \cs{normalshape} (using \cs{shapedefault} which is normally the same as
-%    calling both \cs{ulcshape} and \cs{upshape}, only more efficient.
+%    So we now offer \cs{normalshape} (using \cs{shapedefault} which
+%    is normally the same as calling both \cs{ulcshape} and
+%    \cs{upshape}, only more efficient.
 %
 %
 %  \begin{macro}{\ulcshape}
@@ -1080,7 +1248,7 @@
 %    \texttt{n}. This is the way \texttt{fontspec} implemented its
 %    version on this interface, so this rule means we are also
 %    compatible with the way \texttt{fontspec} behaved. Still it
-%    remains an odditywhic I would rather liked to have avoided.
+%    remains an oddity which I would rather liked to have avoided.
 %    \begin{macrocode}
 %\DeclareFontShapeChangeRule {sc}{up} {sc}     {}
 \DeclareFontShapeChangeRule {sc}{up} {n}     {}
@@ -1100,7 +1268,7 @@
 %    \texttt{ulc} in \cs{f at series} which most certainly doesn't
 %    exist. So when a font is later selected that would result in a
 %    substitution (so no harm done really). Alternatively, we could in
-%    this case use \texttt{n} as aternative, which may be a bit
+%    this case use \texttt{n} as alternative, which may be a bit
 %    faster, but such a  setup would be so weird in the first place
 %    that this isn't worth the effort.
 %
@@ -1134,15 +1302,45 @@
 \DeclareFontShapeChangeRule {sw}{up} {n}      {}
 %    \end{macrocode}
 %
+% Supporting rollback \ldots
+%    \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>   {\DeclareFontShapeChangeRule}{Font shape change rules}%
+%<latexrelease>
+%<latexrelease>\let\DeclareFontShapeChangeRule\@undefined
+%<latexrelease>\let\ulcshape\@undefined
+%<latexrelease>\let\ulcdefault\@undefined
+%<latexrelease>\let\swshape\@undefined
+%<latexrelease>\let\swdefault\@undefined
+%<latexrelease>\let\sscshape\@undefined
+%<latexrelease>\let\sscdefault\@undefined
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
 %
+%
 % \subsection{Changing to a new shape}
 %
+%
+%    \begin{macrocode}
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2021/05/01}%
+%<latexrelease>   {\fontshape}{Font shape change}%
+%    \end{macrocode}
+%
+%
+%
 %  \begin{macro}{\fontshape}
 %    Again the \cs{fontshape} now has to do a lookup to get to its new
 %    value in \cs{f at shape}. The method is exactly the same as in
 %    \cs{fontseries}.
+% \changes{v1.0h}{2020/12/04}{Distangle series and shape update (gh/444)}
 %    \begin{macrocode}
-\DeclareRobustCommand\fontshape[1]{\merge at font@shape{#1}}
+\DeclareRobustCommand\fontshape[1]
+   {\expandafter\def\expandafter\delayed at f@adjustment\expandafter
+        {\delayed at f@adjustment\delayed at merge@font at shape{#1}}}
 %    \end{macrocode}
 %  \end{macro}
 %
@@ -1149,11 +1347,52 @@
 %
 %  \begin{macro}{\fontshapeforce}
 %    The unconditional version:
+%
+% \changes{v1.0h}{2020/12/04}{Distangle series and shape update (gh/444)}
 %    \begin{macrocode}
-\DeclareRobustCommand\fontshapeforce[1]{\edef\f at shape{#1}}
+\DeclareRobustCommand\fontshapeforce[1]
+   {\expandafter\def\expandafter\delayed at f@adjustment\expandafter
+        {\delayed at f@adjustment\edef\f at shape{#1}}}
 %    \end{macrocode}
 %  \end{macro}
 %
+%
+% Supporting rollback \ldots
+%    \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{2020/02/02}%
+%<latexrelease>   {\fontshape}{Font shape change}%
+%<latexrelease>
+%<latexrelease>\DeclareRobustCommand\fontshape[1]{\merge at font@shape{#1}}
+%<latexrelease>\DeclareRobustCommand\fontshapeforce[1]{\edef\f at shape{#1}}
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>   {\fontshape}{Font shape change}%
+%<latexrelease>
+%<latexrelease>\DeclareRobustCommand\fontshape [1]{\edef\f at shape{#1}}
+%<latexrelease>\let\fontshapeforce\@undefined
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
+%
+
+
+
+
+
+%    \begin{macrocode}
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/02/02}%
+%<latexrelease>   {\merge at font@shape}{Font shape change rules}%
+%    \end{macrocode}
+%
+%
+%
 %  \begin{macro}{\merge at font@shape}
 %    Look up the database entry (if existing) and act accordingly.
 %    \begin{macrocode}
@@ -1178,9 +1417,12 @@
   \ifx\reserved at a\@empty
     \edef\f at shape{#2}%
   \else
-    \maybe at load@fontshape
+%    \end{macrocode}
+%    \cs{reserved at a} is used in \cs{@font at shape@subst at warning} so we
+%    have to define it in addition to do the \cs{ifcsname} test
+%    \begin{macrocode}
     \edef\reserved at a{\f at encoding /\f at family /\f at series/#1}%
-     \ifcsname \reserved at a\endcsname
+    \ifcsname \reserved at a\endcsname
        \edef\f at shape{#1}%
     \else
        \ifcsname \f at encoding /\f at family /\f at series/#2\endcsname
@@ -1197,7 +1439,39 @@
 %  \end{macro}
 %
 %
+%  \begin{macro}{\merge at font@shape at without@substitution,
+%                \merge at font@shape at without@substitution@,
+%                \delayed at merge@font at shape}
+%    See definition of \cs{selectfont} for how these macros are used.
+% \changes{v1.0h}{2020/12/22}{Distangle series and shape update (gh/444)}
+%    \begin{macrocode}
+\def\merge at font@shape at without@substitution#1{%
+  \expandafter\expandafter\expandafter
+  \merge at font@shape at without@substitution@
+    \csname shape@\f at shape @#1\endcsname
+    {#1}%
+    \@nil
+}
+%    \end{macrocode}
 %
+%    \begin{macrocode}
+\def\merge at font@shape at without@substitution@#1#2#3\@nil{%
+  \def\reserved at a{#3}%
+  \ifx\reserved at a\@empty
+    \edef\f at shape{#2}%
+  \else
+    \edef\f at shape{#1}%
+  \fi
+}
+%    \end{macrocode}
+%    
+%    \begin{macrocode}
+\let\delayed at merge@font at shape\merge at font@shape at without@substitution
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+%
 %  \begin{macro}{\normalshape}
 %
 %    \cs{normalshape} resets both sub-axes if the default rules are used.
@@ -1255,6 +1529,7 @@
 %    \end{macrocode}
 %  \end{macro}
 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
 % Supporting rollback \ldots
 %    \begin{macrocode}
@@ -1261,32 +1536,20 @@
 %</2ekernel|latexrelease>
 %<latexrelease>\EndIncludeInRelease
 %<latexrelease>\IncludeInRelease{0000/00/00}%
-%<latexrelease>   {\DeclareFontSeriesChangeRule}{Series change rules}%
+%<latexrelease>   {\merge at font@shape}{Font shape change rules}%
 %<latexrelease>
-%<latexrelease>\DeclareRobustCommand\fontseries[1]{\edef\f at series{#1}}
 %<latexrelease>\DeclareRobustCommand\fontshape [1]{\edef\f at shape{#1}}
-%<latexrelease>\let\fontseriesforce\@undefined
 %<latexrelease>\let\fontshapeforce\@undefined
 %<latexrelease>
-%<latexrelease>\let\DeclareFontSeriesChangeRule\@undefined
-%<latexrelease>\let\merge at font@series\@undefined
-%<latexrelease>\let\merge at font@series@\@undefined
-%<latexrelease>\let\@font at shape@subst at warning\@undefined
-%<latexrelease>\let\maybe at load@fontshape\@undefined
-%<latexrelease>\let\set at target@series\@undefined
-%<latexrelease>\let\series at maybe@drop at one@m\@undefined
-%<latexrelease>\let\series at drop@one at m\@undefined
-%<latexrelease>\let\DeclareFontShapeChangeRule\@undefined
 %<latexrelease>\let\merge at font@shape\@undefined
 %<latexrelease>\let\merge at font@shape@\@undefined
+%<latexrelease>
+%<latexrelease>\let\merge at font@shape at without@substitution\@undefined
+%<latexrelease>\let\merge at font@shape at without@substitution@\@undefined
+%<latexrelease>\let\delayed at merge@font at shape\@undefined
+%<latexrelease>
 %<latexrelease>\let\normalshape\@undefined
-%<latexrelease>\let\ulcshape\@undefined
-%<latexrelease>\let\ulcdefault\@undefined
-%<latexrelease>\let\swshape\@undefined
-%<latexrelease>\let\swdefault\@undefined
-%<latexrelease>\let\sscshape\@undefined
-%<latexrelease>\let\sscdefault\@undefined
-%<latexrelease>\let\normalshape\@undefined
+%<latexrelease>
 %    \end{macrocode}
 %    This is always called in \cs{document} so don't make it undefined.
 %    \begin{macrocode}
@@ -1293,14 +1556,14 @@
 %<latexrelease>
 %<latexrelease>\let\reinstall at nfss@defs\relax
 %<latexrelease>\EndIncludeInRelease
-%<*2ekernel>
 %    \end{macrocode}
 %
+%
+%
 %    This initializes the 2020/02/02 extensions to NFSS after any changes
 %    in the preamble. 
 % \changes{v1.0g}{2020/08/21}{Integration of new hook management interface}
 %    \begin{macrocode}
-%</2ekernel>
 %<*2ekernel|latexrelease>
 %<latexrelease>\IncludeInRelease{2020/10/01}%
 %<latexrelease>                 {\reinstall at nfss@defs}{NFSS series init}%

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltfssbas.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltfssbas.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltfssbas.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -35,7 +35,7 @@
 %
 %
 \ProvidesFile{ltfssbas.dtx}
-             [2020/02/27 v3.2g LaTeX Kernel (NFSS Basic Macros)]
+             [2020/12/10 v3.2h LaTeX Kernel (NFSS Basic Macros)]
 % \iffalse
 \documentclass{ltxdoc}
 \begin{document}
@@ -891,12 +891,31 @@
 %    series and shape which is not desired if we intend to use an
 %    explicit font shape!
 % \changes{v3.2e}{2019/12/17}{Don't call \cs{fontseries} or \cs{fontshape}}
+% \changes{v3.2h}{2020/12/10}{Drop ``m'' if the series value is a member
+%     of a fixed list  and issue warning if doing it (gh/453)}
 %    \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/02/02}%
+%<latexrelease>                 {\usefont}{Drop m in usefont}%
 \DeclareRobustCommand\usefont[4]{\fontencoding{#1}%
    \edef\f at family{#2}%
-   \edef\f at series{#3}%
+   \set at target@series{#3}%
    \edef\f at shape{#4}\selectfont
    \ignorespaces}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\usefont}{Drop m in usefont}%
+%<latexrelease>
+%<latexrelease>\DeclareRobustCommand\usefont[4]{\fontencoding{#1}%
+%<latexrelease>   \edef\f at family{#2}%
+%<latexrelease>   \edef\f at series{#3}%
+%<latexrelease>   \edef\f at shape{#4}\selectfont
+%<latexrelease>   \ignorespaces}
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
 %    \end{macrocode}
 %  \end{macro}
 %
@@ -1384,7 +1403,7 @@
 %    The idea for this macro is stolen from the \texttt{substitutefont}
 %    package by Günter Milde, with some modifications and a new name.
 %
-%    Its purpose is to provide characters in a special encoding tht
+%    Its purpose is to provide characters in a special encoding that
 %    are not available in the current font family to be taken from a
 %    different family that is visually compatible (or not if you
 %    choose badly). For example, you can match the GFS Didot Greek
@@ -1403,7 +1422,7 @@
 %</2ekernel>
 %<*2ekernel|latexrelease>
 %<latexrelease>\IncludeInRelease{2020/02/02}%
-%<latexrelease>       {\DeclareFontFamilySubstitution}{Provide family substituation}%
+%<latexrelease>       {\DeclareFontFamilySubstitution}{Provide family substitution}%
 \begingroup
 \nfss at catcodes
 \gdef\DeclareFontFamilySubstitution#1#2#3{%
@@ -1413,7 +1432,7 @@
 %    is better to handle that differently.
 %
 %    Of course the families  may still need loading at
-%    this point and so we arange for this. Otherwise we might run into
+%    this point and so we arrange for this. Otherwise we might run into
 %    trouble because the necessary \cs{DeclareFontFamily} has not been
 %    seen.
 %    \begin{macrocode}
@@ -1457,7 +1476,7 @@
 %</2ekernel|latexrelease>
 %<latexrelease>\EndIncludeInRelease
 %<latexrelease>\IncludeInRelease{0000/00/00}%
-%<latexrelease>      {\DeclareFontFamilySubstitution}{Provide family substituation}%
+%<latexrelease>      {\DeclareFontFamilySubstitution}{Provide family substitution}%
 %<latexrelease>
 %<latexrelease>\let\DeclareFontFamilySubstitution\@undefined
 %<latexrelease>\EndIncludeInRelease
@@ -1484,11 +1503,11 @@
           \noexpand\@nil}%
 %    \end{macrocode}
 %    Initialize all those internal variables which may or may not have
-%    values in the first seconds of NFSS' bootstraping process. Later
+%    values in the first seconds of NFSS' bootstrapping process. Later
 %    on such values will be updated when an encoding is selected, etc.
 %
 %    We definitely don't want to set |\f at encoding|; we can set all the
-%    others since if they are left ``blank'' any selection would grap
+%    others since if they are left ``blank'' any selection would grab
 %    ``error default values'' as well. However, this probably should
 %    go also---and now it did.
 % \changes{v2.1n}{1994/05/14}{Don't set \cs{f at encoding}}
@@ -1540,7 +1559,7 @@
 %    \begin{macrocode}
 %</2ekernel>
 %<latexrelease>\IncludeInRelease{2015/01/01}{\wrong at fontshape}%
-%<latexrelease>                 {Font substituation in preamble}%
+%<latexrelease>                 {Font substitution in preamble}%
 %<*2ekernel|latexrelease>
 \def\wrong at fontshape{%
     \csname D@\f at encoding\endcsname   % install defaults if in math
@@ -1581,9 +1600,9 @@
 %    corresponding \texttt{.fd} file may not been loaded
 %    yet. Therefore we try this now. Otherwise equating the requested
 %    font shape with the finally selected fontshape below will fail
-%    and can result in ``NFSS tables corruped''. After begin document
+%    and can result in ``NFSS tables corrupted''. After begin document
 %    that will not happen as all \texttt{.fd} files involved in
-%    substituation are loaded at |\begin{document}|.
+%    substitution are loaded at |\begin{document}|.
 %    \begin{macrocode}
            \begingroup
               \try at load@fontshape
@@ -1662,7 +1681,7 @@
 %</2ekernel|latexrelease>
 %<latexrelease>\EndIncludeInRelease
 %<latexrelease>\IncludeInRelease{0000/00/00}{\wrong at fontshape}%
-%<latexrelease>                 {Font substituation in preamble}%
+%<latexrelease>                 {Font substitution in preamble}%
 %<latexrelease>\def\wrong at fontshape{%
 %<latexrelease>    \csname D@\f at encoding\endcsname
 %<latexrelease>    \edef\reserved at a{\csname\curr at fontshape\endcsname}%
@@ -1837,7 +1856,7 @@
 %    it modifies the corresponding macro |\mv@|\meta{version}
 %    so that it calls |\getanddefine at fonts| directly in future as well.
 %    We use the macro |\extract at alph@from at version| to do this.
-%    It takes the math alphabet identifer |#1| and the math version
+%    It takes the math alphabet identifier |#1| and the math version
 %    macro as arguments.
 % \changes{v1.9a}{1992/07/26}{}
 %    \begin{macrocode}
@@ -1925,7 +1944,7 @@
               \use at mathgroup##1{#2}}}%
 %    \end{macrocode}
 % \changes{v2.1t}{1994/10/15}{Warn if math alpha is used outside math}
-%    In addtion it defines the alphabet the way it should be used from
+%    In addition it defines the alphabet the way it should be used from
 %    now on.
 %    \begin{macrocode}
        \gdef#3{\relax\ifmmode \else \non at alpherr#3\fi

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltfsscmp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltfsscmp.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltfsscmp.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -36,7 +36,7 @@
 %
 %
 \ProvidesFile{ltfsscmp.dtx}
-             [2015/06/23 v3.0f LaTeX Kernel (NFSS1 Compatibility)]
+             [2020/12/05 v3.0f LaTeX Kernel (NFSS1 Compatibility)]
 % \iffalse
 \documentclass{ltxdoc}
 \begin{document}
@@ -181,7 +181,7 @@
       \in@{pt}{#3}%  not a proof but a good chance
       \ifin@
 %    \end{macrocode}
-%    We grap also everything after pt and discard it if people have
+%    We grab also everything after pt and discard it if people have
 %    forgotten to place a percent sign there.
 % \changes{v2.1d}{1994/02/10}{scan away stuff after pt}
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltfssdcl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltfssdcl.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltfssdcl.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -36,7 +36,7 @@
 %
 %
 \ProvidesFile{ltfssdcl.dtx}
-            [2020/03/19 v3.0v LaTeX Kernel (NFSS Declarative Interface)]
+            [2020/12/05 v3.0v LaTeX Kernel (NFSS Declarative Interface)]
 % \iffalse
 \documentclass{ltxdoc}
 \begin{document}
@@ -747,7 +747,7 @@
       \@font at info{Redeclaring symbol font `#1'}%
 %    \end{macrocode}
 % \changes{v3.0f}{1997/11/13}
-%      {(DPC) Really update \cs{group at list} dont
+%      {(DPC) Really update \cs{group at list} don't
 %         leave new version in \cs{toks@}. latex/2661}
 % Update the group list.
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltfssini.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltfssini.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltfssini.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -36,7 +36,7 @@
 %
 %
 \ProvidesFile{ltfssini.dtx}
-             [2020/10/08 v3.2e LaTeX Kernel (NFSS Initialisation)]
+             [2020/12/06 v3.2f LaTeX Kernel (NFSS Initialisation)]
 % \iffalse
 \documentclass{ltxdoc}
 \begin{document}
@@ -56,7 +56,7 @@
 %
 % \GetFileInfo{ltfssini.dtx}
 % \title{A new font selection scheme for \TeX{} macro packages\\
-%        (Initialisation)\thanks
+%        (Initialization)\thanks
 %       {This file has version number
 %       \fileversion\ dated \filedate}}
 %
@@ -83,7 +83,7 @@
 % \changes{v3.1d}{2019/08/27}{Make various commands robust}
 %
 %
-% \section{NFSS Initialisation}
+% \section{NFSS Initialization}
 %
 % \iffalse
 %<+checkmem>\CHECKMEM
@@ -301,7 +301,7 @@
     \else
 %    \end{macrocode}
 %
-% \changes{v3.1g}{2020/02/05}{Clarrified error text}
+% \changes{v3.1g}{2020/02/05}{Clarified error text}
 %    \begin{macrocode}
        \@latex at error{Wrong syntax for \string\DeclareFontSeriesDefault}%
           {Mandatory first argument must be 'md'  or 'bf'.}
@@ -431,7 +431,7 @@
 %<+debug> \series at change@debug{No series preparation (forced \f at series)\on at line}%
    \fontfamily#2%
  \else
-%<+debug> \series at change@debug{Prepearing for switching to #1 (#2)\on at line}%
+%<+debug> \series at change@debug{Preparing for switching to #1 (#2)\on at line}%
    \expand at font@defaults
 %    \end{macrocode}
 %    We prepare for changing the current series. We have to find it
@@ -493,7 +493,7 @@
 %    \end{macrocode}
 %    The \cs{target at series@value} may contain something like
 %    \texttt{cm} (coming from a default) and so we can't directly
-%    asign it to \cs{f at series} be have to drop any surplus \texttt{m}
+%    assign it to \cs{f at series} be have to drop any surplus \texttt{m}
 %    first.
 % \changes{v3.1j}{2020/02/25}{Drop surplus ``m'' from
 %                             \cs{target at series@value} (gh/291)}
@@ -513,7 +513,7 @@
 %    In this macro used in the look you basically find the nested
 %    \cs{ifx}s from the outline above. The only difference is that is
 %    it is parameterized instead of being written out and only for one
-%    block of tests because the code is called reatedly when looping
+%    block of tests because the code is called repeatedly when looping
 %    over the meta family list. From the list we get each meta family
 %    name in turn.
 %    \begin{macrocode}
@@ -665,7 +665,7 @@
 %    the now current series value (in \cs{f at series}).
 %
 %    But what should happen if \cs{seriesdefault} got explicitly
-%    changed?  In that case the explicit change should surive and we
+%    changed?  In that case the explicit change should survive and we
 %    should not alter \cs{seriesdefault}. This is solved by comparing
 %    the current value of \cs{seriesdefault} with a kernel version
 %    saved in the format and if they differ we do not call
@@ -915,9 +915,9 @@
 %\end{verbatim}
 %    We have to do the testing while the current family is still
 %    unchanged but we have to do the adjustment of the series after it
-%    got changed (because the new family might has different sets
-%    ofshapes available and we certainly don't want to see
-%    substituation going on. So we use \cs{target at series@value} to
+%    got changed (because the new family might have different sets
+%    of shapes available and we certainly don't want to see
+%    substitution going on. So we use \cs{target at series@value} to
 %    hold the target series (if any).
 %\begin{verbatim}
 %  \let\target at series@value\@empty
@@ -1183,7 +1183,7 @@
 %    to different NFSS axis values it becomes important to have the
 %    ability to determine the current context as we can no longer look
 %    at \cs{f at series} to answer a question such as ``am I currently
-%    typsetting in a bold typeface?''
+%    typesetting in a bold typeface?''
 %
 %    This is provided by the test \cs{IfFontSeriesContextTF}. It takes
 %    three arguments:
@@ -1221,7 +1221,7 @@
 \DeclareRobustCommand\IfFontSeriesContextTF[1]{%
   \expand at font@defaults
 %    \end{macrocode}
-%    In the beginning we haven't found the context we are loking for.
+%    In the beginning we haven't found the context we are looking for.
 %    \begin{macrocode}
   \@font at series@contextfalse
 %    \end{macrocode}
@@ -1238,7 +1238,7 @@
   \expandafter\edef\csname ??def at ult\endcsname{\f at family}%
 %    \end{macrocode}
 %    Then we run through the meta family list (currently containing
-%    just the three values) followed by the artifical meta family
+%    just the three values) followed by the artificial meta family
 %    \texttt{??} and test each of them in turn using
 %    \cs{test at font@series at context} as the testing command.
 %    \begin{macrocode}
@@ -1264,7 +1264,7 @@
 
 %  \begin{macro}{\test at font@series at context}
 %    This tests the context (stored in \cs{requested at test@context})
-%    and updates the bookean if the right context is found.
+%    and updates the boolean if the right context is found.
 %    \begin{macrocode}
 \def\test at font@series at context#1{%
 %    \end{macrocode}
@@ -1343,10 +1343,10 @@
 %    By default \LaTeXe{} supports two levels of nested emphasis: if
 %    the current font has an upright shape then it switches to
 %    \cs{itshape} otherwise to \cs{eminnershape} (which defaults to
-%    \cs{upshape}). This means nested emphasis will ocssilate between
+%    \cs{upshape}). This means nested emphasis will oscillate between
 %    italic and upright shapes.
 %
-%    Sometimes it would be nice to allow for a more lengthly sequence,
+%    Sometimes it would be nice to allow for a more lengthy sequence,
 %    but instead of providing a fixed one \LaTeX{} now offers a
 %    general mechanism that allows to define arbitrary sequences.
 %
@@ -1377,7 +1377,7 @@
 %  \begin{macro}{\DeclareEmphSequence}
 %
 %    \cs{DeclareEmphSequence} expects a clist of declaration. Spaces in the
-%    argument are dropped to avoid surious spaces in the output. The
+%    argument are dropped to avoid spurious spaces in the output. The
 %    declarations are additive. At the very end the shape is reset
 %    using |\emreset| and |\emforce| so that this case is never
 %    skipped.\footnote{Maybe we should not add \cs{emforce} but allow
@@ -1479,7 +1479,7 @@
 %    \begin{macrocode}
   \expandafter\ifx\csname \curr at fontshape/\f at size\em at force
 %    \end{macrocode}
-%    For the comparison with \cs{ifx} we have to exand
+%    For the comparison with \cs{ifx} we have to expand
 %    \cs{em at currfont} once as the relevant info is inside.
 %    \begin{macrocode}
                           \expandafter\endcsname
@@ -1863,8 +1863,20 @@
 % \changes{v3.1c}{2019/07/09}{Explicitly set some defaults}
 %    \begin{macrocode}
 \fontfamily{cmr}
-\fontseries{m}
-\fontshape{n}
+%    \end{macrocode}
+%    
+% \changes{v3.2f}{2020/12/04}{Adjust start values for series and shape (gh/444)}
+%    Previously the default values for series and shape were set by
+%    calling \cs{fontseries} and \cs{fontshape}, but their action is
+%    now delayed until \cs{selectfont} which isn't called inside the
+%    format (to avoid unnecessarily loading a font that may never get used).
+%    We therefore have to set \cs{f at series} and \cs{f at shape} directly instead.
+%    \begin{macrocode}
+\def\f at series{m}           % \fontseries{m}
+\def\f at shape{n}            % \fontshape{n}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 \fontsize{10}{10}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltfsstrc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltfsstrc.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltfsstrc.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -32,12 +32,12 @@
 %% Copyright (C) 1989-97 by Frank Mittelbach and Rainer Sch\"opf.
 %% Copyright (C) 1994-97 by LaTeX3 project. All rights reserved.
 %
-%<package>\NeedsTeXFormat{LaTeX2e}[1995/05/16]
+%<package>\NeedsTeXFormat{LaTeX2e}[2021/05/01]
 %<package>\ProvidesPackage{tracefnt}
-%<package>     [2019/10/11 v3.0l  Standard LaTeX package (font tracing)]
+%<package>     [2020/12/22 v3.0n  Standard LaTeX package (font tracing)]
 % \fi
 % \ProvidesFile{ltfsstrc.dtx}
-%              [2020/02/03 v3.0l LaTeX Kernel (NFSS tracing)]
+%              [2020/12/22 v3.0n LaTeX Kernel (NFSS tracing)]
 %
 % \iffalse
 %<+checkmem>\CHECKMEM
@@ -190,7 +190,7 @@
 % special package file named \texttt{trace.sty}.\footnote{This package
 % is not in distribution at the moment (and probably doesn't any
 % longer work). Think of this part of the code as being historical
-% artefacts.}
+% artifacts.}
 %    \begin{macrocode}
 %<+debug> \input trace.sty
 %    \end{macrocode}
@@ -420,19 +420,25 @@
 %    \end{macrocode}
 %  \end{macro}
 %
+
+%    \begin{macrocode}
+%<*2ekernel|latexrelease|package>
+%<latexrelease>\IncludeInRelease{2021/05/01}%
+%<latexrelease>                 {\selectfont}{Add hook to \selectfont}%
+%    \end{macrocode}
 %
+%
+%
+%
+% \begin{macro}{\selectfont}
 % \changes{v1.0j}{1990/02/18}
 %      {Redefine unprotected version \cs{p at selectfont}
 %                           instead of \cs{selectfont}.}
-%
-%
-% \begin{macro}{\selectfont}
 % \changes{v1.1a}{1989/12/16}{Changed order of calls.}
 % \changes{v2.3f}{1994/05/12}{Use \cs{DeclareRobustCommand}}
 %    The macro |\selectfont| is called whenever a font change must
 %    take place.
 %    \begin{macrocode}
-%<*2ekernel|package>
 \DeclareRobustCommand\selectfont
         {%
 %    \end{macrocode}
@@ -456,6 +462,69 @@
     \ifx\f at linespread\baselinestretch \else
       \set at fontsize\baselinestretch\f at size\f at baselineskip \fi
 %    \end{macrocode}
+%
+%    The series and shape updates are only prepared by
+%    \cs{fontseries} and \cs{fontshape} but not executed until after
+%    we are ready to change the font face. This way they happen after
+%    a possibly new family is set which is important because they
+%    look at the available font faces in that family and alter the
+%    selection based on availibility. Several calls to \cs{fontseries}
+%    or \cs{fontshape} are delayed in the order in which they appear,
+%    so that by switching them one can work around missing
+%    intermediate font faces and avoid substitutions.
+%
+%    We first attempt to do the merge without any substitution. As we
+%    might end up with a non-existing font face we may have to restart
+%    and therefore save the current values of \cs{f at series} and
+%    \cs{f at shape} before the merge.
+%
+%    But first we make a quick test to see if there are any delayed
+%    actions, because if not it is pointless to make all the
+%    assignments and try loading a missing fontshape.
+%
+% \changes{v3.0n}{2020/12/22}{Execute delayed series and shape updates (gh/444)}
+%    \begin{macrocode}
+    \ifx\delayed at f@adjustment\@empty
+    \else
+      \let\f at shape@saved\f at shape
+      \let\f at series@saved\f at series      
+%    \end{macrocode}
+%    The we run the delayed adjustments (which is using the
+%    \cs{.. at without@substitution} commands
+%    \begin{macrocode}
+      \delayed at f@adjustment
+%    \end{macrocode}
+%    We then check if the resulting cominbation is valid but for this
+%    we have to make sure the the appropiate \texttt{.fd} is loaded if
+%    that hasn't happened so far.
+%    \begin{macrocode}
+      \maybe at load@fontshape
+      \ifcsname \f at encoding/\f at family/\f at series/\f at shape \endcsname
+%    \end{macrocode}
+%    If this macro is defined then we are good and no further action
+%    is necessary.
+%    
+%    Otherwise the combination is not valid, so we redo the merge but
+%    this time with substitutions.
+%    \begin{macrocode}
+      \else
+        \let\f at shape\f at shape@saved
+        \let\f at series\f at series@saved
+        \let\delayed at merge@font at shape\merge at font@shape
+        \let\delayed at merge@font at series\merge at font@series
+        \delayed at f@adjustment
+        \let\delayed at merge@font at shape\merge at font@shape at without@substitution
+        \let\delayed at merge@font at series\merge at font@series at without@substitution
+      \fi
+%    \end{macrocode}
+%    Now the series and shape values are updated and we clear
+%    \cs{delayed at f@adjustment}. This is important because on the next
+%    execution of \cs{selectfont} we should not mistakenly redo the
+%    delayed actions if there wasn't any series or shape change.
+%    \begin{macrocode}
+      \let\delayed at f@adjustment\@empty
+    \fi
+%    \end{macrocode}
 %    Then we generate the internal name of the font
 %    by concatenating {\em family}, {\em series},
 %    {\em shape}, and current {\em size},
@@ -478,18 +547,13 @@
 %    \begin{macrocode}
     \font at name
 %    \end{macrocode}
-%    If |\tracingfonts| is
-%    greater than 2 we also show the font switch.
-%    We do this before |\glb at settings| is called since this
-%    macro might redefine |\font at name|.
-% \changes{v1.0k}{1990/03/14}{Added code for TeX3.}
-% \changes{v1.0i}{1990/02/16}{Changed \cs{f at size} to \cs{lcl at currsize}
-%         (see fam file).}
+%    
+%    After switching fonts we run a hook, so that packages can make
+%    last minute alterations based on the new font (originally provided
+%    in \pkg{everysel} but using a different interface).
+% \changes{v3.0m}{2020/12/03}{Install a hook in \cs{selectfont} (gh/444)}
 %    \begin{macrocode}
-%<*trace>
-    \ifnum \tracingfonts>\tw@
-      \@font at info{Switching to \font at name}\fi
-%</trace>
+    \UseHook{selectfont}%
 %    \end{macrocode}
 %    Finally we call |\size at update|. This macro is normally empty but
 %    will contain actions (like setting the |\baselineskip|) that have
@@ -514,11 +578,69 @@
 % \end{macro}
 %
 %
+%  \begin{macro}{selectfont}
+%    Declare the hook used in selecfont in the kernel, but not
+%    inside the \pkg{tracefnt} package.
+%    \begin{macrocode}
+%<-trace>\NewHook{selectfont}
+%    \end{macrocode}
+%  \end{macro}
 %
+%
+%    If |\tracingfonts| is
+%    greater than 2 we also show the font switch inside \cs{selectfont}.
+%    We do this by adding this code to the hook in the \pkg{tracefnt} package:
+%    macro might redefine |\font at name|.
+%    \begin{macrocode}
+%<*trace>
+\AddToHook{selectfont}
+   {\ifnum \tracingfonts>\tw@
+       \@font at info{Switching to \font at name}\fi}
+%</trace>
+%    \end{macrocode}
+%
+%
+%    \begin{macrocode}
+%</2ekernel|latexrelease|package>
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
+%
+%    With \cs{selectfont} having different definitions in different
+%    kernels we also have to provide them in the \texttt{tracefnt}
+%    package to support rollback. In packages that works a bit
+%    differently and therefore we have to provide an empty block there.   
+%    \begin{macrocode}
+%<package>\IncludeInRelease{2021/05/01}%
+%<package>                 {\selectfont}{Add hook to \selectfont}%
+%<package>\EndIncludeInRelease
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<latexrelease|package>\IncludeInRelease{0000/00/00}%
+%<latexrelease|package>                 {\selectfont}{Add hook to \selectfont}%
+%<latexrelease|package>
+%<latexrelease|package>\DeclareRobustCommand\selectfont
+%<latexrelease|package>   {%
+%<latexrelease|package>    \ifx\f at linespread\baselinestretch \else
+%<latexrelease|package>      \set at fontsize\baselinestretch\f at size\f at baselineskip \fi
+%<latexrelease|package>    \xdef\font at name{%
+%<latexrelease|package>      \csname\curr at fontshape/\f at size\endcsname}%
+%<latexrelease|package>    \pickup at font
+%<latexrelease|package>    \font at name
+%<latexrelease|package>    \size at update
+%<latexrelease|package>    \enc at update
+%<latexrelease|package>   }
+%<latexrelease|package>
+%<latexrelease|package>\EndIncludeInRelease
+%    \end{macrocode}
+%    
+%
+%
 %  \begin{macro}{\set at fontsize}
 %    The macro |\set at fontsize| does the actual work. First it assigns
 %    new values to |\f at size|, |\f at baselineskip| and |\f at linespread|.
 %    \begin{macrocode}
+%<*2ekernel|package>
 \def\set at fontsize#1#2#3{%
     \@defaultunits\@tempdimb#2pt\relax\@nnil
     \edef\f at size{\strip at pt\@tempdimb}%
@@ -1245,7 +1367,7 @@
 %  Now, we are through with the case of a simple size, except for
 %  calling the size function. This will be handled later, as it is
 %  the same mechanism for all types of size specification. We will
-%  now proceed to macors for extraction of size range specification.
+%  now proceed to macros for extraction of size range specification.
 %
 %
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/lthooks.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/lthooks.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/lthooks.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %%
-%% File: lthooks.dtx (C) Copyright 2020 Frank Mittelbach,
+%% File: lthooks.dtx (C) Copyright 2020,2021 Frank Mittelbach,
 %%                                      Phelype Oleinik & LaTeX Team
 %
 % This file is part of the LaTeX base system.
@@ -31,8 +31,8 @@
 %%% From File: lthooks.dtx
 %
 %    \begin{macrocode}
-\def\lthooksversion{v1.0e}
-\def\lthooksdate{2020/10/23}
+\def\lthooksversion{v1.0h}
+\def\lthooksdate{2021/01/07}
 %    \end{macrocode}
 %
 %<*driver>
@@ -222,11 +222,13 @@
 %   \begin{syntax}
 %     \cs{AddToHook} \Arg{hook}\oarg{label}\Arg{code}
 %   \end{syntax}
-%    Adds \meta{code} to the \meta{hook} labeled by \meta{label}. If
-%    the optional argument \meta{label} is not provided, if \cs{AddToHook}
-%    is used in a package/class, then the current
-%    package/class name is used, otherwise \hook{top-level} is
-%    used~(see section~\ref{sec:default-label}).
+%    Adds \meta{code} to the \meta{hook} labeled by \meta{label}.
+%    When the optional argument \meta{label} is not provided, the
+%    \meta{default label} is used (see section~\ref{sec:default-label}).
+%    If \cs{AddToHook} is used in a package/class, the
+%    \meta{default label} is the package/class name, otherwise it is
+%    \hook{top-level} (the \hook{top-level} label is treated
+%    differently:  see section~\ref{sec:top-level}).
 %
 %    If there already exists code under the \meta{label} then the new
 %    \meta{code} is appended to the existing one (even if this is a reversed hook).
@@ -234,10 +236,10 @@
 %    \meta{label}, first apply \cs{RemoveFromHook}.
 %
 %    The hook doesn't have to exist for code to be added to
-%    it. However, if it is not declared later then obviously the
+%    it. However, if it is not declared, then obviously the
 %    added \meta{code} will never be executed.  This
 %    allows for hooks to work regardless of package loading order and
-%    enables packages to add to hook of other packages without
+%    enables packages to add to hooks from other packages without
 %    worrying whether they are actually used in the current document.
 %    See section~\ref{sec:querying}.
 %
@@ -251,10 +253,8 @@
 %     \cs{RemoveFromHook} \Arg{hook}\oarg{label}
 %   \end{syntax}
 %    Removes any code labeled by \meta{label} from the \meta{hook}.
-%    If the optional
-%    argument \meta{label} is not provided, if \cs{AddToHook}
-%    is used in a package/class, then the current
-%    package/class name is used, otherwise \hook{top-level} is used.
+%    When the optional argument \meta{label} is not provided, the
+%    \meta{default label} is used (see section~\ref{sec:default-label}).
 %
 %    If the code for that \meta{label} wasn't yet added to the
 %    \meta{hook}, an order is set so that when some code attempts to add
@@ -273,7 +273,7 @@
 % \medskip
 %
 % In contrast to the \texttt{voids} relationship between two labels
-% in a \cs{DeclareHookrule} this is a destructive operation as the
+% in a \cs{DeclareHookRule} this is a destructive operation as the
 % labeled code is removed from the hook data structure, whereas the
 % relationship setting can be undone by providing a different
 % relationship later.
@@ -367,7 +367,8 @@
 % token, a low-level \TeX{} error is raised (namely, the \meta{hook} is
 % expanded using \TeX's \cs{csname}\ldots\cs{endcsname}, as such,
 % Unicode characters are allowed in \meta{hook} and \meta{label}
-% arguments).  The arguments of \cs{UseHook} and \cs{UseOneTimeHook} are
+% arguments).  The arguments of \cs{UseHook}, \cs{UseOneTimeHook},
+% \cs{IfHookEmptyTF}, and \cs{IfHookExistsTF} are
 % processed much in the same way except that spaces are not trimmed
 % around the argument, for better performance.
 %
@@ -377,10 +378,10 @@
 % chunk and to prevent clashes.  This should be the standard practice,
 % so this hook management code provides a shortcut to refer to the
 % current package in the name of a \meta{hook} and in a \meta{label}.
-% If \meta{hook} name or \meta{label} consist just of a single dot
+% If the \meta{hook} name or the \meta{label} consist just of a single dot
 % (|.|), or starts with a dot followed by a slash (|./|) then the dot
 % denotes the \meta{default label} (usually the current package or class
-% name---see~\cs{DeclareDefaultHookLabel}).
+% name---see~\cs{SetDefaultHookLabel}).
 % A \enquote{|.|} or \enquote{|./|} anywhere else in a \meta{hook} or in
 % \meta{label} is treated literally and is not replaced.
 %
@@ -403,15 +404,15 @@
 %   \AddToHook {file/after/foo.tex}{code}                  % unchanged
 % \end{verbatim}
 %
-% The \meta{default label} is automatically set to the name of the
-% current package or class (using \cs{@currname}).  If \cs{@currname}
-% is not set (because the hook command is used outside of a package, or
-% the current file wasn't loaded with \cs{usepackage} or
-% \cs{documentclass}), then the \texttt{top-level} is used as the
-% \meta{default label}.
+% The \meta{default label} is automatically set equal to the name of the
+% current package or class at the time the package is loaded.  If the
+% hook command is used outside of a package, or the current file wasn't
+% loaded with \cs{usepackage} or \cs{documentclass}, then the
+% \texttt{top-level} is used as the \meta{default label}.  This may have
+% exceptions---see \cs{PushDefaultHookLabel}.
 %
 % This syntax is available in all \meta{label} arguments and most
-% \meta{hook}, both in the \LaTeXe{} interface, and the \LaTeX3
+% \meta{hook} arguments, both in the \LaTeXe{} interface, and the \LaTeX3
 % interface described in section~\ref{sec:l3hook-interface}.
 %
 % Note, however, that the replacement of |.| by the \meta{default label}
@@ -430,29 +431,104 @@
 % In some cases, for example in large packages, one may want to separate
 % it in logical parts, but still use the main package name as
 % \meta{label}, then the \meta{default label} can be set using
-% \cs{DeclareDefaultHookLabel}:
+% \cs{SetDefaultHookLabel} or
+% \cs{PushDefaultHookLabel}..\cs{PopDefaultHookLabel}.
 %
-% \begin{function}{\DeclareDefaultHookLabel}
+% \begin{function}{\PushDefaultHookLabel,\PopDefaultHookLabel}
 %   \begin{syntax}
-%     \cs{DeclareDefaultHookLabel} \Arg{default label}
+%     \cs{PushDefaultHookLabel} \Arg{default label}
+%     \quad \meta{code}
+%     \cs{PopDefaultHookLabel}
 %   \end{syntax}
-%   Sets the \meta{default label} to be used in \meta{label} arguments.
-%   If \cs{DeclareDefaultHookLabel} is not used in the
-%   current package, \cs{@currname} is used instead.  If \cs{@currname}
-%   is not set, the code is assumed to be in the main document, in which
-%   case \texttt{top-level} is used.
+%   \cs{PushDefaultHookLabel} sets the current \meta{default label} to
+%   be used in \meta{label} arguments, or when replacing a leading
+%   ``|.|'' (see above).  \cs{PopDefaultHookLabel} reverts the
+%   \meta{default label} to its previous value.
 %
-%   The effect of \cs{DeclareDefaultHookLabel} holds for the current
-%   file, and is reset to the previous value when the file is closed.
+%   Inside a package or class, the \meta{default label} is equal to the
+%   package or class name, unless explicitly changed.  Everywhere else,
+%   the \meta{default label} is |top-level| (see
+%   section~\ref{sec:top-level}) unless explicitly changed.
+%
+%   The effect of \cs{PushDefaultHookLabel} holds until the next
+%   \cs{PopDefaultHookLabel}.  \cs{usepackage} (and \cs{RequirePackage}
+%   and \cs{documentclass}) internally use
+%   \begin{quote}
+%     \cs{PushDefaultHookLabel}\Arg{package name} \\
+%     \null \quad  \meta{package code} \\
+%     \cs{PopDefaultHookLabel}
+%   \end{quote}
+%   to set the \meta{default label} for the package or class file.
+%   Inside the \meta{package code} the \meta{default label} can also be
+%   changed with \cs{SetDefaultHookLabel}.  \cs{input} and other
+%   file input-related commands from the \LaTeX{} kernel do not use
+%   \cs{PushDefaultHookLabel}, so code within files loaded by these
+%   commands does \emph{not} get a dedicated \meta{label}! (that is, the
+%   \meta{default label} is the current active one when the file was
+%   loaded.)
+%
+%   Packages that provide their own package-like interfaces
+%   (Ti\textit{k}Z's \cs{usetikzlibrary}, for example) can use
+%   \cs{PushDefaultHookLabel} and \cs{PopDefaultHookLabel} to set
+%   dedicated labels and emulate \cs{usepackage}-like hook behaviour
+%   within those contexts.
+%
+%   The |top-level| label is treated differently, and is reserved to the
+%   user document, so it is not allowed to change the
+%   \meta{default label} to |top-level|.
 % \end{function}
 %
+% \begin{function}{\SetDefaultHookLabel}
+%   \begin{syntax}
+%     \cs{SetDefaultHookLabel} \Arg{default label}
+%   \end{syntax}
+%   Similarly to \cs{PushDefaultHookLabel},
+%   sets the current \meta{default label} to
+%   be used in \meta{label} arguments, or when replacing a leading
+%   ``|.|''. The effect holds until the label is changed again or until
+%   the next \cs{PopDefaultHookLabel}.  The difference between
+%   \cs{PushDefaultHookLabel} and \cs{SetDefaultHookLabel} is that the
+%   latter does not save the current \meta{default label}.
 %
+%   This command is useful when a large package is composed of several
+%   smaller packages, but all should have the same \meta{label}, so
+%   \cs{SetDefaultHookLabel} can be used at the beginning of each
+%   package file to set the correct label.
+%
+%   \cs{SetDefaultHookLabel} is not allowed in the main document, where
+%   the \meta{default label} is |top-level| and there is no
+%   \cs{PopDefaultHookLabel} to end its effect.
+%   It is also not allowed to change the \meta{default label} to
+%   |top-level|.
+% \end{function}
+%
+% \subsubsection{The \texttt{top-level} label}
+% \label{sec:top-level}
+%
+% The |top-level| label, assigned to code added from the main document,
+% is different from other labels.  Code added to hooks (usually
+% \cs{AtBeginDocument}) in the preamble is almost always to change
+% something defined by a package, so it should go at the very end of the
+% hook.
+%
+% Therefore, code added in the |top-level| is always executed at the end
+% of the hook, regardless of where it was declared.  If the hook is
+% reversed (see \cs{NewReversedHook}), the |top-level| chunk is executed
+% at the very beginning instead.
+%
+% Rules regarding |top-level| have no effect:  if a user wants to have a
+% specific set of rules for a code chunk, they should use a different
+% label to said code chunk, and provide a rule for that label instead.
+%
+% The |top-level| label is exclusive for the user, so trying to add code
+% with that label from a package results in an error.
+%
 % \subsubsection{Defining relations between hook code}
 %
 % The default assumption is that code added to hooks by different
-% packages is independent and the order in which it is executed is
-% irrelevant. While this is true in many case it is  obviously false
-% in many others.
+% packages are independent and the order in which they are executed is
+% irrelevant. While this is true in many cases it is obviously false
+% in others.
 %
 % Before the hook management system was introduced
 % packages had to take elaborate precaution to determine of some other
@@ -519,7 +595,7 @@
 %    There can only be a single relation between two labels for a
 %    given hook,
 %    i.e., a later \cs{DeclareHookrule} overwrites any previous
-%    delcaration.
+%    declaration.
 %
 %    The \meta{hook} and \meta{label} can be specified using the
 %    dot-syntax to denote the current package name.
@@ -589,7 +665,8 @@
 % its permanent code pool, or to its ``next'' token list.  The hook
 % doesn't need to be declared to have code added to its code pool.
 % A hook is said to exist when it was declared with \cs{NewHook} or
-% some variant thereof.
+% some variant thereof.  Generic \hook{file} and \hook{env} hooks are
+% automatically declared when code is added to them.
 %
 % \begin{function}[EXP]{\IfHookEmptyTF}
 %   \begin{syntax}
@@ -650,6 +727,7 @@
 %   \item
 %      any code executed on the next invocation only.
 %   \end{itemize}
+% \end{function}
 %
 %   \cs{LogHook} prints the information to the |.log| file, and
 %   \cs{ShowHook} prints them to the terminal/command window and starts
@@ -660,6 +738,7 @@
 %
 %^^A   % Code for the listing below:
 %^^A   \NewHook{example-hook}
+%^^A   \AddToHook{example-hook}{[code from 'top-level']}
 %^^A   \AddToHook{example-hook}[foo]{[code from package 'foo']}
 %^^A   \AddToHook{example-hook}[bar]{[from package 'bar']}
 %^^A   \AddToHook{example-hook}[baz]{[package 'baz' is here]}
@@ -680,6 +759,8 @@
 %   >     foo -> [code from package 'foo']
 %   >     bar -> [from package 'bar']
 %   >     baz -> [package 'baz' is here]
+%   > Document-level (top-level) code (executed last):
+%   >     -> [code from 'top-level']
 %   > Extra code for next invocation:
 %   >     -> [one-time code]
 %   > Rules:
@@ -686,7 +767,7 @@
 %   >     foo|baz with relation >
 %   >     baz|bar with default relation <
 %   > Execution order (after applying rules):
-%   >     bar, baz, foo.
+%   >     baz, foo, bar.
 %   \end{verbatim}
 %
 %   In the listing above, lines~3 to~5 show the three code chunks added
@@ -695,7 +776,18 @@
 %   \quad \meta{label}\verb| -> |\meta{code}
 %   \end{quote}
 %
-%   Line~7 shows the code chunk for the next execution of the hook in
+%   Line~7 shows the code chunk added by the user in the main document
+%   (labeled |top-level|) in the format
+%   \begin{quote}
+%   \quad\verb|Document-level (top-level) code (executed |%^^A
+%              \meta{first\texttt{\string|}last}\verb|):|\\
+%   \quad\verb|    -> |\meta{\texttt{top-level} code}
+%   \end{quote}
+%   This code will be either the first or last code executed by the hook
+%   (|last| if the hook is normal, |first| if it is reversed).  This
+%   chunk is not affected by rules and does not take part in sorting.
+%
+%   Line~9 shows the code chunk for the next execution of the hook in
 %   the format
 %   \begin{quote}
 %   \quad \verb|-> |\meta{next-code}
@@ -705,7 +797,7 @@
 %   earlier, which can only be removed from that hook by doing
 %   \verb|\RemoveFromHook{|\meta{label}|}[example-hook]|.
 %
-%   Lines~9 and~10 show the rules declared that affect this hook in the
+%   Lines~11 and~12 show the rules declared that affect this hook in the
 %   format
 %   \begin{quote}
 %   \quad \meta{label-1}\verb+|+\meta{label-2}| with |%^^A
@@ -715,11 +807,10 @@
 %   \meta{label-2}, in that order, as detailed in \cs{DeclareHookRule}.
 %   If the relation is \texttt{default} it means that that rule applies
 %   to \meta{label-1} and \meta{label-2} in \emph{all} hooks, (unless
-%   overrided by a non-default relation).
+%   overridden by a non-default relation).
 %
-%   Finally, line~12 lists the labels in the hook after sorting;
+%   Finally, line~14 lists the labels in the hook after sorting;
 %   that is, in the order they will be executed when the hook is used.
-% \end{function}
 %
 %
 % \subsubsection{Debugging hook code}
@@ -749,8 +840,9 @@
 % \begin{function}
 %   {\hook_new:n,\hook_new_reversed:n,\hook_new_pair:nn}
 %   \begin{syntax}
-%     \cs{hook_new:n}\Arg{hook}
-%     \cs{hook_new_pair:nn}\Arg{hook-1}\Arg{hook-2}
+%     \cs{hook_new:n} \Arg{hook}
+%     \cs{hook_new_reversed:n} \Arg{hook}
+%     \cs{hook_new_pair:nn} \Arg{hook-1} \Arg{hook-2}
 %   \end{syntax}
 %   Creates a new \meta{hook} with normal or reverse ordering of code
 %    chunks. \cs{hook_new_pair:nn} creates a pair of such hooks with
@@ -782,7 +874,6 @@
 %     Changes the \Arg{hook} status so that from now on any addition to
 %     the hook code is executed immediately. Then execute any
 %     \Arg{hook} code already set up.
-%    \fmi{better L3 name?}
 %
 %    The \meta{hook} \emph{cannot} be specified using the dot-syntax.
 %    A leading |.| is treated literally.
@@ -954,17 +1045,19 @@
 %    \texttt{packageB}, \texttt{packageC} which you can verify with
 %    \cs{ShowHook}\texttt{\{myhook\}}:
 %\begin{verbatim}
-%   The hook 'myhook':
-%    Code chunks:
-%       packageA -> \typeout {A}
-%       packageB -> \typeout {B}
-%       packageC -> \typeout {C}
-%    Extra code next invocation:
-%       ---
-%    Rules:
-%       ---
-%    Execution order:
-%       packageA, packageB, packageC
+%    -> The hook 'myhook':
+%    > Code chunks:
+%    >     packageA -> \typeout {A}
+%    >     packageB -> \typeout {B}
+%    >     packageC -> \typeout {C}
+%    > Document-level (top-level) code (executed last):
+%    >     ---
+%    > Extra code for next invocation:
+%    >     ---
+%    > Rules:
+%    >     ---
+%    > Execution order:
+%    >     packageA, packageB, packageC.
 %\end{verbatim}
 %    The reason is that the code chunks are internally saved in a property list
 %    and the initial order of such a property list is the order in
@@ -988,17 +1081,19 @@
 %\end{verbatim}
 %    instead of the previous lines we get
 %\begin{verbatim}
-%   The hook 'myhook':
-%    Code chunks:
-%       packageA -> \typeout {A}
-%       packageB -> \typeout {B}
-%       packageC -> \typeout {C}
-%    Extra code next invocation:
-%       ---
-%    Rules:
-%       packageA|packageB with relation before
-%    Execution order (after applying rules):
-%       packageA, packageC, packageB
+%    -> The hook 'myhook':
+%    > Code chunks:
+%    >     packageA -> \typeout {A}
+%    >     packageB -> \typeout {B}
+%    >     packageC -> \typeout {C}
+%    > Document-level (top-level) code (executed last):
+%    >     ---
+%    > Extra code for next invocation:
+%    >     ---
+%    > Rules:
+%    >     packageB|packageA with relation >
+%    > Execution order (after applying rules):
+%    >     packageA, packageC, packageB.
 %\end{verbatim}
 %    As you can see the code chunks are still in the same order, but
 %    in the execution order for the labels \texttt{packageB} and
@@ -1010,7 +1105,7 @@
 %    doesn't run at all as there is nothing to resolve).
 %    Incidentally, if we had instead specified the redundant rule
 %\begin{verbatim}
-%    \DeclareHookRule{myhook}{packageB}{before}{label-3}
+%    \DeclareHookRule{myhook}{packageB}{before}{packageC}
 %\end{verbatim}
 %    the execution order would not have changed.
 %
@@ -1039,17 +1134,17 @@
 %    \AddToHook{env/quote/after} [package-1]{\end{itshape}}
 %\end{verbatim}
 %    As a result, all quotes will be in italics.
-%    Now suppose further that the user wants the quotes also in blue
-%    and therefore adds:
+%    Now suppose further that another |package-too| makes the quotes
+%    also in blue and therefore adds:
 %\begin{verbatim}
 %    \usepackage{color}
-%    \AddToHook{env/quote/before}{\begin{color}{blue}}
-%    \AddToHook{env/quote/after} {\end{color}}
+%    \AddToHook{env/quote/before}[package-too]{\begin{color}{blue}}
+%    \AddToHook{env/quote/after} [package-too]{\end{color}}
 %\end{verbatim}
 %    Now if the \hook{env/quote/after} hook would be a normal hook we
 %    would get the same execution order in  both hooks, namely:
 %\begin{verbatim}
-%    package-1, top-level
+%    package-1, package-too
 %\end{verbatim}
 %    (or vice versa) and as a result, would get:
 %\begin{verbatim}
@@ -1063,16 +1158,18 @@
 %    the correct sequence and \cs{ShowHook} would give us the
 %    following output:
 %\begin{verbatim}
-%   The hook 'env/quote/after':
-%    Code chunks:
-%       package-1 -> \end {itshape}
-%       top-level -> \end {color}
-%    Extra code next invocation:
-%       ---
-%    Rules:
-%       ---
-%    Execution order (after reversal):
-%       top-level, package-1
+%    -> The hook 'env/quote/after':
+%    > Code chunks:
+%    >     package-1 -> \end {itshape}
+%    >     package-too -> \end {color}
+%    > Document-level (top-level) code (executed first):
+%    >     ---
+%    > Extra code for next invocation:
+%    >     ---
+%    > Rules:
+%    >     ---
+%    > Execution order (after reversal):
+%    >     package-too, package-1.
 %\end{verbatim}
 %
 %    The reversal of the execution order happens before applying any
@@ -1206,13 +1303,15 @@
 %    \hook{begindocument} 
 %    (which is executed inside \verb=\begin{document}=).
 %    However, all code added this way is labeled with the label
-%    \hook{top-level} if done outside of a package or class or with the
-%    package/class name if called inside such a file.
+%    \hook{top-level} (see section~\ref{sec:top-level})
+%    if done outside of a package or class or with the
+%    package/class name if called inside such a file
+%    (see section~\ref{sec:default-label}).
 %
 %    This way one can add further code to the hook using
 %    \cs{AddToHook} or \cs{AtBeginDocument} using a different label
 %    and explicitly order the code chunks as necessary, e.g., run some
-%    code before or after the \hook{top-level} code.  When using the
+%    code before or after another package's code.  When using the
 %    optional argument the call is equivalent to running
 %    \cs{AddToHook} \texttt{\{begindocument\}} \oarg{label}
 %    \Arg{code}.
@@ -1250,8 +1349,8 @@
 %
 %    The few hooks that existed previously in \LaTeXe{} used internally
 %    commands such as \cs{@begindocumenthook} and packages sometimes
-%    augemented them directly rather than working through
-%    \cs{AtBeginDocumement}. For that reason there is currently support
+%    augmented them directly rather than working through
+%    \cs{AtBeginDocument}. For that reason there is currently support
 %    for this, that is, if the system detects that such an internal
 %    legacy hook command contains code it adds it to the new hook
 %    system under the label \texttt{legacy} so that it doesn't get
@@ -1333,8 +1432,8 @@
 %     \cs{BeforeBeginEnvironment} \oarg{label} \Arg{code}
 %   \end{syntax}
 %   This declaration adds to the \hook{env/\meta{env}/before} hook
-%    using by default the current package or class name as a label or
-%    \texttt{top-level} if used in the document directly.
+%    using the \meta{label}.  If \meta{label} is not given, the
+%    \meta{default label} is used (see section~\ref{sec:default-label}).
 % \end{function}
 %
 % \begin{function}{\AtBeginEnvironment}
@@ -1516,7 +1615,7 @@
 %
 %
 %    It is in also possible to use the generic \hook{env/document/end}
-%    hook which is execuded by \cs{end}, i.e., just in front of the
+%    hook which is executed by \cs{end}, i.e., just in front of the
 %    first hook above. Note however that the other generic \cs{end}
 %    environment hook, i.e., \hook{env/document/after} will never get
 %    executed, because by that time \LaTeX{} has finished the document
@@ -1774,7 +1873,83 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\@@_tl_set:Nn,\@@_tl_set:Nx,
+%               \@@_tl_set:cn,\@@_tl_set:cx}
+%   Private copies of a few \pkg{expl3} functions.  \pkg{l3debug} will
+%   only add debugging to the public names, not to these copies, so we
+%   don't have to use \cs{debug_suspend:} and \cs{debug_resume:}
+%   everywhere.
 %
+%   Functions like \cs{@@_tl_set:Nn} have to be redefined, rather than
+%   copied because in \pkg{expl3} they use
+%   \cs[no-index]{__kernel_tl_(g)set:Nx}, which is also patched by
+%   \pkg{l3debug}.
+%   \changes{v1.0h}{2021/01/07}{Manually define some \pkg{l3tl} commands
+%     to work around \pkg{expl3} changes}
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_tl_set:Nn #1#2
+  { \cs_set_nopar:Npx #1 { \__kernel_exp_not:w {#2} } }
+\cs_new_protected:Npn \@@_tl_set:Nx #1#2
+  { \cs_set_nopar:Npx #1 {#2} }
+\cs_generate_variant:Nn \@@_tl_set:Nn { c }
+\cs_generate_variant:Nn \@@_tl_set:Nx { c }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_tl_gset:Nn,\@@_tl_gset:No,\@@_tl_gset:Nx,
+%               \@@_tl_gset:cn,\@@_tl_gset:co,\@@_tl_gset:cx}
+%   Same as above.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_tl_gset:Nn #1#2
+  { \cs_gset_nopar:Npx #1 { \__kernel_exp_not:w {#2} } }
+\cs_new_protected:Npn \@@_tl_gset:No #1#2
+  { \cs_gset_nopar:Npx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
+\cs_new_protected:Npn \@@_tl_gset:Nx #1#2
+  { \cs_gset_nopar:Npx #1 {#2} }
+\cs_generate_variant:Nn \@@_tl_gset:Nn { c }
+\cs_generate_variant:Nn \@@_tl_gset:No { c }
+\cs_generate_variant:Nn \@@_tl_gset:Nx { c }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_tl_gput_right:Nn,\@@_tl_gput_right:No,\@@_tl_gput_right:cn}
+%   Same as above.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_tl_gput_right:Nn #1#2
+  { \@@_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } }
+\cs_generate_variant:Nn \@@_tl_gput_right:Nn { No, cn }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_tl_gput_left:Nn,\@@_tl_gput_left:No}
+%   Same as above.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_tl_gput_left:Nn #1#2
+  {
+    \@@_tl_gset:Nx #1
+      { \__kernel_exp_not:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
+  }
+\cs_generate_variant:Nn \@@_tl_gput_left:Nn { No }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_tl_gset_eq:NN}
+%   Same as above.
+%    \begin{macrocode}
+\cs_new_eq:NN \@@_tl_gset_eq:NN \tl_gset_eq:NN
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_tl_gclear:N,\@@_tl_gclear:c}
+%   Same as above.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_tl_gclear:N #1
+  { \@@_tl_gset_eq:NN #1 \c_empty_tl }
+\cs_generate_variant:Nn \@@_tl_gclear:N { c }
+%    \end{macrocode}
+% \end{macro}
+%
+%
 % \subsection{Providing new hooks}
 %
 % \begin{macro}{\g_@@_..._code_prop,\@@~...,\@@_next~...}
@@ -1808,6 +1983,13 @@
 %    $\meta{reversed}1$ is $+1$ for normal hooks and $-1$ for reversed
 %    ones.
 %
+%    \item[\cs{@@_toplevel~\meta{name}}] This token list stores the code
+%    inserted in the hook from the user's document, in the |top-level|
+%    label.  This label is special, and doesn't participate in sorting.
+%    Instead, all code is appended to it and executed after (or before,
+%    if the hook is reversed) the normal
+%    hook code, but before the |next| code chunk.
+%
 %    \item[\cs{@@_next~\meta{name}}] Finally there is extra code
 %    (normally empty) that is used on the next invocation of the hook
 %    (and then deleted). This can be used to define some special
@@ -1890,9 +2072,9 @@
 % \begin{macro}{\@@_declare:n}
 %   This function declares the basic data structures for a hook without
 %   actually declaring the hook itself.  This is needed to allow adding
-%   to undeclared hooks.  Here it is unnecessary to check whether both
-%   variables exist, since both are declared at the same time (either
-%   both exist, or neither).
+%   to undeclared hooks.  Here it is unnecessary to check whether all
+%   variables exist, since all three are declared at the same time
+%   (either all of them exist, or none).
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_declare:n #1
   {
@@ -1899,6 +2081,7 @@
     \@@_if_exist:nF {#1}
       {
         \prop_new:c { g_@@_#1_code_prop }
+        \tl_new:c { @@_toplevel~#1 }
         \tl_new:c { @@_next~#1 }
       }
   }
@@ -1951,13 +2134,6 @@
 \cs_new_protected:Npn \@@_include_legacy_code_chunk:n #1
   {
 %    \end{macrocode}
-%    If the \pkg{expl3} code is run with checking on then assigning or
-%    using non L3 names such as \cs{@enddocumenthook} with \pkg{expl3}
-%    functions will trigger warnings so we run this code with
-%    debugging explicitly suspended.
-%    \begin{macrocode}
-    \debug_suspend:
-%    \end{macrocode}
 %    If the macro doesn't exist (which is the usual case) then nothing
 %    needs to be done.
 %    \begin{macrocode}
@@ -1975,10 +2151,9 @@
 %    Once added to the hook, we need to clear it otherwise it might
 %    get added again  later if the hook data gets updated.
 %    \begin{macrocode}
-            \tl_gclear:c { @#1hook }
+            \@@_tl_gclear:c { @#1hook }
           }
       }
-    \debug_resume:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1990,29 +2165,22 @@
 % \begin{macro}[EXP]{\@@_parse_label_default:n}
 %   This macro checks if a label was given (not \cs{c_novalue_tl}), and
 %   if so, tries to parse the label looking for a leading \verb|.| to
-%   replace for \cs{@currname}.  Otherwise \cs{@@_currname_or_default:n}
-%   is used to pick \cs{@currname} or the fallback value.
-%
-%   The default |top-level| is hard-coded here.  It once was an
-%   argument, but it's no longer needed. \pho{can't remember why}
+%   replace by \cs{@@_currname_or_default:}.
 %    \begin{macrocode}
 \cs_new:Npn \@@_parse_label_default:n #1
   {
     \tl_if_novalue:nTF {#1}
-      { \@@_currname_or_default:n { top-level } }
-      {
-        \tl_trim_spaces_apply:nN {#1}
-          \@@_parse_dot_label:nn { top-level }
-      }
+      { \@@_currname_or_default: }
+      { \tl_trim_spaces_apply:nN {#1} \@@_parse_dot_label:n }
   }
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[EXP]{\@@_parse_dot_label:nn}
+% \begin{macro}[EXP]{\@@_parse_dot_label:n}
 % \begin{macro}[EXP]{
-%     \@@_parse_dot_label:nw,
+%     \@@_parse_dot_label:w,
 %     \@@_parse_dot_label_cleanup:w,
-%     \@@_parse_dot_label_aux:nw
+%     \@@_parse_dot_label_aux:w
 %   }
 %   Start by checking if the label is empty, which raises an error, and
 %   uses the fallback value.  If not,
@@ -2019,50 +2187,54 @@
 %   split the label at a \verb|./|, if any, and check if no tokens are
 %   before the \verb|./|, or if the only character is a \verb|.|.
 %   If these requirements are fulfilled, the leading
-%   \verb|.| is replaced with \cs{@@_currname_or_default:n}.  Otherwise
+%   \verb|.| is replaced with \cs{@@_currname_or_default:}.  Otherwise
 %   the label is returned unchanged.
 %    \begin{macrocode}
-\cs_new:Npn \@@_parse_dot_label:nn #1 #2
+\cs_new:Npn \@@_parse_dot_label:n #1
   {
     \tl_if_empty:nTF {#1}
       {
-        \msg_expandable_error:nnn { hooks } { empty-label } {#2}
-        #2
+        \msg_expandable_error:nn { hooks } { empty-label }
+        \@@_currname_or_default:
       }
       {
         \str_if_eq:nnTF {#1} { . }
-          { \@@_currname_or_default:n {#2} }
-          { \@@_parse_dot_label:nw {#2} #1 ./ \s_@@_mark }
+          { \@@_currname_or_default: }
+          { \@@_parse_dot_label:w #1 ./ \s_@@_mark }
       }
   }
-\cs_new:Npn \@@_parse_dot_label:nw #1 #2 ./ #3 \s_@@_mark
+\cs_new:Npn \@@_parse_dot_label:w #1 ./ #2 \s_@@_mark
   {
-    \tl_if_empty:nTF {#2}
-      { \@@_parse_dot_label_aux:nw {#1} #3 \s_@@_mark }
+    \tl_if_empty:nTF {#1}
+      { \@@_parse_dot_label_aux:w #2 \s_@@_mark }
       {
-        \tl_if_empty:nTF {#3}
-          { \@@_make_name:n {#2} }
-          { \@@_parse_dot_label_cleanup:w #2 ./ #3 \s_@@_mark }
+        \tl_if_empty:nTF {#2}
+          { \@@_make_name:n {#1} }
+          { \@@_parse_dot_label_cleanup:w #1 ./ #2 \s_@@_mark }
       }
   }
 \cs_new:Npn \@@_parse_dot_label_cleanup:w #1 ./ \s_@@_mark {#1}
-\cs_new:Npn \@@_parse_dot_label_aux:nw #1 #2 ./ \s_@@_mark
-  { \@@_currname_or_default:n {#1} / \@@_make_name:n {#2} }
+\cs_new:Npn \@@_parse_dot_label_aux:w #1 ./ \s_@@_mark
+  { \@@_currname_or_default: / \@@_make_name:n {#1} }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[EXP]{\@@_currname_or_default:n}
+% \begin{macro}[EXP]{\@@_currname_or_default:}
 %   Uses \cs{g_@@_hook_curr_name_tl} if it is set, otherwise tries
-%   \cs{@currname}.  If neither is set, uses the fallback value
-%   \verb|#1| (usually \texttt{top-level}).
+%   \cs{@currname}.  If neither is set, raises an error and uses the
+%   fallback value \verb|label-missing|.
 %    \begin{macrocode}
-\cs_new:Npn \@@_currname_or_default:n #1
+\cs_new:Npn \@@_currname_or_default:
   {
     \tl_if_empty:NTF \g_@@_hook_curr_name_tl
       {
         \tl_if_empty:NTF \@currname
-          { \@@_make_name:n {#1} }
+          {
+            \msg_expandable_error:nnn { hooks } { should-not-happen }
+              { Empty~default~label. }
+            \@@_make_name:n { label-missing }
+          }
           { \@currname }
       }
       { \g_@@_hook_curr_name_tl }
@@ -2071,7 +2243,7 @@
 % \end{macro}
 %
 % \begin{macro}[EXP]{\@@_make_name:n,\@@_make_name:w}
-%   Provides a standard sanitisation of a hook's name.
+%   Provides a standard sanitization of a hook's name.
 %   It uses \cs{cs:w} to build a control sequence out of the hook name,
 %   then uses \cs{cs_to_str:N} to get the string representation of that,
 %   without the escape character.  \cs{cs:w}-based expansion is used
@@ -2213,14 +2385,33 @@
 %    \end{macrocode}
 %    Then try to get the code chunk labeled \verb=#2= from the hook.
 %    If there's code already there, then append \verb=#3= to that,
-%    otherwise just put \verb=#3=.
+%    otherwise just put \verb=#3=.  If the current label is |top-level|,
+%    the code is added to a dedicated token list
+%    \cs[no-index]{@@_toplevel~\meta{hook}} that goes at the end of the
+%    hook (or at the beginning, for a reversed hook), just before
+%   \cs[no-index]{@@_next~\meta{hook}}.
 %    \begin{macrocode}
-    \prop_get:cnNTF { g_@@_#1_code_prop } {#2} \l_@@_return_tl
+    \str_if_eq:nnTF {#2} { top-level }
       {
-        \prop_gput:cno { g_@@_#1_code_prop } {#2}
-          { \l_@@_return_tl #3 }
+        \str_if_eq:eeTF { top-level } { \@@_currname_or_default: }
+          {
+%    \end{macrocode}
+%    If the hook's basic structure does not exist, we need to declare it
+%    with \cs{@@_declare:n}.
+%    \begin{macrocode}
+            \@@_declare:n {#1}
+            \@@_tl_gput_right:cn { @@_toplevel~#1 } {#3}
+          }
+          { \msg_error:nnn { hooks } { misused-top-level } {#1} }
       }
-      { \prop_gput:cnn { g_@@_#1_code_prop } {#2} {#3} }
+      {
+        \prop_get:cnNTF { g_@@_#1_code_prop } {#2} \l_@@_return_tl
+          {
+            \prop_gput:cno { g_@@_#1_code_prop } {#2}
+              { \l_@@_return_tl #3 }
+          }
+          { \prop_gput:cnn { g_@@_#1_code_prop } {#2} {#3} }
+      }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2381,11 +2572,20 @@
   { \@@_strip_double_slash:n {#1} }
 \cs_new:Npn \@@_strip_double_slash:n #1
   { \@@_strip_double_slash:w #1 // \s_@@_mark }
-\cs_new:Npn \@@_strip_double_slash:w #1 // #2 \s_@@_mark
+%    \end{macrocode}
+%   This function is always called after testing if the argument is a
+%   file hook with \cs{@@_if_file_hook:wTF}, so we can assume it has
+%   three parts (it is either \verb|file/before/...| or
+%   \verb|file/after/...|), so we use \verb|#1/#2/#3 //| instead of just
+%   \verb|#1 //| to prevent losing a slash if the file name is empty.
+%   \changes{v1.0h}{2021/01/07}{Assume hook name has at least three
+%     nonempty parts (gh/464)}
+%    \begin{macrocode}
+\cs_new:Npn \@@_strip_double_slash:w #1/#2/#3 // #4 \s_@@_mark
   {
-    \tl_if_empty:nTF {#2}
-      {#1}
-      { \@@_strip_double_slash:w #1 / #2 \s_@@_mark }
+    \tl_if_empty:nTF {#4}
+      { #1/#2/#3 }
+      { \@@_strip_double_slash:w #1/#2/#3 / #4 \s_@@_mark }
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2434,24 +2634,48 @@
 %    hook before its defined (see section~\ref{sec:querying}).
 %    \begin{macrocode}
     \@@_if_exist:nTF {#1}
+      {
 %    \end{macrocode}
 %    Then remove the chunk and run \cs{@@_update_hook_code:n} so
 %    that the execution token list reflects the change if we are after
 %    \verb=\begin{document}=.
+%
+%    If all code is to be removed, clear the code pool
+%    \cs[no-index]{g_@@_\meta{hook}_code_prop}, the top-level code
+%    \cs[no-index]{@@_toplevel~\meta{hook}}, and the next-execution code
+%    \cs[no-index]{@@_next~\meta{hook}}.
 %    \begin{macrocode}
-      {
         \str_if_eq:nnTF {#2} {*}
-          { \prop_gclear:c { g_@@_#1_code_prop } }
           {
+            \prop_gclear:c { g_@@_#1_code_prop }
+            \@@_tl_gclear:c { @@_toplevel~#1 }
+            \@@_tl_gclear:c { @@_next~#1 }
+          }
+          {
 %    \end{macrocode}
-%    Check if the label being removed exists in the code pool.  If it does,
-%    just call \cs{@@_gremove_code_do:nn} to do the removal, otherwise mark it
-%    to be removed.
+%    If the label is |top-level| then clear the token list, as all code
+%    there is under the same label.  Marked removal is not implemented
+%    for |top-level| because it is hard to reliably know that no code
+%    was added to \cs[no-index]{@@_toplevel~\meta{hook}} (granted that
+%    an empty code could be interpreted as that, but then it differs in
+%    behaviour from other labels, in which an empty chunk is still valid
+%    for removal).  Besides, it doesn't make much (if any) sense for
+%    packages to remove |top-level| code.  So here the chunk is just
+%    cleared unconditionally.
 %    \begin{macrocode}
-            \prop_get:cnNTF { g_@@_#1_code_prop } {#2} \l_@@_return_tl
-              { \@@_gremove_code_do:nn }
-              { \@@_mark_removal:nn }
-                  {#1} {#2}
+            \str_if_eq:nnTF {#2} { top-level }
+              { \@@_tl_gclear:c { @@_toplevel~#1 } }
+              {
+%    \end{macrocode}
+%    Otherwise check if the label being removed exists in the code pool.
+%    If it does, just call \cs{@@_gremove_code_do:nn} to do the removal,
+%    otherwise mark it to be removed.
+%    \begin{macrocode}
+                \prop_get:cnNTF { g_@@_#1_code_prop } {#2} \l_@@_return_tl
+                  { \@@_gremove_code_do:nn }
+                  { \@@_mark_removal:nn }
+                      {#1} {#2}
+              }
           }
 %    \end{macrocode}
 %    Finally update the code, if the hook exists.
@@ -2470,6 +2694,7 @@
 %    \end{macrocode}
 %
 % \begin{macro}{\@@_gremove_code_do:nn}
+%   Remove code for a given label.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_gremove_code_do:nn #1 #2
   { \prop_gremove:cn { g_@@_#1_code_prop } {#2} }
@@ -2605,7 +2830,6 @@
 %    Then we call the function to handle the given rule. Throw an error if the
 %    rule is invalid.
 %    \begin{macrocode}
-    \debug_suspend:
     \cs_if_exist_use:cTF { @@_rule_#3_gset:nnn }
       {
           {#1} {#2} {#4}
@@ -2613,7 +2837,6 @@
       }
       { \msg_error:nnnnnn { hooks } { unknown-rule }
                           {#1} {#2} {#3} {#4}        }
-    \debug_resume:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2639,7 +2862,7 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_rule_before_gset:nnn #1#2#3
   {
-    \tl_gset:cx { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl }
+    \@@_tl_gset:cx { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl }
       { \@@_label_ordered:nnTF {#2} {#3} { < } { > } }
   }
 \cs_new_eq:cN { @@_rule_<_gset:nnn } \@@_rule_before_gset:nnn
@@ -2648,7 +2871,7 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_rule_after_gset:nnn #1#2#3
   {
-    \tl_gset:cx { g_@@_#1_rule_ \@@_label_pair:nn {#3} {#2} _tl }
+    \@@_tl_gset:cx { g_@@_#1_rule_ \@@_label_pair:nn {#3} {#2} _tl }
       { \@@_label_ordered:nnTF {#3} {#2} { < } { > } }
   }
 \cs_new_eq:cN { @@_rule_>_gset:nnn } \@@_rule_after_gset:nnn
@@ -2661,7 +2884,7 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_rule_voids_gset:nnn #1#2#3
   {
-    \tl_gset:cx { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl }
+    \@@_tl_gset:cx { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl }
       { \@@_label_ordered:nnTF {#2} {#3} { -> } { <- } }
   }
 %    \end{macrocode}
@@ -2675,9 +2898,9 @@
 %   together in hook |#1|.
 %    \begin{macrocode}
 \cs_new_protected:cpn { @@_rule_incompatible-error_gset:nnn } #1#2#3
-  { \tl_gset:cn { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl } { xE } }
+  { \@@_tl_gset:cn { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl } { xE } }
 \cs_new_protected:cpn { @@_rule_incompatible-warning_gset:nnn } #1#2#3
-  { \tl_gset:cn { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl } { xW } }
+  { \@@_tl_gset:cn { g_@@_#1_rule_ \@@_label_pair:nn {#2} {#3} _tl } { xW } }
 %    \end{macrocode}
 %  \end{macro}
 %
@@ -2722,7 +2945,7 @@
 %  \end{macro}
 %
 % \begin{macro}[EXP]{\@@_if_label_case:nnnnn}
-%   To avoid doing the string comparison twice in \cs{@@_initialize_single:NNNn}
+%   To avoid doing the string comparison twice in \cs{@@_initialize_single:NNn}
 %   (once with \cs{str_if_eq:nn} and again with \cs{@@_label_ordered:nn}),
 %   we use a three-way branching macro that will compare |#1| and |#2|
 %   and expand to \cs{use_i:nnn} if they are equal, \cs{use_ii:nn} if
@@ -2800,7 +3023,6 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_initialize_hook_code:n #1
   {
-    \debug_suspend:
     \@@_debug:n{ \iow_term:x{^^JUpdate~ code~ for~ hook~
                                     '#1' \on at line :^^J} }
 %    \end{macrocode}
@@ -2815,9 +3037,9 @@
 %    If there aren't any code
 %    chunks for the current hook, there is no point in even starting
 %    the sorting routine so we make a quick test for that and in that
-%    case just update \cs{@@~\meta{hook}} to hold the next
-%    code. If there are code chunks we call
-%    \cs{@@_initialize_single:NNNn} and pass to it ready made csnames
+%    case just update \cs{@@~\meta{hook}} to hold the |top-level| and
+%    |next| code chunks. If there are code chunks we call
+%    \cs{@@_initialize_single:NNn} and pass to it ready made csnames
 %    as they are needed several times inside. This way we save a bit
 %    on processing time if we do that up front.
 %    \begin{macrocode}
@@ -2824,9 +3046,14 @@
     \hook_if_exist:nT {#1}
       {
         \prop_if_empty:cTF {g_@@_#1_code_prop}
-          { \tl_gset:co { @@~#1 }
-                        { \cs:w @@_next~#1 \cs_end: } }
           {
+            \@@_tl_gset:co { @@~#1 }
+              {
+                \cs:w @@_toplevel~#1 \exp_after:wN \cs_end:
+                \cs:w @@_next~#1 \cs_end:
+              }
+          }
+          {
 %    \end{macrocode}
 %    By default the algorithm sorts the code chunks and then saves the
 %    result in a token list for fast execution by adding the code one
@@ -2836,9 +3063,9 @@
 %    in preparation is to change two definitions used later on.
 %    \begin{macrocode}
             \@@_if_reversed:nTF {#1}
-              { \cs_set_eq:NN \@@_tl_gput:NV    \tl_gput_left:NV
+              { \cs_set_eq:NN \@@_tl_gput:Nn    \@@_tl_gput_left:Nn
                 \cs_set_eq:NN \@@_clist_gput:NV \clist_gput_left:NV  }
-              { \cs_set_eq:NN \@@_tl_gput:NV    \tl_gput_right:NV
+              { \cs_set_eq:NN \@@_tl_gput:Nn    \@@_tl_gput_right:Nn
                 \cs_set_eq:NN \@@_clist_gput:NV \clist_gput_right:NV }
 %    \end{macrocode}
 %
@@ -2848,9 +3075,8 @@
 %    save the old code property list so that it can be restored later.
 %    \begin{macrocode}
             \prop_set_eq:Nc \l_@@_work_prop { g_@@_#1_code_prop }
-            \@@_initialize_single:cccn
-              { @@~#1 } { @@_next~#1 }
-              { g_@@_#1_labels_clist } {#1}
+            \@@_initialize_single:ccn
+              { @@~#1 } { g_@@_#1_labels_clist } {#1}
 %    \end{macrocode}
 %    For debug display we want to keep track of those hooks that
 %    actually got code added to them, so we record that in plist. We
@@ -2862,7 +3088,6 @@
                                        \g_@@_used_prop {#1}{} }
           }
       }
-    \debug_resume:
   }
 %    \end{macrocode}
 %  \end{macro}
@@ -2918,12 +3143,13 @@
 %  \end{macro}
 %
 %
-%  \begin{macro}{\@@_initialize_single:NNNn,\@@_initialize_single:cccn}
+%  \begin{macro}{\@@_initialize_single:NNn,\@@_initialize_single:ccn}
 %
-%    \cs{@@_initialize_single:NNNn} implements the sorting of the code
+%    \cs{@@_initialize_single:NNn} implements the sorting of the code
 %    chunks for a hook and saves the result in the token list for fast
-%    execution (\verb=#3=). The arguments are \meta{hook-code-plist},
-%    \meta{hook-code-tl}, \meta{hook-next-code-tl},
+%    execution (\verb=#4=). The arguments are \meta{hook-code-plist},
+%    \meta{hook-code-tl}, \meta{hook-top-level-code-tl},
+%    \meta{hook-next-code-tl},
 %    \meta{hook-ordered-labels-clist} and \meta{hook-name} (the latter
 %    is only used for debugging---the \meta{hook-rule-plist} is accessed
 %    using the \meta{hook-name}).
@@ -2935,8 +3161,12 @@
 %    far as possible. The result is a restriction I do not test for at
 %    the moment: a label can't be equal to the number 0!  \fmi{Needs
 %    checking for, just in case}
+%
+%    ^^A #1 <- \@@~#1
+%    ^^A #2 <- \g_@@_#1_labels_clist
+%    ^^A #3 <- #1
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_initialize_single:NNNn #1#2#3#4
+\cs_new_protected:Npn \@@_initialize_single:NNn #1#2#3
   {
 %    \end{macrocode}
 %    Step T1: Initialize the data structure \ldots
@@ -2947,7 +3177,7 @@
 %
 %    Store the name of the hook:
 %    \begin{macrocode}
-    \tl_set:Nn \l_@@_cur_hook_tl {#4}
+    \tl_set:Nn \l_@@_cur_hook_tl {#3}
 %    \end{macrocode}
 %    
 %    We loop over the property list holding the code and record all
@@ -2961,7 +3191,7 @@
        {
          \int_incr:N \l_@@_labels_int
          \seq_put_right:Nn \l_@@_labels_seq {##1}
-         \tl_set:cn { \@@_tl_csname:n {##1} }{0}
+         \@@_tl_set:cn { \@@_tl_csname:n {##1} } { 0 }
          \seq_clear_new:c { \@@_seq_csname:n {##1} }
        }
 %    \end{macrocode}
@@ -2987,7 +3217,7 @@
               { \prop_map_break: }
               { \@@_apply_label_pair:nnn {##1} {####1} }
               { \@@_apply_label_pair:nnn {####1} {##1} }
-                  {#4}
+                  {#3}
           }
       }
 %    \end{macrocode}
@@ -3014,8 +3244,8 @@
 %    \end{macrocode}
 %    
 %    \begin{macrocode}
-    \tl_gclear:N #1
-    \clist_gclear:N #3
+    \@@_tl_gclear:N #1
+    \clist_gclear:N #2
 %    \end{macrocode}
 %
 %    The whole loop combines steps T5--T7:
@@ -3027,11 +3257,11 @@
 %    \begin{macrocode}
         \int_decr:N \l_@@_labels_int
         \prop_get:NVN \l_@@_work_prop \l_@@_front_tl \l_@@_return_tl
-        \@@_tl_gput:NV #1 \l_@@_return_tl
+        \exp_args:NNV \@@_tl_gput:Nn #1 \l_@@_return_tl
 %    \end{macrocode}
 %    
 %    \begin{macrocode}
-        \@@_clist_gput:NV #3 \l_@@_front_tl
+        \@@_clist_gput:NV #2 \l_@@_front_tl
         \@@_debug:n{ \iow_term:x{Handled~ code~ for~ \l_@@_front_tl} }
 %    \end{macrocode}
 %
@@ -3078,27 +3308,31 @@
       }
 %    \end{macrocode}
 %    After we have added all hook code to \verb=#1= we finish it off
-%    with adding extra code for a one time execution. That is stored
-%    in \verb=#2= but is normally empty.
+%    with adding extra code for the |top-level| (\verb=#2=) and for one
+%    time execution (\verb=#3=).  These should normally be empty.  The
+%    |top-level| code is added with \cs{@@_tl_gput:Nn} as that might
+%    change for a reversed hook (then |top-level| is the very first code
+%    chunk added).  The |next| code is always added last.
 %    \begin{macrocode}
-    \tl_gput_right:Nn #1 {#2}
+    \exp_args:NNo \@@_tl_gput:Nn #1 { \cs:w @@_toplevel~#3 \cs_end: }
+    \@@_tl_gput_right:No #1 { \cs:w @@_next~#3 \cs_end: }
   }
 %    \end{macrocode}
-%    
+%
 %    \begin{macrocode}
-\cs_generate_variant:Nn \@@_initialize_single:NNNn {ccc}
+\cs_generate_variant:Nn \@@_initialize_single:NNn { cc }
 %    \end{macrocode}
 %  \end{macro}
 %
 %
 %
-%  \begin{macro}{\@@_tl_gput:NV,\@@_clist_gput:NV}
+%  \begin{macro}{\@@_tl_gput:Nn,\@@_clist_gput:NV}
 %    These append either on the right (normal hook) or on the left
 %    (reversed hook). This is setup up in
 %    \cs{@@_initialize_hook_code:n}, elsewhere their behavior is undefined.
 %    \begin{macrocode}
-\cs_new:Npn \@@_tl_gput:NV     {\ERROR}
-\cs_new:Npn \@@_clist_gput:NV  {\ERROR}
+\cs_new:Npn \@@_tl_gput:Nn    { \ERROR }
+\cs_new:Npn \@@_clist_gput:NV { \ERROR }
 %    \end{macrocode}
 %  \end{macro}
 %
@@ -3347,7 +3581,8 @@
 %    \begin{macrocode}
     \hook_if_exist:nF {#1}
       { \@@_log_line:x { is~not~declared! } }
-    \@@_if_exist:nTF {#1}
+    \hook_if_empty:nTF {#1}
+      { #2 { The~hook~is~empty } }
       {
         \@@_log_line:x { Code~chunks: }
         \prop_if_empty:cTF { g_@@_#1_code_prop }
@@ -3357,11 +3592,27 @@
               { \@@_log_line_indent:x { ##1~->~\tl_to_str:n {##2} } }
           }
 %    \end{macrocode}
-%    
+%
+%    If there is code in the |top-level| token list, print it:
 %    \begin{macrocode}
-        \@@_log_line:x { Extra~code~for~next~invocation:}
+        \@@_log_line:x
+          {
+            Document-level~(top-level)~code
+            \hook_if_exist:nT {#1}
+              { ~(executed~\@@_if_reversed:nTF {#1} {first} {last} ) } :
+          }
         \@@_log_line_indent:x
           {
+            \tl_if_empty:cTF { @@_toplevel~#1 }
+              { --- }
+              { -> ~ \exp_args:Nv \tl_to_str:n { @@_toplevel~#1 } }
+          }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+        \@@_log_line:x { Extra~code~for~next~invocation: }
+        \@@_log_line_indent:x
+          {
             \tl_if_empty:cTF { @@_next~#1 }
               { --- }
 %    \end{macrocode}
@@ -3427,7 +3678,6 @@
               }
           }
       }
-      { #2 { The~hook~is~empty. } }
   }
 %    \end{macrocode}
 %
@@ -3478,7 +3728,7 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_list_one_rule:nnn #1#2#3
   {
-    \@@_list_if_rule_exists:nnnF {#1} {#2} {#3} { }
+    \@@_list_if_rule_exists:nnnF {#1} {#2} {#3}
       { \@@_list_if_rule_exists:nnnF {#1} {#2} { ?? } { } }
   }
 \cs_new_protected:Npn \@@_list_if_rule_exists:nnnF #1#2#3
@@ -3486,7 +3736,9 @@
     \if_cs_exist:w g_@@_ #3 _rule_ #1 | #2 _tl \cs_end:
       \exp_args:Nv \@@_tmp:w
         { g_@@_ #3 _rule_ #1 | #2 _tl } { #1 | #2 } {#3}
+      \exp_after:wN \use_none:nn
     \fi:
+    \use:n
   }
 %    \end{macrocode}
 % \end{macro}
@@ -3528,12 +3780,10 @@
   { \@@_normalize_hook_args:Nn \@@_gput_next_code:nn {#1} }
 \cs_new_protected:Npn \@@_gput_next_code:nn #1 #2
   {
-    \debug_suspend:
     \@@_declare:n {#1}
     \hook_if_exist:nTF {#1}
       { \@@_gput_next_do:nn {#1} {#2} }
       { \@@_try_declaring_generic_next_hook:nn {#1} {#2} }
-    \debug_resume:
   }
 \cs_new_protected:Npn \@@_gput_next_do:nn #1
   {
@@ -3556,8 +3806,8 @@
     \tl_if_empty:cT { @@~#2 }
       { \@@_update_hook_code:n {#2} }
     \tl_if_empty:NT #1
-      { \tl_gset:Nn #1 { \@@_clear_next:n {#2} } }
-    \tl_gput_right:Nn #1
+      { \@@_tl_gset:Nn #1 { \@@_clear_next:n {#2} } }
+    \@@_tl_gput_right:Nn #1
   }
 \cs_new_protected:Npn \@@_clear_next:n #1
   { \cs_gset_eq:cN { @@_next~#1 } \c_empty_tl }
@@ -3565,7 +3815,6 @@
 %  \end{macro}
 %  \end{macro}
 %
-%
 % \subsection{Using the hook}
 %
 % \begin{macro}{\hook_use:n}
@@ -3720,8 +3969,9 @@
 %
 % \begin{macro}[pTF]{\hook_if_empty:n}
 %   Test if a hook is empty (that is, no code was added to that hook).
-%   A hook being empty means that \emph{both} its
-%   \cs[no-index]{g_@@_\meta{hook}_code_prop} and its
+%   A \meta{hook} being empty means that all three of its
+%   \cs[no-index]{g_@@_\meta{hook}_code_prop}, its
+%   \cs[no-index]{@@_toplevel~\meta{hook}} and its
 %   \cs[no-index]{@@_next~\meta{hook}} are empty.
 %    \begin{macrocode}
 \prg_new_conditional:Npnn \hook_if_empty:n #1 { p , T , F , TF }
@@ -3730,7 +3980,11 @@
       {
         \bool_lazy_and:nnTF
             { \prop_if_empty_p:c { g_@@_#1_code_prop } }
-            { \tl_if_empty_p:c { @@_next~#1 } }
+            {
+              \bool_lazy_and_p:nn
+                { \tl_if_empty_p:c { @@_toplevel~#1 } }
+                { \tl_if_empty_p:c { @@_next~#1 } }
+            }
           { \prg_return_true: }
           { \prg_return_false: }
       }
@@ -3812,10 +4066,21 @@
 %    
 %    \begin{macrocode}
 \msg_new:nnn { hooks } { empty-label }
-  { Empty~code~label~\msg_line_context:.~Using~`#1'~instead. }
+  {
+    Empty~code~label~\msg_line_context:.~
+    Using~`\@@_currname_or_default:'~instead.
+  }
 %    \end{macrocode}
-%    
+%
 %    \begin{macrocode}
+\msg_new:nnn { hooks } { no-default-label }
+  {
+    Missing~(empty)~default~label~\msg_line_context:. \\
+    This~command~was~ignored.
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 \msg_new:nnnn { hooks } { unknown-rule }
   { Unknown~ relationship~ `#3'~
     between~ labels~ `#2'~ and~ `#4'~
@@ -3834,6 +4099,51 @@
 %    \end{macrocode}
 %    
 %    \begin{macrocode}
+\msg_new:nnnn { hooks } { misused-top-level }
+  {
+    Illegal~\iow_char:N \\AddToHook{#1}[top-level]{...}.\\
+    'top-level'~is~reserved~for~the~user's~document.
+  }
+  {
+    The~'top-level'~label~is~meant~for~user~code~only,~and~should~only~
+    be~used~(sparingly)~in~the~main~document.~Use~the~default~label~
+    '\@@_currname_or_default:'~for~this~\@cls at pkg,~or~another~
+    suitable~label.
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\msg_new:nnn { hooks } { set-top-level }
+  {
+    You~cannot~change~the~default~label~#1~`top-level'.~Illegal \\
+    \use:nn { ~ } { ~ } \iow_char:N \\#2{#3} \\
+    \msg_line_context:.
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\msg_new:nnn { hooks } { ddhl-deprecated }
+  {
+    \iow_char:N \\DeclareDefaultHookLabel~is~deprecated.\\
+    Use~\iow_char:N \\SetDefaultHookLabel~instead.\\ \\
+    The~deprecated~name~will~be~removed~in~the~next~release.
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\msg_new:nnn { hooks } { extra-pop-label }
+  {
+    Extra~\iow_char:N \\PopDefaultHookLabel. \\
+    This~command~will~be~ignored.
+  }
+\msg_new:nnn { hooks } { missing-pop-label }
+  {
+    Missing~\iow_char:N \\PopDefaultHookLabel. \\
+    The~label~`#1'~was~pushed~but~never~popped.~Something~is~wrong.
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 \msg_new:nnn { hooks } { should-not-happen }
   {
     ERROR!~This~should~not~happen.~#1 \\
@@ -3879,39 +4189,77 @@
 %    \end{macrocode}
 %  \end{macro}
 %
+% \begin{macro}{\SetDefaultHookLabel}
+% \begin{macro}{\PushDefaultHookLabel}
+% \begin{macro}{\PopDefaultHookLabel}
 % \begin{macro}{\DeclareDefaultHookLabel}
-% \begin{macro}{\@@_curr_name_push:n,\@@_curr_name_pop:}
+% \begin{macro}{\@@_curr_name_push:n,\@@_curr_name_push_aux:n}
+% \begin{macro}{\@@_curr_name_pop:}
+% \begin{macro}{\@@_end_document_label_check:}
 %   The token list \cs{g_@@_hook_curr_name_tl} stores the name of the
 %   current package/file to be used as label for hooks.
 %   Providing a consistent interface is tricky, because packages can
 %   be loaded within packages, and some packages may not use
-%   \cs{DeclareDefaultHookLabel} to change the default label (in which case
-%   \cs{@currname} is used, if set).
+%   \cs{SetDefaultHookLabel} to change the default label (in which
+%   case \cs{@currname} is used).
 %
-%   To pull that off, we keep a stack that contains the default label
-%   for each level of input.  The bottom of the stack contains the
-%   default label for the top-level.  Since the string \verb|top-level|
-%   is hardcoded, here this item of the stack is empty.  Also, since
-%   we're in an input level, add \verb|lthooks| to the stack as well.
-%   This stack should never go empty.  An empty entry is added to the
-%   stack to account for the \verb|top-level|.  The item is empty so
-%   that the hard-coded default is used, but a call to
-%   \cs{DeclareDefaultHookLabel} will change it if needed.
+%   To pull that one off, we keep a stack that contains the default
+%   label for each level of input.  The bottom of the stack contains the
+%   default label for the |top-level| (this stack should never go
+%   empty). If we're building the format, set the default label to be
+%   |top-level|:
 %    \begin{macrocode}
-\seq_gpush:Nn \g_@@_name_stack_seq { }
+\tl_gset:Nn \g_@@_hook_curr_name_tl { top-level }
 %    \end{macrocode}
 %
+%   Then, in case we're in \pkg{latexrelease} we push something on
+%   the stack to support roll forward.  But in some rare cases,
+%   \pkg{latexrelease} may be loaded inside another package (notably
+%   \pkg{platexrelease}), so we'll first push the |top-level| entry:
+%    \begin{macrocode}
+%<latexrelease>\seq_gput_right:Nn \g_@@_name_stack_seq { top-level }
+%    \end{macrocode}
+%   then we dissect the \cs{@currnamestack}, adding \cs{@currname} to
+%   the stack:
+% \changes{v1.0f}{2020/11/24}{Support for roll forward (gh/434)}
+%    \begin{macrocode}
+%<latexrelease>\cs_set_protected:Npn \@@_tmp:w #1 #2 #3
+%<latexrelease>  {
+%<latexrelease>    \quark_if_recursion_tail_stop:n {#1}
+%<latexrelease>    \seq_gput_right:Nn \g_@@_name_stack_seq {#1}
+%<latexrelease>    \@@_tmp:w
+%<latexrelease>  }
+%<latexrelease>\exp_after:wN \@@_tmp:w \@currnamestack
+%<latexrelease>  \q_recursion_tail \q_recursion_tail
+%<latexrelease>  \q_recursion_tail \q_recursion_stop
+%    \end{macrocode}
+%   and finalle set the default label to be the \cs{@currname}:
+%    \begin{macrocode}
+%<latexrelease>\tl_gset:Nx \g_@@_hook_curr_name_tl { \@currname }
+%    \end{macrocode}
 %
 %   Two commands keep track of the stack: when a file is input,
-%   \cs{@@_curr_name_push:n} pushes an (empty by default) label to the
-%   stack:
+%   \cs{@@_curr_name_push:n} pushes the current default label to the
+%   stack, and sets the new default label in one go:
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_curr_name_push:n #1
+  { \exp_args:Nx \@@_curr_name_push_aux:n { \@@_make_name:n {#1} } }
+\cs_new_protected:Npn \@@_curr_name_push_aux:n #1
   {
-    \seq_gpush:Nn \g_@@_name_stack_seq {#1}
-    \tl_gset:Nn \g_@@_hook_curr_name_tl {#1}
+    \tl_if_blank:nTF {#1}
+      { \msg_error:nn { hooks } { no-default-label } }
+      {
+        \str_if_eq:nnTF {#1} { top-level }
+          {
+            \msg_error:nnnnn { hooks } { set-top-level }
+              { to } { PushDefaultHookLabel } {#1}
+          }
+          {
+            \seq_gpush:NV \g_@@_name_stack_seq \g_@@_hook_curr_name_tl
+            \tl_gset:Nn \g_@@_hook_curr_name_tl {#1}
+          }
+      }
   }
-%
 %    \end{macrocode}
 %   and when an input is over, the topmost item of the stack is popped,
 %   since the label will not be used again, and \cs{g_@@_hook_curr_name_tl}
@@ -3919,12 +4267,27 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_curr_name_pop:
   {
-    \seq_gpop:NN \g_@@_name_stack_seq \l_@@_return_tl
-    \seq_get:NNTF \g_@@_name_stack_seq \l_@@_return_tl
+    \seq_gpop:NNTF \g_@@_name_stack_seq \l_@@_return_tl
       { \tl_gset_eq:NN \g_@@_hook_curr_name_tl \l_@@_return_tl }
+      { \msg_error:nn { hooks } { extra-pop-label } }
+  }
+%    \end{macrocode}
+%
+%   At the end of the document we want to check if there was no
+%   \cs{@@_curr_name_push:} without a matching \cs{@@_curr_name_pop:}
+%   (not a critical error, but it might indicate that something else is
+%   not quite right):
+%    \begin{macrocode}
+\tl_gput_right:Nn \@kernel at after@enddocument at afterlastpage
+  { \@@_end_document_label_check: }
+\cs_new_protected:Npn \@@_end_document_label_check:
+  {
+    \seq_gpop:NNT \g_@@_name_stack_seq \l_@@_return_tl
       {
-        \msg_error:nnn { hooks } { should-not-happen }
-          { Tried~to~pop~from~an~empty~default~label~stack. }
+        \msg_error:nnx { hooks } { missing-pop-label }
+          { \g_@@_hook_curr_name_tl }
+        \tl_gset_eq:NN \g_@@_hook_curr_name_tl \l_@@_return_tl
+        \@@_end_document_label_check:
       }
   }
 %    \end{macrocode}
@@ -3935,14 +4298,69 @@
 %   Now define a wrapper that replaces the top of the stack with the
 %   argument, and updates \cs{g_@@_hook_curr_name_tl} accordingly.
 %    \begin{macrocode}
+\NewDocumentCommand \SetDefaultHookLabel { m }
+  {
+    \seq_if_empty:NTF \g_@@_name_stack_seq
+      {
+        \msg_error:nnnnn { hooks } { set-top-level }
+          { for } { SetDefaultHookLabel } {#1}
+      }
+      { \exp_args:Nx \@@_set_default_label:n { \@@_make_name:n {#1} } }
+  }
+\cs_new_protected:Npn \@@_set_default_label:n #1
+  {
+    \str_if_eq:nnTF {#1} { top-level }
+      {
+        \msg_error:nnnnn { hooks } { set-top-level }
+          { to } { SetDefaultHookLabel } {#1}
+      }
+      { \tl_gset:Nn \g_@@_hook_curr_name_tl {#1} }
+  }
 \NewDocumentCommand \DeclareDefaultHookLabel { m }
   {
-    \seq_gpop:NN \g_@@_name_stack_seq \l_@@_return_tl
-    \@@_curr_name_push:n {#1}
+    \msg_error:nn { hooks } { ddhl-deprecated }
+    \SetDefaultHookLabel {#1}
   }
 %    \end{macrocode}
+%
+%   The label is only automatically updated with \cs{@onefilewithoptions}
+%   (\cs{usepackage} and \cs{documentclass}), but some packages, like
+%   Ti\emph{k}Z, define package-like interfaces, like
+%   \cs{usetikzlibrary} that are wrappers around \cs{input}, so they
+%   inherit the default label currently in force (usually |top-level|,
+%   but it may change if loaded in another package).  To provide a
+%   package-like behaviour also for hooks in these files, we provide
+%   high-level access to the default label stack.
+%    \begin{macrocode}
+\NewDocumentCommand \PushDefaultHookLabel { m }
+  { \@@_curr_name_push:n {#1} }
+\NewDocumentCommand \PopDefaultHookLabel { }
+  { \@@_curr_name_pop: }
+%    \end{macrocode}
+%
+%   The current label stack holds the labels for all files but the
+%   current one (more or less like \cs{@currnamestack}), and the current
+%   label token list, \cs{g_@@_hook_curr_name_tl}, holds the label for
+%   the current file.  However \cs{@pushfilename} happens before
+%   \cs{@currname} is set, so we need to look ahead to get the
+%   \cs{@currname} for the label.  \pkg{expl3} also requires the current
+%   file in \cs{@pushfilename}, so here we abuse
+%   \cs{@expl at push@filename at aux@@@@} to do \cs{@@_curr_name_push:n}.
+%    \begin{macrocode}
+\cs_gset_protected:Npn \@expl at push@filename at aux@@@@ #1#2#3
+  {
+    \@@_curr_name_push:n {#3}
+    \str_gset:Nx \g_file_curr_name_str {#3}
+    #1 #2 {#3}
+  }
+%    \end{macrocode}
 % \end{macro}
 % \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
 %
 %
 %
@@ -4029,9 +4447,8 @@
 %    \end{macrocode}
 %
 %  \begin{macro}{\@expl@@@initialize at all@@,
-%                \@expl@@@hook at curr@name at push@@n,
 %                \@expl@@@hook at curr@name at pop@@}
-%    
+%
 %    \begin{macrocode}
 \cs_new_eq:NN \@expl@@@initialize at all@@
               \__hook_initialize_all:
@@ -4038,11 +4455,6 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\cs_new_eq:NN \@expl@@@hook at curr@name at push@@n
-              \__hook_curr_name_push:n
-%    \end{macrocode}
-%
-%    \begin{macrocode}
 \cs_new_eq:NN \@expl@@@hook at curr@name at pop@@
               \__hook_curr_name_pop:
 %    \end{macrocode}
@@ -4059,7 +4471,7 @@
 %    just make them do nothing which may or may not work depending on
 %    the code usage.
 % \changes{v1.0d}{2020/10/04}{Definition \cs{AddToHookNext} was supposed
-%                             to be for \cs{AddToHook} vize versa (gh/401)}
+%                             to be for \cs{AddToHook} vice versa (gh/401)}
 %    \begin{macrocode}
 %</2ekernel|latexrelease>
 %<latexrelease>\EndIncludeInRelease

Modified: trunk/Master/texmf-dist/source/latex-dev/base/lthyphen.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/lthyphen.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/lthyphen.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltidxglo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltidxglo.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltidxglo.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltlength.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltlength.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltlength.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltlength.dtx}
-             [2019/08/27 v1.1d LaTeX Kernel (Lengths)]
+             [2020/12/05 v1.1d LaTeX Kernel (Lengths)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltlength.dtx}
@@ -154,7 +154,7 @@
 %    This macro takes the contents of the skip register that is
 %    supplied as its argument and removes the fractional part to make
 %    it a whole number of points. This can be used in class files to
-%    avoid values like |345.4666666pt| when calulating a dimension.
+%    avoid values like |345.4666666pt| when calculating a dimension.
 % \changes{LaTeX2e}{1993/11/22}{Macro added}
 %    \begin{macrocode}
 \def\@settopoint#1{\divide#1\p@\multiply#1\p@}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltlists.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltlists.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltlists.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -31,7 +31,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltlists.dtx}
-             [2020/04/24 v1.0t LaTeX Kernel (List Environments)]
+             [2020/12/05 v1.0t LaTeX Kernel (List Environments)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltlists.dtx}
@@ -112,7 +112,7 @@
 % the entire environment is a single item.  It is defined by
 % letting |\quotation| == |\list{}{...}\item\relax|.  (Note the
 % |\relax|, there in case the first character in the environment is a
-% '['.)  The spacing parameters provide a great deal of flexability in
+% '['.)  The spacing parameters provide a great deal of flexibility in
 % designing the format, including the ability to let the indentation of
 % the first paragraph be different from that of the subsequent ones.
 %
@@ -589,7 +589,7 @@
 %                 when not inlabel flag is false}
 % Because |\par| is sometimes made a no-op it is possible for a missing
 % |\item| to produce a loop that does not fill memory and so never gets
-% trapped by \TeX.  We thus need to trap this here by seting |\par| to
+% trapped by \TeX.  We thus need to trap this here by setting |\par| to
 % count the number of times a paragraph ii is called with no progress
 % being made started.
 %    \begin{macrocode}
@@ -729,7 +729,7 @@
 %    If a section heading changes |\clubpenalty| to keep lines
 %    after it together then this modification is restored via the
 %   |\everypar| mechanism at the start of the next paragraph. As we
-%   destroy the contents of this token here we explicity set
+%   destroy the contents of this token here we explicitly set
 %   |\clubpenalty| back to its default.
 % \changes{v1.0t}{2015/05/10}{Explicitly reset \cs{clubpenalty} before
 %  clearing \cs{everypar}; see also pr/0462 and pr/4065}
@@ -807,7 +807,7 @@
 % \end{macro}
 %
 % \begin{macro}{\@item}
-% \changes{v1.0l}{1996/07/26}{Remove unecessary \cs{global} before
+% \changes{v1.0l}{1996/07/26}{Remove unnecessary \cs{global} before
 %                 \cs{@minipage...}}
 %    \begin{macrocode}
 \def\@item[#1]{%
@@ -889,7 +889,7 @@
       \everypar{}%
     \fi}%
 %    \end{macrocode}
-% \changes{v1.0l}{1996/07/26}{Remove unecessary \cs{global} before
+% \changes{v1.0l}{1996/07/26}{Remove unnecessary \cs{global} before
 %                 \cs{@nobreak...}}
 % \changes{v1.0m}{1996/10/23}{\cs{@nobreak...} moved into the
 %          \cs{everypar} and not executed unconditionally, see above}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltlogos.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltlogos.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltlogos.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2015-2020
+% Copyright (C) 2015-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -28,7 +28,7 @@
 \ProvidesFile{ltluatex.dtx}
 %</driver>
 %<*tex>
-[2020/09/25 v1.1s
+[2020/12/06 v1.1s
 %</tex>
 %<plain>  LuaTeX support for plain TeX (core)
 %<*tex>
@@ -129,7 +129,7 @@
 % \DescribeMacro{\newluachunkname}
 % |newluachunkname{|\meta{chunkname}|}|\\
 % Allocates a number for Lua chunk register, indexed from~$1$.
-% Also enters the name of the regiser (without backslash) into the
+% Also enters the name of the register (without backslash) into the
 % \verb|lua.name| table to be used in stack traces.
 %
 % \noindent
@@ -582,7 +582,7 @@
 % \changes{v1.0a}{2015/09/24}{Macro added}
 %   Category code tables are allocated with a limit half of that used by Lua\TeX{}
 %   for everything else. At the end of allocation there needs to be an
-%   initialisation step. Table~$0$ is already taken (it's the global one for
+%   initialization step. Table~$0$ is already taken (it's the global one for
 %   current use) so the allocation starts at~$1$.
 %    \begin{macrocode}
 \ifx\e at alloc@ccodetable at count\@undefined
@@ -779,8 +779,8 @@
 % \subsection{Lua loader}
 % \changes{v1.1r}{2020/08/10}{Load ltluatex Lua module during format building}
 %
-% Lua code loaded in the format often has to to be loaded again at the
-% beginning of every job, so we define a helper whch allows us to avoid
+% Lua code loaded in the format often has to be loaded again at the
+% beginning of every job, so we define a helper which allows us to avoid
 % duplicated code:
 %
 %    \begin{macrocode}
@@ -1113,7 +1113,7 @@
 %
 % \begin{macro}{new_attribute}
 % \changes{v1.0a}{2015/09/24}{Function added}
-% \changes{v1.1c}{2017/02/18}{Parameterise count used in tracking}
+% \changes{v1.1c}{2017/02/18}{Parameterize count used in tracking}
 %   As attributes are used for Lua manipulations its useful to be able
 %   to assign from this end.
 %    \begin{macrocode}
@@ -1148,7 +1148,7 @@
 % \subsection{Custom whatsit allocation}
 %
 % \begin{macro}{new_whatsit}
-% \changes{v1.1c}{2017/02/18}{Parameterise count used in tracking}
+% \changes{v1.1c}{2017/02/18}{Parameterize count used in tracking}
 % Much the same as for attribute allocation in Lua.
 %    \begin{macrocode}
 local whatsit_count_name = whatsit_count_name or "e at alloc@whatsit at count"
@@ -1169,7 +1169,7 @@
 % \subsection{Bytecode register allocation}
 %
 % \begin{macro}{new_bytecode}
-% \changes{v1.1c}{2017/02/18}{Parameterise count used in tracking}
+% \changes{v1.1c}{2017/02/18}{Parameterize count used in tracking}
 % Much the same as for attribute allocation in Lua.
 % The optional \meta{name} argument is used in the log if given.
 %    \begin{macrocode}
@@ -1192,7 +1192,7 @@
 % \subsection{Lua chunk name allocation}
 %
 % \begin{macro}{new_chunkname}
-% \changes{v1.1c}{2017/02/18}{Parameterise count used in tracking}
+% \changes{v1.1c}{2017/02/18}{Parameterize count used in tracking}
 % As for bytecode registers but also store the name in the
 % |lua.name| table.
 %    \begin{macrocode}
@@ -1735,7 +1735,7 @@
 %
 % \begin{macro}{remove_from_callback}
 % \changes{v1.0a}{2015/09/24}{Function added}
-% \changes{v1.0k}{2015/12/02}{adjust initialisation of cb local (PHG)}
+% \changes{v1.0k}{2015/12/02}{adjust initialization of cb local (PHG)}
 % \changes{v1.0k}{2015/12/02}{Give more specific error messages (PHG)}
 % \changes{v1.1m}{2020/03/07}{Do not call callback.register for user-defined callbacks}
 %   Remove a function from a callback. First check arguments.

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltmath.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltmath.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltmath.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -38,7 +38,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltmath.dtx}
-              [2020/07/27 v1.2g LaTeX Kernel (Math Setup)]
+              [2020/12/05 v1.2h LaTeX Kernel (Math Setup)]
 % \iffalse
 %</driver>
 %
@@ -529,7 +529,7 @@
 %
 %    Originally \LaTeX{} only provided a small set of spacing commands
 %    for use in text and math, some of the commands like \cs{;} were
-%    only supported in manth mode. \texttt{amsmath} normalized  and
+%    only supported in math mode. \texttt{amsmath} normalized  and
 %    provided all of them in text and math. This code has now been
 %    moved to the kernel so that it is generally available.
 %
@@ -593,6 +593,13 @@
 %<latexrelease>\def\;{\mskip\thickmuskip}
 %<latexrelease>\def\!{\mskip-\thinmuskip}
 %<latexrelease>
+%    \end{macrocode}
+% \changes{v1.2h}{2020/11/09}{\cs{negmedspace} and \cs{negthickspace}
+%    have been only in amsmath, so we need to undefine for rollback (gh/423)}
+%    \begin{macrocode}
+%<latexrelease>\let\negmedspace\@undefined
+%<latexrelease>\let\negthickspace\@undefined
+%<latexrelease>
 %<latexrelease>\EndIncludeInRelease
 %<*2ekernel>
 %    \end{macrocode}
@@ -1094,7 +1101,7 @@
 %    To put the equation number on the left side of an equation we
 %    have to use a little trick. The number is shifted |\displaywidth|
 %    to the left inside a box of (approximately) zero width. This
-%    fails when the quation is too wide, the equation number than may
+%    fails when the equation is too wide, the equation number than may
 %    overprint the equation itself.
 % \changes{v1.2y classes}{1995/01/12}{Added \cs{normalcolor}}
 % \changes{v1.3c classes}{1995/05/25}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltmiscen.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltmiscen.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltmiscen.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -32,7 +32,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltmiscen.dtx}
-             [2020/10/23 v1.1w LaTeX Kernel (Misc. Environments)]
+             [2020/12/18 v1.1x LaTeX Kernel (Misc. Environments)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltmiscen.dtx}
@@ -214,6 +214,7 @@
 % \changes{v1.1i}{2000/05/19}
 %            {Reset \cs{AtEndDocument} for latex/3060}
 %    \begin{macrocode}
+   \@kernel at before@enddocument
    \UseOneTimeHook{enddocument}%
    \@kernel at after@enddocument
 %    \end{macrocode}
@@ -277,17 +278,6 @@
 %  \end{macro}
 %  \end{environment}
 %
-%
-%  \begin{macro}{\@kernel at after@enddocument,
-%                \@kernel at after@enddocument at afterlastpage}
-%    
-%    The two kernel hooks above are used by the shipout code.   
-%    \begin{macrocode}
-\let\@kernel at after@enddocument\@empty
-\let\@kernel at after@enddocument at afterlastpage\@empty
-%    \end{macrocode}
-%  \end{macro}
-%
 %  \begin{macro}{\@enddocument at kernel@warnings}
 %    
 %    \begin{macrocode}
@@ -395,8 +385,6 @@
 %<latexrelease>   \endgroup
 %<latexrelease>   \deadcycles\z@\@@end}
 %<latexrelease>
-%<latexrelease>\let\@kernel at after@enddocument\@undefined
-%<latexrelease>\let\@kernel at after@enddocument at afterlastpage\@undefined
 %<latexrelease>\let\@enddocument at kernel@warnings\@undefined
 %<latexrelease>
 %<latexrelease>\EndIncludeInRelease
@@ -403,8 +391,37 @@
 %<*2ekernel>
 %    \end{macrocode}
 %
+%  \begin{macro}{\@kernel at before@enddocument}
+%    The \cs{@kernel at before@enddocument} hook is slightly different
+%    because we initialize it with \cs{par} so that \cs{enddocument} always
+%    returns to vertical mode as its first action. 
+% \changes{v1.1x}{2020/10/26}{\cs{enddocument} should always start out in
+%    vmode (gh/385)}
+%    \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2021/05/01}%
+%<latexrelease>                 {\@kernel at before@enddocument}{kernel before hook}%
+\def\@kernel at before@enddocument{\par}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%    \end{macrocode}
 %
+%    The rollback code renders it harmless.
+%    \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease>                 {\@kernel at before@enddocument}{kernel before hook}%
+%<latexrelease>
+%<latexrelease>\let\@kernel at before@enddocument\@empty
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+%    \end{macrocode}
+%  \end{macro}
 %
+%
+%
+%
 % \begin{macro}{\@testdef}
 %    \begin{macrocode}
 \def\@testdef #1#2#3{%

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltoutenc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltoutenc.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltoutenc.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -44,7 +44,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltoutenc.dtx}
-             [2020/08/10 v2.0s LaTeX Kernel (font encodings)]
+             [2020/12/05 v2.0s LaTeX Kernel (font encodings)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltoutenc.dtx}
@@ -421,7 +421,7 @@
 % for |\textdollar| in \texttt{OT1} is a hack since \$ and \pounds{}
 % actually share the same slot in this encoding. Thus if such a glyph
 % becomes available in a different encoding (e.g., \texttt{TS1}) one
-% would like to get rid of the flacky one and make the default
+% would like to get rid of the flaky one and make the default
 % definition point to the new encoding. In such a case defining
 %\begin{verbatim}
 %   \DeclareTextSymbol{\textdollar}{TS1}{36}
@@ -841,7 +841,7 @@
 %    avoid that (they are some hidden inside \cs{maybe at load@fontshape}).
 %    As we don't have to load the fontshape in this case
 %    (as that happened in the box above if necessary, we simply
-%    disable that part of the code temporaily.
+%    disable that part of the code temporarily.
 %    We also ignore \cs{ignorespaces} which has the same issue and may
 %    show up as part of \cs{normalfont} if that is used.
 % \changes{v2.0m}{2019/12/18}{Avoid code that breaks \cs{accent}}
@@ -2538,7 +2538,7 @@
 %
 % The tie accent was borrowed from the |cmmi| font. The tc fonts
 % now provide four tie accents, the first two are done in the
-% classical way with assymetric glyphs hanging out of their boxes;
+% classical way with asymmetric glyphs hanging out of their boxes;
 % the new ties are centered in their boxes like all other accents.
 % They need a name: please tell us if you know what to call them.
 %
@@ -2550,7 +2550,7 @@
 \DeclareTextAccent{\capitalnewtie}{TS1}{29}
 %    \end{macrocode}
 %
-% Compund word marks.
+% Compound word marks.
 %
 % The text companion fonts contain two compound word marks of
 % different heights, one has |cap_height|, the other |asc_height|.
@@ -2837,7 +2837,7 @@
 %<*TU>
 %    \end{macrocode}
 % In the base interface the Unicode encoding is always known as TU
-% But we parameterise the encoding name to allow for modelling
+% But we parameterize the encoding name to allow for modelling
 % differences in Unicode support by different fonts.
 %    \begin{macrocode}
 \providecommand\UnicodeEncodingName{TU}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltoutenc.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltoutenc.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltoutenc.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltoutput.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltoutput.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltoutput.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -37,7 +37,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltoutput.dtx}
-             [2020/08/21 v1.4f LaTeX Kernel (Output Routine)]
+             [2020/12/06 v1.4f LaTeX Kernel (Output Routine)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltoutput.dtx}
@@ -1676,7 +1676,7 @@
 %  \begin{macro}{\@makecol}
 % \changes{v0.1c}{1993/11/23}{Command changed}
 % \changes{v1.0b}{1993/11/29}{\cs{@makespecialcolbox} added}
-%    We must rewrite this macro to alllow for variations in page-makeup
+%    We must rewrite this macro to allow for variations in page-makeup
 %    required by changes in page-length.
 %
 %    This uses a different macro if a special-length column is being
@@ -1860,7 +1860,7 @@
 %    force the shortest possible column with the possibility of an
 %    overfull box.
 %
-%    This should work for bothe flush- and ragged-bottom setting since
+%    This should work for both flush- and ragged-bottom setting since
 %    it makes the contents no smaller than the size (|\@colht|) of the
 %    box into which they are put.
 %
@@ -2074,7 +2074,7 @@
 %    \end{macrocode}
 %
 %    The |\catcode`\ = 10| was removed as it was considered useless
-%    (presumably because nothing gets tokenised during shipout).
+%    (presumably because nothing gets tokenized during shipout).
 %
 %    This was put in as some error produced active spaces in a mark, I
 %    think.
@@ -2156,7 +2156,7 @@
 %
 %    The rest was always inside the box.
 %
-%    RmS 91/08/15: aded this line:
+%    RmS 91/08/15: added this line:
 %    \begin{macrocode}
   \reset at font
 %    \end{macrocode}
@@ -3864,7 +3864,7 @@
 % be printed in as small a space as possible, ie it uses any
 % shrinkability in the column. If the column was not explicitly broken
 % (\eg with |\pagebreak|) this may result in an overfull box message but
-% execpt for this it will come out as expected (if you know what to
+% except for this it will come out as expected (if you know what to
 % expect).
 %
 % The star form of this command is dedicated to Leslie Lamport, the
@@ -3973,7 +3973,7 @@
 % It also enables the use of an extra specifier, {\tt !}, in the
 % location optional argument of a float.  If this is present then,
 % just for this particular float, whenever it is processed by the float
-% mechanism the followinhg are ignored:
+% mechanism the following are ignored:
 %
 % \begin{itemize}
 % \item  all restrictions on the number of floats which can appear;
@@ -4556,7 +4556,7 @@
 %     Yet another is to move the column count register from the multicol
 %     package into the kernel.  This has been done.
 %   \item  Where should the reinserts be put to maximise the
-%     probability that footmotes come out on the correct page?
+%     probability that footnotes come out on the correct page?
 %     Or should we go for as much compatibility as possible (but see
 %     next item)?
 %   \item  Should we continue to support (as much as possible)
@@ -4980,7 +4980,7 @@
 %
 %    At the top of the page |\@fptop| is inserted;
 %    typically this supplies some stretchable whitespace.
-%    At the bottom of the page |\@fpbot| ais inserted.
+%    At the bottom of the page |\@fpbot| is inserted.
 %    Between adjacent floats |\@fpsep| is inserted.
 %
 %    These parameters are used for all floating objects on a

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltpage.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltpage.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltpage.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltpage.dtx}
-             [2020/07/27 v1.0m LaTeX Kernel (page style setup)]
+             [2020/12/05 v1.0m LaTeX Kernel (page style setup)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltpage.dtx}
@@ -260,7 +260,7 @@
 %      the problem is solved.}
 % \changes{v1.0j}{2000/05/26}{Use \cs{@empty} instead of brace group
 %                             (pr/3203).}
-% \task{???}{mark initialisation solved?}
+% \task{???}{mark initialization solved?}
 %    \begin{macrocode}
 \def\@markright#1#2#3{\@temptokena {#1}%
   \unrestored at protected@xdef\@themark{{\the\@temptokena}{#3}}}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltpageno.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltpageno.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltpageno.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltpageno.dtx}
-             [1994/05/19 v1.1a LaTeX Kernel (Page Numbering)]
+             [2020/12/05 v1.1a LaTeX Kernel (Page Numbering)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltpageno.dtx}
@@ -71,7 +71,7 @@
 % assigned by |\newcount|.
 %
 % \DescribeMacro{\pagenumbering}
-% The user sets the pagenumber style with the |\pagenumbering|\marg{foo}
+% The user sets the page number style with the |\pagenumbering|\marg{foo}
 % command, which sets the page counter to 1 and defines |\thepage| to be
 % |\foo|.  For example, |\pagenumbering{roman}| causes pages to be
 % numbered  i, ii, etc.

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltpar.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltpar.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltpar.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltpictur.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltpictur.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltpictur.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -32,7 +32,7 @@
 %<*driver>
 % \fi
       \ProvidesFile{ltpictur.dtx}
-                      [2020/08/14 v1.2a LaTeX Kernel (Picture Mode)]
+                      [2020/12/05 v1.2a LaTeX Kernel (Picture Mode)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltpictur.dtx}
@@ -1773,7 +1773,7 @@
 %
 % Initialization: ``|\thinlines|''
 % \changes{v1.1f}{1995/10/27}
-%      {Move initialisation to kernel from autoload file}
+%      {Move initialization to kernel from autoload file}
 %    \begin{macrocode}
 \let\@linefnt\tenln
 \let\@circlefnt\tencirc

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltplain.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltplain.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltplain.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -32,7 +32,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltplain.dtx}
-             [2020/08/20 v2.3d LaTeX Kernel (Plain TeX)]
+             [2020/11/26 v2.3d LaTeX Kernel (Plain TeX)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltplain.dtx}
@@ -695,7 +695,7 @@
 %         {Define \cs{alloc@} in terms of \cs{e at alloc}}
 % Since |\e at alloc| was added in 2015, |\@alloc| has not been used,
 % but was left as some legacy code calls it. However the original
-% defnition gives spurious errors once the ``classic'' registers
+% definition gives spurious errors once the ``classic'' registers
 % run out, so it is now defined to call |\e at alloc| internally.
 %    \begin{macrocode}
 %</2ekernel>
@@ -754,8 +754,8 @@
   \chardef\e at insert@top\e at alloc@top
 \fi
 %    \end{macrocode}
-% If the classic registers are exausted, take an insert from the free float list
-% and use |\extrafloats| to add a new float to that list.
+% If the classic registers are exhausted, take an insert from the free
+% float list and use |\extrafloats| to add a new float to that list.
 % \changes{v2.2c}{2016/07/29}{fix for tlb-newinsert-001}
 %    \begin{macrocode}
 \def\newinsert#1{%
@@ -1481,7 +1481,7 @@
 % \changes{v1.1x}{2002/02/24}{Macro added}
 % \changes{v2.0b}{2012/01/20}{etex tracing if available}
 % \changes{v2.0d}{2015/02/20}{Spell commands correctly :-)}
-% \changes{v2.0g}{2015/03/10}{Reorganise to be less noisy}
+% \changes{v2.0g}{2015/03/10}{Reorganize to be less noisy}
 %    \begin{macrocode}
 %<latexrelease>\IncludeInRelease{2015/01/01}{\loggingall}{etex tracing}%
 %<*2ekernel|latexrelease>

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltsect.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltsect.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltsect.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -31,7 +31,7 @@
 %%% From File: ltsect.dtx
 %<*driver>
 % \fi
-\ProvidesFile{ltsect.dtx}[2020/07/27 v1.1e LaTeX Kernel (Sectioning)]
+\ProvidesFile{ltsect.dtx}[2020/12/05 v1.1e LaTeX Kernel (Sectioning)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltsect.dtx}
@@ -779,7 +779,7 @@
 % \changes{v1.1c}{2018/09/26}{Sometimes mask the endline char when
 %    writing to files (github/73)}
 % \changes{v1.1e}{2020/10/01}{add a fourth argument for better
-%    hyperref compability}
+%    hyperref compatibility}
 %    \begin{macrocode}
 %</2ekernel>
 %<*2ekernel|latexrelease>

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltshipout.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltshipout.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltshipout.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %%
-%% File: ltshipout.dtx (C) Copyright 2020 Frank Mittelbach, LaTeX Team
+%% File: ltshipout.dtx (C) Copyright 2020,2021 Frank Mittelbach, LaTeX Team
 %%
 %
 % This file is part of the LaTeX base system.
@@ -31,8 +31,8 @@
 %%% From File: ltshipout.dtx
 %
 %    \begin{macrocode}
-\providecommand\ltshipoutversion{v1.0c}
-\providecommand\ltshipoutdate{2020/09/27}
+\providecommand\ltshipoutversion{v1.0d}
+\providecommand\ltshipoutdate{2020/12/06}
 %    \end{macrocode}
 %
 %<*driver>
@@ -75,7 +75,7 @@
 %    \ltshipoutversion\ dated \ltshipoutdate, \copyright\ \LaTeX\
 %    Project.}}
 %
-% \author{Frank Mittelbach}
+% \author{Frank Mittelbach, \LaTeX{} Project Team}
 %
 % \maketitle
 %
@@ -193,7 +193,8 @@
 %    \item[\hook{shipout/lastpage}]
 %
 %       The corresponding hook to add \cs{special}s at the very end of
-%       the output file. It is only executed on the very last page ---
+%       the output file. It is only executed on the very last page of
+%       the output file ---
 %       or rather on the page that \LaTeX{} believes is the last one.
 %
 %       It may not be possible for \LaTeX{} to correctly determine
@@ -229,19 +230,29 @@
 %    \cs{typeout}s, none of the hooks are executed (as there is no
 %    \cs{shipout}) not even the \hook{shipout/lastpage} hook.
 %
+%
+% \subsection{Legacy \LaTeX{} commands}
+%
+%
 % \begin{function}{\AtBeginDvi,\AtEndDvi}
 %    \cs{AtBeginDvi} is the existing \LaTeXe{} interface to fill the
 %    \hook{shipout/firstpage} hook. This is not really a good name
 %    as it is not just supporting \texttt{.dvi} but also \texttt{.pdf}
-%    output or \texttt{.dvx}.
+%    output or \texttt{.xdv}.
 %
 %    \cs{AtEndDvi} is the counterpart that was not available in the
 %    kernel but only through the package \pkg{atenddvi}. It fills the
 %    \hook{shipout/lastpage} hook.
+% \end{function}
 %
-%    \fmi{better names? Any suggestions?}
+%    As these two wrappers have been available for a long time we
+%    continue offering them. However, for new code we suggest using
+%    the high-level hook management commands directly instead of
+%    ``randomly-named'' wrappers.  This will lead to code that is
+%    easier to understand and to maintain.  For this reason we do not
+%    provide any other wrapper commands for the above hooks in the
+%    kernel.
 %
-% \end{function}
 %
 % \subsection{Special commands for use inside the hooks}
 %
@@ -331,9 +342,9 @@
 %     \cs{thetotalpages}/\cs{PreviousTotalPages}
 %   \end{syntax}
 %    Command that expands to the number of total pages from the
-%    previous run.  If there was no previous run or if usedin the
+%    previous run.  If there was no previous run or if used in the
 %    preamble it expands to
-%    \texttt{0}. Note that this is a command to a counter, so in order
+%    \texttt{0}. Note that this is a command and not a counter, so in order
 %    to display the number in, say, Roman numerals you have to assign
 %    its value to a counter and then use \cs{Roman} on that counter.
 %  \end{variable}
@@ -356,11 +367,17 @@
 %
 % \section{Emulating commands from other packages}
 %
-%    The packages in this section are no longer necessary but as they
-%    are used in other packages they are emulated when they are loaded
-%    via \cs{usepackage} or \cs{RequirePackage}.
+%    The packages in this section are no longer necessary, but as they
+%    are used by other packages, they are emulated when they are
+%    explicitly loaded with \cs{usepackage} or \cs{RequirePackage}.
 %
+%    Please note that the emulation only happens if the package is
+%    explicitly requested, i.e., the commands documented below are not
+%    automatically available in the \LaTeX{} kernel!  If you write a
+%    new package we suggest to use the appropriate kernel hooks
+%    directly instead of loading the emulation.
 %
+%
 % \subsection{Emulating \pkg{atbegshi}}
 %
 %
@@ -434,6 +451,13 @@
 %
 % \subsection{Emulating \pkg{everyshi}}
 %
+%    The \pkg{everyshi} package is providing commands to run arbitrary
+%    code just before the shipout starts.
+%    One point of difference: in the new shipout hooks the page is
+%    available as \cs{ShipoutBox} for inspection of change, one should
+%    not manipulate box 255 directly inside \hook{shipout/before}, so
+%    old code doing this would change to use \cs{ShipoutBox} instead
+%    of \texttt{255} or \cs{@cclv}.
 %
 % \begin{function}{\EveryShipout}
 %   \begin{syntax}
@@ -447,24 +471,51 @@
 %   \end{syntax}
 % \end{function}
 %
+%    However, most use cases for \pkg{everyshi} are attempts to put
+%    some picture or text into the background or foreground of the page
+%    and that can be done today simply by using the
+%    \hook{shipout/background} and 
+%    \hook{shipout/foreground} hooks without any need to coding.
 %
 %
 % \subsection{Emulating \pkg{atenddvi}}
 %
-% The \pkg{atenddvi} package implemented only a single command:
-%    \cs{AtEndDvi} and that is now available out of the box.
+%    The \pkg{atenddvi} package implemented only a single command:
+%    \cs{AtEndDvi} and that is now available out of the box so the
+%    emulation makes the package a no-op.
 %
 %
 %
 % \subsection{Emulating \pkg{everypage}}
 %
-%    This page takes over the original \cs{@begindvi} hook and replaces 
-%    it. It should be all covered by the hooks offered here (details
-%    need checking) and thus could simply use the provided hooks
-%    rather than defining its own.
+%    This package patched the original \cs{@begindvi} hook and replaced 
+%    it with its own version.
+%    Its functionality is now covered by the hooks offered by the
+%    kernel so that there is no need for such patching any longer.
 %
+% \begin{function}{\AddEverypageHook}
+%   \begin{syntax}
+% \cs{AddEverypageHook}\Arg{code} $\equiv$
+% \qquad\cs{AddToHook}\texttt{\{shipout/background\}\{\cs{put}(1in,-1in)\Arg{code}\}}
+%   \end{syntax}
+%    \cs{AddEverypageHook} is adding something into the
+%    background of every page at a position of 1in to the right and
+%    1in down from the top left corner of the page.
+%     By using the kernel hook directly you can put your material
+%    directly to the right place, i.e., use other coordinates in the
+%    \cs{put} statement above.
+% \end{function}
 %
+% \begin{function}{\AddThispageHook}
+%   \begin{syntax}
+% \cs{AddThispageHook}\Arg{code} $\equiv$
+% \qquad\cs{AddToHookNext}\texttt{\{shipout/background\}\{\cs{put}(1in,-1in)\Arg{code}\}}
+%   \end{syntax}
+%    The \cs{AddThispageHook} wrapper is similar but uses
+%    \cs{AddToHookNext}.
+% \end{function}
 %
+%
 % \StopEventually{\setlength\IndexMin{200pt}  \PrintIndex  }
 %
 %
@@ -479,7 +530,7 @@
 %    \begin{macrocode}
 %<*2ekernel|latexrelease>
 %<latexrelease>\IncludeInRelease{2020/10/01}%
-%<latexrelease>                 {\shipout}{Hook mangement (shipout)}%
+%<latexrelease>                 {\shipout}{Hook management (shipout)}%
 %    \end{macrocode}
 %
 %
@@ -631,7 +682,8 @@
 %    \cs{shipout}.
 %
 %     We increment it after running the above hook so that the values
-%    for \cs{g_shipout_totalpages_int} and \cs{} are in sync while the
+%    for \cs{g_shipout_totalpages_int} and \cs{g_shipout_readonly_int}
+%    are in sync while the
 %    hook is executed (in the case that totalpages isn't manually
 %    altered or through discarding pages that is).
 %    \begin{macrocode}
@@ -699,7 +751,13 @@
               \hook_if_empty:nF {shipout/foreground}
                    { \@@_add_foreground_picture:n
                      { \hook_use:n {shipout/foreground} } }
-              \hook_if_empty:nF {shipout/background}
+%    \end{macrocode}
+%    If there is no user hook, there might still code in the kernel hook.
+% \changes{v1.0d}{2020/11/23}{Check for both kernel and user hook (gh/431)}
+%    \begin{macrocode}
+              \bool_lazy_and:nnF
+                   { \hook_if_empty_p:n {shipout/background} }
+                   { \tl_if_empty_p:N \@kernel at before@shipout at background }
                    { \@@_add_background_picture:n
                      { \@kernel at before@shipout at background
                        \hook_use:n {shipout/background} } }
@@ -712,11 +770,15 @@
               \@@_execute_firstpage_hook:
 %    \end{macrocode}
 %    The we check if we have to add the \hook{shipout/lastpage} hook
+%    or the corresponding kernel hook
 %    because we have reached the last page. This test will be false for
 %    all but one (and hopefully the correct) page.
+% \changes{v1.0d}{2020/11/23}{Check for both kernel and user hook (gh/431)}
 %    \begin{macrocode}
               \int_compare:nNnT \@abspage at last = \g_shipout_readonly_int
-                { \hook_if_empty:nF {shipout/lastpage}
+                { \bool_lazy_and:nnF
+                    { \hook_if_empty_p:n {shipout/lastpage} }
+                    { \tl_if_empty_p:N \@kernel at after@shipout at lastpage }
                     { \@@_debug:n { \typeout{Executing~ lastpage~ hook~
                           on~ page~ \int_use:N \g_shipout_readonly_int }        }
                       \_@@_add_foreground_box:n { \UseHook{shipout/lastpage}
@@ -747,7 +809,7 @@
 %
 %
 %  \begin{macro}{\@@_saved_protect:}
-%    Remeber the current \cs{protect} state.
+%    Remember the current \cs{protect} state.
 %    \begin{macrocode}
 \cs_new_eq:NN  \@@_saved_protect: \protect
 %    \end{macrocode}
@@ -883,7 +945,7 @@
 %  \begin{macro}{\l_@@_tmp_box,\l_@@_saved_badness_tl}
 %    We need a box for the background and foreground material and a
 %    token register to remember badness settings as we disable  them
-%    during te buildup below.
+%    during the buildup below.
 %    \begin{macrocode}
 \box_new:N \l_@@_tmp_box
 \tl_new:N  \l_@@_saved_badness_tl
@@ -1088,7 +1150,7 @@
 %    \begin{macrocode}
 \cs_new:Npn \@@_picture_overlay:n #1 {
 %    \end{macrocode}
-%    The very first time this is executed we have to initializes (and
+%    The very first time this is executed we have to initialize (and
 %    freeze) the origins.
 %    \begin{macrocode}
     \@@_init_page_origins:
@@ -1183,7 +1245,7 @@
 %
 %  \begin{macro}{\g_shipout_totalpages_int,\c at totalpages}
 %    We count every shipout attempt (even those that are discarded) in
-%    tis counter. It is not used in the code but may get used in user
+%    this counter. It is not used in the code but may get used in user
 %    code.
 %    \begin{macrocode}
 \int_new:N \g_shipout_totalpages_int
@@ -1207,7 +1269,7 @@
 %    or the statement is missing from it we initialize it with the
 %    largest possible number in \TeX{}. We use this as the default
 %    because then we are inserting the \hook{shipout/lastpage} on
-%    the last page (or after the last page but not on page 1 for a
+%    the last page (or after the last page) but not on page 1 for a
 %    multipage document.
 %    \begin{macrocode}
 \xdef\@abspage at last{\number\maxdimen}
@@ -1219,11 +1281,11 @@
 %
 %    Instead of using the hooks \hook{enddocument} and
 %    \hook{enddocument/afterlastpage} we add this code to private
-%    kernel hooks to be 100\% when it is executed and to avoid
+%    kernel hooks to be 100\% sure when it is executed and to avoid
 %    cluttering the hooks with data that is always there.
 %
 %    Inside \cs{enddocument} there is a \cs{clearpage}. Just before
-%    that we execute this code here. There is a good change that we
+%    that we execute this code here. There is a good chance that we
 %    are on the last page. Therefore, if we don't know the value from
 %    the last run, we assume that the current page is the right
 %    one. So we set \cs{@abspage at last} and as a result the next
@@ -1307,7 +1369,7 @@
 %    At this point we also signal to \LaTeX{}'s endgame that a rerun is
 %    necessary so that an appropriate message can be shown on the
 %    terminal. We do this by simply defining a command used as a flag and
-%    tested \cs{enddocument}.
+%    tested in \cs{enddocument}.
 %    \begin{macrocode}
               \cs_gset_eq:NN \@extra at page@added \relax
             }
@@ -1376,9 +1438,11 @@
 %
 %
 %  \begin{macro}{\AtBeginDvi}
-%    
+%    If we roll forward from an earlier kernel \cs{AtBeginDvi} is
+%    defined so we better not use \cs{cs_new_protected:Npn} here.
+% \changes{v1.0d}{2020/11/24}{Support for roll forward (gh/434)}
 %    \begin{macrocode}
-\cs_new_protected:Npn \AtBeginDvi {\@@_add_firstpage_material:Nn \AtBeginDvi}
+\cs_set_protected:Npn \AtBeginDvi {\@@_add_firstpage_material:Nn \AtBeginDvi}
 %    \end{macrocode}
 %  \end{macro}
 %
@@ -1447,9 +1511,19 @@
 %    
 %    \begin{macrocode}
 %<latexrelease>\IncludeInRelease{0000/00/00}%
-%<latexrelease>                 {\shipout}{The hook management (shipout)}%
-%<latexrelease>\expandafter\let\expandafter\shipout\csname tex_shipout:D\endcsname
+%<latexrelease>                 {\shipout}{Hook management (shipout)}%
 %<latexrelease>
+%    \end{macrocode}
+%    If we roll forward then \cs{tex\_shipout:D} may not be defined in
+%    which case \cs{shipout} does have it original definition and so
+%    we must not \cs{let} it to something else which is \cs{relax}! 
+% \changes{v1.0d}{2020/11/24}{Support for roll forward (gh/434)}
+%    \begin{macrocode}
+%<latexrelease>\ifcsname tex_shipout:D\endcsname
+%<latexrelease>\expandafter\let\expandafter\shipout
+%<latexrelease>                \csname tex_shipout:D\endcsname
+%<latexrelease>\fi
+%<latexrelease>
 %<latexrelease>\let \ShipoutBox\@undefined
 %<latexrelease>\let \ReadonlyShipoutCounter \@undefined
 %<latexrelease>\let \c at totalpages \@undefined
@@ -1483,7 +1557,7 @@
 %    \end{macrocode}
 %    We do not undo a substitution when rolling back. As the file
 %    support gets undone the underlying data is no longer used (and
-%    sufficiently obscure that should not interfer with existing
+%    sufficiently obscure that it should not interfere with existing
 %    commands) and properly removing it would mean we need to make the
 %    \cs{unclare at ...} and its support macros available in all earlier
 %    kernel releases which is pointless (and actually worse).
@@ -1497,7 +1571,7 @@
 %    \end{macrocode}
 %    We do not reenable a disabled package load when rolling back. As the file
 %    support gets undone the underlying data is no longer checked (and
-%    sufficiently obscure that it should not interfer with existing
+%    sufficiently obscure that it should not interfere with existing
 %    commands) and properly removing it would mean we need to make the
 %    \cs{reenable at package@load} command available in all earlier
 %    kernel releases which is pointless (and actually worse).
@@ -1573,8 +1647,8 @@
 %    \begin{macrocode}
 %<*atbegshi-ltx>
 \ProvidesPackage{atbegshi-ltx}
-   [2020/08/17 v1.0a
-     Emulation of the original atbegshi package^^Jwith kernel methods]
+   [2020/10/15 v1.0b
+     Emulation of the original atbegshi^^Jpackage with kernel methods]
 %    \end{macrocode}
 %
 %
@@ -1640,7 +1714,7 @@
 %
 %
 %
-%  \begin{macro}{\ShipoutBoxHeight,\ShipoutBoxWidth,\ShipoutoBoxDepth}
+%  \begin{macro}{\ShipoutBoxHeight,\ShipoutBoxWidth,\ShipoutBoxDepth}
 %    This is somewhat different from the original in \pkg{atbegshi}
 %    where \cs{ShipoutBoxHeight} etc.\ only holds the
 %    \verb=\the\ht<box>= value. This may has some implications in some
@@ -1679,8 +1753,8 @@
 %
 %    \begin{macrocode}
 \ProvidesPackage{everyshi-ltx}
-   [2020/08/17 v1.0a
-    Emulation of the original everyshi package^^Jwith kernel methods]
+   [2020/10/15 v1.0b
+    Emulation of the original everyshi^^Jpackage with kernel methods]
 %    \end{macrocode}
 %    
 %  \begin{macro}{\EveryShipout,\AtNextShipout}
@@ -1710,7 +1784,7 @@
 %%
 %%   Code that directly manipulates box 255, however, might fail. 
 %%   If that is the case look at the shipout hooks offered now as
-%%   they are normally sufficienct to avoid such minpulations (or
+%%   they are normally sufficient to avoid such manipulations (or
 %%   replace box 255 with \ShipoutBox in the code.
 %%
 %</everyshi-ltx>

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltspace.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltspace.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltspace.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/lttab.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/lttab.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/lttab.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/lttextcomp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/lttextcomp.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/lttextcomp.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 2019-2020
+% Copyright (C) 2019-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %
 %
 \ProvidesFile{lttextcomp.dtx}
-             [2020/04/29 v1.0d LaTeX Kernel (text companion symbols)]
+             [2020/12/05 v1.0d LaTeX Kernel (text companion symbols)]
 % \iffalse
 \documentclass{ltxdoc}
 \begin{document}
@@ -46,7 +46,7 @@
 %
 %
 % \GetFileInfo{lttextcomp.dtx}
-% \title{Providing addtional text symbols\\
+% \title{Providing additional text symbols\\
 %        (previously available through the \texttt{textcomp} package)\thanks
 %       {This file has version number
 %       \fileversion\ dated \filedate}}
@@ -112,7 +112,7 @@
    \mathgroup\symletters #1%
   \else
 %    \end{macrocode}
-%    The \cs{CheckEncodingSubset} is discused below.
+%    The \cs{CheckEncodingSubset} is discussed below.
 %    \begin{macrocode}
    \CheckEncodingSubset\@use at text@encoding{TS1}\tc at oldstylesubst2{{#1}}%
  \fi
@@ -200,7 +200,7 @@
 %    declare the subset and finally the \emph{subset} number (between \texttt{0} (all
 %    of the encoding is supported) and \texttt{9} many glyphs are missing.
 %
-%    For \texttt{TS1} the numbers have been choosen in a way that most
+%    For \texttt{TS1} the numbers have been chosen in a way that most
 %    fonts can be fairly correctly categorized, but the default
 %    settings are always conservative, that is they may claim that
 %    less glyphs are supported than there actually are.
@@ -408,7 +408,7 @@
 %
 %    Accents and been mad an error in the \texttt{textcomp} package when
 %    not available. Now that we provide the functionality in the
-%    kernel we avoid the eror by swapping in a \texttt{T1} accent if
+%    kernel we avoid the error by swapping in a \texttt{T1} accent if
 %    the \texttt{TS1} accent is not available.
 %    \begin{macrocode}
 %\def\tc at check@accent{\CheckEncodingSubset\UseTextAccent{TS1}\tc at error}
@@ -565,7 +565,7 @@
 %
 %    In Unicode engines we just execute the simple accents:
 % \changes{v1.0c}{2020/02/10}{Use \cs{@tabacckludge} for tabbing where necessary (gh/271)}
-% \changes{v1.0d}{2020/04/29}{Make all captial accents text commands for hyperref (gh/332)}
+% \changes{v1.0d}{2020/04/29}{Make all capital accents text commands for hyperref (gh/332)}
 %    \begin{macrocode}
 \else
   \DeclareTextCommandDefault\capitalacute{\@tabacckludge'}
@@ -720,7 +720,7 @@
 %
 %    Most older PS fonts (supported in \TeX{} since the early nineties
 %    when virtual fonts became available) are sorted under this
-%    sub-encoding. But in reality, many of them don't have all glpyhs
+%    sub-encoding. But in reality, many of them don't have all glyphs
 %    that should be available in sub-encoding \texttt{5}. Instead they
 %    show little squares, i.e., they produce ``tofu'' if you are
 %    unlucky.
@@ -727,7 +727,7 @@
 %
 %    But the coverage is so random that it is impossible to sort them
 %    properly and if we tried to ensure that they only typeset those
-%    glyphs that are really  always available wouput put them all into
+%    glyphs that are really  always available would put them all into
 %    sub-encoding \texttt{9} so that's a compromise really.
 %
 %    Modern fonts that don't typeset a tofu character if a glyph is
@@ -830,7 +830,7 @@
 \DeclareTextCommand{\texteightoldstyle}\UnicodeEncodingName{\oldstylenums{8}}
 \DeclareTextCommand{\textnineoldstyle} \UnicodeEncodingName{\oldstylenums{9}}
 %    \end{macrocode}
-%    These have Unicode slots so this should be integrated into TU explictly
+%    These have Unicode slots so this should be integrated into TU explicitly
 %    \begin{macrocode}
 \DeclareTextSymbol{\textpilcrow}       \UnicodeEncodingName{"00B6}
 \DeclareTextSymbol{\textborn}          \UnicodeEncodingName{"002A}
@@ -1156,7 +1156,7 @@
 %  \begin{macro}{\textlegacysection}
 %
 %    Here are new names for the legacy symbols that \LaTeX{} used to
-%    pick up from the \texttt{OMS} encoded fonts (and used dor itemize
+%    pick up from the \texttt{OMS} encoded fonts (and used for itemize
 %    lists or footnote symbols.
 %
 %    We go the roundabout way via separate OMS declarations so that
@@ -1443,7 +1443,7 @@
 %    of the default (which, unless changes, is 9 these days), i.e., it
 %    no longer depends on the font in use. This is mainly there
 %    because it might have been used in older documents, but not
-%    somehting that is recommended.
+%    something that is recommended.
 %    \begin{macrocode}
 \DeclareOption{force}{%
     \def\CheckEncodingSubset#1#2#3#4#5{%
@@ -1483,7 +1483,7 @@
 %    This section contains the old code for the textcomp package and
 %    its documentation. It is only used if we roll back prior to 2020.
 %    Thus all the rest is mainly for historians. Note that the old
-%    code categorised in the sub-encodings only into 6 classes not 10.
+%    code categorized in the sub-encodings only into 6 classes not 10.
 %
 %    \begin{macrocode}
 %<*TS1oldsty>

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltthm.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltthm.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltthm.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltvers.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltvers.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltvers.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltvers.dtx}
-             [2020/03/02 v1.1e LaTeX Kernel (Version Info)]
+             [2020/12/05 v1.1e LaTeX Kernel (Version Info)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltvers.dtx}
@@ -115,7 +115,7 @@
    {2021-05-01}
 %</2ekernel|latexrelease>
 %<*2ekernel>
-\def\patch at level{0}
+\def\patch at level{-1}
 %    \end{macrocode}
 %
 % \begin{macro}{\development at branch@name}
@@ -255,7 +255,7 @@
 %    that is actually reapplying what is already in the format, i.e.,
 %    it is useless and possibly allocating new registers. However, it
 %    makes the logic simpler so this is the way it is for now. In
-%    theory we could always jump overthe first patch because that is
+%    theory we could always jump over the first patch because that is
 %    only really needed for rolling forward. So maybe one day \dots
 %    \begin{macrocode}
     \ifnum\expandafter\@parse at version#1//00\@nil

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltxdoc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltxdoc.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltxdoc.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -30,7 +30,7 @@
 %
 %<class>\NeedsTeXFormat{LaTeX2e}
 %<class>\ProvidesClass{ltxdoc}
-%<class>         [2020/10/04 v2.1b Standard LaTeX documentation class]
+%<class>         [2020/12/05 v2.1b Standard LaTeX documentation class]
 %
 %<*driver>
 \documentclass{ltxdoc}
@@ -484,7 +484,7 @@
 %    \end{macrocode}
 %   Set \cs{protect} to a suitable value in the index entries (we
 %   can't use |\set at display@protect| as that would result in different
-%   numer of spaces after a command depending on the number of
+%   number of spaces after a command depending on the number of
 %   expansion happening prior to writing the index).
 %    \begin{macrocode}
       \begingroup

Modified: trunk/Master/texmf-dist/source/latex-dev/base/ltxref.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/ltxref.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/ltxref.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -33,7 +33,7 @@
 %<*driver>
 % \fi
 \ProvidesFile{ltxref.dtx}
-             [2020/08/23 v1.1o LaTeX Kernel (Cross Referencing)]
+             [2020/12/05 v1.1o LaTeX Kernel (Cross Referencing)]
 % \iffalse
 \documentclass{ltxdoc}
 \GetFileInfo{ltxref.dtx}
@@ -68,10 +68,10 @@
 %  The user writes  |\label|\marg{foo}  to define the following
 %  cross-references:
 %
-%   |\ref|\marg{foo}: value of most recently incremented referencable
+%   |\ref|\marg{foo}: value of most recently incremented referenceable
 %             counter. in the current environment. (Chapter, section,
 %             theorem and enumeration counters are
-%             referencable, footnote counters are not.)
+%             referenceable, footnote counters are not.)
 %
 %   |\pageref|\marg{foo}: page number at which |\label{foo}|  command
 %             appeared.  where  foo  can be any string of characters not
@@ -98,7 +98,7 @@
 \message{x-ref,}
 %    \end{macrocode}
 %
-%  This is implemented as follows.  A referencable counter  CNT  is
+%  This is implemented as follows.  A referenceable counter  CNT  is
 %  incremented by the command  \refstepcounter{CNT} , which sets
 %  \@currentlabel == {CNT}{eval(\p at cnt\theCNT)}.   The command
 %  \label{FOO} then writes the following on file \@auxout :

Modified: trunk/Master/texmf-dist/source/latex-dev/base/makeindx.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/makeindx.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/makeindx.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/makeindx.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/makeindx.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/makeindx.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/newdc.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/newdc.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/newdc.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/newlfont.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/newlfont.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/newlfont.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/nfssfont.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/nfssfont.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/nfssfont.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -27,7 +27,7 @@
 %
 % \fi
 \def\nfssfontfileversion{v2.2e}
-\def\nfssfontfiledate{2019/10/12}
+\def\nfssfontfiledate{2020/11/26}
 
 %
 % \iffalse
@@ -55,7 +55,7 @@
 %
 % Within the \NFSS{} distribution there is a \LaTeX{} file
 % \texttt{nfssfont.tex} which can be used to test new fonts, produce
-% font tables showing all characters, etc. This is an addaption of a
+% font tables showing all characters, etc. This is an adaption of a
 % program originally written by Don Knuth.
 
 % When you run this file through \LaTeX{} you will be asked to enter
@@ -79,7 +79,7 @@
 % |\help|.
 %
 % This is at
-% the moment only a crude addaption of the test program for the
+% the moment only a crude adaption of the test program for the
 % Computer Modern fonts by Donald Knuth.
 %
 % \StopEventually{}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/nfssfont.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/nfssfont.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/nfssfont.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/olddc.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/olddc.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/olddc.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/oldlfont.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/oldlfont.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/oldlfont.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/preload.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/preload.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/preload.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/proc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/proc.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/proc.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -29,7 +29,7 @@
 %
 % \iffalse
 % Copyright (C) 1991,1992 by Leslie Lamport \and
-% Copyright (C) 1994,1995 by the \LaTeX3 project \and Johannes Braams
+% Copyright (C) 1994-2020 by the \LaTeX3 project \and Johannes Braams
 %
 % \changes{v1.1}{1994/01/25}{Made `proc' a document class and provide
 %    a .sty file for compatibility mode}
@@ -73,7 +73,7 @@
 %</driver>
 %<+class>\ProvidesClass{proc}
 %<+style>\ProvidesFile{proc.sty}
-              [2014/09/29 v1.3l
+              [2020/11/23 v1.3l
 %<+class>               Standard LaTeX document class]
 %<+style>               LaTeX 2.09 compatibility style option `proc']
 %    \end{macrocode}
@@ -147,7 +147,7 @@
 %
 % \section{Implementation}
 %
-%    In this case a check is needed to see wether \LaTeXe\ runs in
+%    In this case a check is needed to see whether \LaTeXe\ runs in
 %    compatibility mode.
 % \changes{v1.3i}{1994/05/27}{Added missing docstrip guard}
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex-dev/base/proc.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/proc.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/proc.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/slides.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/slides.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/slides.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -53,7 +53,7 @@
 %<*driver>
        \ProvidesFile{slides.drv}
 %</driver>
-              [2020/02/20 v2.4b
+              [2020/11/23 v2.4b
 %<+class>               Standard LaTeX document class]
 %<+cmd>               SLiTeX definitions]
 %    \end{macrocode}
@@ -220,7 +220,7 @@
 % \end{quote}
 %
 % The code is divided into two parts, we first implement the class
-% related functions and declarations and then define lowlevel stuff
+% related functions and declarations and then define low level stuff
 % that is necessary within every class. By placing such commands into
 % a separate file it will be possible to share it with other slide
 % classes.
@@ -288,7 +288,7 @@
 %    \end{macrocode}
 %
 %    The option \Lopt{landscape} switches the values of |\paperheight|
-%    and |\paperwidth|, assuming the dimensions wer given for portrait
+%    and |\paperwidth|, assuming the dimensions were given for portrait
 %    paper.
 %    \begin{macrocode}
 \DeclareOption{landscape}
@@ -705,7 +705,7 @@
 %
 % \begin{macro}{\clubpenalty}
 % \begin{macro}{\widowpenalty}
-%    These penalties are use to discourrage club and widow lines.
+%    These penalties are use to discourage club and widow lines.
 %    Because we use their default values we only show them here,
 %    commented out.
 %    \begin{macrocode}
@@ -718,7 +718,7 @@
 % \begin{macro}{\displaywidowpenalty}
 % \begin{macro}{\predisplaypenalty}
 % \begin{macro}{\postdisplaypenalty}
-%    Discourrage (but not so much) widows in front of a math display
+%    Discourage (but not so much) widows in front of a math display
 %    and forbid breaking directly in front of a display. Allow break
 %    after a display without a penalty. Again the default values are
 %    used, therefore we only show them here.
@@ -1721,7 +1721,7 @@
      \if at titlepage \break \fi}
 %    \end{macrocode}
 
-% \section{Initialisation}
+% \section{Initialization}
 %
 % \subsection{Date}
 %
@@ -2348,8 +2348,8 @@
 %  any output when the |@visible| switch is false.
 %
 % \changes{v2.2j}{1994/03/11}{Corrected \cs{@oval}, like previous
-% \changes{v2.4a}{2016/03/29}{initialise in \cs{@oval}tests added for latex/4452}
-%    change to \file{latex.dtx}.}
+% \changes{v2.4a}{2016/03/29}{Initialize in \cs{@oval}tests added for
+%    latex/4452} change to \file{latex.dtx}.}
 %    \begin{macrocode}
 \def\line(#1,#2)#3{\if at visible\@xarg #1\relax \@yarg #2\relax
 \@linelen #3\unitlength

Modified: trunk/Master/texmf-dist/source/latex-dev/base/slides.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/slides.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/slides.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 
@@ -96,7 +96,7 @@
 
 This is a generated file.
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 
@@ -138,7 +138,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/syntonly.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/syntonly.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/syntonly.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/base/syntonly.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/syntonly.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/syntonly.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 1993-2020
+Copyright (C) 1993-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/tulm.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/tulm.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/tulm.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 2016-2020
+%% Copyright (C) 2016-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%
@@ -48,7 +48,7 @@
 (but please observe conditions on bug reports sent to that address!)
 
 
-Copyright (C) 2016-2020
+Copyright (C) 2016-2021
 The LaTeX3 Project and any individual authors listed elsewhere
 in this file.
 

Modified: trunk/Master/texmf-dist/source/latex-dev/base/unpack.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/unpack.ins	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/unpack.ins	2021-01-09 21:36:18 UTC (rev 57365)
@@ -3,7 +3,7 @@
 %% driver files from the doc files in this package when run through
 %% LaTeX or TeX.
 %%
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %%

Modified: trunk/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %
@@ -216,7 +216,7 @@
 %<+ts1> \ProvidesFile{ts1enc.dfu}
 %<+x2>  \ProvidesFile{x2enc.dfu}
 %<+all> \ProvidesFile{utf8enc.dfu}
-%<-utf8-2018>   [2019/11/14 v1.2k UTF-8 support for inputenc]
+%<-utf8-2018>   [2020/11/26 v1.2k UTF-8 support for inputenc]
 %    \end{macrocode}
 %
 %    \begin{macrocode}
@@ -318,7 +318,7 @@
 %    However, if we are not doing typesetting, then we execute the
 %    command \cs{UTFviii at two@octets at noexpand} which works like
 %    \cs{UTF at two@octets at string} but uses \cs{noexpand} instead of
-%    \cs{string}. This way the sequence is temporay rendered harmless,
+%    \cs{string}. This way the sequence is temporary rendered harmless,
 %    e.g., would display as is or stays put inside a
 %    \cs{protected at edef}. But if the result is later reused the
 %    starting octet is still active and so will be able to construct
@@ -363,7 +363,7 @@
 % \begin{macro}{\UTFviii at two@octets at noexpand}
 % \begin{macro}{\UTFviii at three@octets at noexpand}
 % \begin{macro}{\UTFviii at four@octets at noexpand}
-%    These tempoarily prevent the active chars from expanding.
+%    These temporarily prevent the active chars from expanding.
 %    \begin{macrocode}
 \long\def\UTF at two@octets at noexpand#1#2{\noexpand#2\noexpand}
 \long\def\UTF at three@octets at noexpand#1#2#3{\noexpand#2\noexpand#3\noexpand}
@@ -530,10 +530,11 @@
 %
 %
 % \begin{macro}{\UTFviii at loop}
-%    This bit of code derived from \texttt{xmltex}  defines the active character
-%    correspnding to starting octets to call |\UTFviii at two@octets| etc as appropriate.
-%    The starting octet itself is passed directly as the first argument, the others
-%    are picked up later en route.
+%    This bit of code derived from \texttt{xmltex}  defines the active
+%    character corresponding to starting octets to call |\UTFviii at two@octets|
+%    etc as appropriate. 
+%    The starting octet itself is passed directly as the first
+%    argument, the others are picked up later en route.
 %
 %    The |\UTFviii at loop| loops through the numbers starting at
 %    |\count@| and ending at |\@tempcnta|${} - 1$, each time executing
@@ -691,7 +692,7 @@
 %    \end{macrocode}
 %
 %    Here is an example of what is happening, for the pair \texttt{"C2 "A3}
-%    (which is the utf8 represenation for the character \textsterling{}).
+%    (which is the utf8 representation for the character \textsterling{}).
 %    After |\parse at XML@charref| we have, stored in |\UTFviii at tmp|, a
 %    single command with two character tokens as arguments:
 %    \begin{quote}
@@ -849,7 +850,7 @@
 %
 % \begin{macro}{\decode at UTFviii}
 % \changes{v1.1o}{2015/08/28}{Macro added}
-%    In the reverse direction, take a sequence of octects(bytes)
+%    In the reverse direction, take a sequence of octets(bytes)
 %    representing a character in UTF-8 and construct the Unicode number.
 %    The sequence is terminated by |\relax|.
 %
@@ -1134,7 +1135,7 @@
 %
 % \changes{v1.1o}{2015/08/28}{Add U+00A0 and U+00AD}
 % \changes{v1.1q}{2015/12/02}{Add remaining latin uses of accents in T1}
-% \changes{v1.1r}{2015/12/03}{Add some more ogoneck cases}
+% \changes{v1.1r}{2015/12/03}{Add some more ogonek cases}
 % \changes{v1.1s}{2016/01/11}{Add some more caron and acute}
 % \changes{v1.1t}{2017/01/28}{Add caron cominations for GgYy}
 %    \begin{macrocode}
@@ -1537,7 +1538,7 @@
 %    two mappings are wrong or rather the names in OT2 should change for
 %    consistency.
 %
-%    On the other hand the names |\CYROTLD| are somewhat questionabled as the
+%    On the other hand the names |\CYROTLD| are somewhat questionable as the
 %    Unicode standard only describes ``Cyrillic barred O'' while |TLD| refers
 %    to a tilde (which is more less what the ``Cyrillic FITA looks according
 %    to the Unicode book).

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/alltt.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/alltt.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/alltt.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,12 +44,12 @@
 %%
 %% File `alltt.dtx'.
 %% Copyright (C) 1987 by Leslie Lamport
-%% Copyright (C) 1994--1997 LaTeX3 project, Johannes Braams
+%% Copyright (C) 1994--2020 LaTeX3 project, Johannes Braams
 %%                       all rights reserved.
 %%
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{alltt}
-              [1997/06/16 v2.0g defines alltt environment]
+              [2020/11/23 v2.0g defines alltt environment]
 \begingroup
 \lccode`\~=`\'
 \lowercase{\endgroup

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ansinew.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ansinew.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ansinew.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
   \ProvidesFile{ansinew.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textonehalf}{\ensuremath{\frac12}}
 \ProvideTextCommandDefault{\textonequarter}{\ensuremath{\frac14}}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/applemac.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/applemac.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/applemac.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
   \ProvidesFile{applemac.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textflorin}{\textit{f}}
 \ProvideTextCommandDefault{\textcent}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/article.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/article.cls	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/article.cls	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
 \ProvidesClass{article}
-              [2020/04/10 v1.4m
+              [2020/11/23 v1.4m
  Standard LaTeX document class]
 \newcommand\@ptsize{}
 \newif\if at restonecol

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/article.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/article.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/article.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ascii.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ascii.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ascii.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
  \ProvidesFile{ascii.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \@inpenc at test
 \endinput
 %%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/atbegshi-ltx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/atbegshi-ltx.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/atbegshi-ltx.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,14 +42,14 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 %%
-%% File: ltshipout.dtx (C) Copyright 2020 Frank Mittelbach, LaTeX Team
+%% File: ltshipout.dtx (C) Copyright 2020,2021 Frank Mittelbach, LaTeX Team
 %%
 %%% From File: ltshipout.dtx
-\providecommand\ltshipoutversion{v1.0c}
-\providecommand\ltshipoutdate{2020/09/27}
+\providecommand\ltshipoutversion{v1.0d}
+\providecommand\ltshipoutdate{2020/12/06}
 \ProvidesPackage{atbegshi-ltx}
-   [2020/08/17 v1.0a
-     Emulation of the original atbegshi package^^Jwith kernel methods]
+   [2020/10/15 v1.0b
+     Emulation of the original atbegshi^^Jpackage with kernel methods]
 \let \AtBeginShipoutBox \ShipoutBox
 \let \AtBeginShipoutInit \@empty
 \protected \def \AtBeginShipout     {\AddToHook{shipout/before}}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/atveryend-ltx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/atveryend-ltx.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/atveryend-ltx.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,11 +42,11 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 %%
-%% File: ltfilehook.dtx (C) Copyright 2020 Frank Mittelbach,
+%% File: ltfilehook.dtx (C) Copyright 2020,2021 Frank Mittelbach,
 %%                                         Phelype Oleinik & LaTeX Team
 %%% From File: ltfilehook.dtx
-\providecommand\ltfilehookversion{v1.0c}
-\providecommand\ltfilehookdate{2020/10/18}
+\providecommand\ltfilehookversion{v1.0e}
+\providecommand\ltfilehookdate{2021/01/07}
 \ProvidesPackage{atveryend-ltx}
    [2020/08/19 v1.0a
      Emulation of the original atvery package^^Jwith kernel methods]

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/bezier.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/bezier.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/bezier.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/bk10.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/bk10.clo	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/bk10.clo	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \ProvidesFile{bk10.clo}
-              [2020/04/10 v1.4m
+              [2020/11/23 v1.4m
       Standard LaTeX file (size option)]
 \renewcommand\normalsize{%
    \@setfontsize\normalsize\@xpt\@xiipt

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/bk11.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/bk11.clo	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/bk11.clo	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \ProvidesFile{bk11.clo}
-              [2020/04/10 v1.4m
+              [2020/11/23 v1.4m
       Standard LaTeX file (size option)]
 \renewcommand\normalsize{%
    \@setfontsize\normalsize\@xipt{13.6}%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/bk12.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/bk12.clo	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/bk12.clo	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \ProvidesFile{bk12.clo}
-              [2020/04/10 v1.4m
+              [2020/11/23 v1.4m
       Standard LaTeX file (size option)]
 \renewcommand\normalsize{%
    \@setfontsize\normalsize\@xiipt{14.5}%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/book.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/book.cls	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/book.cls	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
 \ProvidesClass{book}
-              [2020/04/10 v1.4m
+              [2020/11/23 v1.4m
  Standard LaTeX document class]
 \newcommand\@ptsize{}
 \newif\if at restonecol

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/book.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/book.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/book.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/cp1250.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/cp1250.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/cp1250.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
   \ProvidesFile{cp1250.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textcurrency}
    {\TextSymbolUnavailable\textcurrency}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/cp1252.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/cp1252.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/cp1252.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
   \ProvidesFile{cp1252.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textonehalf}{\ensuremath{\frac12}}
 \ProvideTextCommandDefault{\textonequarter}{\ensuremath{\frac14}}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/cp1257.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/cp1257.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/cp1257.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
   \ProvidesFile{cp1257.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textonehalf}{\ensuremath{\frac12}}
 \ProvideTextCommandDefault{\textonequarter}{\ensuremath{\frac14}}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/cp437.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/cp437.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/cp437.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
   \ProvidesFile{cp437.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textflorin}{\textit{f}}
 \ProvideTextCommandDefault{\textpeseta}{Pt}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/cp437de.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/cp437de.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/cp437de.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
   \ProvidesFile{cp437de.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textflorin}{\textit{f}}
 \ProvideTextCommandDefault{\textpeseta}{Pt}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/cp850.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/cp850.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/cp850.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
   \ProvidesFile{cp850.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 %%
 %% If you need a Euro symbol, try cp858 instead.
 %%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/cp852.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/cp852.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/cp852.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
   \ProvidesFile{cp852.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textonehalf}{\ensuremath{\frac12}}
 \ProvideTextCommandDefault{\textonequarter}{\ensuremath{\frac14}}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/cp858.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/cp858.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/cp858.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
   \ProvidesFile{cp858.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textonehalf}{\ensuremath{\frac12}}
 \ProvideTextCommandDefault{\textonequarter}{\ensuremath{\frac14}}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/cp865.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/cp865.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/cp865.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
   \ProvidesFile{cp865.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textflorin}{\textit{f}}
 \ProvideTextCommandDefault{\textpeseta}{Pt}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/decmulti.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/decmulti.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/decmulti.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
  \ProvidesFile{decmulti.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textonehalf}{\ensuremath{\frac12}}
 \ProvideTextCommandDefault{\textonequarter}{\ensuremath{\frac14}}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/doc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/doc.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/doc.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,11 +43,11 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1994/12/01]
  \ProvidesPackage{doc}
-  [2020/06/15 v2.1m
+  [2020/11/23 v2.1m
    Standard LaTeX documentation package (FMi)]
 %%
 %% Package `doc' to use with LaTeX 2e
-%% Copyright (C) 1989-1999 Frank Mittelbach, all rights reserved.
+%% Copyright (C) 1989-2020 Frank Mittelbach, all rights reserved.
 \@ifundefined{macro at cnt}{}{\endinput}
 \catcode`\^^A=14
 \AtBeginDocument{\catcode`\^^A=14\relax}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/docstrip.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/docstrip.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/docstrip.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -45,8 +45,8 @@
 \catcode`\}=2
 \def\filename{docstrip.dtx}
 \def\fileversion{v2.6a}
-\def\filedate{2020-07-07}
-\def\docdate {2020-07-11}
+\def\filedate{2020-11-23}
+\def\docdate {2020-11-23}
 %%
 %% The docstrip program for use with TeX.
 %% Copyright (C) 1989-1991 Frank Mittelbach

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/everyshi-ltx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/everyshi-ltx.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/everyshi-ltx.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,14 +42,14 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 %%
-%% File: ltshipout.dtx (C) Copyright 2020 Frank Mittelbach, LaTeX Team
+%% File: ltshipout.dtx (C) Copyright 2020,2021 Frank Mittelbach, LaTeX Team
 %%
 %%% From File: ltshipout.dtx
-\providecommand\ltshipoutversion{v1.0c}
-\providecommand\ltshipoutdate{2020/09/27}
+\providecommand\ltshipoutversion{v1.0d}
+\providecommand\ltshipoutdate{2020/12/06}
 \ProvidesPackage{everyshi-ltx}
-   [2020/08/17 v1.0a
-    Emulation of the original everyshi package^^Jwith kernel methods]
+   [2020/10/15 v1.0b
+    Emulation of the original everyshi^^Jpackage with kernel methods]
 \protected \def \EveryShipout  {\AddToHook{shipout/before}}
 \protected \def \AtNextShipout {\AddToHookNext{shipout/before}}
 %%
@@ -59,7 +59,7 @@
 %%
 %%   Code that directly manipulates box 255, however, might fail.
 %%   If that is the case look at the shipout hooks offered now as
-%%   they are normally sufficienct to avoid such minpulations (or
+%%   they are normally sufficient to avoid such manipulations (or
 %%   replace box 255 with \ShipoutBox in the code.
 %%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/exscale.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/exscale.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/exscale.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/fix-cm.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/fix-cm.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/fix-cm.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{fix-cm}
-          [2015/01/14 v1.1t fixes to LaTeX]
+          [2020/11/24 v1.1t fixes to LaTeX]
 %%
 
 \input{ts1enc.def}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/fixltx2e.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/fixltx2e.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/fixltx2e.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/flafter.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/flafter.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/flafter.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/fleqn.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/fleqn.clo	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/fleqn.clo	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/fleqn.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/fleqn.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/fleqn.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/fltrace.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/fltrace.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/fltrace.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/fontenc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/fontenc.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/fontenc.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/fontmath.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/fontmath.cfg	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/fontmath.cfg	2021-01-09 21:36:18 UTC (rev 57365)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -37,8 +37,8 @@
 %% 
 %%% From File: fontdef.dtx
 \ProvidesFile{fontmath.cfg}
-           [2020/08/01 v3.0i LaTeX Kernel
-(Uncustomised math
+           [2020/11/24 v3.0i LaTeX Kernel
+(Uncustomized math
            font setup)]
 %%
 %%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/fontmath.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/fontmath.ltx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/fontmath.ltx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -37,7 +37,7 @@
 %% 
 %%% From File: fontdef.dtx
 \ProvidesFile{fontmath.ltx}
-           [2020/08/01 v3.0i LaTeX Kernel
+           [2020/11/24 v3.0i LaTeX Kernel
 (Math
            font setup)]
 \typeout{=== Don't modify this file, use a .cfg file instead ===^^J}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/fonttext.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/fonttext.cfg	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/fonttext.cfg	2021-01-09 21:36:18 UTC (rev 57365)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -37,8 +37,8 @@
 %% 
 %%% From File: fontdef.dtx
 \ProvidesFile{fonttext.cfg}
-           [2020/08/01 v3.0i LaTeX Kernel
-(Uncustomised text
+           [2020/11/24 v3.0i LaTeX Kernel
+(Uncustomized text
            font setup)]
 %%
 %%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/fonttext.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/fonttext.ltx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/fonttext.ltx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -37,7 +37,7 @@
 %% 
 %%% From File: fontdef.dtx
 \ProvidesFile{fonttext.ltx}
-           [2020/08/01 v3.0i LaTeX Kernel
+           [2020/11/24 v3.0i LaTeX Kernel
 (Text
            font setup)]
 \typeout{=== Don't modify this file, use a .cfg file instead ===^^J}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/graphpap.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/graphpap.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/graphpap.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/hyphen.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/hyphen.ltx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/hyphen.ltx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/idx.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/idx.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/idx.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ifthen.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ifthen.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ifthen.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -49,7 +49,7 @@
 %%
 \NeedsTeXFormat{LaTeX2e}[1994/12/01]
 \ProvidesPackage{ifthen}
-          [2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)]
+          [2020/11/24 v1.1c Standard LaTeX ifthen package (DPC)]
 \def\TE at throw{\@ne=\@ne\noexpand\fi}
 \def\boolean#1#2{%
   \TE at throw\expandafter\noexpand\csname if#1\endcsname#2}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/inputenc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/inputenc.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/inputenc.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -45,7 +45,7 @@
 
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
 \ProvidesPackage{inputenc}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \def\DeclareInputMath#1{%
    \@inpenc at test
    \bgroup

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/lablst.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/lablst.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/lablst.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/latex.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/latex.ltx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/latex.ltx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -55,7 +55,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -710,7 +710,7 @@
 \def\fmtname{LaTeX2e}
 \edef\fmtversion
    {2021-05-01}
-\def\patch at level{0}
+\def\patch at level{-1}
 \edef\development at branch@name{develop \the\year-\the\month-\the\day}
 \iffalse
 \def\reserved at a#1/#2/#3\@nil{%
@@ -988,6 +988,8 @@
   }
 \fi
 %%% From File: ltexpl.dtx
+\let\@kernel at after@enddocument\@empty
+\let\@kernel at after@enddocument at afterlastpage\@empty
 \def\@expl at sys@load at backend@@{}
 \def\@expl at push@filename@@{}
 \def\@expl at push@filename at aux@@{}
@@ -1625,11 +1627,11 @@
     \xdef#1{\the\toks@}%
   \endgroup}
 %%
-%% File: lthooks.dtx (C) Copyright 2020 Frank Mittelbach,
+%% File: lthooks.dtx (C) Copyright 2020,2021 Frank Mittelbach,
 %%                                      Phelype Oleinik & LaTeX Team
 %%% From File: lthooks.dtx
-\def\lthooksversion{v1.0e}
-\def\lthooksdate{2020/10/23}
+\def\lthooksversion{v1.0h}
+\def\lthooksdate{2021/01/07}
 \ExplSyntaxOn
 \bool_new:N \g__hook_debug_bool
 \cs_new_eq:NN \__hook_debug:n \use_none:n
@@ -1666,6 +1668,34 @@
 \cs_generate_variant:Nn \tl_show:n { x }
 \cs_generate_variant:Nn \tl_log:n { x }
 \scan_new:N \s__hook_mark
+\cs_new_protected:Npn \__hook_tl_set:Nn #1#2
+  { \cs_set_nopar:Npx #1 { \__kernel_exp_not:w {#2} } }
+\cs_new_protected:Npn \__hook_tl_set:Nx #1#2
+  { \cs_set_nopar:Npx #1 {#2} }
+\cs_generate_variant:Nn \__hook_tl_set:Nn { c }
+\cs_generate_variant:Nn \__hook_tl_set:Nx { c }
+\cs_new_protected:Npn \__hook_tl_gset:Nn #1#2
+  { \cs_gset_nopar:Npx #1 { \__kernel_exp_not:w {#2} } }
+\cs_new_protected:Npn \__hook_tl_gset:No #1#2
+  { \cs_gset_nopar:Npx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
+\cs_new_protected:Npn \__hook_tl_gset:Nx #1#2
+  { \cs_gset_nopar:Npx #1 {#2} }
+\cs_generate_variant:Nn \__hook_tl_gset:Nn { c }
+\cs_generate_variant:Nn \__hook_tl_gset:No { c }
+\cs_generate_variant:Nn \__hook_tl_gset:Nx { c }
+\cs_new_protected:Npn \__hook_tl_gput_right:Nn #1#2
+  { \__hook_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } }
+\cs_generate_variant:Nn \__hook_tl_gput_right:Nn { No, cn }
+\cs_new_protected:Npn \__hook_tl_gput_left:Nn #1#2
+  {
+    \__hook_tl_gset:Nx #1
+      { \__kernel_exp_not:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
+  }
+\cs_generate_variant:Nn \__hook_tl_gput_left:Nn { No }
+\cs_new_eq:NN \__hook_tl_gset_eq:NN \tl_gset_eq:NN
+\cs_new_protected:Npn \__hook_tl_gclear:N #1
+  { \__hook_tl_gset_eq:NN #1 \c_empty_tl }
+\cs_generate_variant:Nn \__hook_tl_gclear:N { c }
 \cs_new_protected:Npn \hook_new:n #1
   { \__hook_normalize_hook_args:Nn \__hook_new:n {#1} }
 \cs_new_protected:Npn \__hook_new:n #1
@@ -1686,6 +1716,7 @@
     \__hook_if_exist:nF {#1}
       {
         \prop_new:c { g__hook_#1_code_prop }
+        \tl_new:c { __hook_toplevel~#1 }
         \tl_new:c { __hook_next~#1 }
       }
   }
@@ -1700,7 +1731,6 @@
   { \hook_new:n {#1} \hook_new_reversed:n {#2} }
 \cs_new_protected:Npn \__hook_include_legacy_code_chunk:n #1
   {
-    \debug_suspend:
     \tl_if_exist:cT { @#1hook }
       {
         \tl_if_empty:cF { @#1hook }
@@ -1707,52 +1737,52 @@
           {
             \exp_args:Nnnv \__hook_hook_gput_code_do:nnn {#1}
                                   { legacy } { @#1hook }
-            \tl_gclear:c { @#1hook }
+            \__hook_tl_gclear:c { @#1hook }
           }
       }
-    \debug_resume:
   }
 \cs_new:Npn \__hook_parse_label_default:n #1
   {
     \tl_if_novalue:nTF {#1}
-      { \__hook_currname_or_default:n { top-level } }
-      {
-        \tl_trim_spaces_apply:nN {#1}
-          \__hook_parse_dot_label:nn { top-level }
-      }
+      { \__hook_currname_or_default: }
+      { \tl_trim_spaces_apply:nN {#1} \__hook_parse_dot_label:n }
   }
-\cs_new:Npn \__hook_parse_dot_label:nn #1 #2
+\cs_new:Npn \__hook_parse_dot_label:n #1
   {
     \tl_if_empty:nTF {#1}
       {
-        \msg_expandable_error:nnn { hooks } { empty-label } {#2}
-        #2
+        \msg_expandable_error:nn { hooks } { empty-label }
+        \__hook_currname_or_default:
       }
       {
         \str_if_eq:nnTF {#1} { . }
-          { \__hook_currname_or_default:n {#2} }
-          { \__hook_parse_dot_label:nw {#2} #1 ./ \s__hook_mark }
+          { \__hook_currname_or_default: }
+          { \__hook_parse_dot_label:w #1 ./ \s__hook_mark }
       }
   }
-\cs_new:Npn \__hook_parse_dot_label:nw #1 #2 ./ #3 \s__hook_mark
+\cs_new:Npn \__hook_parse_dot_label:w #1 ./ #2 \s__hook_mark
   {
-    \tl_if_empty:nTF {#2}
-      { \__hook_parse_dot_label_aux:nw {#1} #3 \s__hook_mark }
+    \tl_if_empty:nTF {#1}
+      { \__hook_parse_dot_label_aux:w #2 \s__hook_mark }
       {
-        \tl_if_empty:nTF {#3}
-          { \__hook_make_name:n {#2} }
-          { \__hook_parse_dot_label_cleanup:w #2 ./ #3 \s__hook_mark }
+        \tl_if_empty:nTF {#2}
+          { \__hook_make_name:n {#1} }
+          { \__hook_parse_dot_label_cleanup:w #1 ./ #2 \s__hook_mark }
       }
   }
 \cs_new:Npn \__hook_parse_dot_label_cleanup:w #1 ./ \s__hook_mark {#1}
-\cs_new:Npn \__hook_parse_dot_label_aux:nw #1 #2 ./ \s__hook_mark
-  { \__hook_currname_or_default:n {#1} / \__hook_make_name:n {#2} }
-\cs_new:Npn \__hook_currname_or_default:n #1
+\cs_new:Npn \__hook_parse_dot_label_aux:w #1 ./ \s__hook_mark
+  { \__hook_currname_or_default: / \__hook_make_name:n {#1} }
+\cs_new:Npn \__hook_currname_or_default:
   {
     \tl_if_empty:NTF \g__hook_hook_curr_name_tl
       {
         \tl_if_empty:NTF \@currname
-          { \__hook_make_name:n {#1} }
+          {
+            \msg_expandable_error:nnn { hooks } { should-not-happen }
+              { Empty~default~label. }
+            \__hook_make_name:n { label-missing }
+          }
           { \@currname }
       }
       { \g__hook_hook_curr_name_tl }
@@ -1822,12 +1852,23 @@
                       \hook_if_exist:nF {#1} { undeclared~ }
                       hook~ #1~ (#2)
                       \on at line\space <-~ \tl_to_str:n{#3}} }
-    \prop_get:cnNTF { g__hook_#1_code_prop } {#2} \l__hook_return_tl
+    \str_if_eq:nnTF {#2} { top-level }
       {
-        \prop_gput:cno { g__hook_#1_code_prop } {#2}
-          { \l__hook_return_tl #3 }
+        \str_if_eq:eeTF { top-level } { \__hook_currname_or_default: }
+          {
+            \__hook_declare:n {#1}
+            \__hook_tl_gput_right:cn { __hook_toplevel~#1 } {#3}
+          }
+          { \msg_error:nnn { hooks } { misused-top-level } {#1} }
       }
-      { \prop_gput:cnn { g__hook_#1_code_prop } {#2} {#3} }
+      {
+        \prop_get:cnNTF { g__hook_#1_code_prop } {#2} \l__hook_return_tl
+          {
+            \prop_gput:cno { g__hook_#1_code_prop } {#2}
+              { \l__hook_return_tl #3 }
+          }
+          { \prop_gput:cnn { g__hook_#1_code_prop } {#2} {#3} }
+      }
   }
 \cs_new_protected:Npn \__hook_gput_undeclared_hook:nnn #1 #2 #3
   {
@@ -1900,11 +1941,11 @@
   { \__hook_strip_double_slash:n {#1} }
 \cs_new:Npn \__hook_strip_double_slash:n #1
   { \__hook_strip_double_slash:w #1 // \s__hook_mark }
-\cs_new:Npn \__hook_strip_double_slash:w #1 // #2 \s__hook_mark
+\cs_new:Npn \__hook_strip_double_slash:w #1/#2/#3 // #4 \s__hook_mark
   {
-    \tl_if_empty:nTF {#2}
-      {#1}
-      { \__hook_strip_double_slash:w #1 / #2 \s__hook_mark }
+    \tl_if_empty:nTF {#4}
+      { #1/#2/#3 }
+      { \__hook_strip_double_slash:w #1/#2/#3 / #4 \s__hook_mark }
   }
 \prop_const_from_keyval:Nn \c__hook_generics_prop
   {env=,file=,package=,class=,include=}
@@ -1918,13 +1959,21 @@
     \__hook_if_exist:nTF {#1}
       {
         \str_if_eq:nnTF {#2} {*}
-          { \prop_gclear:c { g__hook_#1_code_prop } }
           {
-            \prop_get:cnNTF { g__hook_#1_code_prop } {#2} \l__hook_return_tl
-              { \__hook_gremove_code_do:nn }
-              { \__hook_mark_removal:nn }
-                  {#1} {#2}
+            \prop_gclear:c { g__hook_#1_code_prop }
+            \__hook_tl_gclear:c { __hook_toplevel~#1 }
+            \__hook_tl_gclear:c { __hook_next~#1 }
           }
+          {
+            \str_if_eq:nnTF {#2} { top-level }
+              { \__hook_tl_gclear:c { __hook_toplevel~#1 } }
+              {
+                \prop_get:cnNTF { g__hook_#1_code_prop } {#2} \l__hook_return_tl
+                  { \__hook_gremove_code_do:nn }
+                  { \__hook_mark_removal:nn }
+                      {#1} {#2}
+              }
+          }
         \hook_if_exist:nT {#1}
           { \__hook_update_hook_code:n {#1} }
       }
@@ -1962,7 +2011,6 @@
   {
     \__hook_declare:n {#1}
     \__hook_rule_gclear:nnn {#1} {#2} {#4}
-    \debug_suspend:
     \cs_if_exist_use:cTF { __hook_rule_#3_gset:nnn }
       {
           {#1} {#2} {#4}
@@ -1970,29 +2018,28 @@
       }
       { \msg_error:nnnnnn { hooks } { unknown-rule }
                           {#1} {#2} {#3} {#4}        }
-    \debug_resume:
   }
 \cs_new_protected:Npn \__hook_rule_before_gset:nnn #1#2#3
   {
-    \tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl }
+    \__hook_tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl }
       { \__hook_label_ordered:nnTF {#2} {#3} { < } { > } }
   }
 \cs_new_eq:cN { __hook_rule_<_gset:nnn } \__hook_rule_before_gset:nnn
 \cs_new_protected:Npn \__hook_rule_after_gset:nnn #1#2#3
   {
-    \tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#3} {#2} _tl }
+    \__hook_tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#3} {#2} _tl }
       { \__hook_label_ordered:nnTF {#3} {#2} { < } { > } }
   }
 \cs_new_eq:cN { __hook_rule_>_gset:nnn } \__hook_rule_after_gset:nnn
 \cs_new_protected:Npn \__hook_rule_voids_gset:nnn #1#2#3
   {
-    \tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl }
+    \__hook_tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl }
       { \__hook_label_ordered:nnTF {#2} {#3} { -> } { <- } }
   }
 \cs_new_protected:cpn { __hook_rule_incompatible-error_gset:nnn } #1#2#3
-  { \tl_gset:cn { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } { xE } }
+  { \__hook_tl_gset:cn { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } { xE } }
 \cs_new_protected:cpn { __hook_rule_incompatible-warning_gset:nnn } #1#2#3
-  { \tl_gset:cn { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } { xW } }
+  { \__hook_tl_gset:cn { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } { xW } }
 \cs_new_protected:Npn \__hook_rule_unrelated_gset:nnn #1#2#3 { }
 \cs_new_protected:Npn \__hook_rule_gclear:nnn #1#2#3
   { \cs_undefine:c { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } }
@@ -2039,7 +2086,6 @@
 }
 \cs_new_protected:Npn \__hook_initialize_hook_code:n #1
   {
-    \debug_suspend:
     \__hook_debug:n{ \iow_term:x{^^JUpdate~ code~ for~ hook~
                                     '#1' \on at line :^^J} }
     \__hook_include_legacy_code_chunk:n {#1}
@@ -2046,23 +2092,26 @@
     \hook_if_exist:nT {#1}
       {
         \prop_if_empty:cTF {g__hook_#1_code_prop}
-          { \tl_gset:co { __hook~#1 }
-                        { \cs:w __hook_next~#1 \cs_end: } }
           {
+            \__hook_tl_gset:co { __hook~#1 }
+              {
+                \cs:w __hook_toplevel~#1 \exp_after:wN \cs_end:
+                \cs:w __hook_next~#1 \cs_end:
+              }
+          }
+          {
             \__hook_if_reversed:nTF {#1}
-              { \cs_set_eq:NN \__hook_tl_gput:NV    \tl_gput_left:NV
+              { \cs_set_eq:NN \__hook_tl_gput:Nn    \__hook_tl_gput_left:Nn
                 \cs_set_eq:NN \__hook_clist_gput:NV \clist_gput_left:NV  }
-              { \cs_set_eq:NN \__hook_tl_gput:NV    \tl_gput_right:NV
+              { \cs_set_eq:NN \__hook_tl_gput:Nn    \__hook_tl_gput_right:Nn
                 \cs_set_eq:NN \__hook_clist_gput:NV \clist_gput_right:NV }
             \prop_set_eq:Nc \l__hook_work_prop { g__hook_#1_code_prop }
-            \__hook_initialize_single:cccn
-              { __hook~#1 } { __hook_next~#1 }
-              { g__hook_#1_labels_clist } {#1}
+            \__hook_initialize_single:ccn
+              { __hook~#1 } { g__hook_#1_labels_clist } {#1}
             \__hook_debug:n{ \exp_args:NNx \prop_gput:Nnn
                                        \g__hook_used_prop {#1}{} }
           }
       }
-    \debug_resume:
   }
 \cs_new:Npn \__hook_tl_csname:n #1 { l__hook_label_#1_tl }
 \cs_new:Npn \__hook_seq_csname:n #1 { l__hook_label_#1_seq }
@@ -2071,16 +2120,16 @@
 \tl_new:N \l__hook_front_tl
 \tl_new:N \l__hook_rear_tl
 \tl_new:c { \__hook_tl_csname:n { 0 } }
-\cs_new_protected:Npn \__hook_initialize_single:NNNn #1#2#3#4
+\cs_new_protected:Npn \__hook_initialize_single:NNn #1#2#3
   {
     \seq_clear:N \l__hook_labels_seq
     \int_zero:N  \l__hook_labels_int
-    \tl_set:Nn \l__hook_cur_hook_tl {#4}
+    \tl_set:Nn \l__hook_cur_hook_tl {#3}
     \prop_map_inline:Nn \l__hook_work_prop
        {
          \int_incr:N \l__hook_labels_int
          \seq_put_right:Nn \l__hook_labels_seq {##1}
-         \tl_set:cn { \__hook_tl_csname:n {##1} }{0}
+         \__hook_tl_set:cn { \__hook_tl_csname:n {##1} } { 0 }
          \seq_clear_new:c { \__hook_seq_csname:n {##1} }
        }
     \prop_map_inline:Nn \l__hook_work_prop
@@ -2091,7 +2140,7 @@
               { \prop_map_break: }
               { \__hook_apply_label_pair:nnn {##1} {####1} }
               { \__hook_apply_label_pair:nnn {####1} {##1} }
-                  {#4}
+                  {#3}
           }
       }
     \__hook_debug:n { \__hook_debug_label_data:N \l__hook_work_prop }
@@ -2106,14 +2155,14 @@
             }
       }
     \tl_set_eq:Nc \l__hook_front_tl { \__hook_tl_csname:n { 0 } }
-    \tl_gclear:N #1
-    \clist_gclear:N #3
+    \__hook_tl_gclear:N #1
+    \clist_gclear:N #2
     \bool_while_do:nn { ! \str_if_eq_p:Vn \l__hook_front_tl { 0 } }
       {
         \int_decr:N \l__hook_labels_int
         \prop_get:NVN \l__hook_work_prop \l__hook_front_tl \l__hook_return_tl
-        \__hook_tl_gput:NV #1 \l__hook_return_tl
-        \__hook_clist_gput:NV #3 \l__hook_front_tl
+        \exp_args:NNV \__hook_tl_gput:Nn #1 \l__hook_return_tl
+        \__hook_clist_gput:NV #2 \l__hook_front_tl
         \__hook_debug:n{ \iow_term:x{Handled~ code~ for~ \l__hook_front_tl} }
         \seq_map_inline:cn { \__hook_seq_csname:n { \l__hook_front_tl } }
           {
@@ -2138,11 +2187,12 @@
         \__hook_debug_label_data:N \l__hook_work_prop
         \iow_term:x{====================}
       }
-    \tl_gput_right:Nn #1 {#2}
+    \exp_args:NNo \__hook_tl_gput:Nn #1 { \cs:w __hook_toplevel~#3 \cs_end: }
+    \__hook_tl_gput_right:No #1 { \cs:w __hook_next~#3 \cs_end: }
   }
-\cs_generate_variant:Nn \__hook_initialize_single:NNNn {ccc}
-\cs_new:Npn \__hook_tl_gput:NV     {\ERROR}
-\cs_new:Npn \__hook_clist_gput:NV  {\ERROR}
+\cs_generate_variant:Nn \__hook_initialize_single:NNn { cc }
+\cs_new:Npn \__hook_tl_gput:Nn    { \ERROR }
+\cs_new:Npn \__hook_clist_gput:NV { \ERROR }
 \cs_new_protected:Npn \__hook_apply_label_pair:nnn #1#2#3
   {
     \__hook_label_if_exist_apply:nnnF {#1} {#2} {#3}
@@ -2261,7 +2311,8 @@
     \__hook_log_cmd:x { ^^J ->~The~hook~'#1': }
     \hook_if_exist:nF {#1}
       { \__hook_log_line:x { is~not~declared! } }
-    \__hook_if_exist:nTF {#1}
+    \hook_if_empty:nTF {#1}
+      { #2 { The~hook~is~empty } }
       {
         \__hook_log_line:x { Code~chunks: }
         \prop_if_empty:cTF { g__hook_#1_code_prop }
@@ -2270,9 +2321,21 @@
             \prop_map_inline:cn { g__hook_#1_code_prop }
               { \__hook_log_line_indent:x { ##1~->~\tl_to_str:n {##2} } }
           }
-        \__hook_log_line:x { Extra~code~for~next~invocation:}
+        \__hook_log_line:x
+          {
+            Document-level~(top-level)~code
+            \hook_if_exist:nT {#1}
+              { ~(executed~\__hook_if_reversed:nTF {#1} {first} {last} ) } :
+          }
         \__hook_log_line_indent:x
           {
+            \tl_if_empty:cTF { __hook_toplevel~#1 }
+              { --- }
+              { -> ~ \exp_args:Nv \tl_to_str:n { __hook_toplevel~#1 } }
+          }
+        \__hook_log_line:x { Extra~code~for~next~invocation: }
+        \__hook_log_line_indent:x
+          {
             \tl_if_empty:cTF { __hook_next~#1 }
               { --- }
               { ->~ \exp_args:Nv \__hook_log_next_code:n { __hook_next~#1 } }
@@ -2321,7 +2384,6 @@
               }
           }
       }
-      { #2 { The~hook~is~empty. } }
   }
 \cs_new:Npn \__hook_log_next_code:n #1
   { \exp_args:No \tl_to_str:n { \use_none:nn #1 } }
@@ -2342,7 +2404,7 @@
   }
 \cs_new_protected:Npn \__hook_list_one_rule:nnn #1#2#3
   {
-    \__hook_list_if_rule_exists:nnnF {#1} {#2} {#3} { }
+    \__hook_list_if_rule_exists:nnnF {#1} {#2} {#3}
       { \__hook_list_if_rule_exists:nnnF {#1} {#2} { ?? } { } }
   }
 \cs_new_protected:Npn \__hook_list_if_rule_exists:nnnF #1#2#3
@@ -2350,7 +2412,9 @@
     \if_cs_exist:w g__hook_ #3 _rule_ #1 | #2 _tl \cs_end:
       \exp_args:Nv \__hook_tmp:w
         { g__hook_ #3 _rule_ #1 | #2 _tl } { #1 | #2 } {#3}
+      \exp_after:wN \use_none:nn
     \fi:
+    \use:n
   }
 \cs_new_protected:Npn \__hook_debug_print_rules:n #1
   {
@@ -2372,12 +2436,10 @@
   { \__hook_normalize_hook_args:Nn \__hook_gput_next_code:nn {#1} }
 \cs_new_protected:Npn \__hook_gput_next_code:nn #1 #2
   {
-    \debug_suspend:
     \__hook_declare:n {#1}
     \hook_if_exist:nTF {#1}
       { \__hook_gput_next_do:nn {#1} {#2} }
       { \__hook_try_declaring_generic_next_hook:nn {#1} {#2} }
-    \debug_resume:
   }
 \cs_new_protected:Npn \__hook_gput_next_do:nn #1
   {
@@ -2389,8 +2451,8 @@
     \tl_if_empty:cT { __hook~#2 }
       { \__hook_update_hook_code:n {#2} }
     \tl_if_empty:NT #1
-      { \tl_gset:Nn #1 { \__hook_clear_next:n {#2} } }
-    \tl_gput_right:Nn #1
+      { \__hook_tl_gset:Nn #1 { \__hook_clear_next:n {#2} } }
+    \__hook_tl_gput_right:Nn #1
   }
 \cs_new_protected:Npn \__hook_clear_next:n #1
   { \cs_gset_eq:cN { __hook_next~#1 } \c_empty_tl }
@@ -2460,7 +2522,11 @@
       {
         \bool_lazy_and:nnTF
             { \prop_if_empty_p:c { g__hook_#1_code_prop } }
-            { \tl_if_empty_p:c { __hook_next~#1 } }
+            {
+              \bool_lazy_and_p:nn
+                { \tl_if_empty_p:c { __hook_toplevel~#1 } }
+                { \tl_if_empty_p:c { __hook_next~#1 } }
+            }
           { \prg_return_true: }
           { \prg_return_false: }
       }
@@ -2502,7 +2568,15 @@
       name.\\
       Please~ use~ a~ different~ name~ for~ your~ hook.}
 \msg_new:nnn { hooks } { empty-label }
-  { Empty~code~label~\msg_line_context:.~Using~`#1'~instead. }
+  {
+    Empty~code~label~\msg_line_context:.~
+    Using~`\__hook_currname_or_default:'~instead.
+  }
+\msg_new:nnn { hooks } { no-default-label }
+  {
+    Missing~(empty)~default~label~\msg_line_context:. \\
+    This~command~was~ignored.
+  }
 \msg_new:nnnn { hooks } { unknown-rule }
   { Unknown~ relationship~ `#3'~
     between~ labels~ `#2'~ and~ `#4'~
@@ -2518,6 +2592,39 @@
     `voids'~ or~
     `unrelated'.
   }
+\msg_new:nnnn { hooks } { misused-top-level }
+  {
+    Illegal~\iow_char:N \\AddToHook{#1}[top-level]{...}.\\
+    'top-level'~is~reserved~for~the~user's~document.
+  }
+  {
+    The~'top-level'~label~is~meant~for~user~code~only,~and~should~only~
+    be~used~(sparingly)~in~the~main~document.~Use~the~default~label~
+    '\__hook_currname_or_default:'~for~this~\@cls at pkg,~or~another~
+    suitable~label.
+  }
+\msg_new:nnn { hooks } { set-top-level }
+  {
+    You~cannot~change~the~default~label~#1~`top-level'.~Illegal \\
+    \use:nn { ~ } { ~ } \iow_char:N \\#2{#3} \\
+    \msg_line_context:.
+  }
+\msg_new:nnn { hooks } { ddhl-deprecated }
+  {
+    \iow_char:N \\DeclareDefaultHookLabel~is~deprecated.\\
+    Use~\iow_char:N \\SetDefaultHookLabel~instead.\\ \\
+    The~deprecated~name~will~be~removed~in~the~next~release.
+  }
+\msg_new:nnn { hooks } { extra-pop-label }
+  {
+    Extra~\iow_char:N \\PopDefaultHookLabel. \\
+    This~command~will~be~ignored.
+  }
+\msg_new:nnn { hooks } { missing-pop-label }
+  {
+    Missing~\iow_char:N \\PopDefaultHookLabel. \\
+    The~label~`#1'~was~pushed~but~never~popped.~Something~is~wrong.
+  }
 \msg_new:nnn { hooks } { should-not-happen }
   {
     ERROR!~This~should~not~happen.~#1 \\
@@ -2532,27 +2639,76 @@
   { \hook_gput_next_code:nn {#1} {#2} }
 \NewDocumentCommand \RemoveFromHook { m o }
   { \hook_gremove_code:nn {#1} {#2} }
-\seq_gpush:Nn \g__hook_name_stack_seq { }
+\tl_gset:Nn \g__hook_hook_curr_name_tl { top-level }
 \cs_new_protected:Npn \__hook_curr_name_push:n #1
+  { \exp_args:Nx \__hook_curr_name_push_aux:n { \__hook_make_name:n {#1} } }
+\cs_new_protected:Npn \__hook_curr_name_push_aux:n #1
   {
-    \seq_gpush:Nn \g__hook_name_stack_seq {#1}
-    \tl_gset:Nn \g__hook_hook_curr_name_tl {#1}
+    \tl_if_blank:nTF {#1}
+      { \msg_error:nn { hooks } { no-default-label } }
+      {
+        \str_if_eq:nnTF {#1} { top-level }
+          {
+            \msg_error:nnnnn { hooks } { set-top-level }
+              { to } { PushDefaultHookLabel } {#1}
+          }
+          {
+            \seq_gpush:NV \g__hook_name_stack_seq \g__hook_hook_curr_name_tl
+            \tl_gset:Nn \g__hook_hook_curr_name_tl {#1}
+          }
+      }
   }
 \cs_new_protected:Npn \__hook_curr_name_pop:
   {
-    \seq_gpop:NN \g__hook_name_stack_seq \l__hook_return_tl
-    \seq_get:NNTF \g__hook_name_stack_seq \l__hook_return_tl
+    \seq_gpop:NNTF \g__hook_name_stack_seq \l__hook_return_tl
       { \tl_gset_eq:NN \g__hook_hook_curr_name_tl \l__hook_return_tl }
+      { \msg_error:nn { hooks } { extra-pop-label } }
+  }
+\tl_gput_right:Nn \@kernel at after@enddocument at afterlastpage
+  { \__hook_end_document_label_check: }
+\cs_new_protected:Npn \__hook_end_document_label_check:
+  {
+    \seq_gpop:NNT \g__hook_name_stack_seq \l__hook_return_tl
       {
-        \msg_error:nnn { hooks } { should-not-happen }
-          { Tried~to~pop~from~an~empty~default~label~stack. }
+        \msg_error:nnx { hooks } { missing-pop-label }
+          { \g__hook_hook_curr_name_tl }
+        \tl_gset_eq:NN \g__hook_hook_curr_name_tl \l__hook_return_tl
+        \__hook_end_document_label_check:
       }
   }
+\NewDocumentCommand \SetDefaultHookLabel { m }
+  {
+    \seq_if_empty:NTF \g__hook_name_stack_seq
+      {
+        \msg_error:nnnnn { hooks } { set-top-level }
+          { for } { SetDefaultHookLabel } {#1}
+      }
+      { \exp_args:Nx \__hook_set_default_label:n { \__hook_make_name:n {#1} } }
+  }
+\cs_new_protected:Npn \__hook_set_default_label:n #1
+  {
+    \str_if_eq:nnTF {#1} { top-level }
+      {
+        \msg_error:nnnnn { hooks } { set-top-level }
+          { to } { SetDefaultHookLabel } {#1}
+      }
+      { \tl_gset:Nn \g__hook_hook_curr_name_tl {#1} }
+  }
 \NewDocumentCommand \DeclareDefaultHookLabel { m }
   {
-    \seq_gpop:NN \g__hook_name_stack_seq \l__hook_return_tl
-    \__hook_curr_name_push:n {#1}
+    \msg_error:nn { hooks } { ddhl-deprecated }
+    \SetDefaultHookLabel {#1}
   }
+\NewDocumentCommand \PushDefaultHookLabel { m }
+  { \__hook_curr_name_push:n {#1} }
+\NewDocumentCommand \PopDefaultHookLabel { }
+  { \__hook_curr_name_pop: }
+\cs_gset_protected:Npn \@expl at push@filename at aux@@ #1#2#3
+  {
+    \__hook_curr_name_push:n {#3}
+    \str_gset:Nx \g_file_curr_name_str {#3}
+    #1 #2 {#3}
+  }
 \cs_new:Npn \UseHook        { \hook_use:n }
 \cs_new:Npn \UseOneTimeHook { \hook_use_once:n }
 \cs_new_protected:Npn \ShowHook { \hook_show:n }
@@ -2571,8 +2727,6 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
 \cs_new_eq:NN \@expl@@@initialize at all@@
               \__hook_initialize_all:
-\cs_new_eq:NN \@expl@@@hook at curr@name at push@@n
-              \__hook_curr_name_push:n
 \cs_new_eq:NN \@expl@@@hook at curr@name at pop@@
               \__hook_curr_name_pop:
 \ExplSyntaxOff
@@ -4048,7 +4202,7 @@
 \DeclareRobustCommand\fontfamily[1]{\edef\f at family{#1}}
 \DeclareRobustCommand\usefont[4]{\fontencoding{#1}%
    \edef\f at family{#2}%
-   \edef\f at series{#3}%
+   \set at target@series{#3}%
    \edef\f at shape{#4}\selectfont
    \ignorespaces}
 \DeclareRobustCommand\linespread[1]
@@ -4715,12 +4869,14 @@
 \DeclareFontSeriesChangeRule {ulx}{?m}{ul}{}
 \DeclareFontSeriesChangeRule {ul}{?m}{ul}{}
 \DeclareFontSeriesChangeRule {x}{?m}{m}{}
-
-
+\DeclareRobustCommand\fontseries[1]{\@forced at seriesfalse
+    \expandafter\def\expandafter\delayed at f@adjustment\expandafter
+        {\delayed at f@adjustment\delayed at merge@font at series{#1}}}
+\let\delayed at f@adjustment\@empty
+\DeclareRobustCommand\fontseriesforce[1]{\@forced at seriestrue
+    \expandafter\def\expandafter\delayed at f@adjustment\expandafter
+      {\delayed at f@adjustment\edef\f at series{#1}}}
 \newif\if at forced@series
-\DeclareRobustCommand\fontseriesforce[1]{\@forced at seriestrue\edef\f at series{#1}}
-\DeclareRobustCommand\fontseries[1]{\@forced at seriesfalse\merge at font@series{#1}}
-
 \def\merge at font@series#1{%
   \expandafter\expandafter\expandafter
   \merge at font@series@
@@ -4728,13 +4884,11 @@
     {#1}%
     \@nil
 }
-
 \def\merge at font@series@#1#2#3\@nil{%
   \def\reserved at a{#3}%
   \ifx\reserved at a\@empty
     \set at target@series{#2}%
   \else
-    \maybe at load@fontshape
     \edef\reserved at a{\f at encoding /\f at family /#1/\f at shape}%
      \ifcsname \reserved at a \endcsname
        \set at target@series{#1}%
@@ -4756,8 +4910,27 @@
                     using `\reserved at b' instead}%
    \fi
 }
-\def\maybe at load@fontshape{\begingroup\try at load@fontshape\endgroup}
-\DeclareFontSeriesChangeRule {m}{sc}{msc}{mc}
+\def\merge at font@series at without@substitution#1{%
+  \expandafter\expandafter\expandafter
+  \merge at font@series at without@substitution@
+    \csname series@\f at series @#1\endcsname
+    {#1}%
+    \@nil
+}
+\def\merge at font@series at without@substitution@#1#2#3\@nil{%
+  \def\reserved at a{#3}%
+  \ifx\reserved at a\@empty
+    \set at target@series{#2}%
+  \else
+    \set at target@series{#1}%
+  \fi
+}
+\let\delayed at merge@font at series\merge at font@series at without@substitution
+\def\maybe at load@fontshape{%
+  \begingroup
+    \let \typeout \@font at info
+    \try at load@fontshape
+  \endgroup}
 \def\set at target@series#1{%
     \edef\f at series{#1}%
     \series at maybe@drop at one@m\f at series\f at series
@@ -4836,8 +5009,13 @@
 \DeclareFontShapeChangeRule {sw}{sc}  {scsw}  {}
 \DeclareFontShapeChangeRule {sw}{ulc} {sw}    {}
 \DeclareFontShapeChangeRule {sw}{up} {n}      {}
-\DeclareRobustCommand\fontshape[1]{\merge at font@shape{#1}}
-\DeclareRobustCommand\fontshapeforce[1]{\edef\f at shape{#1}}
+\DeclareRobustCommand\fontshape[1]
+   {\expandafter\def\expandafter\delayed at f@adjustment\expandafter
+        {\delayed at f@adjustment\delayed at merge@font at shape{#1}}}
+\DeclareRobustCommand\fontshapeforce[1]
+   {\expandafter\def\expandafter\delayed at f@adjustment\expandafter
+        {\delayed at f@adjustment\edef\f at shape{#1}}}
+
 \def\merge at font@shape#1{%
   \expandafter\expandafter\expandafter
   \merge at font@shape@
@@ -4851,9 +5029,8 @@
   \ifx\reserved at a\@empty
     \edef\f at shape{#2}%
   \else
-    \maybe at load@fontshape
     \edef\reserved at a{\f at encoding /\f at family /\f at series/#1}%
-     \ifcsname \reserved at a\endcsname
+    \ifcsname \reserved at a\endcsname
        \edef\f at shape{#1}%
     \else
        \ifcsname \f at encoding /\f at family /\f at series/#2\endcsname
@@ -4866,6 +5043,22 @@
     \fi
   \fi
 }
+\def\merge at font@shape at without@substitution#1{%
+  \expandafter\expandafter\expandafter
+  \merge at font@shape at without@substitution@
+    \csname shape@\f at shape @#1\endcsname
+    {#1}%
+    \@nil
+}
+\def\merge at font@shape at without@substitution@#1#2#3\@nil{%
+  \def\reserved at a{#3}%
+  \ifx\reserved at a\@empty
+    \edef\f at shape{#2}%
+  \else
+    \edef\f at shape{#1}%
+  \fi
+}
+\let\delayed at merge@font at shape\merge at font@shape at without@substitution
 \protected\def\normalshape
     {\not at math@alphabet\normalshape\relax
       \fontshape\shapedefault\selectfont}%
@@ -4892,6 +5085,7 @@
           {\not at math@alphabet\sscshape\relax
            \fontshape\sscdefault\selectfont}%
 }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \g at addto@macro\@kernel at after@begindocument at before
               {\reinstall at nfss@defs\init at series@setup}
 %%% From File: ltfsstrc.dtx
@@ -4930,17 +5124,38 @@
          \get at external@font
    \fi\fi
 }
+
 \DeclareRobustCommand\selectfont
         {%
     \ifx\f at linespread\baselinestretch \else
       \set at fontsize\baselinestretch\f at size\f at baselineskip \fi
+    \ifx\delayed at f@adjustment\@empty
+    \else
+      \let\f at shape@saved\f at shape
+      \let\f at series@saved\f at series
+      \delayed at f@adjustment
+      \maybe at load@fontshape
+      \ifcsname \f at encoding/\f at family/\f at series/\f at shape \endcsname
+      \else
+        \let\f at shape\f at shape@saved
+        \let\f at series\f at series@saved
+        \let\delayed at merge@font at shape\merge at font@shape
+        \let\delayed at merge@font at series\merge at font@series
+        \delayed at f@adjustment
+        \let\delayed at merge@font at shape\merge at font@shape at without@substitution
+        \let\delayed at merge@font at series\merge at font@series at without@substitution
+      \fi
+      \let\delayed at f@adjustment\@empty
+    \fi
     \xdef\font at name{%
       \csname\curr at fontshape/\f at size\endcsname}%
     \pickup at font
     \font at name
+    \UseHook{selectfont}%
     \size at update
     \enc at update
     }
+\NewHook{selectfont}
 \def\set at fontsize#1#2#3{%
     \@defaultunits\@tempdimb#2pt\relax\@nnil
     \edef\f at size{\strip at pt\@tempdimb}%
@@ -6389,8 +6604,8 @@
                                        %% overwrite it in fontdef.cfg
                                        %% if necessary
 \fontfamily{cmr}
-\fontseries{m}
-\fontshape{n}
+\def\f at series{m}           % \fontseries{m}
+\def\f at shape{n}            % \fontshape{n}
 \fontsize{10}{10}
 \def\@fontenc at load@list{\@elt{T1,OT1}}
 \InputIfFileExists{fonttext.cfg}
@@ -7126,6 +7341,7 @@
 \@ignorefalse
 \let\ignorespacesafterend\@ignoretrue
 \def\enddocument{%
+   \@kernel at before@enddocument
    \UseOneTimeHook{enddocument}%
    \@kernel at after@enddocument
    \@checkend{document}%
@@ -7153,8 +7369,6 @@
 \AddToHook{enddocument/info}[kernel/filelist]{\@dofilelist}
 \AddToHook{enddocument/info}[kernel/warnings]{\@enddocument at kernel@warnings}
 \DeclareHookRule{enddocument/info}{kernel/filelist}{before}{kernel/warnings}
-\let\@kernel at after@enddocument\@empty
-\let\@kernel at after@enddocument at afterlastpage\@empty
 \def\@enddocument at kernel@warnings{%
    \ifdim \font at submax >\fontsubfuzz\relax
      \@font at warning{Size substitutions with differences\MessageBreak
@@ -7177,6 +7391,7 @@
      \fi
    \fi
 }
+\def\@kernel at before@enddocument{\par}
 \def\@testdef #1#2#3{%
   \def\reserved at a{#3}\expandafter \ifx \csname #1@#2\endcsname
  \reserved at a  \else \@tempswatrue \fi}
@@ -9559,8 +9774,7 @@
       \@ifundefined{b@\@citeb}{\G at refundefinedtrue
           \@latex at warning{Citation `\@citeb' undefined}}{}}%
   \else
-    \@latex at error{Cannot be used in preamble}\@eha
-    % \AtBeginDocument{\nocite{#1}}
+    \AddToHook{begindocument/end}[kernel]{\nocite{#1}}%
   \fi
   \@esphack}
 \expandafter\let\csname b@*\endcsname\@empty
@@ -9635,6 +9849,7 @@
 \let\@unusedoptionlist\@empty
 \@onlypreamble\@unusedoptionlist
 \let\CurrentOption\@empty
+\let\@currpath\@empty
 \let\@currname\@empty
 \global\let\@currext=\@empty
 \def\@clsextension{cls}
@@ -9642,7 +9857,6 @@
 \@onlypreamble\@clsextension
 \@onlypreamble\@pkgextension
 \def\@pushfilename{%
-  \@expl@@@hook at curr@name at push@@n{}%
   \@expl at push@filename@@
   \xdef\@currnamestack{%
     {\@currname}%
@@ -9649,10 +9863,14 @@
     {\@currext}%
     {\the\catcode`\@}%
     \@currnamestack}%
+  \xdef\@kernel at currpathstack{%
+    {\@currpath}%
+    \@kernel at currpathstack}%
   \@expl at push@filename at aux@@}
 \@onlypreamble\@pushfilename
 \def\@popfilename{\@expl@@@hook at curr@name at pop@@
   \expandafter\@p at pfilename\@currnamestack\@nil
+  \expandafter\@p at pfilepath\@kernel at currpathstack\@nil
   \@expl at pop@filename@@}
 \@onlypreamble\@popfilename
 \def\@p at pfilename#1#2#3#4\@nil{%
@@ -9663,6 +9881,11 @@
 \@onlypreamble\@p at pfilename
 \gdef\@currnamestack{}
 \@onlypreamble\@currnamestack
+\gdef\@kernel at currpathstack{}
+\def\@p at pfilepath#1{%
+  \gdef\@currpath{#1}\@p at pfilepath@aux\@empty}
+\def\@p at pfilepath@aux#1\@nil{%
+  \xdef\@kernel at currpathstack{#1}}
 \def\@ptionlist#1{%
   \@ifundefined{opt@#1}\@empty{\csname opt@#1\endcsname}}
 \@onlypreamble\@ptionlist
@@ -9729,11 +9952,12 @@
 \@onlypreamble\@if at pti@ns
 \def\ProvidesPackage#1{%
   \xdef\@gtempa{#1}%
-  \ifx\@gtempa\@currname\else
+  \@expandtwoargs\@expl at str@if at eq@@nnTF
+      {\@gtempa}{\@currpath\@currname}{}{%
     \@latex at warning@no at line{You have requested
-      \@cls at pkg\space`\@currname',\MessageBreak
+      \@cls at pkg\space`\@currpath\@currname',\MessageBreak
        but the \@cls at pkg\space provides `#1'}%
-  \fi
+    }%
   \@ifnextchar[\@pr at videpackage{\@pr at videpackage[]}}%]
 \@onlypreamble\ProvidesPackage
 \def\@pr at videpackage[#1]{%
@@ -9768,10 +9992,14 @@
   \@expl@@@filehook at set@curr at file@@nNN
     {\@expl@@@filehook at resolve@file at subst@@w #3.#1\@nil}%
       \reserved at a\reserved at b
+  \@expl@@@filehook at clear@replacement at flag@@
   \expandafter\xdef\csname opt@\reserved at a\endcsname{%
     \@ifundefined{opt@\reserved at a}\@empty
       {\csname opt@\reserved at a\endcsname,}%
-    \zap at space#2 \@empty}}
+    \zap at space#2 \@empty}%
+  \expandafter\let
+    \csname opt@#3.#1\expandafter\endcsname
+    \csname opt@\reserved at a\endcsname}
 \@onlypreamble\@pass at ptions
 \def\PassOptionsToPackage{\@pass at ptions\@pkgextension}
 \def\PassOptionsToClass{\@pass at ptions\@clsextension}
@@ -9965,8 +10193,14 @@
   \reserved at a}
 \@onlypreamble\@fileswith at pti@ns
 \def\@onefilewithoptions#1[#2][#3]#4{%
+  \@expl@@@filehook at set@curr at file@@nNN{#1.#4}\reserved at a\reserved at b
+  \edef\reserved at c{\def\noexpand\reserved at c####1%
+    \detokenize\expandafter{\expanded{.#4}}%
+    \noexpand\@nil{\def\noexpand\reserved at a{####1}}}\reserved at c
+  \expandafter\reserved at c\reserved at a\@nil
   \@pushfilename
-  \xdef\@currname{#1}%
+  \xdef\@currname{\string at makeletter\reserved at a}%
+  \xdef\@currpath{\ifx\reserved at b\@empty\else\reserved at b/\fi}%
   \global\let\@currext#4%
   \@ifl at aded\@currext\@currname
     {\@if at ptions\@currext{\@currname}{#2}{}%
@@ -9987,7 +10221,7 @@
      \@firstofone}%
     {\makeatletter
      \@reset at ptions
-     \IfFileExists{\@currname.\@currext}{}%
+     \IfFileExists{\@currpath\@currname.\@currext}{}%
        {\@missing at onefilewithoptions{#2}}%
      \ifx\@currname\@empty
        \expandafter\@gobble
@@ -9994,7 +10228,7 @@
      \else
        \@disable at packageload@do{\@currname.\@currext}%
          {\@expl@@@filehook at file@push@@
-          \set at curr@file{\@currname.\@currext}%
+          \set at curr@file{\@currpath\@currname.\@currext}%
           \@filehook at set@CurrentFile
           \expandafter\@swaptwoargs\expandafter
             {\expandafter{\@currpkg at reqd}}%
@@ -10003,6 +10237,7 @@
           \ifx\CurrentFile\CurrentFileUsed
           \else
             \filename at parse\@curr at file
+            \edef\@currpath{\string at makeletter\filename at area}%
             \edef\@currname{\string at makeletter\filename at base}%
             \edef\@currext{\string at makeletter\filename at ext}%
           \fi
@@ -10027,8 +10262,9 @@
 \@onlypreamble\@onefilewithoptions
 \let\@unprocessedoptions\@undefined
 \def\@missing at onefilewithoptions#1{%
-  \@missingfileerror\@currname\@currext
-  \xdef\@currname{\@missingfile at area\@missingfile at base}%
+  \@missingfileerror{\@currpath\@currname}\@currext
+  \global\let\@currpath\@missingfile at area
+  \global\let\@currname\@missingfile at base
   \global\let\@currext\@missingfile at ext}
 \def\load at onefile@withoptions#1{%
   \let\CurrentOption\@empty
@@ -10035,6 +10271,9 @@
   \@reset at ptions
   \def\reserved at a{%
     \@pass at ptions\@currext{#1}{\@currname}%
+    \expandafter\let
+      \csname opt@\@currpkg at reqd\expandafter\endcsname
+      \csname opt@\@currname.\@currext\endcsname
     \global\expandafter
     \let\csname ver@\@currname.\@currext\endcsname\@empty
     \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty
@@ -10047,9 +10286,9 @@
         \UseHook{class/before/\@currname}%
       \fi
     \fi
-    \InputIfFileExists{\@currpkg at reqd}{}%
+    \InputIfFileExists{\@currpath\@currpkg at reqd}{}%
       {\@latex at error
-        {The \@cls at pkg\space\@currpkg at reqd\space failed to load.}\@ehd}%
+        {The \@cls at pkg\space\@currpkg at reqd\space failed to load}\@ehd}%
     \expandafter\let\csname unprocessedoptions-\@currname.\@currext\endcsname
                     \@@unprocessedoptions
     \csname\@currname.\@currext-h@@k\endcsname
@@ -10427,10 +10666,10 @@
 }
 \def\pkgcls at rollbackdate@error#1{%
   \@latex at error{Suspicious rollback date given}%
-     {The \@cls at pkg\space'\@currname'  claims that it
-      came into existence on #1 which\MessageBreak
+     {The \@cls at pkg\space'\@currname'  has no rollback data
+      before #1 which\MessageBreak
       is after your requested rollback date --- so
-      something is wrong here.\MessageBreak
+      something may be wrong here.\MessageBreak
       Continue and we use the earliest known release.}}
 \def\DeclareCurrentRelease#1#2{%
   \ifnum\pkgcls at targetdate>\z@  % some sort of rollback request
@@ -10471,11 +10710,11 @@
   \fi
 }
 %%
-%% File: ltfilehook.dtx (C) Copyright 2020 Frank Mittelbach,
+%% File: ltfilehook.dtx (C) Copyright 2020,2021 Frank Mittelbach,
 %%                                         Phelype Oleinik & LaTeX Team
 %%% From File: ltfilehook.dtx
-\providecommand\ltfilehookversion{v1.0c}
-\providecommand\ltfilehookdate{2020/10/18}
+\providecommand\ltfilehookversion{v1.0e}
+\providecommand\ltfilehookdate{2021/01/07}
 \ExplSyntaxOn
 \tl_new:N \CurrentFile
 \tl_new:N \CurrentFilePath
@@ -10543,28 +10782,32 @@
 \DeclareRobustCommand \InputIfFileExists[2]{%
   \IfFileExists{#1}%
     {%
-     \@expl@@@filehook at file@push@@
-     \@filehook at set@CurrentFile
-      \edef\reserved at a{\@filef at und
-        \@expl@@@filehook at file@pop at assign@@nnnn
-          {\CurrentFilePathUsed}%
-          {\CurrentFileUsed}%
-          {\CurrentFilePath}%
-          {\CurrentFile}}%
+      \@expl@@@filehook at file@push@@
+      \@filehook at set@CurrentFile
       \expandafter\@swaptwoargs\expandafter
-        {\reserved at a}%
-        {%
-          #2%
-          \@addtofilelist{#1}%
-          \UseHook{file/before}%
-          \UseHook{file/before/\CurrentFile}%
-          \@@input
-        }%
-      \UseHook{file/after/\CurrentFile}%
-      \UseHook{file/after}%
+        {\expandafter\@input at file@exists at with@hooks
+          \expandafter{\@filef at und}}%
+        {#2}%
       \@expl@@@filehook at file@pop@@
     }%
 }
+\def\@input at file@exists at with@hooks#1{%
+  \edef\reserved at a{%
+    \@expl@@@filehook at file@pop at assign@@nnnn
+      {\CurrentFilePathUsed}%
+      {\CurrentFileUsed}%
+      {\CurrentFilePath}%
+      {\CurrentFile}}%
+  \expandafter\@swaptwoargs\expandafter{\reserved at a}%
+    {\edef\reserved at a{\unqu at tefilef@und#1\@nil}%
+     \@addtofilelist{\string at makeletter\reserved at a}%
+     \UseHook{file/before}%
+     \UseHook{file/before/\CurrentFile}%
+     \@@input #1% <- trailing space comes from \@filef at und
+    }%
+  \UseHook{file/after/\CurrentFile}%
+  \UseHook{file/after}}
+\def\unqu at tefilef@und"#1" \@nil{#1}
 \ExplSyntaxOn
 \cs_new_protected:Npn \__filehook_subst_add:nn #1 #2
   {
@@ -10571,8 +10814,12 @@
     \group_begin:
       \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } }
       \int_set:Nn \tex_escapechar:D { -1 }
-      \cs_gset:cpx { @file-subst@ \__filehook_subst_file_normalize:n {#1} }
-        { \__filehook_subst_file_normalize:n {#2} }
+      \cs_gset:cpx
+        {
+          @file-subst@
+          \__filehook_subst_file_normalize:Nn \use_ii_iii:nnn {#1}
+        }
+        { \__filehook_subst_file_normalize:Nn \__filehook_file_name_compose:nnn {#2} }
     \group_end:
   }
 \cs_new_protected:Npn \__filehook_subst_remove:n #1
@@ -10580,14 +10827,18 @@
     \group_begin:
       \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } }
       \int_set:Nn \tex_escapechar:D { -1 }
-      \cs_undefine:c { @file-subst@ \__filehook_subst_file_normalize:n {#1} }
+      \cs_undefine:c
+        {
+          @file-subst@
+          \__filehook_subst_file_normalize:Nn \use_ii_iii:nnn {#1}
+        }
     \group_end:
   }
-\cs_new:Npn \__filehook_subst_file_normalize:n #1
+\cs_new:Npn \__filehook_subst_file_normalize:Nn #1 #2
   {
     \exp_after:wN \__filehook_subst_empty_name_chk:NN
       \cs:w \exp_after:wN \cs_end:
-        \cs:w \__filehook_file_parse_full_name:nN {#1} \use_ii_iii:nnn \cs_end:
+        \cs:w \__filehook_file_parse_full_name:nN {#2} #1 \cs_end:
   }
 \cs_new:Npn \__filehook_subst_empty_name_chk:NN #1 #2
   { \if_meaning:w #1 #2 .tex \else: \token_to_str:N #2 \fi: }
@@ -10613,6 +10864,7 @@
        \if at tempswa \@expl@@@filehook at drop@extension@@N\@curr at file@reqd \fi}%
       {\if at tempswa \@expl@@@filehook at drop@extension@@N\@curr at file \fi
        \global\let\@curr at file@reqd\@curr at file}%
+    \@expl@@@filehook at clear@replacement at flag@@
   \endgroup}
 \def\@kernel at make@file at csname#1#2#3{%
   \xdef#1{\expandafter\@set at curr@file at aux
@@ -10651,7 +10903,9 @@
   { \tl_if_empty:nF {#1} { #1 / } #2#3 }
 \flag_new:n { __filehook_file_replaced }
 \cs_new:Npn \__filehook_if_file_replaced:TF #1 #2
-   { \flag_if_raised:nTF { __filehook_file_replaced } {#1} {#2} }
+  { \flag_if_raised:nTF { __filehook_file_replaced } {#1} {#2} }
+\cs_new_protected:Npn \__filehook_clear_replacement_flag:
+  { \flag_clear:n { __filehook_file_replaced } }
 \cs_new:Npn \__filehook_file_subst_begin:nnn #1 #2 #3
   {
     \__filehook_file_subst_tortoise_hare:nn { #2#3 } { #2#3 }
@@ -10715,6 +10969,8 @@
               \__filehook_normalize_file_name:w
 \cs_new_eq:NN \@expl@@@filehook at if@file at replaced@@TF
               \__filehook_if_file_replaced:TF
+\cs_new_eq:NN \@expl@@@filehook at clear@replacement at flag@@
+              \__filehook_clear_replacement_flag:
 \cs_new_eq:NN \@expl@@@filehook at drop@extension@@N
               \__filehook_drop_extension:N
 \cs_new_eq:NN \@expl@@@filehook at file@push@@
@@ -10727,11 +10983,11 @@
 \declare at file@substitution{atveryend.sty}{atveryend-ltx.sty}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%
-%% File: ltshipout.dtx (C) Copyright 2020 Frank Mittelbach, LaTeX Team
+%% File: ltshipout.dtx (C) Copyright 2020,2021 Frank Mittelbach, LaTeX Team
 %%
 %%% From File: ltshipout.dtx
-\providecommand\ltshipoutversion{v1.0c}
-\providecommand\ltshipoutdate{2020/09/27}
+\providecommand\ltshipoutversion{v1.0d}
+\providecommand\ltshipoutdate{2020/12/06}
 \ExplSyntaxOn
 \bool_new:N \g__shipout_debug_bool
 \cs_new_eq:NN \__shipout_debug:n  \use_none:n
@@ -10796,13 +11052,17 @@
               \hook_if_empty:nF {shipout/foreground}
                    { \__shipout_add_foreground_picture:n
                      { \hook_use:n {shipout/foreground} } }
-              \hook_if_empty:nF {shipout/background}
+              \bool_lazy_and:nnF
+                   { \hook_if_empty_p:n {shipout/background} }
+                   { \tl_if_empty_p:N \@kernel at before@shipout at background }
                    { \__shipout_add_background_picture:n
                      { \@kernel at before@shipout at background
                        \hook_use:n {shipout/background} } }
               \__shipout_execute_firstpage_hook:
               \int_compare:nNnT \@abspage at last = \g_shipout_readonly_int
-                { \hook_if_empty:nF {shipout/lastpage}
+                { \bool_lazy_and:nnF
+                    { \hook_if_empty_p:n {shipout/lastpage} }
+                    { \tl_if_empty_p:N \@kernel at after@shipout at lastpage }
                     { \__shipout_debug:n { \typeout{Executing~ lastpage~ hook~
                           on~ page~ \int_use:N \g_shipout_readonly_int }        }
                       \__shipout_add_foreground_box:n { \UseHook{shipout/lastpage}
@@ -11050,7 +11310,7 @@
   {\ifnum\@abspage at last<\maxdimen
      \xdef\PreviousTotalPages{\@abspage at last}\fi}
 \cs_new_eq:NN \DiscardShipoutBox \shipout_discard:
-\cs_new_protected:Npn \AtBeginDvi {\__shipout_add_firstpage_material:Nn \AtBeginDvi}
+\cs_set_protected:Npn \AtBeginDvi {\__shipout_add_firstpage_material:Nn \AtBeginDvi}
 \cs_new_eq:NN \DebugShipoutsOn  \shipout_debug_on:
 \cs_new_eq:NN \DebugShipoutsOff \shipout_debug_off:
 \cs_set_eq:NN \@expl@@@shipout at add@firstpage at material@@Nn

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/latex209.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/latex209.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/latex209.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -15,7 +15,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesFile{latex209.def}[2020/08/21 v0.55 Standard LaTeX file]
+\ProvidesFile{latex209.def}[2020/11/26 v0.55 Standard LaTeX file]
 \if at compatibility
   \expandafter\endinput
 \else

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -8,6 +8,8 @@
 %% ltvers.dtx  (with options: `latexrelease')
 %% latexrelease.dtx  (with options: `latexrelease')
 %% ltdirchk.dtx  (with options: `latexrelease')
+%% ltplain.dtx  (with options: `latexrelease')
+%% ltluatex.dtx  (with options: `latexrelease')
 %% ltexpl.dtx  (with options: `latexrelease')
 %% ltdefns.dtx  (with options: `latexrelease')
 %% lthooks.dtx  (with options: `latexrelease')
@@ -15,42 +17,39 @@
 %% ltcntrl.dtx  (with options: `latexrelease')
 %% lterror.dtx  (with options: `latexrelease')
 %% ltpar.dtx  (with options: `latexrelease')
+%% ltspace.dtx  (with options: `latexrelease')
+%% ltlogos.dtx  (with options: `latexrelease')
+%% ltfiles.dtx  (with options: `latexrelease')
+%% ltoutenc.dtx  (with options: `latexrelease')
+%% ltcounts.dtx  (with options: `latexrelease')
+%% ltlength.dtx  (with options: `latexrelease')
+%% ltfssbas.dtx  (with options: `latexrelease')
+%% ltfssaxes.dtx  (with options: `latexrelease')
+%% ltfsstrc.dtx  (with options: `latexrelease')
+%% ltfssdcl.dtx  (with options: `latexrelease')
+%% ltfssini.dtx  (with options: `latexrelease')
+%% fontdef.dtx  (with options: `latexrelease')
+%% ltfntcmd.dtx  (with options: `latexrelease')
+%% lttextcomp.dtx  (with options: `latexrelease')
+%% ltpageno.dtx  (with options: `latexrelease')
+%% ltxref.dtx  (with options: `latexrelease')
+%% ltmiscen.dtx  (with options: `latexrelease')
+%% ltmath.dtx  (with options: `latexrelease')
 %% ltlists.dtx  (with options: `latexrelease')
 %% ltboxes.dtx  (with options: `latexrelease')
 %% lttab.dtx  (with options: `latexrelease')
-%% ltmath.dtx  (with options: `latexrelease')
 %% ltpictur.dtx  (with options: `latexrelease')
 %% ltthm.dtx  (with options: `latexrelease')
 %% ltsect.dtx  (with options: `latexrelease')
-%% ltfiles.dtx  (with options: `latexrelease')
-%% ltoutenc.dtx  (with options: `latexrelease')
-%% ltcounts.dtx  (with options: `latexrelease')
-%% ltlength.dtx  (with options: `latexrelease')
 %% ltfloat.dtx  (with options: `latexrelease')
 %% ltidxglo.dtx  (with options: `latexrelease')
 %% ltbibl.dtx  (with options: `latexrelease')
 %% ltpage.dtx  (with options: `latexrelease')
+%% ltclass.dtx  (with options: `latexrelease,tracerollback')
 %% ltfilehook.dtx  (with options: `latexrelease')
 %% ltshipout.dtx  (with options: `latexrelease')
 %% ltoutput.dtx  (with options: `latexrelease')
-%% ltclass.dtx  (with options: `latexrelease,tracerollback')
-%% ltspace.dtx  (with options: `latexrelease')
-%% ltlogos.dtx  (with options: `latexrelease')
-%% ltplain.dtx  (with options: `latexrelease')
-%% ltfssdcl.dtx  (with options: `latexrelease')
-%% ltfssini.dtx  (with options: `latexrelease')
-%% fontdef.dtx  (with options: `latexrelease')
-%% ltfntcmd.dtx  (with options: `latexrelease')
-%% lttextcomp.dtx  (with options: `latexrelease')
-%% ltfssbas.dtx  (with options: `latexrelease')
-%% ltfssaxes.dtx  (with options: `latexrelease')
-%% ltfsstrc.dtx  (with options: `latexrelease')
 %% ltfsscmp.dtx  (with options: `latexrelease')
-%% ltpageno.dtx  (with options: `latexrelease')
-%% ltxref.dtx  (with options: `latexrelease')
-%% ltmiscen.dtx  (with options: `latexrelease')
-%% ltluatex.dtx  (with options: `latexrelease')
-%% ltexpl.dtx  (with options: `latexrelease')
 %% ltfinal.dtx  (with options: `latexrelease')
 %% 
 %% This is a generated file.
@@ -60,7 +59,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -239,10 +238,10 @@
 }
 \def\pkgcls at rollbackdate@error#1{%
   \@latex at error{Suspicious rollback date given}%
-     {The \@cls at pkg\space'\@currname'  claims that it
-      came into existence on #1 which\MessageBreak
+     {The \@cls at pkg\space'\@currname'  has no rollback data
+      before #1 which\MessageBreak
       is after your requested rollback date --- so
-      something is wrong here.\MessageBreak
+      something may be wrong here.\MessageBreak
       Continue and we use the earliest known release.}}
 \def\DeclareCurrentRelease#1#2{%
   \ifnum\pkgcls at targetdate>\z@  % some sort of rollback request
@@ -330,7 +329,7 @@
     \PackageError{latexrelease}{skipped IncludeInRelease for tag \string#2}{}%
   \fi}
 \ProvidesPackage{latexrelease}
-          [2018/05/08 v1.0k LaTeX release emulation and tests
+          [2020/12/06 v1.0k LaTeX release emulation and tests
               (including releases up to \latexreleaseversion)]
 \NeedsTeXFormat{LaTeX2e}[1996/06/01]
 \DeclareOption*{%
@@ -446,8 +445,558 @@
     \fi
     \edef\filename at base{#1}}
 \EndIncludeInRelease
+%%% From File: ltplain.dtx
+\IncludeInRelease{2015/01/01}%
+                 {\newcount}{Extended Allocation}%
+\def\newcount {\e at alloc\count \countdef {\count10}\insc at unt\float at count}
+\def\newdimen {\e at alloc\dimen \dimendef {\count11}\insc at unt\float at count}
+\def\newskip  {\e at alloc\skip  \skipdef  {\count12}\insc at unt\float at count}
+\def\newmuskip
+           {\e at alloc\muskip\muskipdef{\count13}\m at ne\e at alloc@top}
+\def\newbox   {\e at alloc\box
+                  {\ifnum\allocationnumber<\@cclvi
+                     \expandafter\chardef
+                   \else
+                     \expandafter\e at alloc@chardef
+                   \fi}
+                                        {\count14}\insc at unt\float at count}
+\def\newtoks  {\e at alloc\toks \toksdef{\count15}\m at ne\e at alloc@top}
+\def\newread  {\e at alloc\read \chardef{\count16}\m at ne\sixt@@n}
+\ifx\directlua\@undefined
+  \def\newwrite   {\e at alloc\write \chardef{\count17}\m at ne\sixt@@n}
+\else
+  \def\newwrite   {\e at alloc\write
+                   {\ifnum\allocationnumber=18
+                     \advance\count17\@ne
+                     \allocationnumber\count17 %
+                    \fi
+                    \global\chardef}%
+                   {\count17}%
+                   \m at ne
+                   {128}}
+\fi
+\def\new at mathgroup
+  {\e at alloc\mathgroup\chardef{\count18}\m at ne\e at mathgroup@top}
+\let\newfam\new at mathgroup
+\ifx\directlua\@undefined
+  \def\newlanguage  {\e at alloc\language \chardef{\count19}\m at ne\@cclvi}
+\else
+  \def\newlanguage  {\e at alloc\language \chardef{\count19}\m at ne{16384}}
+\fi
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\newcount}{Extended Allocation}%
+\def\newcount{\alloc at 0\count\countdef\insc at unt}
+\def\newdimen{\alloc at 1\dimen\dimendef\insc at unt}
+\def\newskip{\alloc at 2\skip\skipdef\insc at unt}
+\def\newmuskip{\alloc at 3\muskip\muskipdef\@cclvi}
+\def\newbox{\alloc at 4\box\chardef\insc at unt}
+\def\newtoks{\alloc at 5\toks\toksdef\@cclvi}
+\def\newread{\alloc at 6\read\chardef\sixt@@n}
+\def\newwrite{\alloc at 7\write\chardef\sixt@@n}
+\def\new at mathgroup{\alloc at 8\fam\chardef\sixt@@n}
+\def\newlanguage{\alloc at 9\language\chardef\@cclvi}
+\let\newfam\new at mathgroup
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+                 {\e at alloc@chardef}{Extended Allocation}%
+\ifx\directlua\@undefined
+  \ifx\widowpenalties\@undefined
+    \mathchardef\e at alloc@top=255
+    \let\e at alloc@chardef\chardef
+  \else
+    \mathchardef\e at alloc@top=32767
+    \let\e at alloc@chardef\mathchardef
+  \fi
+\else
+  \chardef\e at alloc@top=65535
+  \let\e at alloc@chardef\chardef
+\fi
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\e at alloc@chardef}{Extended Allocation}%
+\let\e at alloc@top\@undefined
+\let\e at alloc@chardef\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+                 {\e at mathgroup@top}{Extended Allocation}%
+\ifx\Umathcode\@undefined
+  \chardef\e at mathgroup@top=16
+\else
+  \chardef\e at mathgroup@top=256
+\fi
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\e at mathgroup@top}{Extended Allocation}%
+\let\e at mathgroup@top\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}{\e at alloc}{Extended Allocation}%
+\def\e at alloc#1#2#3#4#5#6{%
+  \global\advance#3\@ne
+  \e at ch@ck{#3}{#4}{#5}#1%
+  \allocationnumber#3\relax
+  \global#2#6\allocationnumber
+  \wlog{\string#6=\string#1\the\allocationnumber}}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}{\e at alloc}{Extended Allocation}%
+\let\e at alloc\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2015/10/01}
+                 {\e at ch@ck}{Extended Allocation (checking)}%
+\gdef\e at ch@ck#1#2#3#4{%
+  \ifnum#1<#2\else
+    \ifnum#1=#2\relax
+      \global#1\@cclvi
+      \ifx\count#4\global\advance#1 10 \fi
+    \fi
+    \ifnum#1<#3\relax
+    \else
+      \errmessage{No room for a new \string#4}%
+    \fi
+  \fi}%
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+                 {\e at ch@ck}{Extended Allocation (checking)}%
+\gdef\e at ch@ck#1#2#3#4{%
+  \ifnum#1<#2\else
+    \ifnum#1=#2\relax
+      #1\@cclvi
+      \ifx\count#4\advance#1 10 \fi
+    \fi
+    \ifnum#1<#3\relax
+    \else
+      \errmessage{No room for a new #4}%
+    \fi
+  \fi}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\e at ch@ck}{Extended Allocation (checking)}%
+\let\e at ch@ck\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+                 {\extrafloats}{Extra floats}%
+\let\float at count\e at alloc@top
+\ifx\numexpr\@undefined
+\def\extrafloats#1{%
+\count@#1\relax
+\ifnum\count@>\z@
+\newinsert\reserved at a
+\global\expandafter\chardef
+            \csname bx@\the\allocationnumber\endcsname\allocationnumber
+\@cons\@freelist{\csname bx@\the\allocationnumber\endcsname}%
+\advance\count@\m at ne
+\expandafter\extrafloats
+\expandafter\count@
+\fi
+}%
+\else
+\def\extrafloats#1{%
+\ifnum#1>\z@
+\count@\numexpr\float at count-1\relax
+  \ch at ck0\count@\count
+  \ch at ck1\count@\dimen
+  \ch at ck2\count@\skip
+  \ch at ck4\count@\box
+\global\e at alloc@chardef\float at count\count@
+\global\expandafter\e at alloc@chardef
+            \csname bx@\the\float at count\endcsname\float at count
+\@cons\@freelist{\csname bx@\the\float at count\endcsname}%
+\expandafter
+\extrafloats\expandafter{\numexpr#1-1\relax}%
+\fi}%
+\fi
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\extrafloats}{Extra floats}%
+\let\float at count\@undefined
+\let\extrafloats\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}
+                 {\alloc@}{emulate alloc@}%
+\def\alloc@#1#2#3#4{\e at alloc#2#3{\count1#1}#4\float at count}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\alloc@}{emulate alloc@}%
+\def\alloc@#1#2#3#4#5{\global\advance\count1#1\@ne
+  \ch at ck#1#4#2%
+  \allocationnumber\count1#1%
+  \global#3#5\allocationnumber
+  \wlog{\string#5=\string#2\the\allocationnumber}}
+\EndIncludeInRelease
+\IncludeInRelease{2015/10/01}
+                 {\newinsert}{Extended \newinsert}%
+\ifx\numexpr\@undefined
+\def\newinsert#1{\global\advance\insc at unt \m at ne
+  \ch at ck0\insc at unt\count
+  \ch at ck1\insc at unt\dimen
+  \ch at ck2\insc at unt\skip
+  \ch at ck4\insc at unt\box
+  \allocationnumber\insc at unt
+  \global\chardef#1\allocationnumber
+  \wlog{\string#1=\string\insert\the\allocationnumber}}
+\else
+\ifx\directlua\@undefined
+  \chardef\e at insert@top255
+\else
+  \chardef\e at insert@top\e at alloc@top
+\fi
+\def\newinsert#1{%
+\@tempswafalse
+\global\advance\insc at unt\m at ne
+\ifnum\count10<\insc at unt
+\ifnum\count11<\insc at unt
+\ifnum\count12<\insc at unt
+\ifnum\count14<\insc at unt
+  \@tempswatrue
+\fi\fi\fi\fi
+\if at tempswa
+\allocationnumber\insc at unt
+\else
+\global\advance\insc at unt\@ne
+  \extrafloats\@ne
+  \@next\@currbox\@freelist
+    {\ifnum\@currbox<\e at insert@top
+      \allocationnumber\@currbox
+     \else
+     \ch at ck0\m at ne\insert
+     \fi}%
+     {\ch at ck0\m at ne\insert}%
+\fi
+\global\chardef#1\allocationnumber
+\wlog{\string#1=\string\insert\the\allocationnumber}%
+}
+\fi
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\newinsert}{Extended \newinsert}%
+\let\e at insert@top\@undefined
+\def\newinsert#1{\global\advance\insc at unt \m at ne
+  \ch at ck0\insc at unt\count
+  \ch at ck1\insc at unt\dimen
+  \ch at ck2\insc at unt\skip
+  \ch at ck4\insc at unt\box
+  \allocationnumber\insc at unt
+  \global\chardef#1\allocationnumber
+  \wlog{\string#1=\string\insert\the\allocationnumber}}
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}{\loggingall}{etex tracing}%
+\ifx\tracingscantokens\@undefined
+\gdef\loggingall{%
+  \tracingstats\tw@
+  \tracingpages\@ne
+  \tracinglostchars\@ne
+  \tracingparagraphs\@ne
+  \errorcontextlines\maxdimen
+  \loggingoutput
+  \tracingmacros\tw@
+  \tracingcommands\tw@
+  \tracingrestores\@ne
+  }%
+\else
+\gdef\loggingall{%
+  \tracingstats\tw@
+  \tracingpages\@ne
+  \tracinglostchars\tw@
+  \tracingparagraphs\@ne
+  \tracinggroups\@ne
+  \tracingifs\@ne
+  \tracingscantokens\@ne
+  \tracingnesting\@ne
+  \errorcontextlines\maxdimen
+  \loggingoutput
+  \tracingmacros\tw@
+  \tracingcommands\thr@@
+  \tracingrestores\@ne
+  \tracingassigns\@ne
+}%
+\fi
+\gdef\tracingall{\showoverfull\loggingall}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}{\loggingall}{etex tracing}%
+\gdef\loggingall{\tracingcommands\tw@\tracingstats\tw@
+  \tracingpages\@ne\tracinglostchars\@ne
+  \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne
+  \errorcontextlines\maxdimen\loggingoutput}
+  \gdef\tracingall{\loggingall\showoverfull}
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}{\tracingnone}%
+                             {turn off etex tracing}%
+\ifx\tracingscantokens\@undefined
+\def\tracingnone{%
+  \tracingonline\z@
+  \tracingcommands\z@
+  \showboxdepth\m at ne
+  \showboxbreadth\m at ne
+  \tracingoutput\z@
+  \errorcontextlines\m at ne
+  \tracingrestores\z@
+  \tracingparagraphs\z@
+  \tracingmacros\z@
+  \tracinglostchars\@ne
+  \tracingpages\z@
+  \tracingstats\z@
+}%
+\else
+\def\tracingnone{%
+  \tracingassigns\z@
+  \tracingrestores\z@
+  \tracingonline\z@
+  \tracingcommands\z@
+  \showboxdepth\m at ne
+  \showboxbreadth\m at ne
+  \tracingoutput\z@
+  \errorcontextlines\m at ne
+  \tracingnesting\z@
+  \tracingscantokens\z@
+  \tracingifs\z@
+  \tracinggroups\z@
+  \tracingparagraphs\z@
+  \tracingmacros\z@
+  \tracinglostchars\@ne
+  \tracingpages\z@
+  \tracingstats\z@
+}%
+\fi
+\def\hideoutput{%
+  \tracingoutput\z@
+  \showboxbreadth\m at ne
+  \showboxdepth\m at ne
+  \tracingonline\m at ne
+}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}{\tracingnone}%
+                             {turn off etex tracing}%
+\let\tracingnone\@undefined
+\let\hideoutput\@undefined
+\EndIncludeInRelease
+\ifx\directlua\@undefined\else
+\IncludeInRelease{2015/10/01}
+                 {\newluafunction}{LuaTeX}%
+\ifnum\luatexversion<60 %
+  \wlog{***************************************************}
+  \wlog{* LuaTeX version too old for ltluatex support *}
+  \wlog{***************************************************}
+  \expandafter\endinput
+\fi
+\long\def\@gobble#1{}
+\long\def\@firstofone#1{#1}
+\ifx\e at alloc@attribute at count\@undefined
+  \countdef\e at alloc@attribute at count=258
+  \e at alloc@attribute at count=\z@
+\fi
+\def\newattribute#1{%
+  \e at alloc\attribute\attributedef
+    \e at alloc@attribute at count\m at ne\e at alloc@top#1%
+}
+\def\setattribute#1#2{#1=\numexpr#2\relax}
+\def\unsetattribute#1{#1=-"7FFFFFFF\relax}
+\ifx\e at alloc@ccodetable at count\@undefined
+  \countdef\e at alloc@ccodetable at count=259
+  \e at alloc@ccodetable at count=\z@
+\fi
+\def\newcatcodetable#1{%
+  \e at alloc\catcodetable\chardef
+    \e at alloc@ccodetable at count\m at ne{"8000}#1%
+  \initcatcodetable\allocationnumber
+}
+\newcatcodetable\catcodetable at initex
+\newcatcodetable\catcodetable at string
+\begingroup
+  \def\setrangecatcode#1#2#3{%
+    \ifnum#1>#2 %
+      \expandafter\@gobble
+    \else
+      \expandafter\@firstofone
+    \fi
+      {%
+        \catcode#1=#3 %
+        \expandafter\setrangecatcode\expandafter
+          {\number\numexpr#1 + 1\relax}{#2}{#3}
+      }%
+  }
+  \@firstofone{%
+    \catcodetable\catcodetable at initex
+      \catcode0=12 %
+      \catcode13=12 %
+      \catcode37=12 %
+      \setrangecatcode{65}{90}{12}%
+      \setrangecatcode{97}{122}{12}%
+      \catcode92=12 %
+      \catcode127=12 %
+      \savecatcodetable\catcodetable at string
+    \endgroup
+  }%
+\newcatcodetable\catcodetable at latex
+\newcatcodetable\catcodetable at atletter
+\begingroup
+  \def\parseunicodedataI#1;#2;#3;#4\relax{%
+    \parseunicodedataII#1;#3;#2 First>\relax
+  }%
+  \def\parseunicodedataII#1;#2;#3 First>#4\relax{%
+    \ifx\relax#4\relax
+      \expandafter\parseunicodedataIII
+    \else
+      \expandafter\parseunicodedataIV
+    \fi
+      {#1}#2\relax%
+  }%
+  \def\parseunicodedataIII#1#2#3\relax{%
+    \ifnum 0%
+      \if L#21\fi
+      \if M#21\fi
+      >0 %
+      \catcode"#1=11 %
+    \fi
+  }%
+  \def\parseunicodedataIV#1#2#3\relax{%
+    \read\unicoderead to \unicodedataline
+    \if L#2%
+      \count0="#1 %
+      \expandafter\parseunicodedataV\unicodedataline\relax
+    \fi
+  }%
+  \def\parseunicodedataV#1;#2\relax{%
+    \loop
+      \unless\ifnum\count0>"#1 %
+        \catcode\count0=11 %
+        \advance\count0 by 1 %
+    \repeat
+  }%
+  \def\storedpar{\par}%
+  \chardef\unicoderead=\numexpr\count16 + 1\relax
+  \openin\unicoderead=UnicodeData.txt %
+  \loop\unless\ifeof\unicoderead %
+    \read\unicoderead to \unicodedataline
+    \unless\ifx\unicodedataline\storedpar
+      \expandafter\parseunicodedataI\unicodedataline\relax
+    \fi
+  \repeat
+  \closein\unicoderead
+  \@firstofone{%
+    \catcode64=12 %
+    \savecatcodetable\catcodetable at latex
+    \catcode64=11 %
+    \savecatcodetable\catcodetable at atletter
+   }
+\endgroup
+\ifx\e at alloc@luafunction at count\@undefined
+  \countdef\e at alloc@luafunction at count=260
+  \e at alloc@luafunction at count=\z@
+\fi
+\def\newluafunction{%
+  \e at alloc\luafunction\e at alloc@chardef
+    \e at alloc@luafunction at count\m at ne\e at alloc@top
+}
+\ifx\e at alloc@whatsit at count\@undefined
+  \countdef\e at alloc@whatsit at count=261
+  \e at alloc@whatsit at count=\z@
+\fi
+\def\newwhatsit#1{%
+  \e at alloc\whatsit\e at alloc@chardef
+    \e at alloc@whatsit at count\m at ne\e at alloc@top#1%
+}
+\ifx\e at alloc@bytecode at count\@undefined
+  \countdef\e at alloc@bytecode at count=262
+  \e at alloc@bytecode at count=\z@
+\fi
+\def\newluabytecode#1{%
+  \e at alloc\luabytecode\e at alloc@chardef
+    \e at alloc@bytecode at count\m at ne\e at alloc@top#1%
+}
+
+\ifx\e at alloc@luachunk at count\@undefined
+  \countdef\e at alloc@luachunk at count=263
+  \e at alloc@luachunk at count=\z@
+\fi
+\def\newluachunkname#1{%
+  \e at alloc\luachunk\e at alloc@chardef
+    \e at alloc@luachunk at count\m at ne\e at alloc@top#1%
+    {\escapechar\m at ne
+    \directlua{lua.name[\the\allocationnumber]="\string#1"}}%
+}
+\def\now at and@everyjob#1{%
+  \everyjob\expandafter{\the\everyjob
+    #1%
+  }%
+  #1%
+}
+  \begingroup
+    \attributedef\attributezero=0 %
+    \chardef     \charzero     =0 %
+    \countdef    \CountZero    =0 %
+    \dimendef    \dimenzero    =0 %
+    \mathchardef \mathcharzero =0 %
+    \muskipdef   \muskipzero   =0 %
+    \skipdef     \skipzero     =0 %
+    \toksdef     \tokszero     =0 %
+    \directlua{require("ltluatex")}
+  \endgroup
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}
+                 {\newluafunction}{LuaTeX}%
+\let\e at alloc@attribute at count\@undefined
+\let\newattribute\@undefined
+\let\setattribute\@undefined
+\let\unsetattribute\@undefined
+\let\e at alloc@ccodetable at count\@undefined
+\let\newcatcodetable\@undefined
+\let\catcodetable at initex\@undefined
+\let\catcodetable at string\@undefined
+\let\catcodetable at latex\@undefined
+\let\catcodetable at atletter\@undefined
+\let\e at alloc@luafunction at count\@undefined
+\let\newluafunction\@undefined
+\let\e at alloc@luafunction at count\@undefined
+\let\newwhatsit\@undefined
+\let\e at alloc@whatsit at count\@undefined
+\let\newluabytecode\@undefined
+\let\e at alloc@bytecode at count\@undefined
+\let\newluachunkname\@undefined
+\let\e at alloc@luachunk at count\@undefined
+\directlua{luatexbase.uninstall()}
+\EndIncludeInRelease
+\IncludeInRelease{2017/01/01}%
+                 {\fontencoding}{TU in everyjob}%
+\fontencoding{TU}\let\encodingdefault\f at encoding
+\ifx\directlua\@undefined\else
+  \directlua{%
+  if xpcall(function ()%
+             require('luaotfload-main')%
+            end,texio.write_nl) then %
+  local _void = luaotfload.main ()%
+  else %
+  texio.write_nl('Error in luaotfload: reverting to OT1')%
+  tex.print('\string\\def\string\\encodingdefault{OT1}')%
+  end %
+  }%
+  \let\f at encoding\encodingdefault
+  \expandafter\let\csname ver at luaotfload.sty\endcsname\fmtversion
+\fi
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\fontencoding}{TU in everyjob}%
+\fontencoding{OT1}\let\encodingdefault\f at encoding
+\EndIncludeInRelease
+\fi
 %%% From File: ltexpl.dtx
 \IncludeInRelease{2020/10/01}%
+  {kernel at enddocument hooks}{Define kernel enddocument Hooks}%
+\let\@kernel at after@enddocument\@empty
+\let\@kernel at after@enddocument at afterlastpage\@empty
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+  {kernel at enddocument hooks}{Define kernel enddocument Hooks}%
+\let\@kernel at after@enddocument\@undefined
+\let\@kernel at after@enddocument at afterlastpage\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+            {\@expl at sys@load at backend@@}{Roll forward support}%
+\def\@expl at sys@load at backend@@{}
+\def\@expl at push@filename@@{}
+\def\@expl at push@filename at aux@@{}
+\def\@expl at pop@filename@@{}
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
                  {expl3}{Pre-load expl3}%
 \expandafter\ifx\csname tex\string _let:D\endcsname\relax
   \expandafter\@firstofone
@@ -478,8 +1027,14 @@
         \fi
       }
       {%
-        \@latex at error{LaTeX requires expl3}\@ehd
-        \@gobble
+        \@latex at warning@no at line
+          {You need a format that already contains a recent\MessageBreak
+           expl3 as part of the kernel, e.g. at least a kernel\MessageBreak
+           from 2019 to roll forward to that date!\MessageBreak
+           --- I'm giving up!\MessageBreak\MessageBreak
+           Note that manually loading the expl3 package\MessageBreak
+           from your distribution is not enough}%
+        \@@end  % die
       }%
       {%
         \input expl3.ltx
@@ -513,9 +1068,17 @@
   }%
 \input{expl3.ltx}
 \EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\NewDocumentCommand}{Emergency loading xparse}%
+
+\ifdefined\NewDocumentCommand \else
+  \RequirePackage{xparse}
+\fi
+
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}{\@expl at cs@to at str@@N}%
+        {expl3 macros added for the 2020-10-01 release}%
 \ExplSyntaxOn
-\IncludeInRelease{2020/10/01}{expl3~2020-10-01}%
-        {expl3~macros~added~for~the~2020-10-01~release}%
 \cs_gset_eq:NN \@expl at cs@to at str@@N \cs_to_str:N
 \cs_gset_eq:NN \@expl at str@if at eq@@nnTF \str_if_eq:nnTF
 \cs_gset_eq:NN \@expl at cs@prefix at spec@@N \cs_prefix_spec:N
@@ -523,17 +1086,17 @@
 \cs_gset_eq:NN \@expl at cs@replacement at spec@@N \cs_replacement_spec:N
 \cs_gset_eq:NN \@expl at str@map at function@@NN \str_map_function:NN
 \cs_gset_eq:NN \@expl at char@generate@@nn \char_generate:nn
+\ExplSyntaxOff
 \EndIncludeInRelease
-\IncludeInRelease{0000/00/00}{expl3~2020-10-01}%
-        {expl3~macros~added~for~the~2020-10-01~release}%
-\cs_undefine:N \@expl at cs@to at str@@N
-\cs_undefine:N \@expl at str@if at eq@@nnTF
-\cs_undefine:N \@expl at cs@prefix at spec@@N
-\cs_undefine:N \@expl at cs@argument at spec@@N
-\cs_undefine:N \@expl at cs@replacement at spec@@N
-\cs_undefine:N \@expl at str@map at function@@NN
+\IncludeInRelease{0000/00/00}{\@expl at cs@to at str@@N}%
+        {expl3 macros added for the 2020-10-01 release}%
+\let \@expl at cs@to at str@@N \@undefined
+\let \@expl at str@if at eq@@nnTF \@undefined
+\let \@expl at cs@prefix at spec@@N \@undefined
+\let \@expl at cs@argument at spec@@N \@undefined
+\let \@expl at cs@replacement at spec@@N \@undefined
+\let \@expl at str@map at function@@NN \@undefined
 \EndIncludeInRelease
-\ExplSyntaxOff
 %%% From File: ltdefns.dtx
 \IncludeInRelease{2020/10/01}%
                  {\typeout}{Allow "par" in \typeout}%
@@ -548,6 +1111,12 @@
 \def\typeout#1{\begingroup\set at display@protect
     \immediate\write\@unused{#1}\endgroup}
 \EndIncludeInRelease
+\IncludeInRelease{2020/10/01}{\@carcube}{Make \@carcube long}%
+\long\def\@carcube#1#2#3#4\@nil{#1#2#3}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}{\@carcube}{Undo: Make \@carcube long}%
+\def\@carcube#1#2#3#4\@nil{#1#2#3}
+\EndIncludeInRelease
 \IncludeInRelease{2020/10/01}{\MakeRobust}{\MakeRobust}%
 \def\MakeRobust#1{%
   \count@=\escapechar
@@ -1008,11 +1577,11 @@
 
 \EndIncludeInRelease
 %%
-%% File: lthooks.dtx (C) Copyright 2020 Frank Mittelbach,
+%% File: lthooks.dtx (C) Copyright 2020,2021 Frank Mittelbach,
 %%                                      Phelype Oleinik & LaTeX Team
 %%% From File: lthooks.dtx
-\def\lthooksversion{v1.0e}
-\def\lthooksdate{2020/10/23}
+\def\lthooksversion{v1.0h}
+\def\lthooksdate{2021/01/07}
 \IncludeInRelease{2020/10/01}%
                  {\NewHook}{The hook management}%
 \ExplSyntaxOn
@@ -1051,6 +1620,34 @@
 \cs_generate_variant:Nn \tl_show:n { x }
 \cs_generate_variant:Nn \tl_log:n { x }
 \scan_new:N \s__hook_mark
+\cs_new_protected:Npn \__hook_tl_set:Nn #1#2
+  { \cs_set_nopar:Npx #1 { \__kernel_exp_not:w {#2} } }
+\cs_new_protected:Npn \__hook_tl_set:Nx #1#2
+  { \cs_set_nopar:Npx #1 {#2} }
+\cs_generate_variant:Nn \__hook_tl_set:Nn { c }
+\cs_generate_variant:Nn \__hook_tl_set:Nx { c }
+\cs_new_protected:Npn \__hook_tl_gset:Nn #1#2
+  { \cs_gset_nopar:Npx #1 { \__kernel_exp_not:w {#2} } }
+\cs_new_protected:Npn \__hook_tl_gset:No #1#2
+  { \cs_gset_nopar:Npx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
+\cs_new_protected:Npn \__hook_tl_gset:Nx #1#2
+  { \cs_gset_nopar:Npx #1 {#2} }
+\cs_generate_variant:Nn \__hook_tl_gset:Nn { c }
+\cs_generate_variant:Nn \__hook_tl_gset:No { c }
+\cs_generate_variant:Nn \__hook_tl_gset:Nx { c }
+\cs_new_protected:Npn \__hook_tl_gput_right:Nn #1#2
+  { \__hook_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } }
+\cs_generate_variant:Nn \__hook_tl_gput_right:Nn { No, cn }
+\cs_new_protected:Npn \__hook_tl_gput_left:Nn #1#2
+  {
+    \__hook_tl_gset:Nx #1
+      { \__kernel_exp_not:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
+  }
+\cs_generate_variant:Nn \__hook_tl_gput_left:Nn { No }
+\cs_new_eq:NN \__hook_tl_gset_eq:NN \tl_gset_eq:NN
+\cs_new_protected:Npn \__hook_tl_gclear:N #1
+  { \__hook_tl_gset_eq:NN #1 \c_empty_tl }
+\cs_generate_variant:Nn \__hook_tl_gclear:N { c }
 \cs_new_protected:Npn \hook_new:n #1
   { \__hook_normalize_hook_args:Nn \__hook_new:n {#1} }
 \cs_new_protected:Npn \__hook_new:n #1
@@ -1071,6 +1668,7 @@
     \__hook_if_exist:nF {#1}
       {
         \prop_new:c { g__hook_#1_code_prop }
+        \tl_new:c { __hook_toplevel~#1 }
         \tl_new:c { __hook_next~#1 }
       }
   }
@@ -1085,7 +1683,6 @@
   { \hook_new:n {#1} \hook_new_reversed:n {#2} }
 \cs_new_protected:Npn \__hook_include_legacy_code_chunk:n #1
   {
-    \debug_suspend:
     \tl_if_exist:cT { @#1hook }
       {
         \tl_if_empty:cF { @#1hook }
@@ -1092,52 +1689,52 @@
           {
             \exp_args:Nnnv \__hook_hook_gput_code_do:nnn {#1}
                                   { legacy } { @#1hook }
-            \tl_gclear:c { @#1hook }
+            \__hook_tl_gclear:c { @#1hook }
           }
       }
-    \debug_resume:
   }
 \cs_new:Npn \__hook_parse_label_default:n #1
   {
     \tl_if_novalue:nTF {#1}
-      { \__hook_currname_or_default:n { top-level } }
-      {
-        \tl_trim_spaces_apply:nN {#1}
-          \__hook_parse_dot_label:nn { top-level }
-      }
+      { \__hook_currname_or_default: }
+      { \tl_trim_spaces_apply:nN {#1} \__hook_parse_dot_label:n }
   }
-\cs_new:Npn \__hook_parse_dot_label:nn #1 #2
+\cs_new:Npn \__hook_parse_dot_label:n #1
   {
     \tl_if_empty:nTF {#1}
       {
-        \msg_expandable_error:nnn { hooks } { empty-label } {#2}
-        #2
+        \msg_expandable_error:nn { hooks } { empty-label }
+        \__hook_currname_or_default:
       }
       {
         \str_if_eq:nnTF {#1} { . }
-          { \__hook_currname_or_default:n {#2} }
-          { \__hook_parse_dot_label:nw {#2} #1 ./ \s__hook_mark }
+          { \__hook_currname_or_default: }
+          { \__hook_parse_dot_label:w #1 ./ \s__hook_mark }
       }
   }
-\cs_new:Npn \__hook_parse_dot_label:nw #1 #2 ./ #3 \s__hook_mark
+\cs_new:Npn \__hook_parse_dot_label:w #1 ./ #2 \s__hook_mark
   {
-    \tl_if_empty:nTF {#2}
-      { \__hook_parse_dot_label_aux:nw {#1} #3 \s__hook_mark }
+    \tl_if_empty:nTF {#1}
+      { \__hook_parse_dot_label_aux:w #2 \s__hook_mark }
       {
-        \tl_if_empty:nTF {#3}
-          { \__hook_make_name:n {#2} }
-          { \__hook_parse_dot_label_cleanup:w #2 ./ #3 \s__hook_mark }
+        \tl_if_empty:nTF {#2}
+          { \__hook_make_name:n {#1} }
+          { \__hook_parse_dot_label_cleanup:w #1 ./ #2 \s__hook_mark }
       }
   }
 \cs_new:Npn \__hook_parse_dot_label_cleanup:w #1 ./ \s__hook_mark {#1}
-\cs_new:Npn \__hook_parse_dot_label_aux:nw #1 #2 ./ \s__hook_mark
-  { \__hook_currname_or_default:n {#1} / \__hook_make_name:n {#2} }
-\cs_new:Npn \__hook_currname_or_default:n #1
+\cs_new:Npn \__hook_parse_dot_label_aux:w #1 ./ \s__hook_mark
+  { \__hook_currname_or_default: / \__hook_make_name:n {#1} }
+\cs_new:Npn \__hook_currname_or_default:
   {
     \tl_if_empty:NTF \g__hook_hook_curr_name_tl
       {
         \tl_if_empty:NTF \@currname
-          { \__hook_make_name:n {#1} }
+          {
+            \msg_expandable_error:nnn { hooks } { should-not-happen }
+              { Empty~default~label. }
+            \__hook_make_name:n { label-missing }
+          }
           { \@currname }
       }
       { \g__hook_hook_curr_name_tl }
@@ -1207,12 +1804,23 @@
                       \hook_if_exist:nF {#1} { undeclared~ }
                       hook~ #1~ (#2)
                       \on at line\space <-~ \tl_to_str:n{#3}} }
-    \prop_get:cnNTF { g__hook_#1_code_prop } {#2} \l__hook_return_tl
+    \str_if_eq:nnTF {#2} { top-level }
       {
-        \prop_gput:cno { g__hook_#1_code_prop } {#2}
-          { \l__hook_return_tl #3 }
+        \str_if_eq:eeTF { top-level } { \__hook_currname_or_default: }
+          {
+            \__hook_declare:n {#1}
+            \__hook_tl_gput_right:cn { __hook_toplevel~#1 } {#3}
+          }
+          { \msg_error:nnn { hooks } { misused-top-level } {#1} }
       }
-      { \prop_gput:cnn { g__hook_#1_code_prop } {#2} {#3} }
+      {
+        \prop_get:cnNTF { g__hook_#1_code_prop } {#2} \l__hook_return_tl
+          {
+            \prop_gput:cno { g__hook_#1_code_prop } {#2}
+              { \l__hook_return_tl #3 }
+          }
+          { \prop_gput:cnn { g__hook_#1_code_prop } {#2} {#3} }
+      }
   }
 \cs_new_protected:Npn \__hook_gput_undeclared_hook:nnn #1 #2 #3
   {
@@ -1285,11 +1893,11 @@
   { \__hook_strip_double_slash:n {#1} }
 \cs_new:Npn \__hook_strip_double_slash:n #1
   { \__hook_strip_double_slash:w #1 // \s__hook_mark }
-\cs_new:Npn \__hook_strip_double_slash:w #1 // #2 \s__hook_mark
+\cs_new:Npn \__hook_strip_double_slash:w #1/#2/#3 // #4 \s__hook_mark
   {
-    \tl_if_empty:nTF {#2}
-      {#1}
-      { \__hook_strip_double_slash:w #1 / #2 \s__hook_mark }
+    \tl_if_empty:nTF {#4}
+      { #1/#2/#3 }
+      { \__hook_strip_double_slash:w #1/#2/#3 / #4 \s__hook_mark }
   }
 \prop_const_from_keyval:Nn \c__hook_generics_prop
   {env=,file=,package=,class=,include=}
@@ -1303,13 +1911,21 @@
     \__hook_if_exist:nTF {#1}
       {
         \str_if_eq:nnTF {#2} {*}
-          { \prop_gclear:c { g__hook_#1_code_prop } }
           {
-            \prop_get:cnNTF { g__hook_#1_code_prop } {#2} \l__hook_return_tl
-              { \__hook_gremove_code_do:nn }
-              { \__hook_mark_removal:nn }
-                  {#1} {#2}
+            \prop_gclear:c { g__hook_#1_code_prop }
+            \__hook_tl_gclear:c { __hook_toplevel~#1 }
+            \__hook_tl_gclear:c { __hook_next~#1 }
           }
+          {
+            \str_if_eq:nnTF {#2} { top-level }
+              { \__hook_tl_gclear:c { __hook_toplevel~#1 } }
+              {
+                \prop_get:cnNTF { g__hook_#1_code_prop } {#2} \l__hook_return_tl
+                  { \__hook_gremove_code_do:nn }
+                  { \__hook_mark_removal:nn }
+                      {#1} {#2}
+              }
+          }
         \hook_if_exist:nT {#1}
           { \__hook_update_hook_code:n {#1} }
       }
@@ -1347,7 +1963,6 @@
   {
     \__hook_declare:n {#1}
     \__hook_rule_gclear:nnn {#1} {#2} {#4}
-    \debug_suspend:
     \cs_if_exist_use:cTF { __hook_rule_#3_gset:nnn }
       {
           {#1} {#2} {#4}
@@ -1355,29 +1970,28 @@
       }
       { \msg_error:nnnnnn { hooks } { unknown-rule }
                           {#1} {#2} {#3} {#4}        }
-    \debug_resume:
   }
 \cs_new_protected:Npn \__hook_rule_before_gset:nnn #1#2#3
   {
-    \tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl }
+    \__hook_tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl }
       { \__hook_label_ordered:nnTF {#2} {#3} { < } { > } }
   }
 \cs_new_eq:cN { __hook_rule_<_gset:nnn } \__hook_rule_before_gset:nnn
 \cs_new_protected:Npn \__hook_rule_after_gset:nnn #1#2#3
   {
-    \tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#3} {#2} _tl }
+    \__hook_tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#3} {#2} _tl }
       { \__hook_label_ordered:nnTF {#3} {#2} { < } { > } }
   }
 \cs_new_eq:cN { __hook_rule_>_gset:nnn } \__hook_rule_after_gset:nnn
 \cs_new_protected:Npn \__hook_rule_voids_gset:nnn #1#2#3
   {
-    \tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl }
+    \__hook_tl_gset:cx { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl }
       { \__hook_label_ordered:nnTF {#2} {#3} { -> } { <- } }
   }
 \cs_new_protected:cpn { __hook_rule_incompatible-error_gset:nnn } #1#2#3
-  { \tl_gset:cn { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } { xE } }
+  { \__hook_tl_gset:cn { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } { xE } }
 \cs_new_protected:cpn { __hook_rule_incompatible-warning_gset:nnn } #1#2#3
-  { \tl_gset:cn { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } { xW } }
+  { \__hook_tl_gset:cn { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } { xW } }
 \cs_new_protected:Npn \__hook_rule_unrelated_gset:nnn #1#2#3 { }
 \cs_new_protected:Npn \__hook_rule_gclear:nnn #1#2#3
   { \cs_undefine:c { g__hook_#1_rule_ \__hook_label_pair:nn {#2} {#3} _tl } }
@@ -1424,7 +2038,6 @@
 }
 \cs_new_protected:Npn \__hook_initialize_hook_code:n #1
   {
-    \debug_suspend:
     \__hook_debug:n{ \iow_term:x{^^JUpdate~ code~ for~ hook~
                                     '#1' \on at line :^^J} }
     \__hook_include_legacy_code_chunk:n {#1}
@@ -1431,23 +2044,26 @@
     \hook_if_exist:nT {#1}
       {
         \prop_if_empty:cTF {g__hook_#1_code_prop}
-          { \tl_gset:co { __hook~#1 }
-                        { \cs:w __hook_next~#1 \cs_end: } }
           {
+            \__hook_tl_gset:co { __hook~#1 }
+              {
+                \cs:w __hook_toplevel~#1 \exp_after:wN \cs_end:
+                \cs:w __hook_next~#1 \cs_end:
+              }
+          }
+          {
             \__hook_if_reversed:nTF {#1}
-              { \cs_set_eq:NN \__hook_tl_gput:NV    \tl_gput_left:NV
+              { \cs_set_eq:NN \__hook_tl_gput:Nn    \__hook_tl_gput_left:Nn
                 \cs_set_eq:NN \__hook_clist_gput:NV \clist_gput_left:NV  }
-              { \cs_set_eq:NN \__hook_tl_gput:NV    \tl_gput_right:NV
+              { \cs_set_eq:NN \__hook_tl_gput:Nn    \__hook_tl_gput_right:Nn
                 \cs_set_eq:NN \__hook_clist_gput:NV \clist_gput_right:NV }
             \prop_set_eq:Nc \l__hook_work_prop { g__hook_#1_code_prop }
-            \__hook_initialize_single:cccn
-              { __hook~#1 } { __hook_next~#1 }
-              { g__hook_#1_labels_clist } {#1}
+            \__hook_initialize_single:ccn
+              { __hook~#1 } { g__hook_#1_labels_clist } {#1}
             \__hook_debug:n{ \exp_args:NNx \prop_gput:Nnn
                                        \g__hook_used_prop {#1}{} }
           }
       }
-    \debug_resume:
   }
 \cs_new:Npn \__hook_tl_csname:n #1 { l__hook_label_#1_tl }
 \cs_new:Npn \__hook_seq_csname:n #1 { l__hook_label_#1_seq }
@@ -1456,16 +2072,16 @@
 \tl_new:N \l__hook_front_tl
 \tl_new:N \l__hook_rear_tl
 \tl_new:c { \__hook_tl_csname:n { 0 } }
-\cs_new_protected:Npn \__hook_initialize_single:NNNn #1#2#3#4
+\cs_new_protected:Npn \__hook_initialize_single:NNn #1#2#3
   {
     \seq_clear:N \l__hook_labels_seq
     \int_zero:N  \l__hook_labels_int
-    \tl_set:Nn \l__hook_cur_hook_tl {#4}
+    \tl_set:Nn \l__hook_cur_hook_tl {#3}
     \prop_map_inline:Nn \l__hook_work_prop
        {
          \int_incr:N \l__hook_labels_int
          \seq_put_right:Nn \l__hook_labels_seq {##1}
-         \tl_set:cn { \__hook_tl_csname:n {##1} }{0}
+         \__hook_tl_set:cn { \__hook_tl_csname:n {##1} } { 0 }
          \seq_clear_new:c { \__hook_seq_csname:n {##1} }
        }
     \prop_map_inline:Nn \l__hook_work_prop
@@ -1476,7 +2092,7 @@
               { \prop_map_break: }
               { \__hook_apply_label_pair:nnn {##1} {####1} }
               { \__hook_apply_label_pair:nnn {####1} {##1} }
-                  {#4}
+                  {#3}
           }
       }
     \__hook_debug:n { \__hook_debug_label_data:N \l__hook_work_prop }
@@ -1491,14 +2107,14 @@
             }
       }
     \tl_set_eq:Nc \l__hook_front_tl { \__hook_tl_csname:n { 0 } }
-    \tl_gclear:N #1
-    \clist_gclear:N #3
+    \__hook_tl_gclear:N #1
+    \clist_gclear:N #2
     \bool_while_do:nn { ! \str_if_eq_p:Vn \l__hook_front_tl { 0 } }
       {
         \int_decr:N \l__hook_labels_int
         \prop_get:NVN \l__hook_work_prop \l__hook_front_tl \l__hook_return_tl
-        \__hook_tl_gput:NV #1 \l__hook_return_tl
-        \__hook_clist_gput:NV #3 \l__hook_front_tl
+        \exp_args:NNV \__hook_tl_gput:Nn #1 \l__hook_return_tl
+        \__hook_clist_gput:NV #2 \l__hook_front_tl
         \__hook_debug:n{ \iow_term:x{Handled~ code~ for~ \l__hook_front_tl} }
         \seq_map_inline:cn { \__hook_seq_csname:n { \l__hook_front_tl } }
           {
@@ -1523,11 +2139,12 @@
         \__hook_debug_label_data:N \l__hook_work_prop
         \iow_term:x{====================}
       }
-    \tl_gput_right:Nn #1 {#2}
+    \exp_args:NNo \__hook_tl_gput:Nn #1 { \cs:w __hook_toplevel~#3 \cs_end: }
+    \__hook_tl_gput_right:No #1 { \cs:w __hook_next~#3 \cs_end: }
   }
-\cs_generate_variant:Nn \__hook_initialize_single:NNNn {ccc}
-\cs_new:Npn \__hook_tl_gput:NV     {\ERROR}
-\cs_new:Npn \__hook_clist_gput:NV  {\ERROR}
+\cs_generate_variant:Nn \__hook_initialize_single:NNn { cc }
+\cs_new:Npn \__hook_tl_gput:Nn    { \ERROR }
+\cs_new:Npn \__hook_clist_gput:NV { \ERROR }
 \cs_new_protected:Npn \__hook_apply_label_pair:nnn #1#2#3
   {
     \__hook_label_if_exist_apply:nnnF {#1} {#2} {#3}
@@ -1646,7 +2263,8 @@
     \__hook_log_cmd:x { ^^J ->~The~hook~'#1': }
     \hook_if_exist:nF {#1}
       { \__hook_log_line:x { is~not~declared! } }
-    \__hook_if_exist:nTF {#1}
+    \hook_if_empty:nTF {#1}
+      { #2 { The~hook~is~empty } }
       {
         \__hook_log_line:x { Code~chunks: }
         \prop_if_empty:cTF { g__hook_#1_code_prop }
@@ -1655,9 +2273,21 @@
             \prop_map_inline:cn { g__hook_#1_code_prop }
               { \__hook_log_line_indent:x { ##1~->~\tl_to_str:n {##2} } }
           }
-        \__hook_log_line:x { Extra~code~for~next~invocation:}
+        \__hook_log_line:x
+          {
+            Document-level~(top-level)~code
+            \hook_if_exist:nT {#1}
+              { ~(executed~\__hook_if_reversed:nTF {#1} {first} {last} ) } :
+          }
         \__hook_log_line_indent:x
           {
+            \tl_if_empty:cTF { __hook_toplevel~#1 }
+              { --- }
+              { -> ~ \exp_args:Nv \tl_to_str:n { __hook_toplevel~#1 } }
+          }
+        \__hook_log_line:x { Extra~code~for~next~invocation: }
+        \__hook_log_line_indent:x
+          {
             \tl_if_empty:cTF { __hook_next~#1 }
               { --- }
               { ->~ \exp_args:Nv \__hook_log_next_code:n { __hook_next~#1 } }
@@ -1706,7 +2336,6 @@
               }
           }
       }
-      { #2 { The~hook~is~empty. } }
   }
 \cs_new:Npn \__hook_log_next_code:n #1
   { \exp_args:No \tl_to_str:n { \use_none:nn #1 } }
@@ -1727,7 +2356,7 @@
   }
 \cs_new_protected:Npn \__hook_list_one_rule:nnn #1#2#3
   {
-    \__hook_list_if_rule_exists:nnnF {#1} {#2} {#3} { }
+    \__hook_list_if_rule_exists:nnnF {#1} {#2} {#3}
       { \__hook_list_if_rule_exists:nnnF {#1} {#2} { ?? } { } }
   }
 \cs_new_protected:Npn \__hook_list_if_rule_exists:nnnF #1#2#3
@@ -1735,7 +2364,9 @@
     \if_cs_exist:w g__hook_ #3 _rule_ #1 | #2 _tl \cs_end:
       \exp_args:Nv \__hook_tmp:w
         { g__hook_ #3 _rule_ #1 | #2 _tl } { #1 | #2 } {#3}
+      \exp_after:wN \use_none:nn
     \fi:
+    \use:n
   }
 \cs_new_protected:Npn \__hook_debug_print_rules:n #1
   {
@@ -1757,12 +2388,10 @@
   { \__hook_normalize_hook_args:Nn \__hook_gput_next_code:nn {#1} }
 \cs_new_protected:Npn \__hook_gput_next_code:nn #1 #2
   {
-    \debug_suspend:
     \__hook_declare:n {#1}
     \hook_if_exist:nTF {#1}
       { \__hook_gput_next_do:nn {#1} {#2} }
       { \__hook_try_declaring_generic_next_hook:nn {#1} {#2} }
-    \debug_resume:
   }
 \cs_new_protected:Npn \__hook_gput_next_do:nn #1
   {
@@ -1774,8 +2403,8 @@
     \tl_if_empty:cT { __hook~#2 }
       { \__hook_update_hook_code:n {#2} }
     \tl_if_empty:NT #1
-      { \tl_gset:Nn #1 { \__hook_clear_next:n {#2} } }
-    \tl_gput_right:Nn #1
+      { \__hook_tl_gset:Nn #1 { \__hook_clear_next:n {#2} } }
+    \__hook_tl_gput_right:Nn #1
   }
 \cs_new_protected:Npn \__hook_clear_next:n #1
   { \cs_gset_eq:cN { __hook_next~#1 } \c_empty_tl }
@@ -1845,7 +2474,11 @@
       {
         \bool_lazy_and:nnTF
             { \prop_if_empty_p:c { g__hook_#1_code_prop } }
-            { \tl_if_empty_p:c { __hook_next~#1 } }
+            {
+              \bool_lazy_and_p:nn
+                { \tl_if_empty_p:c { __hook_toplevel~#1 } }
+                { \tl_if_empty_p:c { __hook_next~#1 } }
+            }
           { \prg_return_true: }
           { \prg_return_false: }
       }
@@ -1887,7 +2520,15 @@
       name.\\
       Please~ use~ a~ different~ name~ for~ your~ hook.}
 \msg_new:nnn { hooks } { empty-label }
-  { Empty~code~label~\msg_line_context:.~Using~`#1'~instead. }
+  {
+    Empty~code~label~\msg_line_context:.~
+    Using~`\__hook_currname_or_default:'~instead.
+  }
+\msg_new:nnn { hooks } { no-default-label }
+  {
+    Missing~(empty)~default~label~\msg_line_context:. \\
+    This~command~was~ignored.
+  }
 \msg_new:nnnn { hooks } { unknown-rule }
   { Unknown~ relationship~ `#3'~
     between~ labels~ `#2'~ and~ `#4'~
@@ -1903,6 +2544,39 @@
     `voids'~ or~
     `unrelated'.
   }
+\msg_new:nnnn { hooks } { misused-top-level }
+  {
+    Illegal~\iow_char:N \\AddToHook{#1}[top-level]{...}.\\
+    'top-level'~is~reserved~for~the~user's~document.
+  }
+  {
+    The~'top-level'~label~is~meant~for~user~code~only,~and~should~only~
+    be~used~(sparingly)~in~the~main~document.~Use~the~default~label~
+    '\__hook_currname_or_default:'~for~this~\@cls at pkg,~or~another~
+    suitable~label.
+  }
+\msg_new:nnn { hooks } { set-top-level }
+  {
+    You~cannot~change~the~default~label~#1~`top-level'.~Illegal \\
+    \use:nn { ~ } { ~ } \iow_char:N \\#2{#3} \\
+    \msg_line_context:.
+  }
+\msg_new:nnn { hooks } { ddhl-deprecated }
+  {
+    \iow_char:N \\DeclareDefaultHookLabel~is~deprecated.\\
+    Use~\iow_char:N \\SetDefaultHookLabel~instead.\\ \\
+    The~deprecated~name~will~be~removed~in~the~next~release.
+  }
+\msg_new:nnn { hooks } { extra-pop-label }
+  {
+    Extra~\iow_char:N \\PopDefaultHookLabel. \\
+    This~command~will~be~ignored.
+  }
+\msg_new:nnn { hooks } { missing-pop-label }
+  {
+    Missing~\iow_char:N \\PopDefaultHookLabel. \\
+    The~label~`#1'~was~pushed~but~never~popped.~Something~is~wrong.
+  }
 \msg_new:nnn { hooks } { should-not-happen }
   {
     ERROR!~This~should~not~happen.~#1 \\
@@ -1917,27 +2591,87 @@
   { \hook_gput_next_code:nn {#1} {#2} }
 \NewDocumentCommand \RemoveFromHook { m o }
   { \hook_gremove_code:nn {#1} {#2} }
-\seq_gpush:Nn \g__hook_name_stack_seq { }
+\tl_gset:Nn \g__hook_hook_curr_name_tl { top-level }
+\seq_gput_right:Nn \g__hook_name_stack_seq { top-level }
+\cs_set_protected:Npn \__hook_tmp:w #1 #2 #3
+  {
+    \quark_if_recursion_tail_stop:n {#1}
+    \seq_gput_right:Nn \g__hook_name_stack_seq {#1}
+    \__hook_tmp:w
+  }
+\exp_after:wN \__hook_tmp:w \@currnamestack
+  \q_recursion_tail \q_recursion_tail
+  \q_recursion_tail \q_recursion_stop
+\tl_gset:Nx \g__hook_hook_curr_name_tl { \@currname }
 \cs_new_protected:Npn \__hook_curr_name_push:n #1
+  { \exp_args:Nx \__hook_curr_name_push_aux:n { \__hook_make_name:n {#1} } }
+\cs_new_protected:Npn \__hook_curr_name_push_aux:n #1
   {
-    \seq_gpush:Nn \g__hook_name_stack_seq {#1}
-    \tl_gset:Nn \g__hook_hook_curr_name_tl {#1}
+    \tl_if_blank:nTF {#1}
+      { \msg_error:nn { hooks } { no-default-label } }
+      {
+        \str_if_eq:nnTF {#1} { top-level }
+          {
+            \msg_error:nnnnn { hooks } { set-top-level }
+              { to } { PushDefaultHookLabel } {#1}
+          }
+          {
+            \seq_gpush:NV \g__hook_name_stack_seq \g__hook_hook_curr_name_tl
+            \tl_gset:Nn \g__hook_hook_curr_name_tl {#1}
+          }
+      }
   }
 \cs_new_protected:Npn \__hook_curr_name_pop:
   {
-    \seq_gpop:NN \g__hook_name_stack_seq \l__hook_return_tl
-    \seq_get:NNTF \g__hook_name_stack_seq \l__hook_return_tl
+    \seq_gpop:NNTF \g__hook_name_stack_seq \l__hook_return_tl
       { \tl_gset_eq:NN \g__hook_hook_curr_name_tl \l__hook_return_tl }
+      { \msg_error:nn { hooks } { extra-pop-label } }
+  }
+\tl_gput_right:Nn \@kernel at after@enddocument at afterlastpage
+  { \__hook_end_document_label_check: }
+\cs_new_protected:Npn \__hook_end_document_label_check:
+  {
+    \seq_gpop:NNT \g__hook_name_stack_seq \l__hook_return_tl
       {
-        \msg_error:nnn { hooks } { should-not-happen }
-          { Tried~to~pop~from~an~empty~default~label~stack. }
+        \msg_error:nnx { hooks } { missing-pop-label }
+          { \g__hook_hook_curr_name_tl }
+        \tl_gset_eq:NN \g__hook_hook_curr_name_tl \l__hook_return_tl
+        \__hook_end_document_label_check:
       }
   }
+\NewDocumentCommand \SetDefaultHookLabel { m }
+  {
+    \seq_if_empty:NTF \g__hook_name_stack_seq
+      {
+        \msg_error:nnnnn { hooks } { set-top-level }
+          { for } { SetDefaultHookLabel } {#1}
+      }
+      { \exp_args:Nx \__hook_set_default_label:n { \__hook_make_name:n {#1} } }
+  }
+\cs_new_protected:Npn \__hook_set_default_label:n #1
+  {
+    \str_if_eq:nnTF {#1} { top-level }
+      {
+        \msg_error:nnnnn { hooks } { set-top-level }
+          { to } { SetDefaultHookLabel } {#1}
+      }
+      { \tl_gset:Nn \g__hook_hook_curr_name_tl {#1} }
+  }
 \NewDocumentCommand \DeclareDefaultHookLabel { m }
   {
-    \seq_gpop:NN \g__hook_name_stack_seq \l__hook_return_tl
-    \__hook_curr_name_push:n {#1}
+    \msg_error:nn { hooks } { ddhl-deprecated }
+    \SetDefaultHookLabel {#1}
   }
+\NewDocumentCommand \PushDefaultHookLabel { m }
+  { \__hook_curr_name_push:n {#1} }
+\NewDocumentCommand \PopDefaultHookLabel { }
+  { \__hook_curr_name_pop: }
+\cs_gset_protected:Npn \@expl at push@filename at aux@@ #1#2#3
+  {
+    \__hook_curr_name_push:n {#3}
+    \str_gset:Nx \g_file_curr_name_str {#3}
+    #1 #2 {#3}
+  }
 \cs_new:Npn \UseHook        { \hook_use:n }
 \cs_new:Npn \UseOneTimeHook { \hook_use_once:n }
 \cs_new_protected:Npn \ShowHook { \hook_show:n }
@@ -1956,8 +2690,6 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
 \cs_new_eq:NN \@expl@@@initialize at all@@
               \__hook_initialize_all:
-\cs_new_eq:NN \@expl@@@hook at curr@name at push@@n
-              \__hook_curr_name_push:n
 \cs_new_eq:NN \@expl@@@hook at curr@name at pop@@
               \__hook_curr_name_pop:
 \ExplSyntaxOff
@@ -1995,1052 +2727,340 @@
 %%% From File: ltcntrl.dtx
 %%% From File: lterror.dtx
 %%% From File: ltpar.dtx
-%%% From File: ltlists.dtx
-%%% From File: ltboxes.dtx
-\IncludeInRelease{2015/01/01}%
-                 {\makebox}{Make \makebox robust}%
-\DeclareRobustCommand\makebox{%
-  \leavevmode
-  \@ifnextchar(%)
-    \@makepicbox
-    {\@ifnextchar[\@makebox\mbox}}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\makebox}{Make \makebox robust}%
-\def\makebox{%
-  \leavevmode
-  \@ifnextchar(%)
-    \@makepicbox
-    {\@ifnextchar[\@makebox\mbox}}%
-\expandafter\let\csname makebox \endcsname\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\@imakepicbox}{default units}%
-\long\def\@imakepicbox(#1,#2)[#3]#4{%
-  \@defaultunitsset\@tempdimc{#2}\unitlength
-  \vbox to\@tempdimc
-   {\let\mb at b\vss \let\mb at l\hss\let\mb at r\hss
-    \let\mb at t\vss
-    \@tfor\reserved at a :=#3\do{%
-      \if s\reserved at a
-        \let\mb at l\relax\let\mb at r\relax
-      \else
-        \expandafter\let\csname mb@\reserved at a\endcsname\relax
-      \fi}%
-    \mb at t
-    \@defaultunitsset\@tempdimc{#1}\unitlength
-    \hb at xt@\@tempdimc{\mb at l #4\mb at r}%
-    \mb at b
-    \kern\z@}}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@imakepicbox}{default units}%
-\long\def\@imakepicbox(#1,#2)[#3]#4{%
-  \vbox to#2\unitlength
-   {\let\mb at b\vss \let\mb at l\hss\let\mb at r\hss
-    \let\mb at t\vss
-    \@tfor\reserved at a :=#3\do{%
-      \if s\reserved at a
-        \let\mb at l\relax\let\mb at r\relax
-      \else
-        \expandafter\let\csname mb@\reserved at a\endcsname\relax
-      \fi}%
-    \mb at t
-    \hb at xt@ #1\unitlength{\mb at l #4\mb at r}%
-    \mb at b
-    \kern\z@}}
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\savebox}{Make \savebox robust}%
-\DeclareRobustCommand\savebox[1]{%
-  \@ifnextchar(%)
-    {\@savepicbox#1}{\@ifnextchar[{\@savebox#1}{\sbox#1}}}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\savebox}{Make \savebox robust}%
-\def\savebox#1{%
-  \@ifnextchar(%)
-    {\@savepicbox#1}{\@ifnextchar[{\@savebox#1}{\sbox#1}}}%
-\expandafter\let\csname savebox \endcsname\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\framebox}{Make \framebox robust}%
-\DeclareRobustCommand\framebox{%
-  \@ifnextchar(%)
-    \@framepicbox{\@ifnextchar[\@framebox\fbox}}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\framebox}{Make \framebox robust}%
-\def\framebox{%
-  \@ifnextchar(%)
-    \@framepicbox{\@ifnextchar[\@framebox\fbox}}%
-\expandafter\let\csname framebox \endcsname\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\parbox}{Make \parbox robust}%
-\DeclareRobustCommand\parbox{%
-  \@ifnextchar[%]
-    \@iparbox
-    {\@iiiparbox c\relax[s]}}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\parbox}{Make \parbox robust}%
-\def\parbox{%
-  \@ifnextchar[%]
-    \@iparbox
-    {\@iiiparbox c\relax[s]}}%
-\expandafter\let\csname parbox \endcsname\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2017-04-15}%
-                 {\normallineskiplimit}
-                 {reset \lineskiplimit}%
-\def\@arrayparboxrestore{%
-  \let\if at nobreak\iffalse
-  \let\if at noskipsec\iffalse
-  \let\par\@@par
-  \let\-\@dischyph
-  \let\'\@acci\let\`\@accii\let\=\@acciii
-  \parindent\z@ \parskip\z at skip
-  \everypar{}%
-  \linewidth\hsize
-  \@totalleftmargin\z@
-  \leftskip\z at skip \rightskip\z at skip \@rightskip\z at skip
-  \parfillskip\@flushglue
-  \lineskip\normallineskip
-  \lineskiplimit\normallineskiplimit
-  \baselineskip\normalbaselineskip
-  \sloppy}
-\EndIncludeInRelease
-\IncludeInRelease{0000-00-00}%
-                 {\normallineskiplimit}
-                 {reset \lineskiplimit}%
-\def\@arrayparboxrestore{%
-  \let\if at nobreak\iffalse
-  \let\if at noskipsec\iffalse
-  \let\par\@@par
-  \let\-\@dischyph
-  \let\'\@acci\let\`\@accii\let\=\@acciii
-  \parindent\z@ \parskip\z at skip
-  \everypar{}%
-  \linewidth\hsize
-  \@totalleftmargin\z@
-  \leftskip\z at skip \rightskip\z at skip \@rightskip\z at skip
-  \parfillskip\@flushglue \lineskip\normallineskip
-  \baselineskip\normalbaselineskip
-  \sloppy}
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\rule}{Make \rule robust}%
-\DeclareRobustCommand\rule{\@ifnextchar[\@rule{\@rule[\z@]}}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\rule}{Make \rule robust}%
-\def\rule{\@ifnextchar[\@rule{\@rule[\z@]}}%
-\expandafter\let\csname rule \endcsname\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\raisebox}{Make \raisebox robust}%
-\DeclareRobustCommand\raisebox[1]{%
-  \leavevmode
-  \@ifnextchar[{\@rsbox{#1}}{\@irsbox{#1}[]}}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\raisebox}{Make \raisebox robust}%
-\def\raisebox#1{%
-  \leavevmode
-  \@ifnextchar[{\@rsbox{#1}}{\@irsbox{#1}[]}}
-\expandafter\let\csname raisebox \endcsname\@undefined
-\EndIncludeInRelease
-%%% From File: lttab.dtx
-\IncludeInRelease{2020/10/01}%
-                 {\@itabcr}{Tabbing calc syntax}%
-\def\@itabcr[#1]{\@vspace at calcify{#1}\@startline\ignorespaces}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@itabcr}{Tabbing calc syntax}%
-
-\def\@itabcr[#1]{\vskip #1\@startline\ignorespaces}
-\EndIncludeInRelease
+%%% From File: ltspace.dtx
 \IncludeInRelease{2019/10/01}%
-                 {\pushtabs}{Make commands robust}%
-\DeclareRobustCommand\pushtabs{%
-  \@stopfield\@addfield\global\advance\@tabpush \@ne \begingroup
-       \@contfield}
-\DeclareRobustCommand\poptabs{\@stopfield\@addfield
-  \ifnum \@tabpush >\z@
-    \endgroup
-    \global\advance\@tabpush \m at ne
-    \ifnum \@curtab >\@hightab
-      \global \@curtab \@hightab
-      \@badtab
-    \fi
-  \else
-    \@badpoptabs
-  \fi
-  \@contfield}
-\DeclareRobustCommand\kill{\@stopfield\@startline\ignorespaces}
+                 {\pagebreak}{Make commands robust}%
+\DeclareRobustCommand\pagebreak{\@testopt{\@no at pgbk-}4}
+\DeclareRobustCommand\nopagebreak{\@testopt\@no at pgbk4}
+\DeclareRobustCommand\linebreak{\@testopt{\@no at lnbk-}4}
+\DeclareRobustCommand\nolinebreak{\@testopt\@no at lnbk4}
+\DeclareRobustCommand\samepage{\interlinepenalty\@M
+   \postdisplaypenalty\@M
+   \interdisplaylinepenalty\@M
+   \@beginparpenalty\@M
+   \@endparpenalty\@M
+   \@itempenalty\@M
+   \@secpenalty\@M
+   \interfootnotelinepenalty\@M}
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\pushtabs}{Make commands robust}%
+                 {\pagebreak}{Make commands robust}%
 
-\kernel at make@fragile\pushtabs
-\kernel at make@fragile\poptabs
-\kernel at make@fragile\kill
+\kernel at make@fragile\pagebreak
+\kernel at make@fragile\nopagebreak
+\kernel at make@fragile\linebreak
+\kernel at make@fragile\nolinebreak
+\kernel at make@fragile\samepage
 
 \EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\@yargarraycr}{tabular support calc syntax}%
-\def\@yargarraycr#1{\cr\noalign{\@vspace at calcify{#1}}}
+\IncludeInRelease{2020/02/02}%
+                 {\@normalcr}{Make robust}%
+\protected\def\@normalcr{%
+  \let \reserved at e \relax
+  \let \reserved at f \relax
+  \@ifstar{\let \reserved at e \vadjust \let \reserved at f \nobreak
+             \@xnewline}%
+  \@xnewline}
+\let\\\@normalcr
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\@yargarraycr}{tabular support calc syntax}%
+                 {\@normalcr}{Make robust}%
 
-\def\@yargarraycr#1{\cr\noalign{\vskip #1}}
-\EndIncludeInRelease
-%%% From File: ltmath.dtx
-\IncludeInRelease{2019/10/01}%
-                 {\vphantom}{Make commands robust}%
-\DeclareRobustCommand\vphantom{\v at true\h at false\ph at nt}
-\DeclareRobustCommand\hphantom{\v at false\h at true\ph at nt}
-\DeclareRobustCommand\phantom{\v at true\h at true\ph at nt}
-\DeclareRobustCommand\mathstrut{\vphantom(}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\vphantom}{Make commands robust}%
+\DeclareRobustCommand\\{%
+   \let \reserved at e \relax
+   \let \reserved at f \relax
+   \@ifstar{\let \reserved at e \vadjust \let \reserved at f \nobreak
+             \@xnewline}%
+  \@xnewline}
+\expandafter\let\expandafter\@normalcr
+     \csname\expandafter\@gobble\string\\ \endcsname
 
-\kernel at make@fragile\vphantom
-\kernel at make@fragile\hphantom
-\kernel at make@fragile\phantom
-\kernel at make@fragile\mathstrut
-
 \EndIncludeInRelease
-\IncludeInRelease{2018/12/01}%
-                 {\finph at nt}{Start LR-mode}%
-\def\finph at nt{%
-  \setbox\tw@\null
-  \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi
-  \ifh@ \wd\tw@\wd\z@\fi
-  \leavevmode at ifvmode\box\tw@}
+\IncludeInRelease{2020/10/01}%
+                 {\@vspace at calcify}{Add calc support}%
+\def\@vspace at calcify#1{\begingroup\setlength\skip@{#1}\vskip\skip@\endgroup}
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\finph at nt}{Start LR-mode}%
-\def\finph at nt{%
-  \setbox\tw@\null
-  \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi
-  \ifh@ \wd\tw@\wd\z@\fi \box\tw@}
-\EndIncludeInRelease
-\IncludeInRelease{2018/12/01}%
-                 {\finsm at sh}{Start LR-mode}%
-\def\finsm at sh{\ht\z@\z@ \dp\z@\z@ \leavevmode at ifvmode\box\z@}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\finsm at sh}{Start LR-mode}%
-\def\finsm at sh{\ht\z@\z@ \dp\z@\z@ \box\z@}
-\EndIncludeInRelease
-\IncludeInRelease{2019/10/01}%
-                 {\cases}{Make commands robust}%
-\DeclareRobustCommand*\cases[1]{\left\{\,\vcenter{\normalbaselines\m at th
-    \ialign{$##\hfil$&\quad{##}\hfil\crcr#1\crcr}}\right.}
-\DeclareRobustCommand*\matrix[1]{\null\,\vcenter{\normalbaselines\m at th
-    \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
-      \mathstrut\crcr\noalign{\kern-\baselineskip}
-      #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}
-\DeclareRobustCommand*\pmatrix[1]{\left(\matrix{#1}\right)}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\cases}{Make commands robust}%
+                 {\@vspace at calcify}{Add calc support}%
 
-\kernel at make@fragile\cases
-\kernel at make@fragile\matrix
-\kernel at make@fragile\pmatrix
-
+\let\@vspace at calcify\@undefined
 \EndIncludeInRelease
 \IncludeInRelease{2020/10/01}%
-                 {\tmspace}{amsmath spacing commands}%
-\DeclareRobustCommand\tmspace[3]{%
-  \ifmmode\mskip#1#2\else\leavevmode at ifvmode\kern#1#3\fi\relax}
-\DeclareRobustCommand\,{\tmspace+\thinmuskip{.16667em}}
-\let\thinspace\,
-\DeclareRobustCommand\!{\tmspace-\thinmuskip{.16667em}}
-\let\negthinspace\!
-\DeclareRobustCommand\:{\tmspace+\medmuskip{.2222em}}
-\let\medspace\:
-\let\>=\:
-\DeclareRobustCommand\negmedspace{\tmspace-\medmuskip{.2222em}}
-\DeclareRobustCommand\;{\tmspace+\thickmuskip{.2777em}}
-\let\thickspace\;
-\DeclareRobustCommand\negthickspace{\tmspace-\thickmuskip{.2777em}}
+                 {\@newline}{\newline calc support}%
+\def\@newline[#1]{\let \reserved at e \vadjust
+                   \@gnewline {\@vspace at calcify{#1}}}
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\tmspace}{amsmath spacing commands}%
+                 {\@newline}{\newline calc support}%
 
-\let\tmspace\@undefined
-\DeclareRobustCommand{\,}{%
-   \relax\ifmmode\mskip\thinmuskip\else\thinspace\fi}
-\DeclareRobustCommand\thinspace{\leavevmode at ifvmode\kern .16667em }
-\DeclareRobustCommand\negthinspace{\leavevmode at ifvmode\kern-.16667em }
-\def\>{\mskip\medmuskip}
-\let\:=\>
-\def\;{\mskip\thickmuskip}
-\def\!{\mskip-\thinmuskip}
-
+\def\@newline[#1]{\let \reserved at e \vadjust
+                   \@gnewline {\vskip #1}}
 \EndIncludeInRelease
-\IncludeInRelease{2015/01/01}{\(}{Make \( robust}%
-\DeclareRobustCommand\({%
-  \relax\ifmmode\@badmath\else$\fi}%
-\DeclareRobustCommand\){%
-  \relax\ifmmode\ifinner$\else\@badmath\fi\else \@badmath\fi}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}{\(}{Make \( robust}%
-\def\({%
-  \relax\ifmmode\@badmath\else$\fi}%
-\expandafter\let\csname\string( \endcsname\@undefined
-\def\){%
-  \relax\ifmmode\ifinner$\else\@badmath\fi\else \@badmath\fi}%
-\expandafter\let\csname\string) \endcsname\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}{\[}{Make \[ robust}%
-\DeclareRobustCommand\[{%
-   \relax\ifmmode
-      \@badmath
-   \else
-      \ifvmode
-         \nointerlineskip
-         \makebox[.6\linewidth]{}%
+\IncludeInRelease{2018/10/10}%
+                 {\@esphack}{hyphenation and nobreak after space hack}%
+\def\@esphack{%
+  \relax
+  \ifhmode
+    \spacefactor\@savsf
+    \ifdim\@savsk>\z@
+      \ifdim\lastskip=\z@
+        \nobreak \hskip\z at skip
       \fi
-      $$%%$$ BRACE MATCH HACK
-   \fi
-}%
-\DeclareRobustCommand\]{%
-   \relax\ifmmode
-      \ifinner
-         \@badmath
-      \else
-         $$%%$$ BRACE MATCH HACK
-      \fi
-   \else
-      \@badmath
-   \fi
-   \ignorespaces
-}%
+      \ignorespaces
+    \fi
+  \else
+    \ifvmode
+      \if at nobreak\nobreak\else\if at noskipsec\nobreak\fi\fi
+    \fi
+  \fi}%
 \EndIncludeInRelease
-\IncludeInRelease{0000/00/00}{\[}{Make \[ robust}%
-\def\[{%
-   \relax\ifmmode
-      \@badmath
-   \else
-      \ifvmode
-         \nointerlineskip
-         \makebox[.6\linewidth]{}%
+\IncludeInRelease{2015/10/01}%
+                 {\@esphack}{hyphenation and nobreak after space hack}%
+\def\@esphack{%
+  \relax
+  \ifhmode
+    \spacefactor\@savsf
+    \ifdim\@savsk>\z@
+      \ifdim\lastskip=\z@
+        \nobreak \hskip\z at skip
       \fi
-      $$%%$$ BRACE MATCH HACK
-   \fi
-}%
-\expandafter\let\csname\string[ \endcsname\@undefined
-\def\]{%
-   \relax\ifmmode
-      \ifinner
-         \@badmath
-      \else
-         $$%%$$ BRACE MATCH HACK
-      \fi
-   \else
-      \@badmath
-   \fi
-   \ignorespaces
-}%
-\expandafter\let\csname\string] \endcsname\@undefined
+      \ignorespaces
+    \fi
+  \fi}%
 \EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\@xeqncr}{eqnarray support calc syntax}%
-\def\@xeqncr[#1]{%
-   \ifnum0=`{\fi}%
-   \@@eqncr
-   \noalign{\penalty\@eqpen\vskip\jot\@vspace at calcify{#1}}%
-}
+\IncludeInRelease{2015/01/01}%
+                 {\@esphack}{hyphenation and nobreak after space hack}%
+\def\@esphack{%
+  \relax
+  \ifhmode
+    \spacefactor\@savsf
+    \ifdim\@savsk>\z@
+      \nobreak \hskip\z at skip
+      \ignorespaces
+    \fi
+  \fi}%
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\@xeqncr}{eqnarray support calc syntax}%
-
-\def\@xeqncr[#1]{%
-   \ifnum0=`{\fi}%
-   \@@eqncr
-   \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}%
-}
+                 {\@esphack}{hyphenation and nobreak after space hack}%
+\def\@esphack{%
+  \relax
+  \ifhmode
+    \spacefactor\@savsf
+    \ifdim\@savsk>\z@
+      \ignorespaces
+    \fi
+  \fi}%
 \EndIncludeInRelease
-%%% From File: ltpictur.dtx
-\IncludeInRelease{2020/10/01}%
-                 {\@defaultunitsset}{default units}%
-\def\@defaultunitsset#1#2#3{%
-  \@defaultunits#1\dimexpr#2#3\relax\relax\@nnil}
+\IncludeInRelease{2015/01/01}%
+                 {\@Esphack}{hyphenation after space hack}%
+\def\@Esphack{%
+  \relax
+  \ifhmode
+    \spacefactor\@savsf
+    \ifdim\@savsk>\z@
+      \nobreak \hskip\z at skip
+      \@ignoretrue
+      \ignorespaces
+    \fi
+   \fi}%
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\@defaultunitsset}{default units}%
-\let\@defaultunitsset\@undefined
+                 {\@Esphack}{hyphenation after space hack}%
+\def\@Esphack{%
+  \relax
+  \ifhmode
+    \spacefactor\@savsf
+    \ifdim\@savsk>\z@
+      \@ignoretrue
+      \ignorespaces
+    \fi
+   \fi}%
 \EndIncludeInRelease
 \IncludeInRelease{2020/10/01}%
-                 {\@picture}{default units}%
-\def\@picture(#1,#2)(#3,#4){%
-  \@defaultunitsset\@picht{#2}\unitlength
-  \@defaultunitsset\@tempdimc{#1}\unitlength
-  \setbox\@picbox\hb at xt@\@tempdimc\bgroup
-    \@defaultunitsset\@tempdimc{#3}\unitlength
-    \hskip -\@tempdimc
-    \@defaultunitsset\@tempdimc{#4}\unitlength
-    \lower\@tempdimc\hbox\bgroup
-      \ignorespaces}
+                 {\addvspace}{\addvspace calc support}%
+\def\addvspace#1{%
+  \ifvmode
+     \if at minipage\else
+       \ifdim \lastskip =\z@
+         \@vspace at calcify{#1}%
+       \else
+       \setlength\@tempskipb{#1}%
+         \@xaddvskip
+       \fi
+     \fi
+  \else
+    \@noitemerr
+  \fi}
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\@picture}{default units}%
-\def\@picture(#1,#2)(#3,#4){%
-  \@picht#2\unitlength
-  \setbox\@picbox\hb at xt@#1\unitlength\bgroup
-    \hskip -#3\unitlength
-    \lower #4\unitlength\hbox\bgroup
-      \ignorespaces}
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\put}{default units}%
-\expandafter\let\csname put \endcsname\@undefind
-\long\def\put(#1,#2)#3{%
-  \@killglue
-  \@defaultunitsset\@tempdimc{#2}\unitlength
-  \raise\@tempdimc
-  \hb at xt@\z@{%
-    \@defaultunitsset\@tempdimc{#1}\unitlength
-    \kern\@tempdimc
-    #3\hss}%
-  \ignorespaces}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\put}{default units}%
-\expandafter\let\csname put \endcsname\@undefind
-\long\def\put(#1,#2)#3{%
-  \@killglue\raise#2\unitlength
-  \hb at xt@\z@{\kern#1\unitlength #3\hss}%
-  \ignorespaces}
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\multiput}{default units}%
-\expandafter\let\csname multiput \endcsname\@undefind
-\def\multiput(#1,#2)#3{%
-  \@defaultunitsset\@xdim{#1}\unitlength
-  \@defaultunitsset\@ydim{#2}\unitlength
-   \@multiput(}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\multiput}{default units}%
-\expandafter\let\csname multiput \endcsname\@undefind
-\def\multiput(#1,#2)#3{%
-  \@xdim #1\unitlength
-  \@ydim #2\unitlength
-   \@multiput(}
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\@multiput}{default units}%
-\long\def\@multiput(#1,#2)#3#4{%
-  \@killglue\@multicnt #3\relax
-  \@whilenum \@multicnt >\z@\do
-    {\raise\@ydim\hb at xt@\z@{\kern\@xdim #4\hss}%
-     \advance\@multicnt\m at ne
-     \@defaultunitsset{\advance\@xdim}{#1}\unitlength
-     \@defaultunitsset{\advance\@ydim}{#2}\unitlength}%
-  \ignorespaces}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@multiput}{default units}%
-\long\def\@multiput(#1,#2)#3#4{%
-  \@killglue\@multicnt #3\relax
-  \@whilenum \@multicnt >\z@\do
-    {\raise\@ydim\hb at xt@\z@{\kern\@xdim #4\hss}%
-     \advance\@multicnt\m at ne
-     \advance\@xdim#1\unitlength\advance\@ydim#2\unitlength}%
-  \ignorespaces}
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\@istackcr}{\shortstack calc support}%
-\def\@istackcr[#1]{\cr\noalign{\@vspace at calcify{#1}}\ignorespaces}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@istackcr}{\shortstack calc support}%
+                 {\addvspace}{\addvspace calc support}%
 
-\def\@istackcr[#1]{\cr\noalign{\vskip #1}\ignorespaces}
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\line}{default units}%
-\expandafter\let\csname line \endcsname\@undefind
-\def\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
-  \@defaultunitsset\@linelen{#3}\unitlength
-  \ifdim\@linelen<\z@\@badlinearg\else
-    \ifnum\@xarg =\z@ \@vline
-      \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi
-    \fi
+\def\addvspace#1{%
+  \ifvmode
+     \if at minipage\else
+       \ifdim \lastskip =\z@
+         \vskip #1\relax
+       \else
+       \@tempskipb#1\relax
+         \@xaddvskip
+       \fi
+     \fi
+  \else
+    \@noitemerr
   \fi}
 \EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\line}{default units}%
-\expandafter\let\csname line \endcsname\@undefind
-\def\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
-  \@linelen #3\unitlength
-  \ifdim\@linelen<\z@\@badlinearg\else
-    \ifnum\@xarg =\z@ \@vline
-      \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi
+\IncludeInRelease{2015/01/01}%
+                 {\addpenalty}{\addpenalty}%
+\def\addpenalty#1{%
+  \ifvmode
+    \if at minipage
+    \else
+      \if at nobreak
+      \else
+        \ifdim\lastskip=\z@
+          \penalty#1\relax
+        \else
+          \@tempskipb\lastskip
+          \begingroup
+            \@tempskipa\@tempskipb
+            \advance \@tempskipb
+              \ifdim\prevdepth>\maxdepth\maxdepth\else
+                 \ifdim \prevdepth = -\@m\p@ \z@ \else \prevdepth \fi
+               \fi
+             \vskip -\@tempskipb
+             \penalty#1%
+             \ifdim\@tempskipa=\@tempskipb
+             \else
+               \advance\@tempskipb -\@tempskipa
+               \vskip \@tempskipb
+             \fi
+             \vskip \@tempskipa
+          \endgroup
+        \fi
+      \fi
     \fi
-  \fi}
+  \else
+    \@noitemerr
+  \fi}%
 \EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\vector}{default units}%
-\expandafter\let\csname vector \endcsname\@undefind
-\def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
-  \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi
-  \ifnum\@tempcnta<5\relax
-  \@defaultunitsset\@linelen{#3}\unitlength
-  \ifdim\@linelen<\z@\@badlinearg\else
-    \ifnum\@xarg =\z@ \@vvector
-      \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi
-    \fi
-  \fi
-  \else\@badlinearg\fi}
-\EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\vector}{default units}%
-\expandafter\let\csname vector \endcsname\@undefind
-\def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
-  \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi
-  \ifnum\@tempcnta<5\relax
-  \@linelen #3\unitlength
-  \ifdim\@linelen<\z@\@badlinearg\else
-    \ifnum\@xarg =\z@ \@vvector
-      \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi
+                 {\addpenalty}{\addpenalty}%
+\def\addpenalty#1{%
+  \ifvmode
+    \if at minipage
+    \else
+      \if at nobreak
+      \else
+        \ifdim\lastskip=\z@
+          \penalty#1\relax
+        \else
+          \@tempskipb\lastskip
+          \vskip -\lastskip
+          \penalty#1%
+          \vskip\@tempskipb
+        \fi
+      \fi
     \fi
-  \fi
-  \else\@badlinearg\fi}
+  \else
+    \@noitemerr
+  \fi}%
 \EndIncludeInRelease
 \IncludeInRelease{2020/10/01}%
-                 {\dashbox}{default units}%
-\expandafter\let\csname dashbox \endcsname\@undefind
-\def\dashbox#1(#2,#3){\leavevmode\hb at xt@\z@{\baselineskip \z at skip
-\lineskip \z at skip
-\@defaultunitsset\@dashdim{#2}\unitlength
-\@dashcnt \@dashdim \advance\@dashcnt 200
-\@defaultunitsset\@dashdim{#1}\unitlength
-\divide\@dashcnt \@dashdim
-\ifodd\@dashcnt\@dashdim \z@
-\advance\@dashcnt \@ne \divide\@dashcnt \tw@
-\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@
-\advance\@dashcnt \m at ne
-\setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth
-\@width \@dashdim}\put(0,0){\copy\@dashbox}%
-\put(0,#3){\copy\@dashbox}%
-\put(#2,0){\hskip-\@dashdim\copy\@dashbox}%
-\put(#2,#3){\hskip-\@dashdim\box\@dashbox}%
-\multiply\@dashdim \thr@@
-\fi
-\setbox\@dashbox \hbox{%
-  \@defaultunitsset\@tempdimc{#1}\unitlength
-  \vrule \@height \@halfwidth \@depth \@halfwidth \@width \@tempdimc
-  \hskip\@tempdimc}%
-\@tempcnta\z@
-\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
-\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@
-\put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
-\do{\copy\@dashbox\advance\@tempcnta \@ne }}%
-\@defaultunitsset\@dashdim{#3}\unitlength
-\@dashcnt \@dashdim \advance\@dashcnt 200
-\@defaultunitsset\@dashdim{#1}\unitlength
-\divide\@dashcnt \@dashdim
-\ifodd\@dashcnt \@dashdim \z@
-\advance\@dashcnt \@ne \divide\@dashcnt \tw@
-\else
-\divide\@dashdim \tw@ \divide\@dashcnt \tw@
-\advance\@dashcnt \m at ne
-\setbox\@dashbox\hbox{\hskip -\@halfwidth
-\vrule \@width \@wholewidth
-\@height \@dashdim}\put(0,0){\copy\@dashbox}%
-\put(#2,0){\copy\@dashbox}%
-\put(0,#3){\lower\@dashdim\copy\@dashbox}%
-\put(#2,#3){\lower\@dashdim\copy\@dashbox}%
-\multiply\@dashdim \thr@@
-\fi
-\@defaultunitsset\@tempdimb{#1}\unitlength
-\setbox\@dashbox\hbox{%
-  \vrule \@width \@wholewidth \@height\@tempdimb}%
-\@tempcnta\z@
-\put(0,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt
-\do{\vskip\@tempdimb\copy\@dashbox\advance\@tempcnta \@ne }%
-\vskip\@dashdim}}\@tempcnta\z@
-\put(#2,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt
-\do{\vskip\@tempdimb\copy\@dashbox\advance\@tempcnta \@ne }%
-\vskip\@dashdim}}}\@makepicbox(#2,#3)}
+                 {\@vspace}{Support calc in \vspace}%
+\def\@vspace #1{%
+  \ifvmode
+    \@vspace at calcify{#1}%
+    \vskip\z at skip
+   \else
+     \@bsphack
+     \vadjust{\@restorepar
+              \@vspace at calcify{#1}%
+              \vskip\z at skip
+              }%
+     \@esphack
+   \fi}
+\def\@vspacer#1{%
+  \ifvmode
+    \dimen@\prevdepth
+    \hrule \@height\z@
+    \nobreak
+    \@vspace at calcify{#1}%
+    \vskip\z at skip
+    \prevdepth\dimen@
+  \else
+    \@bsphack
+    \vadjust{\@restorepar
+             \hrule \@height\z@
+             \nobreak
+             \@vspace at calcify{#1}%
+             \vskip\z at skip}%
+    \@esphack
+  \fi}
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\dashbox}{default units}%
-\expandafter\let\csname dashbox \endcsname\@undefind
-\def\dashbox#1(#2,#3){%
-\leavevmode\hb at xt@\z@{\baselineskip \z at skip
-\lineskip \z at skip
-\@dashdim #2\unitlength
-\@dashcnt \@dashdim \advance\@dashcnt 200
-\@dashdim #1\unitlength\divide\@dashcnt \@dashdim
-\ifodd\@dashcnt\@dashdim \z@
-\advance\@dashcnt \@ne \divide\@dashcnt \tw@
-\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@
-\advance\@dashcnt \m at ne
-\setbox\@dashbox \hbox{%
-  \vrule \@height \@halfwidth \@depth \@halfwidth
-  \@width \@dashdim}\put(0,0){\copy\@dashbox}%
-\put(0,#3){\copy\@dashbox}%
-\put(#2,0){\hskip-\@dashdim\copy\@dashbox}%
-\put(#2,#3){\hskip-\@dashdim\box\@dashbox}%
-\multiply\@dashdim \thr@@
-\fi
-\setbox\@dashbox \hbox{%
-  \vrule \@height \@halfwidth \@depth \@halfwidth
-  \@width #1\unitlength\hskip #1\unitlength}\@tempcnta\z@
-\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
-\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@
-\put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
-\do{\copy\@dashbox\advance\@tempcnta \@ne }}%
-\@dashdim #3\unitlength
-\@dashcnt \@dashdim \advance\@dashcnt 200
-\@dashdim #1\unitlength\divide\@dashcnt \@dashdim
-\ifodd\@dashcnt \@dashdim \z@
-\advance\@dashcnt \@ne \divide\@dashcnt \tw@
-\else
-\divide\@dashdim \tw@ \divide\@dashcnt \tw@
-\advance\@dashcnt \m at ne
-\setbox\@dashbox\hbox{\hskip -\@halfwidth
-\vrule \@width \@wholewidth
-\@height \@dashdim}\put(0,0){\copy\@dashbox}%
-\put(#2,0){\copy\@dashbox}%
-\put(0,#3){\lower\@dashdim\copy\@dashbox}%
-\put(#2,#3){\lower\@dashdim\copy\@dashbox}%
-\multiply\@dashdim \thr@@
-\fi
-\setbox\@dashbox\hbox{\vrule \@width \@wholewidth
-\@height #1\unitlength}\@tempcnta\z@
-\put(0,0){%
-  \hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt
-  \do{\vskip #1\unitlength\copy\@dashbox
-      \advance\@tempcnta\@ne }%
-  \vskip\@dashdim}}\@tempcnta\z@
-\put(#2,0){%
-  \hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt
-  \do{\vskip #1\unitlength\copy\@dashbox
-      \advance\@tempcnta \@ne }%
-  \vskip\@dashdim}}}\@makepicbox(#2,#3)}
+                 {\@vspace}{Support calc in \vspace}%
+
+\def\@vspace #1{%
+  \ifvmode
+    \vskip #1
+    \vskip\z at skip
+   \else
+     \@bsphack
+     \vadjust{\@restorepar
+              \vskip #1
+              \vskip\z at skip
+              }%
+     \@esphack
+   \fi}
+\def\@vspacer#1{%
+  \ifvmode
+    \dimen@\prevdepth
+    \hrule \@height\z@
+    \nobreak
+    \vskip #1
+    \vskip\z at skip
+    \prevdepth\dimen@
+  \else
+    \@bsphack
+    \vadjust{\@restorepar
+             \hrule \@height\z@
+             \nobreak
+             \vskip #1
+             \vskip\z at skip}%
+    \@esphack
+  \fi}
 \EndIncludeInRelease
-\IncludeInRelease{2016/03/31}%
-                 {\@ovhlinetrue}%
-                 {Avoid almost zero length leaders}%
-\newif\if at ovvline \@ovvlinetrue
-\newif\if at ovhline \@ovhlinetrue
+\IncludeInRelease{2015/01/01}%
+                 {\@}{Space after \@}%
+\def\@{\spacefactor\@m{}}%
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\@ovhlinetrue}%
-                 {Avoid almost zero length leaders}%
-\let\if at ovvline\@undefined
-\let\if at ovhline\@undefined
+                 {\@}{Space after \@}%
+\def\@{\spacefactor\@m}%
 \EndIncludeInRelease
 \IncludeInRelease{2020/10/01}%
-                 {\@oval}{default units}%
-\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen
-  \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
-  \@ovvlinefalse \@ovhlinefalse
-  \@tfor\reserved at a :=#3\do{%
-    \csname @ov\reserved at a false\endcsname}%
-  \@defaultunitsset\@ovxx{#1}\unitlength
-  \@defaultunitsset\@ovyy{#2}\unitlength
-  \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx \@ovvlinetrue
-  \else \@ovyy \ifdim \@ovyy =\@ovxx \else \@ovhlinetrue \fi\fi
-  \advance \@tempdimb -2\p@
-  \@getcirc \@tempdimb
-  \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa
-  \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@
-  \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@
-  \ifdim \@ovdx >\z@ \@ovhlinetrue \fi
-  \ifdim \@ovdy >\z@ \@ovvlinetrue \fi
-  \@circlefnt \setbox\@tempboxa
-  \hbox{\if at ovr \@ovvert32\kern -\@tempdima \fi
-  \if at ovl \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx \fi
-  \if at ovt \@ovhorz \kern -\@ovxx \fi
-  \if at ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro
-  \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@
-  \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}%
-  \endgroup}
+                 {\@hspace}{Support calc with \hspace}%
+\def\@hspace#1{\begingroup\setlength\skip@{#1}\hskip\skip@\endgroup}
 \EndIncludeInRelease
-\IncludeInRelease{2016/03/31}%
-                 {\@oval}{default units}%
-\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen
-  \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
-  \@ovvlinefalse \@ovhlinefalse
-  \@tfor\reserved at a :=#3\do{%
-    \csname @ov\reserved at a false\endcsname}%
-  \@ovxx #1\unitlength
-  \@ovyy #2\unitlength
-  \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx \@ovvlinetrue
-  \else \@ovyy \ifdim \@ovyy =\@ovxx \else \@ovhlinetrue
-   \fi\fi
-  \advance \@tempdimb -2\p@
-  \@getcirc \@tempdimb
-  \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa
-  \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@
-  \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@
-  \ifdim \@ovdx >\z@ \@ovhlinetrue \fi
-  \ifdim \@ovdy >\z@ \@ovvlinetrue \fi
-  \@circlefnt \setbox\@tempboxa
-  \hbox{\if at ovr \@ovvert32\kern -\@tempdima \fi
-  \if at ovl
-   \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx
-  \fi
-  \if at ovt \@ovhorz \kern -\@ovxx \fi
-  \if at ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro
-  \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@
-  \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}%
-  \endgroup}
-\EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\@oval}{default units}%
-\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen
-  \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
-  \@tfor\reserved at a :=#3\do
-                {\csname @ov\reserved at a false\endcsname}%
-  \@ovxx #1\unitlength
-  \@ovyy #2\unitlength
-  \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx\else \@ovyy \fi
-  \advance \@tempdimb -2\p@
-  \@getcirc \@tempdimb
-  \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa
-  \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@
-  \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@
-  \@circlefnt \setbox\@tempboxa
-  \hbox{\if at ovr \@ovvert32\kern -\@tempdima \fi
-  \if at ovl
-   \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx
-  \fi
-  \if at ovt \@ovhorz \kern -\@ovxx \fi
-  \if at ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro
-  \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@
-  \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}%
-  \endgroup}
-\EndIncludeInRelease
-\IncludeInRelease{2016/03/31}%
-                 {\@ovvert}{Avoid almost zero length leaders}%
-\def\@ovvert#1#2{\vbox to\@ovyy{%
-    \if at ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax
-      \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip
-    \else \kern \@ovri \kern \@ovdy \fi
-    \if at ovvline \leaders\vrule \@width \@wholewidth \fi
-    \vfil \nointerlineskip
-    \if at ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax
-      \hbox{\char \@tempcntb}%
-    \else \kern \@ovdy \kern \@ovro \fi}}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@ovvert}{Avoid almost zero length leaders}%
-\def\@ovvert#1#2{\vbox to\@ovyy{%
-    \if at ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax
-      \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip
-    \else \kern \@ovri \kern \@ovdy \fi
-    \leaders\vrule \@width \@wholewidth\vfil \nointerlineskip
-    \if at ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax
-      \hbox{\char \@tempcntb}%
-    \else \kern \@ovdy \kern \@ovro \fi}}
-\EndIncludeInRelease
-\IncludeInRelease{2016/03/31}%
-                 {\@ovhorz}{Avoid almost zero length leaders}%
-\def\@ovhorz{\hb at xt@\@ovxx{\kern \@ovro
-    \if at ovr \else \kern \@ovdx \fi
-    \if at ovhline \leaders \hrule \@height \@wholewidth \fi
-    \hfil
-    \if at ovl \else \kern \@ovdx \fi
-    \kern \@ovri}}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@ovhorz}{Avoid almost zero length leaders}%
-\def\@ovhorz{\hb at xt@\@ovxx{\kern \@ovro
-    \if at ovr \else \kern \@ovdx \fi
-    \leaders \hrule \@height \@wholewidth \hfil
-    \if at ovl \else \kern \@ovdx \fi
-    \kern \@ovri}}
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\@circle}{default units}%
-\def\@circle#1{%
-  \begingroup \boxmaxdepth \maxdimen
-   \@defaultunitsset\@tempdimb{#1}\unitlength
-   \ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb
-      \@ovro\ht\@tempboxa
-     \setbox\@tempboxa\hbox{\@circlefnt
-      \advance\@tempcnta\tw@ \char \@tempcnta
-      \advance\@tempcnta\m at ne \char \@tempcnta \kern -2\@tempdima
-      \advance\@tempcnta\tw@
-      \raise \@tempdima \hbox{\char\@tempcnta}\raise \@tempdima
-        \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@
-      \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}%
-   \else  \@circ\@tempdimb{96}\fi\endgroup}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@circle}{default units}%
-\def\@circle#1{%
-  \begingroup \boxmaxdepth \maxdimen \@tempdimb #1\unitlength
-   \ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb
-      \@ovro\ht\@tempboxa
-     \setbox\@tempboxa\hbox{\@circlefnt
-      \advance\@tempcnta\tw@ \char \@tempcnta
-      \advance\@tempcnta\m at ne \char \@tempcnta
-      \kern -2\@tempdima
-      \advance\@tempcnta\tw@
-      \raise \@tempdima \hbox{\char\@tempcnta}%
-      \raise \@tempdima
-        \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@
-      \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}%
-   \else  \@circ\@tempdimb{96}\fi\endgroup}
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\@dot}{default units}%
-\def\@dot#1{%
-  \@defaultunitsset\@tempdimb{#1}\unitlength
-  \@circ\@tempdimb{112}}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@dot}{default units}%
-\def\@dot#1{\@tempdimb #1\unitlength \@circ\@tempdimb{112}}
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\@bezier}{default units}%
-\def\@bezier#1(#2,#3)(#4,#5)(#6,#7){%
-  \ifnum #1=\z@
-      \@defaultunitsset\@ovxx{#4}\unitlength
-        \@defaultunitsset{\advance\@ovxx}{-#2}\unitlength
-        \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi
-      \@defaultunitsset\@ovdx{#6}\unitlength
-        \@defaultunitsset{\advance\@ovdx}{-#4}\unitlength
-        \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi
-        \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi
-      \@defaultunitsset\@ovyy{#5}\unitlength
-        \@defaultunitsset{\advance\@ovyy}{-#3}\unitlength
-        \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi
-      \@defaultunitsset\@ovdy{#7}\unitlength
-        \@defaultunitsset{\advance\@ovdy}{-#5}\unitlength
-        \ifdim \@ovdy<\z@  \@ovdy -\@ovdy \fi
-        \ifdim \@ovyy<\@ovdy \@ovyy  \@ovdy \fi
-      \@multicnt
-         \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi
-      \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx
-      \ifnum \qbeziermax<\@multicnt
-        \@multicnt\qbeziermax\relax
-      \fi
-  \else \@multicnt#1\relax \fi
-  \@tempcnta\@multicnt \advance\@tempcnta\@ne
-  \@defaultunitsset\@ovdx{#4}\unitlength
-  \@defaultunitsset{\advance\@ovdx}{-#2}\unitlength
-      \multiply\@ovdx \tw@
-  \@defaultunitsset\@ovxx{#6}\unitlength
-  \@defaultunitsset{\advance\@ovxx}{-#2}\unitlength
-      \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt
-  \@defaultunitsset\@ovdy{#5}\unitlength
-  \@defaultunitsset{\advance\@ovdy}{-#3}\unitlength
-       \multiply\@ovdy \tw@
-  \@defaultunitsset\@ovyy{#7}\unitlength
-  \@defaultunitsset{\advance\@ovyy}{-#3}\unitlength
-      \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt
-  \setbox\@tempboxa\hbox{%
-            \hskip -\@halfwidth
-            \vrule \@height\@halfwidth
-                   \@depth \@halfwidth
-                   \@width \@wholewidth}%
-   \put(#2,#3){%
-     \count@\z@
-     \@whilenum{\count@<\@tempcnta}\do
-        {\@xdim\count@\@ovxx
-           \advance\@xdim\@ovdx
-           \divide\@xdim\@multicnt
-           \multiply\@xdim\count@
-         \@ydim\count@\@ovyy
-            \advance\@ydim\@ovdy
-            \divide\@ydim\@multicnt
-            \multiply\@ydim\count@
-         \raise \@ydim
-            \hb at xt@\z@{\kern\@xdim
-                        \unhcopy\@tempboxa\hss}%
-         \advance\count@\@ne}}}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@bezier}{default units}%
-\def\@bezier#1(#2,#3)(#4,#5)(#6,#7){%
-  \ifnum #1=\z@
-      \@ovxx #4\unitlength
-        \advance\@ovxx -#2\unitlength
-        \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi
-      \@ovdx #6\unitlength
-        \advance\@ovdx -#4\unitlength
-        \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi
-        \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi
-      \@ovyy #5\unitlength
-        \advance\@ovyy -#3\unitlength
-        \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi
-      \@ovdy #7\unitlength
-        \advance\@ovdy -#5\unitlength
-        \ifdim \@ovdy<\z@  \@ovdy -\@ovdy \fi
-        \ifdim \@ovyy<\@ovdy \@ovyy  \@ovdy \fi
-      \@multicnt
-         \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi
-      \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx
-      \ifnum
-        \qbeziermax<\@multicnt \@multicnt\qbeziermax\relax
-      \fi
-  \else \@multicnt#1\relax \fi
-  \@tempcnta\@multicnt \advance\@tempcnta\@ne
-  \@ovdx #4\unitlength \advance\@ovdx -#2\unitlength
-      \multiply\@ovdx \tw@
-  \@ovxx #6\unitlength \advance\@ovxx -#2\unitlength
-      \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt
-  \@ovdy #5\unitlength \advance\@ovdy -#3\unitlength
-       \multiply\@ovdy \tw@
-  \@ovyy #7\unitlength \advance\@ovyy -#3\unitlength
-      \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt
-  \setbox\@tempboxa\hbox{%
-            \hskip -\@halfwidth
-            \vrule \@height\@halfwidth
-                   \@depth \@halfwidth
-                   \@width \@wholewidth}%
-   \put(#2,#3){%
-     \count@\z@
-     \@whilenum{\count@<\@tempcnta}\do
-        {\@xdim\count@\@ovxx
-           \advance\@xdim\@ovdx
-           \divide\@xdim\@multicnt
-           \multiply\@xdim\count@
-         \@ydim\count@\@ovyy
-            \advance\@ydim\@ovdy
-            \divide\@ydim\@multicnt
-            \multiply\@ydim\count@
-         \raise \@ydim
-            \hb at xt@\z@{\kern\@xdim
-                        \unhcopy\@tempboxa\hss}%
-         \advance\count@\@ne}}}
-\EndIncludeInRelease
-\IncludeInRelease{2019/10/01}%
-                 {\bezier}{Make commands robust}%
-\MakeRobust\bezier
-\MakeRobust\circle
-\MakeRobust\dashbox
-\MakeRobust\line
-\MakeRobust\linethickness
-\MakeRobust\multiput
-\MakeRobust\oval
-\MakeRobust\put
-\MakeRobust\qbezier
-\MakeRobust\shortstack
-\MakeRobust\thinlines
-\MakeRobust\vector
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\bezier}{Make commands robust}%
+                 {\@hspace}{Support calc with \hspace}%
 
-\kernel at make@fragile\bezier
-\kernel at make@fragile\circle
-\kernel at make@fragile\dashbox
-\kernel at make@fragile\line
-\kernel at make@fragile\linethickness
-\kernel at make@fragile\multiput
-\kernel at make@fragile\oval
-\kernel at make@fragile\put
-\kernel at make@fragile\qbezier
-\kernel at make@fragile\shortstack
-\kernel at make@fragile\thinlines
-\kernel at make@fragile\vector
 
+\def\@hspace#1{\hskip #1\relax}
 \EndIncludeInRelease
-%%% From File: ltthm.dtx
-%%% From File: ltsect.dtx
-\IncludeInRelease{2019/10/01}%
-                 {\title}{Make commands robust}%
-\DeclareRobustCommand\title[1]{\gdef\@title{#1}}
-\DeclareRobustCommand*\author[1]{\gdef\@author{#1}}
-\DeclareRobustCommand*\date[1]{\gdef\@date{#1}}
-\DeclareRobustCommand\thanks[1]{\footnotemark
-    \protected at xdef\@thanks{\@thanks
-        \protect\footnotetext[\the\c at footnote]{#1}}%
-}
-\DeclareRobustCommand\and{%   % \begin{tabular}
-  \end{tabular}%
-  \hskip 1em \@plus.17fil%
-  \begin{tabular}[t]{c}}%     % \end{tabular}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\title}{Make commands robust}%
-
-\kernel at make@fragile\title
-\kernel at make@fragile\author
-\kernel at make@fragile\date
-\kernel at make@fragile\thanks
-\kernel at make@fragile\and
-
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\addcontentsline}{fourth argument}%
-\def\addcontentsline#1#2#3{%
-  \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}{}%
-                     \protected at file@percent}}
-\EndIncludeInRelease
 \IncludeInRelease{2018/12/01}%
-                 {\addcontentsline}{Mask line endings}%
- \def\addcontentsline#1#2#3{%
-  \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}%
-            \protected at file@percent}}
+                 {\thinspace}{Start LR-mode}%
+\DeclareRobustCommand\enspace{\leavevmode at ifvmode\kern.5em }
+\protected\def\leavevmode at ifvmode{\ifvmode\expandafter\indent\fi}
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\addcontentsline}{Mask line endings}%
-\def\addcontentsline#1#2#3{%
-  \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}}}
+                 {\thinspace}{Start LR-mode}%
+\def\thinspace{\kern .16667em }
+\def\negthinspace{\kern-.16667em }
+\def\enspace{\kern.5em }
+\let\leavevmode at ifvmode\@undefined
 \EndIncludeInRelease
-\IncludeInRelease{2018/12/01}%
-                 {\@dottedtocline}{Prevent protrusion}%
-\def\@dottedtocline#1#2#3#4#5{%
-  \ifnum #1>\c at tocdepth \else
-    \vskip \z@ \@plus.2\p@
-    {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
-     \parindent #2\relax\@afterindenttrue
-     \interlinepenalty\@M
-     \leavevmode
-     \@tempdima #3\relax
-     \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
-     {#4}\nobreak
-     \leaders\hbox{$\m at th
-        \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
-        mu$}\hfill
-     \nobreak
-     \hb at xt@\@pnumwidth{\hfil\normalfont \normalcolor #5%
-                        \kern-\p@\kern\p@}%
-     \par}%
-  \fi}
-
-\DeclareRobustCommand\noprotrusion{\leavevmode\kern-\p@\kern\p@}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@dottedtocline}{Prevent protrusion}%
-\def\@dottedtocline#1#2#3#4#5{%
-  \ifnum #1>\c at tocdepth \else
-    \vskip \z@ \@plus.2\p@
-    {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
-     \parindent #2\relax\@afterindenttrue
-     \interlinepenalty\@M
-     \leavevmode
-     \@tempdima #3\relax
-     \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
-     {#4}\nobreak
-     \leaders\hbox{$\m at th
-        \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
-        mu$}\hfill
-     \nobreak
-     \hb at xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
-     \par}%
-  \fi}
-
-\let\noprotrusion\@undefined
-\EndIncludeInRelease
+%%% From File: ltlogos.dtx
 %%% From File: ltfiles.dtx
 \IncludeInRelease{2020/10/01}%
   {\document}{Added hook to load l3backend code}%
@@ -3778,3303 +3798,1111 @@
                  {\setlength}{Using \setlength with \dimen0}%
 \def\setlength#1#2{#1#2\relax}
 \EndIncludeInRelease
-%%% From File: ltfloat.dtx
-\IncludeInRelease{2015/01/01}%
-                 {\@xfloat}{Check float options}%
-\def\@xfloat #1[#2]{%
-  \@nodocument
-  \def \@captype {#1}%
-   \def \@fps {#2}%
-   \@onelevel at sanitize \@fps
-   \def \reserved at b {!}%
-   \ifx \reserved at b \@fps
-     \@fpsadddefault
+%%% From File: ltfssbas.dtx
+%% Copyright (C) 1989-2002 Frank Mittelbach and Rainer Sch\"opf
+\IncludeInRelease{2020/02/02}%
+                 {\DeclareFontShape@}{Maybe drop one m}%
+\def\DeclareFontShape@#1#2#3#4#5#6{%
+   \expandafter\ifx\csname #1+#2\endcsname\relax
+     \@latex at error{Font family `#1+#2' unknown}\@eha
    \else
-     \ifx \@fps \@empty
-       \@fpsadddefault
+     \edef\reserved at a{#3}%
+     \series at maybe@drop at one@m\reserved at a\reserved at b
+     \ifx\reserved at a\reserved at b\else
+       \@latex at warning{Font shape declaration has incorrect series
+         value `#3'.\MessageBreak It should not contain an `m'!
+         Please correct it.\MessageBreak Found}%
      \fi
+     \expandafter
+       \xdef\csname#1/#2/\reserved at b/#4\endcsname
+                 {\expandafter\noexpand\csname #5\endcsname}%
+     \def\reserved at a{#6}%
+     \global
+     \expandafter\let\csname#5\expandafter\endcsname
+        \ifx\reserved at a\@empty
+          \@empty
+        \else
+          \reserved at a
+        \fi
    \fi
-   \ifhmode
-     \@bsphack
-     \@floatpenalty -\@Mii
-   \else
-     \@floatpenalty-\@Miii
-   \fi
-  \ifinner
-     \@parmoderr\@floatpenalty\z@
-  \else
-    \@next\@currbox\@freelist
-      {%
-       \@tempcnta \sixt@@n
-       \expandafter \@tfor \expandafter \reserved at a
-         \expandafter :\expandafter =\@fps
-         \do
-          {%
-           \if \reserved at a h%
-             \ifodd \@tempcnta
-             \else
-               \advance \@tempcnta \@ne
-             \fi
-           \else\if \reserved at a t%
-             \@setfpsbit \tw@
-           \else\if \reserved at a b%
-             \@setfpsbit 4%
-           \else\if \reserved at a p%
-             \@setfpsbit 8%
-           \else\if \reserved at a !%
-             \ifnum \@tempcnta>15
-               \advance\@tempcnta -\sixt@@n\relax
-             \fi
-           \else
-             \@latex at error{Unknown float option `\reserved at a'}%
-             {Option `\reserved at a' ignored and `p' used.}%
-             \@setfpsbit 8%
-           \fi\fi\fi\fi\fi
-           }%
-       \@tempcntb \csname ftype@\@captype \endcsname
-       \multiply \@tempcntb \@xxxii
-       \advance \@tempcnta \@tempcntb
-       \global \count\@currbox \@tempcnta
-       }%
-    \@fltovf
-  \fi
-  \global \setbox\@currbox
-    \color at vbox
-      \normalcolor
-      \vbox \bgroup
-        \hsize\columnwidth
-        \@parboxrestore
-        \@floatboxreset
-}%
+  }
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\@xfloat}{Check float options}%
-\def\@xfloat #1[#2]{%
-  \@nodocument
-  \def \@captype {#1}%
-   \def \@fps {#2}%
-   \@onelevel at sanitize \@fps
-   \def \reserved at b {!}%
-   \ifx \reserved at b \@fps
-     \@fpsadddefault
+                 {\DeclareFontShape@}{Maybe drop one m}%
+
+\def\DeclareFontShape@#1#2#3#4#5#6{%
+   \expandafter\ifx\csname #1+#2\endcsname\relax
+     \@latex at error{Font family `#1+#2' unknown}\@eha
    \else
-     \ifx \@fps \@empty
-       \@fpsadddefault
-     \fi
+     \expandafter
+       \xdef\csname#1/#2/#3/#4\endcsname{\expandafter\noexpand
+                                   \csname #5\endcsname}%
+     \def\reserved at a{#6}%
+     \global
+     \expandafter\let\csname#5\expandafter\endcsname
+        \ifx\reserved at a\@empty
+          \@empty
+        \else
+          \reserved at a
+        \fi
    \fi
-   \ifhmode
-     \@bsphack
-     \@floatpenalty -\@Mii
-   \else
-     \@floatpenalty-\@Miii
-   \fi
-  \ifinner
-     \@parmoderr\@floatpenalty\z@
-  \else
-    \@next\@currbox\@freelist
-      {%
-       \@tempcnta \sixt@@n
-       \expandafter \@tfor \expandafter \reserved at a
-         \expandafter :\expandafter =\@fps
-         \do
-          {%
-           \if \reserved at a h%
-             \ifodd \@tempcnta
-             \else
-               \advance \@tempcnta \@ne
-             \fi
-           \fi
-           \if \reserved at a t%
-             \@setfpsbit \tw@
-           \fi
-           \if \reserved at a b%
-             \@setfpsbit 4%
-           \fi
-           \if \reserved at a p%
-             \@setfpsbit 8%
-           \fi
-           \if \reserved at a !%
-             \ifnum \@tempcnta>15
-               \advance\@tempcnta -\sixt@@n\relax
-             \fi
-           \fi
-           }%
-       \@tempcntb \csname ftype@\@captype \endcsname
-       \multiply \@tempcntb \@xxxii
-       \advance \@tempcnta \@tempcntb
-       \global \count\@currbox \@tempcnta
-       }%
-    \@fltovf
-  \fi
-  \global \setbox\@currbox
-    \color at vbox
-      \normalcolor
-      \vbox \bgroup
-        \hsize\columnwidth
-        \@parboxrestore
-        \@floatboxreset
-}%
+  }
 \EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\end at dblfloat}{float order in 2-column}%
-\def\end at dblfloat{%
-  \if at twocolumn
-    \@endfloatbox
-    \ifnum\@floatpenalty <\z@
-      \@largefloatcheck
-      \global\dp\@currbox1sp %
-      \@cons\@currlist\@currbox
-      \ifnum\@floatpenalty <-\@Mii
-        \penalty -\@Miv
-        \@tempdima\prevdepth
-        \vbox{}%
-        \prevdepth\@tempdima
-        \penalty\@floatpenalty
-      \else
-        \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@Esphack
-      \fi
-    \fi
+\IncludeInRelease{2015/01/01}{\@DeclareMathSizes}%
+                 {Arbitrary units in \DeclareMathSizes}%
+\def\@DeclareMathSizes #1#2#3#4#5{%
+  \@defaultunits\dimen@ #2pt\relax\@nnil
+  \if $#3$%
+    \expandafter\let\csname S@\strip at pt\dimen@\endcsname\math at fontsfalse
   \else
-    \end at float
+    \@defaultunits\dimen at ii #3pt\relax\@nnil
+    \@defaultunits\@tempdima #4pt\relax\@nnil
+    \@defaultunits\@tempdimb #5pt\relax\@nnil
+    \toks@{#1}%
+    \expandafter\xdef\csname S@\strip at pt\dimen@\endcsname{%
+      \gdef\noexpand\tf at size{\strip at pt\dimen at ii}%
+      \gdef\noexpand\sf at size{\strip at pt\@tempdima}%
+      \gdef\noexpand\ssf at size{\strip at pt\@tempdimb}%
+      \the\toks@
+    }%
   \fi
 }%
 \EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\end at dblfloat}{float order in 2-column}%
-\def\end at dblfloat{%
-\if at twocolumn
-  \@endfloatbox
-  \ifnum\@floatpenalty <\z@
-    \@largefloatcheck
-    \@cons\@dbldeferlist\@currbox
-  \fi
-    \ifnum \@floatpenalty =-\@Mii \@Esphack\fi
-\else
-  \end at float
-\fi
-}%
+\IncludeInRelease{0000/00/00}{\@DeclareMathSizes}%
+                 {Arbitrary units in \DeclareMathSizes}%
+\def\@DeclareMathSizes#1#2#3#4#5{%
+    \@defaultunits\dimen@#2pt\relax\@nnil
+    \if$#3$%
+      \expandafter \let
+        \csname S@\strip at pt\dimen@\endcsname
+        \math at fontsfalse
+    \else
+      \expandafter \gdef
+      \csname S@\strip at pt\dimen@\endcsname
+            {\gdef\tf at size{#3}\gdef\sf at size{#4}%
+                             \gdef\ssf at size{#5}%
+             #1%
+                             }%
+    \fi}%
 \EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-          {\@dblfloatplacement}{float order in 2-column}%
-\def\@dblfloatplacement{\global\@dbltopnum\c at dbltopnumber
-   \global\@dbltoproom \dbltopfraction\@colht
-   \@textmin \@colht
-   \advance \@textmin -\@dbltoproom
-   \@fpmin \dblfloatpagefraction\textheight
-   \@fptop \@dblfptop
-   \@fpsep \@dblfpsep
-   \@fpbot \@dblfpbot
-   \def\f at depth{1sp}}%
+\IncludeInRelease{2020/02/02}%
+                 {\usefont}{Drop m in usefont}%
+\DeclareRobustCommand\usefont[4]{\fontencoding{#1}%
+   \edef\f at family{#2}%
+   \set at target@series{#3}%
+   \edef\f at shape{#4}\selectfont
+   \ignorespaces}
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-          {\@dblfloatplacement}{float order in 2-column}%
-\def \@dblfloatplacement {%
-  \global \@dbltopnum \c at dbltopnumber
-  \global \@dbltoproom \dbltopfraction\@colht
-  \@textmin \@colht
-  \advance \@textmin -\@dbltoproom
-  \@fpmin \dblfloatpagefraction\textheight
-  \@fptop \@dblfptop
-  \@fpsep \@dblfpsep
-  \@fpbot \@dblfpbot
-}%
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\@textsuperscript}{superscript baseline}%
-\def\@textsuperscript#1{%
-  {\m at th\ensuremath{^{\mbox{\fontsize\sf at size\sf at size#1}}}}}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@textsuperscript}{superscript baseline}%
+                 {\usefont}{Drop m in usefont}%
 
-\def\@textsuperscript#1{%
-  {\m at th\ensuremath{^{\mbox{\fontsize\sf at size\z@#1}}}}}
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\textsubscript}{\textsubscript}%
-\DeclareRobustCommand*\textsubscript[1]{%
-  \@textsubscript{\selectfont#1}}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\textsubscript}{\textsubscript}%
-\let\textsubscript\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\@textsubscript}{subscript baseline}%
-\def\@textsubscript#1{%
-  {\m at th\ensuremath{_{\mbox{\fontsize\sf at size\sf at size#1}}}}}
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\@textsubscript}{subscript baseline}%
+\DeclareRobustCommand\usefont[4]{\fontencoding{#1}%
+   \edef\f at family{#2}%
+   \edef\f at series{#3}%
+   \edef\f at shape{#4}\selectfont
+   \ignorespaces}
 
-\def\@textsubscript#1{%
-  {\m at th\ensuremath{_{\mbox{\fontsize\sf at size\z@#1}}}}}
 \EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@textsubscript}{subscript baseline}%
-\let\@textsubscript\@undefined
-\EndIncludeInRelease
-%%% From File: ltidxglo.dtx
-%%% From File: ltbibl.dtx
-%%% From File: ltpage.dtx
-\IncludeInRelease{2019/10/01}%
-                 {\markboth}{Make commands robust}%
-\DeclareRobustCommand*\markboth[2]{%
+\IncludeInRelease{2020/02/02}%
+                 {\LoadFontDefinitionFile}{Loading .fd files}%
+\def\LoadFontDefinitionFile#1#2{%
   \begingroup
-    \let\label\relax \let\index\relax \let\glossary\relax
-    \unrestored at protected@xdef\@themark {{#1}{#2}}%
-    \@temptokena \expandafter{\@themark}%
-    \mark{\the\@temptokena}%
+    \edef\f at encoding{#1}%
+    \edef\f at family{#2}%
+    \try at load@fontshape
   \endgroup
-  \if at nobreak\ifvmode\nobreak\fi\fi}
-\DeclareRobustCommand*\markright[1]{%
-  \begingroup
-    \let\label\relax \let\index\relax \let\glossary\relax
-    \expandafter\@markright\@themark {#1}%
-    \@temptokena \expandafter{\@themark}%
-    \mark{\the\@temptokena}%
-  \endgroup
-  \if at nobreak\ifvmode\nobreak\fi\fi}
+}
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\markboth}{Make commands robust}%
+                 {\LoadFontDefinitionFile}{Loading .fd files}%
 
-\kernel at make@fragile\markboth
-\kernel at make@fragile\markright
-
+\let\LoadFontDefinitionFile\@undefined
 \EndIncludeInRelease
-%%
-%% File: ltfilehook.dtx (C) Copyright 2020 Frank Mittelbach,
-%%                                         Phelype Oleinik & LaTeX Team
-%%% From File: ltfilehook.dtx
-\providecommand\ltfilehookversion{v1.0c}
-\providecommand\ltfilehookdate{2020/10/18}
-\IncludeInRelease{2020/10/01}%
-                 {\CurrentFile}{Hook management file}%
-\ExplSyntaxOn
-\tl_new:N \CurrentFile
-\tl_new:N \CurrentFilePath
-\tl_new:N \CurrentFileUsed
-\tl_new:N \CurrentFilePathUsed
-\ExplSyntaxOff
+\IncludeInRelease{2020/02/02}%
+       {\DeclareFontFamilySubstitution}{Provide family substitution}%
+\begingroup
+\nfss at catcodes
+\gdef\DeclareFontFamilySubstitution#1#2#3{%
+   \LoadFontDefinitionFile{#1}{#2}%
+   \LoadFontDefinitionFile{#1}{#3}%
+   \DeclareFontShape{#1}{#2}{m}{it}{<->ssub * #3/m/it}{}%
+   \DeclareFontShape{#1}{#2}{m}{n}{<->ssub * #3/m/n}{}%
+   \DeclareFontShape{#1}{#2}{m}{sc}{<->ssub * #3/m/sc}{}%
+   \DeclareFontShape{#1}{#2}{m}{sl}{<->ssub * #3/m/sl}{}%
+   \DeclareFontShape{#1}{#2}{m}{sw}{<->ssub * #3/m/sw}{}%
+   \DeclareFontShape{#1}{#2}{m}{scit}{<->ssub * #3/m/scit}{}%
+   \DeclareFontShape{#1}{#2}{m}{scsl}{<->ssub * #3/m/scsl}{}%
+   \DeclareFontShape{#1}{#2}{b}{it}{<->ssub * #3/b/it}{}%
+   \DeclareFontShape{#1}{#2}{b}{n}{<->ssub * #3/b/n}{}%
+   \DeclareFontShape{#1}{#2}{b}{scit}{<->ssub * #3/b/scit}{}%
+   \DeclareFontShape{#1}{#2}{b}{scsl}{<->ssub * #3/b/scsl}{}%
+   \DeclareFontShape{#1}{#2}{b}{sc}{<->ssub * #3/b/sc}{}%
+   \DeclareFontShape{#1}{#2}{b}{sl}{<->ssub * #3/b/sl}{}%
+   \DeclareFontShape{#1}{#2}{b}{sw}{<->ssub * #3/b/sw}{}%
+   \DeclareFontShape{#1}{#2}{bx}{it}{<->ssub * #3/bx/it}{}%
+   \DeclareFontShape{#1}{#2}{bx}{n}{<->ssub * #3/bx/n}{}%
+   \DeclareFontShape{#1}{#2}{bx}{scit}{<->ssub * #3/bx/scit}{}%
+   \DeclareFontShape{#1}{#2}{bx}{scsl}{<->ssub * #3/bx/scsl}{}%
+   \DeclareFontShape{#1}{#2}{bx}{sc}{<->ssub * #3/bx/sc}{}%
+   \DeclareFontShape{#1}{#2}{bx}{sl}{<->ssub * #3/bx/sl}{}%
+   \DeclareFontShape{#1}{#2}{bx}{sw}{<->ssub * #3/bx/sw}{}%
+}
+\endgroup
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\CurrentFile}{Hook management file}%
+      {\DeclareFontFamilySubstitution}{Provide family substitution}%
 
-\let \CurrentFile         \@undefined
-\let \CurrentFilePath     \@undefined
-\let \CurrentFileUsed     \@undefined
-\let \CurrentFilePathUsed \@undefined
-
+\let\DeclareFontFamilySubstitution\@undefined
 \EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-          {\__filehook_file_parse_full_name:nN}{File helpers}%
-\ExplSyntaxOn
-\cs_new:Npn \__filehook_file_parse_full_name:nN #1
-  {
-    \exp_args:Nf \file_parse_full_name_apply:nN
-      {
-        \exp_args:Nf \__filehook_full_name:nn
-          { \file_full_name:n {#1} } {#1}
-      }
-  }
-\cs_new:Npn \__filehook_full_name:nn #1 #2
-  {
-    \tl_if_empty:nTF {#1}
-      { \tl_trim_spaces:n {#2} }
-      { \tl_trim_spaces:n {#1} }
-  }
-\cs_new:Npn \__filehook_if_no_extension:nTF #1
-  {
-    \exp_args:Ne \tl_if_empty:nTF
-      { \file_parse_full_name_apply:nN {#1} \use_iii:nnn }
-  }
-\cs_new_protected:Npn \__filehook_drop_extension:N #1
-  {
-    \tl_gset:Nx #1
-      {
-        \exp_args:NV \__filehook_file_parse_full_name:nN #1
-          \__filehook_drop_extension_aux:nnn
-      }
-  }
-\cs_new:Npn \__filehook_drop_extension_aux:nnn #1 #2 #3
-   { \tl_if_empty:nF {#1} { #1 / } #2 }
-\tl_new:N \l__filehook_internal_tl
-\seq_new:N \g__filehook_input_file_seq
-\cs_new_protected:Npn \__filehook_file_push:
-  {
-    \seq_gpush:Nx \g__filehook_input_file_seq
-      {
-        { \CurrentFilePathUsed } { \CurrentFileUsed }
-        { \CurrentFilePath     } { \CurrentFile     }
-      }
-  }
-\cs_new_protected:Npn \__filehook_file_pop:
-  {
-    \seq_gpop:NNTF \g__filehook_input_file_seq \l__filehook_internal_tl
-      { \exp_after:wN \__filehook_file_pop_assign:nnnn \l__filehook_internal_tl }
-      {
-        \msg_error:nnn { hooks } { should-not-happen }
-          { Tried~to~pop~from~an~empty~file~name~stack. }
-      }
-  }
-\cs_new_protected:Npn \__filehook_file_pop_assign:nnnn #1 #2 #3 #4
-  {
-    \tl_set:Nn \CurrentFilePathUsed {#1}
-    \tl_set:Nn \CurrentFileUsed {#2}
-    \tl_set:Nn \CurrentFilePath {#3}
-    \tl_set:Nn \CurrentFile {#4}
-  }
-\ExplSyntaxOff
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-          {\InputIfFileExists}{Hook management (files)}%
-\let\InputIfFileExists\@undefined
-\DeclareRobustCommand \InputIfFileExists[2]{%
-  \IfFileExists{#1}%
-    {%
-     \@expl@@@filehook at file@push@@
-     \@filehook at set@CurrentFile
-      \edef\reserved at a{\@filef at und
-        \@expl@@@filehook at file@pop at assign@@nnnn
-          {\CurrentFilePathUsed}%
-          {\CurrentFileUsed}%
-          {\CurrentFilePath}%
-          {\CurrentFile}}%
-      \expandafter\@swaptwoargs\expandafter
-        {\reserved at a}%
-        {%
-          #2%
-          \@addtofilelist{#1}%
-          \UseHook{file/before}%
-          \UseHook{file/before/\CurrentFile}%
-          \@@input
-        }%
-      \UseHook{file/after/\CurrentFile}%
-      \UseHook{file/after}%
-      \@expl@@@filehook at file@pop@@
-    }%
+\IncludeInRelease{2019/10/01}%
+                 {\DeclareErrorFont}{No side effects please}%
+\def\DeclareErrorFont#1#2#3#4#5{%
+      \xdef\error at fontshape{%
+          \noexpand\expandafter\noexpand\split at name\noexpand\string
+          \expandafter\noexpand\csname#1/#2/#3/#4/#5\endcsname
+          \noexpand\@nil}%
+      \gdef\default at family{#2}%
+      \gdef\default at series{#3}%
+      \gdef\default at shape{#4}%
 }
 \EndIncludeInRelease
-\IncludeInRelease{2019/10/01}%
-          {\InputIfFileExists}{Hook management (files)}%
-
-\DeclareRobustCommand \InputIfFileExists[2]{%
-  \IfFileExists{#1}%
-    {%
-  \expandafter\@swaptwoargs\expandafter
-      {\@filef at und}{#2\@addtofilelist{#1}\@@input}}}
-\EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-          {\InputIfFileExists}{Hook management (files)}%
-\long\def \InputIfFileExists#1#2{%
-  \IfFileExists{#1}%
-    {#2\@addtofilelist{#1}\@@input \@filef at und}}
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-          {\__filehook_subst_add:nn}{Declaring file substitution}%
-\ExplSyntaxOn
-\cs_new_protected:Npn \__filehook_subst_add:nn #1 #2
-  {
-    \group_begin:
-      \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } }
-      \int_set:Nn \tex_escapechar:D { -1 }
-      \cs_gset:cpx { @file-subst@ \__filehook_subst_file_normalize:n {#1} }
-        { \__filehook_subst_file_normalize:n {#2} }
-    \group_end:
-  }
-\cs_new_protected:Npn \__filehook_subst_remove:n #1
-  {
-    \group_begin:
-      \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } }
-      \int_set:Nn \tex_escapechar:D { -1 }
-      \cs_undefine:c { @file-subst@ \__filehook_subst_file_normalize:n {#1} }
-    \group_end:
-  }
-\cs_new:Npn \__filehook_subst_file_normalize:n #1
-  {
-    \exp_after:wN \__filehook_subst_empty_name_chk:NN
-      \cs:w \exp_after:wN \cs_end:
-        \cs:w \__filehook_file_parse_full_name:nN {#1} \use_ii_iii:nnn \cs_end:
-  }
-\cs_new:Npn \__filehook_subst_empty_name_chk:NN #1 #2
-  { \if_meaning:w #1 #2 .tex \else: \token_to_str:N #2 \fi: }
-\cs_gset:Npn \use_ii_iii:nnn #1 #2 #3 {#2 #3}
-\ExplSyntaxOff
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-          {\declare at file@substitution}{File substitution}%
-\ExplSyntaxOn
-\cs_new_eq:NN \declare at file@substitution   \__filehook_subst_add:nn
-\cs_new_eq:NN \undeclare at file@substitution \__filehook_subst_remove:n
-\ExplSyntaxOff
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-          {\declare at file@substitution}{File substitution}%
+                 {\DeclareErrorFont}{No side effects please}%
 
-\let \declare at file@substitution   \@undefined
-\let \undeclare at file@substitution \@undefined
-
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-          {\set at curr@file}{Setting current file name}%
-\def\set at curr@file#1{%
-  \begingroup
-    \escapechar\m at ne
-    \expandafter\def\csname\expandafter\endcsname
-      \expandafter{\csname\endcsname}%
-    \@expl@@@filehook at if@no at extension@@nTF{#1}%
-      {\@tempswatrue}{\@tempswafalse}%
-    \@kernel at make@file at csname\@curr at file
-      \@expl@@@filehook at resolve@file at subst@@w {#1}%
-    \@expl@@@filehook at if@file at replaced@@TF
-      {\@kernel at make@file at csname\@curr at file@reqd
-         \@expl@@@filehook at normalize@file at name@@w{#1}%
-       \if at tempswa \@expl@@@filehook at drop@extension@@N\@curr at file@reqd \fi}%
-      {\if at tempswa \@expl@@@filehook at drop@extension@@N\@curr at file \fi
-       \global\let\@curr at file@reqd\@curr at file}%
-  \endgroup}
-\EndIncludeInRelease
-\IncludeInRelease{2019/10/01}%
-          {\set at curr@file}{Setting current file name}%
-\def\set at curr@file#1{%
-  \begingroup
-    \escapechar\m at ne
-    \xdef\@curr at file{%
-      \expandafter\expandafter\expandafter\unquote at name
-      \expandafter\expandafter\expandafter{%
-      \expandafter\string
-        \csname\@firstofone#1\@empty\endcsname}}%
-  \endgroup
+\def\DeclareErrorFont#1#2#3#4#5{%
+      \xdef\error at fontshape{%
+          \noexpand\expandafter\noexpand\split at name\noexpand\string
+          \expandafter\noexpand\csname#1/#2/#3/#4/#5\endcsname
+          \noexpand\@nil}%
+      \gdef\default at family{#2}%
+      \gdef\default at series{#3}%
+      \gdef\default at shape{#4}%
+      \global\let\f at family\default at family
+      \global\let\f at series\default at series
+      \global\let\f at shape\default at shape
+      \gdef\f at size{#5}%
+      \gdef\f at baselineskip{#5pt}%
 }
 \EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-          {\set at curr@file}{Setting current file name}%
-\let\set at curr@file\@undefined
+\IncludeInRelease{2015/01/01}{\wrong at fontshape}%
+                 {Font substitution in preamble}%
+\def\wrong at fontshape{%
+    \csname D@\f at encoding\endcsname   % install defaults if in math
+    \edef\reserved at a{\csname\curr at fontshape\endcsname}%
+  \ifx\last at fontshape\reserved at a
+     \errmessage{Corrupted NFSS tables}%
+     \error at fontshape
+  \else
+    \let\f at shape\default at shape
+    \expandafter\ifx\csname\curr at fontshape\endcsname\relax
+       \let\f at series\default at series
+        \expandafter
+          \ifx\csname\curr at fontshape\endcsname\relax
+           \let\f at family\default at family
+           \begingroup
+              \try at load@fontshape
+           \endgroup
+        \fi \fi
+  \fi
+     \@font at warning{Font shape `\expandafter\string\reserved at a'
+                     \expandafter\@gobble\string\@undefined\MessageBreak
+                   using `\curr at fontshape' instead\@wrong at font@char}%
+    \global\let\last at fontshape\reserved at a
+    \gdef\@defaultsubs{%
+      \@font at warning{Some font shapes were not available, defaults
+                      substituted.\@gobbletwo}}%
+    \global\expandafter\expandafter\expandafter\let
+       \expandafter\reserved at a
+           \csname\curr at fontshape\endcsname
+    \xdef\font at name{%
+      \csname\curr at fontshape/\f at size\endcsname}%
+    \pickup at font}
 \EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-          {\@kernel at make@file at csname}{Make file csname}%
-\def\@kernel at make@file at csname#1#2#3{%
-  \xdef#1{\expandafter\@set at curr@file at aux
-    \csname\expandafter#2\@firstofone#3\@nil\endcsname}}
-\def\@set at curr@file at aux#1{%
-  \expandafter\ifx\csname\endcsname#1%
-    .tex\else\string#1\fi}
-\def\@filehook at set@CurrentFile{%
-  \@expl@@@filehook at set@curr at file@@nNN{\@curr at file}%
-    \CurrentFileUsed\CurrentFilePathUsed
-  \ifx\@curr at file@reqd\@curr at file
-    \let\CurrentFile\CurrentFileUsed
-    \let\CurrentFilePath\CurrentFilePathUsed
+\IncludeInRelease{0000/00/00}{\wrong at fontshape}%
+                 {Font substitution in preamble}%
+\def\wrong at fontshape{%
+    \csname D@\f at encoding\endcsname
+    \edef\reserved at a{\csname\curr at fontshape\endcsname}%
+  \ifx\last at fontshape\reserved at a
+     \errmessage{Corrupted NFSS tables}%
+     \error at fontshape
   \else
-    \@expl@@@filehook at set@curr at file@@nNN{\@curr at file@reqd}%
-      \CurrentFile\CurrentFilePath
-  \fi}
+    \let\f at shape\default at shape
+    \expandafter\ifx\csname\curr at fontshape\endcsname\relax
+       \let\f at series\default at series
+        \expandafter
+          \ifx\csname\curr at fontshape\endcsname\relax
+           \let\f at family\default at family
+        \fi \fi
+  \fi
+     \@font at warning{Font shape
+            `\expandafter\string\reserved at a'
+            \expandafter\@gobble\string\@undefined
+            \MessageBreak
+            using `\curr at fontshape' instead\@wrong at font@char}%
+    \global\let\last at fontshape\reserved at a
+    \gdef\@defaultsubs{%
+      \@font at warning{Some font shapes were not available,
+                       defaults substituted.\@gobbletwo}}%
+    \global\expandafter\expandafter\expandafter\let
+       \expandafter\reserved at a
+           \csname\curr at fontshape\endcsname
+    \xdef\font at name{%
+      \csname\curr at fontshape/\f at size\endcsname}%
+    \pickup at font}
 \EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-          {@@_set_curr_file:nNN}{Set curr file}%
-\ExplSyntaxOn
-\cs_new_protected:Npn \__filehook_set_curr_file:nNN #1
-  {
-    \exp_args:Nf \__filehook_file_parse_full_name:nN {#1}
-      \__filehook_set_curr_file_assign:nnnNN
-  }
-\cs_new_protected:Npn \__filehook_set_curr_file_assign:nnnNN #1 #2 #3 #4 #5
-  {
-    \str_set:Nn #5 {#1}
-    \str_set:Nn #4 {#2#3}
-  }
-\ExplSyntaxOff
+\IncludeInRelease{2017/01/01}{\showhyphens}%
+                 {XeTeX support for \showhyphens}%
+\ifx\XeTeXcharclass\@undefined
+\DeclareRobustCommand\showhyphens[1]{%
+  \setbox0\vbox{%
+    \color at begingroup
+    \everypar{}%
+    \parfillskip\z at skip\hsize\maxdimen
+    \normalfont
+    \pretolerance\m at ne\tolerance\m at ne\hbadness\z@\showboxdepth\z@\ #1%
+    \color at endgroup}}
+\else
+\DeclareRobustCommand\showhyphens[1]{%
+  \setbox0\vbox{%
+    \usefont{TU}{lmr}{m}{n}%
+    \hsize 1sp %
+    \hbadness\@M
+    \hfuzz\maxdimen
+    \tracingonline\z@
+    \everypar={}%
+    \leftskip\z at skip
+    \rightskip\z at skip
+    \parfillskip\z at skip
+    \hyphenpenalty=-\@M
+    \pretolerance\m at ne
+    \interlinepenalty\z@
+    \clubpenalty\z@
+    \widowpenalty\z@
+    \brokenpenalty1127 %
+    \setbox\z@\hbox{}%
+    \noindent
+    \hskip\z at skip
+    #1%
+    \par
+     \loop
+     \@tempswafalse
+     \ifnum\lastnodetype=11\unskip\@tempswatrue\fi
+     \ifnum\lastnodetype=12\unkern\@tempswatrue\fi
+     \ifnum\lastnodetype=13 %
+      \count@\lastpenalty
+      \unpenalty\@tempswatrue
+    \fi
+    \ifnum\lastnodetype=\@ne
+     \setbox\tw@\lastbox\@tempswatrue
+     \setbox0\hbox{\unhbox\tw@\unskip\unskip\unpenalty
+                   \ifnum\count@=1127 \else\ \fi
+                   \unhbox0}%
+     \count@\z@
+    \fi
+    \if at tempswa
+    \repeat
+   \hbadness\z@
+   \hsize\maxdimen
+   \showboxdepth\z@
+   \tolerance\m at ne
+   \hyphenpenalty\z@
+   \noindent\unhbox\z@
+}}
+\fi
 \EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-          {\__filehook_resolve_file_subst:w}{Replace files detect loops}%
-\ExplSyntaxOn
-\cs_new:Npn \__filehook_resolve_file_subst:w #1 \@nil
-  { \__filehook_file_parse_full_name:nN {#1} \__filehook_file_subst_begin:nnn }
-\cs_new:Npn \__filehook_normalize_file_name:w #1 \@nil
-  { \__filehook_file_parse_full_name:nN {#1} \__filehook_file_name_compose:nnn }
-\cs_new:Npn \__filehook_file_name_compose:nnn #1 #2 #3
-  { \tl_if_empty:nF {#1} { #1 / } #2#3 }
-\flag_new:n { __filehook_file_replaced }
-\cs_new:Npn \__filehook_if_file_replaced:TF #1 #2
-   { \flag_if_raised:nTF { __filehook_file_replaced } {#1} {#2} }
-\cs_new:Npn \__filehook_file_subst_begin:nnn #1 #2 #3
-  {
-    \__filehook_file_subst_tortoise_hare:nn { #2#3 } { #2#3 }
-      { \__filehook_file_name_compose:nnn {#1} {#2} {#3} }
-  }
-\ExplSyntaxOff
+\IncludeInRelease{0000/00/00}{\showhyphens}%
+                 {XeTeX support for \showhyphens}%
+\gdef\showhyphens#1{%
+  \setbox0\vbox{%
+    \color at begingroup
+    \everypar{}%
+    \parfillskip\z at skip\hsize\maxdimen
+    \normalfont
+    \pretolerance\m at ne\tolerance\m at ne
+    \hbadness\z@\showboxdepth\z@\ #1%
+    \color at endgroup}}
 \EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-         {\__filehook_file_subst_tortoise_hare:nn}{Tortoise and Hare}%
-\ExplSyntaxOn
-\cs_new:Npn \__filehook_file_subst_tortoise_hare:nn #1 #2 #3
-  {
-    \cs_if_exist:cTF { @file-subst@ #2 }
-      {
-        \flag_if_raised:nF { __filehook_file_replaced }
-          { \flag_raise:n { __filehook_file_replaced } }
-        \cs_if_exist:cTF { @file-subst@ \use:c { @file-subst@ #2 } }
-          {
-            \__filehook_file_subst_loop:cc
-              { @file-subst@ #1 }
-              { @file-subst@ \use:c { @file-subst@ #2 } }
-          }
-          { \use:c { @file-subst@ #2 } }
-      }
-      { #3 }
-  }
-\cs_new:Npn \__filehook_file_subst_loop:NN #1 #2
-  {
-    \token_if_eq_meaning:NNTF #1 #2
-      {
-        .tex
-        \__filehook_file_subst_cycle_error:cN { @file-subst@ #1 } #1
-      }
-      { \__filehook_file_subst_tortoise_hare:nn {#1} {#2} {#2} }
-  }
-\cs_generate_variant:Nn \__filehook_file_subst_loop:NN { cc }
-\cs_new:Npn \__filehook_file_subst_cycle_error:NN #1 #2
-  {
-    \__kernel_msg_expandable_error:nnff { kernel } { file-cycle }
-      {#1} { \use:c { @file-subst@ #1 } }
-    \token_if_eq_meaning:NNF #1 #2
-      { \__filehook_file_subst_cycle_error:cN { @file-subst@ #1 } #2 }
-  }
-\cs_generate_variant:Nn \__filehook_file_subst_cycle_error:NN { c }
-\__kernel_msg_new:nnn { kernel } { file-cycle }
-  { File~loop!~#1~replaced~by~#2... }
-\ExplSyntaxOff
+%%% From File: ltfssaxes.dtx
+%% Copyright (C) 1999-2020 Frank Mittelbach
+\IncludeInRelease{2020/02/02}%
+   {\DeclareFontSeriesChangeRule}{Series change rules}%
+\def\DeclareFontSeriesChangeRule#1#2#3#4{%
+  \@namedef{series@#1@#2}{{#3}{#4}}}
+\DeclareFontSeriesChangeRule {bc}{b}{bc}{}
+\DeclareFontSeriesChangeRule {bc}{c}{bc}{}
+\DeclareFontSeriesChangeRule {bc}{eb}{ebc}{}
+\DeclareFontSeriesChangeRule {bc}{ec}{bec} {bc}
+\DeclareFontSeriesChangeRule {bc}{el}{elc}{}
+\DeclareFontSeriesChangeRule {bc}{l}{lc}{}
+\DeclareFontSeriesChangeRule {bc}{sb}{sbc}{}
+\DeclareFontSeriesChangeRule {bc}{sc}{bsc} {bc}
+\DeclareFontSeriesChangeRule {bc}{sl}{slc}{}
+\DeclareFontSeriesChangeRule {bc}{ub}{ubc}{}
+\DeclareFontSeriesChangeRule {bc}{ul}{ulc}{}
+\DeclareFontSeriesChangeRule {bc}{x}{bx}{}
+\DeclareFontSeriesChangeRule {bx}{b}{bx}{}
+\DeclareFontSeriesChangeRule {bx}{c}  {bc}  {bx} %<-----
+\DeclareFontSeriesChangeRule {bx}{eb}{ebx}{}
+\DeclareFontSeriesChangeRule {bx}{ec}  {bec}  {bx} %<-----
+\DeclareFontSeriesChangeRule {bx}{el}{elx}{}
+\DeclareFontSeriesChangeRule {bx}{l}{lx}{}
+\DeclareFontSeriesChangeRule {bx}{sb} {sbx} {}
+\DeclareFontSeriesChangeRule {bx}{sc}  {bsc}  {bx} %<-----
+\DeclareFontSeriesChangeRule {bx}{sl}{slx}  {}
+\DeclareFontSeriesChangeRule {bx}{ub}{ubx}{}
+\DeclareFontSeriesChangeRule {bx}{ul}{ulx}{}
+\DeclareFontSeriesChangeRule {bx}{x}{bx}{}
+\DeclareFontSeriesChangeRule {b}{bx} {bx}  {b} %<-----
+\DeclareFontSeriesChangeRule {b}{c}  {bc}  {b} %<-----
+\DeclareFontSeriesChangeRule {b}{ec}  {bec}  {b} %<-----
+\DeclareFontSeriesChangeRule {b}{sb} {sb}  {b} %<-----
+\DeclareFontSeriesChangeRule {b}{sc}  {bsc}  {b} %<-----
+\DeclareFontSeriesChangeRule {b}{x}  {bx}  {b} %<-----
+\DeclareFontSeriesChangeRule {c}{bx} {bx}  {b}  %<-----
+\DeclareFontSeriesChangeRule {c}{b}{bc}{}
+\DeclareFontSeriesChangeRule {c}{eb}{ebc}{}
+\DeclareFontSeriesChangeRule {c}{el}{elc}{}
+\DeclareFontSeriesChangeRule {c}{l}{lc}{}
+\DeclareFontSeriesChangeRule {c}{sb}{sbc}{}
+\DeclareFontSeriesChangeRule {c}{sl}{slc}{}
+\DeclareFontSeriesChangeRule {c}{ub}{ubc}{}
+\DeclareFontSeriesChangeRule {c}{ul}{ulc}{}
+\DeclareFontSeriesChangeRule {c}{x}{x}{m}               %<-----
+\DeclareFontSeriesChangeRule {ebc}{b}{bc}{}
+\DeclareFontSeriesChangeRule {ebc}{c}{ebc}{}
+\DeclareFontSeriesChangeRule {ebc}{eb}{ebc}{}
+\DeclareFontSeriesChangeRule {ebc}{ec}{ebec}{ebc}
+\DeclareFontSeriesChangeRule {ebc}{el}{elc}{}
+\DeclareFontSeriesChangeRule {ebc}{l}{lc}{}
+\DeclareFontSeriesChangeRule {ebc}{sb}{sbc}{}
+\DeclareFontSeriesChangeRule {ebc}{sc}{ebsc}{ebc}
+\DeclareFontSeriesChangeRule {ebc}{sl}{slc}{}
+\DeclareFontSeriesChangeRule {ebc}{ub}{ubc}{}
+\DeclareFontSeriesChangeRule {ebc}{ul}{ulc}{}
+\DeclareFontSeriesChangeRule {ebc}{x}{ebx}{}
+\DeclareFontSeriesChangeRule {ec}{bx} {bx}  {b}  %<-----
+\DeclareFontSeriesChangeRule {ec}{b}{bec}{}
+\DeclareFontSeriesChangeRule {ec}{eb}{ebec}{}
+\DeclareFontSeriesChangeRule {ec}{el}{elec}{}
+\DeclareFontSeriesChangeRule {ec}{l}{lec}{}
+\DeclareFontSeriesChangeRule {ec}{sb}{sbec}{}
+\DeclareFontSeriesChangeRule {ec}{sl}{slec}{}
+\DeclareFontSeriesChangeRule {ec}{ub}{ubec}{}
+\DeclareFontSeriesChangeRule {ec}{ul}{ulec}{}
+\DeclareFontSeriesChangeRule {ec}{x}{x}{m}              %<-----
+\DeclareFontSeriesChangeRule {sc}{bx} {bx}  {b}  %<-----
+\DeclareFontSeriesChangeRule {sc}{b}{bsc}{}
+\DeclareFontSeriesChangeRule {sc}{eb}{ebsc}{}
+\DeclareFontSeriesChangeRule {sc}{el}{elsc}{}
+\DeclareFontSeriesChangeRule {sc}{l}{lsc}{}
+\DeclareFontSeriesChangeRule {sc}{sb}{sbsc}{}
+\DeclareFontSeriesChangeRule {sc}{sl}{slsc}{}
+\DeclareFontSeriesChangeRule {sc}{ub}{ubsc}{}
+\DeclareFontSeriesChangeRule {sc}{ul}{ulsc}{}
+\DeclareFontSeriesChangeRule {sc}{x}{x}{m}              %<-----
+\DeclareFontSeriesChangeRule {ebx}{b}{bx}{}
+\DeclareFontSeriesChangeRule {ebx}{c}{ebc}{}
+\DeclareFontSeriesChangeRule {ebx}{eb}{ebx}{}
+\DeclareFontSeriesChangeRule {ebx}{ec}{ebec}{}
+\DeclareFontSeriesChangeRule {ebx}{el}{elx}{}
+\DeclareFontSeriesChangeRule {ebx}{l}{lx}{}
+\DeclareFontSeriesChangeRule {ebx}{sb}{sbx}{}
+\DeclareFontSeriesChangeRule {ebx}{sc}{ebsc}{}
+\DeclareFontSeriesChangeRule {ebx}{sl}{slx}{}
+\DeclareFontSeriesChangeRule {ebx}{ub}{ubx}{}
+\DeclareFontSeriesChangeRule {ebx}{ul}{ulx}{}
+\DeclareFontSeriesChangeRule {ebx}{x}{ebx}{}
+\DeclareFontSeriesChangeRule {eb}{c}{ebc}{}
+\DeclareFontSeriesChangeRule {eb}{ec}{ebec}{}
+\DeclareFontSeriesChangeRule {eb}{sc}{ebsc}{}
+\DeclareFontSeriesChangeRule {eb}{x}{ebx}{}
+\DeclareFontSeriesChangeRule {elc}{b}{bc}{}
+\DeclareFontSeriesChangeRule {elc}{c}{elc}{}
+\DeclareFontSeriesChangeRule {elc}{eb}{ebc}{}
+\DeclareFontSeriesChangeRule {elc}{ec}{elec}{}
+\DeclareFontSeriesChangeRule {elc}{el}{elc}{}
+\DeclareFontSeriesChangeRule {elc}{l}{lc}{}
+\DeclareFontSeriesChangeRule {elc}{sb}{sbc}{}
+\DeclareFontSeriesChangeRule {elc}{sc}{elsc}{}
+\DeclareFontSeriesChangeRule {elc}{sl}{slc}{}
+\DeclareFontSeriesChangeRule {elc}{ub}{ubc}{}
+\DeclareFontSeriesChangeRule {elc}{ul}{ulc}{}
+\DeclareFontSeriesChangeRule {elc}{x}{elx}{}
+\DeclareFontSeriesChangeRule {elx}{b}{bx}{}
+\DeclareFontSeriesChangeRule {elx}{c}{elc}{}
+\DeclareFontSeriesChangeRule {elx}{eb}{ebx}{}
+\DeclareFontSeriesChangeRule {elx}{ec}{elec}{}
+\DeclareFontSeriesChangeRule {elx}{el}{elx}{}
+\DeclareFontSeriesChangeRule {elx}{l}{lx}{}
+\DeclareFontSeriesChangeRule {elx}{sb}{sbx}{}
+\DeclareFontSeriesChangeRule {elx}{sc}{elsc}{}
+\DeclareFontSeriesChangeRule {elx}{sl}{slx}{}
+\DeclareFontSeriesChangeRule {elx}{ub}{ubx}{}
+\DeclareFontSeriesChangeRule {elx}{ul}{ulx}{}
+\DeclareFontSeriesChangeRule {elx}{x}{elx}{}
+\DeclareFontSeriesChangeRule {el}{c}{elc}{}
+\DeclareFontSeriesChangeRule {el}{ec}{elec}{}
+\DeclareFontSeriesChangeRule {el}{sc}{elsc}{}
+\DeclareFontSeriesChangeRule {el}{x}{elx}{}
+\DeclareFontSeriesChangeRule {lc}{b}{bc}{}
+\DeclareFontSeriesChangeRule {lc}{c}{lc}{}
+\DeclareFontSeriesChangeRule {lc}{eb}{ebc}{}
+\DeclareFontSeriesChangeRule {lc}{ec}{lec}{}
+\DeclareFontSeriesChangeRule {lc}{el}{elc}{}
+\DeclareFontSeriesChangeRule {lc}{l}{lc}{}
+\DeclareFontSeriesChangeRule {lc}{sb}{sbc}{}
+\DeclareFontSeriesChangeRule {lc}{sc}{lsc}{}
+\DeclareFontSeriesChangeRule {lc}{sl}{slc}{}
+\DeclareFontSeriesChangeRule {lc}{ub}{ubc}{}
+\DeclareFontSeriesChangeRule {lc}{ul}{ulc}{}
+\DeclareFontSeriesChangeRule {lc}{x}{lx}{}
+\DeclareFontSeriesChangeRule {lx}{b}{bx}{}
+\DeclareFontSeriesChangeRule {lx}{c}{lc}{}
+\DeclareFontSeriesChangeRule {lx}{eb}{ebx}{}
+\DeclareFontSeriesChangeRule {lx}{ec}{lec}{}
+\DeclareFontSeriesChangeRule {lx}{el}{elx}{}
+\DeclareFontSeriesChangeRule {lx}{l}{lx}{}
+\DeclareFontSeriesChangeRule {lx}{sb}{sbx}{}
+\DeclareFontSeriesChangeRule {lx}{sc}{lsc}{}
+\DeclareFontSeriesChangeRule {lx}{sl}{slx}{}
+\DeclareFontSeriesChangeRule {lx}{ub}{ubx}{}
+\DeclareFontSeriesChangeRule {lx}{ul}{ulx}{}
+\DeclareFontSeriesChangeRule {lx}{x}{lx}{}
+\DeclareFontSeriesChangeRule {l}{bx} {bx}  {b} %<-----
+\DeclareFontSeriesChangeRule {l}{b}  {b}   {bx} %<-----
+\DeclareFontSeriesChangeRule {l}{c}  {lc}  {l}  % ? %<-----
+\DeclareFontSeriesChangeRule {l}{ec}  {lec}  {l}  % ? %<-----
+\DeclareFontSeriesChangeRule {l}{sb} {sb}  {b}  % ? %<-----
+\DeclareFontSeriesChangeRule {l}{sc}  {lsc}  {l}  % ? %<-----
+\DeclareFontSeriesChangeRule {l}{x}  {lx}  {l}  % ? %<-----
+\DeclareFontSeriesChangeRule {m}{bx} {bx} {b}    %<-----
+\DeclareFontSeriesChangeRule {m}{b}  {b}  {bx} %<-----
+\DeclareFontSeriesChangeRule {m}{c}  {c}  {m} %<-----
+\DeclareFontSeriesChangeRule {m}{ec}  {ec}  {m} %<-----
+\DeclareFontSeriesChangeRule {m}{l}  {l}  {m} %<-----
+\DeclareFontSeriesChangeRule {m}{sb} {sb} {b} %<-----
+\DeclareFontSeriesChangeRule {m}{sc}  {sc}  {m} %<-----
+\DeclareFontSeriesChangeRule {m}{x}  {x}  {m} %<-----
+\DeclareFontSeriesChangeRule {sbc}{b}{bc}{}
+\DeclareFontSeriesChangeRule {sbc}{c}{sbc}{}
+\DeclareFontSeriesChangeRule {sbc}{eb}{ebc}{}
+\DeclareFontSeriesChangeRule {sbc}{ec}{sbec}{sbc}
+\DeclareFontSeriesChangeRule {sbc}{el}{elc}{}
+\DeclareFontSeriesChangeRule {sbc}{l}{lc}{}
+\DeclareFontSeriesChangeRule {sbc}{sb}{sbc}{}
+\DeclareFontSeriesChangeRule {sbc}{sc}{sbsc}{sbc}
+\DeclareFontSeriesChangeRule {sbc}{sl}{slc}{}
+\DeclareFontSeriesChangeRule {sbc}{ub}{ubc}{}
+\DeclareFontSeriesChangeRule {sbc}{ul}{ulc}{}
+\DeclareFontSeriesChangeRule {sbc}{x}{sbx}{}
+\DeclareFontSeriesChangeRule {sbx}{b}{bx}{}
+\DeclareFontSeriesChangeRule {sbx}{c}{sbc}{}
+\DeclareFontSeriesChangeRule {sbx}{eb}{ebx}{}
+\DeclareFontSeriesChangeRule {sbx}{ec}{sbec}{}
+\DeclareFontSeriesChangeRule {sbx}{el}{elx}{}
+\DeclareFontSeriesChangeRule {sbx}{l}{lx}{}
+\DeclareFontSeriesChangeRule {sbx}{sb}{sbx}{}
+\DeclareFontSeriesChangeRule {sbx}{sc}{sbsc}{}
+\DeclareFontSeriesChangeRule {sbx}{sl}{slx}{}
+\DeclareFontSeriesChangeRule {sbx}{ub}{ubx}{}
+\DeclareFontSeriesChangeRule {sbx}{ul}{ulx}{}
+\DeclareFontSeriesChangeRule {sbx}{x}{sbx}{}
+\DeclareFontSeriesChangeRule {sb}{c}  {sbc} {bc} %? %<-----
+\DeclareFontSeriesChangeRule {sb}{ec}  {sbec} {sbc} %? %<-----
+\DeclareFontSeriesChangeRule {sb}{sc}  {sbsc} {sbc} %? %<-----
+\DeclareFontSeriesChangeRule {sb}{x}  {sbx} {bx} %? %<-----
+\DeclareFontSeriesChangeRule {slc}{b}{bc}{}
+\DeclareFontSeriesChangeRule {slc}{c}{slc}{}
+\DeclareFontSeriesChangeRule {slc}{eb}{ebc}{}
+\DeclareFontSeriesChangeRule {slc}{ec}{slec}{}
+\DeclareFontSeriesChangeRule {slc}{el}{elc}{}
+\DeclareFontSeriesChangeRule {slc}{l}{lc}{}
+\DeclareFontSeriesChangeRule {slc}{sb}{sbc}{}
+\DeclareFontSeriesChangeRule {slc}{sc}{slsc}{}
+\DeclareFontSeriesChangeRule {slc}{sl}{slc}{}
+\DeclareFontSeriesChangeRule {slc}{ub}{ubc}{}
+\DeclareFontSeriesChangeRule {slc}{ul}{ulc}{}
+\DeclareFontSeriesChangeRule {slc}{x}{slx}{}
+\DeclareFontSeriesChangeRule {slx}{b}{bx}{}
+\DeclareFontSeriesChangeRule {slx}{c}{slc}{}
+\DeclareFontSeriesChangeRule {slx}{eb}{ebx}{}
+\DeclareFontSeriesChangeRule {slx}{ec}{slec}{}
+\DeclareFontSeriesChangeRule {slx}{el}{elx}{}
+\DeclareFontSeriesChangeRule {slx}{l}{lx}{}
+\DeclareFontSeriesChangeRule {slx}{sb}{sbx}{}
+\DeclareFontSeriesChangeRule {slx}{sc}{slsc}{}
+\DeclareFontSeriesChangeRule {slx}{sl}{slx}{}
+\DeclareFontSeriesChangeRule {slx}{ub}{ubx}{}
+\DeclareFontSeriesChangeRule {slx}{ul}{ulx}{}
+\DeclareFontSeriesChangeRule {slx}{x}{slx}{}
+\DeclareFontSeriesChangeRule {sl}{c}{slc}{}
+\DeclareFontSeriesChangeRule {sl}{ec}{slec}{}
+\DeclareFontSeriesChangeRule {sl}{sc}{slsc}{}
+\DeclareFontSeriesChangeRule {sl}{x}{slx}{}
+\DeclareFontSeriesChangeRule {ubc}{b}{bc}{}
+\DeclareFontSeriesChangeRule {ubc}{c}{ubc}{}
+\DeclareFontSeriesChangeRule {ubc}{eb}{ebc}{}
+\DeclareFontSeriesChangeRule {ubc}{ec}{ubec}{}
+\DeclareFontSeriesChangeRule {ubc}{el}{elc}{}
+\DeclareFontSeriesChangeRule {ubc}{l}{lc}{}
+\DeclareFontSeriesChangeRule {ubc}{sb}{sbc}{}
+\DeclareFontSeriesChangeRule {ubc}{sc}{ubsc}{}
+\DeclareFontSeriesChangeRule {ubc}{sl}{slc}{}
+\DeclareFontSeriesChangeRule {ubc}{ub}{ubc}{}
+\DeclareFontSeriesChangeRule {ubc}{ul}{ulc}{}
+\DeclareFontSeriesChangeRule {ubc}{x}{ubx}{}
+\DeclareFontSeriesChangeRule {ubx}{b}{bx}{}
+\DeclareFontSeriesChangeRule {ubx}{c}{ubc}{}
+\DeclareFontSeriesChangeRule {ubx}{eb}{ebx}{}
+\DeclareFontSeriesChangeRule {ubx}{ec}{ubec}{}
+\DeclareFontSeriesChangeRule {ubx}{el}{elx}{}
+\DeclareFontSeriesChangeRule {ubx}{l}{lx}{}
+\DeclareFontSeriesChangeRule {ubx}{sb}{sbx}{}
+\DeclareFontSeriesChangeRule {ubx}{sc}{ubsc}{}
+\DeclareFontSeriesChangeRule {ubx}{sl}{slx}{}
+\DeclareFontSeriesChangeRule {ubx}{ub}{ubx}{}
+\DeclareFontSeriesChangeRule {ubx}{ul}{ulx}{}
+\DeclareFontSeriesChangeRule {ubx}{x}{ubx}{}
+\DeclareFontSeriesChangeRule {ub}{c}{ubc}{}
+\DeclareFontSeriesChangeRule {ub}{ec}{ubec}{}
+\DeclareFontSeriesChangeRule {ub}{sc}{ubsc}{}
+\DeclareFontSeriesChangeRule {ub}{x}{ubx}{}
+\DeclareFontSeriesChangeRule {ulc}{b}{bc}{}
+\DeclareFontSeriesChangeRule {ulc}{c}{ulc}{}
+\DeclareFontSeriesChangeRule {ulc}{eb}{ebc}{}
+\DeclareFontSeriesChangeRule {ulc}{ec}{ulec}{ulc}
+\DeclareFontSeriesChangeRule {ulc}{el}{elc}{}
+\DeclareFontSeriesChangeRule {ulc}{l}{lc}{}
+\DeclareFontSeriesChangeRule {ulc}{sb}{sbc}{}
+\DeclareFontSeriesChangeRule {ulc}{sc}{ulsc}{ulc}
+\DeclareFontSeriesChangeRule {ulc}{sl}{slc}{}
+\DeclareFontSeriesChangeRule {ulc}{ub}{ubc}{}
+\DeclareFontSeriesChangeRule {ulc}{ul}{ulc}{}
+\DeclareFontSeriesChangeRule {ulc}{x}{ulx}{}
+\DeclareFontSeriesChangeRule {ulx}{b}{bx}{}
+\DeclareFontSeriesChangeRule {ulx}{c}{ulc}{}
+\DeclareFontSeriesChangeRule {ulx}{eb}{ebx}{}
+\DeclareFontSeriesChangeRule {ulx}{ec}{ulec}{}
+\DeclareFontSeriesChangeRule {ulx}{el}{elx}{}
+\DeclareFontSeriesChangeRule {ulx}{l}{lx}{}
+\DeclareFontSeriesChangeRule {ulx}{sb}{sbx}{}
+\DeclareFontSeriesChangeRule {ulx}{sc}{ulsc}{}
+\DeclareFontSeriesChangeRule {ulx}{sl}{slx}{}
+\DeclareFontSeriesChangeRule {ulx}{ub}{ubx}{}
+\DeclareFontSeriesChangeRule {ulx}{ul}{ulx}{}
+\DeclareFontSeriesChangeRule {ulx}{x}{ulx}{}
+\DeclareFontSeriesChangeRule {ul}{c}{ulc}{}
+\DeclareFontSeriesChangeRule {ul}{ec}{ulec}{}
+\DeclareFontSeriesChangeRule {ul}{sc}{ulsc}{}
+\DeclareFontSeriesChangeRule {ul}{x}{ulx}{}
+\DeclareFontSeriesChangeRule {x}{b}{bx}{}
+\DeclareFontSeriesChangeRule {x}{c}{c}{}
+\DeclareFontSeriesChangeRule {x}{eb}{ebx}{}
+\DeclareFontSeriesChangeRule {x}{ec}{ec}{}
+\DeclareFontSeriesChangeRule {x}{el}{elx}{}
+\DeclareFontSeriesChangeRule {x}{l}{lx}{}
+\DeclareFontSeriesChangeRule {x}{sb}{sbx}{}
+\DeclareFontSeriesChangeRule {x}{sc}{sc}{}
+\DeclareFontSeriesChangeRule {x}{sl}{slx}{}
+\DeclareFontSeriesChangeRule {x}{ub}{ubx}{}
+\DeclareFontSeriesChangeRule {x}{ul}{ulx}{}
+\DeclareFontSeriesChangeRule {bc}{m?}{c}{}
+\DeclareFontSeriesChangeRule {bec}{m?}{ec}{}
+\DeclareFontSeriesChangeRule {bsc}{m?}{sc}{}
+\DeclareFontSeriesChangeRule {bx}{m?}{x}{}
+\DeclareFontSeriesChangeRule {b}{m?}{m}{}
+\DeclareFontSeriesChangeRule {c}{m?}{c}{}
+\DeclareFontSeriesChangeRule {ebc}{m?}{c}{}
+\DeclareFontSeriesChangeRule {ebec}{m?}{ec}{}
+\DeclareFontSeriesChangeRule {ebsc}{m?}{sc}{}
+\DeclareFontSeriesChangeRule {ebx}{m?}{x}{}
+\DeclareFontSeriesChangeRule {eb}{m?}{m}{}
+\DeclareFontSeriesChangeRule {ec}{m?}{ec}{}
+\DeclareFontSeriesChangeRule {elc}{m?}{c}{}
+\DeclareFontSeriesChangeRule {elec}{m?}{ec}{}
+\DeclareFontSeriesChangeRule {elsc}{m?}{sc}{}
+\DeclareFontSeriesChangeRule {elx}{m?}{x}{}
+\DeclareFontSeriesChangeRule {el}{m?}{m}{}
+\DeclareFontSeriesChangeRule {lc}{m?}{c}{}
+\DeclareFontSeriesChangeRule {lec}{m?}{ec}{}
+\DeclareFontSeriesChangeRule {lsc}{m?}{sc}{}
+\DeclareFontSeriesChangeRule {lx}{m?}{x}{}
+\DeclareFontSeriesChangeRule {l}{m?}{m}{}
+\DeclareFontSeriesChangeRule {m}{m?}{m}{}
+\DeclareFontSeriesChangeRule {sbc}{m?}{c}{}
+\DeclareFontSeriesChangeRule {sbec}{m?}{ec}{}
+\DeclareFontSeriesChangeRule {sbsc}{m?}{sc}{}
+\DeclareFontSeriesChangeRule {sbx}{m?}{x}{}
+\DeclareFontSeriesChangeRule {sb}{m?}{m}{}
+\DeclareFontSeriesChangeRule {sc}{m?}{sc}{}
+\DeclareFontSeriesChangeRule {slc}{m?}{c}{}
+\DeclareFontSeriesChangeRule {slec}{m?}{ec}{}
+\DeclareFontSeriesChangeRule {slsc}{m?}{sc}{}
+\DeclareFontSeriesChangeRule {slx}{m?}{x}{}
+\DeclareFontSeriesChangeRule {sl}{m?}{m}{}
+\DeclareFontSeriesChangeRule {ubc}{m?}{c}{}
+\DeclareFontSeriesChangeRule {ubec}{m?}{ec}{}
+\DeclareFontSeriesChangeRule {ubsc}{m?}{sc}{}
+\DeclareFontSeriesChangeRule {ubx}{m?}{x}{}
+\DeclareFontSeriesChangeRule {ub}{m?}{ub}{}
+\DeclareFontSeriesChangeRule {ulc}{m?}{c}{}
+\DeclareFontSeriesChangeRule {ulec}{m?}{ec}{}
+\DeclareFontSeriesChangeRule {ulsc}{m?}{sc}{}
+\DeclareFontSeriesChangeRule {ulx}{m?}{x}{}
+\DeclareFontSeriesChangeRule {ul}{m?}{m}{}
+\DeclareFontSeriesChangeRule {x}{m?}{x}{}
+\DeclareFontSeriesChangeRule {bc}{?m}{b}{}
+\DeclareFontSeriesChangeRule {bec}{?m}{b}{}
+\DeclareFontSeriesChangeRule {bsc}{?m}{b}{}
+\DeclareFontSeriesChangeRule {bsc}{?m}{b}{}
+\DeclareFontSeriesChangeRule {bx}{?m}{b}{}
+\DeclareFontSeriesChangeRule {b}{?m}{b}{}
+\DeclareFontSeriesChangeRule {c}{?m}{m}{}
+\DeclareFontSeriesChangeRule {ebc}{?m}{eb}{}
+\DeclareFontSeriesChangeRule {ebec}{?m}{eb}{}
+\DeclareFontSeriesChangeRule {ebsc}{?m}{eb}{}
+\DeclareFontSeriesChangeRule {ebsc}{?m}{eb}{}
+\DeclareFontSeriesChangeRule {ebx}{?m}{eb}{}
+\DeclareFontSeriesChangeRule {eb}{?m}{eb}{}
+\DeclareFontSeriesChangeRule {ec}{?m}{m}{}
+\DeclareFontSeriesChangeRule {elc}{?m}{el}{}
+\DeclareFontSeriesChangeRule {elec}{?m}{el}{}
+\DeclareFontSeriesChangeRule {elsc}{?m}{el}{}
+\DeclareFontSeriesChangeRule {elsc}{?m}{el}{}
+\DeclareFontSeriesChangeRule {elx}{?m}{el}{}
+\DeclareFontSeriesChangeRule {el}{?m}{el}{}
+\DeclareFontSeriesChangeRule {lc}{?m}{l}{}
+\DeclareFontSeriesChangeRule {lec}{?m}{l}{}
+\DeclareFontSeriesChangeRule {lsc}{?m}{l}{}
+\DeclareFontSeriesChangeRule {lsc}{?m}{l}{}
+\DeclareFontSeriesChangeRule {lx}{?m}{l}{}
+\DeclareFontSeriesChangeRule {l}{?m}{l}{}
+\DeclareFontSeriesChangeRule {m}{?m}{m}{}
+\DeclareFontSeriesChangeRule {sbc}{?m}{sb}{}
+\DeclareFontSeriesChangeRule {sbec}{?m}{sb}{}
+\DeclareFontSeriesChangeRule {sbsc}{?m}{sb}{}
+\DeclareFontSeriesChangeRule {sbsc}{?m}{sb}{}
+\DeclareFontSeriesChangeRule {sbx}{?m}{sb}{}
+\DeclareFontSeriesChangeRule {sb}{?m}{sb}{}
+\DeclareFontSeriesChangeRule {sc}{?m}{m}{}
+\DeclareFontSeriesChangeRule {sc}{?m}{m}{}
+\DeclareFontSeriesChangeRule {slc}{?m}{sl}{}
+\DeclareFontSeriesChangeRule {slec}{?m}{sl}{}
+\DeclareFontSeriesChangeRule {slsc}{?m}{sl}{}
+\DeclareFontSeriesChangeRule {slsc}{?m}{sl}{}
+\DeclareFontSeriesChangeRule {slx}{?m}{sl}{}
+\DeclareFontSeriesChangeRule {sl}{?m}{sl}{}
+\DeclareFontSeriesChangeRule {ubc}{?m}{ub}{}
+\DeclareFontSeriesChangeRule {ubec}{?m}{ub}{}
+\DeclareFontSeriesChangeRule {ubsc}{?m}{ub}{}
+\DeclareFontSeriesChangeRule {ubsc}{?m}{ub}{}
+\DeclareFontSeriesChangeRule {ubx}{?m}{ub}{}
+\DeclareFontSeriesChangeRule {ub}{?m}{m}{}
+\DeclareFontSeriesChangeRule {ulc}{?m}{ul}{}
+\DeclareFontSeriesChangeRule {ulec}{?m}{ul}{}
+\DeclareFontSeriesChangeRule {ulsc}{?m}{ul}{}
+\DeclareFontSeriesChangeRule {ulsc}{?m}{ul}{}
+\DeclareFontSeriesChangeRule {ulx}{?m}{ul}{}
+\DeclareFontSeriesChangeRule {ul}{?m}{ul}{}
+\DeclareFontSeriesChangeRule {x}{?m}{m}{}
 \EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-          {\disable at package@load}{Disable packages}%
-\def\disable at package@load#1#2{%
-  \global\@namedef{@pkg-disable@#1.\@pkgextension}{#2}}
-\def\@disable at packageload@do#1#2{%
-  \@ifundefined{@pkg-disable@#1}{#2}%
-     {\@nameuse{@pkg-disable@#1}}}
-\def\reenable at package@load#1{%
-  \global\expandafter\let
-  \csname @pkg-disable@#1.\@pkgextension \endcsname \@undefined}
-\EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-          {\disable at package@load}{Disable packages}%
+   {\DeclareFontSeriesChangeRule}{Series change rules}%
 
-\let\disable at package@load   \@undefined
-\let\@disable at packageload@do\@undefined
-\let\reenable at package@load  \@undefined
+\let\DeclareFontSeriesChangeRule\@undefined
+
 \EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-    {\@expl@@@filehook at if@no at extension@@nTF}{2e tmp interfaces}%
-\ExplSyntaxOn
-\cs_new_eq:NN \@expl@@@filehook at if@no at extension@@nTF
-              \__filehook_if_no_extension:nTF
-\cs_new_eq:NN \@expl@@@filehook at set@curr at file@@nNN
-              \__filehook_set_curr_file:nNN
-\cs_new_eq:NN \@expl@@@filehook at resolve@file at subst@@w
-              \__filehook_resolve_file_subst:w
-\cs_new_eq:NN \@expl@@@filehook at normalize@file at name@@w
-              \__filehook_normalize_file_name:w
-\cs_new_eq:NN \@expl@@@filehook at if@file at replaced@@TF
-              \__filehook_if_file_replaced:TF
-\cs_new_eq:NN \@expl@@@filehook at drop@extension@@N
-              \__filehook_drop_extension:N
-\cs_new_eq:NN \@expl@@@filehook at file@push@@
-               \__filehook_file_push:
-\cs_new_eq:NN \@expl@@@filehook at file@pop@@
-              \__filehook_file_pop:
-\cs_new_eq:NN \@expl@@@filehook at file@pop at assign@@nnnn
-              \__filehook_file_pop_assign:nnnn
-\ExplSyntaxOff
+\IncludeInRelease{2021/05/01}%
+                 {\fontseries}{delay fontseries update}%
+\DeclareRobustCommand\fontseries[1]{\@forced at seriesfalse
+    \expandafter\def\expandafter\delayed at f@adjustment\expandafter
+        {\delayed at f@adjustment\delayed at merge@font at series{#1}}}
+\let\delayed at f@adjustment\@empty
+\DeclareRobustCommand\fontseriesforce[1]{\@forced at seriestrue
+    \expandafter\def\expandafter\delayed at f@adjustment\expandafter
+      {\delayed at f@adjustment\edef\f at series{#1}}}
+\newif\if at forced@series
 \EndIncludeInRelease
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-%% File: ltshipout.dtx (C) Copyright 2020 Frank Mittelbach, LaTeX Team
-%%
-%%% From File: ltshipout.dtx
-\providecommand\ltshipoutversion{v1.0c}
-\providecommand\ltshipoutdate{2020/09/27}
-\IncludeInRelease{2020/10/01}%
-                 {\shipout}{Hook mangement (shipout)}%
-\ExplSyntaxOn
-\bool_new:N \g__shipout_debug_bool
-\cs_new_eq:NN \__shipout_debug:n  \use_none:n
-\cs_new_protected:Npn \shipout_debug_on:
-  {
-    \bool_gset_true:N \g__shipout_debug_bool
-    \__shipout_debug_gset:
-  }
-\cs_new_protected:Npn \shipout_debug_off:
-  {
-    \bool_gset_false:N \g__shipout_debug_bool
-    \__shipout_debug_gset:
-  }
-\cs_new_protected:Npn \__shipout_debug_gset:
-  {
-    \cs_gset_protected:Npx \__shipout_debug:n ##1
-      { \bool_if:NT \g__shipout_debug_bool {##1} }
-  }
-\box_new:N  \l_shipout_box
-\cs_set_eq:NN \ShipoutBox \l_shipout_box
-\cs_set_protected:Npn \__shipout_execute: {
-  \tl_set:Nx \l__shipout_group_level_tl
-     { \int_value:w \tex_currentgrouplevel:D }
-  \tex_afterassignment:D \__shipout_execute_test_level:
-  \tex_setbox:D \l_shipout_box
-}
-\cs_gset_eq:NN \shipout \__shipout_execute:
-\tl_new:N \l__shipout_group_level_tl
-\cs_new:Npn \__shipout_execute_test_level: {
-  \int_compare:nNnT
-     \l__shipout_group_level_tl < \tex_currentgrouplevel:D
-     \tex_aftergroup:D
-  \__shipout_execute_cont:
-}
-\cs_new:Npn \__shipout_execute_cont: {
-  \box_if_empty:NTF \l_shipout_box
-    { \PackageWarning{ltshipout}{Ignoring~ void~ shipout~ box} }
-    {
-      \bool_gset_false:N \g__shipout_discard_bool
-      \cs_set_eq:NN \__shipout_saved_protect: \protect
-      \set at typeset@protect
-      \__shipout_get_box_size:N \l_shipout_box
-      \hook_use:n {shipout/before}
-      \int_gincr:N \g_shipout_totalpages_int
-      \bool_if:NTF \g__shipout_discard_bool
-        { \PackageInfo{ltshipout}{Completed~ page~ discarded}
-          \bool_gset_false:N \g__shipout_discard_bool
-          \tex_deadcycles:D \c_zero_int
-        }
-        { \box_if_empty:NTF \l_shipout_box
-            { \PackageWarning{ltshipout}{
-                Shipout~ box~ was~ voided~ by~ hook,\MessageBreak
-                ignoring~ shipout~ box  }
-            }
-            {
-              \int_gincr:N \g_shipout_readonly_int
-              \__shipout_debug:n {
-                \typeout{Absolute~ page~ =~ \int_use:N \g_shipout_readonly_int
-                         \space (target:~ \@abspage at last)}
-              }
-              \__shipout_get_box_size:N \l_shipout_box
-              \hook_if_empty:nF {shipout/foreground}
-                   { \__shipout_add_foreground_picture:n
-                     { \hook_use:n {shipout/foreground} } }
-              \hook_if_empty:nF {shipout/background}
-                   { \__shipout_add_background_picture:n
-                     { \@kernel at before@shipout at background
-                       \hook_use:n {shipout/background} } }
-              \__shipout_execute_firstpage_hook:
-              \int_compare:nNnT \@abspage at last = \g_shipout_readonly_int
-                { \hook_if_empty:nF {shipout/lastpage}
-                    { \__shipout_debug:n { \typeout{Executing~ lastpage~ hook~
-                          on~ page~ \int_use:N \g_shipout_readonly_int }        }
-                      \__shipout_add_foreground_box:n { \UseHook{shipout/lastpage}
-                                                  \@kernel at after@shipout at lastpage }
-                    }
-                    \bool_gset_true:N \g__shipout_lastpage_handled_bool
-                }
-              \cs_set_eq:NN \protect \exp_not:N
-              \tex_shipout:D \box_use:N \l_shipout_box
-            }
-        }
-      \cs_set_eq:NN \protect \__shipout_saved_protect:
-    }
-}
-\cs_new_eq:NN  \__shipout_saved_protect: \protect
-\hook_new:n{shipout/before}
-\hook_new:n{shipout/foreground}
-\hook_new:n{shipout/background}
-\hook_new:n{shipout/firstpage}
-\hook_new:n{shipout/lastpage}
-\let\@kernel at after@shipout at lastpage\@empty
-\let\@kernel at before@shipout at background\@empty
-\cs_new:Npn \__shipout_execute_firstpage_hook: {
-  \hook_if_empty:nF {shipout/firstpage}
-       { \__shipout_add_background_box:n { \UseHook{shipout/firstpage} } }
-  \cs_gset_eq:NN \__shipout_execute_firstpage_hook: \prg_do_nothing:
-  \cs_gset:Npn \__shipout_add_firstpage_material:Nn ##1 ##2 {
-    \@latex at warning{
-        First~ page~ is~ already~ shipped~ out,~ ignoring\MessageBreak
-        \string##1 }
-  }
-}
-\bool_new:N \g__shipout_lastpage_handled_bool
-\cs_new:Npn \__shipout_add_firstpage_material:Nn #1#2 {
-   \AddToHook{shipout/firstpage}{#2}
-}
-\cs_new:Npn \__shipout_get_box_size:N #1 {
-  \dim_set:Nn \l_shipout_box_ht_dim { \box_ht:N #1 }
-  \dim_set:Nn \l_shipout_box_dp_dim { \box_dp:N #1 }
-  \dim_set:Nn \l_shipout_box_wd_dim { \box_wd:N #1 }
-  \dim_set:Nn \l_shipout_box_ht_plus_dp_dim { \l_shipout_box_ht_dim +
-                                         \l_shipout_box_dp_dim }
-}
-\dim_new:N \l_shipout_box_ht_dim
-\dim_new:N \l_shipout_box_dp_dim
-\dim_new:N \l_shipout_box_wd_dim
-\dim_new:N \l_shipout_box_ht_plus_dp_dim
-\bool_new:N \g__shipout_discard_bool
-\box_new:N \l__shipout_tmp_box
-\tl_new:N  \l__shipout_saved_badness_tl
-\cs_new:Npn \__shipout_add_background_box:n #1
-{ \__shipout_get_box_size:N \l_shipout_box
-  \box_if_vertical:NTF \l_shipout_box
-      {
-        \tl_set:Nx \l__shipout_saved_badness_tl
-           { \vfuzz=\the\vfuzz\relax
-             \vbadness=\the\vbadness\relax }
-        \vfuzz=\c_max_dim
-        \vbadness=\c_max_int
-        \vbox_set_to_ht:Nnn \l_shipout_box \l_shipout_box_ht_plus_dp_dim
-             {
-               \hbox_set:Nn \l__shipout_tmp_box
-                    { \l__shipout_saved_badness_tl #1 }
-               \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
-               \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
-               \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
-               \skip_zero:N \baselineskip
-               \skip_zero:N \lineskip
-               \skip_zero:N \lineskiplimit
-               \box_use:N \l__shipout_tmp_box
-               \vbox_unpack:N \l_shipout_box
-               \kern \c_zero_dim
-             }
-        \box_set_ht:Nn \l_shipout_box \l_shipout_box_ht_dim
-        \box_set_dp:Nn \l_shipout_box \l_shipout_box_dp_dim
-        \l__shipout_saved_badness_tl
-      }
-      {
-        \box_if_horizontal:NT \l_shipout_box
-            {
-              \tl_set:Nx \l__shipout_saved_badness_tl
-                 { \hfuzz=\the\hfuzz\relax
-                   \hbadness=\the\hbadness\relax }
-              \hfuzz=\c_max_dim
-              \hbadness=\c_max_int
-              \hbox_set_to_wd:Nnn \l_shipout_box \l_shipout_box_wd_dim
-                   {
-                     \hbox_set:Nn \l__shipout_tmp_box
-                          { \l__shipout_saved_badness_tl #1 }
-                     \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
-                     \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
-                     \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
-                     \box_move_up:nn
-                         \l_shipout_box_ht_dim
-                         { \box_use:N \l__shipout_tmp_box }
-                     \hbox_unpack:N \l_shipout_box
-                   }
-              \l__shipout_saved_badness_tl
-            }
-      }
-}
-\cs_new:Npn \__shipout_add_foreground_box:n #1
-{
-  \box_if_vertical:NTF \l_shipout_box
-    {
-      \tl_set:Nx \l__shipout_saved_badness_tl
-         { \vfuzz=\the\vfuzz\relax
-           \vbadness=\the\vbadness\relax }
-      \vfuzz=\c_max_dim
-      \vbadness=\c_max_int
-      \vbox_set_to_ht:Nnn \l_shipout_box \l_shipout_box_ht_plus_dp_dim
-           {
-             \hbox_set:Nn \l__shipout_tmp_box
-                  { \l__shipout_saved_badness_tl #1 }
-             \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
-             \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
-             \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
-             \skip_zero:N \baselineskip
-             \skip_zero:N \lineskip
-             \skip_zero:N \lineskiplimit
-             \vbox_unpack:N \l_shipout_box
-             \kern -\l_shipout_box_ht_plus_dp_dim
-             \box_use:N \l__shipout_tmp_box
-             \kern  \l_shipout_box_ht_plus_dp_dim
-           }
-      \l__shipout_saved_badness_tl
-      \box_set_ht:Nn \l_shipout_box \l_shipout_box_ht_dim
-      \box_set_dp:Nn \l_shipout_box \l_shipout_box_dp_dim
-    }
-    {
-      \box_if_horizontal:NT \l_shipout_box
-        {
-          \tl_set:Nx \l__shipout_saved_badness_tl
-            { \hfuzz=\the\hfuzz\relax
-              \hbadness=\the\hbadness\relax }
-          \hfuzz=\c_max_dim
-          \hbadness=\c_max_int
-          \hbox_set_to_wd:Nnn \l_shipout_box \l_shipout_box_wd_dim
-               {
-                 \hbox_unpack:N \l_shipout_box
-                 \kern -\box_wd:N \l_shipout_box
-                 \hbox_set:Nn \l__shipout_tmp_box
-                     { \l__shipout_saved_badness_tl #1 }
-                 \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
-                 \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
-                 \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
-                 \box_move_up:nn { \box_ht:N \l_shipout_box }
-                               { \box_use:N \l__shipout_tmp_box }
-                 \kern \box_wd:N \l_shipout_box
-               }%
-               \l__shipout_saved_badness_tl
-        }
-    }
-}
-\cs_new:Npn \__shipout_init_page_origins: {
-  \tl_const:Nx \c__shipout_horigin_tl
-     {
-       \cs_if_exist_use:NTF \pdfvariable { horigin }
-          { \cs_if_exist_use:NF \pdfhorigin { 1in } }
-     }
-  \tl_const:Nx \c__shipout_vorigin_tl
-     {
-       \cs_if_exist_use:NTF \pdfvariable { vorigin }
-          { \cs_if_exist_use:NF \pdfvorigin { 1in } }
-     }
-  \cs_gset_eq:NN \__shipout_init_page_origins: \prg_do_nothing:
-}
-\cs_new:Npn \__shipout_picture_overlay:n #1 {
-    \__shipout_init_page_origins:
-    \kern -\c__shipout_horigin_tl \scan_stop:
-    \vbox_to_zero:n {
-      \kern -\c__shipout_vorigin_tl \scan_stop:
-      \unitlength 1pt \scan_stop:
-      \hbox_set_to_wd:Nnn \l__shipout_tmp_box \c_zero_dim
-                          { \ignorespaces #1 \hss }
-      \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
-      \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
-      \box_use:N \l__shipout_tmp_box
-      \tex_vss:D
-    }
-}
-\cs_new:Npn \__shipout_add_background_picture:n #1 {
-   \__shipout_add_background_box:n { \__shipout_picture_overlay:n {#1} }
-}
-\cs_new:Npn \__shipout_add_foreground_picture:n #1 {
-   \__shipout_add_foreground_box:n { \__shipout_picture_overlay:n {#1} }
-}
-\cs_new_protected:Npn \shipout_discard: {
-  \bool_gset_true:N \g__shipout_discard_bool
-}
-\int_new:N \g_shipout_readonly_int
-\cs_new_eq:NN \ReadonlyShipoutCounter  \g_shipout_readonly_int
-\int_new:N \g_shipout_totalpages_int
-\cs_new_eq:NN \c at totalpages \g_shipout_totalpages_int
-\cs_new:Npn \thetotalpages { \arabic{totalpages} }
-\xdef\@abspage at last{\number\maxdimen}
-\g at addto@macro \@kernel at after@enddocument {
-  \int_compare:nNnT \@abspage at last = \maxdimen
-    {
-      \xdef\@abspage at last{ \int_eval:n {\g_shipout_readonly_int + 1} }
-    }
-}
-\g at addto@macro \@kernel at after@enddocument at afterlastpage {
-  \int_compare:nNnF \g_shipout_readonly_int = 0
-    {
-     \if at filesw
-        \iow_now:Nx \@auxout {
-          \gdef\string\@abspage at last {\int_use:N \g_shipout_readonly_int}}
-     \fi
-      \bool_if:NF \g__shipout_lastpage_handled_bool
-         {
-          \bool_lazy_and:nnF
-            { \hook_if_empty_p:n {shipout/lastpage} }
-            { \tl_if_empty_p:N \@kernel at after@shipout at lastpage }
-            {
-              \tex_shipout:D\vbox to\textheight
-                {
-                  \hbox:n { \UseHook{shipout/lastpage}
-                            \@kernel at after@shipout at lastpage }
-                  \__shipout_excuse_extra_page:
-                  \null
-                }
-              \cs_gset_eq:NN \@extra at page@added \relax
-            }
-         }
-     }
-}
-\cs_new:Npn \__shipout_excuse_extra_page: {
-  \vfil
-  \begin{center}
-    \bfseries Temporary~ page!
-  \end{center}
-    \LaTeX{}~ was~ unable~ to~ guess~ the~ total~ number~ of~ pages~
-    correctly.~ ~ As~ there~ was~ some~ unprocessed~ data~ that~
-    should~ have~ been~ added~ to~ the~ final~ page~ this~ extra~
-    page~ has~ been~ added~ to~ receive~ it.
-    \par
-    If~ you~ rerun~ the~ document~ (without~ altering~ it)~ this~
-    surplus~ page~ will~ go~ away,~ because~ \LaTeX{}~ now~ knows~
-    how~ many~ pages~ to~ expect~ for~ this~ document.
-  \vfil
-}
-\def\PreviousTotalPages{0}
-\g at addto@macro\@kernel at before@begindocument
-  {\ifnum\@abspage at last<\maxdimen
-     \xdef\PreviousTotalPages{\@abspage at last}\fi}
-\cs_new_eq:NN \DiscardShipoutBox \shipout_discard:
-\cs_new_protected:Npn \AtBeginDvi {\__shipout_add_firstpage_material:Nn \AtBeginDvi}
-\cs_new_eq:NN \DebugShipoutsOn  \shipout_debug_on:
-\cs_new_eq:NN \DebugShipoutsOff \shipout_debug_off:
-\cs_set_eq:NN \@expl@@@shipout at add@firstpage at material@@Nn
-              \__shipout_add_firstpage_material:Nn
-\cs_set_eq:NN \@expl@@@shipout at add@background at box@@n
-              \__shipout_add_background_box:n
-\cs_set_eq:NN \@expl@@@shipout at add@foreground at box@@n
-              \__shipout_add_foreground_box:n
-\cs_set_eq:NN \@expl@@@shipout at add@background at picture@@n
-              \__shipout_add_background_picture:n
-\cs_set_eq:NN \@expl@@@shipout at add@foreground at picture@@n
-              \__shipout_add_foreground_picture:n
-\ExplSyntaxOff
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\shipout}{The hook management (shipout)}%
-\expandafter\let\expandafter\shipout\csname tex_shipout:D\endcsname
+\IncludeInRelease{2020/02/02}%
+                 {\fontseries}{delay fontseries update}%
 
-\let \ShipoutBox\@undefined
-\let \ReadonlyShipoutCounter \@undefined
-\let \c at totalpages \@undefined
-\let \thetotalpages \@undefined
+\DeclareRobustCommand\fontseries[1]{\@forced at seriesfalse\merge at font@series{#1}}
+\DeclareRobustCommand\fontseriesforce[1]{\@forced at seriestrue\edef\f at series{#1}}
+\let\delayed at f@adjustment\@undefined
 
-\let \DiscardShipoutBox \@undefined
-\let \DebugShipoutsOn \@undefined
-\let \DebugShipoutsOff \@undefined
+\ifx\@forced at seriestrue\@undefined \else
+  \expandafter\newif\csname if at forced@series\endcsname
+\fi
 
-\DeclareRobustCommand \AtBeginDvi [1]{%
-  \global \setbox \@begindvibox
-    \vbox{\unvbox \@begindvibox #1}%
-}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\fontseries}{delay fontseries update}%
 
-\let \AtBeginShipout \@undefined
-\let \AtBeginShipoutNext \@undefined
+\DeclareRobustCommand\fontseries[1]{\edef\f at series{#1}}
+\let\fontseriesforce\@undefined
 
-\let \AtBeginShipoutFirst \@undefined
-
-\let \ShipoutBoxHeight \@undefined
-\let \ShipoutBoxDepth \@undefined
-\let \ShipoutBoxWidth \@undefined
-
-\let \AtBeginShipoutDiscard \@undefined
-
-\let \AtBeginShipoutAddToBox \@undefined
-\let \AtBeginShipoutAddToBoxForeground \@undefined
-\let \AtBeginShipoutUpperLeft \@undefined
-\let \AtBeginShipoutUpperLeftForeground \@undefined
-
-
-\let  \AtEndDvi \@undefined
-
 \EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\AtEndDvi}{atenddvi emulation}%
-\ExplSyntaxOn
-\cs_new_protected:Npn \AtEndDvi {\AddToHook{shipout/lastpage}}
-\ExplSyntaxOff
-\disable at package@load{atenddvi}
-   {\PackageWarning{atenddvi}
-     {Functionality of this package is already\MessageBreak
-      provided by LaTeX.\MessageBreak\MessageBreak
-      It is there no longer necessary to load it\MessageBreak
-      and you can safely remove it.\MessageBreak
-      Found on}}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\AtEndDvi}{atenddvi emulation}%
-\let \AtEndDvi \@undefined
-\EndIncludeInRelease
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% From File: ltoutput.dtx
-\IncludeInRelease{2015/10/01}%
-                 {\bx at ZZ}{Extended float list}%
-\let\@elt\newinsert
-\ifx\numexpr\@undefined\else
-\def\reserved at a{%
-  \@elt\bx at S\@elt\bx at T\@elt\bx at U\@elt\bx at V
-  \@elt\bx at W\@elt\bx at X\@elt\bx at Y\@elt\bx at Z
-  \@elt\bx at AA\@elt\bx at BB\@elt\bx at CC\@elt\bx at DD\@elt\bx at EE
-  \@elt\bx at FF\@elt\bx at GG\@elt\bx at HH\@elt\bx at II\@elt\bx at JJ
-  \@elt\bx at KK\@elt\bx at LL\@elt\bx at MM\@elt\bx at NN
-  \@elt\bx at OO\@elt\bx at PP\@elt\bx at QQ\@elt\bx at RR
-  \@elt\bx at SS\@elt\bx at TT\@elt\bx at UU\@elt\bx at VV
-  \@elt\bx at WW\@elt\bx at XX\@elt\bx at YY\@elt\bx at ZZ}
-\reserved at a
-\def\@elt{\noexpand\@elt\noexpand}
-\edef\@freelist{\@freelist\reserved at a}
-\fi
-\let\reserved at a\relax
-\let\@elt\relax
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\bx at ZZ}{Extended float list}%
-\def\@freelist{%
-  \@elt\bx at A\@elt\bx at B\@elt\bx at C\@elt\bx at D\@elt\bx at E
-  \@elt\bx at F\@elt\bx at G\@elt\bx at H\@elt\bx at I\@elt\bx at J
-  \@elt\bx at K\@elt\bx at L\@elt\bx at M\@elt\bx at N
-  \@elt\bx at O\@elt\bx at P\@elt\bx at Q\@elt\bx at R}
-  \insc at unt=234
-\EndIncludeInRelease
-\IncludeInRelease{2017/04/15}%
-                 {\newpage}{Check depth of page}%
-\def \newpage {%
-  \if at noskipsec
-    \ifx \@nodocument\relax
-      \leavevmode
-      \global \@noskipsecfalse
-    \fi
-  \fi
-  \if at inlabel
-    \leavevmode
-    \global \@inlabelfalse
-  \fi
-  \if at nobreak \@nobreakfalse \everypar{}\fi
-  \par
-  \ifdim\prevdepth>\z@
-     \vskip -%
-       \ifdim\prevdepth>\maxdepth
-         \maxdepth
-       \else
-         \prevdepth
-       \fi
-  \fi
-  \vfil
-  \penalty -\@M}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\newpage}{Check depth of page}%
-\def \newpage {%
-  \if at noskipsec
-    \ifx \@nodocument\relax
-      \leavevmode
-      \global \@noskipsecfalse
-    \fi
-  \fi
-  \if at inlabel
-    \leavevmode
-    \global \@inlabelfalse
-  \fi
-  \if at nobreak \@nobreakfalse \everypar{}\fi
-  \par
-  \vfil
-  \penalty -\@M}
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\@testwrongwidth}{float order in 2-column}%
-\def\@testwrongwidth #1{%
-  \ifdim\dp#1=\f at depth
+\IncludeInRelease{2020/02/02}%
+   {\merge at font@series}{Merge series values}%
+\def\merge at font@series#1{%
+  \expandafter\expandafter\expandafter
+  \merge at font@series@
+    \csname series@\f at series @#1\endcsname
+    {#1}%
+    \@nil
+}
+\def\merge at font@series@#1#2#3\@nil{%
+  \def\reserved at a{#3}%
+  \ifx\reserved at a\@empty
+    \set at target@series{#2}%
   \else
-    \global\@testtrue
-  \fi}%
-\let\f at depth\z@
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@testwrongwidth}{float order in 2-column}%
-\let\@testwrongwidth\@undefined
-\let\f at depth\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}{\@doclearpage}%
-                             {float order in 2-column}%
-\def \@doclearpage {%
-     \ifvoid\footins
-       \ifvbox\@kludgeins
-         {\setbox \@tempboxa \box \@kludgeins}%
-       \fi
-       \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa
-       \setbox\@tempboxa\box\@cclv
-       \xdef\@deferlist{\@toplist\@botlist\@deferlist}%
-       \global \let \@toplist \@empty
-       \global \let \@botlist \@empty
-       \global \@colroom \@colht
-       \ifx \@currlist\@empty
+    \edef\reserved at a{\f at encoding /\f at family /#1/\f at shape}%
+     \ifcsname \reserved at a \endcsname
+       \set at target@series{#1}%
+    \else
+       \ifcsname \f at encoding /\f at family /#2/\f at shape \endcsname
+         \set at target@series{#2}%
+         \@font at shape@subst at warning
        \else
-          \@latexerr{Float(s) lost}\@ehb
-          \global \let \@currlist \@empty
+         \set at target@series{#3}%
+         \@font at shape@subst at warning
        \fi
-       \@makefcolumn\@deferlist
-       \@whilesw\if at fcolmade \fi{\@opcol\@makefcolumn\@deferlist}%
-       \if at twocolumn
-         \if at firstcolumn
-           \xdef\@deferlist{\@dbltoplist\@deferlist}%
-           \global \let \@dbltoplist \@empty
-           \global \@colht \textheight
-           \begingroup
-              \@dblfloatplacement
-              \@makefcolumn\@deferlist
-              \@whilesw\if at fcolmade \fi{\@outputpage
-                                        \@makefcolumn\@deferlist}%
-           \endgroup
-         \else
-           \vbox{}\clearpage
-         \fi
-       \fi
-       \ifx\@deferlist\@empty \else\clearpage \fi
-     \else
-       \setbox\@cclv\vbox{\box\@cclv\vfil}%
-       \@makecol\@opcol
-       \clearpage
-     \fi
-}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}{\@doclearpage}%
-                             {float order in 2-column}%
-\def \@doclearpage {%
-     \ifvoid\footins
-       \ifvbox\@kludgeins
-         {\setbox \@tempboxa \box \@kludgeins}%
-       \fi
-       \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa
-       \setbox\@tempboxa\box\@cclv
-       \xdef\@deferlist{\@toplist\@botlist\@deferlist}%
-       \global \let \@toplist \@empty
-       \global \let \@botlist \@empty
-       \global \@colroom \@colht
-       \ifx \@currlist\@empty
-       \else
-          \@latexerr{Float(s) lost}\@ehb
-          \global \let \@currlist \@empty
-       \fi
-       \@makefcolumn\@deferlist
-       \@whilesw\if at fcolmade \fi
-                     {\@opcol\@makefcolumn\@deferlist}%
-       \if at twocolumn
-         \if at firstcolumn
-           \xdef\@dbldeferlist{\@dbltoplist\@dbldeferlist}%
-           \global \let \@dbltoplist \@empty
-           \global \@colht \textheight
-           \begingroup
-              \@dblfloatplacement
-              \@makefcolumn\@dbldeferlist
-              \@whilesw\if at fcolmade \fi
-                    {\@outputpage\@makefcolumn\@dbldeferlist}%
-           \endgroup
-         \else
-           \vbox{}\clearpage
-         \fi
-       \fi
-     \else
-       \setbox\@cclv\vbox{\box\@cclv\vfil}%
-       \@makecol\@opcol
-       \clearpage
-     \fi
-  }%
-\EndIncludeInRelease
-\IncludeInRelease{2017/04/15}%
-  {\@outputpage}{Reset language for hyphenation}%
-\def\@outputpage{%
-\begingroup
-  \let \protect \noexpand
-  \language\document at default@language
-  \@resetactivechars
-  \global\let\@@if at newlist\if at newlist
-  \global\@newlistfalse
-  \@parboxrestore
-  \shipout \vbox{%
-    \set at typeset@protect
-    \aftergroup \endgroup
-    \aftergroup \set at typeset@protect
-  \if at specialpage
-    \global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
-  \fi
-  \if at twoside
-    \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
-         \let\@themargin\oddsidemargin
-    \else \let\@thehead\@evenhead
-       \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
     \fi
   \fi
-  \reset at font
-  \normalsize
-  \normalsfcodes
-  \let\label\@gobble
-  \let\index\@gobble
-  \let\glossary\@gobble
-  \baselineskip\z at skip \lineskip\z at skip \lineskiplimit\z@
-    \@begindvi
-    \vskip \topmargin
-    \moveright\@themargin \vbox {%
-      \setbox\@tempboxa \vbox to\headheight{%
-        \vfil
-        \color at hbox
-          \normalcolor
-          \hb at xt@\textwidth{\@thehead}%
-        \color at endbox
-        }%
-      \dp\@tempboxa \z@
-      \box\@tempboxa
-      \vskip \headsep
-      \box\@outputbox
-      \baselineskip \footskip
-      \color at hbox
-        \normalcolor
-        \hb at xt@\textwidth{\@thefoot}%
-      \color at endbox
-      }%
-    }%
-  \global\let\if at newlist\@@if at newlist
-  \global \@colht \textheight
-  \stepcounter{page}%
-  \let\firstmark\botmark
 }
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-  {\@outputpage}{Reset language for hyphenation}%
-\def\@outputpage{%
-\begingroup
-  \let \protect \noexpand
-  \@resetactivechars
-  \global\let\@@if at newlist\if at newlist
-  \global\@newlistfalse
-  \@parboxrestore
-  \shipout \vbox{%
-    \set at typeset@protect
-    \aftergroup \endgroup
-    \aftergroup \set at typeset@protect
-  \if at specialpage
-    \global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
-  \fi
-  \if at twoside
-    \ifodd\count\z@
-         \let\@thehead\@oddhead \let\@thefoot\@oddfoot
-         \let\@themargin\oddsidemargin
-    \else \let\@thehead\@evenhead
-       \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
-    \fi
-  \fi
-  \reset at font
-  \normalsize
-  \normalsfcodes
-  \let\label\@gobble
-  \let\index\@gobble
-  \let\glossary\@gobble
-  \baselineskip\z at skip \lineskip\z at skip \lineskiplimit\z@
-    \@begindvi
-    \vskip \topmargin
-    \moveright\@themargin \vbox {%
-      \setbox\@tempboxa \vbox to\headheight{%
-        \vfil
-        \color at hbox
-          \normalcolor
-          \hb at xt@\textwidth{\@thehead}%
-        \color at endbox
-        }%
-      \dp\@tempboxa \z@
-      \box\@tempboxa
-      \vskip \headsep
-      \box\@outputbox
-      \baselineskip \footskip
-      \color at hbox
-        \normalcolor
-        \hb at xt@\textwidth{\@thefoot}%
-      \color at endbox
-      }%
-    }%
-  \global\let\if at newlist\@@if at newlist
-  \global \@colht \textheight
-  \stepcounter{page}%
-  \let\firstmark\botmark
+\def\@font at shape@subst at warning{%
+   \edef\reserved at b{\curr at fontshape}%
+   \ifx\reserved at a\reserved at b \else
+     \@font at warning{Font shape `\reserved at a' undefined\MessageBreak
+                    using `\reserved at b' instead}%
+   \fi
 }
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-  {\@startdblcolumn}{float order in 2-column}%
-\def \@startdblcolumn {%
-  \@tryfcolumn \@deferlist
-  \if at fcolmade
+\def\merge at font@series at without@substitution#1{%
+  \expandafter\expandafter\expandafter
+  \merge at font@series at without@substitution@
+    \csname series@\f at series @#1\endcsname
+    {#1}%
+    \@nil
+}
+\def\merge at font@series at without@substitution@#1#2#3\@nil{%
+  \def\reserved at a{#3}%
+  \ifx\reserved at a\@empty
+    \set at target@series{#2}%
   \else
-    \begingroup
-      \let \reserved at b \@deferlist
-      \global \let \@deferlist \@empty
-      \let \@elt \@sdblcolelt
-      \reserved at b
-    \endgroup
+    \set at target@series{#1}%
   \fi
-}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-  {\@startdblcolumn}{float order in 2-column}%
-\def \@startdblcolumn {%
-% \global \@colht \textheight
-  \@tryfcolumn \@dbldeferlist
-  \if at fcolmade
+}
+\let\delayed at merge@font at series\merge at font@series at without@substitution
+\def\maybe at load@fontshape{%
+  \begingroup
+    \let \typeout \@font at info
+    \try at load@fontshape
+  \endgroup}
+\def\set at target@series#1{%
+    \edef\f at series{#1}%
+    \series at maybe@drop at one@m\f at series\f at series
+}
+\def\series at maybe@drop at one@m#1{%
+  \expandafter\series at maybe@drop at one@m at x\expandafter{#1}}
+
+\def\series at maybe@drop at one@m at x#1#2{%
+  \def\in@@##1,#1,{}%
+  \series at check@toks\expandafter{\in@@
+    ,ulm,elm,lm,slm,mm,sbm,bm,ebm,ubm,muc,mec,mc,msc,msx,mx,mex,mux,{}{},#1,}%
+  \edef\in@@{\the\series at check@toks}%
+  \ifx\in@@\@empty
+    \edef#2{#1}%
   \else
-    \begingroup
-      \let \reserved at b \@dbldeferlist
-      \global \let \@dbldeferlist \@empty
-      \let \@elt \@sdblcolelt
-      \reserved at b
-    \endgroup
+    \edef#2{\expandafter\series at drop@one at m #1m\series at drop@one at m}%
   \fi
-}%
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}{\@xtryfc}%
-                             {float order in 2-column}%
-\def\@xtryfc #1{%
-  \@next\reserved at a\@trylist{}{}%
-  \@currtype \count #1%
-  \divide\@currtype\@xxxii
-  \multiply\@currtype\@xxxii
-  \@bitor \@currtype \@failedlist
-  \@testfp #1%
-  \@testwrongwidth #1%
-  \ifdim \ht #1>\@colht
-     \@testtrue
-  \fi
-  \if at test
-    \@cons\@failedlist #1%
-  \else
-    \@ytryfc #1%
-  \fi}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}{\@xtryfc}%
-                             {float order in 2-column}%
-\def\@xtryfc #1{%
-  \@next\reserved at a\@trylist{}{}%
-  \@currtype \count #1%
-  \divide\@currtype\@xxxii
-  \multiply\@currtype\@xxxii
-  \@bitor \@currtype \@failedlist
-  \@testfp #1%
-  \ifdim \ht #1>\@colht
-    \@testtrue
-  \fi
-  \if at test
-    \@cons\@failedlist #1%
-  \else
-    \@ytryfc #1%
-  \fi}%
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}{@ztryfc}%
-                             {float order in 2-column}%
-\def\@ztryfc #1{%
-  \@tempcnta\count #1%
-  \divide\@tempcnta\@xxxii
-  \multiply\@tempcnta\@xxxii
-  \@bitor \@tempcnta {\@failedlist \@flfail}%
-  \@testfp #1%
-  \@testwrongwidth #1%
-  \@tempdimb\@tempdima
-  \advance\@tempdimb\ht #1%
-  \advance\@tempdimb\@fpsep
-  \ifdim \@tempdimb >\@colht
-    \@testtrue
-  \fi
-  \if at test
-    \@cons\@flfail #1%
-  \else
-    \@cons\@flsucceed #1%
-    \@tempdima\@tempdimb
-  \fi}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}{@ztryfc}%
-                             {float order in 2-column}%
-\def\@ztryfc #1{%
-  \@tempcnta \count#1%
-  \divide\@tempcnta\@xxxii
-  \multiply\@tempcnta\@xxxii
-  \@bitor \@tempcnta {\@failedlist \@flfail}%
-  \@testfp #1%
-  \@tempdimb\@tempdima
-  \advance\@tempdimb \ht#1%
-  \advance\@tempdimb\@fpsep
-  \ifdim \@tempdimb >\@colht
-    \@testtrue
-  \fi
-  \if at test
-    \@cons\@flfail #1%
-  \else
-    \@cons\@flsucceed #1%
-    \@tempdima\@tempdimb
-  \fi}%
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-  {\@addtocurcol}{float order in 2-column}%
-\def \@addtocurcol {%
-   \@insertfalse
-   \@setfloattypecounts
-   \ifnum \@fpstype=8
-   \else
-     \ifnum \@fpstype=24
-     \else
-       \@flsettextmin
-       \advance \@textmin \@textfloatsheight
-       \@reqcolroom \@pageht
-       \ifdim \@textmin>\@reqcolroom
-         \@reqcolroom \@textmin
-       \fi
-       \advance \@reqcolroom \ht\@currbox
-       \ifdim \@colroom>\@reqcolroom
-         \@flsetnum \@colnum
-         \ifnum \@colnum>\z@
-           \@bitor\@currtype\@deferlist
-          \@testwrongwidth\@currbox
-           \if at test
-           \else
-             \@bitor\@currtype\@botlist
-             \if at test
-               \@addtobot
-             \else
-               \ifodd \count\@currbox
-                 \advance \@reqcolroom \intextsep
-                 \ifdim \@colroom>\@reqcolroom
-                   \global \advance \@colnum \m at ne
-                   \global \advance \@textfloatsheight \ht\@currbox
-                   \global \advance \@textfloatsheight 2\intextsep
-                   \@cons \@midlist \@currbox
-                   \if at nobreak
-                     \nobreak
-                     \@nobreakfalse
-                     \everypar{}%
-                   \else
-                     \addpenalty \interlinepenalty
-                   \fi
-                   \vskip \intextsep
-                   \box\@currbox
-                   \penalty\interlinepenalty
-                   \vskip\intextsep
-                   \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
-                   \outputpenalty \z@
-                   \@inserttrue
-                 \fi
-               \fi
-               \if at insert
-               \else
-                 \@addtotoporbot
-               \fi
-             \fi
-           \fi
-         \fi
-       \fi
-     \fi
-   \fi
-   \if at insert
-   \else
-     \@resethfps
-     \@cons\@deferlist\@currbox
-   \fi
-}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-  {\@addtocurcol}{float order in 2-column}%
-\def \@addtocurcol {%
-   \@insertfalse
-   \@setfloattypecounts
-   \ifnum \@fpstype=8
-   \else
-     \ifnum \@fpstype=24
-     \else
-       \@flsettextmin
-       \advance \@textmin \@textfloatsheight
-       \@reqcolroom \@pageht
-       \ifdim \@textmin>\@reqcolroom
-         \@reqcolroom \@textmin
-       \fi
-       \advance \@reqcolroom \ht\@currbox
-       \ifdim \@colroom>\@reqcolroom
-         \@flsetnum \@colnum
-         \ifnum \@colnum>\z@
-           \@bitor\@currtype\@deferlist
-           \if at test
-           \else
-             \@bitor\@currtype\@botlist
-             \if at test
-               \@addtobot
-             \else
-               \ifodd \count\@currbox
-                 \advance \@reqcolroom \intextsep
-                 \ifdim \@colroom>\@reqcolroom
-                  \global \advance \@colnum \m at ne
-                  \global \advance
-                   \@textfloatsheight\ht\@currbox
-                  \global \advance
-                   \@textfloatsheight 2\intextsep
-                   \@cons \@midlist \@currbox
-                   \if at nobreak
-                     \nobreak
-                     \@nobreakfalse
-                     \everypar{}%
-                   \else
-                     \addpenalty\interlinepenalty
-                   \fi
-                   \vskip \intextsep
-                   \box\@currbox
-                   \penalty\interlinepenalty
-                   \vskip\intextsep
-                   \ifnum\outputpenalty
-                               <-\@Mii \vskip
-                        -\parskip\fi
-                   \outputpenalty \z@
-                   \@inserttrue
-                 \fi
-               \fi
-               \if at insert
-               \else
-                 \@addtobot
-               \fi
-             \fi
-           \fi
-         \fi
-       \fi
-     \fi
-   \fi
-   \if at insert
-   \else
-     \@resethfps
-     \@cons\@deferlist\@currbox
-   \fi
-  }%
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}
-  {\@addtonextcol}{float order in 2-column}%
-\def\@addtonextcol{%
-  \begingroup
-   \@insertfalse
-   \@setfloattypecounts
-   \ifnum \@fpstype=8
-   \else
-     \ifnum \@fpstype=24
-     \else
-       \@flsettextmin
-       \@reqcolroom \ht\@currbox
-       \advance \@reqcolroom \@textmin
-       \ifdim \@colroom>\@reqcolroom
-         \@flsetnum \@colnum
-         \ifnum\@colnum>\z@
-            \@bitor\@currtype\@deferlist
-            \@testwrongwidth\@currbox
-            \if at test
-            \else
-              \@addtotoporbot
-            \fi
-         \fi
-       \fi
-     \fi
-   \fi
-   \if at insert
-   \else
-     \@cons\@deferlist\@currbox
-   \fi
-  \endgroup
-}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-  {\@addtonextcol}{float order in 2-column}%
-\def\@addtonextcol{%
-  \begingroup
-   \@insertfalse
-   \@setfloattypecounts
-   \ifnum \@fpstype=8
-   \else
-     \ifnum \@fpstype=24
-     \else
-       \@flsettextmin
-       \@reqcolroom \ht\@currbox
-       \advance \@reqcolroom \@textmin
-       \ifdim \@colroom>\@reqcolroom
-         \@flsetnum \@colnum
-         \ifnum\@colnum>\z@
-            \@bitor\@currtype\@deferlist
-            \if at test
-            \else
-              \@addtotoporbot
-            \fi
-         \fi
-       \fi
-     \fi
-   \fi
-   \if at insert
-   \else
-     \@cons\@deferlist\@currbox
-   \fi
-  \endgroup
-}%
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-  {\@addtodblcol}{float order in 2-column}%
-\def\@addtodblcol{%
-  \begingroup
-   \@insertfalse
-   \@setfloattypecounts
-   \@getfpsbit \tw@
-   \ifodd\@tempcnta
-     \@flsetnum \@dbltopnum
-     \ifnum \@dbltopnum>\z@
-       \@tempswafalse
-       \ifdim \@dbltoproom>\ht\@currbox
-         \@tempswatrue
-       \else
-         \ifnum \@fpstype<\sixt@@n
-           \advance \@dbltoproom \@textmin
-           \ifdim \@dbltoproom>\ht\@currbox
-             \@tempswatrue
-           \fi
-           \advance \@dbltoproom -\@textmin
-         \fi
-       \fi
-       \if at tempswa
-           \@bitor \@currtype \@deferlist
-          \@testwrongwidth\@currbox
-           \if at test
-           \else
-              \@tempdima -\ht\@currbox
-              \advance\@tempdima
-                -\ifx \@dbltoplist\@empty \dbltextfloatsep \else
-                                          \dblfloatsep \fi
-              \global \advance \@dbltoproom \@tempdima
-              \global \advance \@colht \@tempdima
-              \global \advance \@dbltopnum \m at ne
-              \@cons \@dbltoplist \@currbox
-              \@inserttrue
-           \fi
-       \fi
-     \fi
-   \fi
-   \if at insert
-   \else
-     \@cons\@deferlist\@currbox
-   \fi
-  \endgroup
-}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-  {\@addtodblcol}{float order in 2-column}%
-\def\@addtodblcol{%
-  \begingroup
-   \@insertfalse
-   \@setfloattypecounts
-   \@getfpsbit \tw@
-   \ifodd\@tempcnta
-     \@flsetnum \@dbltopnum
-     \ifnum \@dbltopnum>\z@
-       \@tempswafalse
-       \ifdim \@dbltoproom>\ht\@currbox
-         \@tempswatrue
-       \else
-         \ifnum \@fpstype<\sixt@@n
-           \advance \@dbltoproom \@textmin
-           \ifdim \@dbltoproom>\ht\@currbox
-             \@tempswatrue
-           \fi
-           \advance \@dbltoproom -\@textmin
-         \fi
-       \fi
-       \if at tempswa
-           \@bitor \@currtype \@dbldeferlist
-           \if at test
-           \else
-              \@tempdima -\ht\@currbox
-              \advance\@tempdima
-                -\ifx \@dbltoplist\@empty
-                      \dbltextfloatsep
-                 \else \dblfloatsep \fi
-              \global \advance \@dbltoproom \@tempdima
-              \global \advance \@colht \@tempdima
-              \global \advance \@dbltopnum \m at ne
-              \@cons \@dbltoplist \@currbox
-              \@inserttrue
-           \fi
-       \fi
-     \fi
-   \fi
-   \if at insert
-   \else
-     \@cons\@dbldeferlist\@currbox
-   \fi
-  \endgroup
-}%
-\EndIncludeInRelease
-\IncludeInRelease{2017/01/01}%
-  {\@makefcolumn}{negative height floats}%
-\def\@makefcolumn #1{%
-  \begingroup
-    \@fpmin -\maxdimen
-    \let \@testfp \@gobble
-    \@tryfcolumn #1%
-  \endgroup
 }
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-  {\@makefcolumn}{negative height floats}%
-\def\@makefcolumn #1{%
-  \begingroup
-    \@fpmin \z@
-    \let \@testfp \@gobble
-    \@tryfcolumn #1%
-  \endgroup
+\newtoks\series at check@toks
+\def\series at drop@one at m#1m#2m#3\series at drop@one at m{%
+   #1#2%
 }
 \EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-  {\@outputdblcol}{2 column marks}%
-\def\@outputdblcol{%
-  \if at firstcolumn
-    \global\@firstcolumnfalse
-    \global\setbox\@leftcolumn\copy\@outputbox
-    \splitmaxdepth\maxdimen
-    \vbadness\maxdimen
-     \setbox\@outputbox\vbox{\unvbox\@outputbox\unskip}%
-     \setbox\@outputbox\vsplit\@outputbox to\maxdimen
-    \toks@\expandafter{\topmark}%
-    \xdef\@firstcoltopmark{\the\toks@}%
-    \toks@\expandafter{\splitfirstmark}%
-    \xdef\@firstcolfirstmark{\the\toks@}%
-    \ifx\@firstcolfirstmark\@empty
-      \global\let\@setmarks\relax
-    \else
-      \gdef\@setmarks{%
-        \let\firstmark\@firstcolfirstmark
-        \let\topmark\@firstcoltopmark}%
-    \fi
-  \else
-    \global\@firstcolumntrue
-    \setbox\@outputbox\vbox{%
-     \hb at xt@\textwidth{%
-        \hb at xt@\columnwidth{\box\@leftcolumn \hss}%
-        \hfil
-        {\normalcolor\vrule \@width\columnseprule}%
-        \hfil
-       \hb at xt@\columnwidth{\box\@outputbox \hss}}}%
-  \@combinedblfloats
-    \@setmarks
-    \@outputpage
-    \begingroup
-      \@dblfloatplacement
-      \@startdblcolumn
-      \@whilesw\if at fcolmade \fi{\@outputpage
-     \@startdblcolumn}%
-    \endgroup
-  \fi}%
-\EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-  {\@outputdblcol}{2 column marks}%
-\def\@outputdblcol{%
-  \if at firstcolumn
-    \global \@firstcolumnfalse
-    \global \setbox\@leftcolumn \box\@outputbox
-  \else
-    \global \@firstcolumntrue
-    \setbox\@outputbox \vbox {%
-                         \hb at xt@\textwidth {%
-                           \hb at xt@\columnwidth {%
-                             \box\@leftcolumn \hss}%
-                           \hfil
-                           {\normalcolor\vrule
-                               \@width\columnseprule}%
-                           \hfil
-                           \hb at xt@\columnwidth {%
-                             \box\@outputbox \hss}%
-                                             }%
-                              }%
-    \@combinedblfloats
-    \@outputpage
-    \begingroup
-      \@dblfloatplacement
-      \@startdblcolumn
-      \@whilesw\if at fcolmade \fi
-        {\@outputpage
-         \@startdblcolumn}%
-    \endgroup
-  \fi
-}%
-\EndIncludeInRelease
-%%% From File: ltclass.dtx
+   {\merge at font@series}{Merge series values}%
 
-\IncludeInRelease{2020/10/01}{\@pushfilename}%
-  {Add \@expl at push@filename@@ and \@expl at push@filename at aux@@}%
-\def\@pushfilename{%
-  \@expl@@@hook at curr@name at push@@n{}%
-  \@expl at push@filename@@
-  \xdef\@currnamestack{%
-    {\@currname}%
-    {\@currext}%
-    {\the\catcode`\@}%
-    \@currnamestack}%
-  \@expl at push@filename at aux@@}
-\EndIncludeInRelease
+\let\merge at font@series\@undefined
+\let\merge at font@series@\@undefined
+\let\@font at shape@subst at warning\@undefined
+\let\merge at font@series at without@substitution\@undefined
+\let\merge at font@series at without@substitution@\@undefined
+\let\delayed at merge@font at series\@undefined
+\let\maybe at load@fontshape\@undefined
+\let\set at target@series\@undefined
+\let\series at maybe@drop at one@m\@undefined
+\let\series at drop@one at m\@undefined
 
-\IncludeInRelease{2020/02/02}{\@pushfilename}%
-  {Add \@expl at push@filename@@}%
-\def\@pushfilename{%
-  \@expl at push@filename@@
-  \xdef\@currnamestack{%
-    {\@currname}%
-    {\@currext}%
-    {\the\catcode`\@}%
-    \@currnamestack}%
-    \@expl at push@filename at aux@@}
 \EndIncludeInRelease
 
-\IncludeInRelease{0000/00/00}{\@pushfilename}%
-  {Add \@expl at push@filename@@ and \@expl at push@filename at aux@@}%
-\def\@pushfilename{%
-  \xdef\@currnamestack{%
-    {\@currname}%
-    {\@currext}%
-    {\the\catcode`\@}%
-    \@currnamestack}}
+\IncludeInRelease{2020/02/02}%
+   {\DeclareFontShapeChangeRule}{Font shape change rules}%
+\def\DeclareFontShapeChangeRule #1#2#3#4{%
+  \@namedef{shape@#1@#2}{{#3}{#4}}}
+\DeclareRobustCommand\ulcshape
+        {\not at math@alphabet\ulcshape\relax
+         \fontshape\ulcdefault\selectfont}
+\let\ulcdefault\@undefined      % for rollback
+\newcommand\ulcdefault{ulc}
+\DeclareRobustCommand\swshape
+        {\not at math@alphabet\swshape\relax
+         \fontshape\swdefault\selectfont}
+\let\swdefault\@undefined      % for rollback
+\newcommand\swdefault{sw}
+\DeclareRobustCommand\sscshape
+        {\not at math@alphabet\sscshape\relax
+         \fontshape\sscdefault\selectfont}
+\let\sscdefault\@undefined      % for rollback
+\newcommand\sscdefault{ssc}
+\DeclareFontShapeChangeRule {n}{it}  {it}  {sl}
+\DeclareFontShapeChangeRule {n}{sl}  {sl}  {it}
+\DeclareFontShapeChangeRule {n}{ulc} {n}   {}
+\DeclareFontShapeChangeRule {n}{up} {n}    {}
+\DeclareFontShapeChangeRule {it}{sl}  {sl}    {it}
+\DeclareFontShapeChangeRule {it}{sc}  {scit}  {scsl}
+\DeclareFontShapeChangeRule {it}{ulc} {it}    {}
+\DeclareFontShapeChangeRule {it}{up} {n}      {}
+\DeclareFontShapeChangeRule {sl}{it}  {it}    {sl}
+\DeclareFontShapeChangeRule {sl}{sc}  {scsl}  {scit}
+\DeclareFontShapeChangeRule {sl}{ulc} {sl}    {}
+\DeclareFontShapeChangeRule {sl}{up} {n}      {}
+\DeclareFontShapeChangeRule {sc}{it}  {scit}  {scsl}
+\DeclareFontShapeChangeRule {sc}{sl}  {scsl}  {scit}
+\DeclareFontShapeChangeRule {sc}{sw}  {scsw}  {sw}
+\DeclareFontShapeChangeRule {sc}{ulc} {n}     {}
+\DeclareFontShapeChangeRule {sc}{up} {n}     {}
+\DeclareFontShapeChangeRule {scit}{it}  {scit}  {}
+\DeclareFontShapeChangeRule {scit}{sl}  {scsl}  {scit}
+\DeclareFontShapeChangeRule {scit}{sw}  {scsw}  {sc}    % or scit?
+\DeclareFontShapeChangeRule {scit}{sc}  {scit}  {}
+\DeclareFontShapeChangeRule {scit}{ulc} {it}    {}
+\DeclareFontShapeChangeRule {scit}{up} {sc}     {}
+\DeclareFontShapeChangeRule {scsl}{it}  {scit}  {scsl}
+\DeclareFontShapeChangeRule {scsl}{sl}  {scsl}  {}
+\DeclareFontShapeChangeRule {scsl}{sw}  {scsw}  {sc}    % or scsl?
+\DeclareFontShapeChangeRule {scsl}{sc}  {scsl}  {}
+\DeclareFontShapeChangeRule {scsl}{ulc} {sl}    {}
+\DeclareFontShapeChangeRule {scsl}{up}   {sc}   {}
+\DeclareFontShapeChangeRule {scsw}{it}  {scit}  {scsw}
+\DeclareFontShapeChangeRule {scsw}{sl}  {scsl}  {}
+\DeclareFontShapeChangeRule {scsw}{sw}  {scsw}  {}
+\DeclareFontShapeChangeRule {scsw}{sc}  {scsw}  {}
+\DeclareFontShapeChangeRule {scsw}{ulc} {sw}    {}
+\DeclareFontShapeChangeRule {scsw}{up} {sc}     {}
+\DeclareFontShapeChangeRule {sw}{sc}  {scsw}  {}
+\DeclareFontShapeChangeRule {sw}{ulc} {sw}    {}
+\DeclareFontShapeChangeRule {sw}{up} {n}      {}
 \EndIncludeInRelease
-\@onlypreamble\@pushfilename
+\IncludeInRelease{0000/00/00}%
+   {\DeclareFontShapeChangeRule}{Font shape change rules}%
 
-\IncludeInRelease{2020/10/01}{\@popfilename}%
-  {Add \@expl at pop@filename@@}%
-\def\@popfilename{\@expl@@@hook at curr@name at pop@@
-  \expandafter\@p at pfilename\@currnamestack\@nil
-  \@expl at pop@filename@@}
-\EndIncludeInRelease
+\let\DeclareFontShapeChangeRule\@undefined
+\let\ulcshape\@undefined
+\let\ulcdefault\@undefined
+\let\swshape\@undefined
+\let\swdefault\@undefined
+\let\sscshape\@undefined
+\let\sscdefault\@undefined
 
-\IncludeInRelease{2020/02/02}{\@popfilename}%
-  {Add \@expl at push@filename@@}%
-\def\@popfilename{\expandafter\@p at pfilename\@currnamestack\@nil
-  \@expl at pop@filename@@}
 \EndIncludeInRelease
-
-\IncludeInRelease{0000/00/00}{\@popfilename}%
-  {Add \@expl at push@filename@@ and \@expl at push@filename at aux@@}%
-\def\@popfilename{\expandafter\@p at pfilename\@currnamestack\@nil}
+\IncludeInRelease{2021/05/01}%
+   {\fontshape}{Font shape change}%
+\DeclareRobustCommand\fontshape[1]
+   {\expandafter\def\expandafter\delayed at f@adjustment\expandafter
+        {\delayed at f@adjustment\delayed at merge@font at shape{#1}}}
+\DeclareRobustCommand\fontshapeforce[1]
+   {\expandafter\def\expandafter\delayed at f@adjustment\expandafter
+        {\delayed at f@adjustment\edef\f at shape{#1}}}
 \EndIncludeInRelease
-\@onlypreamble\@popfilename
-\IncludeInRelease{2020/10/01}%
-                 {\IfFormatAtLeastTF}{Test format date}%
-\def\IfFormatAtLeastTF{\@ifl at t@r\fmtversion}
-\let\IfPackageAtLeastTF\@ifpackagelater
-\let\IfClassAtLeastTF\@ifclasslater
-\@onlypreamble\IfFormatAtLeastTF
-\@onlypreamble\IfPackageAtLeastTF
-\@onlypreamble\IfClassAtLeastTF
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\IfFormatAtLeastTF}{Test format date}%
-\def\IfFormatAtLeastTF{\@ifl at t@r\fmtversion}
-\let\IfPackageAtLeastTF\@ifpackagelater
-\let\IfClassAtLeastTF\@ifclasslater
-\EndIncludeInRelease
-\IncludeInRelease{2018/04/01}%
-                 {\@ifl at t@r}{Guard against bad input}%
-\def\@ifl at t@r#1#2{%
-  \ifnum\expandafter\@parse at version@#1//00\@nil<%
-        \expandafter\@parse at version@#2//00\@nil
-    \expandafter\@secondoftwo
-  \else
-    \expandafter\@firstoftwo
-  \fi}
-\def\@parse at version@#1{\@parse at version0#1}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@ifl at t@r}{Guard against bad input}%
-\def\@ifl at t@r#1#2{%
-  \ifnum\expandafter\@parse at version#1//00\@nil<%
-        \expandafter\@parse at version#2//00\@nil
-    \expandafter\@secondoftwo
-  \else
-    \expandafter\@firstoftwo
-  \fi}
-\let\@parse at version@\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2017/01/01}%
-                 {\@if at pti@ns}{Spaces in option clash check}%
-\def\@if at pti@ns#1#2{%
- \let\reserved at a\@firstoftwo
- \edef\reserved at b{\zap at space#2 \@empty}%
- \@for\reserved at b:=\reserved at b\do{%
-   \ifx\reserved at b\@empty
-   \else
-     \expandafter\in@\expandafter{\expandafter,\reserved at b,}{,#1,}%
-     \ifin@
-     \else
-       \let\reserved at a\@secondoftwo
-     \fi
-   \fi
- }%
- \reserved at a}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@if at pti@ns}{Spaces in option clash check}%
-\def\@if at pti@ns#1#2{%
- \let\reserved at a\@firstoftwo
- \@for\reserved at b:=#2\do{%
-  \ifx\reserved at b\@empty
-   \else
-   \expandafter\in@\expandafter
-                   {\expandafter,\reserved at b,}{,#1,}%
-    \ifin@
-    \else
-     \let\reserved at a\@secondoftwo
-    \fi
-  \fi
- }%
- \reserved at a}
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\@pr at videpackage}{Allow for package subsitution}%
-\def\@pr at videpackage[#1]{%
-  \expandafter\protected at xdef                %     <-- protected...
-     \csname ver@\@currname.\@currext\endcsname{#1}% Loaded package
-  \expandafter\let
-    \csname ver@\@currpkg at reqd\expandafter\endcsname % Requested package
-    \csname ver@\@currname.\@currext\endcsname
-  \ifx\@currext\@clsextension
-    \typeout{Document Class: \@gtempa\space#1}%
-  \else
-    \protected at wlog{Package: \@gtempa\space#1}%   <--- protected
-  \fi}
-\long\def\protected at wlog#1{\begingroup
-  \set at display@protect
-  \immediate \write \m at ne {#1}\endgroup }
-\EndIncludeInRelease
 \IncludeInRelease{2020/02/02}%
-                 {\@pr at videpackage}{Protection for package info}%
+   {\fontshape}{Font shape change}%
 
-\def\@pr at videpackage[#1]{%
-  \expandafter\protected at xdef                %     <-- protected...
-     \csname ver@\@currname.\@currext\endcsname{#1}%
-\ifx\@currext\@clsextension
-    \typeout{Document Class: \@gtempa\space#1}%
-  \else
-    \protected at wlog{Package: \@gtempa\space#1}%   <--- protected
-  \fi}
+\DeclareRobustCommand\fontshape[1]{\merge at font@shape{#1}}
+\DeclareRobustCommand\fontshapeforce[1]{\edef\f at shape{#1}}
 
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\@pr at videpackage}{Protection for package info}%
+   {\fontshape}{Font shape change}%
 
-\def\@pr at videpackage[#1]{%
-  \expandafter\xdef\csname ver@\@currname.\@currext\endcsname{#1}%
-  \ifx\@currext\@clsextension
-    \typeout{Document Class: \@gtempa\space#1}%
-  \else
-    \wlog{Package: \@gtempa\space#1}%
-  \fi}
-\let\protected at wlog\@undefined
+\DeclareRobustCommand\fontshape [1]{\edef\f at shape{#1}}
+\let\fontshapeforce\@undefined
 
 \EndIncludeInRelease
-\IncludeInRelease{2020/10/01}{\@pass at ptions}
-  {Add file replacement in \@pass at ptions}%
-\def\@pass at ptions#1#2#3{%
-  \@expl@@@filehook at set@curr at file@@nNN
-    {\@expl@@@filehook at resolve@file at subst@@w #3.#1\@nil}%
-      \reserved at a\reserved at b
-  \expandafter\xdef\csname opt@\reserved at a\endcsname{%
-    \@ifundefined{opt@\reserved at a}\@empty
-      {\csname opt@\reserved at a\endcsname,}%
-    \zap at space#2 \@empty}}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}{\@pass at ptions}
-  {\@pass at ptions}%
-\def\@pass at ptions#1#2#3{%
-  \expandafter\xdef\csname opt@#3.#1\endcsname{%
-    \@ifundefined{opt@#3.#1}\@empty
-      {\csname opt@#3.#1\endcsname,}%
-    \zap at space#2 \@empty}}
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\@process at pti@ns}{Unused options issue}%
-\def\@process at pti@ns{%
-  \@for\CurrentOption:=\@curroptions\do{%
-    \@ifundefined{ds@\CurrentOption}%
-      {\@use at ption
-       \default at ds}%
-      \@use at ption}%
-  \@for\CurrentOption:=\@declaredoptions\do{%
-    \expandafter\let\csname ds@\CurrentOption\endcsname\relax}%
-  \let\CurrentOption\@empty
-  \let\@fileswith at pti@ns\@@fileswith at pti@ns
-  \AtEndOfPackage{\expandafter\let
-                     \csname unprocessedoptions-\@currname.\@currext\endcsname
-                     \relax}}
-\@onlypreamble\@process at pti@ns
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@process at pti@ns}{Unused options issue}%
 
-\def\@process at pti@ns{%
-  \@for\CurrentOption:=\@curroptions\do{%
-    \@ifundefined{ds@\CurrentOption}%
-      {\@use at ption
-       \default at ds}%
-      \@use at ption}%
-  \@for\CurrentOption:=\@declaredoptions\do{%
-    \expandafter\let\csname ds@\CurrentOption\endcsname\relax}%
-  \let\CurrentOption\@empty
-  \let\@fileswith at pti@ns\@@fileswith at pti@ns
-  \AtEndOfPackage{\let\@unprocessedoptions\relax}}
-\EndIncludeInRelease
-\IncludeInRelease{2017/01/01}%
-                 {\ExecuteOptions}{Spaces in \ExecuteOptions}%
-\def\ExecuteOptions#1{%
-  \edef\@fortmp{\zap at space#1 \@empty}%
-  \def\reserved at a##1\@nil{%
-    \@for\CurrentOption:=\@fortmp\do
-             {\csname ds@\CurrentOption\endcsname}%
-    \edef\CurrentOption{##1}}%
-  \expandafter\reserved at a\CurrentOption\@nil}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\ExecuteOptions}{Spaces in \ExecuteOptions}%
-\def\ExecuteOptions#1{%
-  \def\reserved at a##1\@nil{%
-    \@for\CurrentOption:=#1\do
-             {\csname ds@\CurrentOption\endcsname}%
-    \edef\CurrentOption{##1}}%
-  \expandafter\reserved at a\CurrentOption\@nil}
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\RequirePackageWithOptions}{Unused options issue}%
-\def\RequirePackageWithOptions{%
-  \AtEndOfPackage{\expandafter\let
-                    \csname unprocessedoptions-\@currname.\@currext\endcsname
-                    \relax}%
-  \@loadwithoptions\@pkgextension\RequirePackage}
-\@onlypreamble\RequirePackageWithOptions
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\RequirePackageWithOptions}{Unused options issue}%
+\IncludeInRelease{2020/02/02}%
+   {\merge at font@shape}{Font shape change rules}%
+\def\merge at font@shape#1{%
+  \expandafter\expandafter\expandafter
+  \merge at font@shape@
+    \csname shape@\f at shape @#1\endcsname
+    {#1}%
+    \@nil
+}
 
-\def\RequirePackageWithOptions{%
-  \AtEndOfPackage{\let\@unprocessedoptions\relax}%
-  \@loadwithoptions\@pkgextension\RequirePackage}
-\EndIncludeInRelease
-\IncludeInRelease{2017/01/01}%
-        {\@fileswith at pti@ns}{ifx tests in \@fileswith at pti@ns}%
-\def\@fileswith at pti@ns#1[#2]#3[#4]{%
-  \ifx#1\@clsextension
-    \ifx\@classoptionslist\relax
-      \xdef\@classoptionslist{\zap at space#2 \@empty}%
-      \def\reserved at a{%
-        \@onefilewithoptions#3[{#2}][{#4}]#1%
-        \@documentclasshook}%
-    \else
-      \def\reserved at a{%
-        \@onefilewithoptions#3[{#2}][{#4}]#1}%
-    \fi
+\def\merge at font@shape@#1#2#3\@nil{%
+  \def\reserved at a{#3}%
+  \ifx\reserved at a\@empty
+    \edef\f at shape{#2}%
   \else
-    \def\reserved at b##1,{%
-      \ifx\@nnil##1\relax\else
-        \ifx\@nnil##1\@nnil\else
-         \noexpand\@onefilewithoptions##1[{#2}][{#4}]%
-         \noexpand\@pkgextension
-        \fi
-        \expandafter\reserved at b
-      \fi}%
-      \edef\reserved at a{\zap at space#3 \@empty}%
-      \edef\reserved at a{\expandafter\reserved at b\reserved at a,\@nnil,}%
-  \fi
-  \reserved at a}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-        {\@fileswith at pti@ns}{ifx tests in \@fileswith at pti@ns}%
-\def\@fileswith at pti@ns#1[#2]#3[#4]{%
-  \ifx#1\@clsextension
-    \ifx\@classoptionslist\relax
-      \xdef\@classoptionslist{\zap at space#2 \@empty}%
-      \def\reserved at a{%
-        \@onefilewithoptions#3[{#2}][{#4}]#1%
-        \@documentclasshook}%
+    \edef\reserved at a{\f at encoding /\f at family /\f at series/#1}%
+    \ifcsname \reserved at a\endcsname
+       \edef\f at shape{#1}%
     \else
-      \def\reserved at a{%
-        \@onefilewithoptions#3[{#2}][{#4}]#1}%
+       \ifcsname \f at encoding /\f at family /\f at series/#2\endcsname
+         \edef\f at shape{#2}%
+         \@font at shape@subst at warning
+       \else
+         \edef\f at shape{#3}%
+         \@font at shape@subst at warning
+       \fi
     \fi
-  \else
-    \def\reserved at b##1,{%
-      \ifx\@nil##1\relax\else
-        \ifx\relax##1\relax\else
-         \noexpand\@onefilewithoptions##1[{#2}][{#4}]%
-         \noexpand\@pkgextension
-        \fi
-        \expandafter\reserved at b
-      \fi}%
-      \edef\reserved at a{\zap at space#3 \@empty}%
-      \edef\reserved at a{%
-        \expandafter\reserved at b\reserved at a,\@nil,}%
   \fi
-  \reserved at a}
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-      {\@onefilewithoptions}{Hooks and unused options issue}%
-\def\@onefilewithoptions#1[#2][#3]#4{%
-  \@pushfilename
-  \xdef\@currname{#1}%
-  \global\let\@currext#4%
-  \@ifl at aded\@currext\@currname
-    {\@if at ptions\@currext{\@currname}{#2}{}%
-      {\@latex at error
-        {Option clash for \@cls at pkg\space \@currname}%
-        {The package \@currname\space has already been loaded
-         with options:\MessageBreak
-         \space\space[\@ptionlist{\@currname.\@currext}]\MessageBreak
-         There has now been an attempt to load it
-          with options\MessageBreak
-         \space\space[#2]\MessageBreak
-         Adding the global options:\MessageBreak
-         \space\space
-              \@ptionlist{\@currname.\@currext},#2\MessageBreak
-         to your \noexpand\documentclass declaration may fix this.%
-         \MessageBreak
-         Try typing \space <return> \space to proceed.}}%
-     \@firstofone}%
-    {\makeatletter
-     \@reset at ptions
-     \IfFileExists{\@currname.\@currext}{}%
-       {\@missing at onefilewithoptions{#2}}%
-     \ifx\@currname\@empty
-       \expandafter\@gobble
-     \else
-       \@disable at packageload@do{\@currname.\@currext}%
-         {\@expl@@@filehook at file@push@@
-          \set at curr@file{\@currname.\@currext}%
-          \@filehook at set@CurrentFile
-          \expandafter\@swaptwoargs\expandafter
-            {\expandafter{\@currpkg at reqd}}%
-            {% <
-          \edef\@currpkg at reqd{\@currname.\@currext}%
-          \ifx\CurrentFile\CurrentFileUsed
-          \else
-            \filename at parse\@curr at file
-            \edef\@currname{\string at makeletter\filename at base}%
-            \edef\@currext{\string at makeletter\filename at ext}%
-          \fi
-          \load at onefile@withoptions{#2}%
-          \def\@currpkg at reqd%{\@currpkg at reqd}
-            }% >
-          \@expl@@@filehook at file@pop@@}%
-       \expandafter\@firstofone
-     \fi}%
-    {\@ifl at ter\@currext{\@currname}{#3}{}%
-      {\@latex at warning@no at line
-        {You have requested,\on at line,
-         version\MessageBreak
-           `#3' of \@cls at pkg\space \@currname,\MessageBreak
-         but only version\MessageBreak
-          `\csname ver@\@currname.\@currext\endcsname'\MessageBreak
-         is available}}%
-     \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi}%
-    \@popfilename
-    \@reset at ptions}
-\let\@currpkg at reqd\@empty
-\@onlypreamble\@onefilewithoptions
-\let\@unprocessedoptions\@undefined
-\def\@missing at onefilewithoptions#1{%
-  \@missingfileerror\@currname\@currext
-  \xdef\@currname{\@missingfile at area\@missingfile at base}%
-  \global\let\@currext\@missingfile at ext}
-\def\load at onefile@withoptions#1{%
-  \let\CurrentOption\@empty
-  \@reset at ptions
-  \def\reserved at a{%
-    \@pass at ptions\@currext{#1}{\@currname}%
-    \global\expandafter
-    \let\csname ver@\@currname.\@currext\endcsname\@empty
-    \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty
-    \ifx\@currext\@pkgextension
-      \UseHook{package/before}%
-      \UseHook{package/before/\@currname}%
-    \else
-      \ifx\@currext\@clsextension
-        \UseHook{class/before}%
-        \UseHook{class/before/\@currname}%
-      \fi
-    \fi
-    \InputIfFileExists{\@currpkg at reqd}{}%
-      {\@latex at error
-        {The \@cls at pkg\space\@currpkg at reqd\space failed to load.}\@ehd}%
-    \expandafter\let\csname unprocessedoptions-\@currname.\@currext\endcsname
-                    \@@unprocessedoptions
-    \csname\@currname.\@currext-h@@k\endcsname
-    \expandafter\let\csname\@currname.\@currext-h@@k\endcsname
-              \@undefined
-    \ifx\@unprocessedoptions\relax
-      \let\@unprocessedoptions\@undefined
-    \else
-      \csname unprocessedoptions-\@currname.\@currext\endcsname
-    \fi
-    \expandafter\let
-        \csname unprocessedoptions-\@currname.\@currext\endcsname
-       \@undefined
-    \ifx\@currext\@pkgextension
-      \UseHook{package/after/\@currname}%
-      \UseHook{package/after}%
-    \else
-      \ifx\@currext\@clsextension
-        \UseHook{class/after/\@currname}%
-        \UseHook{class/after}%
-      \fi
-    \fi}%
-  \@ifl at aded\@currext\@currname{}{\reserved at a}}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-      {\@onefilewithoptions}{Hooks and unused options issue}%
-
-\def\load at onefilewithoptions#1[#2][#3]#4{%
-  \@pushfilename
-  \xdef\@currname{#1}%
-  \global\let\@currext#4%
-  \let\CurrentOption\@empty
-  \@reset at ptions
-  \makeatletter
-  \def\reserved at a{%
-    \@ifl at aded\@currext{#1}%
-      {\@if at ptions\@currext{#1}{#2}{}%
-        {\@latex at error
-            {Option clash for \@cls at pkg\space #1}%
-            {The package #1 has already been loaded
-             with options:\MessageBreak
-             \space\space[\@ptionlist{#1.\@currext}]\MessageBreak
-             There has now been an attempt to load it
-              with options\MessageBreak
-             \space\space[#2]\MessageBreak
-             Adding the global options:\MessageBreak
-             \space\space
-                  \@ptionlist{#1.\@currext},#2\MessageBreak
-             to your \noexpand\documentclass declaration may fix this.%
-             \MessageBreak
-             Try typing \space <return> \space to proceed.}}}%
-      {\@pass at ptions\@currext{#2}{#1}%
-       \global\expandafter
-       \let\csname ver@\@currname.\@currext\endcsname\@empty
-       \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty
-       \InputIfFileExists
-         {\@currname.\@currext}%
-         {}%
-         {\@missingfileerror\@currname\@currext}%
-    \let\@unprocessedoptions\@@unprocessedoptions
-    \csname\@currname.\@currext-h@@k\endcsname
-    \expandafter\let\csname\@currname.\@currext-h@@k\endcsname
-              \@undefined
-    \@unprocessedoptions}%
-    \@ifl at ter\@currext{#1}{#3}{}%
-      {\@latex at warning@no at line
-         {You have requested,\on at line,
-          version\MessageBreak
-            `#3' of \@cls at pkg\space #1,\MessageBreak
-          but only version\MessageBreak
-           `\csname ver@#1.\@currext\endcsname'\MessageBreak
-          is available}}%
-    \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi
-    \@popfilename
-    \@reset at ptions}%
-  \reserved at a}
-
-\let \load at onefile@withoptions    \@undefined
-\let \@missing at onefilewithoptions \@undefined
-
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\AtBeginDocument}{Use hook system}%
-\DeclareRobustCommand\AtBeginDocument{\AddToHook{begindocument}}
-\DeclareRobustCommand\AtEndDocument  {\AddToHook{enddocument}}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\AtBeginDocument}{Use hook system}%
-
-\DeclareRobustCommand\AtBeginDocument{\g at addto@macro\@begindocumenthook}
-\DeclareRobustCommand\AtEndDocument{\g at addto@macro\@enddocumenthook}
-
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\filec at ntents}{Define \q at curr@file directly (gh/220)}%
-\def\filecontents{\@tempswatrue\@fileswtrue
-  \@ifnextchar[\filec at ntents@opt\filec at ntents
 }
-\@namedef{filecontents*}{\@tempswafalse\@fileswtrue
-  \@ifnextchar[\filec at ntents@opt\filec at ntents
+\def\merge at font@shape at without@substitution#1{%
+  \expandafter\expandafter\expandafter
+  \merge at font@shape at without@substitution@
+    \csname shape@\f at shape @#1\endcsname
+    {#1}%
+    \@nil
 }
-\def\filec at ntents@opt[#1]{%
-  \edef\@fortmp{\zap at space#1 \@empty}%
-  \@for\reserved at a:=\@fortmp\do{%
-    \ifcsname filec at ntents@\reserved at a\endcsname
-      \csname filec at ntents@\reserved at a\endcsname
-    \else
-    \@latex at error{Unknown filecontents option \reserved at a}%
-       {Valid options are force (or overwrite), nosearch, noheader}%
-    \fi}%
-  \filec at ntents
+\def\merge at font@shape at without@substitution@#1#2#3\@nil{%
+  \def\reserved at a{#3}%
+  \ifx\reserved at a\@empty
+    \edef\f at shape{#2}%
+  \else
+    \edef\f at shape{#1}%
+  \fi
 }
-\let\filec at ntents@force\@fileswfalse
-\let\filec at ntents@overwrite\@fileswfalse  % alternative name
-\let\filec at ntents@noheader\@tempswafalse
-\def\filec at ntents@nosearch{%
-  \let\filec at ntents@checkdir\@currdir
-  \def\filec at ntents@where{in current directory}}
-\let\filec at ntents@checkdir\@empty
-\def\filec at ntents@where{exists on the system}
-\begingroup%
-\@tempcnta=1
-\loop
-  \catcode\@tempcnta=12  %
-  \advance\@tempcnta\@ne %
-\ifnum\@tempcnta<32      %
-\repeat                  %
-\catcode`\*=11 %
-\catcode`\^^M\active%
-\catcode`\^^L\active\let^^L\relax%
-\catcode`\^^I\active%
-\gdef\filec at ntents#1{%
-  \set at curr@file{\filec at ntents@checkdir#1}%
-  \edef\q at curr@file{"\@curr at file"}%
-  \chardef\reserved at c\ifx\directlua\@undefined 15 \else 127 \fi%
-  \openin\@inputcheck\q at curr@file \space %
-  \ifeof\@inputcheck%
-    \@latex at warning@no at line%
-        {Writing file `\@currdir\@curr at file'}%
-    \ch at ck7\reserved at c\write\relax%
-    \immediate\openout\reserved at c\q at curr@file\relax%
-  \else%
-    \if at filesw%
-      \@latex at warning@no at line%
-          {File `\@curr at file' already \filec at ntents@where.\MessageBreak%
-             Not generating it from this source}%
-      \let\write\@gobbletwo%
-      \let\closeout\@gobble%
-    \else%
-      \edef\reserved at a{#1}%
-      \edef\reserved at a{\detokenize\expandafter{\reserved at a}}%
-      \edef\reserved at b{\detokenize\expandafter{\jobname}}%
-      \ifx\reserved at a\reserved at b%
-        \@fileswtrue%
-      \else%
-        \edef\reserved at b{\reserved at b\detokenize{.tex}}%
-        \ifx\reserved at a\reserved at b
-          \@fileswtrue%
-        \fi%
-      \fi%
-      \ch at ck7\reserved at c\write\relax%
-      \if at filesw%  % Foul ... trying to overwrite \jobname!
-      \@latex at error{Trying to overwrite `\jobname.tex'}{You can't %
-        write to the file you are reading from!\MessageBreak%
-        Data is written to screen instead.}%
-      \else%
-        \@latex at warning@no at line%
-           {Writing or overwriting file `\@currdir\@curr at file'}%
-        \immediate\openout\reserved at c\q at curr@file\relax%
-      \fi%
-    \fi%
-  \fi%
-  \closein\@inputcheck%
-  \if at tempswa%
-    \immediate\write\reserved at c{%
-      \@percentchar\@percentchar\space%
-          \expandafter\@gobble\string\LaTeX2e file `\@curr at file'^^J%
-      \@percentchar\@percentchar\space  generated by the %
-        `\@currenvir' \expandafter\@gobblefour\string\newenvironment^^J%
-      \@percentchar\@percentchar\space from source `\jobname' on %
-         \number\year/\two at digits\month/\two at digits\day.^^J%
-      \@percentchar\@percentchar}%
-  \fi%
-  \let\do\@makeother\dospecials%
-  \count@ 128\relax%
-  \loop%
-    \catcode\count@ 11\relax%
-    \advance\count@ \@ne%
-    \ifnum\count@<\@cclvi%
-  \repeat%
-  \edef\E{\@backslashchar end\string{\@currenvir\string}}%
-  \edef\reserved at b{%
-    \def\noexpand\reserved at b%
-         ####1\E####2\E####3\relax}%
-  \reserved at b{%
-    \ifx\relax##3\relax%
-      \immediate\write\reserved at c{##1}%
-    \else%
-      \edef^^M{\noexpand\end{\@currenvir}}%
-      \ifx\relax##1\relax%
-      \else%
-          \@latex at warning{Writing text `##1' before %
-             \string\end{\@currenvir}\MessageBreak as last line of \@curr at file}%
-        \immediate\write\reserved at c{##1}%
-      \fi%
-      \ifx\relax##2\relax%
-      \else%
-         \@latex at warning{%
-           Ignoring text `##2' after \string\end{\@currenvir}}%
-      \fi%
-    \fi%
-    ^^M}%
-  \catcode`\^^L\active%
-  \let\L\@undefined%
-  \def^^L{\expandafter\ifx\csname L\endcsname\relax\fi ^^J^^J}%
-  \catcode`\^^I\active%
-  \let\I\@undefined%
-  \def^^I{\expandafter\ifx\csname I\endcsname\relax\fi\space}%
-  \catcode`\^^M\active%
-  \edef^^M##1^^M{%
-    \noexpand\reserved at b##1\E\E\relax}}%
-\endgroup%
-\EndIncludeInRelease
-\IncludeInRelease{2019/10/01}%
-                 {\filec at ntents}{Spaces in file names + optional arg}%
-\def\filecontents{\@tempswatrue\@fileswtrue
-  \@ifnextchar[\filec at ntents@opt\filec at ntents
+\let\delayed at merge@font at shape\merge at font@shape at without@substitution
+\protected\def\normalshape
+    {\not at math@alphabet\normalshape\relax
+      \fontshape\shapedefault\selectfont}%
+\def\reinstall at nfss@defs{%
+  \protected\def\upshape
+          {\not at math@alphabet\upshape\relax
+           \fontshape\updefault\selectfont}%
+  \protected\def\slshape
+          {\not at math@alphabet\slshape\relax
+           \fontshape\sldefault\selectfont}%
+  \protected\def\scshape
+          {\not at math@alphabet\scshape\relax
+           \fontshape\scdefault\selectfont}%
+  \protected\def\itshape
+          {\not at math@alphabet\itshape\mathit
+           \fontshape\itdefault\selectfont}%
+  \protected\def\ulcshape
+          {\not at math@alphabet\ulcshape\relax
+           \fontshape{ulc}\selectfont}%
+  \protected\def\swshape
+          {\not at math@alphabet\swshape\relax
+           \fontshape\swdefault\selectfont}%
+  \protected\def\sscshape
+          {\not at math@alphabet\sscshape\relax
+           \fontshape\sscdefault\selectfont}%
 }
-\@namedef{filecontents*}{\@tempswafalse\@fileswtrue
-  \@ifnextchar[\filec at ntents@opt\filec at ntents
-}
-\def\filec at ntents@opt[#1]{%
-  \edef\@fortmp{\zap at space#1 \@empty}%
-  \@for\reserved at a:=\@fortmp\do{%
-    \ifcsname filec at ntents@\reserved at a\endcsname
-      \csname filec at ntents@\reserved at a\endcsname
-    \else
-    \@latex at error{Unknown filecontents option \reserved at a}%
-       {Valid options are force (or overwrite), nosearch, noheader}%
-    \fi}%
-  \filec at ntents
-}
-\let\filec at ntents@force\@fileswfalse
-\let\filec at ntents@overwrite\@fileswfalse  % alternative name
-\let\filec at ntents@noheader\@tempswafalse
-\def\filec at ntents@nosearch{%
-  \let\filec at ntents@checkdir\@currdir
-  \def\filec at ntents@where{in current directory}}
-\let\filec at ntents@checkdir\@empty
-\def\filec at ntents@where{exists on the system}
-\begingroup%
-\@tempcnta=1
-\loop
-  \catcode\@tempcnta=12  %
-  \advance\@tempcnta\@ne %
-\ifnum\@tempcnta<32      %
-\repeat                  %
-\catcode`\*=11 %
-\catcode`\^^M\active%
-\catcode`\^^L\active\let^^L\relax%
-\catcode`\^^I\active%
-\gdef\filec at ntents#1{%
-  \set at curr@file{\filec at ntents@checkdir#1}%
-  \edef\q at curr@file{\expandafter\quote at name\expandafter{\@curr at file}}%
-  \chardef\reserved at c\ifx\directlua\@undefined 15 \else 127 \fi%
-  \openin\@inputcheck\q at curr@file \space %
-  \ifeof\@inputcheck%
-    \@latex at warning@no at line%
-        {Writing file `\@currdir\@curr at file'}%
-    \ch at ck7\reserved at c\write\relax%
-    \immediate\openout\reserved at c\q at curr@file\relax%
-  \else%
-    \if at filesw%
-      \@latex at warning@no at line%
-          {File `\@curr at file' already \filec at ntents@where.\MessageBreak%
-             Not generating it from this source}%
-      \let\write\@gobbletwo%
-      \let\closeout\@gobble%
-    \else%
-      \edef\reserved at a{#1}%
-      \edef\reserved at a{\detokenize\expandafter{\reserved at a}}%
-      \edef\reserved at b{\detokenize\expandafter{\jobname}}%
-      \ifx\reserved at a\reserved at b%
-        \@fileswtrue%
-      \else%
-        \edef\reserved at b{\reserved at b\detokenize{.tex}}%
-        \ifx\reserved at a\reserved at b
-          \@fileswtrue%
-        \fi%
-      \fi%
-      \ch at ck7\reserved at c\write\relax%
-      \if at filesw%  % Foul ... trying to overwrite \jobname!
-      \@latex at error{Trying to overwrite `\jobname.tex'}{You can't %
-        write to the file you are reading from!\MessageBreak%
-        Data is written to screen instead.}%
-      \else%
-        \@latex at warning@no at line%
-           {Writing or overwriting file `\@currdir\@curr at file'}%
-        \immediate\openout\reserved at c\q at curr@file\relax%
-      \fi%
-    \fi%
-  \fi%
-  \closein\@inputcheck%
-  \if at tempswa%
-    \immediate\write\reserved at c{%
-      \@percentchar\@percentchar\space%
-          \expandafter\@gobble\string\LaTeX2e file `\@curr at file'^^J%
-      \@percentchar\@percentchar\space  generated by the %
-        `\@currenvir' \expandafter\@gobblefour\string\newenvironment^^J%
-      \@percentchar\@percentchar\space from source `\jobname' on %
-         \number\year/\two at digits\month/\two at digits\day.^^J%
-      \@percentchar\@percentchar}%
-  \fi%
-  \let\do\@makeother\dospecials%
-  \count@ 128\relax%
-  \loop%
-    \catcode\count@ 11\relax%
-    \advance\count@ \@ne%
-    \ifnum\count@<\@cclvi%
-  \repeat%
-  \edef\E{\@backslashchar end\string{\@currenvir\string}}%
-  \edef\reserved at b{%
-    \def\noexpand\reserved at b%
-         ####1\E####2\E####3\relax}%
-  \reserved at b{%
-    \ifx\relax##3\relax%
-      \immediate\write\reserved at c{##1}%
-    \else%
-      \edef^^M{\noexpand\end{\@currenvir}}%
-      \ifx\relax##1\relax%
-      \else%
-          \@latex at warning{Writing text `##1' before %
-             \string\end{\@currenvir}\MessageBreak as last line of \@curr at file}%
-        \immediate\write\reserved at c{##1}%
-      \fi%
-      \ifx\relax##2\relax%
-      \else%
-         \@latex at warning{%
-           Ignoring text `##2' after \string\end{\@currenvir}}%
-      \fi%
-    \fi%
-    ^^M}%
-  \catcode`\^^L\active%
-  \let\L\@undefined%
-  \def^^L{\expandafter\ifx\csname L\endcsname\relax\fi ^^J^^J}%
-  \catcode`\^^I\active%
-  \let\I\@undefined%
-  \def^^I{\expandafter\ifx\csname I\endcsname\relax\fi\space}%
-  \catcode`\^^M\active%
-  \edef^^M##1^^M{%
-    \noexpand\reserved at b##1\E\E\relax}}%
-\endgroup%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\filec at ntents}{Spaces in file names + optional arg}%
+   {\merge at font@shape}{Font shape change rules}%
 
-\let\filec at ntents@opt        \@undefined
-\let\filec at ntents@force      \@undefined
-\let\filec at ntents@overwrite  \@undefined
-\let\filec at ntents@noheader   \@undefined
-\let\filec at ntents@nosearch   \@undefined
-\let\filec at ntents@checkdir   \@undefined
-\let\filec at ntents@where      \@undefined
+\DeclareRobustCommand\fontshape [1]{\edef\f at shape{#1}}
+\let\fontshapeforce\@undefined
 
-\begingroup%
-\@tempcnta=1
-\loop
-  \catcode\@tempcnta=12  %
-  \advance\@tempcnta\@ne %
-\ifnum\@tempcnta<32      %
-\repeat                  %
-\catcode`\*=11 %
-\catcode`\^^M\active%
-\catcode`\^^L\active\let^^L\relax%
-\catcode`\^^I\active%
+\let\merge at font@shape\@undefined
+\let\merge at font@shape@\@undefined
 
-\gdef\filec at ntents#1{%
-  \openin\@inputcheck#1 %
-  \ifeof\@inputcheck%
-    \@latex at warning@no at line%
-        {Writing file `\@currdir#1'}%
-    \chardef\reserved at c15 %
-    \ch at ck7\reserved at c\write%
-    \immediate\openout\reserved at c#1\relax%
-  \else%
-    \closein\@inputcheck%
-    \@latex at warning@no at line%
-            {File `#1' already exists on the system.\MessageBreak%
-             Not generating it from this source}%
-    \let\write\@gobbletwo%
-    \let\closeout\@gobble%
-  \fi%
-  \if at tempswa%
-    \immediate\write\reserved at c{%
-      \@percentchar\@percentchar\space%
-          \expandafter\@gobble\string\LaTeX2e file `#1'^^J%
-      \@percentchar\@percentchar\space  generated by the %
-        `\@currenvir' \expandafter\@gobblefour\string\newenvironment^^J%
-      \@percentchar\@percentchar\space from source `\jobname' on %
-         \number\year/\two at digits\month/\two at digits\day.^^J%
-      \@percentchar\@percentchar}%
-  \fi%
-  \let\do\@makeother\dospecials%
-  \count@ 128\relax%
-  \loop%
-    \catcode\count@ 11\relax%
-    \advance\count@ \@ne%
-    \ifnum\count@<\@cclvi%
-  \repeat%
-  \edef\E{\@backslashchar end\string{\@currenvir\string}}%
-  \edef\reserved at b{%
-    \def\noexpand\reserved at b%
-         ####1\E####2\E####3\relax}%
-  \reserved at b{%
-    \ifx\relax##3\relax%
-      \immediate\write\reserved at c{##1}%
-    \else%
-      \edef^^M{\noexpand\end{\@currenvir}}%
-      \ifx\relax##1\relax%
-      \else%
-          \@latex at warning{Writing text `##1' before %
-             \string\end{\@currenvir}\MessageBreak as last line of #1}%
-        \immediate\write\reserved at c{##1}%
-      \fi%
-      \ifx\relax##2\relax%
-      \else%
-         \@latex at warning{%
-           Ignoring text `##2' after \string\end{\@currenvir}}%
-      \fi%
-    \fi%
-    ^^M}%
+\let\merge at font@shape at without@substitution\@undefined
+\let\merge at font@shape at without@substitution@\@undefined
+\let\delayed at merge@font at shape\@undefined
 
-  \catcode`\^^L\active%
-  \let\L\@undefined%
-  \def^^L{\expandafter\ifx\csname L\endcsname\relax\fi ^^J^^J}%
-  \catcode`\^^I\active%
-  \let\I\@undefined%
-  \def^^I{\expandafter\ifx\csname I\endcsname\relax\fi\space}%
-  \catcode`\^^M\active%
-  \edef^^M##1^^M{%
-    \noexpand\reserved at b##1\E\E\relax}}%
-\endgroup%
-\EndIncludeInRelease
-%%% From File: ltspace.dtx
-\IncludeInRelease{2019/10/01}%
-                 {\pagebreak}{Make commands robust}%
-\DeclareRobustCommand\pagebreak{\@testopt{\@no at pgbk-}4}
-\DeclareRobustCommand\nopagebreak{\@testopt\@no at pgbk4}
-\DeclareRobustCommand\linebreak{\@testopt{\@no at lnbk-}4}
-\DeclareRobustCommand\nolinebreak{\@testopt\@no at lnbk4}
-\DeclareRobustCommand\samepage{\interlinepenalty\@M
-   \postdisplaypenalty\@M
-   \interdisplaylinepenalty\@M
-   \@beginparpenalty\@M
-   \@endparpenalty\@M
-   \@itempenalty\@M
-   \@secpenalty\@M
-   \interfootnotelinepenalty\@M}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\pagebreak}{Make commands robust}%
+\let\normalshape\@undefined
 
-\kernel at make@fragile\pagebreak
-\kernel at make@fragile\nopagebreak
-\kernel at make@fragile\linebreak
-\kernel at make@fragile\nolinebreak
-\kernel at make@fragile\samepage
 
+\let\reinstall at nfss@defs\relax
 \EndIncludeInRelease
-\IncludeInRelease{2020/02/02}%
-                 {\@normalcr}{Make robust}%
-\protected\def\@normalcr{%
-  \let \reserved at e \relax
-  \let \reserved at f \relax
-  \@ifstar{\let \reserved at e \vadjust \let \reserved at f \nobreak
-             \@xnewline}%
-  \@xnewline}
-\let\\\@normalcr
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@normalcr}{Make robust}%
-
-\DeclareRobustCommand\\{%
-   \let \reserved at e \relax
-   \let \reserved at f \relax
-   \@ifstar{\let \reserved at e \vadjust \let \reserved at f \nobreak
-             \@xnewline}%
-  \@xnewline}
-\expandafter\let\expandafter\@normalcr
-     \csname\expandafter\@gobble\string\\ \endcsname
-
-\EndIncludeInRelease
 \IncludeInRelease{2020/10/01}%
-                 {\@vspace at calcify}{Add calc support}%
-\def\@vspace at calcify#1{\begingroup\setlength\skip@{#1}\vskip\skip@\endgroup}
+                 {\reinstall at nfss@defs}{NFSS series init}%
+\g at addto@macro\@kernel at after@begindocument at before
+              {\reinstall at nfss@defs\init at series@setup}
 \EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@vspace at calcify}{Add calc support}%
-
-\let\@vspace at calcify\@undefined
+\IncludeInRelease{2020/02/02}%
+                 {\reinstall at nfss@defs}{NFSS series init}%
+\AtBeginDocument{\reinstall at nfss@defs\init at series@setup}
 \EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\@newline}{\newline calc support}%
-\def\@newline[#1]{\let \reserved at e \vadjust
-                   \@gnewline {\@vspace at calcify{#1}}}
-\EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\@newline}{\newline calc support}%
-
-\def\@newline[#1]{\let \reserved at e \vadjust
-                   \@gnewline {\vskip #1}}
+                 {\reinstall at nfss@defs}{NFSS series init}%
 \EndIncludeInRelease
-\IncludeInRelease{2018/10/10}%
-                 {\@esphack}{hyphenation and nobreak after space hack}%
-\def\@esphack{%
-  \relax
-  \ifhmode
-    \spacefactor\@savsf
-    \ifdim\@savsk>\z@
-      \ifdim\lastskip=\z@
-        \nobreak \hskip\z at skip
-      \fi
-      \ignorespaces
-    \fi
-  \else
-    \ifvmode
-      \if at nobreak\nobreak\else\if at noskipsec\nobreak\fi\fi
-    \fi
-  \fi}%
-\EndIncludeInRelease
-\IncludeInRelease{2015/10/01}%
-                 {\@esphack}{hyphenation and nobreak after space hack}%
-\def\@esphack{%
-  \relax
-  \ifhmode
-    \spacefactor\@savsf
-    \ifdim\@savsk>\z@
-      \ifdim\lastskip=\z@
-        \nobreak \hskip\z at skip
-      \fi
-      \ignorespaces
-    \fi
-  \fi}%
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\@esphack}{hyphenation and nobreak after space hack}%
-\def\@esphack{%
-  \relax
-  \ifhmode
-    \spacefactor\@savsf
-    \ifdim\@savsk>\z@
-      \nobreak \hskip\z at skip
-      \ignorespaces
-    \fi
-  \fi}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@esphack}{hyphenation and nobreak after space hack}%
-\def\@esphack{%
-  \relax
-  \ifhmode
-    \spacefactor\@savsf
-    \ifdim\@savsk>\z@
-      \ignorespaces
-    \fi
-  \fi}%
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\@Esphack}{hyphenation after space hack}%
-\def\@Esphack{%
-  \relax
-  \ifhmode
-    \spacefactor\@savsf
-    \ifdim\@savsk>\z@
-      \nobreak \hskip\z at skip
-      \@ignoretrue
-      \ignorespaces
-    \fi
-   \fi}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@Esphack}{hyphenation after space hack}%
-\def\@Esphack{%
-  \relax
-  \ifhmode
-    \spacefactor\@savsf
-    \ifdim\@savsk>\z@
-      \@ignoretrue
-      \ignorespaces
-    \fi
-   \fi}%
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\addvspace}{\addvspace calc support}%
-\def\addvspace#1{%
-  \ifvmode
-     \if at minipage\else
-       \ifdim \lastskip =\z@
-         \@vspace at calcify{#1}%
-       \else
-       \setlength\@tempskipb{#1}%
-         \@xaddvskip
-       \fi
-     \fi
-  \else
-    \@noitemerr
-  \fi}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\addvspace}{\addvspace calc support}%
+%%% From File: ltfsstrc.dtx
+%% Copyright (C) 1989-97 by Frank Mittelbach and Rainer Sch\"opf.
+%% Copyright (C) 1994-97 by LaTeX3 project. All rights reserved.
 
-\def\addvspace#1{%
-  \ifvmode
-     \if at minipage\else
-       \ifdim \lastskip =\z@
-         \vskip #1\relax
-       \else
-       \@tempskipb#1\relax
-         \@xaddvskip
-       \fi
-     \fi
-  \else
-    \@noitemerr
-  \fi}
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\addpenalty}{\addpenalty}%
-\def\addpenalty#1{%
-  \ifvmode
-    \if at minipage
+\IncludeInRelease{2021/05/01}%
+                 {\selectfont}{Add hook to \selectfont}%
+\DeclareRobustCommand\selectfont
+        {%
+    \ifx\f at linespread\baselinestretch \else
+      \set at fontsize\baselinestretch\f at size\f at baselineskip \fi
+    \ifx\delayed at f@adjustment\@empty
     \else
-      \if at nobreak
+      \let\f at shape@saved\f at shape
+      \let\f at series@saved\f at series
+      \delayed at f@adjustment
+      \maybe at load@fontshape
+      \ifcsname \f at encoding/\f at family/\f at series/\f at shape \endcsname
       \else
-        \ifdim\lastskip=\z@
-          \penalty#1\relax
-        \else
-          \@tempskipb\lastskip
-          \begingroup
-            \@tempskipa\@tempskipb
-            \advance \@tempskipb
-              \ifdim\prevdepth>\maxdepth\maxdepth\else
-                 \ifdim \prevdepth = -\@m\p@ \z@ \else \prevdepth \fi
-               \fi
-             \vskip -\@tempskipb
-             \penalty#1%
-             \ifdim\@tempskipa=\@tempskipb
-             \else
-               \advance\@tempskipb -\@tempskipa
-               \vskip \@tempskipb
-             \fi
-             \vskip \@tempskipa
-          \endgroup
-        \fi
+        \let\f at shape\f at shape@saved
+        \let\f at series\f at series@saved
+        \let\delayed at merge@font at shape\merge at font@shape
+        \let\delayed at merge@font at series\merge at font@series
+        \delayed at f@adjustment
+        \let\delayed at merge@font at shape\merge at font@shape at without@substitution
+        \let\delayed at merge@font at series\merge at font@series at without@substitution
       \fi
+      \let\delayed at f@adjustment\@empty
     \fi
-  \else
-    \@noitemerr
-  \fi}%
+    \xdef\font at name{%
+      \csname\curr at fontshape/\f at size\endcsname}%
+    \pickup at font
+    \font at name
+    \UseHook{selectfont}%
+    \size at update
+    \enc at update
+    }
+\NewHook{selectfont}
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\addpenalty}{\addpenalty}%
-\def\addpenalty#1{%
-  \ifvmode
-    \if at minipage
-    \else
-      \if at nobreak
-      \else
-        \ifdim\lastskip=\z@
-          \penalty#1\relax
-        \else
-          \@tempskipb\lastskip
-          \vskip -\lastskip
-          \penalty#1%
-          \vskip\@tempskipb
-        \fi
-      \fi
-    \fi
-  \else
-    \@noitemerr
-  \fi}%
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\@vspace}{Support calc in \vspace}%
-\def\@vspace #1{%
-  \ifvmode
-    \@vspace at calcify{#1}%
-    \vskip\z at skip
-   \else
-     \@bsphack
-     \vadjust{\@restorepar
-              \@vspace at calcify{#1}%
-              \vskip\z at skip
-              }%
-     \@esphack
-   \fi}
-\def\@vspacer#1{%
-  \ifvmode
-    \dimen@\prevdepth
-    \hrule \@height\z@
-    \nobreak
-    \@vspace at calcify{#1}%
-    \vskip\z at skip
-    \prevdepth\dimen@
-  \else
-    \@bsphack
-    \vadjust{\@restorepar
-             \hrule \@height\z@
-             \nobreak
-             \@vspace at calcify{#1}%
-             \vskip\z at skip}%
-    \@esphack
-  \fi}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@vspace}{Support calc in \vspace}%
+                 {\selectfont}{Add hook to \selectfont}%
 
-\def\@vspace #1{%
-  \ifvmode
-    \vskip #1
-    \vskip\z at skip
-   \else
-     \@bsphack
-     \vadjust{\@restorepar
-              \vskip #1
-              \vskip\z at skip
-              }%
-     \@esphack
-   \fi}
-\def\@vspacer#1{%
-  \ifvmode
-    \dimen@\prevdepth
-    \hrule \@height\z@
-    \nobreak
-    \vskip #1
-    \vskip\z at skip
-    \prevdepth\dimen@
-  \else
-    \@bsphack
-    \vadjust{\@restorepar
-             \hrule \@height\z@
-             \nobreak
-             \vskip #1
-             \vskip\z at skip}%
-    \@esphack
-  \fi}
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\@}{Space after \@}%
-\def\@{\spacefactor\@m{}}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@}{Space after \@}%
-\def\@{\spacefactor\@m}%
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\@hspace}{Support calc with \hspace}%
-\def\@hspace#1{\begingroup\setlength\skip@{#1}\hskip\skip@\endgroup}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@hspace}{Support calc with \hspace}%
+\DeclareRobustCommand\selectfont
+   {%
+    \ifx\f at linespread\baselinestretch \else
+      \set at fontsize\baselinestretch\f at size\f at baselineskip \fi
+    \xdef\font at name{%
+      \csname\curr at fontshape/\f at size\endcsname}%
+    \pickup at font
+    \font at name
+    \size at update
+    \enc at update
+   }
 
-
-\def\@hspace#1{\hskip #1\relax}
 \EndIncludeInRelease
-\IncludeInRelease{2018/12/01}%
-                 {\thinspace}{Start LR-mode}%
-\DeclareRobustCommand\enspace{\leavevmode at ifvmode\kern.5em }
-\protected\def\leavevmode at ifvmode{\ifvmode\expandafter\indent\fi}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\thinspace}{Start LR-mode}%
-\def\thinspace{\kern .16667em }
-\def\negthinspace{\kern-.16667em }
-\def\enspace{\kern.5em }
-\let\leavevmode at ifvmode\@undefined
-\EndIncludeInRelease
-%%% From File: ltlogos.dtx
-%%% From File: ltplain.dtx
-\IncludeInRelease{2015/01/01}%
-                 {\newcount}{Extended Allocation}%
-\def\newcount {\e at alloc\count \countdef {\count10}\insc at unt\float at count}
-\def\newdimen {\e at alloc\dimen \dimendef {\count11}\insc at unt\float at count}
-\def\newskip  {\e at alloc\skip  \skipdef  {\count12}\insc at unt\float at count}
-\def\newmuskip
-           {\e at alloc\muskip\muskipdef{\count13}\m at ne\e at alloc@top}
-\def\newbox   {\e at alloc\box
-                  {\ifnum\allocationnumber<\@cclvi
-                     \expandafter\chardef
-                   \else
-                     \expandafter\e at alloc@chardef
-                   \fi}
-                                        {\count14}\insc at unt\float at count}
-\def\newtoks  {\e at alloc\toks \toksdef{\count15}\m at ne\e at alloc@top}
-\def\newread  {\e at alloc\read \chardef{\count16}\m at ne\sixt@@n}
-\ifx\directlua\@undefined
-  \def\newwrite   {\e at alloc\write \chardef{\count17}\m at ne\sixt@@n}
-\else
-  \def\newwrite   {\e at alloc\write
-                   {\ifnum\allocationnumber=18
-                     \advance\count17\@ne
-                     \allocationnumber\count17 %
-                    \fi
-                    \global\chardef}%
-                   {\count17}%
-                   \m at ne
-                   {128}}
-\fi
-\def\new at mathgroup
-  {\e at alloc\mathgroup\chardef{\count18}\m at ne\e at mathgroup@top}
-\let\newfam\new at mathgroup
-\ifx\directlua\@undefined
-  \def\newlanguage  {\e at alloc\language \chardef{\count19}\m at ne\@cclvi}
-\else
-  \def\newlanguage  {\e at alloc\language \chardef{\count19}\m at ne{16384}}
-\fi
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\newcount}{Extended Allocation}%
-\def\newcount{\alloc at 0\count\countdef\insc at unt}
-\def\newdimen{\alloc at 1\dimen\dimendef\insc at unt}
-\def\newskip{\alloc at 2\skip\skipdef\insc at unt}
-\def\newmuskip{\alloc at 3\muskip\muskipdef\@cclvi}
-\def\newbox{\alloc at 4\box\chardef\insc at unt}
-\def\newtoks{\alloc at 5\toks\toksdef\@cclvi}
-\def\newread{\alloc at 6\read\chardef\sixt@@n}
-\def\newwrite{\alloc at 7\write\chardef\sixt@@n}
-\def\new at mathgroup{\alloc at 8\fam\chardef\sixt@@n}
-\def\newlanguage{\alloc at 9\language\chardef\@cclvi}
-\let\newfam\new at mathgroup
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\e at alloc@chardef}{Extended Allocation}%
-\ifx\directlua\@undefined
-  \ifx\widowpenalties\@undefined
-    \mathchardef\e at alloc@top=255
-    \let\e at alloc@chardef\chardef
-  \else
-    \mathchardef\e at alloc@top=32767
-    \let\e at alloc@chardef\mathchardef
-  \fi
-\else
-  \chardef\e at alloc@top=65535
-  \let\e at alloc@chardef\chardef
-\fi
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\e at alloc@chardef}{Extended Allocation}%
-\let\e at alloc@top\@undefined
-\let\e at alloc@chardef\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\e at mathgroup@top}{Extended Allocation}%
-\ifx\Umathcode\@undefined
-  \chardef\e at mathgroup@top=16
-\else
-  \chardef\e at mathgroup@top=256
-\fi
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\e at mathgroup@top}{Extended Allocation}%
-\let\e at mathgroup@top\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}{\e at alloc}{Extended Allocation}%
-\def\e at alloc#1#2#3#4#5#6{%
-  \global\advance#3\@ne
-  \e at ch@ck{#3}{#4}{#5}#1%
-  \allocationnumber#3\relax
-  \global#2#6\allocationnumber
-  \wlog{\string#6=\string#1\the\allocationnumber}}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}{\e at alloc}{Extended Allocation}%
-\let\e at alloc\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2015/10/01}
-                 {\e at ch@ck}{Extended Allocation (checking)}%
-\gdef\e at ch@ck#1#2#3#4{%
-  \ifnum#1<#2\else
-    \ifnum#1=#2\relax
-      \global#1\@cclvi
-      \ifx\count#4\global\advance#1 10 \fi
-    \fi
-    \ifnum#1<#3\relax
-    \else
-      \errmessage{No room for a new \string#4}%
-    \fi
-  \fi}%
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\e at ch@ck}{Extended Allocation (checking)}%
-\gdef\e at ch@ck#1#2#3#4{%
-  \ifnum#1<#2\else
-    \ifnum#1=#2\relax
-      #1\@cclvi
-      \ifx\count#4\advance#1 10 \fi
-    \fi
-    \ifnum#1<#3\relax
-    \else
-      \errmessage{No room for a new #4}%
-    \fi
-  \fi}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\e at ch@ck}{Extended Allocation (checking)}%
-\let\e at ch@ck\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}%
-                 {\extrafloats}{Extra floats}%
-\let\float at count\e at alloc@top
-\ifx\numexpr\@undefined
-\def\extrafloats#1{%
-\count@#1\relax
-\ifnum\count@>\z@
-\newinsert\reserved at a
-\global\expandafter\chardef
-            \csname bx@\the\allocationnumber\endcsname\allocationnumber
-\@cons\@freelist{\csname bx@\the\allocationnumber\endcsname}%
-\advance\count@\m at ne
-\expandafter\extrafloats
-\expandafter\count@
-\fi
-}%
-\else
-\def\extrafloats#1{%
-\ifnum#1>\z@
-\count@\numexpr\float at count-1\relax
-  \ch at ck0\count@\count
-  \ch at ck1\count@\dimen
-  \ch at ck2\count@\skip
-  \ch at ck4\count@\box
-\global\e at alloc@chardef\float at count\count@
-\global\expandafter\e at alloc@chardef
-            \csname bx@\the\float at count\endcsname\float at count
-\@cons\@freelist{\csname bx@\the\float at count\endcsname}%
-\expandafter
-\extrafloats\expandafter{\numexpr#1-1\relax}%
-\fi}%
-\fi
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\extrafloats}{Extra floats}%
-\let\float at count\@undefined
-\let\extrafloats\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}
-                 {\alloc@}{emulate alloc@}%
-\def\alloc@#1#2#3#4{\e at alloc#2#3{\count1#1}#4\float at count}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\alloc@}{emulate alloc@}%
-\def\alloc@#1#2#3#4#5{\global\advance\count1#1\@ne
-  \ch at ck#1#4#2%
-  \allocationnumber\count1#1%
-  \global#3#5\allocationnumber
-  \wlog{\string#5=\string#2\the\allocationnumber}}
-\EndIncludeInRelease
-\IncludeInRelease{2015/10/01}
-                 {\newinsert}{Extended \newinsert}%
-\ifx\numexpr\@undefined
-\def\newinsert#1{\global\advance\insc at unt \m at ne
-  \ch at ck0\insc at unt\count
-  \ch at ck1\insc at unt\dimen
-  \ch at ck2\insc at unt\skip
-  \ch at ck4\insc at unt\box
-  \allocationnumber\insc at unt
-  \global\chardef#1\allocationnumber
-  \wlog{\string#1=\string\insert\the\allocationnumber}}
-\else
-\ifx\directlua\@undefined
-  \chardef\e at insert@top255
-\else
-  \chardef\e at insert@top\e at alloc@top
-\fi
-\def\newinsert#1{%
-\@tempswafalse
-\global\advance\insc at unt\m at ne
-\ifnum\count10<\insc at unt
-\ifnum\count11<\insc at unt
-\ifnum\count12<\insc at unt
-\ifnum\count14<\insc at unt
-  \@tempswatrue
-\fi\fi\fi\fi
-\if at tempswa
-\allocationnumber\insc at unt
-\else
-\global\advance\insc at unt\@ne
-  \extrafloats\@ne
-  \@next\@currbox\@freelist
-    {\ifnum\@currbox<\e at insert@top
-      \allocationnumber\@currbox
-     \else
-     \ch at ck0\m at ne\insert
-     \fi}%
-     {\ch at ck0\m at ne\insert}%
-\fi
-\global\chardef#1\allocationnumber
-\wlog{\string#1=\string\insert\the\allocationnumber}%
+\IncludeInRelease{2020/02/02}%
+                 {\@font at aliasinfo}{alias size function}%
+\DeclareSizeFunction{alias}{\sub at sfcnt\@font at aliasinfo}
+\def\@font at aliasinfo#1{%
+  \@font at info{Font\space shape\space `\curr at fontshape'\space
+              aliased\space to\MessageBreak `\mandatory at arg'}%
 }
-\fi
 \EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\newinsert}{Extended \newinsert}%
-\let\e at insert@top\@undefined
-\def\newinsert#1{\global\advance\insc at unt \m at ne
-  \ch at ck0\insc at unt\count
-  \ch at ck1\insc at unt\dimen
-  \ch at ck2\insc at unt\skip
-  \ch at ck4\insc at unt\box
-  \allocationnumber\insc at unt
-  \global\chardef#1\allocationnumber
-  \wlog{\string#1=\string\insert\the\allocationnumber}}
+                 {\@font at aliasinfo}{alias size function}%
+\let\s at fct@alias\@undefined
+\let\@font at aliasinfo\@undefined
+
 \EndIncludeInRelease
-\IncludeInRelease{2015/01/01}{\loggingall}{etex tracing}%
-\ifx\tracingscantokens\@undefined
-\gdef\loggingall{%
-  \tracingstats\tw@
-  \tracingpages\@ne
-  \tracinglostchars\@ne
-  \tracingparagraphs\@ne
-  \errorcontextlines\maxdimen
-  \loggingoutput
-  \tracingmacros\tw@
-  \tracingcommands\tw@
-  \tracingrestores\@ne
-  }%
-\else
-\gdef\loggingall{%
-  \tracingstats\tw@
-  \tracingpages\@ne
-  \tracinglostchars\tw@
-  \tracingparagraphs\@ne
-  \tracinggroups\@ne
-  \tracingifs\@ne
-  \tracingscantokens\@ne
-  \tracingnesting\@ne
-  \errorcontextlines\maxdimen
-  \loggingoutput
-  \tracingmacros\tw@
-  \tracingcommands\thr@@
-  \tracingrestores\@ne
-  \tracingassigns\@ne
-}%
-\fi
-\gdef\tracingall{\showoverfull\loggingall}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}{\loggingall}{etex tracing}%
-\gdef\loggingall{\tracingcommands\tw@\tracingstats\tw@
-  \tracingpages\@ne\tracinglostchars\@ne
-  \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne
-  \errorcontextlines\maxdimen\loggingoutput}
-  \gdef\tracingall{\loggingall\showoverfull}
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}{\tracingnone}%
-                             {turn off etex tracing}%
-\ifx\tracingscantokens\@undefined
-\def\tracingnone{%
-  \tracingonline\z@
-  \tracingcommands\z@
-  \showboxdepth\m at ne
-  \showboxbreadth\m at ne
-  \tracingoutput\z@
-  \errorcontextlines\m at ne
-  \tracingrestores\z@
-  \tracingparagraphs\z@
-  \tracingmacros\z@
-  \tracinglostchars\@ne
-  \tracingpages\z@
-  \tracingstats\z@
-}%
-\else
-\def\tracingnone{%
-  \tracingassigns\z@
-  \tracingrestores\z@
-  \tracingonline\z@
-  \tracingcommands\z@
-  \showboxdepth\m at ne
-  \showboxbreadth\m at ne
-  \tracingoutput\z@
-  \errorcontextlines\m at ne
-  \tracingnesting\z@
-  \tracingscantokens\z@
-  \tracingifs\z@
-  \tracinggroups\z@
-  \tracingparagraphs\z@
-  \tracingmacros\z@
-  \tracinglostchars\@ne
-  \tracingpages\z@
-  \tracingstats\z@
-}%
-\fi
-\def\hideoutput{%
-  \tracingoutput\z@
-  \showboxbreadth\m at ne
-  \showboxdepth\m at ne
-  \tracingonline\m at ne
-}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}{\tracingnone}%
-                             {turn off etex tracing}%
-\let\tracingnone\@undefined
-\let\hideoutput\@undefined
-\EndIncludeInRelease
 %%% From File: ltfssdcl.dtx
 %% Copyright (C) 1989-1998 Frank Mittelbach and Rainer Sch\"opf,
 %% all rights reserved.
@@ -8573,1078 +6401,6 @@
 \EndIncludeInRelease
 
 
-%%% From File: ltfssbas.dtx
-%% Copyright (C) 1989-2002 Frank Mittelbach and Rainer Sch\"opf
-\IncludeInRelease{2020/02/02}%
-                 {\DeclareFontShape@}{Maybe drop one m}%
-\def\DeclareFontShape@#1#2#3#4#5#6{%
-   \expandafter\ifx\csname #1+#2\endcsname\relax
-     \@latex at error{Font family `#1+#2' unknown}\@eha
-   \else
-     \edef\reserved at a{#3}%
-     \series at maybe@drop at one@m\reserved at a\reserved at b
-     \ifx\reserved at a\reserved at b\else
-       \@latex at warning{Font shape declaration has incorrect series
-         value `#3'.\MessageBreak It should not contain an `m'!
-         Please correct it.\MessageBreak Found}%
-     \fi
-     \expandafter
-       \xdef\csname#1/#2/\reserved at b/#4\endcsname
-                 {\expandafter\noexpand\csname #5\endcsname}%
-     \def\reserved at a{#6}%
-     \global
-     \expandafter\let\csname#5\expandafter\endcsname
-        \ifx\reserved at a\@empty
-          \@empty
-        \else
-          \reserved at a
-        \fi
-   \fi
-  }
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\DeclareFontShape@}{Maybe drop one m}%
-
-\def\DeclareFontShape@#1#2#3#4#5#6{%
-   \expandafter\ifx\csname #1+#2\endcsname\relax
-     \@latex at error{Font family `#1+#2' unknown}\@eha
-   \else
-     \expandafter
-       \xdef\csname#1/#2/#3/#4\endcsname{\expandafter\noexpand
-                                   \csname #5\endcsname}%
-     \def\reserved at a{#6}%
-     \global
-     \expandafter\let\csname#5\expandafter\endcsname
-        \ifx\reserved at a\@empty
-          \@empty
-        \else
-          \reserved at a
-        \fi
-   \fi
-  }
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}{\@DeclareMathSizes}%
-                 {Arbitrary units in \DeclareMathSizes}%
-\def\@DeclareMathSizes #1#2#3#4#5{%
-  \@defaultunits\dimen@ #2pt\relax\@nnil
-  \if $#3$%
-    \expandafter\let\csname S@\strip at pt\dimen@\endcsname\math at fontsfalse
-  \else
-    \@defaultunits\dimen at ii #3pt\relax\@nnil
-    \@defaultunits\@tempdima #4pt\relax\@nnil
-    \@defaultunits\@tempdimb #5pt\relax\@nnil
-    \toks@{#1}%
-    \expandafter\xdef\csname S@\strip at pt\dimen@\endcsname{%
-      \gdef\noexpand\tf at size{\strip at pt\dimen at ii}%
-      \gdef\noexpand\sf at size{\strip at pt\@tempdima}%
-      \gdef\noexpand\ssf at size{\strip at pt\@tempdimb}%
-      \the\toks@
-    }%
-  \fi
-}%
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}{\@DeclareMathSizes}%
-                 {Arbitrary units in \DeclareMathSizes}%
-\def\@DeclareMathSizes#1#2#3#4#5{%
-    \@defaultunits\dimen@#2pt\relax\@nnil
-    \if$#3$%
-      \expandafter \let
-        \csname S@\strip at pt\dimen@\endcsname
-        \math at fontsfalse
-    \else
-      \expandafter \gdef
-      \csname S@\strip at pt\dimen@\endcsname
-            {\gdef\tf at size{#3}\gdef\sf at size{#4}%
-                             \gdef\ssf at size{#5}%
-             #1%
-                             }%
-    \fi}%
-\EndIncludeInRelease
-\IncludeInRelease{2020/02/02}%
-                 {\LoadFontDefinitionFile}{Loading .fd files}%
-\def\LoadFontDefinitionFile#1#2{%
-  \begingroup
-    \edef\f at encoding{#1}%
-    \edef\f at family{#2}%
-    \try at load@fontshape
-  \endgroup
-}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\LoadFontDefinitionFile}{Loading .fd files}%
-
-\let\LoadFontDefinitionFile\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2020/02/02}%
-       {\DeclareFontFamilySubstitution}{Provide family substituation}%
-\begingroup
-\nfss at catcodes
-\gdef\DeclareFontFamilySubstitution#1#2#3{%
-   \LoadFontDefinitionFile{#1}{#2}%
-   \LoadFontDefinitionFile{#1}{#3}%
-   \DeclareFontShape{#1}{#2}{m}{it}{<->ssub * #3/m/it}{}%
-   \DeclareFontShape{#1}{#2}{m}{n}{<->ssub * #3/m/n}{}%
-   \DeclareFontShape{#1}{#2}{m}{sc}{<->ssub * #3/m/sc}{}%
-   \DeclareFontShape{#1}{#2}{m}{sl}{<->ssub * #3/m/sl}{}%
-   \DeclareFontShape{#1}{#2}{m}{sw}{<->ssub * #3/m/sw}{}%
-   \DeclareFontShape{#1}{#2}{m}{scit}{<->ssub * #3/m/scit}{}%
-   \DeclareFontShape{#1}{#2}{m}{scsl}{<->ssub * #3/m/scsl}{}%
-   \DeclareFontShape{#1}{#2}{b}{it}{<->ssub * #3/b/it}{}%
-   \DeclareFontShape{#1}{#2}{b}{n}{<->ssub * #3/b/n}{}%
-   \DeclareFontShape{#1}{#2}{b}{scit}{<->ssub * #3/b/scit}{}%
-   \DeclareFontShape{#1}{#2}{b}{scsl}{<->ssub * #3/b/scsl}{}%
-   \DeclareFontShape{#1}{#2}{b}{sc}{<->ssub * #3/b/sc}{}%
-   \DeclareFontShape{#1}{#2}{b}{sl}{<->ssub * #3/b/sl}{}%
-   \DeclareFontShape{#1}{#2}{b}{sw}{<->ssub * #3/b/sw}{}%
-   \DeclareFontShape{#1}{#2}{bx}{it}{<->ssub * #3/bx/it}{}%
-   \DeclareFontShape{#1}{#2}{bx}{n}{<->ssub * #3/bx/n}{}%
-   \DeclareFontShape{#1}{#2}{bx}{scit}{<->ssub * #3/bx/scit}{}%
-   \DeclareFontShape{#1}{#2}{bx}{scsl}{<->ssub * #3/bx/scsl}{}%
-   \DeclareFontShape{#1}{#2}{bx}{sc}{<->ssub * #3/bx/sc}{}%
-   \DeclareFontShape{#1}{#2}{bx}{sl}{<->ssub * #3/bx/sl}{}%
-   \DeclareFontShape{#1}{#2}{bx}{sw}{<->ssub * #3/bx/sw}{}%
-}
-\endgroup
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-      {\DeclareFontFamilySubstitution}{Provide family substituation}%
-
-\let\DeclareFontFamilySubstitution\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{2019/10/01}%
-                 {\DeclareErrorFont}{No side effects please}%
-\def\DeclareErrorFont#1#2#3#4#5{%
-      \xdef\error at fontshape{%
-          \noexpand\expandafter\noexpand\split at name\noexpand\string
-          \expandafter\noexpand\csname#1/#2/#3/#4/#5\endcsname
-          \noexpand\@nil}%
-      \gdef\default at family{#2}%
-      \gdef\default at series{#3}%
-      \gdef\default at shape{#4}%
-}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\DeclareErrorFont}{No side effects please}%
-
-\def\DeclareErrorFont#1#2#3#4#5{%
-      \xdef\error at fontshape{%
-          \noexpand\expandafter\noexpand\split at name\noexpand\string
-          \expandafter\noexpand\csname#1/#2/#3/#4/#5\endcsname
-          \noexpand\@nil}%
-      \gdef\default at family{#2}%
-      \gdef\default at series{#3}%
-      \gdef\default at shape{#4}%
-      \global\let\f at family\default at family
-      \global\let\f at series\default at series
-      \global\let\f at shape\default at shape
-      \gdef\f at size{#5}%
-      \gdef\f at baselineskip{#5pt}%
-}
-\EndIncludeInRelease
-\IncludeInRelease{2015/01/01}{\wrong at fontshape}%
-                 {Font substituation in preamble}%
-\def\wrong at fontshape{%
-    \csname D@\f at encoding\endcsname   % install defaults if in math
-    \edef\reserved at a{\csname\curr at fontshape\endcsname}%
-  \ifx\last at fontshape\reserved at a
-     \errmessage{Corrupted NFSS tables}%
-     \error at fontshape
-  \else
-    \let\f at shape\default at shape
-    \expandafter\ifx\csname\curr at fontshape\endcsname\relax
-       \let\f at series\default at series
-        \expandafter
-          \ifx\csname\curr at fontshape\endcsname\relax
-           \let\f at family\default at family
-           \begingroup
-              \try at load@fontshape
-           \endgroup
-        \fi \fi
-  \fi
-     \@font at warning{Font shape `\expandafter\string\reserved at a'
-                     \expandafter\@gobble\string\@undefined\MessageBreak
-                   using `\curr at fontshape' instead\@wrong at font@char}%
-    \global\let\last at fontshape\reserved at a
-    \gdef\@defaultsubs{%
-      \@font at warning{Some font shapes were not available, defaults
-                      substituted.\@gobbletwo}}%
-    \global\expandafter\expandafter\expandafter\let
-       \expandafter\reserved at a
-           \csname\curr at fontshape\endcsname
-    \xdef\font at name{%
-      \csname\curr at fontshape/\f at size\endcsname}%
-    \pickup at font}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}{\wrong at fontshape}%
-                 {Font substituation in preamble}%
-\def\wrong at fontshape{%
-    \csname D@\f at encoding\endcsname
-    \edef\reserved at a{\csname\curr at fontshape\endcsname}%
-  \ifx\last at fontshape\reserved at a
-     \errmessage{Corrupted NFSS tables}%
-     \error at fontshape
-  \else
-    \let\f at shape\default at shape
-    \expandafter\ifx\csname\curr at fontshape\endcsname\relax
-       \let\f at series\default at series
-        \expandafter
-          \ifx\csname\curr at fontshape\endcsname\relax
-           \let\f at family\default at family
-        \fi \fi
-  \fi
-     \@font at warning{Font shape
-            `\expandafter\string\reserved at a'
-            \expandafter\@gobble\string\@undefined
-            \MessageBreak
-            using `\curr at fontshape' instead\@wrong at font@char}%
-    \global\let\last at fontshape\reserved at a
-    \gdef\@defaultsubs{%
-      \@font at warning{Some font shapes were not available,
-                       defaults substituted.\@gobbletwo}}%
-    \global\expandafter\expandafter\expandafter\let
-       \expandafter\reserved at a
-           \csname\curr at fontshape\endcsname
-    \xdef\font at name{%
-      \csname\curr at fontshape/\f at size\endcsname}%
-    \pickup at font}
-\EndIncludeInRelease
-\IncludeInRelease{2017/01/01}{\showhyphens}%
-                 {XeTeX support for \showhyphens}%
-\ifx\XeTeXcharclass\@undefined
-\DeclareRobustCommand\showhyphens[1]{%
-  \setbox0\vbox{%
-    \color at begingroup
-    \everypar{}%
-    \parfillskip\z at skip\hsize\maxdimen
-    \normalfont
-    \pretolerance\m at ne\tolerance\m at ne\hbadness\z@\showboxdepth\z@\ #1%
-    \color at endgroup}}
-\else
-\DeclareRobustCommand\showhyphens[1]{%
-  \setbox0\vbox{%
-    \usefont{TU}{lmr}{m}{n}%
-    \hsize 1sp %
-    \hbadness\@M
-    \hfuzz\maxdimen
-    \tracingonline\z@
-    \everypar={}%
-    \leftskip\z at skip
-    \rightskip\z at skip
-    \parfillskip\z at skip
-    \hyphenpenalty=-\@M
-    \pretolerance\m at ne
-    \interlinepenalty\z@
-    \clubpenalty\z@
-    \widowpenalty\z@
-    \brokenpenalty1127 %
-    \setbox\z@\hbox{}%
-    \noindent
-    \hskip\z at skip
-    #1%
-    \par
-     \loop
-     \@tempswafalse
-     \ifnum\lastnodetype=11\unskip\@tempswatrue\fi
-     \ifnum\lastnodetype=12\unkern\@tempswatrue\fi
-     \ifnum\lastnodetype=13 %
-      \count@\lastpenalty
-      \unpenalty\@tempswatrue
-    \fi
-    \ifnum\lastnodetype=\@ne
-     \setbox\tw@\lastbox\@tempswatrue
-     \setbox0\hbox{\unhbox\tw@\unskip\unskip\unpenalty
-                   \ifnum\count@=1127 \else\ \fi
-                   \unhbox0}%
-     \count@\z@
-    \fi
-    \if at tempswa
-    \repeat
-   \hbadness\z@
-   \hsize\maxdimen
-   \showboxdepth\z@
-   \tolerance\m at ne
-   \hyphenpenalty\z@
-   \noindent\unhbox\z@
-}}
-\fi
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}{\showhyphens}%
-                 {XeTeX support for \showhyphens}%
-\gdef\showhyphens#1{%
-  \setbox0\vbox{%
-    \color at begingroup
-    \everypar{}%
-    \parfillskip\z at skip\hsize\maxdimen
-    \normalfont
-    \pretolerance\m at ne\tolerance\m at ne
-    \hbadness\z@\showboxdepth\z@\ #1%
-    \color at endgroup}}
-\EndIncludeInRelease
-%%% From File: ltfssaxes.dtx
-%% Copyright (C) 1999-2020 Frank Mittelbach
-\IncludeInRelease{2020/02/02}%
-   {\DeclareFontSeriesChangeRule}{Series change rules}%
-\def\DeclareFontSeriesChangeRule#1#2#3#4{%
-  \@namedef{series@#1@#2}{{#3}{#4}}}
-\DeclareFontSeriesChangeRule {bc}{b}{bc}{}
-\DeclareFontSeriesChangeRule {bc}{c}{bc}{}
-\DeclareFontSeriesChangeRule {bc}{eb}{ebc}{}
-\DeclareFontSeriesChangeRule {bc}{ec}{bec} {bc}
-\DeclareFontSeriesChangeRule {bc}{el}{elc}{}
-\DeclareFontSeriesChangeRule {bc}{l}{lc}{}
-\DeclareFontSeriesChangeRule {bc}{sb}{sbc}{}
-\DeclareFontSeriesChangeRule {bc}{sc}{bsc} {bc}
-\DeclareFontSeriesChangeRule {bc}{sl}{slc}{}
-\DeclareFontSeriesChangeRule {bc}{ub}{ubc}{}
-\DeclareFontSeriesChangeRule {bc}{ul}{ulc}{}
-\DeclareFontSeriesChangeRule {bc}{x}{bx}{}
-\DeclareFontSeriesChangeRule {bx}{b}{bx}{}
-\DeclareFontSeriesChangeRule {bx}{c}  {bc}  {bx} %<-----
-\DeclareFontSeriesChangeRule {bx}{eb}{ebx}{}
-\DeclareFontSeriesChangeRule {bx}{ec}  {bec}  {bx} %<-----
-\DeclareFontSeriesChangeRule {bx}{el}{elx}{}
-\DeclareFontSeriesChangeRule {bx}{l}{lx}{}
-\DeclareFontSeriesChangeRule {bx}{sb} {sbx} {}
-\DeclareFontSeriesChangeRule {bx}{sc}  {bsc}  {bx} %<-----
-\DeclareFontSeriesChangeRule {bx}{sl}{slx}  {}
-\DeclareFontSeriesChangeRule {bx}{ub}{ubx}{}
-\DeclareFontSeriesChangeRule {bx}{ul}{ulx}{}
-\DeclareFontSeriesChangeRule {bx}{x}{bx}{}
-\DeclareFontSeriesChangeRule {b}{bx} {bx}  {b} %<-----
-\DeclareFontSeriesChangeRule {b}{c}  {bc}  {b} %<-----
-\DeclareFontSeriesChangeRule {b}{ec}  {bec}  {b} %<-----
-\DeclareFontSeriesChangeRule {b}{sb} {sb}  {b} %<-----
-\DeclareFontSeriesChangeRule {b}{sc}  {bsc}  {b} %<-----
-\DeclareFontSeriesChangeRule {b}{x}  {bx}  {b} %<-----
-\DeclareFontSeriesChangeRule {c}{bx} {bx}  {b}  %<-----
-\DeclareFontSeriesChangeRule {c}{b}{bc}{}
-\DeclareFontSeriesChangeRule {c}{eb}{ebc}{}
-\DeclareFontSeriesChangeRule {c}{el}{elc}{}
-\DeclareFontSeriesChangeRule {c}{l}{lc}{}
-\DeclareFontSeriesChangeRule {c}{sb}{sbc}{}
-\DeclareFontSeriesChangeRule {c}{sl}{slc}{}
-\DeclareFontSeriesChangeRule {c}{ub}{ubc}{}
-\DeclareFontSeriesChangeRule {c}{ul}{ulc}{}
-\DeclareFontSeriesChangeRule {c}{x}{x}{m}               %<-----
-\DeclareFontSeriesChangeRule {ebc}{b}{bc}{}
-\DeclareFontSeriesChangeRule {ebc}{c}{ebc}{}
-\DeclareFontSeriesChangeRule {ebc}{eb}{ebc}{}
-\DeclareFontSeriesChangeRule {ebc}{ec}{ebec}{ebc}
-\DeclareFontSeriesChangeRule {ebc}{el}{elc}{}
-\DeclareFontSeriesChangeRule {ebc}{l}{lc}{}
-\DeclareFontSeriesChangeRule {ebc}{sb}{sbc}{}
-\DeclareFontSeriesChangeRule {ebc}{sc}{ebsc}{ebc}
-\DeclareFontSeriesChangeRule {ebc}{sl}{slc}{}
-\DeclareFontSeriesChangeRule {ebc}{ub}{ubc}{}
-\DeclareFontSeriesChangeRule {ebc}{ul}{ulc}{}
-\DeclareFontSeriesChangeRule {ebc}{x}{ebx}{}
-\DeclareFontSeriesChangeRule {ec}{bx} {bx}  {b}  %<-----
-\DeclareFontSeriesChangeRule {ec}{b}{bec}{}
-\DeclareFontSeriesChangeRule {ec}{eb}{ebec}{}
-\DeclareFontSeriesChangeRule {ec}{el}{elec}{}
-\DeclareFontSeriesChangeRule {ec}{l}{lec}{}
-\DeclareFontSeriesChangeRule {ec}{sb}{sbec}{}
-\DeclareFontSeriesChangeRule {ec}{sl}{slec}{}
-\DeclareFontSeriesChangeRule {ec}{ub}{ubec}{}
-\DeclareFontSeriesChangeRule {ec}{ul}{ulec}{}
-\DeclareFontSeriesChangeRule {ec}{x}{x}{m}              %<-----
-\DeclareFontSeriesChangeRule {sc}{bx} {bx}  {b}  %<-----
-\DeclareFontSeriesChangeRule {sc}{b}{bsc}{}
-\DeclareFontSeriesChangeRule {sc}{eb}{ebsc}{}
-\DeclareFontSeriesChangeRule {sc}{el}{elsc}{}
-\DeclareFontSeriesChangeRule {sc}{l}{lsc}{}
-\DeclareFontSeriesChangeRule {sc}{sb}{sbsc}{}
-\DeclareFontSeriesChangeRule {sc}{sl}{slsc}{}
-\DeclareFontSeriesChangeRule {sc}{ub}{ubsc}{}
-\DeclareFontSeriesChangeRule {sc}{ul}{ulsc}{}
-\DeclareFontSeriesChangeRule {sc}{x}{x}{m}              %<-----
-\DeclareFontSeriesChangeRule {ebx}{b}{bx}{}
-\DeclareFontSeriesChangeRule {ebx}{c}{ebc}{}
-\DeclareFontSeriesChangeRule {ebx}{eb}{ebx}{}
-\DeclareFontSeriesChangeRule {ebx}{ec}{ebec}{}
-\DeclareFontSeriesChangeRule {ebx}{el}{elx}{}
-\DeclareFontSeriesChangeRule {ebx}{l}{lx}{}
-\DeclareFontSeriesChangeRule {ebx}{sb}{sbx}{}
-\DeclareFontSeriesChangeRule {ebx}{sc}{ebsc}{}
-\DeclareFontSeriesChangeRule {ebx}{sl}{slx}{}
-\DeclareFontSeriesChangeRule {ebx}{ub}{ubx}{}
-\DeclareFontSeriesChangeRule {ebx}{ul}{ulx}{}
-\DeclareFontSeriesChangeRule {ebx}{x}{ebx}{}
-\DeclareFontSeriesChangeRule {eb}{c}{ebc}{}
-\DeclareFontSeriesChangeRule {eb}{ec}{ebec}{}
-\DeclareFontSeriesChangeRule {eb}{sc}{ebsc}{}
-\DeclareFontSeriesChangeRule {eb}{x}{ebx}{}
-\DeclareFontSeriesChangeRule {elc}{b}{bc}{}
-\DeclareFontSeriesChangeRule {elc}{c}{elc}{}
-\DeclareFontSeriesChangeRule {elc}{eb}{ebc}{}
-\DeclareFontSeriesChangeRule {elc}{ec}{elec}{}
-\DeclareFontSeriesChangeRule {elc}{el}{elc}{}
-\DeclareFontSeriesChangeRule {elc}{l}{lc}{}
-\DeclareFontSeriesChangeRule {elc}{sb}{sbc}{}
-\DeclareFontSeriesChangeRule {elc}{sc}{elsc}{}
-\DeclareFontSeriesChangeRule {elc}{sl}{slc}{}
-\DeclareFontSeriesChangeRule {elc}{ub}{ubc}{}
-\DeclareFontSeriesChangeRule {elc}{ul}{ulc}{}
-\DeclareFontSeriesChangeRule {elc}{x}{elx}{}
-\DeclareFontSeriesChangeRule {elx}{b}{bx}{}
-\DeclareFontSeriesChangeRule {elx}{c}{elc}{}
-\DeclareFontSeriesChangeRule {elx}{eb}{ebx}{}
-\DeclareFontSeriesChangeRule {elx}{ec}{elec}{}
-\DeclareFontSeriesChangeRule {elx}{el}{elx}{}
-\DeclareFontSeriesChangeRule {elx}{l}{lx}{}
-\DeclareFontSeriesChangeRule {elx}{sb}{sbx}{}
-\DeclareFontSeriesChangeRule {elx}{sc}{elsc}{}
-\DeclareFontSeriesChangeRule {elx}{sl}{slx}{}
-\DeclareFontSeriesChangeRule {elx}{ub}{ubx}{}
-\DeclareFontSeriesChangeRule {elx}{ul}{ulx}{}
-\DeclareFontSeriesChangeRule {elx}{x}{elx}{}
-\DeclareFontSeriesChangeRule {el}{c}{elc}{}
-\DeclareFontSeriesChangeRule {el}{ec}{elec}{}
-\DeclareFontSeriesChangeRule {el}{sc}{elsc}{}
-\DeclareFontSeriesChangeRule {el}{x}{elx}{}
-\DeclareFontSeriesChangeRule {lc}{b}{bc}{}
-\DeclareFontSeriesChangeRule {lc}{c}{lc}{}
-\DeclareFontSeriesChangeRule {lc}{eb}{ebc}{}
-\DeclareFontSeriesChangeRule {lc}{ec}{lec}{}
-\DeclareFontSeriesChangeRule {lc}{el}{elc}{}
-\DeclareFontSeriesChangeRule {lc}{l}{lc}{}
-\DeclareFontSeriesChangeRule {lc}{sb}{sbc}{}
-\DeclareFontSeriesChangeRule {lc}{sc}{lsc}{}
-\DeclareFontSeriesChangeRule {lc}{sl}{slc}{}
-\DeclareFontSeriesChangeRule {lc}{ub}{ubc}{}
-\DeclareFontSeriesChangeRule {lc}{ul}{ulc}{}
-\DeclareFontSeriesChangeRule {lc}{x}{lx}{}
-\DeclareFontSeriesChangeRule {lx}{b}{bx}{}
-\DeclareFontSeriesChangeRule {lx}{c}{lc}{}
-\DeclareFontSeriesChangeRule {lx}{eb}{ebx}{}
-\DeclareFontSeriesChangeRule {lx}{ec}{lec}{}
-\DeclareFontSeriesChangeRule {lx}{el}{elx}{}
-\DeclareFontSeriesChangeRule {lx}{l}{lx}{}
-\DeclareFontSeriesChangeRule {lx}{sb}{sbx}{}
-\DeclareFontSeriesChangeRule {lx}{sc}{lsc}{}
-\DeclareFontSeriesChangeRule {lx}{sl}{slx}{}
-\DeclareFontSeriesChangeRule {lx}{ub}{ubx}{}
-\DeclareFontSeriesChangeRule {lx}{ul}{ulx}{}
-\DeclareFontSeriesChangeRule {lx}{x}{lx}{}
-\DeclareFontSeriesChangeRule {l}{bx} {bx}  {b} %<-----
-\DeclareFontSeriesChangeRule {l}{b}  {b}   {bx} %<-----
-\DeclareFontSeriesChangeRule {l}{c}  {lc}  {l}  % ? %<-----
-\DeclareFontSeriesChangeRule {l}{ec}  {lec}  {l}  % ? %<-----
-\DeclareFontSeriesChangeRule {l}{sb} {sb}  {b}  % ? %<-----
-\DeclareFontSeriesChangeRule {l}{sc}  {lsc}  {l}  % ? %<-----
-\DeclareFontSeriesChangeRule {l}{x}  {lx}  {l}  % ? %<-----
-\DeclareFontSeriesChangeRule {m}{bx} {bx} {b}    %<-----
-\DeclareFontSeriesChangeRule {m}{b}  {b}  {bx} %<-----
-\DeclareFontSeriesChangeRule {m}{c}  {c}  {m} %<-----
-\DeclareFontSeriesChangeRule {m}{ec}  {ec}  {m} %<-----
-\DeclareFontSeriesChangeRule {m}{l}  {l}  {m} %<-----
-\DeclareFontSeriesChangeRule {m}{sb} {sb} {b} %<-----
-\DeclareFontSeriesChangeRule {m}{sc}  {sc}  {m} %<-----
-\DeclareFontSeriesChangeRule {m}{x}  {x}  {m} %<-----
-\DeclareFontSeriesChangeRule {sbc}{b}{bc}{}
-\DeclareFontSeriesChangeRule {sbc}{c}{sbc}{}
-\DeclareFontSeriesChangeRule {sbc}{eb}{ebc}{}
-\DeclareFontSeriesChangeRule {sbc}{ec}{sbec}{sbc}
-\DeclareFontSeriesChangeRule {sbc}{el}{elc}{}
-\DeclareFontSeriesChangeRule {sbc}{l}{lc}{}
-\DeclareFontSeriesChangeRule {sbc}{sb}{sbc}{}
-\DeclareFontSeriesChangeRule {sbc}{sc}{sbsc}{sbc}
-\DeclareFontSeriesChangeRule {sbc}{sl}{slc}{}
-\DeclareFontSeriesChangeRule {sbc}{ub}{ubc}{}
-\DeclareFontSeriesChangeRule {sbc}{ul}{ulc}{}
-\DeclareFontSeriesChangeRule {sbc}{x}{sbx}{}
-\DeclareFontSeriesChangeRule {sbx}{b}{bx}{}
-\DeclareFontSeriesChangeRule {sbx}{c}{sbc}{}
-\DeclareFontSeriesChangeRule {sbx}{eb}{ebx}{}
-\DeclareFontSeriesChangeRule {sbx}{ec}{sbec}{}
-\DeclareFontSeriesChangeRule {sbx}{el}{elx}{}
-\DeclareFontSeriesChangeRule {sbx}{l}{lx}{}
-\DeclareFontSeriesChangeRule {sbx}{sb}{sbx}{}
-\DeclareFontSeriesChangeRule {sbx}{sc}{sbsc}{}
-\DeclareFontSeriesChangeRule {sbx}{sl}{slx}{}
-\DeclareFontSeriesChangeRule {sbx}{ub}{ubx}{}
-\DeclareFontSeriesChangeRule {sbx}{ul}{ulx}{}
-\DeclareFontSeriesChangeRule {sbx}{x}{sbx}{}
-\DeclareFontSeriesChangeRule {sb}{c}  {sbc} {bc} %? %<-----
-\DeclareFontSeriesChangeRule {sb}{ec}  {sbec} {sbc} %? %<-----
-\DeclareFontSeriesChangeRule {sb}{sc}  {sbsc} {sbc} %? %<-----
-\DeclareFontSeriesChangeRule {sb}{x}  {sbx} {bx} %? %<-----
-\DeclareFontSeriesChangeRule {slc}{b}{bc}{}
-\DeclareFontSeriesChangeRule {slc}{c}{slc}{}
-\DeclareFontSeriesChangeRule {slc}{eb}{ebc}{}
-\DeclareFontSeriesChangeRule {slc}{ec}{slec}{}
-\DeclareFontSeriesChangeRule {slc}{el}{elc}{}
-\DeclareFontSeriesChangeRule {slc}{l}{lc}{}
-\DeclareFontSeriesChangeRule {slc}{sb}{sbc}{}
-\DeclareFontSeriesChangeRule {slc}{sc}{slsc}{}
-\DeclareFontSeriesChangeRule {slc}{sl}{slc}{}
-\DeclareFontSeriesChangeRule {slc}{ub}{ubc}{}
-\DeclareFontSeriesChangeRule {slc}{ul}{ulc}{}
-\DeclareFontSeriesChangeRule {slc}{x}{slx}{}
-\DeclareFontSeriesChangeRule {slx}{b}{bx}{}
-\DeclareFontSeriesChangeRule {slx}{c}{slc}{}
-\DeclareFontSeriesChangeRule {slx}{eb}{ebx}{}
-\DeclareFontSeriesChangeRule {slx}{ec}{slec}{}
-\DeclareFontSeriesChangeRule {slx}{el}{elx}{}
-\DeclareFontSeriesChangeRule {slx}{l}{lx}{}
-\DeclareFontSeriesChangeRule {slx}{sb}{sbx}{}
-\DeclareFontSeriesChangeRule {slx}{sc}{slsc}{}
-\DeclareFontSeriesChangeRule {slx}{sl}{slx}{}
-\DeclareFontSeriesChangeRule {slx}{ub}{ubx}{}
-\DeclareFontSeriesChangeRule {slx}{ul}{ulx}{}
-\DeclareFontSeriesChangeRule {slx}{x}{slx}{}
-\DeclareFontSeriesChangeRule {sl}{c}{slc}{}
-\DeclareFontSeriesChangeRule {sl}{ec}{slec}{}
-\DeclareFontSeriesChangeRule {sl}{sc}{slsc}{}
-\DeclareFontSeriesChangeRule {sl}{x}{slx}{}
-\DeclareFontSeriesChangeRule {ubc}{b}{bc}{}
-\DeclareFontSeriesChangeRule {ubc}{c}{ubc}{}
-\DeclareFontSeriesChangeRule {ubc}{eb}{ebc}{}
-\DeclareFontSeriesChangeRule {ubc}{ec}{ubec}{}
-\DeclareFontSeriesChangeRule {ubc}{el}{elc}{}
-\DeclareFontSeriesChangeRule {ubc}{l}{lc}{}
-\DeclareFontSeriesChangeRule {ubc}{sb}{sbc}{}
-\DeclareFontSeriesChangeRule {ubc}{sc}{ubsc}{}
-\DeclareFontSeriesChangeRule {ubc}{sl}{slc}{}
-\DeclareFontSeriesChangeRule {ubc}{ub}{ubc}{}
-\DeclareFontSeriesChangeRule {ubc}{ul}{ulc}{}
-\DeclareFontSeriesChangeRule {ubc}{x}{ubx}{}
-\DeclareFontSeriesChangeRule {ubx}{b}{bx}{}
-\DeclareFontSeriesChangeRule {ubx}{c}{ubc}{}
-\DeclareFontSeriesChangeRule {ubx}{eb}{ebx}{}
-\DeclareFontSeriesChangeRule {ubx}{ec}{ubec}{}
-\DeclareFontSeriesChangeRule {ubx}{el}{elx}{}
-\DeclareFontSeriesChangeRule {ubx}{l}{lx}{}
-\DeclareFontSeriesChangeRule {ubx}{sb}{sbx}{}
-\DeclareFontSeriesChangeRule {ubx}{sc}{ubsc}{}
-\DeclareFontSeriesChangeRule {ubx}{sl}{slx}{}
-\DeclareFontSeriesChangeRule {ubx}{ub}{ubx}{}
-\DeclareFontSeriesChangeRule {ubx}{ul}{ulx}{}
-\DeclareFontSeriesChangeRule {ubx}{x}{ubx}{}
-\DeclareFontSeriesChangeRule {ub}{c}{ubc}{}
-\DeclareFontSeriesChangeRule {ub}{ec}{ubec}{}
-\DeclareFontSeriesChangeRule {ub}{sc}{ubsc}{}
-\DeclareFontSeriesChangeRule {ub}{x}{ubx}{}
-\DeclareFontSeriesChangeRule {ulc}{b}{bc}{}
-\DeclareFontSeriesChangeRule {ulc}{c}{ulc}{}
-\DeclareFontSeriesChangeRule {ulc}{eb}{ebc}{}
-\DeclareFontSeriesChangeRule {ulc}{ec}{ulec}{ulc}
-\DeclareFontSeriesChangeRule {ulc}{el}{elc}{}
-\DeclareFontSeriesChangeRule {ulc}{l}{lc}{}
-\DeclareFontSeriesChangeRule {ulc}{sb}{sbc}{}
-\DeclareFontSeriesChangeRule {ulc}{sc}{ulsc}{ulc}
-\DeclareFontSeriesChangeRule {ulc}{sl}{slc}{}
-\DeclareFontSeriesChangeRule {ulc}{ub}{ubc}{}
-\DeclareFontSeriesChangeRule {ulc}{ul}{ulc}{}
-\DeclareFontSeriesChangeRule {ulc}{x}{ulx}{}
-\DeclareFontSeriesChangeRule {ulx}{b}{bx}{}
-\DeclareFontSeriesChangeRule {ulx}{c}{ulc}{}
-\DeclareFontSeriesChangeRule {ulx}{eb}{ebx}{}
-\DeclareFontSeriesChangeRule {ulx}{ec}{ulec}{}
-\DeclareFontSeriesChangeRule {ulx}{el}{elx}{}
-\DeclareFontSeriesChangeRule {ulx}{l}{lx}{}
-\DeclareFontSeriesChangeRule {ulx}{sb}{sbx}{}
-\DeclareFontSeriesChangeRule {ulx}{sc}{ulsc}{}
-\DeclareFontSeriesChangeRule {ulx}{sl}{slx}{}
-\DeclareFontSeriesChangeRule {ulx}{ub}{ubx}{}
-\DeclareFontSeriesChangeRule {ulx}{ul}{ulx}{}
-\DeclareFontSeriesChangeRule {ulx}{x}{ulx}{}
-\DeclareFontSeriesChangeRule {ul}{c}{ulc}{}
-\DeclareFontSeriesChangeRule {ul}{ec}{ulec}{}
-\DeclareFontSeriesChangeRule {ul}{sc}{ulsc}{}
-\DeclareFontSeriesChangeRule {ul}{x}{ulx}{}
-\DeclareFontSeriesChangeRule {x}{b}{bx}{}
-\DeclareFontSeriesChangeRule {x}{c}{c}{}
-\DeclareFontSeriesChangeRule {x}{eb}{ebx}{}
-\DeclareFontSeriesChangeRule {x}{ec}{ec}{}
-\DeclareFontSeriesChangeRule {x}{el}{elx}{}
-\DeclareFontSeriesChangeRule {x}{l}{lx}{}
-\DeclareFontSeriesChangeRule {x}{sb}{sbx}{}
-\DeclareFontSeriesChangeRule {x}{sc}{sc}{}
-\DeclareFontSeriesChangeRule {x}{sl}{slx}{}
-\DeclareFontSeriesChangeRule {x}{ub}{ubx}{}
-\DeclareFontSeriesChangeRule {x}{ul}{ulx}{}
-\DeclareFontSeriesChangeRule {bc}{m?}{c}{}
-\DeclareFontSeriesChangeRule {bec}{m?}{ec}{}
-\DeclareFontSeriesChangeRule {bsc}{m?}{sc}{}
-\DeclareFontSeriesChangeRule {bx}{m?}{x}{}
-\DeclareFontSeriesChangeRule {b}{m?}{m}{}
-\DeclareFontSeriesChangeRule {c}{m?}{c}{}
-\DeclareFontSeriesChangeRule {ebc}{m?}{c}{}
-\DeclareFontSeriesChangeRule {ebec}{m?}{ec}{}
-\DeclareFontSeriesChangeRule {ebsc}{m?}{sc}{}
-\DeclareFontSeriesChangeRule {ebx}{m?}{x}{}
-\DeclareFontSeriesChangeRule {eb}{m?}{m}{}
-\DeclareFontSeriesChangeRule {ec}{m?}{ec}{}
-\DeclareFontSeriesChangeRule {elc}{m?}{c}{}
-\DeclareFontSeriesChangeRule {elec}{m?}{ec}{}
-\DeclareFontSeriesChangeRule {elsc}{m?}{sc}{}
-\DeclareFontSeriesChangeRule {elx}{m?}{x}{}
-\DeclareFontSeriesChangeRule {el}{m?}{m}{}
-\DeclareFontSeriesChangeRule {lc}{m?}{c}{}
-\DeclareFontSeriesChangeRule {lec}{m?}{ec}{}
-\DeclareFontSeriesChangeRule {lsc}{m?}{sc}{}
-\DeclareFontSeriesChangeRule {lx}{m?}{x}{}
-\DeclareFontSeriesChangeRule {l}{m?}{m}{}
-\DeclareFontSeriesChangeRule {m}{m?}{m}{}
-\DeclareFontSeriesChangeRule {sbc}{m?}{c}{}
-\DeclareFontSeriesChangeRule {sbec}{m?}{ec}{}
-\DeclareFontSeriesChangeRule {sbsc}{m?}{sc}{}
-\DeclareFontSeriesChangeRule {sbx}{m?}{x}{}
-\DeclareFontSeriesChangeRule {sb}{m?}{m}{}
-\DeclareFontSeriesChangeRule {sc}{m?}{sc}{}
-\DeclareFontSeriesChangeRule {slc}{m?}{c}{}
-\DeclareFontSeriesChangeRule {slec}{m?}{ec}{}
-\DeclareFontSeriesChangeRule {slsc}{m?}{sc}{}
-\DeclareFontSeriesChangeRule {slx}{m?}{x}{}
-\DeclareFontSeriesChangeRule {sl}{m?}{m}{}
-\DeclareFontSeriesChangeRule {ubc}{m?}{c}{}
-\DeclareFontSeriesChangeRule {ubec}{m?}{ec}{}
-\DeclareFontSeriesChangeRule {ubsc}{m?}{sc}{}
-\DeclareFontSeriesChangeRule {ubx}{m?}{x}{}
-\DeclareFontSeriesChangeRule {ub}{m?}{ub}{}
-\DeclareFontSeriesChangeRule {ulc}{m?}{c}{}
-\DeclareFontSeriesChangeRule {ulec}{m?}{ec}{}
-\DeclareFontSeriesChangeRule {ulsc}{m?}{sc}{}
-\DeclareFontSeriesChangeRule {ulx}{m?}{x}{}
-\DeclareFontSeriesChangeRule {ul}{m?}{m}{}
-\DeclareFontSeriesChangeRule {x}{m?}{x}{}
-\DeclareFontSeriesChangeRule {bc}{?m}{b}{}
-\DeclareFontSeriesChangeRule {bec}{?m}{b}{}
-\DeclareFontSeriesChangeRule {bsc}{?m}{b}{}
-\DeclareFontSeriesChangeRule {bsc}{?m}{b}{}
-\DeclareFontSeriesChangeRule {bx}{?m}{b}{}
-\DeclareFontSeriesChangeRule {b}{?m}{b}{}
-\DeclareFontSeriesChangeRule {c}{?m}{m}{}
-\DeclareFontSeriesChangeRule {ebc}{?m}{eb}{}
-\DeclareFontSeriesChangeRule {ebec}{?m}{eb}{}
-\DeclareFontSeriesChangeRule {ebsc}{?m}{eb}{}
-\DeclareFontSeriesChangeRule {ebsc}{?m}{eb}{}
-\DeclareFontSeriesChangeRule {ebx}{?m}{eb}{}
-\DeclareFontSeriesChangeRule {eb}{?m}{eb}{}
-\DeclareFontSeriesChangeRule {ec}{?m}{m}{}
-\DeclareFontSeriesChangeRule {elc}{?m}{el}{}
-\DeclareFontSeriesChangeRule {elec}{?m}{el}{}
-\DeclareFontSeriesChangeRule {elsc}{?m}{el}{}
-\DeclareFontSeriesChangeRule {elsc}{?m}{el}{}
-\DeclareFontSeriesChangeRule {elx}{?m}{el}{}
-\DeclareFontSeriesChangeRule {el}{?m}{el}{}
-\DeclareFontSeriesChangeRule {lc}{?m}{l}{}
-\DeclareFontSeriesChangeRule {lec}{?m}{l}{}
-\DeclareFontSeriesChangeRule {lsc}{?m}{l}{}
-\DeclareFontSeriesChangeRule {lsc}{?m}{l}{}
-\DeclareFontSeriesChangeRule {lx}{?m}{l}{}
-\DeclareFontSeriesChangeRule {l}{?m}{l}{}
-\DeclareFontSeriesChangeRule {m}{?m}{m}{}
-\DeclareFontSeriesChangeRule {sbc}{?m}{sb}{}
-\DeclareFontSeriesChangeRule {sbec}{?m}{sb}{}
-\DeclareFontSeriesChangeRule {sbsc}{?m}{sb}{}
-\DeclareFontSeriesChangeRule {sbsc}{?m}{sb}{}
-\DeclareFontSeriesChangeRule {sbx}{?m}{sb}{}
-\DeclareFontSeriesChangeRule {sb}{?m}{sb}{}
-\DeclareFontSeriesChangeRule {sc}{?m}{m}{}
-\DeclareFontSeriesChangeRule {sc}{?m}{m}{}
-\DeclareFontSeriesChangeRule {slc}{?m}{sl}{}
-\DeclareFontSeriesChangeRule {slec}{?m}{sl}{}
-\DeclareFontSeriesChangeRule {slsc}{?m}{sl}{}
-\DeclareFontSeriesChangeRule {slsc}{?m}{sl}{}
-\DeclareFontSeriesChangeRule {slx}{?m}{sl}{}
-\DeclareFontSeriesChangeRule {sl}{?m}{sl}{}
-\DeclareFontSeriesChangeRule {ubc}{?m}{ub}{}
-\DeclareFontSeriesChangeRule {ubec}{?m}{ub}{}
-\DeclareFontSeriesChangeRule {ubsc}{?m}{ub}{}
-\DeclareFontSeriesChangeRule {ubsc}{?m}{ub}{}
-\DeclareFontSeriesChangeRule {ubx}{?m}{ub}{}
-\DeclareFontSeriesChangeRule {ub}{?m}{m}{}
-\DeclareFontSeriesChangeRule {ulc}{?m}{ul}{}
-\DeclareFontSeriesChangeRule {ulec}{?m}{ul}{}
-\DeclareFontSeriesChangeRule {ulsc}{?m}{ul}{}
-\DeclareFontSeriesChangeRule {ulsc}{?m}{ul}{}
-\DeclareFontSeriesChangeRule {ulx}{?m}{ul}{}
-\DeclareFontSeriesChangeRule {ul}{?m}{ul}{}
-\DeclareFontSeriesChangeRule {x}{?m}{m}{}
-
-
-\newif\if at forced@series
-\DeclareRobustCommand\fontseriesforce[1]{\@forced at seriestrue\edef\f at series{#1}}
-\DeclareRobustCommand\fontseries[1]{\@forced at seriesfalse\merge at font@series{#1}}
-
-\def\merge at font@series#1{%
-  \expandafter\expandafter\expandafter
-  \merge at font@series@
-    \csname series@\f at series @#1\endcsname
-    {#1}%
-    \@nil
-}
-
-\def\merge at font@series@#1#2#3\@nil{%
-  \def\reserved at a{#3}%
-  \ifx\reserved at a\@empty
-    \set at target@series{#2}%
-  \else
-    \maybe at load@fontshape
-    \edef\reserved at a{\f at encoding /\f at family /#1/\f at shape}%
-     \ifcsname \reserved at a \endcsname
-       \set at target@series{#1}%
-    \else
-       \ifcsname \f at encoding /\f at family /#2/\f at shape \endcsname
-         \set at target@series{#2}%
-         \@font at shape@subst at warning
-       \else
-         \set at target@series{#3}%
-         \@font at shape@subst at warning
-       \fi
-    \fi
-  \fi
-}
-\def\@font at shape@subst at warning{%
-   \edef\reserved at b{\curr at fontshape}%
-   \ifx\reserved at a\reserved at b \else
-     \@font at warning{Font shape `\reserved at a' undefined\MessageBreak
-                    using `\reserved at b' instead}%
-   \fi
-}
-\def\maybe at load@fontshape{\begingroup\try at load@fontshape\endgroup}
-\DeclareFontSeriesChangeRule {m}{sc}{msc}{mc}
-\def\set at target@series#1{%
-    \edef\f at series{#1}%
-    \series at maybe@drop at one@m\f at series\f at series
-}
-\def\series at maybe@drop at one@m#1{%
-  \expandafter\series at maybe@drop at one@m at x\expandafter{#1}}
-
-\def\series at maybe@drop at one@m at x#1#2{%
-  \def\in@@##1,#1,{}%
-  \series at check@toks\expandafter{\in@@
-    ,ulm,elm,lm,slm,mm,sbm,bm,ebm,ubm,muc,mec,mc,msc,msx,mx,mex,mux,{}{},#1,}%
-  \edef\in@@{\the\series at check@toks}%
-  \ifx\in@@\@empty
-    \edef#2{#1}%
-  \else
-    \edef#2{\expandafter\series at drop@one at m #1m\series at drop@one at m}%
-  \fi
-}
-\newtoks\series at check@toks
-\def\series at drop@one at m#1m#2m#3\series at drop@one at m{%
-   #1#2%
-}
-
-\def\DeclareFontShapeChangeRule #1#2#3#4{%
-  \@namedef{shape@#1@#2}{{#3}{#4}}}
-\DeclareRobustCommand\ulcshape
-        {\not at math@alphabet\ulcshape\relax
-         \fontshape\ulcdefault\selectfont}
-\let\ulcdefault\@undefined      % for rollback
-\newcommand\ulcdefault{ulc}
-\DeclareRobustCommand\swshape
-        {\not at math@alphabet\swshape\relax
-         \fontshape\swdefault\selectfont}
-\let\swdefault\@undefined      % for rollback
-\newcommand\swdefault{sw}
-\DeclareRobustCommand\sscshape
-        {\not at math@alphabet\sscshape\relax
-         \fontshape\sscdefault\selectfont}
-\let\sscdefault\@undefined      % for rollback
-\newcommand\sscdefault{ssc}
-\DeclareFontShapeChangeRule {n}{it}  {it}  {sl}
-\DeclareFontShapeChangeRule {n}{sl}  {sl}  {it}
-\DeclareFontShapeChangeRule {n}{ulc} {n}   {}
-\DeclareFontShapeChangeRule {n}{up} {n}    {}
-\DeclareFontShapeChangeRule {it}{sl}  {sl}    {it}
-\DeclareFontShapeChangeRule {it}{sc}  {scit}  {scsl}
-\DeclareFontShapeChangeRule {it}{ulc} {it}    {}
-\DeclareFontShapeChangeRule {it}{up} {n}      {}
-\DeclareFontShapeChangeRule {sl}{it}  {it}    {sl}
-\DeclareFontShapeChangeRule {sl}{sc}  {scsl}  {scit}
-\DeclareFontShapeChangeRule {sl}{ulc} {sl}    {}
-\DeclareFontShapeChangeRule {sl}{up} {n}      {}
-\DeclareFontShapeChangeRule {sc}{it}  {scit}  {scsl}
-\DeclareFontShapeChangeRule {sc}{sl}  {scsl}  {scit}
-\DeclareFontShapeChangeRule {sc}{sw}  {scsw}  {sw}
-\DeclareFontShapeChangeRule {sc}{ulc} {n}     {}
-\DeclareFontShapeChangeRule {sc}{up} {n}     {}
-\DeclareFontShapeChangeRule {scit}{it}  {scit}  {}
-\DeclareFontShapeChangeRule {scit}{sl}  {scsl}  {scit}
-\DeclareFontShapeChangeRule {scit}{sw}  {scsw}  {sc}    % or scit?
-\DeclareFontShapeChangeRule {scit}{sc}  {scit}  {}
-\DeclareFontShapeChangeRule {scit}{ulc} {it}    {}
-\DeclareFontShapeChangeRule {scit}{up} {sc}     {}
-\DeclareFontShapeChangeRule {scsl}{it}  {scit}  {scsl}
-\DeclareFontShapeChangeRule {scsl}{sl}  {scsl}  {}
-\DeclareFontShapeChangeRule {scsl}{sw}  {scsw}  {sc}    % or scsl?
-\DeclareFontShapeChangeRule {scsl}{sc}  {scsl}  {}
-\DeclareFontShapeChangeRule {scsl}{ulc} {sl}    {}
-\DeclareFontShapeChangeRule {scsl}{up}   {sc}   {}
-\DeclareFontShapeChangeRule {scsw}{it}  {scit}  {scsw}
-\DeclareFontShapeChangeRule {scsw}{sl}  {scsl}  {}
-\DeclareFontShapeChangeRule {scsw}{sw}  {scsw}  {}
-\DeclareFontShapeChangeRule {scsw}{sc}  {scsw}  {}
-\DeclareFontShapeChangeRule {scsw}{ulc} {sw}    {}
-\DeclareFontShapeChangeRule {scsw}{up} {sc}     {}
-\DeclareFontShapeChangeRule {sw}{sc}  {scsw}  {}
-\DeclareFontShapeChangeRule {sw}{ulc} {sw}    {}
-\DeclareFontShapeChangeRule {sw}{up} {n}      {}
-\DeclareRobustCommand\fontshape[1]{\merge at font@shape{#1}}
-\DeclareRobustCommand\fontshapeforce[1]{\edef\f at shape{#1}}
-\def\merge at font@shape#1{%
-  \expandafter\expandafter\expandafter
-  \merge at font@shape@
-    \csname shape@\f at shape @#1\endcsname
-    {#1}%
-    \@nil
-}
-
-\def\merge at font@shape@#1#2#3\@nil{%
-  \def\reserved at a{#3}%
-  \ifx\reserved at a\@empty
-    \edef\f at shape{#2}%
-  \else
-    \maybe at load@fontshape
-    \edef\reserved at a{\f at encoding /\f at family /\f at series/#1}%
-     \ifcsname \reserved at a\endcsname
-       \edef\f at shape{#1}%
-    \else
-       \ifcsname \f at encoding /\f at family /\f at series/#2\endcsname
-         \edef\f at shape{#2}%
-         \@font at shape@subst at warning
-       \else
-         \edef\f at shape{#3}%
-         \@font at shape@subst at warning
-       \fi
-    \fi
-  \fi
-}
-\protected\def\normalshape
-    {\not at math@alphabet\normalshape\relax
-      \fontshape\shapedefault\selectfont}%
-\def\reinstall at nfss@defs{%
-  \protected\def\upshape
-          {\not at math@alphabet\upshape\relax
-           \fontshape\updefault\selectfont}%
-  \protected\def\slshape
-          {\not at math@alphabet\slshape\relax
-           \fontshape\sldefault\selectfont}%
-  \protected\def\scshape
-          {\not at math@alphabet\scshape\relax
-           \fontshape\scdefault\selectfont}%
-  \protected\def\itshape
-          {\not at math@alphabet\itshape\mathit
-           \fontshape\itdefault\selectfont}%
-  \protected\def\ulcshape
-          {\not at math@alphabet\ulcshape\relax
-           \fontshape{ulc}\selectfont}%
-  \protected\def\swshape
-          {\not at math@alphabet\swshape\relax
-           \fontshape\swdefault\selectfont}%
-  \protected\def\sscshape
-          {\not at math@alphabet\sscshape\relax
-           \fontshape\sscdefault\selectfont}%
-}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-   {\DeclareFontSeriesChangeRule}{Series change rules}%
-
-\DeclareRobustCommand\fontseries[1]{\edef\f at series{#1}}
-\DeclareRobustCommand\fontshape [1]{\edef\f at shape{#1}}
-\let\fontseriesforce\@undefined
-\let\fontshapeforce\@undefined
-
-\let\DeclareFontSeriesChangeRule\@undefined
-\let\merge at font@series\@undefined
-\let\merge at font@series@\@undefined
-\let\@font at shape@subst at warning\@undefined
-\let\maybe at load@fontshape\@undefined
-\let\set at target@series\@undefined
-\let\series at maybe@drop at one@m\@undefined
-\let\series at drop@one at m\@undefined
-\let\DeclareFontShapeChangeRule\@undefined
-\let\merge at font@shape\@undefined
-\let\merge at font@shape@\@undefined
-\let\normalshape\@undefined
-\let\ulcshape\@undefined
-\let\ulcdefault\@undefined
-\let\swshape\@undefined
-\let\swdefault\@undefined
-\let\sscshape\@undefined
-\let\sscdefault\@undefined
-\let\normalshape\@undefined
-
-\let\reinstall at nfss@defs\relax
-\EndIncludeInRelease
-\IncludeInRelease{2020/10/01}%
-                 {\reinstall at nfss@defs}{NFSS series init}%
-\g at addto@macro\@kernel at after@begindocument at before
-              {\reinstall at nfss@defs\init at series@setup}
-\EndIncludeInRelease
-\IncludeInRelease{2020/02/02}%
-                 {\reinstall at nfss@defs}{NFSS series init}%
-\AtBeginDocument{\reinstall at nfss@defs\init at series@setup}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\reinstall at nfss@defs}{NFSS series init}%
-\EndIncludeInRelease
-%%% From File: ltfsstrc.dtx
-%% Copyright (C) 1989-97 by Frank Mittelbach and Rainer Sch\"opf.
-%% Copyright (C) 1994-97 by LaTeX3 project. All rights reserved.
-\IncludeInRelease{2020/02/02}%
-                 {\@font at aliasinfo}{alias size function}%
-\DeclareSizeFunction{alias}{\sub at sfcnt\@font at aliasinfo}
-\def\@font at aliasinfo#1{%
-  \@font at info{Font\space shape\space `\curr at fontshape'\space
-              aliased\space to\MessageBreak `\mandatory at arg'}%
-}
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}%
-                 {\@font at aliasinfo}{alias size function}%
-\let\s at fct@alias\@undefined
-\let\@font at aliasinfo\@undefined
-
-\EndIncludeInRelease
-%%% From File: ltfsscmp.dtx
-%% Copyright (C) 1989-1995 Frank Mittelbach and Rainer Sch\"opf,
-%% all rights reserved.
-\IncludeInRelease{2015/01/01}{\new at fontshape}%
-                             {NFSS version1 commands}%
-\let\new at fontshape\@undefined
-\let\warn at rel@i\@undefined
-\let\scan at fontshape\@undefined
-\let\scan@@fontshape\@undefined
-\let\subst at fontshape\@undefined
-\let\extra at def\@undefined
-\let\default at mextra\@undefined
-\let\preload at sizes\@undefined
-\let\err at rel@i\@undefined
-\let\newmathalphabet\@undefined
-\let\newmathalphabet@\@undefined
-\let\newmathalphabet@@@\@undefined
-\let\if at no@font at opt\@undefined
-\let\@no at font@optfalse\@undefined
-\let\define at mathalphabet\@undefined
-\let\define at mathgroup\@undefined
-\let\addtoversion\@undefined
-\EndIncludeInRelease
-\IncludeInRelease{0000/00/00}{\new at fontshape}%
-                             {NFSS version1 commands}%
-\gdef\new at fontshape#1#2#3#4{%
-     \warn at rel@i\new at fontshape\DeclareFontShape
-     \expandafter\scan at fontshape\@gobble#4<\@nil><<%
-     \DeclareFontShape U{#1}{#2}{#3}\reserved at f}%
-\@onlypreamble\new at fontshape
-\gdef\warn at rel@i#1#2{%
- \@font at warning{***  NFSS release 1 command
-               \noexpand#1found\MessageBreak
-   ***  Update by using release 2 command
-        \string#2.\MessageBreak
-   ***  Recovery is probably possible}%
-}%
-\@onlypreamble\warn at rel@i
-\gdef\scan at fontshape{%
-  \let\reserved at f\@empty
-  \let\reserved at e\@empty %        holds last info
-  \scan@@fontshape
-}%
-\@onlypreamble\scan at fontshape
-\gdef\scan@@fontshape#1>#2#3<{%
-  \ifx\@nil#1%
-    \edef\reserved at f{\reserved at f\reserved at e}%
-  \else
-    \def\reserved at b{#1}%       nick names
-    \def\reserved at c{#3}%
-    \in@{ at}{#3}%
-    \ifin@
-      \in@{pt}{#3}%  not a proof but a good chance
-      \ifin@
-        \def\reserved at a##1 at##2pt##3\@nil{%
-           \def\reserved at b{##2}%
-           \def\reserved at c{##1}%
-           }%
-        \reserved at a#3\@nil
-      \fi
-    \fi
-    \ifnum 0<0#2
-      \edef\reserved at d{subf*\reserved at c}%
-      \ifcase #2\or
-      \or
-      \else
-        \errmessage{*** What's this? NFSS release 0? ***}%
-      \fi
-    \else
-      \edef\reserved at d{#2\reserved at c}%
-    \fi
-    \ifx\reserved at d\reserved at e
-      \edef\reserved at f{\reserved at f<\reserved at b>}%
-    \else
-      \edef\reserved at f{\reserved at f\reserved at e<\reserved at b>}%add old info
-      \let\reserved at e\reserved at d
-    \fi
-    \expandafter\scan@@fontshape
-  \fi
-}%
-\@onlypreamble\scan@@fontshape
-\gdef\subst at fontshape#1#2#3#4#5#6{%
-     \warn at rel@i\subst at fontshape\DeclareFontShape
-     \DeclareFontShape{U}{#1}{#2}{#3}{<->sub*#4/#5/#6}{}}%
-\@onlypreamble\subst at fontshape
-\gdef\extra at def#1#2#3{%
-     \warn at rel@i\extra at def\DeclareFontFamily
-     \DeclareFontFamily{U}{#1}{}%
-}%
-\@onlypreamble\extra at def
-\gdef\default at mextra{%
-  \warn at rel@i\default at mextra\DeclareFontEncodingDefaults
-  \DeclareFontEncodingDefaults\relax
-}%
-\@onlypreamble\default at mextra
-\gdef\preload at sizes{%
-     \warn at rel@i\preload at sizes\DeclarePreloadSizes
-     \DeclarePreloadSizes U%
-}%
-\@onlypreamble\preload at sizes
-\gdef\err at rel@i#1#2{%
-  \@latex at error{***  NFSS release 1 command \noexpand#1found%
-          ^^J***  Recovery not possible. Use \string#2}%
-       {The new release of NFSS doesn't support the
-        \noexpand#1command^^Jany longer.
-        Please upgrade your file to the syntax of NFSS
-        release 2^^Jusing the \noexpand#2command.}%
-  \batchmode\input.\relax
-}%
-\@onlypreamble\err at rel@i
-\gdef\newmathalphabet{%
-  \if at no@font at opt
-    \@latex at error{*** NFSS release 1 command
-                    \noexpand\newmathalphabet found%
-     ^^J \space*** Automatic recovery not possible.%
-     ^^J \space*** TYPE H for Help%
-              }%
-       {Please look at the file usrguide.tex for hints on
-        how to resolve this problem.}%
-  \else
-     \warn at rel@i\newmathalphabet\DeclareMathAlphabet
-  \fi
-  \@ifstar\newmathalphabet@@@
-          \newmathalphabet@@}%
-\gdef\newmathalphabet@@#1{\DeclareMathAlphabet#1{U}{}{}{}}%
-\gdef\newmathalphabet@@@#1#2#3#4{%
-       \DeclareMathAlphabet{#1}{U}{#2}{#3}{#4}}%
-\@onlypreamble\newmathalphabet
-\@onlypreamble\newmathalphabet@@
-\@onlypreamble\newmathalphabet@@@
-\global\let\if at no@font at opt\iftrue
-\gdef\@no at font@optfalse{\let\if at no@font at opt\iffalse}%
-\gdef\define at mathalphabet{%
-      \err at rel@i\define at mathalphabet\DeclareMathAlphabet
-}%
-\@onlypreamble\define at mathalphabet
-\gdef\define at mathgroup{%
-      \err at rel@i\define at mathgroup\DeclareSymbolFont
-}%
-\@onlypreamble\define at mathgroup
-\def\addtoversion#1#2{%
-  \warn at rel@i\addtoversion\SetMathAlphabet
-  \SetMathAlphabet#2{#1}{U}}%
-\@onlypreamble\addtoversion
-\EndIncludeInRelease
 %%% From File: ltpageno.dtx
 %%% From File: ltxref.dtx
 \IncludeInRelease{2020/10/01}%
@@ -9685,6 +6441,7 @@
 \IncludeInRelease{2020/10/01}%
                  {\enddocument}{Use Hooks}%
 \def\enddocument{%
+   \@kernel at before@enddocument
    \UseOneTimeHook{enddocument}%
    \@kernel at after@enddocument
    \@checkend{document}%
@@ -9712,8 +6469,6 @@
 \AddToHook{enddocument/info}[kernel/filelist]{\@dofilelist}
 \AddToHook{enddocument/info}[kernel/warnings]{\@enddocument at kernel@warnings}
 \DeclareHookRule{enddocument/info}{kernel/filelist}{before}{kernel/warnings}
-\let\@kernel at after@enddocument\@empty
-\let\@kernel at after@enddocument at afterlastpage\@empty
 \def\@enddocument at kernel@warnings{%
    \ifdim \font at submax >\fontsubfuzz\relax
      \@font at warning{Size substitutions with differences\MessageBreak
@@ -9773,11 +6528,19 @@
    \endgroup
    \deadcycles\z@\@@end}
 
-\let\@kernel at after@enddocument\@undefined
-\let\@kernel at after@enddocument at afterlastpage\@undefined
 \let\@enddocument at kernel@warnings\@undefined
 
 \EndIncludeInRelease
+\IncludeInRelease{2021/05/01}%
+                 {\@kernel at before@enddocument}{kernel before hook}%
+\def\@kernel at before@enddocument{\par}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@kernel at before@enddocument}{kernel before hook}%
+
+\let\@kernel at before@enddocument\@empty
+
+\EndIncludeInRelease
 \IncludeInRelease{2018/12/01}%
                  {\protected at file@percent}{Mask line endings}%
 \protected\def\protected at file@percent{}
@@ -10132,303 +6895,4024 @@
     \verbatim at font\@noligs
     \@ifstar\@sverb\@verb}
 \EndIncludeInRelease
-\ifx\directlua\@undefined\else
-\IncludeInRelease{2015/10/01}
-                 {\newluafunction}{LuaTeX}%
-\ifnum\luatexversion<60 %
-  \wlog{***************************************************}
-  \wlog{* LuaTeX version too old for ltluatex support *}
-  \wlog{***************************************************}
-  \expandafter\endinput
+%%% From File: ltmath.dtx
+\IncludeInRelease{2019/10/01}%
+                 {\vphantom}{Make commands robust}%
+\DeclareRobustCommand\vphantom{\v at true\h at false\ph at nt}
+\DeclareRobustCommand\hphantom{\v at false\h at true\ph at nt}
+\DeclareRobustCommand\phantom{\v at true\h at true\ph at nt}
+\DeclareRobustCommand\mathstrut{\vphantom(}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\vphantom}{Make commands robust}%
+
+\kernel at make@fragile\vphantom
+\kernel at make@fragile\hphantom
+\kernel at make@fragile\phantom
+\kernel at make@fragile\mathstrut
+
+\EndIncludeInRelease
+\IncludeInRelease{2018/12/01}%
+                 {\finph at nt}{Start LR-mode}%
+\def\finph at nt{%
+  \setbox\tw@\null
+  \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi
+  \ifh@ \wd\tw@\wd\z@\fi
+  \leavevmode at ifvmode\box\tw@}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\finph at nt}{Start LR-mode}%
+\def\finph at nt{%
+  \setbox\tw@\null
+  \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi
+  \ifh@ \wd\tw@\wd\z@\fi \box\tw@}
+\EndIncludeInRelease
+\IncludeInRelease{2018/12/01}%
+                 {\finsm at sh}{Start LR-mode}%
+\def\finsm at sh{\ht\z@\z@ \dp\z@\z@ \leavevmode at ifvmode\box\z@}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\finsm at sh}{Start LR-mode}%
+\def\finsm at sh{\ht\z@\z@ \dp\z@\z@ \box\z@}
+\EndIncludeInRelease
+\IncludeInRelease{2019/10/01}%
+                 {\cases}{Make commands robust}%
+\DeclareRobustCommand*\cases[1]{\left\{\,\vcenter{\normalbaselines\m at th
+    \ialign{$##\hfil$&\quad{##}\hfil\crcr#1\crcr}}\right.}
+\DeclareRobustCommand*\matrix[1]{\null\,\vcenter{\normalbaselines\m at th
+    \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
+      \mathstrut\crcr\noalign{\kern-\baselineskip}
+      #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}
+\DeclareRobustCommand*\pmatrix[1]{\left(\matrix{#1}\right)}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\cases}{Make commands robust}%
+
+\kernel at make@fragile\cases
+\kernel at make@fragile\matrix
+\kernel at make@fragile\pmatrix
+
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\tmspace}{amsmath spacing commands}%
+\DeclareRobustCommand\tmspace[3]{%
+  \ifmmode\mskip#1#2\else\leavevmode at ifvmode\kern#1#3\fi\relax}
+\DeclareRobustCommand\,{\tmspace+\thinmuskip{.16667em}}
+\let\thinspace\,
+\DeclareRobustCommand\!{\tmspace-\thinmuskip{.16667em}}
+\let\negthinspace\!
+\DeclareRobustCommand\:{\tmspace+\medmuskip{.2222em}}
+\let\medspace\:
+\let\>=\:
+\DeclareRobustCommand\negmedspace{\tmspace-\medmuskip{.2222em}}
+\DeclareRobustCommand\;{\tmspace+\thickmuskip{.2777em}}
+\let\thickspace\;
+\DeclareRobustCommand\negthickspace{\tmspace-\thickmuskip{.2777em}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\tmspace}{amsmath spacing commands}%
+
+\let\tmspace\@undefined
+\DeclareRobustCommand{\,}{%
+   \relax\ifmmode\mskip\thinmuskip\else\thinspace\fi}
+\DeclareRobustCommand\thinspace{\leavevmode at ifvmode\kern .16667em }
+\DeclareRobustCommand\negthinspace{\leavevmode at ifvmode\kern-.16667em }
+\def\>{\mskip\medmuskip}
+\let\:=\>
+\def\;{\mskip\thickmuskip}
+\def\!{\mskip-\thinmuskip}
+
+\let\negmedspace\@undefined
+\let\negthickspace\@undefined
+
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}{\(}{Make \( robust}%
+\DeclareRobustCommand\({%
+  \relax\ifmmode\@badmath\else$\fi}%
+\DeclareRobustCommand\){%
+  \relax\ifmmode\ifinner$\else\@badmath\fi\else \@badmath\fi}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}{\(}{Make \( robust}%
+\def\({%
+  \relax\ifmmode\@badmath\else$\fi}%
+\expandafter\let\csname\string( \endcsname\@undefined
+\def\){%
+  \relax\ifmmode\ifinner$\else\@badmath\fi\else \@badmath\fi}%
+\expandafter\let\csname\string) \endcsname\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}{\[}{Make \[ robust}%
+\DeclareRobustCommand\[{%
+   \relax\ifmmode
+      \@badmath
+   \else
+      \ifvmode
+         \nointerlineskip
+         \makebox[.6\linewidth]{}%
+      \fi
+      $$%%$$ BRACE MATCH HACK
+   \fi
+}%
+\DeclareRobustCommand\]{%
+   \relax\ifmmode
+      \ifinner
+         \@badmath
+      \else
+         $$%%$$ BRACE MATCH HACK
+      \fi
+   \else
+      \@badmath
+   \fi
+   \ignorespaces
+}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}{\[}{Make \[ robust}%
+\def\[{%
+   \relax\ifmmode
+      \@badmath
+   \else
+      \ifvmode
+         \nointerlineskip
+         \makebox[.6\linewidth]{}%
+      \fi
+      $$%%$$ BRACE MATCH HACK
+   \fi
+}%
+\expandafter\let\csname\string[ \endcsname\@undefined
+\def\]{%
+   \relax\ifmmode
+      \ifinner
+         \@badmath
+      \else
+         $$%%$$ BRACE MATCH HACK
+      \fi
+   \else
+      \@badmath
+   \fi
+   \ignorespaces
+}%
+\expandafter\let\csname\string] \endcsname\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\@xeqncr}{eqnarray support calc syntax}%
+\def\@xeqncr[#1]{%
+   \ifnum0=`{\fi}%
+   \@@eqncr
+   \noalign{\penalty\@eqpen\vskip\jot\@vspace at calcify{#1}}%
+}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@xeqncr}{eqnarray support calc syntax}%
+
+\def\@xeqncr[#1]{%
+   \ifnum0=`{\fi}%
+   \@@eqncr
+   \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}%
+}
+\EndIncludeInRelease
+%%% From File: ltlists.dtx
+%%% From File: ltboxes.dtx
+\IncludeInRelease{2015/01/01}%
+                 {\makebox}{Make \makebox robust}%
+\DeclareRobustCommand\makebox{%
+  \leavevmode
+  \@ifnextchar(%)
+    \@makepicbox
+    {\@ifnextchar[\@makebox\mbox}}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\makebox}{Make \makebox robust}%
+\def\makebox{%
+  \leavevmode
+  \@ifnextchar(%)
+    \@makepicbox
+    {\@ifnextchar[\@makebox\mbox}}%
+\expandafter\let\csname makebox \endcsname\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\@imakepicbox}{default units}%
+\long\def\@imakepicbox(#1,#2)[#3]#4{%
+  \@defaultunitsset\@tempdimc{#2}\unitlength
+  \vbox to\@tempdimc
+   {\let\mb at b\vss \let\mb at l\hss\let\mb at r\hss
+    \let\mb at t\vss
+    \@tfor\reserved at a :=#3\do{%
+      \if s\reserved at a
+        \let\mb at l\relax\let\mb at r\relax
+      \else
+        \expandafter\let\csname mb@\reserved at a\endcsname\relax
+      \fi}%
+    \mb at t
+    \@defaultunitsset\@tempdimc{#1}\unitlength
+    \hb at xt@\@tempdimc{\mb at l #4\mb at r}%
+    \mb at b
+    \kern\z@}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@imakepicbox}{default units}%
+\long\def\@imakepicbox(#1,#2)[#3]#4{%
+  \vbox to#2\unitlength
+   {\let\mb at b\vss \let\mb at l\hss\let\mb at r\hss
+    \let\mb at t\vss
+    \@tfor\reserved at a :=#3\do{%
+      \if s\reserved at a
+        \let\mb at l\relax\let\mb at r\relax
+      \else
+        \expandafter\let\csname mb@\reserved at a\endcsname\relax
+      \fi}%
+    \mb at t
+    \hb at xt@ #1\unitlength{\mb at l #4\mb at r}%
+    \mb at b
+    \kern\z@}}
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+                 {\savebox}{Make \savebox robust}%
+\DeclareRobustCommand\savebox[1]{%
+  \@ifnextchar(%)
+    {\@savepicbox#1}{\@ifnextchar[{\@savebox#1}{\sbox#1}}}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\savebox}{Make \savebox robust}%
+\def\savebox#1{%
+  \@ifnextchar(%)
+    {\@savepicbox#1}{\@ifnextchar[{\@savebox#1}{\sbox#1}}}%
+\expandafter\let\csname savebox \endcsname\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+                 {\framebox}{Make \framebox robust}%
+\DeclareRobustCommand\framebox{%
+  \@ifnextchar(%)
+    \@framepicbox{\@ifnextchar[\@framebox\fbox}}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\framebox}{Make \framebox robust}%
+\def\framebox{%
+  \@ifnextchar(%)
+    \@framepicbox{\@ifnextchar[\@framebox\fbox}}%
+\expandafter\let\csname framebox \endcsname\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+                 {\parbox}{Make \parbox robust}%
+\DeclareRobustCommand\parbox{%
+  \@ifnextchar[%]
+    \@iparbox
+    {\@iiiparbox c\relax[s]}}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\parbox}{Make \parbox robust}%
+\def\parbox{%
+  \@ifnextchar[%]
+    \@iparbox
+    {\@iiiparbox c\relax[s]}}%
+\expandafter\let\csname parbox \endcsname\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2017-04-15}%
+                 {\normallineskiplimit}
+                 {reset \lineskiplimit}%
+\def\@arrayparboxrestore{%
+  \let\if at nobreak\iffalse
+  \let\if at noskipsec\iffalse
+  \let\par\@@par
+  \let\-\@dischyph
+  \let\'\@acci\let\`\@accii\let\=\@acciii
+  \parindent\z@ \parskip\z at skip
+  \everypar{}%
+  \linewidth\hsize
+  \@totalleftmargin\z@
+  \leftskip\z at skip \rightskip\z at skip \@rightskip\z at skip
+  \parfillskip\@flushglue
+  \lineskip\normallineskip
+  \lineskiplimit\normallineskiplimit
+  \baselineskip\normalbaselineskip
+  \sloppy}
+\EndIncludeInRelease
+\IncludeInRelease{0000-00-00}%
+                 {\normallineskiplimit}
+                 {reset \lineskiplimit}%
+\def\@arrayparboxrestore{%
+  \let\if at nobreak\iffalse
+  \let\if at noskipsec\iffalse
+  \let\par\@@par
+  \let\-\@dischyph
+  \let\'\@acci\let\`\@accii\let\=\@acciii
+  \parindent\z@ \parskip\z at skip
+  \everypar{}%
+  \linewidth\hsize
+  \@totalleftmargin\z@
+  \leftskip\z at skip \rightskip\z at skip \@rightskip\z at skip
+  \parfillskip\@flushglue \lineskip\normallineskip
+  \baselineskip\normalbaselineskip
+  \sloppy}
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+                 {\rule}{Make \rule robust}%
+\DeclareRobustCommand\rule{\@ifnextchar[\@rule{\@rule[\z@]}}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\rule}{Make \rule robust}%
+\def\rule{\@ifnextchar[\@rule{\@rule[\z@]}}%
+\expandafter\let\csname rule \endcsname\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+                 {\raisebox}{Make \raisebox robust}%
+\DeclareRobustCommand\raisebox[1]{%
+  \leavevmode
+  \@ifnextchar[{\@rsbox{#1}}{\@irsbox{#1}[]}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\raisebox}{Make \raisebox robust}%
+\def\raisebox#1{%
+  \leavevmode
+  \@ifnextchar[{\@rsbox{#1}}{\@irsbox{#1}[]}}
+\expandafter\let\csname raisebox \endcsname\@undefined
+\EndIncludeInRelease
+%%% From File: lttab.dtx
+\IncludeInRelease{2020/10/01}%
+                 {\@itabcr}{Tabbing calc syntax}%
+\def\@itabcr[#1]{\@vspace at calcify{#1}\@startline\ignorespaces}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@itabcr}{Tabbing calc syntax}%
+
+\def\@itabcr[#1]{\vskip #1\@startline\ignorespaces}
+\EndIncludeInRelease
+\IncludeInRelease{2019/10/01}%
+                 {\pushtabs}{Make commands robust}%
+\DeclareRobustCommand\pushtabs{%
+  \@stopfield\@addfield\global\advance\@tabpush \@ne \begingroup
+       \@contfield}
+\DeclareRobustCommand\poptabs{\@stopfield\@addfield
+  \ifnum \@tabpush >\z@
+    \endgroup
+    \global\advance\@tabpush \m at ne
+    \ifnum \@curtab >\@hightab
+      \global \@curtab \@hightab
+      \@badtab
+    \fi
+  \else
+    \@badpoptabs
+  \fi
+  \@contfield}
+\DeclareRobustCommand\kill{\@stopfield\@startline\ignorespaces}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\pushtabs}{Make commands robust}%
+
+\kernel at make@fragile\pushtabs
+\kernel at make@fragile\poptabs
+\kernel at make@fragile\kill
+
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\@yargarraycr}{tabular support calc syntax}%
+\def\@yargarraycr#1{\cr\noalign{\@vspace at calcify{#1}}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@yargarraycr}{tabular support calc syntax}%
+
+\def\@yargarraycr#1{\cr\noalign{\vskip #1}}
+\EndIncludeInRelease
+%%% From File: ltpictur.dtx
+\IncludeInRelease{2020/10/01}%
+                 {\@defaultunitsset}{default units}%
+\def\@defaultunitsset#1#2#3{%
+  \@defaultunits#1\dimexpr#2#3\relax\relax\@nnil}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@defaultunitsset}{default units}%
+\let\@defaultunitsset\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\@picture}{default units}%
+\def\@picture(#1,#2)(#3,#4){%
+  \@defaultunitsset\@picht{#2}\unitlength
+  \@defaultunitsset\@tempdimc{#1}\unitlength
+  \setbox\@picbox\hb at xt@\@tempdimc\bgroup
+    \@defaultunitsset\@tempdimc{#3}\unitlength
+    \hskip -\@tempdimc
+    \@defaultunitsset\@tempdimc{#4}\unitlength
+    \lower\@tempdimc\hbox\bgroup
+      \ignorespaces}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@picture}{default units}%
+\def\@picture(#1,#2)(#3,#4){%
+  \@picht#2\unitlength
+  \setbox\@picbox\hb at xt@#1\unitlength\bgroup
+    \hskip -#3\unitlength
+    \lower #4\unitlength\hbox\bgroup
+      \ignorespaces}
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\put}{default units}%
+\expandafter\let\csname put \endcsname\@undefind
+\long\def\put(#1,#2)#3{%
+  \@killglue
+  \@defaultunitsset\@tempdimc{#2}\unitlength
+  \raise\@tempdimc
+  \hb at xt@\z@{%
+    \@defaultunitsset\@tempdimc{#1}\unitlength
+    \kern\@tempdimc
+    #3\hss}%
+  \ignorespaces}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\put}{default units}%
+\expandafter\let\csname put \endcsname\@undefind
+\long\def\put(#1,#2)#3{%
+  \@killglue\raise#2\unitlength
+  \hb at xt@\z@{\kern#1\unitlength #3\hss}%
+  \ignorespaces}
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\multiput}{default units}%
+\expandafter\let\csname multiput \endcsname\@undefind
+\def\multiput(#1,#2)#3{%
+  \@defaultunitsset\@xdim{#1}\unitlength
+  \@defaultunitsset\@ydim{#2}\unitlength
+   \@multiput(}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\multiput}{default units}%
+\expandafter\let\csname multiput \endcsname\@undefind
+\def\multiput(#1,#2)#3{%
+  \@xdim #1\unitlength
+  \@ydim #2\unitlength
+   \@multiput(}
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\@multiput}{default units}%
+\long\def\@multiput(#1,#2)#3#4{%
+  \@killglue\@multicnt #3\relax
+  \@whilenum \@multicnt >\z@\do
+    {\raise\@ydim\hb at xt@\z@{\kern\@xdim #4\hss}%
+     \advance\@multicnt\m at ne
+     \@defaultunitsset{\advance\@xdim}{#1}\unitlength
+     \@defaultunitsset{\advance\@ydim}{#2}\unitlength}%
+  \ignorespaces}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@multiput}{default units}%
+\long\def\@multiput(#1,#2)#3#4{%
+  \@killglue\@multicnt #3\relax
+  \@whilenum \@multicnt >\z@\do
+    {\raise\@ydim\hb at xt@\z@{\kern\@xdim #4\hss}%
+     \advance\@multicnt\m at ne
+     \advance\@xdim#1\unitlength\advance\@ydim#2\unitlength}%
+  \ignorespaces}
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\@istackcr}{\shortstack calc support}%
+\def\@istackcr[#1]{\cr\noalign{\@vspace at calcify{#1}}\ignorespaces}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@istackcr}{\shortstack calc support}%
+
+\def\@istackcr[#1]{\cr\noalign{\vskip #1}\ignorespaces}
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\line}{default units}%
+\expandafter\let\csname line \endcsname\@undefind
+\def\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
+  \@defaultunitsset\@linelen{#3}\unitlength
+  \ifdim\@linelen<\z@\@badlinearg\else
+    \ifnum\@xarg =\z@ \@vline
+      \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi
+    \fi
+  \fi}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\line}{default units}%
+\expandafter\let\csname line \endcsname\@undefind
+\def\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
+  \@linelen #3\unitlength
+  \ifdim\@linelen<\z@\@badlinearg\else
+    \ifnum\@xarg =\z@ \@vline
+      \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi
+    \fi
+  \fi}
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\vector}{default units}%
+\expandafter\let\csname vector \endcsname\@undefind
+\def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
+  \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi
+  \ifnum\@tempcnta<5\relax
+  \@defaultunitsset\@linelen{#3}\unitlength
+  \ifdim\@linelen<\z@\@badlinearg\else
+    \ifnum\@xarg =\z@ \@vvector
+      \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi
+    \fi
+  \fi
+  \else\@badlinearg\fi}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\vector}{default units}%
+\expandafter\let\csname vector \endcsname\@undefind
+\def\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
+  \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi
+  \ifnum\@tempcnta<5\relax
+  \@linelen #3\unitlength
+  \ifdim\@linelen<\z@\@badlinearg\else
+    \ifnum\@xarg =\z@ \@vvector
+      \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi
+    \fi
+  \fi
+  \else\@badlinearg\fi}
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\dashbox}{default units}%
+\expandafter\let\csname dashbox \endcsname\@undefind
+\def\dashbox#1(#2,#3){\leavevmode\hb at xt@\z@{\baselineskip \z at skip
+\lineskip \z at skip
+\@defaultunitsset\@dashdim{#2}\unitlength
+\@dashcnt \@dashdim \advance\@dashcnt 200
+\@defaultunitsset\@dashdim{#1}\unitlength
+\divide\@dashcnt \@dashdim
+\ifodd\@dashcnt\@dashdim \z@
+\advance\@dashcnt \@ne \divide\@dashcnt \tw@
+\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@
+\advance\@dashcnt \m at ne
+\setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth
+\@width \@dashdim}\put(0,0){\copy\@dashbox}%
+\put(0,#3){\copy\@dashbox}%
+\put(#2,0){\hskip-\@dashdim\copy\@dashbox}%
+\put(#2,#3){\hskip-\@dashdim\box\@dashbox}%
+\multiply\@dashdim \thr@@
 \fi
-\long\def\@gobble#1{}
-\long\def\@firstofone#1{#1}
-\ifx\e at alloc@attribute at count\@undefined
-  \countdef\e at alloc@attribute at count=258
-  \e at alloc@attribute at count=\z@
+\setbox\@dashbox \hbox{%
+  \@defaultunitsset\@tempdimc{#1}\unitlength
+  \vrule \@height \@halfwidth \@depth \@halfwidth \@width \@tempdimc
+  \hskip\@tempdimc}%
+\@tempcnta\z@
+\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
+\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@
+\put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
+\do{\copy\@dashbox\advance\@tempcnta \@ne }}%
+\@defaultunitsset\@dashdim{#3}\unitlength
+\@dashcnt \@dashdim \advance\@dashcnt 200
+\@defaultunitsset\@dashdim{#1}\unitlength
+\divide\@dashcnt \@dashdim
+\ifodd\@dashcnt \@dashdim \z@
+\advance\@dashcnt \@ne \divide\@dashcnt \tw@
+\else
+\divide\@dashdim \tw@ \divide\@dashcnt \tw@
+\advance\@dashcnt \m at ne
+\setbox\@dashbox\hbox{\hskip -\@halfwidth
+\vrule \@width \@wholewidth
+\@height \@dashdim}\put(0,0){\copy\@dashbox}%
+\put(#2,0){\copy\@dashbox}%
+\put(0,#3){\lower\@dashdim\copy\@dashbox}%
+\put(#2,#3){\lower\@dashdim\copy\@dashbox}%
+\multiply\@dashdim \thr@@
 \fi
-\def\newattribute#1{%
-  \e at alloc\attribute\attributedef
-    \e at alloc@attribute at count\m at ne\e at alloc@top#1%
+\@defaultunitsset\@tempdimb{#1}\unitlength
+\setbox\@dashbox\hbox{%
+  \vrule \@width \@wholewidth \@height\@tempdimb}%
+\@tempcnta\z@
+\put(0,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt
+\do{\vskip\@tempdimb\copy\@dashbox\advance\@tempcnta \@ne }%
+\vskip\@dashdim}}\@tempcnta\z@
+\put(#2,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt
+\do{\vskip\@tempdimb\copy\@dashbox\advance\@tempcnta \@ne }%
+\vskip\@dashdim}}}\@makepicbox(#2,#3)}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\dashbox}{default units}%
+\expandafter\let\csname dashbox \endcsname\@undefind
+\def\dashbox#1(#2,#3){%
+\leavevmode\hb at xt@\z@{\baselineskip \z at skip
+\lineskip \z at skip
+\@dashdim #2\unitlength
+\@dashcnt \@dashdim \advance\@dashcnt 200
+\@dashdim #1\unitlength\divide\@dashcnt \@dashdim
+\ifodd\@dashcnt\@dashdim \z@
+\advance\@dashcnt \@ne \divide\@dashcnt \tw@
+\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@
+\advance\@dashcnt \m at ne
+\setbox\@dashbox \hbox{%
+  \vrule \@height \@halfwidth \@depth \@halfwidth
+  \@width \@dashdim}\put(0,0){\copy\@dashbox}%
+\put(0,#3){\copy\@dashbox}%
+\put(#2,0){\hskip-\@dashdim\copy\@dashbox}%
+\put(#2,#3){\hskip-\@dashdim\box\@dashbox}%
+\multiply\@dashdim \thr@@
+\fi
+\setbox\@dashbox \hbox{%
+  \vrule \@height \@halfwidth \@depth \@halfwidth
+  \@width #1\unitlength\hskip #1\unitlength}\@tempcnta\z@
+\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
+\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@
+\put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt
+\do{\copy\@dashbox\advance\@tempcnta \@ne }}%
+\@dashdim #3\unitlength
+\@dashcnt \@dashdim \advance\@dashcnt 200
+\@dashdim #1\unitlength\divide\@dashcnt \@dashdim
+\ifodd\@dashcnt \@dashdim \z@
+\advance\@dashcnt \@ne \divide\@dashcnt \tw@
+\else
+\divide\@dashdim \tw@ \divide\@dashcnt \tw@
+\advance\@dashcnt \m at ne
+\setbox\@dashbox\hbox{\hskip -\@halfwidth
+\vrule \@width \@wholewidth
+\@height \@dashdim}\put(0,0){\copy\@dashbox}%
+\put(#2,0){\copy\@dashbox}%
+\put(0,#3){\lower\@dashdim\copy\@dashbox}%
+\put(#2,#3){\lower\@dashdim\copy\@dashbox}%
+\multiply\@dashdim \thr@@
+\fi
+\setbox\@dashbox\hbox{\vrule \@width \@wholewidth
+\@height #1\unitlength}\@tempcnta\z@
+\put(0,0){%
+  \hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt
+  \do{\vskip #1\unitlength\copy\@dashbox
+      \advance\@tempcnta\@ne }%
+  \vskip\@dashdim}}\@tempcnta\z@
+\put(#2,0){%
+  \hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt
+  \do{\vskip #1\unitlength\copy\@dashbox
+      \advance\@tempcnta \@ne }%
+  \vskip\@dashdim}}}\@makepicbox(#2,#3)}
+\EndIncludeInRelease
+\IncludeInRelease{2016/03/31}%
+                 {\@ovhlinetrue}%
+                 {Avoid almost zero length leaders}%
+\newif\if at ovvline \@ovvlinetrue
+\newif\if at ovhline \@ovhlinetrue
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@ovhlinetrue}%
+                 {Avoid almost zero length leaders}%
+\let\if at ovvline\@undefined
+\let\if at ovhline\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\@oval}{default units}%
+\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen
+  \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
+  \@ovvlinefalse \@ovhlinefalse
+  \@tfor\reserved at a :=#3\do{%
+    \csname @ov\reserved at a false\endcsname}%
+  \@defaultunitsset\@ovxx{#1}\unitlength
+  \@defaultunitsset\@ovyy{#2}\unitlength
+  \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx \@ovvlinetrue
+  \else \@ovyy \ifdim \@ovyy =\@ovxx \else \@ovhlinetrue \fi\fi
+  \advance \@tempdimb -2\p@
+  \@getcirc \@tempdimb
+  \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa
+  \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@
+  \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@
+  \ifdim \@ovdx >\z@ \@ovhlinetrue \fi
+  \ifdim \@ovdy >\z@ \@ovvlinetrue \fi
+  \@circlefnt \setbox\@tempboxa
+  \hbox{\if at ovr \@ovvert32\kern -\@tempdima \fi
+  \if at ovl \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx \fi
+  \if at ovt \@ovhorz \kern -\@ovxx \fi
+  \if at ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro
+  \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@
+  \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}%
+  \endgroup}
+\EndIncludeInRelease
+\IncludeInRelease{2016/03/31}%
+                 {\@oval}{default units}%
+\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen
+  \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
+  \@ovvlinefalse \@ovhlinefalse
+  \@tfor\reserved at a :=#3\do{%
+    \csname @ov\reserved at a false\endcsname}%
+  \@ovxx #1\unitlength
+  \@ovyy #2\unitlength
+  \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx \@ovvlinetrue
+  \else \@ovyy \ifdim \@ovyy =\@ovxx \else \@ovhlinetrue
+   \fi\fi
+  \advance \@tempdimb -2\p@
+  \@getcirc \@tempdimb
+  \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa
+  \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@
+  \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@
+  \ifdim \@ovdx >\z@ \@ovhlinetrue \fi
+  \ifdim \@ovdy >\z@ \@ovvlinetrue \fi
+  \@circlefnt \setbox\@tempboxa
+  \hbox{\if at ovr \@ovvert32\kern -\@tempdima \fi
+  \if at ovl
+   \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx
+  \fi
+  \if at ovt \@ovhorz \kern -\@ovxx \fi
+  \if at ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro
+  \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@
+  \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}%
+  \endgroup}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@oval}{default units}%
+\def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen
+  \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
+  \@tfor\reserved at a :=#3\do
+                {\csname @ov\reserved at a false\endcsname}%
+  \@ovxx #1\unitlength
+  \@ovyy #2\unitlength
+  \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx\else \@ovyy \fi
+  \advance \@tempdimb -2\p@
+  \@getcirc \@tempdimb
+  \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa
+  \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@
+  \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@
+  \@circlefnt \setbox\@tempboxa
+  \hbox{\if at ovr \@ovvert32\kern -\@tempdima \fi
+  \if at ovl
+   \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx
+  \fi
+  \if at ovt \@ovhorz \kern -\@ovxx \fi
+  \if at ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro
+  \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@
+  \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}%
+  \endgroup}
+\EndIncludeInRelease
+\IncludeInRelease{2016/03/31}%
+                 {\@ovvert}{Avoid almost zero length leaders}%
+\def\@ovvert#1#2{\vbox to\@ovyy{%
+    \if at ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax
+      \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip
+    \else \kern \@ovri \kern \@ovdy \fi
+    \if at ovvline \leaders\vrule \@width \@wholewidth \fi
+    \vfil \nointerlineskip
+    \if at ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax
+      \hbox{\char \@tempcntb}%
+    \else \kern \@ovdy \kern \@ovro \fi}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@ovvert}{Avoid almost zero length leaders}%
+\def\@ovvert#1#2{\vbox to\@ovyy{%
+    \if at ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax
+      \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip
+    \else \kern \@ovri \kern \@ovdy \fi
+    \leaders\vrule \@width \@wholewidth\vfil \nointerlineskip
+    \if at ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax
+      \hbox{\char \@tempcntb}%
+    \else \kern \@ovdy \kern \@ovro \fi}}
+\EndIncludeInRelease
+\IncludeInRelease{2016/03/31}%
+                 {\@ovhorz}{Avoid almost zero length leaders}%
+\def\@ovhorz{\hb at xt@\@ovxx{\kern \@ovro
+    \if at ovr \else \kern \@ovdx \fi
+    \if at ovhline \leaders \hrule \@height \@wholewidth \fi
+    \hfil
+    \if at ovl \else \kern \@ovdx \fi
+    \kern \@ovri}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@ovhorz}{Avoid almost zero length leaders}%
+\def\@ovhorz{\hb at xt@\@ovxx{\kern \@ovro
+    \if at ovr \else \kern \@ovdx \fi
+    \leaders \hrule \@height \@wholewidth \hfil
+    \if at ovl \else \kern \@ovdx \fi
+    \kern \@ovri}}
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\@circle}{default units}%
+\def\@circle#1{%
+  \begingroup \boxmaxdepth \maxdimen
+   \@defaultunitsset\@tempdimb{#1}\unitlength
+   \ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb
+      \@ovro\ht\@tempboxa
+     \setbox\@tempboxa\hbox{\@circlefnt
+      \advance\@tempcnta\tw@ \char \@tempcnta
+      \advance\@tempcnta\m at ne \char \@tempcnta \kern -2\@tempdima
+      \advance\@tempcnta\tw@
+      \raise \@tempdima \hbox{\char\@tempcnta}\raise \@tempdima
+        \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@
+      \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}%
+   \else  \@circ\@tempdimb{96}\fi\endgroup}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@circle}{default units}%
+\def\@circle#1{%
+  \begingroup \boxmaxdepth \maxdimen \@tempdimb #1\unitlength
+   \ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb
+      \@ovro\ht\@tempboxa
+     \setbox\@tempboxa\hbox{\@circlefnt
+      \advance\@tempcnta\tw@ \char \@tempcnta
+      \advance\@tempcnta\m at ne \char \@tempcnta
+      \kern -2\@tempdima
+      \advance\@tempcnta\tw@
+      \raise \@tempdima \hbox{\char\@tempcnta}%
+      \raise \@tempdima
+        \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@
+      \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}%
+   \else  \@circ\@tempdimb{96}\fi\endgroup}
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\@dot}{default units}%
+\def\@dot#1{%
+  \@defaultunitsset\@tempdimb{#1}\unitlength
+  \@circ\@tempdimb{112}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@dot}{default units}%
+\def\@dot#1{\@tempdimb #1\unitlength \@circ\@tempdimb{112}}
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\@bezier}{default units}%
+\def\@bezier#1(#2,#3)(#4,#5)(#6,#7){%
+  \ifnum #1=\z@
+      \@defaultunitsset\@ovxx{#4}\unitlength
+        \@defaultunitsset{\advance\@ovxx}{-#2}\unitlength
+        \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi
+      \@defaultunitsset\@ovdx{#6}\unitlength
+        \@defaultunitsset{\advance\@ovdx}{-#4}\unitlength
+        \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi
+        \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi
+      \@defaultunitsset\@ovyy{#5}\unitlength
+        \@defaultunitsset{\advance\@ovyy}{-#3}\unitlength
+        \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi
+      \@defaultunitsset\@ovdy{#7}\unitlength
+        \@defaultunitsset{\advance\@ovdy}{-#5}\unitlength
+        \ifdim \@ovdy<\z@  \@ovdy -\@ovdy \fi
+        \ifdim \@ovyy<\@ovdy \@ovyy  \@ovdy \fi
+      \@multicnt
+         \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi
+      \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx
+      \ifnum \qbeziermax<\@multicnt
+        \@multicnt\qbeziermax\relax
+      \fi
+  \else \@multicnt#1\relax \fi
+  \@tempcnta\@multicnt \advance\@tempcnta\@ne
+  \@defaultunitsset\@ovdx{#4}\unitlength
+  \@defaultunitsset{\advance\@ovdx}{-#2}\unitlength
+      \multiply\@ovdx \tw@
+  \@defaultunitsset\@ovxx{#6}\unitlength
+  \@defaultunitsset{\advance\@ovxx}{-#2}\unitlength
+      \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt
+  \@defaultunitsset\@ovdy{#5}\unitlength
+  \@defaultunitsset{\advance\@ovdy}{-#3}\unitlength
+       \multiply\@ovdy \tw@
+  \@defaultunitsset\@ovyy{#7}\unitlength
+  \@defaultunitsset{\advance\@ovyy}{-#3}\unitlength
+      \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt
+  \setbox\@tempboxa\hbox{%
+            \hskip -\@halfwidth
+            \vrule \@height\@halfwidth
+                   \@depth \@halfwidth
+                   \@width \@wholewidth}%
+   \put(#2,#3){%
+     \count@\z@
+     \@whilenum{\count@<\@tempcnta}\do
+        {\@xdim\count@\@ovxx
+           \advance\@xdim\@ovdx
+           \divide\@xdim\@multicnt
+           \multiply\@xdim\count@
+         \@ydim\count@\@ovyy
+            \advance\@ydim\@ovdy
+            \divide\@ydim\@multicnt
+            \multiply\@ydim\count@
+         \raise \@ydim
+            \hb at xt@\z@{\kern\@xdim
+                        \unhcopy\@tempboxa\hss}%
+         \advance\count@\@ne}}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@bezier}{default units}%
+\def\@bezier#1(#2,#3)(#4,#5)(#6,#7){%
+  \ifnum #1=\z@
+      \@ovxx #4\unitlength
+        \advance\@ovxx -#2\unitlength
+        \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi
+      \@ovdx #6\unitlength
+        \advance\@ovdx -#4\unitlength
+        \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi
+        \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi
+      \@ovyy #5\unitlength
+        \advance\@ovyy -#3\unitlength
+        \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi
+      \@ovdy #7\unitlength
+        \advance\@ovdy -#5\unitlength
+        \ifdim \@ovdy<\z@  \@ovdy -\@ovdy \fi
+        \ifdim \@ovyy<\@ovdy \@ovyy  \@ovdy \fi
+      \@multicnt
+         \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi
+      \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx
+      \ifnum
+        \qbeziermax<\@multicnt \@multicnt\qbeziermax\relax
+      \fi
+  \else \@multicnt#1\relax \fi
+  \@tempcnta\@multicnt \advance\@tempcnta\@ne
+  \@ovdx #4\unitlength \advance\@ovdx -#2\unitlength
+      \multiply\@ovdx \tw@
+  \@ovxx #6\unitlength \advance\@ovxx -#2\unitlength
+      \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt
+  \@ovdy #5\unitlength \advance\@ovdy -#3\unitlength
+       \multiply\@ovdy \tw@
+  \@ovyy #7\unitlength \advance\@ovyy -#3\unitlength
+      \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt
+  \setbox\@tempboxa\hbox{%
+            \hskip -\@halfwidth
+            \vrule \@height\@halfwidth
+                   \@depth \@halfwidth
+                   \@width \@wholewidth}%
+   \put(#2,#3){%
+     \count@\z@
+     \@whilenum{\count@<\@tempcnta}\do
+        {\@xdim\count@\@ovxx
+           \advance\@xdim\@ovdx
+           \divide\@xdim\@multicnt
+           \multiply\@xdim\count@
+         \@ydim\count@\@ovyy
+            \advance\@ydim\@ovdy
+            \divide\@ydim\@multicnt
+            \multiply\@ydim\count@
+         \raise \@ydim
+            \hb at xt@\z@{\kern\@xdim
+                        \unhcopy\@tempboxa\hss}%
+         \advance\count@\@ne}}}
+\EndIncludeInRelease
+\IncludeInRelease{2019/10/01}%
+                 {\bezier}{Make commands robust}%
+\MakeRobust\bezier
+\MakeRobust\circle
+\MakeRobust\dashbox
+\MakeRobust\line
+\MakeRobust\linethickness
+\MakeRobust\multiput
+\MakeRobust\oval
+\MakeRobust\put
+\MakeRobust\qbezier
+\MakeRobust\shortstack
+\MakeRobust\thinlines
+\MakeRobust\vector
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\bezier}{Make commands robust}%
+
+\kernel at make@fragile\bezier
+\kernel at make@fragile\circle
+\kernel at make@fragile\dashbox
+\kernel at make@fragile\line
+\kernel at make@fragile\linethickness
+\kernel at make@fragile\multiput
+\kernel at make@fragile\oval
+\kernel at make@fragile\put
+\kernel at make@fragile\qbezier
+\kernel at make@fragile\shortstack
+\kernel at make@fragile\thinlines
+\kernel at make@fragile\vector
+
+\EndIncludeInRelease
+%%% From File: ltthm.dtx
+%%% From File: ltsect.dtx
+\IncludeInRelease{2019/10/01}%
+                 {\title}{Make commands robust}%
+\DeclareRobustCommand\title[1]{\gdef\@title{#1}}
+\DeclareRobustCommand*\author[1]{\gdef\@author{#1}}
+\DeclareRobustCommand*\date[1]{\gdef\@date{#1}}
+\DeclareRobustCommand\thanks[1]{\footnotemark
+    \protected at xdef\@thanks{\@thanks
+        \protect\footnotetext[\the\c at footnote]{#1}}%
 }
-\def\setattribute#1#2{#1=\numexpr#2\relax}
-\def\unsetattribute#1{#1=-"7FFFFFFF\relax}
-\ifx\e at alloc@ccodetable at count\@undefined
-  \countdef\e at alloc@ccodetable at count=259
-  \e at alloc@ccodetable at count=\z@
+\DeclareRobustCommand\and{%   % \begin{tabular}
+  \end{tabular}%
+  \hskip 1em \@plus.17fil%
+  \begin{tabular}[t]{c}}%     % \end{tabular}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\title}{Make commands robust}%
+
+\kernel at make@fragile\title
+\kernel at make@fragile\author
+\kernel at make@fragile\date
+\kernel at make@fragile\thanks
+\kernel at make@fragile\and
+
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\addcontentsline}{fourth argument}%
+\def\addcontentsline#1#2#3{%
+  \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}{}%
+                     \protected at file@percent}}
+\EndIncludeInRelease
+\IncludeInRelease{2018/12/01}%
+                 {\addcontentsline}{Mask line endings}%
+ \def\addcontentsline#1#2#3{%
+  \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}%
+            \protected at file@percent}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\addcontentsline}{Mask line endings}%
+\def\addcontentsline#1#2#3{%
+  \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}}}
+\EndIncludeInRelease
+\IncludeInRelease{2018/12/01}%
+                 {\@dottedtocline}{Prevent protrusion}%
+\def\@dottedtocline#1#2#3#4#5{%
+  \ifnum #1>\c at tocdepth \else
+    \vskip \z@ \@plus.2\p@
+    {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+     \parindent #2\relax\@afterindenttrue
+     \interlinepenalty\@M
+     \leavevmode
+     \@tempdima #3\relax
+     \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+     {#4}\nobreak
+     \leaders\hbox{$\m at th
+        \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
+        mu$}\hfill
+     \nobreak
+     \hb at xt@\@pnumwidth{\hfil\normalfont \normalcolor #5%
+                        \kern-\p@\kern\p@}%
+     \par}%
+  \fi}
+
+\DeclareRobustCommand\noprotrusion{\leavevmode\kern-\p@\kern\p@}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@dottedtocline}{Prevent protrusion}%
+\def\@dottedtocline#1#2#3#4#5{%
+  \ifnum #1>\c at tocdepth \else
+    \vskip \z@ \@plus.2\p@
+    {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+     \parindent #2\relax\@afterindenttrue
+     \interlinepenalty\@M
+     \leavevmode
+     \@tempdima #3\relax
+     \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+     {#4}\nobreak
+     \leaders\hbox{$\m at th
+        \mkern \@dotsep mu\hbox{.}\mkern \@dotsep
+        mu$}\hfill
+     \nobreak
+     \hb at xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%
+     \par}%
+  \fi}
+
+\let\noprotrusion\@undefined
+\EndIncludeInRelease
+%%% From File: ltfloat.dtx
+\IncludeInRelease{2015/01/01}%
+                 {\@xfloat}{Check float options}%
+\def\@xfloat #1[#2]{%
+  \@nodocument
+  \def \@captype {#1}%
+   \def \@fps {#2}%
+   \@onelevel at sanitize \@fps
+   \def \reserved at b {!}%
+   \ifx \reserved at b \@fps
+     \@fpsadddefault
+   \else
+     \ifx \@fps \@empty
+       \@fpsadddefault
+     \fi
+   \fi
+   \ifhmode
+     \@bsphack
+     \@floatpenalty -\@Mii
+   \else
+     \@floatpenalty-\@Miii
+   \fi
+  \ifinner
+     \@parmoderr\@floatpenalty\z@
+  \else
+    \@next\@currbox\@freelist
+      {%
+       \@tempcnta \sixt@@n
+       \expandafter \@tfor \expandafter \reserved at a
+         \expandafter :\expandafter =\@fps
+         \do
+          {%
+           \if \reserved at a h%
+             \ifodd \@tempcnta
+             \else
+               \advance \@tempcnta \@ne
+             \fi
+           \else\if \reserved at a t%
+             \@setfpsbit \tw@
+           \else\if \reserved at a b%
+             \@setfpsbit 4%
+           \else\if \reserved at a p%
+             \@setfpsbit 8%
+           \else\if \reserved at a !%
+             \ifnum \@tempcnta>15
+               \advance\@tempcnta -\sixt@@n\relax
+             \fi
+           \else
+             \@latex at error{Unknown float option `\reserved at a'}%
+             {Option `\reserved at a' ignored and `p' used.}%
+             \@setfpsbit 8%
+           \fi\fi\fi\fi\fi
+           }%
+       \@tempcntb \csname ftype@\@captype \endcsname
+       \multiply \@tempcntb \@xxxii
+       \advance \@tempcnta \@tempcntb
+       \global \count\@currbox \@tempcnta
+       }%
+    \@fltovf
+  \fi
+  \global \setbox\@currbox
+    \color at vbox
+      \normalcolor
+      \vbox \bgroup
+        \hsize\columnwidth
+        \@parboxrestore
+        \@floatboxreset
+}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@xfloat}{Check float options}%
+\def\@xfloat #1[#2]{%
+  \@nodocument
+  \def \@captype {#1}%
+   \def \@fps {#2}%
+   \@onelevel at sanitize \@fps
+   \def \reserved at b {!}%
+   \ifx \reserved at b \@fps
+     \@fpsadddefault
+   \else
+     \ifx \@fps \@empty
+       \@fpsadddefault
+     \fi
+   \fi
+   \ifhmode
+     \@bsphack
+     \@floatpenalty -\@Mii
+   \else
+     \@floatpenalty-\@Miii
+   \fi
+  \ifinner
+     \@parmoderr\@floatpenalty\z@
+  \else
+    \@next\@currbox\@freelist
+      {%
+       \@tempcnta \sixt@@n
+       \expandafter \@tfor \expandafter \reserved at a
+         \expandafter :\expandafter =\@fps
+         \do
+          {%
+           \if \reserved at a h%
+             \ifodd \@tempcnta
+             \else
+               \advance \@tempcnta \@ne
+             \fi
+           \fi
+           \if \reserved at a t%
+             \@setfpsbit \tw@
+           \fi
+           \if \reserved at a b%
+             \@setfpsbit 4%
+           \fi
+           \if \reserved at a p%
+             \@setfpsbit 8%
+           \fi
+           \if \reserved at a !%
+             \ifnum \@tempcnta>15
+               \advance\@tempcnta -\sixt@@n\relax
+             \fi
+           \fi
+           }%
+       \@tempcntb \csname ftype@\@captype \endcsname
+       \multiply \@tempcntb \@xxxii
+       \advance \@tempcnta \@tempcntb
+       \global \count\@currbox \@tempcnta
+       }%
+    \@fltovf
+  \fi
+  \global \setbox\@currbox
+    \color at vbox
+      \normalcolor
+      \vbox \bgroup
+        \hsize\columnwidth
+        \@parboxrestore
+        \@floatboxreset
+}%
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+                 {\end at dblfloat}{float order in 2-column}%
+\def\end at dblfloat{%
+  \if at twocolumn
+    \@endfloatbox
+    \ifnum\@floatpenalty <\z@
+      \@largefloatcheck
+      \global\dp\@currbox1sp %
+      \@cons\@currlist\@currbox
+      \ifnum\@floatpenalty <-\@Mii
+        \penalty -\@Miv
+        \@tempdima\prevdepth
+        \vbox{}%
+        \prevdepth\@tempdima
+        \penalty\@floatpenalty
+      \else
+        \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@Esphack
+      \fi
+    \fi
+  \else
+    \end at float
+  \fi
+}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\end at dblfloat}{float order in 2-column}%
+\def\end at dblfloat{%
+\if at twocolumn
+  \@endfloatbox
+  \ifnum\@floatpenalty <\z@
+    \@largefloatcheck
+    \@cons\@dbldeferlist\@currbox
+  \fi
+    \ifnum \@floatpenalty =-\@Mii \@Esphack\fi
+\else
+  \end at float
 \fi
-\def\newcatcodetable#1{%
-  \e at alloc\catcodetable\chardef
-    \e at alloc@ccodetable at count\m at ne{"8000}#1%
-  \initcatcodetable\allocationnumber
-}
-\newcatcodetable\catcodetable at initex
-\newcatcodetable\catcodetable at string
-\begingroup
-  \def\setrangecatcode#1#2#3{%
-    \ifnum#1>#2 %
-      \expandafter\@gobble
+}%
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+          {\@dblfloatplacement}{float order in 2-column}%
+\def\@dblfloatplacement{\global\@dbltopnum\c at dbltopnumber
+   \global\@dbltoproom \dbltopfraction\@colht
+   \@textmin \@colht
+   \advance \@textmin -\@dbltoproom
+   \@fpmin \dblfloatpagefraction\textheight
+   \@fptop \@dblfptop
+   \@fpsep \@dblfpsep
+   \@fpbot \@dblfpbot
+   \def\f at depth{1sp}}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+          {\@dblfloatplacement}{float order in 2-column}%
+\def \@dblfloatplacement {%
+  \global \@dbltopnum \c at dbltopnumber
+  \global \@dbltoproom \dbltopfraction\@colht
+  \@textmin \@colht
+  \advance \@textmin -\@dbltoproom
+  \@fpmin \dblfloatpagefraction\textheight
+  \@fptop \@dblfptop
+  \@fpsep \@dblfpsep
+  \@fpbot \@dblfpbot
+}%
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\@textsuperscript}{superscript baseline}%
+\def\@textsuperscript#1{%
+  {\m at th\ensuremath{^{\mbox{\fontsize\sf at size\sf at size#1}}}}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@textsuperscript}{superscript baseline}%
+
+\def\@textsuperscript#1{%
+  {\m at th\ensuremath{^{\mbox{\fontsize\sf at size\z@#1}}}}}
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+                 {\textsubscript}{\textsubscript}%
+\DeclareRobustCommand*\textsubscript[1]{%
+  \@textsubscript{\selectfont#1}}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\textsubscript}{\textsubscript}%
+\let\textsubscript\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\@textsubscript}{subscript baseline}%
+\def\@textsubscript#1{%
+  {\m at th\ensuremath{_{\mbox{\fontsize\sf at size\sf at size#1}}}}}
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+                 {\@textsubscript}{subscript baseline}%
+
+\def\@textsubscript#1{%
+  {\m at th\ensuremath{_{\mbox{\fontsize\sf at size\z@#1}}}}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@textsubscript}{subscript baseline}%
+\let\@textsubscript\@undefined
+\EndIncludeInRelease
+%%% From File: ltidxglo.dtx
+%%% From File: ltbibl.dtx
+\IncludeInRelease{2021/05/01}%
+                 {\nocite}{Allow nocite in preamble}%
+\def\nocite#1{\@bsphack
+  \ifx\@onlypreamble\document
+    \@for\@citeb:=#1\do{%
+      \edef\@citeb{\expandafter\@firstofone\@citeb}%
+      \if at filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
+      \@ifundefined{b@\@citeb}{\G at refundefinedtrue
+          \@latex at warning{Citation `\@citeb' undefined}}{}}%
+  \else
+    \AddToHook{begindocument/end}[kernel]{\nocite{#1}}%
+  \fi
+  \@esphack}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\nocite}{Allow nocite in preamble}%
+
+\def\nocite#1{\@bsphack
+  \ifx\@onlypreamble\document
+    \@for\@citeb:=#1\do{%
+      \edef\@citeb{\expandafter\@firstofone\@citeb}%
+      \if at filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
+      \@ifundefined{b@\@citeb}{\G at refundefinedtrue
+          \@latex at warning{Citation `\@citeb' undefined}}{}}%
+  \else
+    \@latex at error{Cannot be used in preamble}\@eha
+  \fi
+  \@esphack}
+
+\EndIncludeInRelease
+%%% From File: ltpage.dtx
+\IncludeInRelease{2019/10/01}%
+                 {\markboth}{Make commands robust}%
+\DeclareRobustCommand*\markboth[2]{%
+  \begingroup
+    \let\label\relax \let\index\relax \let\glossary\relax
+    \unrestored at protected@xdef\@themark {{#1}{#2}}%
+    \@temptokena \expandafter{\@themark}%
+    \mark{\the\@temptokena}%
+  \endgroup
+  \if at nobreak\ifvmode\nobreak\fi\fi}
+\DeclareRobustCommand*\markright[1]{%
+  \begingroup
+    \let\label\relax \let\index\relax \let\glossary\relax
+    \expandafter\@markright\@themark {#1}%
+    \@temptokena \expandafter{\@themark}%
+    \mark{\the\@temptokena}%
+  \endgroup
+  \if at nobreak\ifvmode\nobreak\fi\fi}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\markboth}{Make commands robust}%
+
+\kernel at make@fragile\markboth
+\kernel at make@fragile\markright
+
+\EndIncludeInRelease
+%%% From File: ltclass.dtx
+
+\IncludeInRelease{2020/10/01}{\@currpath}%
+  {Add \@currpath}%
+\let\@currpath\@empty
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}{\@currpath}%
+  {Add \@currpath}%
+\let\@currpath\@undefined
+\EndIncludeInRelease
+
+\IncludeInRelease{2020/10/01}{\@pushfilename}%
+  {Add \@expl at push@filename@@ and \@expl at push@filename at aux@@}%
+\def\@pushfilename{%
+  \@expl at push@filename@@
+  \xdef\@currnamestack{%
+    {\@currname}%
+    {\@currext}%
+    {\the\catcode`\@}%
+    \@currnamestack}%
+  \xdef\@kernel at currpathstack{%
+    {\@currpath}%
+    \@kernel at currpathstack}%
+  \@expl at push@filename at aux@@}
+\EndIncludeInRelease
+
+\IncludeInRelease{2020/02/02}{\@pushfilename}%
+  {Add \@expl at push@filename@@}%
+\def\@pushfilename{%
+  \@expl at push@filename@@
+  \xdef\@currnamestack{%
+    {\@currname}%
+    {\@currext}%
+    {\the\catcode`\@}%
+    \@currnamestack}%
+    \@expl at push@filename at aux@@}
+\EndIncludeInRelease
+
+\IncludeInRelease{0000/00/00}{\@pushfilename}%
+  {Add \@expl at push@filename@@ and \@expl at push@filename at aux@@}%
+\def\@pushfilename{%
+  \xdef\@currnamestack{%
+    {\@currname}%
+    {\@currext}%
+    {\the\catcode`\@}%
+    \@currnamestack}}
+\EndIncludeInRelease
+\@onlypreamble\@pushfilename
+
+\IncludeInRelease{2020/10/01}{\@popfilename}%
+  {Add \@expl at pop@filename@@}%
+\def\@popfilename{\@expl@@@hook at curr@name at pop@@
+  \expandafter\@p at pfilename\@currnamestack\@nil
+  \expandafter\@p at pfilepath\@kernel at currpathstack\@nil
+  \@expl at pop@filename@@}
+\EndIncludeInRelease
+
+\IncludeInRelease{2020/02/02}{\@popfilename}%
+  {Add \@expl at push@filename@@}%
+\def\@popfilename{\expandafter\@p at pfilename\@currnamestack\@nil
+  \@expl at pop@filename@@}
+\EndIncludeInRelease
+
+\IncludeInRelease{0000/00/00}{\@popfilename}%
+  {Add \@expl at push@filename@@ and \@expl at push@filename at aux@@}%
+\def\@popfilename{\expandafter\@p at pfilename\@currnamestack\@nil}
+\EndIncludeInRelease
+\@onlypreamble\@popfilename
+
+\IncludeInRelease{2020/10/01}{\@kernel at currpathstack}%
+  {Add \@kernel at currpathstack}%
+\gdef\@kernel at currpathstack{}
+\def\@p at pfilepath#1{%
+  \gdef\@currpath{#1}\@p at pfilepath@aux\@empty}
+\def\@p at pfilepath@aux#1\@nil{%
+  \xdef\@kernel at currpathstack{#1}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}{\@kernel at currpathstack}%
+  {Add \@kernel at currpathstack}%
+\let\@kernel at currpathstack\@undefined
+\let\@p at pfilepath\@undefined
+\let\@p at pfilepath@aux\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\IfFormatAtLeastTF}{Test format date}%
+\def\IfFormatAtLeastTF{\@ifl at t@r\fmtversion}
+\let\IfPackageAtLeastTF\@ifpackagelater
+\let\IfClassAtLeastTF\@ifclasslater
+\@onlypreamble\IfFormatAtLeastTF
+\@onlypreamble\IfPackageAtLeastTF
+\@onlypreamble\IfClassAtLeastTF
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\IfFormatAtLeastTF}{Test format date}%
+\def\IfFormatAtLeastTF{\@ifl at t@r\fmtversion}
+\let\IfPackageAtLeastTF\@ifpackagelater
+\let\IfClassAtLeastTF\@ifclasslater
+\EndIncludeInRelease
+\IncludeInRelease{2018/04/01}%
+                 {\@ifl at t@r}{Guard against bad input}%
+\def\@ifl at t@r#1#2{%
+  \ifnum\expandafter\@parse at version@#1//00\@nil<%
+        \expandafter\@parse at version@#2//00\@nil
+    \expandafter\@secondoftwo
+  \else
+    \expandafter\@firstoftwo
+  \fi}
+\def\@parse at version@#1{\@parse at version0#1}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@ifl at t@r}{Guard against bad input}%
+\def\@ifl at t@r#1#2{%
+  \ifnum\expandafter\@parse at version#1//00\@nil<%
+        \expandafter\@parse at version#2//00\@nil
+    \expandafter\@secondoftwo
+  \else
+    \expandafter\@firstoftwo
+  \fi}
+\let\@parse at version@\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2017/01/01}%
+                 {\@if at pti@ns}{Spaces in option clash check}%
+\def\@if at pti@ns#1#2{%
+ \let\reserved at a\@firstoftwo
+ \edef\reserved at b{\zap at space#2 \@empty}%
+ \@for\reserved at b:=\reserved at b\do{%
+   \ifx\reserved at b\@empty
+   \else
+     \expandafter\in@\expandafter{\expandafter,\reserved at b,}{,#1,}%
+     \ifin@
+     \else
+       \let\reserved at a\@secondoftwo
+     \fi
+   \fi
+ }%
+ \reserved at a}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@if at pti@ns}{Spaces in option clash check}%
+\def\@if at pti@ns#1#2{%
+ \let\reserved at a\@firstoftwo
+ \@for\reserved at b:=#2\do{%
+  \ifx\reserved at b\@empty
+   \else
+   \expandafter\in@\expandafter
+                   {\expandafter,\reserved at b,}{,#1,}%
+    \ifin@
     \else
-      \expandafter\@firstofone
+     \let\reserved at a\@secondoftwo
     \fi
-      {%
-        \catcode#1=#3 %
-        \expandafter\setrangecatcode\expandafter
-          {\number\numexpr#1 + 1\relax}{#2}{#3}
-      }%
-  }
-  \@firstofone{%
-    \catcodetable\catcodetable at initex
-      \catcode0=12 %
-      \catcode13=12 %
-      \catcode37=12 %
-      \setrangecatcode{65}{90}{12}%
-      \setrangecatcode{97}{122}{12}%
-      \catcode92=12 %
-      \catcode127=12 %
-      \savecatcodetable\catcodetable at string
-    \endgroup
-  }%
-\newcatcodetable\catcodetable at latex
-\newcatcodetable\catcodetable at atletter
-\begingroup
-  \def\parseunicodedataI#1;#2;#3;#4\relax{%
-    \parseunicodedataII#1;#3;#2 First>\relax
-  }%
-  \def\parseunicodedataII#1;#2;#3 First>#4\relax{%
-    \ifx\relax#4\relax
-      \expandafter\parseunicodedataIII
+  \fi
+ }%
+ \reserved at a}
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+  {\ProvidesPackage}{Check name with \strcmp}%
+\def\ProvidesPackage#1{%
+  \xdef\@gtempa{#1}%
+  \@expandtwoargs\@expl at str@if at eq@@nnTF
+      {\@gtempa}{\@currpath\@currname}{}{%
+    \@latex at warning@no at line{You have requested
+      \@cls at pkg\space`\@currpath\@currname',\MessageBreak
+       but the \@cls at pkg\space provides `#1'}%
+    }%
+  \@ifnextchar[\@pr at videpackage{\@pr at videpackage[]}}%]
+\@onlypreamble\ProvidesPackage
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+  {\ProvidesPackage}{Undo: check name with \strcmp}%
+\def\ProvidesPackage#1{%
+  \xdef\@gtempa{#1}%
+  \ifx\@gtempa\@currname\else
+    \@latex at warning@no at line{You have requested
+      \@cls at pkg\space`\@currname',\MessageBreak
+       but the \@cls at pkg\space provides `#1'}%
+  \fi
+  \@ifnextchar[\@pr at videpackage{\@pr at videpackage[]}}%]
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\@pr at videpackage}{Allow for package substitution}%
+\def\@pr at videpackage[#1]{%
+  \expandafter\protected at xdef                %     <-- protected...
+     \csname ver@\@currname.\@currext\endcsname{#1}% Loaded package
+  \expandafter\let
+    \csname ver@\@currpkg at reqd\expandafter\endcsname % Requested package
+    \csname ver@\@currname.\@currext\endcsname
+  \ifx\@currext\@clsextension
+    \typeout{Document Class: \@gtempa\space#1}%
+  \else
+    \protected at wlog{Package: \@gtempa\space#1}%   <--- protected
+  \fi}
+\long\def\protected at wlog#1{\begingroup
+  \set at display@protect
+  \immediate \write \m at ne {#1}\endgroup }
+\EndIncludeInRelease
+\IncludeInRelease{2020/02/02}%
+                 {\@pr at videpackage}{Protection for package info}%
+
+\def\@pr at videpackage[#1]{%
+  \expandafter\protected at xdef                %     <-- protected...
+     \csname ver@\@currname.\@currext\endcsname{#1}%
+\ifx\@currext\@clsextension
+    \typeout{Document Class: \@gtempa\space#1}%
+  \else
+    \protected at wlog{Package: \@gtempa\space#1}%   <--- protected
+  \fi}
+
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@pr at videpackage}{Protection for package info}%
+
+\def\@pr at videpackage[#1]{%
+  \expandafter\xdef\csname ver@\@currname.\@currext\endcsname{#1}%
+  \ifx\@currext\@clsextension
+    \typeout{Document Class: \@gtempa\space#1}%
+  \else
+    \wlog{Package: \@gtempa\space#1}%
+  \fi}
+\let\protected at wlog\@undefined
+
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+  {\ProvidesClass}{Track \ProvidesPackage}%
+\let\ProvidesClass\ProvidesPackage
+\@onlypreamble\ProvidesClass
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}{\@pass at ptions}
+  {Add file replacement in \@pass at ptions}%
+\def\@pass at ptions#1#2#3{%
+  \@expl@@@filehook at set@curr at file@@nNN
+    {\@expl@@@filehook at resolve@file at subst@@w #3.#1\@nil}%
+      \reserved at a\reserved at b
+  \@expl@@@filehook at clear@replacement at flag@@
+  \expandafter\xdef\csname opt@\reserved at a\endcsname{%
+    \@ifundefined{opt@\reserved at a}\@empty
+      {\csname opt@\reserved at a\endcsname,}%
+    \zap at space#2 \@empty}%
+  \expandafter\let
+    \csname opt@#3.#1\expandafter\endcsname
+    \csname opt@\reserved at a\endcsname}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}{\@pass at ptions}
+  {\@pass at ptions}%
+\def\@pass at ptions#1#2#3{%
+  \expandafter\xdef\csname opt@#3.#1\endcsname{%
+    \@ifundefined{opt@#3.#1}\@empty
+      {\csname opt@#3.#1\endcsname,}%
+    \zap at space#2 \@empty}}
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\@process at pti@ns}{Unused options issue}%
+\def\@process at pti@ns{%
+  \@for\CurrentOption:=\@curroptions\do{%
+    \@ifundefined{ds@\CurrentOption}%
+      {\@use at ption
+       \default at ds}%
+      \@use at ption}%
+  \@for\CurrentOption:=\@declaredoptions\do{%
+    \expandafter\let\csname ds@\CurrentOption\endcsname\relax}%
+  \let\CurrentOption\@empty
+  \let\@fileswith at pti@ns\@@fileswith at pti@ns
+  \AtEndOfPackage{\expandafter\let
+                     \csname unprocessedoptions-\@currname.\@currext\endcsname
+                     \relax}}
+\@onlypreamble\@process at pti@ns
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@process at pti@ns}{Unused options issue}%
+
+\def\@process at pti@ns{%
+  \@for\CurrentOption:=\@curroptions\do{%
+    \@ifundefined{ds@\CurrentOption}%
+      {\@use at ption
+       \default at ds}%
+      \@use at ption}%
+  \@for\CurrentOption:=\@declaredoptions\do{%
+    \expandafter\let\csname ds@\CurrentOption\endcsname\relax}%
+  \let\CurrentOption\@empty
+  \let\@fileswith at pti@ns\@@fileswith at pti@ns
+  \AtEndOfPackage{\let\@unprocessedoptions\relax}}
+\EndIncludeInRelease
+\IncludeInRelease{2017/01/01}%
+                 {\ExecuteOptions}{Spaces in \ExecuteOptions}%
+\def\ExecuteOptions#1{%
+  \edef\@fortmp{\zap at space#1 \@empty}%
+  \def\reserved at a##1\@nil{%
+    \@for\CurrentOption:=\@fortmp\do
+             {\csname ds@\CurrentOption\endcsname}%
+    \edef\CurrentOption{##1}}%
+  \expandafter\reserved at a\CurrentOption\@nil}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\ExecuteOptions}{Spaces in \ExecuteOptions}%
+\def\ExecuteOptions#1{%
+  \def\reserved at a##1\@nil{%
+    \@for\CurrentOption:=#1\do
+             {\csname ds@\CurrentOption\endcsname}%
+    \edef\CurrentOption{##1}}%
+  \expandafter\reserved at a\CurrentOption\@nil}
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\RequirePackageWithOptions}{Unused options issue}%
+\def\RequirePackageWithOptions{%
+  \AtEndOfPackage{\expandafter\let
+                    \csname unprocessedoptions-\@currname.\@currext\endcsname
+                    \relax}%
+  \@loadwithoptions\@pkgextension\RequirePackage}
+\@onlypreamble\RequirePackageWithOptions
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\RequirePackageWithOptions}{Unused options issue}%
+
+\def\RequirePackageWithOptions{%
+  \AtEndOfPackage{\let\@unprocessedoptions\relax}%
+  \@loadwithoptions\@pkgextension\RequirePackage}
+\EndIncludeInRelease
+\IncludeInRelease{2017/01/01}%
+        {\@fileswith at pti@ns}{ifx tests in \@fileswith at pti@ns}%
+\def\@fileswith at pti@ns#1[#2]#3[#4]{%
+  \ifx#1\@clsextension
+    \ifx\@classoptionslist\relax
+      \xdef\@classoptionslist{\zap at space#2 \@empty}%
+      \def\reserved at a{%
+        \@onefilewithoptions#3[{#2}][{#4}]#1%
+        \@documentclasshook}%
     \else
-      \expandafter\parseunicodedataIV
+      \def\reserved at a{%
+        \@onefilewithoptions#3[{#2}][{#4}]#1}%
     \fi
-      {#1}#2\relax%
-  }%
-  \def\parseunicodedataIII#1#2#3\relax{%
-    \ifnum 0%
-      \if L#21\fi
-      \if M#21\fi
-      >0 %
-      \catcode"#1=11 %
+  \else
+    \def\reserved at b##1,{%
+      \ifx\@nnil##1\relax\else
+        \ifx\@nnil##1\@nnil\else
+         \noexpand\@onefilewithoptions##1[{#2}][{#4}]%
+         \noexpand\@pkgextension
+        \fi
+        \expandafter\reserved at b
+      \fi}%
+      \edef\reserved at a{\zap at space#3 \@empty}%
+      \edef\reserved at a{\expandafter\reserved at b\reserved at a,\@nnil,}%
+  \fi
+  \reserved at a}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+        {\@fileswith at pti@ns}{ifx tests in \@fileswith at pti@ns}%
+\def\@fileswith at pti@ns#1[#2]#3[#4]{%
+  \ifx#1\@clsextension
+    \ifx\@classoptionslist\relax
+      \xdef\@classoptionslist{\zap at space#2 \@empty}%
+      \def\reserved at a{%
+        \@onefilewithoptions#3[{#2}][{#4}]#1%
+        \@documentclasshook}%
+    \else
+      \def\reserved at a{%
+        \@onefilewithoptions#3[{#2}][{#4}]#1}%
     \fi
-  }%
-  \def\parseunicodedataIV#1#2#3\relax{%
-    \read\unicoderead to \unicodedataline
-    \if L#2%
-      \count0="#1 %
-      \expandafter\parseunicodedataV\unicodedataline\relax
+  \else
+    \def\reserved at b##1,{%
+      \ifx\@nil##1\relax\else
+        \ifx\relax##1\relax\else
+         \noexpand\@onefilewithoptions##1[{#2}][{#4}]%
+         \noexpand\@pkgextension
+        \fi
+        \expandafter\reserved at b
+      \fi}%
+      \edef\reserved at a{\zap at space#3 \@empty}%
+      \edef\reserved at a{%
+        \expandafter\reserved at b\reserved at a,\@nil,}%
+  \fi
+  \reserved at a}
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+      {\@onefilewithoptions}{Hooks and unused options issue}%
+\def\@onefilewithoptions#1[#2][#3]#4{%
+  \@expl@@@filehook at set@curr at file@@nNN{#1.#4}\reserved at a\reserved at b
+  \edef\reserved at c{\def\noexpand\reserved at c####1%
+    \detokenize\expandafter{\expanded{.#4}}%
+    \noexpand\@nil{\def\noexpand\reserved at a{####1}}}\reserved at c
+  \expandafter\reserved at c\reserved at a\@nil
+  \@pushfilename
+  \xdef\@currname{\string at makeletter\reserved at a}%
+  \xdef\@currpath{\ifx\reserved at b\@empty\else\reserved at b/\fi}%
+  \global\let\@currext#4%
+  \@ifl at aded\@currext\@currname
+    {\@if at ptions\@currext{\@currname}{#2}{}%
+      {\@latex at error
+        {Option clash for \@cls at pkg\space \@currname}%
+        {The package \@currname\space has already been loaded
+         with options:\MessageBreak
+         \space\space[\@ptionlist{\@currname.\@currext}]\MessageBreak
+         There has now been an attempt to load it
+          with options\MessageBreak
+         \space\space[#2]\MessageBreak
+         Adding the global options:\MessageBreak
+         \space\space
+              \@ptionlist{\@currname.\@currext},#2\MessageBreak
+         to your \noexpand\documentclass declaration may fix this.%
+         \MessageBreak
+         Try typing \space <return> \space to proceed.}}%
+     \@firstofone}%
+    {\makeatletter
+     \@reset at ptions
+     \IfFileExists{\@currpath\@currname.\@currext}{}%
+       {\@missing at onefilewithoptions{#2}}%
+     \ifx\@currname\@empty
+       \expandafter\@gobble
+     \else
+       \@disable at packageload@do{\@currname.\@currext}%
+         {\@expl@@@filehook at file@push@@
+          \set at curr@file{\@currpath\@currname.\@currext}%
+          \@filehook at set@CurrentFile
+          \expandafter\@swaptwoargs\expandafter
+            {\expandafter{\@currpkg at reqd}}%
+            {% <
+          \edef\@currpkg at reqd{\@currname.\@currext}%
+          \ifx\CurrentFile\CurrentFileUsed
+          \else
+            \filename at parse\@curr at file
+            \edef\@currpath{\string at makeletter\filename at area}%
+            \edef\@currname{\string at makeletter\filename at base}%
+            \edef\@currext{\string at makeletter\filename at ext}%
+          \fi
+          \load at onefile@withoptions{#2}%
+          \def\@currpkg at reqd%{\@currpkg at reqd}
+            }% >
+          \@expl@@@filehook at file@pop@@}%
+       \expandafter\@firstofone
+     \fi}%
+    {\@ifl at ter\@currext{\@currname}{#3}{}%
+      {\@latex at warning@no at line
+        {You have requested,\on at line,
+         version\MessageBreak
+           `#3' of \@cls at pkg\space \@currname,\MessageBreak
+         but only version\MessageBreak
+          `\csname ver@\@currname.\@currext\endcsname'\MessageBreak
+         is available}}%
+     \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi}%
+    \@popfilename
+    \@reset at ptions}
+\let\@currpkg at reqd\@empty
+\@onlypreamble\@onefilewithoptions
+\let\@unprocessedoptions\@undefined
+\def\@missing at onefilewithoptions#1{%
+  \@missingfileerror{\@currpath\@currname}\@currext
+  \global\let\@currpath\@missingfile at area
+  \global\let\@currname\@missingfile at base
+  \global\let\@currext\@missingfile at ext}
+\def\load at onefile@withoptions#1{%
+  \let\CurrentOption\@empty
+  \@reset at ptions
+  \def\reserved at a{%
+    \@pass at ptions\@currext{#1}{\@currname}%
+    \expandafter\let
+      \csname opt@\@currpkg at reqd\expandafter\endcsname
+      \csname opt@\@currname.\@currext\endcsname
+    \global\expandafter
+    \let\csname ver@\@currname.\@currext\endcsname\@empty
+    \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty
+    \ifx\@currext\@pkgextension
+      \UseHook{package/before}%
+      \UseHook{package/before/\@currname}%
+    \else
+      \ifx\@currext\@clsextension
+        \UseHook{class/before}%
+        \UseHook{class/before/\@currname}%
+      \fi
     \fi
-  }%
-  \def\parseunicodedataV#1;#2\relax{%
-    \loop
-      \unless\ifnum\count0>"#1 %
-        \catcode\count0=11 %
-        \advance\count0 by 1 %
-    \repeat
-  }%
-  \def\storedpar{\par}%
-  \chardef\unicoderead=\numexpr\count16 + 1\relax
-  \openin\unicoderead=UnicodeData.txt %
-  \loop\unless\ifeof\unicoderead %
-    \read\unicoderead to \unicodedataline
-    \unless\ifx\unicodedataline\storedpar
-      \expandafter\parseunicodedataI\unicodedataline\relax
+    \InputIfFileExists{\@currpath\@currpkg at reqd}{}%
+      {\@latex at error
+        {The \@cls at pkg\space\@currpkg at reqd\space failed to load}\@ehd}%
+    \expandafter\let\csname unprocessedoptions-\@currname.\@currext\endcsname
+                    \@@unprocessedoptions
+    \csname\@currname.\@currext-h@@k\endcsname
+    \expandafter\let\csname\@currname.\@currext-h@@k\endcsname
+              \@undefined
+    \ifx\@unprocessedoptions\relax
+      \let\@unprocessedoptions\@undefined
+    \else
+      \csname unprocessedoptions-\@currname.\@currext\endcsname
     \fi
-  \repeat
-  \closein\unicoderead
-  \@firstofone{%
-    \catcode64=12 %
-    \savecatcodetable\catcodetable at latex
-    \catcode64=11 %
-    \savecatcodetable\catcodetable at atletter
-   }
-\endgroup
-\ifx\e at alloc@luafunction at count\@undefined
-  \countdef\e at alloc@luafunction at count=260
-  \e at alloc@luafunction at count=\z@
-\fi
-\def\newluafunction{%
-  \e at alloc\luafunction\e at alloc@chardef
-    \e at alloc@luafunction at count\m at ne\e at alloc@top
+    \expandafter\let
+        \csname unprocessedoptions-\@currname.\@currext\endcsname
+       \@undefined
+    \ifx\@currext\@pkgextension
+      \UseHook{package/after/\@currname}%
+      \UseHook{package/after}%
+    \else
+      \ifx\@currext\@clsextension
+        \UseHook{class/after/\@currname}%
+        \UseHook{class/after}%
+      \fi
+    \fi}%
+  \@ifl at aded\@currext\@currname{}{\reserved at a}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+      {\@onefilewithoptions}{Hooks and unused options issue}%
+
+\def\load at onefilewithoptions#1[#2][#3]#4{%
+  \@pushfilename
+  \xdef\@currname{#1}%
+  \global\let\@currext#4%
+  \let\CurrentOption\@empty
+  \@reset at ptions
+  \makeatletter
+  \def\reserved at a{%
+    \@ifl at aded\@currext{#1}%
+      {\@if at ptions\@currext{#1}{#2}{}%
+        {\@latex at error
+            {Option clash for \@cls at pkg\space #1}%
+            {The package #1 has already been loaded
+             with options:\MessageBreak
+             \space\space[\@ptionlist{#1.\@currext}]\MessageBreak
+             There has now been an attempt to load it
+              with options\MessageBreak
+             \space\space[#2]\MessageBreak
+             Adding the global options:\MessageBreak
+             \space\space
+                  \@ptionlist{#1.\@currext},#2\MessageBreak
+             to your \noexpand\documentclass declaration may fix this.%
+             \MessageBreak
+             Try typing \space <return> \space to proceed.}}}%
+      {\@pass at ptions\@currext{#2}{#1}%
+       \global\expandafter
+       \let\csname ver@\@currname.\@currext\endcsname\@empty
+       \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty
+       \InputIfFileExists
+         {\@currname.\@currext}%
+         {}%
+         {\@missingfileerror\@currname\@currext}%
+    \let\@unprocessedoptions\@@unprocessedoptions
+    \csname\@currname.\@currext-h@@k\endcsname
+    \expandafter\let\csname\@currname.\@currext-h@@k\endcsname
+              \@undefined
+    \@unprocessedoptions}%
+    \@ifl at ter\@currext{#1}{#3}{}%
+      {\@latex at warning@no at line
+         {You have requested,\on at line,
+          version\MessageBreak
+            `#3' of \@cls at pkg\space #1,\MessageBreak
+          but only version\MessageBreak
+           `\csname ver@#1.\@currext\endcsname'\MessageBreak
+          is available}}%
+    \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi
+    \@popfilename
+    \@reset at ptions}%
+  \reserved at a}
+
+\let \load at onefile@withoptions    \@undefined
+\let \@missing at onefilewithoptions \@undefined
+
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\AtBeginDocument}{Use hook system}%
+\DeclareRobustCommand\AtBeginDocument{\AddToHook{begindocument}}
+\DeclareRobustCommand\AtEndDocument  {\AddToHook{enddocument}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\AtBeginDocument}{Use hook system}%
+
+\DeclareRobustCommand\AtBeginDocument{\g at addto@macro\@begindocumenthook}
+\DeclareRobustCommand\AtEndDocument{\g at addto@macro\@enddocumenthook}
+
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\filec at ntents}{Define \q at curr@file directly (gh/220)}%
+\def\filecontents{\@tempswatrue\@fileswtrue
+  \@ifnextchar[\filec at ntents@opt\filec at ntents
 }
-\ifx\e at alloc@whatsit at count\@undefined
-  \countdef\e at alloc@whatsit at count=261
-  \e at alloc@whatsit at count=\z@
-\fi
-\def\newwhatsit#1{%
-  \e at alloc\whatsit\e at alloc@chardef
-    \e at alloc@whatsit at count\m at ne\e at alloc@top#1%
+\@namedef{filecontents*}{\@tempswafalse\@fileswtrue
+  \@ifnextchar[\filec at ntents@opt\filec at ntents
 }
-\ifx\e at alloc@bytecode at count\@undefined
-  \countdef\e at alloc@bytecode at count=262
-  \e at alloc@bytecode at count=\z@
-\fi
-\def\newluabytecode#1{%
-  \e at alloc\luabytecode\e at alloc@chardef
-    \e at alloc@bytecode at count\m at ne\e at alloc@top#1%
+\def\filec at ntents@opt[#1]{%
+  \edef\@fortmp{\zap at space#1 \@empty}%
+  \@for\reserved at a:=\@fortmp\do{%
+    \ifcsname filec at ntents@\reserved at a\endcsname
+      \csname filec at ntents@\reserved at a\endcsname
+    \else
+    \@latex at error{Unknown filecontents option \reserved at a}%
+       {Valid options are force (or overwrite), nosearch, noheader}%
+    \fi}%
+  \filec at ntents
 }
+\let\filec at ntents@force\@fileswfalse
+\let\filec at ntents@overwrite\@fileswfalse  % alternative name
+\let\filec at ntents@noheader\@tempswafalse
+\def\filec at ntents@nosearch{%
+  \let\filec at ntents@checkdir\@currdir
+  \def\filec at ntents@where{in current directory}}
+\let\filec at ntents@checkdir\@empty
+\def\filec at ntents@where{exists on the system}
+\begingroup%
+\@tempcnta=1
+\loop
+  \catcode\@tempcnta=12  %
+  \advance\@tempcnta\@ne %
+\ifnum\@tempcnta<32      %
+\repeat                  %
+\catcode`\*=11 %
+\catcode`\^^M\active%
+\catcode`\^^L\active\let^^L\relax%
+\catcode`\^^I\active%
+\gdef\filec at ntents#1{%
+  \set at curr@file{\filec at ntents@checkdir#1}%
+  \edef\q at curr@file{"\@curr at file"}%
+  \chardef\reserved at c\ifx\directlua\@undefined 15 \else 127 \fi%
+  \openin\@inputcheck\q at curr@file \space %
+  \ifeof\@inputcheck%
+    \@latex at warning@no at line%
+        {Writing file `\@currdir\@curr at file'}%
+    \ch at ck7\reserved at c\write\relax%
+    \immediate\openout\reserved at c\q at curr@file\relax%
+  \else%
+    \if at filesw%
+      \@latex at warning@no at line%
+          {File `\@curr at file' already \filec at ntents@where.\MessageBreak%
+             Not generating it from this source}%
+      \let\write\@gobbletwo%
+      \let\closeout\@gobble%
+    \else%
+      \edef\reserved at a{#1}%
+      \edef\reserved at a{\detokenize\expandafter{\reserved at a}}%
+      \edef\reserved at b{\detokenize\expandafter{\jobname}}%
+      \ifx\reserved at a\reserved at b%
+        \@fileswtrue%
+      \else%
+        \edef\reserved at b{\reserved at b\detokenize{.tex}}%
+        \ifx\reserved at a\reserved at b
+          \@fileswtrue%
+        \fi%
+      \fi%
+      \ch at ck7\reserved at c\write\relax%
+      \if at filesw%  % Foul ... trying to overwrite \jobname!
+      \@latex at error{Trying to overwrite `\jobname.tex'}{You can't %
+        write to the file you are reading from!\MessageBreak%
+        Data is written to screen instead.}%
+      \else%
+        \@latex at warning@no at line%
+           {Writing or overwriting file `\@currdir\@curr at file'}%
+        \immediate\openout\reserved at c\q at curr@file\relax%
+      \fi%
+    \fi%
+  \fi%
+  \closein\@inputcheck%
+  \if at tempswa%
+    \immediate\write\reserved at c{%
+      \@percentchar\@percentchar\space%
+          \expandafter\@gobble\string\LaTeX2e file `\@curr at file'^^J%
+      \@percentchar\@percentchar\space  generated by the %
+        `\@currenvir' \expandafter\@gobblefour\string\newenvironment^^J%
+      \@percentchar\@percentchar\space from source `\jobname' on %
+         \number\year/\two at digits\month/\two at digits\day.^^J%
+      \@percentchar\@percentchar}%
+  \fi%
+  \let\do\@makeother\dospecials%
+  \count@ 128\relax%
+  \loop%
+    \catcode\count@ 11\relax%
+    \advance\count@ \@ne%
+    \ifnum\count@<\@cclvi%
+  \repeat%
+  \edef\E{\@backslashchar end\string{\@currenvir\string}}%
+  \edef\reserved at b{%
+    \def\noexpand\reserved at b%
+         ####1\E####2\E####3\relax}%
+  \reserved at b{%
+    \ifx\relax##3\relax%
+      \immediate\write\reserved at c{##1}%
+    \else%
+      \edef^^M{\noexpand\end{\@currenvir}}%
+      \ifx\relax##1\relax%
+      \else%
+          \@latex at warning{Writing text `##1' before %
+             \string\end{\@currenvir}\MessageBreak as last line of \@curr at file}%
+        \immediate\write\reserved at c{##1}%
+      \fi%
+      \ifx\relax##2\relax%
+      \else%
+         \@latex at warning{%
+           Ignoring text `##2' after \string\end{\@currenvir}}%
+      \fi%
+    \fi%
+    ^^M}%
+  \catcode`\^^L\active%
+  \let\L\@undefined%
+  \def^^L{\expandafter\ifx\csname L\endcsname\relax\fi ^^J^^J}%
+  \catcode`\^^I\active%
+  \let\I\@undefined%
+  \def^^I{\expandafter\ifx\csname I\endcsname\relax\fi\space}%
+  \catcode`\^^M\active%
+  \edef^^M##1^^M{%
+    \noexpand\reserved at b##1\E\E\relax}}%
+\endgroup%
+\EndIncludeInRelease
+\IncludeInRelease{2019/10/01}%
+                 {\filec at ntents}{Spaces in file names + optional arg}%
+\def\filecontents{\@tempswatrue\@fileswtrue
+  \@ifnextchar[\filec at ntents@opt\filec at ntents
+}
+\@namedef{filecontents*}{\@tempswafalse\@fileswtrue
+  \@ifnextchar[\filec at ntents@opt\filec at ntents
+}
+\def\filec at ntents@opt[#1]{%
+  \edef\@fortmp{\zap at space#1 \@empty}%
+  \@for\reserved at a:=\@fortmp\do{%
+    \ifcsname filec at ntents@\reserved at a\endcsname
+      \csname filec at ntents@\reserved at a\endcsname
+    \else
+    \@latex at error{Unknown filecontents option \reserved at a}%
+       {Valid options are force (or overwrite), nosearch, noheader}%
+    \fi}%
+  \filec at ntents
+}
+\let\filec at ntents@force\@fileswfalse
+\let\filec at ntents@overwrite\@fileswfalse  % alternative name
+\let\filec at ntents@noheader\@tempswafalse
+\def\filec at ntents@nosearch{%
+  \let\filec at ntents@checkdir\@currdir
+  \def\filec at ntents@where{in current directory}}
+\let\filec at ntents@checkdir\@empty
+\def\filec at ntents@where{exists on the system}
+\begingroup%
+\@tempcnta=1
+\loop
+  \catcode\@tempcnta=12  %
+  \advance\@tempcnta\@ne %
+\ifnum\@tempcnta<32      %
+\repeat                  %
+\catcode`\*=11 %
+\catcode`\^^M\active%
+\catcode`\^^L\active\let^^L\relax%
+\catcode`\^^I\active%
+\gdef\filec at ntents#1{%
+  \set at curr@file{\filec at ntents@checkdir#1}%
+  \edef\q at curr@file{\expandafter\quote at name\expandafter{\@curr at file}}%
+  \chardef\reserved at c\ifx\directlua\@undefined 15 \else 127 \fi%
+  \openin\@inputcheck\q at curr@file \space %
+  \ifeof\@inputcheck%
+    \@latex at warning@no at line%
+        {Writing file `\@currdir\@curr at file'}%
+    \ch at ck7\reserved at c\write\relax%
+    \immediate\openout\reserved at c\q at curr@file\relax%
+  \else%
+    \if at filesw%
+      \@latex at warning@no at line%
+          {File `\@curr at file' already \filec at ntents@where.\MessageBreak%
+             Not generating it from this source}%
+      \let\write\@gobbletwo%
+      \let\closeout\@gobble%
+    \else%
+      \edef\reserved at a{#1}%
+      \edef\reserved at a{\detokenize\expandafter{\reserved at a}}%
+      \edef\reserved at b{\detokenize\expandafter{\jobname}}%
+      \ifx\reserved at a\reserved at b%
+        \@fileswtrue%
+      \else%
+        \edef\reserved at b{\reserved at b\detokenize{.tex}}%
+        \ifx\reserved at a\reserved at b
+          \@fileswtrue%
+        \fi%
+      \fi%
+      \ch at ck7\reserved at c\write\relax%
+      \if at filesw%  % Foul ... trying to overwrite \jobname!
+      \@latex at error{Trying to overwrite `\jobname.tex'}{You can't %
+        write to the file you are reading from!\MessageBreak%
+        Data is written to screen instead.}%
+      \else%
+        \@latex at warning@no at line%
+           {Writing or overwriting file `\@currdir\@curr at file'}%
+        \immediate\openout\reserved at c\q at curr@file\relax%
+      \fi%
+    \fi%
+  \fi%
+  \closein\@inputcheck%
+  \if at tempswa%
+    \immediate\write\reserved at c{%
+      \@percentchar\@percentchar\space%
+          \expandafter\@gobble\string\LaTeX2e file `\@curr at file'^^J%
+      \@percentchar\@percentchar\space  generated by the %
+        `\@currenvir' \expandafter\@gobblefour\string\newenvironment^^J%
+      \@percentchar\@percentchar\space from source `\jobname' on %
+         \number\year/\two at digits\month/\two at digits\day.^^J%
+      \@percentchar\@percentchar}%
+  \fi%
+  \let\do\@makeother\dospecials%
+  \count@ 128\relax%
+  \loop%
+    \catcode\count@ 11\relax%
+    \advance\count@ \@ne%
+    \ifnum\count@<\@cclvi%
+  \repeat%
+  \edef\E{\@backslashchar end\string{\@currenvir\string}}%
+  \edef\reserved at b{%
+    \def\noexpand\reserved at b%
+         ####1\E####2\E####3\relax}%
+  \reserved at b{%
+    \ifx\relax##3\relax%
+      \immediate\write\reserved at c{##1}%
+    \else%
+      \edef^^M{\noexpand\end{\@currenvir}}%
+      \ifx\relax##1\relax%
+      \else%
+          \@latex at warning{Writing text `##1' before %
+             \string\end{\@currenvir}\MessageBreak as last line of \@curr at file}%
+        \immediate\write\reserved at c{##1}%
+      \fi%
+      \ifx\relax##2\relax%
+      \else%
+         \@latex at warning{%
+           Ignoring text `##2' after \string\end{\@currenvir}}%
+      \fi%
+    \fi%
+    ^^M}%
+  \catcode`\^^L\active%
+  \let\L\@undefined%
+  \def^^L{\expandafter\ifx\csname L\endcsname\relax\fi ^^J^^J}%
+  \catcode`\^^I\active%
+  \let\I\@undefined%
+  \def^^I{\expandafter\ifx\csname I\endcsname\relax\fi\space}%
+  \catcode`\^^M\active%
+  \edef^^M##1^^M{%
+    \noexpand\reserved at b##1\E\E\relax}}%
+\endgroup%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\filec at ntents}{Spaces in file names + optional arg}%
 
-\ifx\e at alloc@luachunk at count\@undefined
-  \countdef\e at alloc@luachunk at count=263
-  \e at alloc@luachunk at count=\z@
-\fi
-\def\newluachunkname#1{%
-  \e at alloc\luachunk\e at alloc@chardef
-    \e at alloc@luachunk at count\m at ne\e at alloc@top#1%
-    {\escapechar\m at ne
-    \directlua{lua.name[\the\allocationnumber]="\string#1"}}%
+\let\filec at ntents@opt        \@undefined
+\let\filec at ntents@force      \@undefined
+\let\filec at ntents@overwrite  \@undefined
+\let\filec at ntents@noheader   \@undefined
+\let\filec at ntents@nosearch   \@undefined
+\let\filec at ntents@checkdir   \@undefined
+\let\filec at ntents@where      \@undefined
+
+\begingroup%
+\@tempcnta=1
+\loop
+  \catcode\@tempcnta=12  %
+  \advance\@tempcnta\@ne %
+\ifnum\@tempcnta<32      %
+\repeat                  %
+\catcode`\*=11 %
+\catcode`\^^M\active%
+\catcode`\^^L\active\let^^L\relax%
+\catcode`\^^I\active%
+
+\gdef\filec at ntents#1{%
+  \openin\@inputcheck#1 %
+  \ifeof\@inputcheck%
+    \@latex at warning@no at line%
+        {Writing file `\@currdir#1'}%
+    \chardef\reserved at c15 %
+    \ch at ck7\reserved at c\write%
+    \immediate\openout\reserved at c#1\relax%
+  \else%
+    \closein\@inputcheck%
+    \@latex at warning@no at line%
+            {File `#1' already exists on the system.\MessageBreak%
+             Not generating it from this source}%
+    \let\write\@gobbletwo%
+    \let\closeout\@gobble%
+  \fi%
+  \if at tempswa%
+    \immediate\write\reserved at c{%
+      \@percentchar\@percentchar\space%
+          \expandafter\@gobble\string\LaTeX2e file `#1'^^J%
+      \@percentchar\@percentchar\space  generated by the %
+        `\@currenvir' \expandafter\@gobblefour\string\newenvironment^^J%
+      \@percentchar\@percentchar\space from source `\jobname' on %
+         \number\year/\two at digits\month/\two at digits\day.^^J%
+      \@percentchar\@percentchar}%
+  \fi%
+  \let\do\@makeother\dospecials%
+  \count@ 128\relax%
+  \loop%
+    \catcode\count@ 11\relax%
+    \advance\count@ \@ne%
+    \ifnum\count@<\@cclvi%
+  \repeat%
+  \edef\E{\@backslashchar end\string{\@currenvir\string}}%
+  \edef\reserved at b{%
+    \def\noexpand\reserved at b%
+         ####1\E####2\E####3\relax}%
+  \reserved at b{%
+    \ifx\relax##3\relax%
+      \immediate\write\reserved at c{##1}%
+    \else%
+      \edef^^M{\noexpand\end{\@currenvir}}%
+      \ifx\relax##1\relax%
+      \else%
+          \@latex at warning{Writing text `##1' before %
+             \string\end{\@currenvir}\MessageBreak as last line of #1}%
+        \immediate\write\reserved at c{##1}%
+      \fi%
+      \ifx\relax##2\relax%
+      \else%
+         \@latex at warning{%
+           Ignoring text `##2' after \string\end{\@currenvir}}%
+      \fi%
+    \fi%
+    ^^M}%
+
+  \catcode`\^^L\active%
+  \let\L\@undefined%
+  \def^^L{\expandafter\ifx\csname L\endcsname\relax\fi ^^J^^J}%
+  \catcode`\^^I\active%
+  \let\I\@undefined%
+  \def^^I{\expandafter\ifx\csname I\endcsname\relax\fi\space}%
+  \catcode`\^^M\active%
+  \edef^^M##1^^M{%
+    \noexpand\reserved at b##1\E\E\relax}}%
+\endgroup%
+\EndIncludeInRelease
+%%
+%% File: ltfilehook.dtx (C) Copyright 2020,2021 Frank Mittelbach,
+%%                                         Phelype Oleinik & LaTeX Team
+%%% From File: ltfilehook.dtx
+\providecommand\ltfilehookversion{v1.0e}
+\providecommand\ltfilehookdate{2021/01/07}
+\IncludeInRelease{2020/10/01}%
+                 {\CurrentFile}{Hook management file}%
+\ExplSyntaxOn
+\tl_new:N \CurrentFile
+\tl_new:N \CurrentFilePath
+\tl_new:N \CurrentFileUsed
+\tl_new:N \CurrentFilePathUsed
+\ExplSyntaxOff
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\CurrentFile}{Hook management file}%
+
+\let \CurrentFile         \@undefined
+\let \CurrentFilePath     \@undefined
+\let \CurrentFileUsed     \@undefined
+\let \CurrentFilePathUsed \@undefined
+
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+          {\__filehook_file_parse_full_name:nN}{File helpers}%
+\ExplSyntaxOn
+\cs_new:Npn \__filehook_file_parse_full_name:nN #1
+  {
+    \exp_args:Nf \file_parse_full_name_apply:nN
+      {
+        \exp_args:Nf \__filehook_full_name:nn
+          { \file_full_name:n {#1} } {#1}
+      }
+  }
+\cs_new:Npn \__filehook_full_name:nn #1 #2
+  {
+    \tl_if_empty:nTF {#1}
+      { \tl_trim_spaces:n {#2} }
+      { \tl_trim_spaces:n {#1} }
+  }
+\cs_new:Npn \__filehook_if_no_extension:nTF #1
+  {
+    \exp_args:Ne \tl_if_empty:nTF
+      { \file_parse_full_name_apply:nN {#1} \use_iii:nnn }
+  }
+\cs_new_protected:Npn \__filehook_drop_extension:N #1
+  {
+    \tl_gset:Nx #1
+      {
+        \exp_args:NV \__filehook_file_parse_full_name:nN #1
+          \__filehook_drop_extension_aux:nnn
+      }
+  }
+\cs_new:Npn \__filehook_drop_extension_aux:nnn #1 #2 #3
+   { \tl_if_empty:nF {#1} { #1 / } #2 }
+\tl_new:N \l__filehook_internal_tl
+\seq_new:N \g__filehook_input_file_seq
+\cs_new_protected:Npn \__filehook_file_push:
+  {
+    \seq_gpush:Nx \g__filehook_input_file_seq
+      {
+        { \CurrentFilePathUsed } { \CurrentFileUsed }
+        { \CurrentFilePath     } { \CurrentFile     }
+      }
+  }
+\cs_new_protected:Npn \__filehook_file_pop:
+  {
+    \seq_gpop:NNTF \g__filehook_input_file_seq \l__filehook_internal_tl
+      { \exp_after:wN \__filehook_file_pop_assign:nnnn \l__filehook_internal_tl }
+      {
+        \msg_error:nnn { hooks } { should-not-happen }
+          { Tried~to~pop~from~an~empty~file~name~stack. }
+      }
+  }
+\cs_new_protected:Npn \__filehook_file_pop_assign:nnnn #1 #2 #3 #4
+  {
+    \tl_set:Nn \CurrentFilePathUsed {#1}
+    \tl_set:Nn \CurrentFileUsed {#2}
+    \tl_set:Nn \CurrentFilePath {#3}
+    \tl_set:Nn \CurrentFile {#4}
+  }
+\ExplSyntaxOff
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+                 {\file_parse_full_name_apply:nN}{Roll forward help}%
+
+\ExplSyntaxOn
+\cs_if_exist:NF\file_parse_full_name_apply:nN
+{
+\cs_new:Npn \file_parse_full_name_apply:nN #1
+  {
+    \exp_args:Ne \__file_parse_full_name_auxi:nN
+      { \__kernel_file_name_sanitize:n {#1} }
+  }
+\cs_new:Npn \__file_parse_full_name_auxi:nN #1
+  {
+    \__file_parse_full_name_area:nw { } #1
+      / \s__file_stop
+  }
+\cs_new:Npn \__file_parse_full_name_area:nw #1 #2 / #3 \s__file_stop
+  {
+    \tl_if_empty:nTF {#3}
+      { \__file_parse_full_name_base:nw { } #2 . \s__file_stop {#1} }
+      { \__file_parse_full_name_area:nw { #1 / #2 } #3 \s__file_stop }
+  }
+\cs_new:Npn \__file_parse_full_name_base:nw #1 #2 . #3 \s__file_stop
+  {
+    \tl_if_empty:nTF {#3}
+      {
+        \tl_if_empty:nTF {#1}
+          {
+            \tl_if_empty:nTF {#2}
+              { \__file_parse_full_name_tidy:nnnN { } { } }
+              { \__file_parse_full_name_tidy:nnnN { .#2 } { } }
+          }
+          { \__file_parse_full_name_tidy:nnnN {#1} { .#2 } }
+      }
+      { \__file_parse_full_name_base:nw { #1 . #2 } #3 \s__file_stop }
+  }
+\cs_new:Npn \__file_parse_full_name_tidy:nnnN #1 #2 #3 #4
+  {
+    \exp_args:Nee #4
+      {
+        \str_if_eq:nnF {#3} { / } { \use_none:n }
+        #3 \prg_do_nothing:
+      }
+      { \use_none:n #1 \prg_do_nothing: }
+      {#2}
+  }
 }
-\def\now at and@everyjob#1{%
-  \everyjob\expandafter{\the\everyjob
-    #1%
-  }%
-  #1%
+\ExplSyntaxOff
+
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+          {\InputIfFileExists}{Hook management (files)}%
+\let\InputIfFileExists\@undefined
+\DeclareRobustCommand \InputIfFileExists[2]{%
+  \IfFileExists{#1}%
+    {%
+      \@expl@@@filehook at file@push@@
+      \@filehook at set@CurrentFile
+      \expandafter\@swaptwoargs\expandafter
+        {\expandafter\@input at file@exists at with@hooks
+          \expandafter{\@filef at und}}%
+        {#2}%
+      \@expl@@@filehook at file@pop@@
+    }%
 }
+\def\@input at file@exists at with@hooks#1{%
+  \edef\reserved at a{%
+    \@expl@@@filehook at file@pop at assign@@nnnn
+      {\CurrentFilePathUsed}%
+      {\CurrentFileUsed}%
+      {\CurrentFilePath}%
+      {\CurrentFile}}%
+  \expandafter\@swaptwoargs\expandafter{\reserved at a}%
+    {\edef\reserved at a{\unqu at tefilef@und#1\@nil}%
+     \@addtofilelist{\string at makeletter\reserved at a}%
+     \UseHook{file/before}%
+     \UseHook{file/before/\CurrentFile}%
+     \@@input #1% <- trailing space comes from \@filef at und
+    }%
+  \UseHook{file/after/\CurrentFile}%
+  \UseHook{file/after}}
+\def\unqu at tefilef@und"#1" \@nil{#1}
+\EndIncludeInRelease
+\IncludeInRelease{2019/10/01}%
+          {\InputIfFileExists}{Hook management (files)}%
+
+\DeclareRobustCommand \InputIfFileExists[2]{%
+  \IfFileExists{#1}%
+    {%
+  \expandafter\@swaptwoargs\expandafter
+      {\@filef at und}{#2\@addtofilelist{#1}\@@input}}}
+\let\@input at file@exists at with@hooks\@undefined
+\let\unqu at tefilef@und\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+          {\InputIfFileExists}{Hook management (files)}%
+\long\def \InputIfFileExists#1#2{%
+  \IfFileExists{#1}%
+    {#2\@addtofilelist{#1}\@@input \@filef at und}}
+\let\@input at file@exists at with@hooks\@undefined
+\let\unqu at tefilef@und\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+          {\__filehook_subst_add:nn}{Declaring file substitution}%
+\ExplSyntaxOn
+\cs_new_protected:Npn \__filehook_subst_add:nn #1 #2
+  {
+    \group_begin:
+      \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } }
+      \int_set:Nn \tex_escapechar:D { -1 }
+      \cs_gset:cpx
+        {
+          @file-subst@
+          \__filehook_subst_file_normalize:Nn \use_ii_iii:nnn {#1}
+        }
+        { \__filehook_subst_file_normalize:Nn \__filehook_file_name_compose:nnn {#2} }
+    \group_end:
+  }
+\cs_new_protected:Npn \__filehook_subst_remove:n #1
+  {
+    \group_begin:
+      \cs_set:cpx { } { \exp_not:o { \cs:w\cs_end: } }
+      \int_set:Nn \tex_escapechar:D { -1 }
+      \cs_undefine:c
+        {
+          @file-subst@
+          \__filehook_subst_file_normalize:Nn \use_ii_iii:nnn {#1}
+        }
+    \group_end:
+  }
+\cs_new:Npn \__filehook_subst_file_normalize:Nn #1 #2
+  {
+    \exp_after:wN \__filehook_subst_empty_name_chk:NN
+      \cs:w \exp_after:wN \cs_end:
+        \cs:w \__filehook_file_parse_full_name:nN {#2} #1 \cs_end:
+  }
+\cs_new:Npn \__filehook_subst_empty_name_chk:NN #1 #2
+  { \if_meaning:w #1 #2 .tex \else: \token_to_str:N #2 \fi: }
+\cs_gset:Npn \use_ii_iii:nnn #1 #2 #3 {#2 #3}
+\ExplSyntaxOff
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+          {\declare at file@substitution}{File substitution}%
+\ExplSyntaxOn
+\cs_new_eq:NN \declare at file@substitution   \__filehook_subst_add:nn
+\cs_new_eq:NN \undeclare at file@substitution \__filehook_subst_remove:n
+\ExplSyntaxOff
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+          {\declare at file@substitution}{File substitution}%
+
+\let \declare at file@substitution   \@gobbletwo
+\let \undeclare at file@substitution \@gobble
+
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+          {\set at curr@file}{Setting current file name}%
+\def\set at curr@file#1{%
   \begingroup
-    \attributedef\attributezero=0 %
-    \chardef     \charzero     =0 %
-    \countdef    \CountZero    =0 %
-    \dimendef    \dimenzero    =0 %
-    \mathchardef \mathcharzero =0 %
-    \muskipdef   \muskipzero   =0 %
-    \skipdef     \skipzero     =0 %
-    \toksdef     \tokszero     =0 %
-    \directlua{require("ltluatex")}
+    \escapechar\m at ne
+    \expandafter\def\csname\expandafter\endcsname
+      \expandafter{\csname\endcsname}%
+    \@expl@@@filehook at if@no at extension@@nTF{#1}%
+      {\@tempswatrue}{\@tempswafalse}%
+    \@kernel at make@file at csname\@curr at file
+      \@expl@@@filehook at resolve@file at subst@@w {#1}%
+    \@expl@@@filehook at if@file at replaced@@TF
+      {\@kernel at make@file at csname\@curr at file@reqd
+         \@expl@@@filehook at normalize@file at name@@w{#1}%
+       \if at tempswa \@expl@@@filehook at drop@extension@@N\@curr at file@reqd \fi}%
+      {\if at tempswa \@expl@@@filehook at drop@extension@@N\@curr at file \fi
+       \global\let\@curr at file@reqd\@curr at file}%
+    \@expl@@@filehook at clear@replacement at flag@@
+  \endgroup}
+\EndIncludeInRelease
+\IncludeInRelease{2019/10/01}%
+          {\set at curr@file}{Setting current file name}%
+\def\set at curr@file#1{%
+  \begingroup
+    \escapechar\m at ne
+    \xdef\@curr at file{%
+      \expandafter\expandafter\expandafter\unquote at name
+      \expandafter\expandafter\expandafter{%
+      \expandafter\string
+        \csname\@firstofone#1\@empty\endcsname}}%
   \endgroup
+}
 \EndIncludeInRelease
-\IncludeInRelease{0000/00/00}
-                 {\newluafunction}{LuaTeX}%
-\let\e at alloc@attribute at count\@undefined
-\let\newattribute\@undefined
-\let\setattribute\@undefined
-\let\unsetattribute\@undefined
-\let\e at alloc@ccodetable at count\@undefined
-\let\newcatcodetable\@undefined
-\let\catcodetable at initex\@undefined
-\let\catcodetable at string\@undefined
-\let\catcodetable at latex\@undefined
-\let\catcodetable at atletter\@undefined
-\let\e at alloc@luafunction at count\@undefined
-\let\newluafunction\@undefined
-\let\e at alloc@luafunction at count\@undefined
-\let\newwhatsit\@undefined
-\let\e at alloc@whatsit at count\@undefined
-\let\newluabytecode\@undefined
-\let\e at alloc@bytecode at count\@undefined
-\let\newluachunkname\@undefined
-\let\e at alloc@luachunk at count\@undefined
-\directlua{luatexbase.uninstall()}
+\IncludeInRelease{0000/00/00}%
+          {\set at curr@file}{Setting current file name}%
+\let\set at curr@file\@undefined
 \EndIncludeInRelease
-\IncludeInRelease{2017/01/01}%
-                 {\fontencoding}{TU in everyjob}%
-\fontencoding{TU}\let\encodingdefault\f at encoding
-\ifx\directlua\@undefined\else
-  \directlua{%
-  if xpcall(function ()%
-             require('luaotfload-main')%
-            end,texio.write_nl) then %
-  local _void = luaotfload.main ()%
-  else %
-  texio.write_nl('Error in luaotfload: reverting to OT1')%
-  tex.print('\string\\def\string\\encodingdefault{OT1}')%
-  end %
-  }%
-  \let\f at encoding\encodingdefault
-  \expandafter\let\csname ver at luaotfload.sty\endcsname\fmtversion
-\fi
+\IncludeInRelease{2020/10/01}%
+          {\@kernel at make@file at csname}{Make file csname}%
+\def\@kernel at make@file at csname#1#2#3{%
+  \xdef#1{\expandafter\@set at curr@file at aux
+    \csname\expandafter#2\@firstofone#3\@nil\endcsname}}
+\def\@set at curr@file at aux#1{%
+  \expandafter\ifx\csname\endcsname#1%
+    .tex\else\string#1\fi}
+\def\@filehook at set@CurrentFile{%
+  \@expl@@@filehook at set@curr at file@@nNN{\@curr at file}%
+    \CurrentFileUsed\CurrentFilePathUsed
+  \ifx\@curr at file@reqd\@curr at file
+    \let\CurrentFile\CurrentFileUsed
+    \let\CurrentFilePath\CurrentFilePathUsed
+  \else
+    \@expl@@@filehook at set@curr at file@@nNN{\@curr at file@reqd}%
+      \CurrentFile\CurrentFilePath
+  \fi}
 \EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+          {@@_set_curr_file:nNN}{Set curr file}%
+\ExplSyntaxOn
+\cs_new_protected:Npn \__filehook_set_curr_file:nNN #1
+  {
+    \exp_args:Nf \__filehook_file_parse_full_name:nN {#1}
+      \__filehook_set_curr_file_assign:nnnNN
+  }
+\cs_new_protected:Npn \__filehook_set_curr_file_assign:nnnNN #1 #2 #3 #4 #5
+  {
+    \str_set:Nn #5 {#1}
+    \str_set:Nn #4 {#2#3}
+  }
+\ExplSyntaxOff
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+          {\__filehook_resolve_file_subst:w}{Replace files detect loops}%
+\ExplSyntaxOn
+\cs_new:Npn \__filehook_resolve_file_subst:w #1 \@nil
+  { \__filehook_file_parse_full_name:nN {#1} \__filehook_file_subst_begin:nnn }
+\cs_new:Npn \__filehook_normalize_file_name:w #1 \@nil
+  { \__filehook_file_parse_full_name:nN {#1} \__filehook_file_name_compose:nnn }
+\cs_new:Npn \__filehook_file_name_compose:nnn #1 #2 #3
+  { \tl_if_empty:nF {#1} { #1 / } #2#3 }
+\flag_new:n { __filehook_file_replaced }
+\cs_new:Npn \__filehook_if_file_replaced:TF #1 #2
+  { \flag_if_raised:nTF { __filehook_file_replaced } {#1} {#2} }
+\cs_new_protected:Npn \__filehook_clear_replacement_flag:
+  { \flag_clear:n { __filehook_file_replaced } }
+\cs_new:Npn \__filehook_file_subst_begin:nnn #1 #2 #3
+  {
+    \__filehook_file_subst_tortoise_hare:nn { #2#3 } { #2#3 }
+      { \__filehook_file_name_compose:nnn {#1} {#2} {#3} }
+  }
+\ExplSyntaxOff
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+         {\__filehook_file_subst_tortoise_hare:nn}{Tortoise and Hare}%
+\ExplSyntaxOn
+\cs_new:Npn \__filehook_file_subst_tortoise_hare:nn #1 #2 #3
+  {
+    \cs_if_exist:cTF { @file-subst@ #2 }
+      {
+        \flag_if_raised:nF { __filehook_file_replaced }
+          { \flag_raise:n { __filehook_file_replaced } }
+        \cs_if_exist:cTF { @file-subst@ \use:c { @file-subst@ #2 } }
+          {
+            \__filehook_file_subst_loop:cc
+              { @file-subst@ #1 }
+              { @file-subst@ \use:c { @file-subst@ #2 } }
+          }
+          { \use:c { @file-subst@ #2 } }
+      }
+      { #3 }
+  }
+\cs_new:Npn \__filehook_file_subst_loop:NN #1 #2
+  {
+    \token_if_eq_meaning:NNTF #1 #2
+      {
+        .tex
+        \__filehook_file_subst_cycle_error:cN { @file-subst@ #1 } #1
+      }
+      { \__filehook_file_subst_tortoise_hare:nn {#1} {#2} {#2} }
+  }
+\cs_generate_variant:Nn \__filehook_file_subst_loop:NN { cc }
+\cs_new:Npn \__filehook_file_subst_cycle_error:NN #1 #2
+  {
+    \__kernel_msg_expandable_error:nnff { kernel } { file-cycle }
+      {#1} { \use:c { @file-subst@ #1 } }
+    \token_if_eq_meaning:NNF #1 #2
+      { \__filehook_file_subst_cycle_error:cN { @file-subst@ #1 } #2 }
+  }
+\cs_generate_variant:Nn \__filehook_file_subst_cycle_error:NN { c }
+\__kernel_msg_new:nnn { kernel } { file-cycle }
+  { File~loop!~#1~replaced~by~#2... }
+\ExplSyntaxOff
+\EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+          {\disable at package@load}{Disable packages}%
+\def\disable at package@load#1#2{%
+  \global\@namedef{@pkg-disable@#1.\@pkgextension}{#2}}
+\def\@disable at packageload@do#1#2{%
+  \@ifundefined{@pkg-disable@#1}{#2}%
+     {\@nameuse{@pkg-disable@#1}}}
+\def\reenable at package@load#1{%
+  \global\expandafter\let
+  \csname @pkg-disable@#1.\@pkgextension \endcsname \@undefined}
+\EndIncludeInRelease
 \IncludeInRelease{0000/00/00}%
-                 {\fontencoding}{TU in everyjob}%
-\fontencoding{OT1}\let\encodingdefault\f at encoding
+          {\disable at package@load}{Disable packages}%
+
+\let\disable at package@load   \@undefined
+\let\@disable at packageload@do\@undefined
+\let\reenable at package@load  \@undefined
 \EndIncludeInRelease
+\IncludeInRelease{2020/10/01}%
+    {\@expl@@@filehook at if@no at extension@@nTF}{2e tmp interfaces}%
+\ExplSyntaxOn
+\cs_new_eq:NN \@expl@@@filehook at if@no at extension@@nTF
+              \__filehook_if_no_extension:nTF
+\cs_new_eq:NN \@expl@@@filehook at set@curr at file@@nNN
+              \__filehook_set_curr_file:nNN
+\cs_new_eq:NN \@expl@@@filehook at resolve@file at subst@@w
+              \__filehook_resolve_file_subst:w
+\cs_new_eq:NN \@expl@@@filehook at normalize@file at name@@w
+              \__filehook_normalize_file_name:w
+\cs_new_eq:NN \@expl@@@filehook at if@file at replaced@@TF
+              \__filehook_if_file_replaced:TF
+\cs_new_eq:NN \@expl@@@filehook at clear@replacement at flag@@
+              \__filehook_clear_replacement_flag:
+\cs_new_eq:NN \@expl@@@filehook at drop@extension@@N
+              \__filehook_drop_extension:N
+\cs_new_eq:NN \@expl@@@filehook at file@push@@
+               \__filehook_file_push:
+\cs_new_eq:NN \@expl@@@filehook at file@pop@@
+              \__filehook_file_pop:
+\cs_new_eq:NN \@expl@@@filehook at file@pop at assign@@nnnn
+              \__filehook_file_pop_assign:nnnn
+\ExplSyntaxOff
+\EndIncludeInRelease
+
+\IncludeInRelease{0000/00/00}%
+    {\@expl@@@filehook at if@no at extension@@nTF}{2e tmp interfaces}%
+\let\@expl@@@filehook at file@pop@@\relax
+\EndIncludeInRelease
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% File: ltshipout.dtx (C) Copyright 2020,2021 Frank Mittelbach, LaTeX Team
+%%
+%%% From File: ltshipout.dtx
+\providecommand\ltshipoutversion{v1.0d}
+\providecommand\ltshipoutdate{2020/12/06}
+\IncludeInRelease{2020/10/01}%
+                 {\shipout}{Hook management (shipout)}%
+\ExplSyntaxOn
+\bool_new:N \g__shipout_debug_bool
+\cs_new_eq:NN \__shipout_debug:n  \use_none:n
+\cs_new_protected:Npn \shipout_debug_on:
+  {
+    \bool_gset_true:N \g__shipout_debug_bool
+    \__shipout_debug_gset:
+  }
+\cs_new_protected:Npn \shipout_debug_off:
+  {
+    \bool_gset_false:N \g__shipout_debug_bool
+    \__shipout_debug_gset:
+  }
+\cs_new_protected:Npn \__shipout_debug_gset:
+  {
+    \cs_gset_protected:Npx \__shipout_debug:n ##1
+      { \bool_if:NT \g__shipout_debug_bool {##1} }
+  }
+\box_new:N  \l_shipout_box
+\cs_set_eq:NN \ShipoutBox \l_shipout_box
+\cs_set_protected:Npn \__shipout_execute: {
+  \tl_set:Nx \l__shipout_group_level_tl
+     { \int_value:w \tex_currentgrouplevel:D }
+  \tex_afterassignment:D \__shipout_execute_test_level:
+  \tex_setbox:D \l_shipout_box
+}
+\cs_gset_eq:NN \shipout \__shipout_execute:
+\tl_new:N \l__shipout_group_level_tl
+\cs_new:Npn \__shipout_execute_test_level: {
+  \int_compare:nNnT
+     \l__shipout_group_level_tl < \tex_currentgrouplevel:D
+     \tex_aftergroup:D
+  \__shipout_execute_cont:
+}
+\cs_new:Npn \__shipout_execute_cont: {
+  \box_if_empty:NTF \l_shipout_box
+    { \PackageWarning{ltshipout}{Ignoring~ void~ shipout~ box} }
+    {
+      \bool_gset_false:N \g__shipout_discard_bool
+      \cs_set_eq:NN \__shipout_saved_protect: \protect
+      \set at typeset@protect
+      \__shipout_get_box_size:N \l_shipout_box
+      \hook_use:n {shipout/before}
+      \int_gincr:N \g_shipout_totalpages_int
+      \bool_if:NTF \g__shipout_discard_bool
+        { \PackageInfo{ltshipout}{Completed~ page~ discarded}
+          \bool_gset_false:N \g__shipout_discard_bool
+          \tex_deadcycles:D \c_zero_int
+        }
+        { \box_if_empty:NTF \l_shipout_box
+            { \PackageWarning{ltshipout}{
+                Shipout~ box~ was~ voided~ by~ hook,\MessageBreak
+                ignoring~ shipout~ box  }
+            }
+            {
+              \int_gincr:N \g_shipout_readonly_int
+              \__shipout_debug:n {
+                \typeout{Absolute~ page~ =~ \int_use:N \g_shipout_readonly_int
+                         \space (target:~ \@abspage at last)}
+              }
+              \__shipout_get_box_size:N \l_shipout_box
+              \hook_if_empty:nF {shipout/foreground}
+                   { \__shipout_add_foreground_picture:n
+                     { \hook_use:n {shipout/foreground} } }
+              \bool_lazy_and:nnF
+                   { \hook_if_empty_p:n {shipout/background} }
+                   { \tl_if_empty_p:N \@kernel at before@shipout at background }
+                   { \__shipout_add_background_picture:n
+                     { \@kernel at before@shipout at background
+                       \hook_use:n {shipout/background} } }
+              \__shipout_execute_firstpage_hook:
+              \int_compare:nNnT \@abspage at last = \g_shipout_readonly_int
+                { \bool_lazy_and:nnF
+                    { \hook_if_empty_p:n {shipout/lastpage} }
+                    { \tl_if_empty_p:N \@kernel at after@shipout at lastpage }
+                    { \__shipout_debug:n { \typeout{Executing~ lastpage~ hook~
+                          on~ page~ \int_use:N \g_shipout_readonly_int }        }
+                      \__shipout_add_foreground_box:n { \UseHook{shipout/lastpage}
+                                                  \@kernel at after@shipout at lastpage }
+                    }
+                    \bool_gset_true:N \g__shipout_lastpage_handled_bool
+                }
+              \cs_set_eq:NN \protect \exp_not:N
+              \tex_shipout:D \box_use:N \l_shipout_box
+            }
+        }
+      \cs_set_eq:NN \protect \__shipout_saved_protect:
+    }
+}
+\cs_new_eq:NN  \__shipout_saved_protect: \protect
+\hook_new:n{shipout/before}
+\hook_new:n{shipout/foreground}
+\hook_new:n{shipout/background}
+\hook_new:n{shipout/firstpage}
+\hook_new:n{shipout/lastpage}
+\let\@kernel at after@shipout at lastpage\@empty
+\let\@kernel at before@shipout at background\@empty
+\cs_new:Npn \__shipout_execute_firstpage_hook: {
+  \hook_if_empty:nF {shipout/firstpage}
+       { \__shipout_add_background_box:n { \UseHook{shipout/firstpage} } }
+  \cs_gset_eq:NN \__shipout_execute_firstpage_hook: \prg_do_nothing:
+  \cs_gset:Npn \__shipout_add_firstpage_material:Nn ##1 ##2 {
+    \@latex at warning{
+        First~ page~ is~ already~ shipped~ out,~ ignoring\MessageBreak
+        \string##1 }
+  }
+}
+\bool_new:N \g__shipout_lastpage_handled_bool
+\cs_new:Npn \__shipout_add_firstpage_material:Nn #1#2 {
+   \AddToHook{shipout/firstpage}{#2}
+}
+\cs_new:Npn \__shipout_get_box_size:N #1 {
+  \dim_set:Nn \l_shipout_box_ht_dim { \box_ht:N #1 }
+  \dim_set:Nn \l_shipout_box_dp_dim { \box_dp:N #1 }
+  \dim_set:Nn \l_shipout_box_wd_dim { \box_wd:N #1 }
+  \dim_set:Nn \l_shipout_box_ht_plus_dp_dim { \l_shipout_box_ht_dim +
+                                         \l_shipout_box_dp_dim }
+}
+\dim_new:N \l_shipout_box_ht_dim
+\dim_new:N \l_shipout_box_dp_dim
+\dim_new:N \l_shipout_box_wd_dim
+\dim_new:N \l_shipout_box_ht_plus_dp_dim
+\bool_new:N \g__shipout_discard_bool
+\box_new:N \l__shipout_tmp_box
+\tl_new:N  \l__shipout_saved_badness_tl
+\cs_new:Npn \__shipout_add_background_box:n #1
+{ \__shipout_get_box_size:N \l_shipout_box
+  \box_if_vertical:NTF \l_shipout_box
+      {
+        \tl_set:Nx \l__shipout_saved_badness_tl
+           { \vfuzz=\the\vfuzz\relax
+             \vbadness=\the\vbadness\relax }
+        \vfuzz=\c_max_dim
+        \vbadness=\c_max_int
+        \vbox_set_to_ht:Nnn \l_shipout_box \l_shipout_box_ht_plus_dp_dim
+             {
+               \hbox_set:Nn \l__shipout_tmp_box
+                    { \l__shipout_saved_badness_tl #1 }
+               \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
+               \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
+               \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
+               \skip_zero:N \baselineskip
+               \skip_zero:N \lineskip
+               \skip_zero:N \lineskiplimit
+               \box_use:N \l__shipout_tmp_box
+               \vbox_unpack:N \l_shipout_box
+               \kern \c_zero_dim
+             }
+        \box_set_ht:Nn \l_shipout_box \l_shipout_box_ht_dim
+        \box_set_dp:Nn \l_shipout_box \l_shipout_box_dp_dim
+        \l__shipout_saved_badness_tl
+      }
+      {
+        \box_if_horizontal:NT \l_shipout_box
+            {
+              \tl_set:Nx \l__shipout_saved_badness_tl
+                 { \hfuzz=\the\hfuzz\relax
+                   \hbadness=\the\hbadness\relax }
+              \hfuzz=\c_max_dim
+              \hbadness=\c_max_int
+              \hbox_set_to_wd:Nnn \l_shipout_box \l_shipout_box_wd_dim
+                   {
+                     \hbox_set:Nn \l__shipout_tmp_box
+                          { \l__shipout_saved_badness_tl #1 }
+                     \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
+                     \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
+                     \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
+                     \box_move_up:nn
+                         \l_shipout_box_ht_dim
+                         { \box_use:N \l__shipout_tmp_box }
+                     \hbox_unpack:N \l_shipout_box
+                   }
+              \l__shipout_saved_badness_tl
+            }
+      }
+}
+\cs_new:Npn \__shipout_add_foreground_box:n #1
+{
+  \box_if_vertical:NTF \l_shipout_box
+    {
+      \tl_set:Nx \l__shipout_saved_badness_tl
+         { \vfuzz=\the\vfuzz\relax
+           \vbadness=\the\vbadness\relax }
+      \vfuzz=\c_max_dim
+      \vbadness=\c_max_int
+      \vbox_set_to_ht:Nnn \l_shipout_box \l_shipout_box_ht_plus_dp_dim
+           {
+             \hbox_set:Nn \l__shipout_tmp_box
+                  { \l__shipout_saved_badness_tl #1 }
+             \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
+             \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
+             \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
+             \skip_zero:N \baselineskip
+             \skip_zero:N \lineskip
+             \skip_zero:N \lineskiplimit
+             \vbox_unpack:N \l_shipout_box
+             \kern -\l_shipout_box_ht_plus_dp_dim
+             \box_use:N \l__shipout_tmp_box
+             \kern  \l_shipout_box_ht_plus_dp_dim
+           }
+      \l__shipout_saved_badness_tl
+      \box_set_ht:Nn \l_shipout_box \l_shipout_box_ht_dim
+      \box_set_dp:Nn \l_shipout_box \l_shipout_box_dp_dim
+    }
+    {
+      \box_if_horizontal:NT \l_shipout_box
+        {
+          \tl_set:Nx \l__shipout_saved_badness_tl
+            { \hfuzz=\the\hfuzz\relax
+              \hbadness=\the\hbadness\relax }
+          \hfuzz=\c_max_dim
+          \hbadness=\c_max_int
+          \hbox_set_to_wd:Nnn \l_shipout_box \l_shipout_box_wd_dim
+               {
+                 \hbox_unpack:N \l_shipout_box
+                 \kern -\box_wd:N \l_shipout_box
+                 \hbox_set:Nn \l__shipout_tmp_box
+                     { \l__shipout_saved_badness_tl #1 }
+                 \box_set_wd:Nn \l__shipout_tmp_box \c_zero_dim
+                 \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
+                 \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
+                 \box_move_up:nn { \box_ht:N \l_shipout_box }
+                               { \box_use:N \l__shipout_tmp_box }
+                 \kern \box_wd:N \l_shipout_box
+               }%
+               \l__shipout_saved_badness_tl
+        }
+    }
+}
+\cs_new:Npn \__shipout_init_page_origins: {
+  \tl_const:Nx \c__shipout_horigin_tl
+     {
+       \cs_if_exist_use:NTF \pdfvariable { horigin }
+          { \cs_if_exist_use:NF \pdfhorigin { 1in } }
+     }
+  \tl_const:Nx \c__shipout_vorigin_tl
+     {
+       \cs_if_exist_use:NTF \pdfvariable { vorigin }
+          { \cs_if_exist_use:NF \pdfvorigin { 1in } }
+     }
+  \cs_gset_eq:NN \__shipout_init_page_origins: \prg_do_nothing:
+}
+\cs_new:Npn \__shipout_picture_overlay:n #1 {
+    \__shipout_init_page_origins:
+    \kern -\c__shipout_horigin_tl \scan_stop:
+    \vbox_to_zero:n {
+      \kern -\c__shipout_vorigin_tl \scan_stop:
+      \unitlength 1pt \scan_stop:
+      \hbox_set_to_wd:Nnn \l__shipout_tmp_box \c_zero_dim
+                          { \ignorespaces #1 \hss }
+      \box_set_ht:Nn \l__shipout_tmp_box \c_zero_dim
+      \box_set_dp:Nn \l__shipout_tmp_box \c_zero_dim
+      \box_use:N \l__shipout_tmp_box
+      \tex_vss:D
+    }
+}
+\cs_new:Npn \__shipout_add_background_picture:n #1 {
+   \__shipout_add_background_box:n { \__shipout_picture_overlay:n {#1} }
+}
+\cs_new:Npn \__shipout_add_foreground_picture:n #1 {
+   \__shipout_add_foreground_box:n { \__shipout_picture_overlay:n {#1} }
+}
+\cs_new_protected:Npn \shipout_discard: {
+  \bool_gset_true:N \g__shipout_discard_bool
+}
+\int_new:N \g_shipout_readonly_int
+\cs_new_eq:NN \ReadonlyShipoutCounter  \g_shipout_readonly_int
+\int_new:N \g_shipout_totalpages_int
+\cs_new_eq:NN \c at totalpages \g_shipout_totalpages_int
+\cs_new:Npn \thetotalpages { \arabic{totalpages} }
+\xdef\@abspage at last{\number\maxdimen}
+\g at addto@macro \@kernel at after@enddocument {
+  \int_compare:nNnT \@abspage at last = \maxdimen
+    {
+      \xdef\@abspage at last{ \int_eval:n {\g_shipout_readonly_int + 1} }
+    }
+}
+\g at addto@macro \@kernel at after@enddocument at afterlastpage {
+  \int_compare:nNnF \g_shipout_readonly_int = 0
+    {
+     \if at filesw
+        \iow_now:Nx \@auxout {
+          \gdef\string\@abspage at last {\int_use:N \g_shipout_readonly_int}}
+     \fi
+      \bool_if:NF \g__shipout_lastpage_handled_bool
+         {
+          \bool_lazy_and:nnF
+            { \hook_if_empty_p:n {shipout/lastpage} }
+            { \tl_if_empty_p:N \@kernel at after@shipout at lastpage }
+            {
+              \tex_shipout:D\vbox to\textheight
+                {
+                  \hbox:n { \UseHook{shipout/lastpage}
+                            \@kernel at after@shipout at lastpage }
+                  \__shipout_excuse_extra_page:
+                  \null
+                }
+              \cs_gset_eq:NN \@extra at page@added \relax
+            }
+         }
+     }
+}
+\cs_new:Npn \__shipout_excuse_extra_page: {
+  \vfil
+  \begin{center}
+    \bfseries Temporary~ page!
+  \end{center}
+    \LaTeX{}~ was~ unable~ to~ guess~ the~ total~ number~ of~ pages~
+    correctly.~ ~ As~ there~ was~ some~ unprocessed~ data~ that~
+    should~ have~ been~ added~ to~ the~ final~ page~ this~ extra~
+    page~ has~ been~ added~ to~ receive~ it.
+    \par
+    If~ you~ rerun~ the~ document~ (without~ altering~ it)~ this~
+    surplus~ page~ will~ go~ away,~ because~ \LaTeX{}~ now~ knows~
+    how~ many~ pages~ to~ expect~ for~ this~ document.
+  \vfil
+}
+\def\PreviousTotalPages{0}
+\g at addto@macro\@kernel at before@begindocument
+  {\ifnum\@abspage at last<\maxdimen
+     \xdef\PreviousTotalPages{\@abspage at last}\fi}
+\cs_new_eq:NN \DiscardShipoutBox \shipout_discard:
+\cs_set_protected:Npn \AtBeginDvi {\__shipout_add_firstpage_material:Nn \AtBeginDvi}
+\cs_new_eq:NN \DebugShipoutsOn  \shipout_debug_on:
+\cs_new_eq:NN \DebugShipoutsOff \shipout_debug_off:
+\cs_set_eq:NN \@expl@@@shipout at add@firstpage at material@@Nn
+              \__shipout_add_firstpage_material:Nn
+\cs_set_eq:NN \@expl@@@shipout at add@background at box@@n
+              \__shipout_add_background_box:n
+\cs_set_eq:NN \@expl@@@shipout at add@foreground at box@@n
+              \__shipout_add_foreground_box:n
+\cs_set_eq:NN \@expl@@@shipout at add@background at picture@@n
+              \__shipout_add_background_picture:n
+\cs_set_eq:NN \@expl@@@shipout at add@foreground at picture@@n
+              \__shipout_add_foreground_picture:n
+\ExplSyntaxOff
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\shipout}{Hook management (shipout)}%
+
+\ifcsname tex_shipout:D\endcsname
+\expandafter\let\expandafter\shipout
+                \csname tex_shipout:D\endcsname
 \fi
-%%% From File: ltexpl.dtx
+
+\let \ShipoutBox\@undefined
+\let \ReadonlyShipoutCounter \@undefined
+\let \c at totalpages \@undefined
+\let \thetotalpages \@undefined
+
+\let \DiscardShipoutBox \@undefined
+\let \DebugShipoutsOn \@undefined
+\let \DebugShipoutsOff \@undefined
+
+\DeclareRobustCommand \AtBeginDvi [1]{%
+  \global \setbox \@begindvibox
+    \vbox{\unvbox \@begindvibox #1}%
+}
+
+\let \AtBeginShipout \@undefined
+\let \AtBeginShipoutNext \@undefined
+
+\let \AtBeginShipoutFirst \@undefined
+
+\let \ShipoutBoxHeight \@undefined
+\let \ShipoutBoxDepth \@undefined
+\let \ShipoutBoxWidth \@undefined
+
+\let \AtBeginShipoutDiscard \@undefined
+
+\let \AtBeginShipoutAddToBox \@undefined
+\let \AtBeginShipoutAddToBoxForeground \@undefined
+\let \AtBeginShipoutUpperLeft \@undefined
+\let \AtBeginShipoutUpperLeftForeground \@undefined
+
+
+\let  \AtEndDvi \@undefined
+
+\EndIncludeInRelease
 \IncludeInRelease{2020/10/01}%
-                 {expl3}{Pre-load expl3}%
-\expandafter\ifx\csname tex\string _let:D\endcsname\relax
-  \expandafter\@firstofone
-\else
-  \GenericInfo{}{Skipping: expl3 code already part of the format}%
-  \expandafter\@gobble
+                 {\AtEndDvi}{atenddvi emulation}%
+\ExplSyntaxOn
+\cs_new_protected:Npn \AtEndDvi {\AddToHook{shipout/lastpage}}
+\ExplSyntaxOff
+\disable at package@load{atenddvi}
+   {\PackageWarning{atenddvi}
+     {Functionality of this package is already\MessageBreak
+      provided by LaTeX.\MessageBreak\MessageBreak
+      It is there no longer necessary to load it\MessageBreak
+      and you can safely remove it.\MessageBreak
+      Found on}}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\AtEndDvi}{atenddvi emulation}%
+\let \AtEndDvi \@undefined
+\EndIncludeInRelease
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% From File: ltoutput.dtx
+\IncludeInRelease{2015/10/01}%
+                 {\bx at ZZ}{Extended float list}%
+\let\@elt\newinsert
+\ifx\numexpr\@undefined\else
+\def\reserved at a{%
+  \@elt\bx at S\@elt\bx at T\@elt\bx at U\@elt\bx at V
+  \@elt\bx at W\@elt\bx at X\@elt\bx at Y\@elt\bx at Z
+  \@elt\bx at AA\@elt\bx at BB\@elt\bx at CC\@elt\bx at DD\@elt\bx at EE
+  \@elt\bx at FF\@elt\bx at GG\@elt\bx at HH\@elt\bx at II\@elt\bx at JJ
+  \@elt\bx at KK\@elt\bx at LL\@elt\bx at MM\@elt\bx at NN
+  \@elt\bx at OO\@elt\bx at PP\@elt\bx at QQ\@elt\bx at RR
+  \@elt\bx at SS\@elt\bx at TT\@elt\bx at UU\@elt\bx at VV
+  \@elt\bx at WW\@elt\bx at XX\@elt\bx at YY\@elt\bx at ZZ}
+\reserved at a
+\def\@elt{\noexpand\@elt\noexpand}
+\edef\@freelist{\@freelist\reserved at a}
 \fi
-  {%
-    \IfFileExists{expl3.ltx}
-      {%
-        \ifnum0%
-          \ifdefined\pdffilesize 1\fi
-          \ifdefined\filesize 1\fi
-          \ifdefined\luatexversion\ifnum\luatexversion>94 1\fi\fi
-          \ifdefined\kanjiskip 1\fi
-            >0 %
-          \expandafter\@firstofone
-        \else
-          \@latex at error{%
-            LaTeX requires the e-TeX primitives and additional\MessageBreak
-            functionality available in the engines:\MessageBreak
-              - pdfTeX v1.40\MessageBreak
-              - XeTeX v0.99992\MessageBreak
-              - LuaTeX v0.95\MessageBreak
-              - e-(u)pTeX mid-2012\MessageBreak
-            or later%
-          }\@ehd \expandafter\@gobble
-        \fi
-      }
-      {%
-        \@latex at error{LaTeX requires expl3}\@ehd
-        \@gobble
-      }%
-      {%
-        \input expl3.ltx
-        \ifdefined\NewDocumentCommand
-        \else
-          \IfFileExists{xparse.ltx}
-            {\input xparse.ltx }
-            {}%
+\let\reserved at a\relax
+\let\@elt\relax
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\bx at ZZ}{Extended float list}%
+\def\@freelist{%
+  \@elt\bx at A\@elt\bx at B\@elt\bx at C\@elt\bx at D\@elt\bx at E
+  \@elt\bx at F\@elt\bx at G\@elt\bx at H\@elt\bx at I\@elt\bx at J
+  \@elt\bx at K\@elt\bx at L\@elt\bx at M\@elt\bx at N
+  \@elt\bx at O\@elt\bx at P\@elt\bx at Q\@elt\bx at R}
+  \insc at unt=234
+\EndIncludeInRelease
+\IncludeInRelease{2017/04/15}%
+                 {\newpage}{Check depth of page}%
+\def \newpage {%
+  \if at noskipsec
+    \ifx \@nodocument\relax
+      \leavevmode
+      \global \@noskipsecfalse
+    \fi
+  \fi
+  \if at inlabel
+    \leavevmode
+    \global \@inlabelfalse
+  \fi
+  \if at nobreak \@nobreakfalse \everypar{}\fi
+  \par
+  \ifdim\prevdepth>\z@
+     \vskip -%
+       \ifdim\prevdepth>\maxdepth
+         \maxdepth
+       \else
+         \prevdepth
+       \fi
+  \fi
+  \vfil
+  \penalty -\@M}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\newpage}{Check depth of page}%
+\def \newpage {%
+  \if at noskipsec
+    \ifx \@nodocument\relax
+      \leavevmode
+      \global \@noskipsecfalse
+    \fi
+  \fi
+  \if at inlabel
+    \leavevmode
+    \global \@inlabelfalse
+  \fi
+  \if at nobreak \@nobreakfalse \everypar{}\fi
+  \par
+  \vfil
+  \penalty -\@M}
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+                 {\@testwrongwidth}{float order in 2-column}%
+\def\@testwrongwidth #1{%
+  \ifdim\dp#1=\f at depth
+  \else
+    \global\@testtrue
+  \fi}%
+\let\f at depth\z@
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\@testwrongwidth}{float order in 2-column}%
+\let\@testwrongwidth\@undefined
+\let\f at depth\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}{\@doclearpage}%
+                             {float order in 2-column}%
+\def \@doclearpage {%
+     \ifvoid\footins
+       \ifvbox\@kludgeins
+         {\setbox \@tempboxa \box \@kludgeins}%
+       \fi
+       \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa
+       \setbox\@tempboxa\box\@cclv
+       \xdef\@deferlist{\@toplist\@botlist\@deferlist}%
+       \global \let \@toplist \@empty
+       \global \let \@botlist \@empty
+       \global \@colroom \@colht
+       \ifx \@currlist\@empty
+       \else
+          \@latexerr{Float(s) lost}\@ehb
+          \global \let \@currlist \@empty
+       \fi
+       \@makefcolumn\@deferlist
+       \@whilesw\if at fcolmade \fi{\@opcol\@makefcolumn\@deferlist}%
+       \if at twocolumn
+         \if at firstcolumn
+           \xdef\@deferlist{\@dbltoplist\@deferlist}%
+           \global \let \@dbltoplist \@empty
+           \global \@colht \textheight
+           \begingroup
+              \@dblfloatplacement
+              \@makefcolumn\@deferlist
+              \@whilesw\if at fcolmade \fi{\@outputpage
+                                        \@makefcolumn\@deferlist}%
+           \endgroup
+         \else
+           \vbox{}\clearpage
          \fi
+       \fi
+       \ifx\@deferlist\@empty \else\clearpage \fi
+     \else
+       \setbox\@cclv\vbox{\box\@cclv\vfil}%
+       \@makecol\@opcol
+       \clearpage
+     \fi
+}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}{\@doclearpage}%
+                             {float order in 2-column}%
+\def \@doclearpage {%
+     \ifvoid\footins
+       \ifvbox\@kludgeins
+         {\setbox \@tempboxa \box \@kludgeins}%
+       \fi
+       \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa
+       \setbox\@tempboxa\box\@cclv
+       \xdef\@deferlist{\@toplist\@botlist\@deferlist}%
+       \global \let \@toplist \@empty
+       \global \let \@botlist \@empty
+       \global \@colroom \@colht
+       \ifx \@currlist\@empty
+       \else
+          \@latexerr{Float(s) lost}\@ehb
+          \global \let \@currlist \@empty
+       \fi
+       \@makefcolumn\@deferlist
+       \@whilesw\if at fcolmade \fi
+                     {\@opcol\@makefcolumn\@deferlist}%
+       \if at twocolumn
+         \if at firstcolumn
+           \xdef\@dbldeferlist{\@dbltoplist\@dbldeferlist}%
+           \global \let \@dbltoplist \@empty
+           \global \@colht \textheight
+           \begingroup
+              \@dblfloatplacement
+              \@makefcolumn\@dbldeferlist
+              \@whilesw\if at fcolmade \fi
+                    {\@outputpage\@makefcolumn\@dbldeferlist}%
+           \endgroup
+         \else
+           \vbox{}\clearpage
+         \fi
+       \fi
+     \else
+       \setbox\@cclv\vbox{\box\@cclv\vfil}%
+       \@makecol\@opcol
+       \clearpage
+     \fi
+  }%
+\EndIncludeInRelease
+\IncludeInRelease{2017/04/15}%
+  {\@outputpage}{Reset language for hyphenation}%
+\def\@outputpage{%
+\begingroup
+  \let \protect \noexpand
+  \language\document at default@language
+  \@resetactivechars
+  \global\let\@@if at newlist\if at newlist
+  \global\@newlistfalse
+  \@parboxrestore
+  \shipout \vbox{%
+    \set at typeset@protect
+    \aftergroup \endgroup
+    \aftergroup \set at typeset@protect
+  \if at specialpage
+    \global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
+  \fi
+  \if at twoside
+    \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+         \let\@themargin\oddsidemargin
+    \else \let\@thehead\@evenhead
+       \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
+    \fi
+  \fi
+  \reset at font
+  \normalsize
+  \normalsfcodes
+  \let\label\@gobble
+  \let\index\@gobble
+  \let\glossary\@gobble
+  \baselineskip\z at skip \lineskip\z at skip \lineskiplimit\z@
+    \@begindvi
+    \vskip \topmargin
+    \moveright\@themargin \vbox {%
+      \setbox\@tempboxa \vbox to\headheight{%
+        \vfil
+        \color at hbox
+          \normalcolor
+          \hb at xt@\textwidth{\@thehead}%
+        \color at endbox
+        }%
+      \dp\@tempboxa \z@
+      \box\@tempboxa
+      \vskip \headsep
+      \box\@outputbox
+      \baselineskip \footskip
+      \color at hbox
+        \normalcolor
+        \hb at xt@\textwidth{\@thefoot}%
+      \color at endbox
       }%
-  }
+    }%
+  \global\let\if at newlist\@@if at newlist
+  \global \@colht \textheight
+  \stepcounter{page}%
+  \let\firstmark\botmark
+}
 \EndIncludeInRelease
-
-\IncludeInRelease{2020/02/02}%
-                 {expl3}{Pre-load expl3}%
-\IfFileExists{expl3.ltx}
-  {%
-    \ifnum0%
-      \ifdefined\pdffilesize 1\fi
-      \ifdefined\filesize 1\fi
-      \ifdefined\luatexversion\ifnum\luatexversion>94 1\fi\fi
-      >0 %
-    \else
-      \message{Skipping expl3-dependent extensions}
-      \expandafter\@gobbletwo
+\IncludeInRelease{0000/00/00}%
+  {\@outputpage}{Reset language for hyphenation}%
+\def\@outputpage{%
+\begingroup
+  \let \protect \noexpand
+  \@resetactivechars
+  \global\let\@@if at newlist\if at newlist
+  \global\@newlistfalse
+  \@parboxrestore
+  \shipout \vbox{%
+    \set at typeset@protect
+    \aftergroup \endgroup
+    \aftergroup \set at typeset@protect
+  \if at specialpage
+    \global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
+  \fi
+  \if at twoside
+    \ifodd\count\z@
+         \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+         \let\@themargin\oddsidemargin
+    \else \let\@thehead\@evenhead
+       \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
     \fi
-  }
-  {%
-    \message{Skipping expl3-dependent extensions}%
-    \@gobbletwo
+  \fi
+  \reset at font
+  \normalsize
+  \normalsfcodes
+  \let\label\@gobble
+  \let\index\@gobble
+  \let\glossary\@gobble
+  \baselineskip\z at skip \lineskip\z at skip \lineskiplimit\z@
+    \@begindvi
+    \vskip \topmargin
+    \moveright\@themargin \vbox {%
+      \setbox\@tempboxa \vbox to\headheight{%
+        \vfil
+        \color at hbox
+          \normalcolor
+          \hb at xt@\textwidth{\@thehead}%
+        \color at endbox
+        }%
+      \dp\@tempboxa \z@
+      \box\@tempboxa
+      \vskip \headsep
+      \box\@outputbox
+      \baselineskip \footskip
+      \color at hbox
+        \normalcolor
+        \hb at xt@\textwidth{\@thefoot}%
+      \color at endbox
+      }%
+    }%
+  \global\let\if at newlist\@@if at newlist
+  \global \@colht \textheight
+  \stepcounter{page}%
+  \let\firstmark\botmark
+}
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+  {\@startdblcolumn}{float order in 2-column}%
+\def \@startdblcolumn {%
+  \@tryfcolumn \@deferlist
+  \if at fcolmade
+  \else
+    \begingroup
+      \let \reserved at b \@deferlist
+      \global \let \@deferlist \@empty
+      \let \@elt \@sdblcolelt
+      \reserved at b
+    \endgroup
+  \fi
+}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+  {\@startdblcolumn}{float order in 2-column}%
+\def \@startdblcolumn {%
+% \global \@colht \textheight
+  \@tryfcolumn \@dbldeferlist
+  \if at fcolmade
+  \else
+    \begingroup
+      \let \reserved at b \@dbldeferlist
+      \global \let \@dbldeferlist \@empty
+      \let \@elt \@sdblcolelt
+      \reserved at b
+    \endgroup
+  \fi
+}%
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}{\@xtryfc}%
+                             {float order in 2-column}%
+\def\@xtryfc #1{%
+  \@next\reserved at a\@trylist{}{}%
+  \@currtype \count #1%
+  \divide\@currtype\@xxxii
+  \multiply\@currtype\@xxxii
+  \@bitor \@currtype \@failedlist
+  \@testfp #1%
+  \@testwrongwidth #1%
+  \ifdim \ht #1>\@colht
+     \@testtrue
+  \fi
+  \if at test
+    \@cons\@failedlist #1%
+  \else
+    \@ytryfc #1%
+  \fi}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}{\@xtryfc}%
+                             {float order in 2-column}%
+\def\@xtryfc #1{%
+  \@next\reserved at a\@trylist{}{}%
+  \@currtype \count #1%
+  \divide\@currtype\@xxxii
+  \multiply\@currtype\@xxxii
+  \@bitor \@currtype \@failedlist
+  \@testfp #1%
+  \ifdim \ht #1>\@colht
+    \@testtrue
+  \fi
+  \if at test
+    \@cons\@failedlist #1%
+  \else
+    \@ytryfc #1%
+  \fi}%
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}{@ztryfc}%
+                             {float order in 2-column}%
+\def\@ztryfc #1{%
+  \@tempcnta\count #1%
+  \divide\@tempcnta\@xxxii
+  \multiply\@tempcnta\@xxxii
+  \@bitor \@tempcnta {\@failedlist \@flfail}%
+  \@testfp #1%
+  \@testwrongwidth #1%
+  \@tempdimb\@tempdima
+  \advance\@tempdimb\ht #1%
+  \advance\@tempdimb\@fpsep
+  \ifdim \@tempdimb >\@colht
+    \@testtrue
+  \fi
+  \if at test
+    \@cons\@flfail #1%
+  \else
+    \@cons\@flsucceed #1%
+    \@tempdima\@tempdimb
+  \fi}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}{@ztryfc}%
+                             {float order in 2-column}%
+\def\@ztryfc #1{%
+  \@tempcnta \count#1%
+  \divide\@tempcnta\@xxxii
+  \multiply\@tempcnta\@xxxii
+  \@bitor \@tempcnta {\@failedlist \@flfail}%
+  \@testfp #1%
+  \@tempdimb\@tempdima
+  \advance\@tempdimb \ht#1%
+  \advance\@tempdimb\@fpsep
+  \ifdim \@tempdimb >\@colht
+    \@testtrue
+  \fi
+  \if at test
+    \@cons\@flfail #1%
+  \else
+    \@cons\@flsucceed #1%
+    \@tempdima\@tempdimb
+  \fi}%
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+  {\@addtocurcol}{float order in 2-column}%
+\def \@addtocurcol {%
+   \@insertfalse
+   \@setfloattypecounts
+   \ifnum \@fpstype=8
+   \else
+     \ifnum \@fpstype=24
+     \else
+       \@flsettextmin
+       \advance \@textmin \@textfloatsheight
+       \@reqcolroom \@pageht
+       \ifdim \@textmin>\@reqcolroom
+         \@reqcolroom \@textmin
+       \fi
+       \advance \@reqcolroom \ht\@currbox
+       \ifdim \@colroom>\@reqcolroom
+         \@flsetnum \@colnum
+         \ifnum \@colnum>\z@
+           \@bitor\@currtype\@deferlist
+          \@testwrongwidth\@currbox
+           \if at test
+           \else
+             \@bitor\@currtype\@botlist
+             \if at test
+               \@addtobot
+             \else
+               \ifodd \count\@currbox
+                 \advance \@reqcolroom \intextsep
+                 \ifdim \@colroom>\@reqcolroom
+                   \global \advance \@colnum \m at ne
+                   \global \advance \@textfloatsheight \ht\@currbox
+                   \global \advance \@textfloatsheight 2\intextsep
+                   \@cons \@midlist \@currbox
+                   \if at nobreak
+                     \nobreak
+                     \@nobreakfalse
+                     \everypar{}%
+                   \else
+                     \addpenalty \interlinepenalty
+                   \fi
+                   \vskip \intextsep
+                   \box\@currbox
+                   \penalty\interlinepenalty
+                   \vskip\intextsep
+                   \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi
+                   \outputpenalty \z@
+                   \@inserttrue
+                 \fi
+               \fi
+               \if at insert
+               \else
+                 \@addtotoporbot
+               \fi
+             \fi
+           \fi
+         \fi
+       \fi
+     \fi
+   \fi
+   \if at insert
+   \else
+     \@resethfps
+     \@cons\@deferlist\@currbox
+   \fi
+}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+  {\@addtocurcol}{float order in 2-column}%
+\def \@addtocurcol {%
+   \@insertfalse
+   \@setfloattypecounts
+   \ifnum \@fpstype=8
+   \else
+     \ifnum \@fpstype=24
+     \else
+       \@flsettextmin
+       \advance \@textmin \@textfloatsheight
+       \@reqcolroom \@pageht
+       \ifdim \@textmin>\@reqcolroom
+         \@reqcolroom \@textmin
+       \fi
+       \advance \@reqcolroom \ht\@currbox
+       \ifdim \@colroom>\@reqcolroom
+         \@flsetnum \@colnum
+         \ifnum \@colnum>\z@
+           \@bitor\@currtype\@deferlist
+           \if at test
+           \else
+             \@bitor\@currtype\@botlist
+             \if at test
+               \@addtobot
+             \else
+               \ifodd \count\@currbox
+                 \advance \@reqcolroom \intextsep
+                 \ifdim \@colroom>\@reqcolroom
+                  \global \advance \@colnum \m at ne
+                  \global \advance
+                   \@textfloatsheight\ht\@currbox
+                  \global \advance
+                   \@textfloatsheight 2\intextsep
+                   \@cons \@midlist \@currbox
+                   \if at nobreak
+                     \nobreak
+                     \@nobreakfalse
+                     \everypar{}%
+                   \else
+                     \addpenalty\interlinepenalty
+                   \fi
+                   \vskip \intextsep
+                   \box\@currbox
+                   \penalty\interlinepenalty
+                   \vskip\intextsep
+                   \ifnum\outputpenalty
+                               <-\@Mii \vskip
+                        -\parskip\fi
+                   \outputpenalty \z@
+                   \@inserttrue
+                 \fi
+               \fi
+               \if at insert
+               \else
+                 \@addtobot
+               \fi
+             \fi
+           \fi
+         \fi
+       \fi
+     \fi
+   \fi
+   \if at insert
+   \else
+     \@resethfps
+     \@cons\@deferlist\@currbox
+   \fi
   }%
-\input{expl3.ltx}
 \EndIncludeInRelease
-\ExplSyntaxOn
-\IncludeInRelease{2020/10/01}{expl3~2020-10-01}%
-        {expl3~macros~added~for~the~2020-10-01~release}%
-\cs_gset_eq:NN \@expl at cs@to at str@@N \cs_to_str:N
-\cs_gset_eq:NN \@expl at str@if at eq@@nnTF \str_if_eq:nnTF
-\cs_gset_eq:NN \@expl at cs@prefix at spec@@N \cs_prefix_spec:N
-\cs_gset_eq:NN \@expl at cs@argument at spec@@N \cs_argument_spec:N
-\cs_gset_eq:NN \@expl at cs@replacement at spec@@N \cs_replacement_spec:N
-\cs_gset_eq:NN \@expl at str@map at function@@NN \str_map_function:NN
-\cs_gset_eq:NN \@expl at char@generate@@nn \char_generate:nn
+\IncludeInRelease{2015/01/01}
+  {\@addtonextcol}{float order in 2-column}%
+\def\@addtonextcol{%
+  \begingroup
+   \@insertfalse
+   \@setfloattypecounts
+   \ifnum \@fpstype=8
+   \else
+     \ifnum \@fpstype=24
+     \else
+       \@flsettextmin
+       \@reqcolroom \ht\@currbox
+       \advance \@reqcolroom \@textmin
+       \ifdim \@colroom>\@reqcolroom
+         \@flsetnum \@colnum
+         \ifnum\@colnum>\z@
+            \@bitor\@currtype\@deferlist
+            \@testwrongwidth\@currbox
+            \if at test
+            \else
+              \@addtotoporbot
+            \fi
+         \fi
+       \fi
+     \fi
+   \fi
+   \if at insert
+   \else
+     \@cons\@deferlist\@currbox
+   \fi
+  \endgroup
+}%
 \EndIncludeInRelease
-\IncludeInRelease{0000/00/00}{expl3~2020-10-01}%
-        {expl3~macros~added~for~the~2020-10-01~release}%
-\cs_undefine:N \@expl at cs@to at str@@N
-\cs_undefine:N \@expl at str@if at eq@@nnTF
-\cs_undefine:N \@expl at cs@prefix at spec@@N
-\cs_undefine:N \@expl at cs@argument at spec@@N
-\cs_undefine:N \@expl at cs@replacement at spec@@N
-\cs_undefine:N \@expl at str@map at function@@NN
+\IncludeInRelease{0000/00/00}%
+  {\@addtonextcol}{float order in 2-column}%
+\def\@addtonextcol{%
+  \begingroup
+   \@insertfalse
+   \@setfloattypecounts
+   \ifnum \@fpstype=8
+   \else
+     \ifnum \@fpstype=24
+     \else
+       \@flsettextmin
+       \@reqcolroom \ht\@currbox
+       \advance \@reqcolroom \@textmin
+       \ifdim \@colroom>\@reqcolroom
+         \@flsetnum \@colnum
+         \ifnum\@colnum>\z@
+            \@bitor\@currtype\@deferlist
+            \if at test
+            \else
+              \@addtotoporbot
+            \fi
+         \fi
+       \fi
+     \fi
+   \fi
+   \if at insert
+   \else
+     \@cons\@deferlist\@currbox
+   \fi
+  \endgroup
+}%
 \EndIncludeInRelease
-\ExplSyntaxOff
+\IncludeInRelease{2015/01/01}%
+  {\@addtodblcol}{float order in 2-column}%
+\def\@addtodblcol{%
+  \begingroup
+   \@insertfalse
+   \@setfloattypecounts
+   \@getfpsbit \tw@
+   \ifodd\@tempcnta
+     \@flsetnum \@dbltopnum
+     \ifnum \@dbltopnum>\z@
+       \@tempswafalse
+       \ifdim \@dbltoproom>\ht\@currbox
+         \@tempswatrue
+       \else
+         \ifnum \@fpstype<\sixt@@n
+           \advance \@dbltoproom \@textmin
+           \ifdim \@dbltoproom>\ht\@currbox
+             \@tempswatrue
+           \fi
+           \advance \@dbltoproom -\@textmin
+         \fi
+       \fi
+       \if at tempswa
+           \@bitor \@currtype \@deferlist
+          \@testwrongwidth\@currbox
+           \if at test
+           \else
+              \@tempdima -\ht\@currbox
+              \advance\@tempdima
+                -\ifx \@dbltoplist\@empty \dbltextfloatsep \else
+                                          \dblfloatsep \fi
+              \global \advance \@dbltoproom \@tempdima
+              \global \advance \@colht \@tempdima
+              \global \advance \@dbltopnum \m at ne
+              \@cons \@dbltoplist \@currbox
+              \@inserttrue
+           \fi
+       \fi
+     \fi
+   \fi
+   \if at insert
+   \else
+     \@cons\@deferlist\@currbox
+   \fi
+  \endgroup
+}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+  {\@addtodblcol}{float order in 2-column}%
+\def\@addtodblcol{%
+  \begingroup
+   \@insertfalse
+   \@setfloattypecounts
+   \@getfpsbit \tw@
+   \ifodd\@tempcnta
+     \@flsetnum \@dbltopnum
+     \ifnum \@dbltopnum>\z@
+       \@tempswafalse
+       \ifdim \@dbltoproom>\ht\@currbox
+         \@tempswatrue
+       \else
+         \ifnum \@fpstype<\sixt@@n
+           \advance \@dbltoproom \@textmin
+           \ifdim \@dbltoproom>\ht\@currbox
+             \@tempswatrue
+           \fi
+           \advance \@dbltoproom -\@textmin
+         \fi
+       \fi
+       \if at tempswa
+           \@bitor \@currtype \@dbldeferlist
+           \if at test
+           \else
+              \@tempdima -\ht\@currbox
+              \advance\@tempdima
+                -\ifx \@dbltoplist\@empty
+                      \dbltextfloatsep
+                 \else \dblfloatsep \fi
+              \global \advance \@dbltoproom \@tempdima
+              \global \advance \@colht \@tempdima
+              \global \advance \@dbltopnum \m at ne
+              \@cons \@dbltoplist \@currbox
+              \@inserttrue
+           \fi
+       \fi
+     \fi
+   \fi
+   \if at insert
+   \else
+     \@cons\@dbldeferlist\@currbox
+   \fi
+  \endgroup
+}%
+\EndIncludeInRelease
+\IncludeInRelease{2017/01/01}%
+  {\@makefcolumn}{negative height floats}%
+\def\@makefcolumn #1{%
+  \begingroup
+    \@fpmin -\maxdimen
+    \let \@testfp \@gobble
+    \@tryfcolumn #1%
+  \endgroup
+}
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+  {\@makefcolumn}{negative height floats}%
+\def\@makefcolumn #1{%
+  \begingroup
+    \@fpmin \z@
+    \let \@testfp \@gobble
+    \@tryfcolumn #1%
+  \endgroup
+}
+\EndIncludeInRelease
+\IncludeInRelease{2015/01/01}%
+  {\@outputdblcol}{2 column marks}%
+\def\@outputdblcol{%
+  \if at firstcolumn
+    \global\@firstcolumnfalse
+    \global\setbox\@leftcolumn\copy\@outputbox
+    \splitmaxdepth\maxdimen
+    \vbadness\maxdimen
+     \setbox\@outputbox\vbox{\unvbox\@outputbox\unskip}%
+     \setbox\@outputbox\vsplit\@outputbox to\maxdimen
+    \toks@\expandafter{\topmark}%
+    \xdef\@firstcoltopmark{\the\toks@}%
+    \toks@\expandafter{\splitfirstmark}%
+    \xdef\@firstcolfirstmark{\the\toks@}%
+    \ifx\@firstcolfirstmark\@empty
+      \global\let\@setmarks\relax
+    \else
+      \gdef\@setmarks{%
+        \let\firstmark\@firstcolfirstmark
+        \let\topmark\@firstcoltopmark}%
+    \fi
+  \else
+    \global\@firstcolumntrue
+    \setbox\@outputbox\vbox{%
+     \hb at xt@\textwidth{%
+        \hb at xt@\columnwidth{\box\@leftcolumn \hss}%
+        \hfil
+        {\normalcolor\vrule \@width\columnseprule}%
+        \hfil
+       \hb at xt@\columnwidth{\box\@outputbox \hss}}}%
+  \@combinedblfloats
+    \@setmarks
+    \@outputpage
+    \begingroup
+      \@dblfloatplacement
+      \@startdblcolumn
+      \@whilesw\if at fcolmade \fi{\@outputpage
+     \@startdblcolumn}%
+    \endgroup
+  \fi}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+  {\@outputdblcol}{2 column marks}%
+\def\@outputdblcol{%
+  \if at firstcolumn
+    \global \@firstcolumnfalse
+    \global \setbox\@leftcolumn \box\@outputbox
+  \else
+    \global \@firstcolumntrue
+    \setbox\@outputbox \vbox {%
+                         \hb at xt@\textwidth {%
+                           \hb at xt@\columnwidth {%
+                             \box\@leftcolumn \hss}%
+                           \hfil
+                           {\normalcolor\vrule
+                               \@width\columnseprule}%
+                           \hfil
+                           \hb at xt@\columnwidth {%
+                             \box\@outputbox \hss}%
+                                             }%
+                              }%
+    \@combinedblfloats
+    \@outputpage
+    \begingroup
+      \@dblfloatplacement
+      \@startdblcolumn
+      \@whilesw\if at fcolmade \fi
+        {\@outputpage
+         \@startdblcolumn}%
+    \endgroup
+  \fi
+}%
+\EndIncludeInRelease
+%%% From File: ltfsscmp.dtx
+%% Copyright (C) 1989-1995 Frank Mittelbach and Rainer Sch\"opf,
+%% all rights reserved.
+\IncludeInRelease{2015/01/01}{\new at fontshape}%
+                             {NFSS version1 commands}%
+\let\new at fontshape\@undefined
+\let\warn at rel@i\@undefined
+\let\scan at fontshape\@undefined
+\let\scan@@fontshape\@undefined
+\let\subst at fontshape\@undefined
+\let\extra at def\@undefined
+\let\default at mextra\@undefined
+\let\preload at sizes\@undefined
+\let\err at rel@i\@undefined
+\let\newmathalphabet\@undefined
+\let\newmathalphabet@\@undefined
+\let\newmathalphabet@@@\@undefined
+\let\if at no@font at opt\@undefined
+\let\@no at font@optfalse\@undefined
+\let\define at mathalphabet\@undefined
+\let\define at mathgroup\@undefined
+\let\addtoversion\@undefined
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}{\new at fontshape}%
+                             {NFSS version1 commands}%
+\gdef\new at fontshape#1#2#3#4{%
+     \warn at rel@i\new at fontshape\DeclareFontShape
+     \expandafter\scan at fontshape\@gobble#4<\@nil><<%
+     \DeclareFontShape U{#1}{#2}{#3}\reserved at f}%
+\@onlypreamble\new at fontshape
+\gdef\warn at rel@i#1#2{%
+ \@font at warning{***  NFSS release 1 command
+               \noexpand#1found\MessageBreak
+   ***  Update by using release 2 command
+        \string#2.\MessageBreak
+   ***  Recovery is probably possible}%
+}%
+\@onlypreamble\warn at rel@i
+\gdef\scan at fontshape{%
+  \let\reserved at f\@empty
+  \let\reserved at e\@empty %        holds last info
+  \scan@@fontshape
+}%
+\@onlypreamble\scan at fontshape
+\gdef\scan@@fontshape#1>#2#3<{%
+  \ifx\@nil#1%
+    \edef\reserved at f{\reserved at f\reserved at e}%
+  \else
+    \def\reserved at b{#1}%       nick names
+    \def\reserved at c{#3}%
+    \in@{ at}{#3}%
+    \ifin@
+      \in@{pt}{#3}%  not a proof but a good chance
+      \ifin@
+        \def\reserved at a##1 at##2pt##3\@nil{%
+           \def\reserved at b{##2}%
+           \def\reserved at c{##1}%
+           }%
+        \reserved at a#3\@nil
+      \fi
+    \fi
+    \ifnum 0<0#2
+      \edef\reserved at d{subf*\reserved at c}%
+      \ifcase #2\or
+      \or
+      \else
+        \errmessage{*** What's this? NFSS release 0? ***}%
+      \fi
+    \else
+      \edef\reserved at d{#2\reserved at c}%
+    \fi
+    \ifx\reserved at d\reserved at e
+      \edef\reserved at f{\reserved at f<\reserved at b>}%
+    \else
+      \edef\reserved at f{\reserved at f\reserved at e<\reserved at b>}%add old info
+      \let\reserved at e\reserved at d
+    \fi
+    \expandafter\scan@@fontshape
+  \fi
+}%
+\@onlypreamble\scan@@fontshape
+\gdef\subst at fontshape#1#2#3#4#5#6{%
+     \warn at rel@i\subst at fontshape\DeclareFontShape
+     \DeclareFontShape{U}{#1}{#2}{#3}{<->sub*#4/#5/#6}{}}%
+\@onlypreamble\subst at fontshape
+\gdef\extra at def#1#2#3{%
+     \warn at rel@i\extra at def\DeclareFontFamily
+     \DeclareFontFamily{U}{#1}{}%
+}%
+\@onlypreamble\extra at def
+\gdef\default at mextra{%
+  \warn at rel@i\default at mextra\DeclareFontEncodingDefaults
+  \DeclareFontEncodingDefaults\relax
+}%
+\@onlypreamble\default at mextra
+\gdef\preload at sizes{%
+     \warn at rel@i\preload at sizes\DeclarePreloadSizes
+     \DeclarePreloadSizes U%
+}%
+\@onlypreamble\preload at sizes
+\gdef\err at rel@i#1#2{%
+  \@latex at error{***  NFSS release 1 command \noexpand#1found%
+          ^^J***  Recovery not possible. Use \string#2}%
+       {The new release of NFSS doesn't support the
+        \noexpand#1command^^Jany longer.
+        Please upgrade your file to the syntax of NFSS
+        release 2^^Jusing the \noexpand#2command.}%
+  \batchmode\input.\relax
+}%
+\@onlypreamble\err at rel@i
+\gdef\newmathalphabet{%
+  \if at no@font at opt
+    \@latex at error{*** NFSS release 1 command
+                    \noexpand\newmathalphabet found%
+     ^^J \space*** Automatic recovery not possible.%
+     ^^J \space*** TYPE H for Help%
+              }%
+       {Please look at the file usrguide.tex for hints on
+        how to resolve this problem.}%
+  \else
+     \warn at rel@i\newmathalphabet\DeclareMathAlphabet
+  \fi
+  \@ifstar\newmathalphabet@@@
+          \newmathalphabet@@}%
+\gdef\newmathalphabet@@#1{\DeclareMathAlphabet#1{U}{}{}{}}%
+\gdef\newmathalphabet@@@#1#2#3#4{%
+       \DeclareMathAlphabet{#1}{U}{#2}{#3}{#4}}%
+\@onlypreamble\newmathalphabet
+\@onlypreamble\newmathalphabet@@
+\@onlypreamble\newmathalphabet@@@
+\global\let\if at no@font at opt\iftrue
+\gdef\@no at font@optfalse{\let\if at no@font at opt\iffalse}%
+\gdef\define at mathalphabet{%
+      \err at rel@i\define at mathalphabet\DeclareMathAlphabet
+}%
+\@onlypreamble\define at mathalphabet
+\gdef\define at mathgroup{%
+      \err at rel@i\define at mathgroup\DeclareSymbolFont
+}%
+\@onlypreamble\define at mathgroup
+\def\addtoversion#1#2{%
+  \warn at rel@i\addtoversion\SetMathAlphabet
+  \SetMathAlphabet#2{#1}{U}}%
+\@onlypreamble\addtoversion
+\EndIncludeInRelease
 %%% From File: ltfinal.dtx
 \IncludeInRelease{2015/01/01}%
                  {\newmarks}{Extended Allocation}%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/latexsym.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/latexsym.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/latexsym.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/latin1.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/latin1.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/latin1.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
  \ProvidesFile{latin1.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textonehalf}{\ensuremath{\frac12}}
 \ProvideTextCommandDefault{\textonequarter}{\ensuremath{\frac14}}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/latin10.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/latin10.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/latin10.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
  \ProvidesFile{latin10.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\texteuro}
    {\TextSymbolUnavailable\texteuro}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/latin2.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/latin2.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/latin2.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
  \ProvidesFile{latin2.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textcurrency}
    {\TextSymbolUnavailable\textcurrency}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/latin3.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/latin3.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/latin3.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
  \ProvidesFile{latin3.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textonehalf}{\ensuremath{\frac12}}
 \ProvideTextCommandDefault{\textcurrency}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/latin4.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/latin4.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/latin4.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
  \ProvidesFile{latin4.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textcurrency}
    {\TextSymbolUnavailable\textcurrency}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/latin5.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/latin5.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/latin5.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
  \ProvidesFile{latin5.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textonehalf}{\ensuremath{\frac12}}
 \ProvideTextCommandDefault{\textonequarter}{\ensuremath{\frac14}}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/latin9.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/latin9.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/latin9.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
  \ProvidesFile{latin9.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textcent}
    {\TextSymbolUnavailable\textcent}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/lcyenc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/lcyenc.dfu	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/lcyenc.dfu	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{lcyenc.dfu}
-   [2019/11/14 v1.2k UTF-8 support for inputenc]
+   [2020/11/26 v1.2k UTF-8 support for inputenc]
 \DeclareUnicodeCharacter{00A4}{\textcurrency}
 \DeclareUnicodeCharacter{00AB}{\guillemotleft}
 \DeclareUnicodeCharacter{00BB}{\guillemotright}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/leqno.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/leqno.clo	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/leqno.clo	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/leqno.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/leqno.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/leqno.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/letter.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/letter.cls	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/letter.cls	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1996/06/01]
 \ProvidesClass{letter}
-              [2020/03/11 v1.3b
+              [2021/01/07 v1.3c
                Standard LaTeX document class]
 \newcommand\@ptsize{}
 \DeclareOption{a4paper}
@@ -228,7 +228,7 @@
       \@date \end{tabular}\par}%
   \fi
   \vspace{2\parskip}%
-  {\raggedright \toname \\ \toaddress \par}%
+  {\raggedright \toname \expandafter\\\toaddress \par}%
   \vspace{2\parskip}%
   #1\par\nobreak}
 \newcommand\closing[1]{\par\nobreak\vspace{\parskip}%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/letter.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/letter.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/letter.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -47,7 +47,7 @@
   #1#2[#3]{\endgroup\immediate\write-1{File: #1 #3}}
 \fi
 \ProvidesFile{ltluatex.tex}%
-[2020/09/25 v1.1s
+[2020/12/06 v1.1s
   LuaTeX support for plain TeX (core)
 ]
 \edef\etatcatcode{\the\catcode`\@}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ltxcheck.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ltxcheck.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ltxcheck.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ltxdoc.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ltxdoc.cls	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ltxdoc.cls	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesClass{ltxdoc}
-         [2020/10/04 v2.1b Standard LaTeX documentation class]
+         [2020/12/05 v2.1b Standard LaTeX documentation class]
 \DeclareOption{a5paper}{\@latexerr{Option not supported}%
    {}}
 \DeclareOption*{%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ly1enc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ly1enc.dfu	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ly1enc.dfu	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{ly1enc.dfu}
-   [2019/11/14 v1.2k UTF-8 support for inputenc]
+   [2020/11/26 v1.2k UTF-8 support for inputenc]
 \DeclareUnicodeCharacter{00A0}{\nobreakspace}
 \DeclareUnicodeCharacter{00A1}{\textexclamdown}
 \DeclareUnicodeCharacter{00A2}{\textcent}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/macce.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/macce.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/macce.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
   \ProvidesFile{macce.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textdiv}
    {\TextSymbolUnavailable\textdiv}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/makeidx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/makeidx.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/makeidx.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/newlfont.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/newlfont.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/newlfont.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/next.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/next.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/next.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,7 +44,7 @@
 
 
   \ProvidesFile{next.def}
-   [2020/08/01 v1.3d Input encoding file]
+   [2020/11/26 v1.3d Input encoding file]
 \ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}}
 \ProvideTextCommandDefault{\textonehalf}{\ensuremath{\frac12}}
 \ProvideTextCommandDefault{\textonequarter}{\ensuremath{\frac14}}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/nfssfont.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/nfssfont.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/nfssfont.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \def\nfssfontfileversion{v2.2e}
-\def\nfssfontfiledate{2019/10/12}
+\def\nfssfontfiledate{2020/11/26}
 
 
 \documentclass{article}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/oldlfont.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/oldlfont.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/oldlfont.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/omlcmm.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/omlcmm.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/omlcmm.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/omlcmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/omlcmr.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/omlcmr.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/omlenc.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/omlenc.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/omlenc.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/omllcmm.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/omllcmm.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/omllcmm.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/omscmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/omscmr.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/omscmr.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/omscmsy.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/omscmsy.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/omscmsy.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/omsenc.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/omsenc.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/omsenc.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/omsenc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/omsenc.dfu	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/omsenc.dfu	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{omsenc.dfu}
-   [2019/11/14 v1.2k UTF-8 support for inputenc]
+   [2020/11/26 v1.2k UTF-8 support for inputenc]
 \DeclareUnicodeCharacter{00A7}{\textsection}
 \DeclareUnicodeCharacter{00B6}{\textparagraph}
 \DeclareUnicodeCharacter{00B7}{\textperiodcentered}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/omslcmsy.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/omslcmsy.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/omslcmsy.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/omxcmex.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/omxcmex.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/omxcmex.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/omxlcmex.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/omxlcmex.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/omxlcmex.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/openbib.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/openbib.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/openbib.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmdh.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmdh.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmdh.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmfib.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmfib.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmfib.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmfr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmfr.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmfr.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmr.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmr.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmss.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmss.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmss.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmtt.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmtt.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmvtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmvtt.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ot1cmvtt.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ot1enc.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ot1enc.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ot1enc.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ot1enc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ot1enc.dfu	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ot1enc.dfu	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{ot1enc.dfu}
-   [2019/11/14 v1.2k UTF-8 support for inputenc]
+   [2020/11/26 v1.2k UTF-8 support for inputenc]
 \DeclareUnicodeCharacter{00A0}{\nobreakspace}
 \DeclareUnicodeCharacter{00A1}{\textexclamdown}
 \DeclareUnicodeCharacter{00A3}{\textsterling}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ot1lcmss.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ot1lcmss.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ot1lcmss.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ot1lcmtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ot1lcmtt.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ot1lcmtt.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ot2enc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ot2enc.dfu	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ot2enc.dfu	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{ot2enc.dfu}
-   [2019/11/14 v1.2k UTF-8 support for inputenc]
+   [2020/11/26 v1.2k UTF-8 support for inputenc]
 \DeclareUnicodeCharacter{00AB}{\guillemotleft}
 \DeclareUnicodeCharacter{00BB}{\guillemotright}
 \DeclareUnicodeCharacter{0131}{\i}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ot4enc.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ot4enc.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ot4enc.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/preload.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/preload.cfg	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/preload.cfg	2021-01-09 21:36:18 UTC (rev 57365)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -37,8 +37,8 @@
 %% 
 %%% From File: fontdef.dtx
 \ProvidesFile{preload.cfg}
-           [2020/08/01 v3.0i LaTeX Kernel
-(Uncustomised preload
+           [2020/11/24 v3.0i LaTeX Kernel
+(Uncustomized preload
            font setup)]
 %%
 %%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/preload.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/preload.ltx	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/preload.ltx	2021-01-09 21:36:18 UTC (rev 57365)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/proc.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/proc.cls	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/proc.cls	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
 \ProvidesClass{proc}
-              [2014/09/29 v1.3l
+              [2020/11/23 v1.3l
                Standard LaTeX document class]
 \DeclareOption{a5paper}
     {\ClassError{proc}{Option `a5paper' not supported}{}}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/proc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/proc.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/proc.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
 \ProvidesFile{proc.sty}
-              [2014/09/29 v1.3l
+              [2020/11/23 v1.3l
                LaTeX 2.09 compatibility style option `proc']
 \if at compatibility
 \else

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/report.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/report.cls	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/report.cls	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1995/12/01]
 \ProvidesClass{report}
-              [2020/04/10 v1.4m
+              [2020/11/23 v1.4m
  Standard LaTeX document class]
 \newcommand\@ptsize{}
 \newif\if at restonecol

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/report.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/report.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/report.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/sfonts.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/sfonts.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/sfonts.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -8,7 +8,7 @@
 %% 
 %% This is a generated file.
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/shortvrb.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/shortvrb.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/shortvrb.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,11 +43,11 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1994/12/01]
 \ProvidesPackage{shortvrb}
-  [2020/06/15 v2.1m
+  [2020/11/23 v2.1m
    Standard LaTeX documentation package (FMi)]
 %%
 %% Package `doc' to use with LaTeX 2e
-%% Copyright (C) 1989-1999 Frank Mittelbach, all rights reserved.
+%% Copyright (C) 1989-2020 Frank Mittelbach, all rights reserved.
 \def\MakeShortVerb{%
   \@ifstar
     {\def\@shortvrbdef{\verb*}\@MakeShortVerb}%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/showidx.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/showidx.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/showidx.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/size10.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/size10.clo	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/size10.clo	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \ProvidesFile{size10.clo}
-              [2020/04/10 v1.4m
+              [2020/11/23 v1.4m
       Standard LaTeX file (size option)]
 \renewcommand\normalsize{%
    \@setfontsize\normalsize\@xpt\@xiipt

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/size11.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/size11.clo	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/size11.clo	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \ProvidesFile{size11.clo}
-              [2020/04/10 v1.4m
+              [2020/11/23 v1.4m
       Standard LaTeX file (size option)]
 \renewcommand\normalsize{%
    \@setfontsize\normalsize\@xipt{13.6}%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/size12.clo
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/size12.clo	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/size12.clo	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \ProvidesFile{size12.clo}
-              [2020/04/10 v1.4m
+              [2020/11/23 v1.4m
       Standard LaTeX file (size option)]
 \renewcommand\normalsize{%
    \@setfontsize\normalsize\@xiipt{14.5}%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/slides.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/slides.cls	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/slides.cls	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -43,7 +43,7 @@
 %% extension .ins) which are part of the distribution.
 \NeedsTeXFormat{LaTeX2e}[1997/06/01]
 \ProvidesClass{slides}
-              [2020/02/20 v2.4b
+              [2020/11/23 v2.4b
                Standard LaTeX document class]
 \input{slides.def}
 \InputIfFileExists{sfonts.cfg}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/slides.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/slides.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/slides.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \ProvidesFile{slides.def}
-              [2020/02/20 v2.4b
+              [2020/11/23 v2.4b
                SLiTeX definitions]
 \message{hacks,}
 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/slides.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/slides.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/slides.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/source2edoc.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/source2edoc.cls	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/source2edoc.cls	2021-01-09 21:36:18 UTC (rev 57365)
@@ -2,7 +2,7 @@
 % This class is buggy and needs fixing
 
 \ProvidesClass{source2edoc}
-              [2020/08/16 v0.1 Quick hack to typeset source2.tex
+              [2020/12/02 v0.2 Quick hack to typeset source2.tex
                (not usable for anything else and buggy -- will vanish again)!]
 
 \LoadClass{l3doc}
@@ -14,8 +14,43 @@
 
 
 
-% l3doc's def are buggy (already fixed there but not distributed yet)
+
 \ExplSyntaxOn
+
+% in 2e we have a lot of functions that have no ``user-level'' documentation so we disable
+% a bogus backref in that case. Over time the sources should be clean up to have such documentation.
+
+\cs_set_protected:Npn \__codedoc_print_documented:
+  {
+    \seq_gset_filter:NNn \g__codedoc_nested_names_seq
+      \g__codedoc_nested_names_seq
+      { ! \__codedoc_if_macro_internal_p:n {##1} }
+    \seq_if_empty:NF \g__codedoc_nested_names_seq
+      {
+% This is a crude change: we grab the first name
+        \__codedoc_get_hyper_target:xN
+          { \seq_item:Nn \g__codedoc_nested_names_seq { 1 } }
+          \l__codedoc_tmpa_tl
+% ... and check if it has a reference
+        \cs_if_exist:cT{ r@\l__codedoc_tmpa_tl }
+% If it does we show it, if not we don't.
+         {
+           \int_set:Nn \l__codedoc_tmpa_int
+             { \seq_count:N \g__codedoc_nested_names_seq }
+           \int_compare:nNnTF \l__codedoc_tmpa_int = 1 {~This~} {~These~}
+           \bool_if:NTF \l__codedoc_macro_var_bool {variable} {function}
+           \int_compare:nNnTF \l__codedoc_tmpa_int = 1 {~is~} {s~are~}
+           documented~on~page~
+           \exp_args:Nx \pageref { \l__codedoc_tmpa_tl } .
+         }
+      }
+    \seq_gclear:N \g__codedoc_nested_names_seq
+  }
+
+
+  
+% some l3doc's def are buggy (already fixed there but not distributed yet)
+
 \RenewDocumentCommand \DocInclude { m }
   {
     \relax\clearpage

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/structuredlog.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/structuredlog.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/structuredlog.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,11 +42,11 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 %%
-%% File: ltfilehook.dtx (C) Copyright 2020 Frank Mittelbach,
+%% File: ltfilehook.dtx (C) Copyright 2020,2021 Frank Mittelbach,
 %%                                         Phelype Oleinik & LaTeX Team
 %%% From File: ltfilehook.dtx
-\providecommand\ltfilehookversion{v1.0c}
-\providecommand\ltfilehookdate{2020/10/18}
+\providecommand\ltfilehookversion{v1.0e}
+\providecommand\ltfilehookdate{2021/01/07}
 \ProvidesExplPackage
     {structuredlog}{\ltfilehookdate}{\ltfilehookversion}
     {Structuring the TeX transcript file}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/syntonly.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/syntonly.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/syntonly.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/t1cmdh.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/t1cmdh.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/t1cmdh.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/t1cmfib.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/t1cmfib.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/t1cmfib.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/t1cmfr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/t1cmfr.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/t1cmfr.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/t1cmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/t1cmr.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/t1cmr.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/t1cmss.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/t1cmss.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/t1cmss.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/t1cmtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/t1cmtt.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/t1cmtt.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/t1cmvtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/t1cmvtt.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/t1cmvtt.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/t1enc.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/t1enc.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/t1enc.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/t1enc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/t1enc.dfu	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/t1enc.dfu	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
   \ProvidesFile{t1enc.dfu}
-   [2019/11/14 v1.2k UTF-8 support for inputenc]
+   [2020/11/26 v1.2k UTF-8 support for inputenc]
 \DeclareUnicodeCharacter{00A0}{\nobreakspace}
 \DeclareUnicodeCharacter{00A1}{\textexclamdown}
 \DeclareUnicodeCharacter{00A3}{\textsterling}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/t1enc.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/t1enc.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/t1enc.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/t1lcmss.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/t1lcmss.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/t1lcmss.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/t1lcmtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/t1lcmtt.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/t1lcmtt.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/t2aenc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/t2aenc.dfu	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/t2aenc.dfu	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{t2aenc.dfu}
-   [2019/11/14 v1.2k UTF-8 support for inputenc]
+   [2020/11/26 v1.2k UTF-8 support for inputenc]
 \DeclareUnicodeCharacter{00A4}{\textcurrency}
 \DeclareUnicodeCharacter{00A7}{\textsection}
 \DeclareUnicodeCharacter{00AB}{\guillemotleft}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/t2benc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/t2benc.dfu	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/t2benc.dfu	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{t2benc.dfu}
-   [2019/11/14 v1.2k UTF-8 support for inputenc]
+   [2020/11/26 v1.2k UTF-8 support for inputenc]
 \DeclareUnicodeCharacter{00A4}{\textcurrency}
 \DeclareUnicodeCharacter{00A7}{\textsection}
 \DeclareUnicodeCharacter{00AB}{\guillemotleft}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/t2cenc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/t2cenc.dfu	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/t2cenc.dfu	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{t2cenc.dfu}
-   [2019/11/14 v1.2k UTF-8 support for inputenc]
+   [2020/11/26 v1.2k UTF-8 support for inputenc]
 \DeclareUnicodeCharacter{00A4}{\textcurrency}
 \DeclareUnicodeCharacter{00A7}{\textsection}
 \DeclareUnicodeCharacter{00AB}{\guillemotleft}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/testpage.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/testpage.tex	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/testpage.tex	2021-01-09 21:36:18 UTC (rev 57365)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% Copyright (C) 1993-2020
+% Copyright (C) 1993-2021
 % The LaTeX3 Project and any individual authors listed elsewhere
 % in this file.
 %

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/texsys.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/texsys.cfg	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/texsys.cfg	2021-01-09 21:36:18 UTC (rev 57365)
@@ -60,7 +60,7 @@
 %
 % Normally one would not need to define this macro in |texsys.cfg| as
 % the automatic tests can supply parsers that work with UNIX and VMS
-% syntax, as well as a basic parser that willcover many other cases.
+% syntax, as well as a basic parser that will cover many other cases.
 % However some operating systems may need a `hand produced' parser
 % in which case it should be defined in this file.
 %

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/textcomp-2018-08-11.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/textcomp-2018-08-11.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/textcomp-2018-08-11.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/textcomp.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/textcomp.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/textcomp.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/tracefnt.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/tracefnt.sty	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/tracefnt.sty	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -44,9 +44,9 @@
 %%% From File: ltfsstrc.dtx
 %% Copyright (C) 1989-97 by Frank Mittelbach and Rainer Sch\"opf.
 %% Copyright (C) 1994-97 by LaTeX3 project. All rights reserved.
-\NeedsTeXFormat{LaTeX2e}[1995/05/16]
+\NeedsTeXFormat{LaTeX2e}[2021/05/01]
 \ProvidesPackage{tracefnt}
-     [2019/10/11 v3.0l  Standard LaTeX package (font tracing)]
+     [2020/12/22 v3.0n  Standard LaTeX package (font tracing)]
 \newcount\tracingfonts
 \tracingfonts=0
 \DeclareOption{errorshow}{%
@@ -103,19 +103,59 @@
     \csname\curr at fontshape\endcsname
     \relax
        }
+
 \DeclareRobustCommand\selectfont
         {%
     \ifx\f at linespread\baselinestretch \else
       \set at fontsize\baselinestretch\f at size\f at baselineskip \fi
+    \ifx\delayed at f@adjustment\@empty
+    \else
+      \let\f at shape@saved\f at shape
+      \let\f at series@saved\f at series
+      \delayed at f@adjustment
+      \maybe at load@fontshape
+      \ifcsname \f at encoding/\f at family/\f at series/\f at shape \endcsname
+      \else
+        \let\f at shape\f at shape@saved
+        \let\f at series\f at series@saved
+        \let\delayed at merge@font at shape\merge at font@shape
+        \let\delayed at merge@font at series\merge at font@series
+        \delayed at f@adjustment
+        \let\delayed at merge@font at shape\merge at font@shape at without@substitution
+        \let\delayed at merge@font at series\merge at font@series at without@substitution
+      \fi
+      \let\delayed at f@adjustment\@empty
+    \fi
     \xdef\font at name{%
       \csname\curr at fontshape/\f at size\endcsname}%
     \pickup at font
     \font at name
-    \ifnum \tracingfonts>\tw@
-      \@font at info{Switching to \font at name}\fi
+    \UseHook{selectfont}%
     \size at update
     \enc at update
     }
+\AddToHook{selectfont}
+   {\ifnum \tracingfonts>\tw@
+       \@font at info{Switching to \font at name}\fi}
+\IncludeInRelease{2021/05/01}%
+                 {\selectfont}{Add hook to \selectfont}%
+\EndIncludeInRelease
+\IncludeInRelease{0000/00/00}%
+                 {\selectfont}{Add hook to \selectfont}%
+
+\DeclareRobustCommand\selectfont
+   {%
+    \ifx\f at linespread\baselinestretch \else
+      \set at fontsize\baselinestretch\f at size\f at baselineskip \fi
+    \xdef\font at name{%
+      \csname\curr at fontshape/\f at size\endcsname}%
+    \pickup at font
+    \font at name
+    \size at update
+    \enc at update
+   }
+
+\EndIncludeInRelease
 \def\set at fontsize#1#2#3{%
     \@defaultunits\@tempdimb#2pt\relax\@nnil
     \edef\f at size{\strip at pt\@tempdimb}%

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmr.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmr.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmss.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmss.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmss.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmtt.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmtt.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmvtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmvtt.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ts1cmvtt.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ts1enc.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ts1enc.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ts1enc.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ts1enc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ts1enc.dfu	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ts1enc.dfu	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{ts1enc.dfu}
-   [2019/11/14 v1.2k UTF-8 support for inputenc]
+   [2020/11/26 v1.2k UTF-8 support for inputenc]
 \DeclareUnicodeCharacter{00A2}{\textcent}
 \DeclareUnicodeCharacter{00A3}{\textsterling}
 \DeclareUnicodeCharacter{00A4}{\textcurrency}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/tuenc.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/tuenc.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/tuenc.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/tulmdh.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/tulmdh.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/tulmdh.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 2016-2020
+%% Copyright (C) 2016-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/tulmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/tulmr.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/tulmr.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 2016-2020
+%% Copyright (C) 2016-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/tulmss.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/tulmss.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/tulmss.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 2016-2020
+%% Copyright (C) 2016-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/tulmssq.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/tulmssq.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/tulmssq.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 2016-2020
+%% Copyright (C) 2016-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/tulmtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/tulmtt.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/tulmtt.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 2016-2020
+%% Copyright (C) 2016-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/tulmvtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/tulmvtt.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/tulmvtt.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 2016-2020
+%% Copyright (C) 2016-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ucmr.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ucmr.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ucmr.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ucmss.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ucmss.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ucmss.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ucmtt.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ucmtt.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ucmtt.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ulasy.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ulasy.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ulasy.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/ullasy.fd
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/ullasy.fd	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/ullasy.fd	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/utf8-2018.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/utf8-2018.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/utf8-2018.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/utf8.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/utf8.def	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/utf8.def	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 \ProvidesFile{utf8.def}
-   [2019/11/14 v1.2k UTF-8 support for inputenc]
+   [2020/11/26 v1.2k UTF-8 support for inputenc]
 \ifx\ifincsname\@undefined  % old e-pTeX or e-upTeX engines
   \input utf8-2018.def
   \expandafter\@firstofone

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/utf8enc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/utf8enc.dfu	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/utf8enc.dfu	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
  \ProvidesFile{utf8enc.dfu}
-   [2019/11/14 v1.2k UTF-8 support for inputenc]
+   [2020/11/26 v1.2k UTF-8 support for inputenc]
 \DeclareUnicodeCharacter{00A0}{\nobreakspace}
 \DeclareUnicodeCharacter{00A1}{\textexclamdown}
 \DeclareUnicodeCharacter{00A2}{\textcent}

Modified: trunk/Master/texmf-dist/tex/latex-dev/base/x2enc.dfu
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/base/x2enc.dfu	2021-01-09 21:34:11 UTC (rev 57364)
+++ trunk/Master/texmf-dist/tex/latex-dev/base/x2enc.dfu	2021-01-09 21:36:18 UTC (rev 57365)
@@ -13,7 +13,7 @@
 %% (but please observe conditions on bug reports sent to that address!)
 %% 
 %% 
-%% Copyright (C) 1993-2020
+%% Copyright (C) 1993-2021
 %% The LaTeX3 Project and any individual authors listed elsewhere
 %% in this file.
 %% 
@@ -42,7 +42,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
   \ProvidesFile{x2enc.dfu}
-   [2019/11/14 v1.2k UTF-8 support for inputenc]
+   [2020/11/26 v1.2k UTF-8 support for inputenc]
 \DeclareUnicodeCharacter{00A4}{\textcurrency}
 \DeclareUnicodeCharacter{00A7}{\textsection}
 \DeclareUnicodeCharacter{00AB}{\guillemotleft}



More information about the tex-live-commits mailing list.