summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2023-01-24 20:57:30 +0000
committerKarl Berry <karl@freefriends.org>2023-01-24 20:57:30 +0000
commitee97f6dbd2e6acf46b912ba49ad1e59892892707 (patch)
treed57f5081c212d6c288b80fa545be94c459075c4d /Master/texmf-dist/tex
parent81de637794cea58fe8f1a7128ac5f305de1ae155 (diff)
expkv-bundle (24jan23)
git-svn-id: svn://tug.org/texlive/trunk@65623 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r--Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-cs.tex59
-rw-r--r--Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-def.tex59
-rw-r--r--Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-pop.tex59
-rw-r--r--Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv.tex60
-rw-r--r--Master/texmf-dist/tex/generic/expkv-bundle/expkv-cs.tex1013
-rw-r--r--Master/texmf-dist/tex/generic/expkv-bundle/expkv-def.tex867
-rw-r--r--Master/texmf-dist/tex/generic/expkv-bundle/expkv-pop.tex326
-rw-r--r--Master/texmf-dist/tex/generic/expkv-bundle/expkv.tex1245
-rw-r--r--Master/texmf-dist/tex/latex/expkv-bundle/expkv-cs.sty67
-rw-r--r--Master/texmf-dist/tex/latex/expkv-bundle/expkv-def.sty61
-rw-r--r--Master/texmf-dist/tex/latex/expkv-bundle/expkv-opt-2020-10-10.sty288
-rw-r--r--Master/texmf-dist/tex/latex/expkv-bundle/expkv-opt.sty517
-rw-r--r--Master/texmf-dist/tex/latex/expkv-bundle/expkv-pop.sty61
-rw-r--r--Master/texmf-dist/tex/latex/expkv-bundle/expkv.sty68
14 files changed, 4750 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-cs.tex b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-cs.tex
new file mode 100644
index 00000000000..f4fcf8fdc0f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-cs.tex
@@ -0,0 +1,59 @@
+%%
+%% This is file `t-expkv-cs.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% expkv-cs.dtx (with options: `ctx')
+%%
+%% ----------------------------------------------------------------
+%% expkv-bundle -- an expandable key=val implementation and friends
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+%% Copyright (C) 2020-2023 Jonathan P. Spratte
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the files expkv-bundle.ins
+%% expkv.dtx
+%% expkv-cs.dtx
+%% expkv-def.dtx
+%% expkv-opt.dtx
+%% expkv-pop.dtx
+%% and the derived files expkv.sty
+%% expkv.tex
+%% t-expkv.tex
+%% expkv-cs.sty
+%% expkv-cs.tex
+%% t-expkv-cs.tex
+%% expkv-def.sty
+%% expkv-def.tex
+%% t-expkv-def.tex
+%% expkv-opt.sty
+%% expkv-pop.sty
+%% expkv-pop.tex
+%% t-expkv-pop.tex
+%%
+%% as well as any documentation files shipped with it.
+%%
+\writestatus{loading}{ConTeXt User Module / expkv-cs}
+\usemodule[expkv-pop]
+\unprotect
+\input expkv-cs.tex
+\writestatus{loading}
+ {ConTeXt User Module / expkv-cs / Version \ekvcVersion\space loaded}
+\protect\endinput
+%%
+%%
+%% End of file `t-expkv-cs.tex'.
diff --git a/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-def.tex b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-def.tex
new file mode 100644
index 00000000000..5752a499295
--- /dev/null
+++ b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-def.tex
@@ -0,0 +1,59 @@
+%%
+%% This is file `t-expkv-def.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% expkv-def.dtx (with options: `ctx')
+%%
+%% ----------------------------------------------------------------
+%% expkv-bundle -- an expandable key=val implementation and friends
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+%% Copyright (C) 2020-2023 Jonathan P. Spratte
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the files expkv-bundle.ins
+%% expkv.dtx
+%% expkv-cs.dtx
+%% expkv-def.dtx
+%% expkv-opt.dtx
+%% expkv-pop.dtx
+%% and the derived files expkv.sty
+%% expkv.tex
+%% t-expkv.tex
+%% expkv-cs.sty
+%% expkv-cs.tex
+%% t-expkv-cs.tex
+%% expkv-def.sty
+%% expkv-def.tex
+%% t-expkv-def.tex
+%% expkv-opt.sty
+%% expkv-pop.sty
+%% expkv-pop.tex
+%% t-expkv-pop.tex
+%%
+%% as well as any documentation files shipped with it.
+%%
+\writestatus{loading}{ConTeXt User Module / expkv-def}
+\usemodule[expkv-pop]
+\unprotect
+\input expkv-def.tex
+\writestatus{loading}
+ {ConTeXt User Module / expkv-def / Version \ekvdVersion\space loaded}
+\protect\endinput
+%%
+%%
+%% End of file `t-expkv-def.tex'.
diff --git a/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-pop.tex b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-pop.tex
new file mode 100644
index 00000000000..4e66a908a9c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv-pop.tex
@@ -0,0 +1,59 @@
+%%
+%% This is file `t-expkv-pop.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% expkv-pop.dtx (with options: `ctx')
+%%
+%% ----------------------------------------------------------------
+%% expkv-bundle -- an expandable key=val implementation and friends
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+%% Copyright (C) 2020-2023 Jonathan P. Spratte
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the files expkv-bundle.ins
+%% expkv.dtx
+%% expkv-cs.dtx
+%% expkv-def.dtx
+%% expkv-opt.dtx
+%% expkv-pop.dtx
+%% and the derived files expkv.sty
+%% expkv.tex
+%% t-expkv.tex
+%% expkv-cs.sty
+%% expkv-cs.tex
+%% t-expkv-cs.tex
+%% expkv-def.sty
+%% expkv-def.tex
+%% t-expkv-def.tex
+%% expkv-opt.sty
+%% expkv-pop.sty
+%% expkv-pop.tex
+%% t-expkv-pop.tex
+%%
+%% as well as any documentation files shipped with it.
+%%
+\writestatus{loading}{ConTeXt User Module / expkv-pop}
+\usemodule[expkv]
+\unprotect
+\input expkv-pop.tex
+\writestatus{loading}
+ {ConTeXt User Module / expkv-pop / Version \ekvpVersion\space loaded}
+\protect\endinput
+%%
+%%
+%% End of file `t-expkv-pop.tex'.
diff --git a/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv.tex b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv.tex
new file mode 100644
index 00000000000..489f2df0159
--- /dev/null
+++ b/Master/texmf-dist/tex/context/third/expkv-bundle/t-expkv.tex
@@ -0,0 +1,60 @@
+%%
+%% This is file `t-expkv.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% expkv.dtx (with options: `ctx')
+%%
+%% ----------------------------------------------------------------
+%% expkv-bundle -- an expandable key=val implementation and friends
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+%% Copyright (C) 2020-2023 Jonathan P. Spratte
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the files expkv-bundle.ins
+%% expkv.dtx
+%% expkv-cs.dtx
+%% expkv-def.dtx
+%% expkv-opt.dtx
+%% expkv-pop.dtx
+%% and the derived files expkv.sty
+%% expkv.tex
+%% t-expkv.tex
+%% expkv-cs.sty
+%% expkv-cs.tex
+%% t-expkv-cs.tex
+%% expkv-def.sty
+%% expkv-def.tex
+%% t-expkv-def.tex
+%% expkv-opt.sty
+%% expkv-pop.sty
+%% expkv-pop.tex
+%% t-expkv-pop.tex
+%%
+%% as well as any documentation files shipped with it.
+%%
+\writestatus{loading}{ConTeXt User Module / expkv}
+\unprotect
+\input expkv.tex
+\long\def\ekv@err@collect#1\par#2%
+ {\directlua{tex.error[[\detokenize{#2} Error: #1]]}}
+\writestatus{loading}
+ {ConTeXt User Module / expkv / Version \ekvVersion\space loaded}
+\protect\endinput
+%%
+%%
+%% End of file `t-expkv.tex'.
diff --git a/Master/texmf-dist/tex/generic/expkv-bundle/expkv-cs.tex b/Master/texmf-dist/tex/generic/expkv-bundle/expkv-cs.tex
new file mode 100644
index 00000000000..ef836dd7b57
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/expkv-bundle/expkv-cs.tex
@@ -0,0 +1,1013 @@
+%%
+%% This is file `expkv-cs.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% expkv-cs.dtx (with options: `tex')
+%%
+%% ----------------------------------------------------------------
+%% expkv-bundle -- an expandable key=val implementation and friends
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+%% Copyright (C) 2020-2023 Jonathan P. Spratte
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the files expkv-bundle.ins
+%% expkv.dtx
+%% expkv-cs.dtx
+%% expkv-def.dtx
+%% expkv-opt.dtx
+%% expkv-pop.dtx
+%% and the derived files expkv.sty
+%% expkv.tex
+%% t-expkv.tex
+%% expkv-cs.sty
+%% expkv-cs.tex
+%% t-expkv-cs.tex
+%% expkv-def.sty
+%% expkv-def.tex
+%% t-expkv-def.tex
+%% expkv-opt.sty
+%% expkv-pop.sty
+%% expkv-pop.tex
+%% t-expkv-pop.tex
+%%
+%% as well as any documentation files shipped with it.
+%%
+\input expkv-pop
+\expandafter\ifx\csname ekvcVersion\endcsname\relax
+\else
+ \expandafter\endinput
+\fi
+\def\ekvcVersion{1.3}
+\def\ekvcDate{2023-01-23}
+\csname ekvc@tmp\endcsname
+\expandafter\chardef\csname ekvc@tmp\endcsname=\catcode`\@
+\catcode`\@=11
+\edef\ekvc@tripledots{\detokenize{...}}
+\newcount\ekvc@keycount
+\let\ekvc@long\ekv@empty
+\let\ekvc@any@long\ekv@empty
+\long\def\ekvc@ifdefined#1%
+ {%
+ \ifdefined#1%
+ \ifx\relax#1%
+ \ekv@fi@gobble
+ \fi
+ \@firstofone
+ \ekv@fi@firstoftwo
+ \fi
+ \@secondoftwo
+ }
+\def\ekvc@ekvset@pre@expander#1%
+ {%
+ \expandafter\ekvc@ekvset@pre@expander@a\ekvset{#1}\ekvc@stop\ekvc@stop
+ }
+\def\ekvc@ekvset@pre@expander@a
+ {%
+ \expandafter\ekvc@ekvset@pre@expander@b
+ }
+\def\ekvc@ekvset@pre@expander@b#1\ekvc@stop#2\ekvc@stop
+ {%
+ \ekv@unexpanded\expandafter{\ekv@alignsafe}%
+ \ekv@unexpanded{#1}##1\ekv@unexpanded{#2}%
+ \ekv@unexpanded\expandafter{\ekv@endalignsafe}%
+ }
+\protected\long\def\ekvcSplitAndUse#1#2%
+ {%
+ \let\ekvc@helpers@needed\@firstoftwo
+ \ekvc@ifdefined#1%
+ {\ekvc@err@already@defined#1}%
+ {\ekvcSplitAndUse@#1{}{#2}}%
+ }
+\protected\long\def\ekvcSplitAndUse@#1#2#3%
+ {%
+ \edef\ekvc@set{\string#1}%
+ \ekvc@SetupSplitKeys{#3}%
+ \ekvc@helpers@needed
+ {%
+ \ekvc@any@long\edef#1##1%
+ {%
+ \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
+ \ekv@unexpanded\expandafter
+ {\csname ekvc@split@\the\ekvc@keycount\endcsname}%
+ \ekv@unexpanded\expandafter{\ekvc@initials{}#2}%
+ }%
+ }%
+ {%
+ \ekvc@any@long\edef#1##1%
+ {%
+ \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
+ \ekv@unexpanded{#2}%
+ \ekv@unexpanded\expandafter{\ekvc@initials}%
+ }%
+ }%
+ }
+\protected\long\def\ekvcSplitAndForward#1#2#3%
+ {%
+ \let\ekvc@helpers@needed\@firstoftwo
+ \ekvc@ifdefined#1%
+ {\ekvc@err@already@defined#1}%
+ {\ekvcSplitAndUse@#1{{#2}}{#3}}%
+ }
+\protected\long\def\ekvcSplit#1#2#3%
+ {%
+ \let\ekvc@helpers@needed\@secondoftwo
+ \ekvc@ifdefined#1%
+ {\ekvc@err@already@defined#1}%
+ {%
+ \expandafter
+ \ekvcSplitAndUse@\expandafter#1\csname ekvc@\string#1\endcsname{#2}%
+ \ifnum\ekvc@keycount<1
+ \ekvc@any@long\expandafter\def\csname ekvc@\string#1\endcsname{#3}%
+ \else
+ \ifnum\ekvc@keycount>9
+ \ekvc@err@toomany{#1}%
+ \let#1\ekvc@undefined
+ \else
+ \ekvcSplit@build@argspec
+ \ekvc@any@long\expandafter
+ \def\csname ekvc@\string#1\expandafter\endcsname\ekvc@tmp{#3}%
+ \fi
+ \fi
+ }%
+ }
+\protected\def\ekvcSplit@build@argspec
+ {%
+ \begingroup
+ \edef\ekvc@tmp
+ {\endgroup\def\ekv@unexpanded{\ekvc@tmp}{\ekvcSplit@build@argspec@{1}}}%
+ \ekvc@tmp
+ }
+\def\ekvcSplit@build@argspec@#1%
+ {%
+ \ifnum#1>\ekvc@keycount
+ \ekv@fi@gobble
+ \fi
+ \@firstofone
+ {%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@#1\endcsname####}#1%
+ \expandafter\ekvcSplit@build@argspec@\expandafter{\the\numexpr#1+1}%
+ }%
+ }
+\protected\long\def\ekvc@SetupSplitKeys
+ {%
+ \ekvc@keycount=\ekv@zero
+ \let\ekvc@any@long\ekv@empty
+ \let\ekvc@initials\ekv@empty
+ \ekvpParse@unsafe\ekvp@@p@ekvc@setup@splitkeys
+ }
+\ekvpNewParser{ekvc@setup@splitkeys}
+\ekvpDefType{ekvc@setup@splitkeys}{short}
+ {%
+ \let\ekvc@long\ekv@empty
+ \expandafter\ekvc@SetupSplitKeys@a\detokenize{#1}\ekv@stop{#3}%
+ }
+\ekvpDefType{ekvc@setup@splitkeys}{long}
+ {%
+ \let\ekvc@long\long
+ \let\ekvc@any@long\long
+ \expandafter\ekvc@SetupSplitKeys@a\detokenize{#1}\ekv@stop{#3}%
+ }
+\ekvpDefNoType{ekvc@setup@splitkeys}
+ {%
+ \let\ekvc@long\ekv@empty
+ \expandafter\ekvc@SetupSplitKeys@a\detokenize{#1}\ekv@stop{#3}%
+ }
+\ekvpDefNoValue{ekvc@setup@splitkeys}
+ {%
+ \begingroup
+ \edef\ekvc@tmp{\detokenize{#1}}%
+ \expandafter
+ \endgroup
+ \ifx\ekvc@tripledots\ekvc@tmp
+ \advance\ekvc@keycount1
+ \begingroup\expandafter\endgroup
+ \expandafter\ekvc@SetupSplitKeys@unknown
+ \csname ekvc@splitmark@\the\ekvc@keycount\endcsname
+ \let\ekvc@any@long\long
+ \else
+ \ekvc@err@value@required{#1}%
+ \fi
+ }
+\protected\long\def\ekvc@SetupSplitKeys@a
+ {%
+ \advance\ekvc@keycount1
+ \begingroup\expandafter\endgroup
+ \expandafter\ekvc@SetupSplitKeys@b
+ \csname ekvc@splitmark@\the\ekvc@keycount\endcsname
+ }
+\protected\long\def\ekvc@SetupSplitKeys@b#1#2\ekv@stop#3%
+ {%
+ \long\def\ekvc@tmp##1##2#1##3{##2#1{##1}}%
+ \ifx\ekvc@long\long
+ \else
+ \expandafter\let\csname ekvc@\ekvc@set(#2)\endcsname\ekvc@tmp
+ \edef\ekvc@tmp##1%
+ {%
+ \ekv@unexpanded\expandafter{\csname ekvc@\ekvc@set(#2)\endcsname}%
+ {##1}%
+ }%
+ \fi
+ \ekvlet\ekvc@set{#2}\ekvc@tmp
+ \edef\ekvc@initials{\ekv@unexpanded\expandafter{\ekvc@initials#1{#3}}}%
+ \ekvc@helpers@needed
+ {\expandafter\ekvc@setup@splitmacro\expandafter{\the\ekvc@keycount}}%
+ {}%
+ }
+\protected\long\def\ekvc@SetupSplitKeys@unknown#1%
+ {%
+ \long\def\ekvc@tmp##1##2##3##4#1##5{##4#1{##5, {##3} = {##1} }}%
+ \ekvletunknown\ekvc@set\ekvc@tmp
+ \long\def\ekvc@tmp##1##2##3#1##4{##3#1{##4, {##2} }}%
+ \ekvletunknownNoVal\ekvc@set\ekvc@tmp
+ \edef\ekvc@initials{\ekv@unexpanded\expandafter{\ekvc@initials#1{}}}%
+ \ekvc@helpers@needed
+ {\expandafter\ekvc@setup@splitmacro\expandafter{\the\ekvc@keycount}}%
+ {}%
+ }
+\protected\def\ekvc@defarggobbler#1{\def\ekvc@tmp##1#1##2##{##1#1}}
+\begingroup
+\edef\ekvc@tmp
+ {%
+ \long\gdef\ekv@unexpanded\expandafter{\csname ekvc@split@1\endcsname}%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ ##2##3%
+ {##3{##1}##2}%
+ \long\gdef\ekv@unexpanded\expandafter{\csname ekvc@split@2\endcsname}%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ ##3##4%
+ {##4{##1}{##2}##3}%
+ \long\gdef\ekv@unexpanded\expandafter{\csname ekvc@split@3\endcsname}%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3%
+ ##4##5%
+ {##5{##1}{##2}{##3}##4}%
+ \long\gdef\ekv@unexpanded\expandafter{\csname ekvc@split@4\endcsname}%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4%
+ ##5##6%
+ {##6{##1}{##2}{##3}{##4}##5}%
+ \long\gdef\ekv@unexpanded\expandafter{\csname ekvc@split@5\endcsname}%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@5\endcsname}##5%
+ ##6##7%
+ {##7{##1}{##2}{##3}{##4}{##5}##6}%
+ \long\gdef\ekv@unexpanded\expandafter{\csname ekvc@split@6\endcsname}%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@5\endcsname}##5%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@6\endcsname}##6%
+ ##7##8%
+ {##8{##1}{##2}{##3}{##4}{##5}{##6}##7}%
+ \long\gdef\ekv@unexpanded\expandafter{\csname ekvc@split@7\endcsname}%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@1\endcsname}##1%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@2\endcsname}##2%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@3\endcsname}##3%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@4\endcsname}##4%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@5\endcsname}##5%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@6\endcsname}##6%
+ \ekv@unexpanded\expandafter{\csname ekvc@splitmark@7\endcsname}##7%
+ ##8##9%
+ {##9{##1}{##2}{##3}{##4}{##5}{##6}{##7}##8}%
+ }
+\ekvc@tmp
+\endgroup
+\protected\def\ekvc@setup@splitmacro#1%
+ {%
+ \ekv@ifdefined{ekvc@split@#1}{}%
+ {%
+ \begingroup
+ \def\ekvc@tmp##1%
+ {%
+ \ekv@unexpanded\expandafter
+ {\csname ekvc@splitmark@\the\numexpr#1-##1\relax\endcsname}%
+ }%
+ \edef\ekvc@tmp
+ {%
+ \long\gdef
+ \ekv@unexpanded\expandafter{\csname ekvc@split@#1\endcsname}%
+ ####1%
+ \ekvc@tmp{6}####2%
+ \ekvc@tmp{5}####3%
+ \ekvc@tmp{4}####4%
+ \ekvc@tmp{3}####5%
+ \ekvc@tmp{2}####6%
+ \ekvc@tmp{1}####7%
+ \ekvc@tmp{0}####8%
+ ####9%
+ {%
+ \ekv@unexpanded\expandafter
+ {\csname ekvc@split@\the\numexpr#1-7\relax\endcsname}%
+ ####1{{####2}{####3}{####4}{####5}{####6}{####7}{####8}####9}%
+ }%
+ }%
+ \ekvc@tmp
+ \endgroup
+ }%
+ }
+\protected\long\def\ekvcHashAndUse#1#2%
+ {%
+ \let\ekvc@helpers@needed\@firstoftwo
+ \ekvc@ifdefined#1%
+ {\ekvc@err@already@defined#1}%
+ {\ekvcHashAndUse@#1{}{#2}}%
+ }
+\protected\long\def\ekvcHashAndUse@#1#2#3%
+ {%
+ \edef\ekvc@set{\string#1}%
+ \ekvc@SetupHashKeys{#3}%
+ \ekvc@helpers@needed
+ {%
+ \ekvc@any@long\edef#1##1%
+ {%
+ \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
+ \ekv@unexpanded{\ekvc@hash@pack@argument}%
+ \ekv@unexpanded\expandafter{\ekvc@initials\ekvc@stop#2}%
+ }%
+ }%
+ {%
+ \ekvc@any@long\edef#1##1%
+ {%
+ \expandafter\ekvc@ekvset@pre@expander\expandafter{\ekvc@set}%
+ \ekv@unexpanded{#2}%
+ \ekv@unexpanded\expandafter{\ekvc@initials\ekvc@stop}%
+ }%
+ }%
+ }
+\protected\long\def\ekvcHashAndForward#1#2#3%
+ {%
+ \let\ekvc@helpers@needed\@firstoftwo
+ \ekvc@ifdefined#1%
+ {\ekvc@err@already@defined#1}%
+ {\ekvcHashAndUse@#1{{#2}}{#3}}%
+ }
+\protected\long\def\ekvcHash#1#2#3%
+ {%
+ \let\ekvc@helpers@needed\@secondoftwo
+ \ekvc@ifdefined#1%
+ {\ekvc@err@already@defined#1}%
+ {%
+ \expandafter
+ \ekvcHashAndUse@\expandafter#1\csname ekvc@\string#1\endcsname{#2}%
+ \ekvc@any@long\expandafter\def\csname ekvc@\string#1\endcsname
+ ##1\ekvc@stop
+ {#3}%
+ }%
+ }
+\long\def\ekvc@hash@pack@argument#1\ekvc@stop#2{#2{#1}}
+\protected\long\def\ekvc@SetupHashKeys
+ {%
+ \let\ekvc@any@long\ekv@empty
+ \let\ekvc@initials\ekv@empty
+ \ekvpParse@unsafe\ekvp@@p@ekvc@setup@hashkeys
+ }
+\ekvpNewParser{ekvc@setup@hashkeys}
+\ekvpDefType{ekvc@setup@hashkeys}{short}
+ {%
+ \let\ekvc@long\ekv@empty
+ \expandafter\ekvc@SetupHashKeys@a\detokenize{#1}\ekv@stop{#3}%
+ }
+\ekvpDefType{ekvc@setup@hashkeys}{long}
+ {%
+ \let\ekvc@long\long
+ \let\ekvc@any@long\long
+ \expandafter\ekvc@SetupHashKeys@a\detokenize{#1}\ekv@stop{#3}%
+ }
+\ekvpDefNoType{ekvc@setup@hashkeys}
+ {%
+ \let\ekvc@long\ekv@empty
+ \expandafter\ekvc@SetupHashKeys@a\detokenize{#1}\ekv@stop{#3}%
+ }
+\ekvpDefNoValue{ekvc@setup@hashkeys}
+ {%
+ \begingroup
+ \edef\ekvc@tmp{\detokenize{#1}}%
+ \expandafter
+ \endgroup
+ \ifx\ekvc@tripledots\ekvc@tmp
+ \ekvc@SetupHashKeys@unknown
+ \let\ekvc@any@long\long
+ \else
+ \ekvc@err@value@required{#1}%
+ \fi
+ }
+\protected\long\def\ekvc@SetupHashKeys@a#1\ekv@stop
+ {%
+ \begingroup\expandafter\endgroup
+ \expandafter\ekvc@SetupHashKeys@b\csname ekvc@hashmark@#1\endcsname{#1}%
+ }
+\protected\long\def\ekvc@SetupHashKeys@b#1#2#3%
+ {%
+ \long\def\ekvc@tmp##1##2#1##3{##2#1{##1}}%
+ \ifx\ekvc@long\long
+ \else
+ \expandafter\let\csname ekvc@\ekvc@set(#2)\endcsname\ekvc@tmp
+ \edef\ekvc@tmp##1%
+ {%
+ \ekv@unexpanded\expandafter{\csname ekvc@\ekvc@set(#2)\endcsname}%
+ {##1}%
+ }%
+ \fi
+ \ekvlet\ekvc@set{#2}\ekvc@tmp
+ \edef\ekvc@initials{\ekv@unexpanded\expandafter{\ekvc@initials#1{#3}}}%
+ \ekvc@setup@hashmacro{#2}%
+ }
+\def\ekvc@SetupHashKeys@unknown#1%
+ {%
+ \protected\def\ekvc@SetupHashKeys@unknown
+ {%
+ \ekvletunknown\ekvc@set\ekvc@hash@unknown@kv
+ \ekvletunknownNoVal\ekvc@set\ekvc@hash@unknown@k
+ \edef\ekvc@initials{\ekv@unexpanded\expandafter{\ekvc@initials#1{}}}%
+ \ekvc@setup@hashmacro{...}%
+ }%
+ \long\def\ekvc@hash@unknown@kv##1##2##3##4#1##5{##4#1{##5, {##3} = {##1} }}%
+ \long\def\ekvc@hash@unknown@k##1##2##3#1##4{##3#1{##4, {##2} }}%
+ }
+\begingroup\expandafter\endgroup
+\expandafter\ekvc@SetupHashKeys@unknown
+ \csname ekvc@hashmark@\ekvc@tripledots\endcsname
+\protected\def\ekvc@setup@hashmacro#1%
+ {%
+ \ekv@ifdefined{ekvc@fasthash@#1}{}%
+ {%
+ \begingroup
+ \edef\ekvc@tmp
+ {%
+ \long\gdef
+ \ekv@unexpanded\expandafter{\csname ekvc@fasthash@#1\endcsname}%
+ ####1%
+ \ekv@unexpanded\expandafter
+ {\csname ekvc@hashmark@#1\endcsname}%
+ ####2####3\ekv@unexpanded{\ekvc@stop}%
+ {####2}%
+ \long\gdef
+ \ekv@unexpanded\expandafter{\csname ekvc@safehash@#1\endcsname}%
+ ####1%
+ {%
+ \ekv@unexpanded\expandafter
+ {\csname ekvc@@safehash@#1\endcsname}%
+ ####1\ekv@unexpanded{\ekvc@mark}{}%
+ \ekv@unexpanded\expandafter
+ {%
+ \csname ekvc@hashmark@#1\endcsname{}%
+ \ekvc@mark{\ekvc@err@missing@hash{#1}}\ekvc@stop
+ }%
+ }%
+ \long\gdef
+ \ekv@unexpanded\expandafter
+ {\csname ekvc@@safehash@#1\endcsname}%
+ ####1%
+ \ekv@unexpanded\expandafter
+ {\csname ekvc@hashmark@#1\endcsname}%
+ ####2####3\ekv@unexpanded{\ekvc@mark}####4####5%
+ \ekv@unexpanded{\ekvc@stop}%
+ {%
+ ####4{####2}%
+ }%
+ \long\gdef\ekv@unexpanded\expandafter
+ {\csname ekvc@fastsplithash@#1\endcsname}%
+ ####1%
+ \ekv@unexpanded\expandafter
+ {\csname ekvc@hashmark@#1\endcsname}%
+ ####2####3\ekv@unexpanded{\ekvc@stop}####4%
+ {%
+ ####4{####2}%
+ }%
+ \long\gdef\ekv@unexpanded\expandafter
+ {\csname ekvc@safesplithash@#1\endcsname}####1%
+ {%
+ \ekv@unexpanded\expandafter
+ {\csname ekvc@@safesplithash@#1\endcsname}%
+ ####1\ekv@unexpanded{\ekvc@mark\ekvc@safe@after@hash}%
+ \ekv@unexpanded\expandafter
+ {%
+ \csname ekvc@hashmark@#1\endcsname{}%
+ \ekvc@mark
+ {\ekvc@err@missing@hash{#1}\ekvc@safe@after@hash}%
+ \ekvc@stop
+ }%
+ }%
+ \long\gdef\ekv@unexpanded\expandafter
+ {\csname ekvc@@safesplithash@#1\endcsname}%
+ ####1%
+ \ekv@unexpanded\expandafter
+ {\csname ekvc@hashmark@#1\endcsname}%
+ ####2####3\ekv@unexpanded{\ekvc@mark}####4####5%
+ \ekv@unexpanded{\ekvc@stop}%
+ {%
+ ####4{####2}%
+ }%
+ }%
+ \ekvc@tmp
+ \endgroup
+ }%
+ }
+\long\def\ekvcValue#1%
+ {%
+ \ekv@unexpanded
+ \expandafter\ekvcValue@\detokenize{#1}\ekvc@stop
+ }
+\def\ekvcValue@#1\ekvc@stop
+ {%
+ \ekv@ifdefined{ekvc@safehash@#1}%
+ {\csname ekvc@safehash@#1\endcsname}%
+ {\ekvc@err@unknown@hash{#1}\@firstoftwo{{}}}%
+ }
+\long\def\ekvcValueFast#1#2%
+ {\csname ekvc@fasthash@\detokenize{#1}\endcsname#2\ekvc@stop}
+\long\def\ekvcValueSplit#1%
+ {\expandafter\ekvcValueSplit@\detokenize{#1}\ekvc@stop}
+\def\ekvcValueSplit@#1\ekvc@stop
+ {%
+ \ekv@ifdefined{ekvc@safesplithash@#1}%
+ {\csname ekvc@safesplithash@#1\endcsname}%
+ {\ekvc@err@unknown@hash{#1}\ekvcValueSplit@recover}%
+ }
+\long\def\ekvcValueSplit@recover#1#2{#2{}}
+\long\def\ekvc@safe@after@hash#1#2%
+ {%
+ #2{#1}%
+ }
+\long\def\ekvcValueSplitFast#1#2%
+ {\csname ekvc@fastsplithash@\detokenize{#1}\endcsname#2\ekvc@stop}
+\long\def\ekvc@safehash@#1{\ekvc@err@empty@hash{}}
+\long\def\ekvc@fasthash@#1\ekvc@stop{\ekvc@err@empty@hash}
+\long\def\ekvc@safesplithash@#1#2{\ekvc@err@empty@hash#2{}}
+\long\def\ekvc@fastsplithash@#1\ekvc@stop#2{\ekvc@err@empty@hash#2{}}
+\ekvpNewParser{ekvc@setup@secondary}
+\ekvpValueAlwaysRequired{ekvc@setup@secondary}
+\protected\long\def\ekvcSecondaryKeys#1%
+ {%
+ \edef\ekvc@set{\string#1}%
+ \let\ekvc@long\ekv@empty
+ \ekvpParse@unsafe\ekvp@@p@ekvc@setup@secondary
+ }
+\protected\long\def\ekvcChange#1%
+ {%
+ \ekvifdefinedset{\string#1}%
+ {%
+ \ekvc@ifdefined#1%
+ {\ekvc@change#1}%
+ {\ekvc@err@no@key@macro#1\@gobble}%
+ }%
+ {\ekvc@err@no@key@macro#1\@gobble}%
+ }
+\protected\def\ekvc@change#1%
+ {\expandafter\ekvc@change@a\meaning#1\ekv@stop#1}
+\def\ekvc@change@a#1%
+ {%
+ \protected\def\ekvc@change@a##1#1##2->##3\ekv@stop
+ {%
+ \ekvc@change@iflong{##1}%
+ {\ekvc@change@b{}}%
+ {\ekvc@change@b{\long}}%
+ }%
+ }
+\expandafter\ekvc@change@a\expandafter{\detokenize{macro:}}
+\protected\def\ekvc@change@b#1#2%
+ {\expandafter\ekvc@change@c\expandafter{#2\ekvc@stop}{#1}#2}
+\ekv@exparg{\protected\long\def\ekvc@change@c#1#2#3#4}%
+ {%
+ \expandafter\iffalse\expandafter{\expandafter{\expandafter\fi
+ \ekvset{\string#3}{#4}%
+ \ekvc@change@d{#2}{#3}%
+ #1%
+ }}%
+ }
+\protected\def\ekvc@change@d#1#2%
+ {#1\edef#2##1{\expandafter\ekvc@change@e\iffalse}\fi}
+\long\def\ekvc@change@e#1\ekvc@stop
+ {\ekv@unexpanded{#1}##1\ekv@unexpanded\expandafter{\iffalse}\fi}
+\def\ekvc@change@iflong#1%
+ {%
+ \protected\def\ekvc@change@iflong##1%
+ {\expandafter\ekv@ifempty\expandafter{\ekvc@change@iflong@##1#1}}%
+ \def\ekvc@change@iflong@##1#1{}
+ }
+\expandafter\ekvc@change@iflong\expandafter{\string\long}
+\long\def\ekvcPass#1#2%
+ {%
+ \ekvifdefined{\string#1}{#2}%
+ {\csname\ekv@name{\string#1}{#2}\endcsname}%
+ {\ekvc@err@unknown@key@or@macro{#1}{#2}\@gobble}%
+ }
+\ekvpDefPrefixLet{ekvc@setup@secondary}{long}\ekvc@long\long\ekv@empty
+\ekvpDefType{ekvc@setup@secondary}{meta}
+ {\ekvc@type@meta\ekv@exparg\ekvc@long{##1}\ekvlet{#1}{#3}}
+\ekvpDefType{ekvc@setup@secondary}{nmeta}
+ {\ekvc@assert@not@long\ekvc@type@meta\ekv@expargtwice{}{}\ekvletNoVal{#1}{#3}}
+\protected\long\def\ekvc@type@meta#1#2#3#4#5#6%
+ {%
+ #1\ekvc@type@meta@{\ekvmorekv{#6}}{#2}{#3}%
+ #4\ekvc@set{#5}\ekvc@tmp
+ }
+\protected\long\def\ekvc@type@meta@#1#2#3{#2\def\ekvc@tmp#3{#1}}
+\ekvpDefType{ekvc@setup@secondary}{alias}
+ {%
+ \ekvc@assert@not@long
+ \ekvc@assert@k@or@p@defined{#3}%
+ \ekvifdefined\ekvc@set{#3}{\ekvletkv\ekvc@set{#1}\ekvc@set{#3}}{}%
+ \ekvifdefinedNoVal\ekvc@set{#3}{\ekvletkvNoVal\ekvc@set{#1}\ekvc@set{#3}}{}%
+ }
+\ekvpDefType{ekvc@setup@secondary}{default}
+ {%
+ \ekvc@assert@defined{#1}%
+ \ekvc@assert@not@long
+ \edef\ekvc@tmp
+ {%
+ \ekv@unexpanded\expandafter
+ {\csname\ekv@name\ekvc@set{#1}\endcsname{#3}}%
+ }%
+ \ekvletNoVal\ekvc@set{#1}\ekvc@tmp
+ }
+\def\ekvc@enum@name#1#2#3{ekvc#1(#2)#3}
+\ekvpDefType{ekvc@setup@secondary}{enum}
+ {\ekvpAssertTwoValues{#3}\ekvc@type@enum\ekvc@type@enum@{#1}#3}
+\ekvpDefType{ekvc@setup@secondary}{choice}
+ {\ekvpAssertTwoValues{#3}\ekvc@type@enum\ekvc@type@choice@{#1}#3}
+\protected\long\def\ekvc@type@enum#1#2#3%
+ {%
+ \ekvc@assert@defined{#3}%
+ \ekvc@long\edef\ekvc@tmp##1%
+ {%
+ \ekv@unexpanded{\expandafter\ekvc@h@enum\detokenize}{##1}%
+ \ekv@unexpanded{\ekvc@stop}%
+ {\ekvc@set}{#2}%
+ }%
+ \ekvlet\ekvc@set{#2}\ekvc@tmp
+ \def\ekvc@tmp{0}%
+ \expandafter\ekvcsvloop\expandafter
+ {\expandafter#1\csname\ekv@name\ekvc@set{#3}\endcsname{#2}}%
+ }
+\ekv@exparg{\protected\long\def\ekvc@type@enum@#1#2#3}%
+ {%
+ \expandafter\expandafter\expandafter\edef\expandafter
+ \csname\ekvc@enum@name\ekvc@set{#2}{\detokenize{#3}}\endcsname
+ {\ekv@unexpanded{#1}{\ekvc@tmp}}%
+ \edef\ekvc@tmp{\the\numexpr\ekvc@tmp+1\relax}%
+ }
+\ekv@exparg{\protected\long\def\ekvc@type@choice@#1#2#3}%
+ {%
+ \expandafter\expandafter\expandafter\edef\expandafter
+ \csname\ekvc@enum@name\ekvc@set{#2}{\detokenize{#3}}\endcsname
+ {\ekv@unexpanded{#1{#3}}}%
+ }
+\ekv@if@lastnamedcs
+ {%
+ \ekv@exparg{\def\ekvc@h@enum#1\ekvc@stop#2#3}%
+ {%
+ \expandafter\ifcsname\ekvc@enum@name{#2}{#3}{#1}\endcsname
+ \expandafter\ekvc@h@enum@\lastnamedcs
+ \fi
+ \ekvc@err@unknown@enum{#2}{#3}{#1}%
+ }
+ \def\ekvc@h@enum@#1\fi\ekvc@err@unknown@enum#2#3#4%
+ {%
+ \fi
+ \ifx#1\relax
+ \ekvc@err@unknown@enum{#2}{#3}{#4}%
+ \expandafter\@gobble
+ \fi
+ #1%
+ }
+ }
+ {%
+ \def\ekvc@h@enum#1%
+ {%
+ \def\ekvc@h@enum##1\ekvc@stop##2##3%
+ {%
+ \expandafter\ekvc@h@enum@
+ \csname\ifcsname#1\endcsname#1\else relax\fi\endcsname
+ {##2}{##3}{##1}%
+ }%
+ }
+ \expandafter\ekvc@h@enum\expandafter{\ekvc@enum@name{#2}{#3}{#1}}
+ \def\ekvc@h@enum@#1#2#3#4%
+ {%
+ \ifx#1\relax
+ \ekvc@err@unknown@enum{#2}{#3}{#4}%
+ \expandafter\@gobble
+ \fi
+ #1%
+ }
+ }
+\let\ekvc@enum@name\ekvc@undefined
+\ekvpDefType{ekvc@setup@secondary}{aggregate}
+ {%
+ \let\ekvc@type@aggregate@ifexpanded\@secondoftwo
+ \ekvc@type@aggregate{#1}{#3}%
+ }
+\ekvpDefType{ekvc@setup@secondary}{e-aggregate}
+ {%
+ \let\ekvc@type@aggregate@ifexpanded\@firstoftwo
+ \ekvc@type@aggregate{#1}{#3}%
+ }
+\protected\long\def\ekvc@type@aggregate#1#2%
+ {%
+ \ekvc@assert@not@long
+ \ekvpAssertTwoValues{#2}%
+ \ekvc@type@aggregate@a
+ \ekvc@type@aggregate@long\ekvc@type@aggregate@short
+ {#1}#2%
+ }
+\protected\long\def\ekvc@type@aggregate@a#1#2#3#4#5%
+ {%
+ \ekvc@assert@defined{#4}%
+ \def\ekvc@type@aggregate@tmp##1##2{#5}%
+ \begingroup\expandafter\endgroup
+ \expandafter\ekvc@type@aggregate@b
+ \csname\ekv@name\ekvc@set{#4}\expandafter\endcsname
+ \csname ekvc@\ekvc@set(#4)\endcsname
+ #1#2%
+ {#3}%
+ }
+\protected\long\def\ekvc@type@aggregate@b#1#2#3#4%
+ {%
+ \ekvc@type@aggregate@check@long#1#2%
+ {#3#1}%
+ {#4#2}%
+ }
+\protected\long\def\ekvc@type@aggregate@check@long#1#2%
+ {\expandafter\ekvc@type@aggregate@check@long@a\detokenize{#2}\ekv@stop#1}
+\protected\long\def\ekvc@type@aggregate@check@long@a#1\ekv@stop#2%
+ {%
+ \def\ekvc@type@aggregate@check@long@@##1#1{}%
+ \expandafter\ekvc@type@aggregate@check@long@b\meaning#2\ekv@stop{#1}%
+ }
+\protected\def\ekvc@type@aggregate@check@long@b#1\ekv@stop#2%
+ {\expandafter\ekv@ifempty\expandafter{\ekvc@type@aggregate@check@long@@#1#2}}
+\protected\long\def\ekvc@type@aggregate@long#1%
+ {%
+ \begingroup\expandafter\endgroup\expandafter
+ \ekvc@type@aggregate@long@
+ \csname\ekvc@extract@mark#1\expandafter\endcsname
+ \expandafter{\ekvc@type@aggregate@tmp{##3}{##1}}%
+ }
+\protected\long\def\ekvc@type@aggregate@long@#1#2#3%
+ {%
+ \ekvc@type@aggregate@ifexpanded
+ {%
+ \long\def\ekvc@type@aggregate@tmp##1##2#1##3%
+ {\ekv@expanded{\ekv@unexpanded{##2#1}{#2}}}%
+ }%
+ {\long\def\ekvc@type@aggregate@tmp##1##2#1##3{##2#1{#2}}}%
+ \ekvlet\ekvc@set{#3}\ekvc@type@aggregate@tmp
+ }
+\protected\long\def\ekvc@type@aggregate@short#1#2%
+ {%
+ \begingroup\expandafter\endgroup\expandafter
+ \ekvc@type@aggregate@short@
+ \csname\ekvc@extract@mark#1\expandafter\endcsname
+ \csname ekvc@\ekvc@set(#2)\expandafter\endcsname
+ \expandafter{\ekvc@type@aggregate@tmp{##3}{##1}}%
+ {#2}%
+ }
+\protected\long\def\ekvc@type@aggregate@short@#1#2#3#4%
+ {%
+ \ekvdef\ekvc@set{#4}{#2{##1}}%
+ \ekvc@type@aggregate@ifexpanded
+ {\long\def#2##1##2#1##3{\ekv@expanded{\ekv@unexpanded{##2#1}{#3}}}}%
+ {\long\def#2##1##2#1##3{##2#1{#3}}}%
+ }
+\ekvpDefType{ekvc@setup@secondary}{process}
+ {%
+ \ekvpAssertTwoValues{#3}%
+ \ifx\ekvc@long\long
+ \ekv@fi@firstoftwo
+ \fi
+ \@secondoftwo
+ {%
+ \ekvc@type@aggregate@a
+ \ekvc@type@process@long\ekvc@type@process@long
+ }%
+ {%
+ \ekvc@type@aggregate@a
+ \ekvc@type@process@short\ekvc@type@process@short
+ }%
+ {#1}#3%
+ }
+\protected\long\def\ekvc@type@process@long#1%
+ {%
+ \begingroup\expandafter\endgroup\expandafter
+ \ekvc@type@process@long@
+ \csname\ekvc@extract@mark#1\expandafter\endcsname
+ \expandafter{\ekvc@type@aggregate@tmp{##3}{##1}}%
+ }
+\protected\long\def\ekvc@type@process@long@#1#2#3%
+ {%
+ \long\def\ekvc@type@aggregate@tmp##1##2#1##3{#2##2#1{##3}}%
+ \ekvlet\ekvc@set{#3}\ekvc@type@aggregate@tmp
+ }
+\protected\long\def\ekvc@type@process@short#1#2%
+ {%
+ \begingroup\expandafter\endgroup\expandafter
+ \ekvc@type@process@short@
+ \csname\ekvc@extract@mark#1\expandafter\endcsname
+ \csname ekvc@\ekvc@set(#2)\expandafter\endcsname
+ \expandafter{\ekvc@type@aggregate@tmp{##3}{##1}}%
+ {#2}%
+ }
+\protected\long\def\ekvc@type@process@short@#1#2#3#4%
+ {%
+ \ekvdef\ekvc@set{#4}{#2{##1}}%
+ \long\def#2##1##2#1##3{#3##2#1{##3}}%
+ }
+\ekvpDefType{ekvc@setup@secondary}{flag-bool}
+ {%
+ \ekvc@assert@not@long
+ \ekvpAssertOneValue{#3}%
+ \ifdefined#3\else\ekvcFlagNew#3\fi
+ \ekvdef\ekvc@set{#1}%
+ {%
+ \ekv@ifdefined{ekvc@flag@set@##1}%
+ {%
+ \csname ekvc@flag@set@##1\expandafter\endcsname
+ \ekvcFlagHeight#3\ekv@stop#3%
+ }%
+ {\ekvc@err@invalid@bool{##1}}%
+ }%
+ }
+\protected\def\ekvc@type@flag#1#2#3%
+ {%
+ \ekvc@assert@not@long
+ \ekvpAssertOneValue{#3}%
+ \ifdefined#3\else\ekvcFlagNew#3\fi
+ \ekv@exparg{\ekvdefNoVal\ekvc@set{#2}}{#1#3}%
+ }
+\ekvpDefType{ekvc@setup@secondary}{flag-true}
+ {\ekvc@type@flag\ekvcFlagSetTrue{#1}{#3}}
+\ekvpDefType{ekvc@setup@secondary}{flag-false}
+ {\ekvc@type@flag\ekvcFlagSetFalse{#1}{#3}}
+\ekvpDefType{ekvc@setup@secondary}{flag-raise}
+ {\ekvc@type@flag\ekvcFlagRaise{#1}{#3}}
+\def\ekvc@flag@name{ekvcf\string}
+\def\ekvc@flag@namescheme#1#2{ekvch#2#1}
+\let\ekvcFlagHeight\number
+\protected\def\ekvcFlagNew#1%
+ {%
+ \edef#1%
+ {%
+ \ekv@unexpanded{\ekvc@flag@height}%
+ \ekv@unexpanded\expandafter{\csname\ekvc@flag@name#1\endcsname}%
+ }%
+ \ekv@expargtwice
+ {\expandafter\def\csname\ekvc@flag@name#1\endcsname##1}%
+ {\expandafter\ekvc@flag@namescheme\expandafter{\string#1}{##1}}%
+ }
+\def\ekvc@flag@height#1%
+ {%
+ \ifcsname#10\endcsname
+ \ekvc@flag@height@1\ekv@stop#1%
+ \fi
+ \@firstofone{0} % leave this space
+ }
+\def\ekvc@flag@height@#1\ekv@stop#2\fi\@firstofone#3%
+ {%
+ \fi
+ \ifcsname#2{#1}\endcsname
+ \expandafter\ekvc@flag@height@\the\numexpr#1+1\relax\ekv@stop#2%
+ \fi
+ \@firstofone{#1}%
+ }
+\ekv@exparg{\def\ekvcFlagRaise#1}%
+ {%
+ \expandafter\expandafter\expandafter\@gobble\expandafter
+ \csname\ekvc@flag@namescheme{\string#1}{\ekvcFlagHeight#1}\endcsname
+ }
+\def\ekvcFlagSetTrue#1%
+ {\expandafter\ekvc@flag@set@true\ekvcFlagHeight#1\ekv@stop#1}
+\def\ekvcFlagSetFalse#1%
+ {\expandafter\ekvc@flag@set@false\ekvcFlagHeight#1\ekv@stop#1}
+\def\ekvc@flag@set@true#1%
+ {%
+ \def\ekvc@flag@set@true##1\ekv@stop##2%
+ {%
+ \ifodd##1
+ \ekv@fi@gobble
+ \fi
+ \@firstofone{\expandafter\@gobble\csname#1\endcsname}%
+ }%
+ \def\ekvc@flag@set@false##1\ekv@stop##2%
+ {%
+ \ifodd##1
+ \ekv@fi@firstofone
+ \fi
+ \@gobble{\expandafter\@gobble\csname#1\endcsname}%
+ }%
+ }
+\expandafter\ekvc@flag@set@true\expandafter
+ {\ekvc@flag@namescheme{\string#2}{#1}}
+\def\ekvcFlagIf#1%
+ {%
+ \ifodd#1%
+ \ekv@fi@firstoftwo
+ \fi
+ \@secondoftwo
+ }
+\ekv@exparg{\def\ekvcFlagIfRaised#1}%
+ {%
+ \expandafter\ifcsname\ekvc@flag@namescheme{\string#1}0\endcsname
+ \ekv@fi@firstoftwo
+ \fi
+ \@secondoftwo
+ }
+\protected\def\ekvcFlagReset#1%
+ {\expandafter\ekvc@flag@reset\csname\ekvc@flag@name#1\endcsname{}}
+\protected\def\ekvcFlagResetGlobal#1%
+ {\expandafter\ekvc@flag@reset\csname\ekvc@flag@name#1\endcsname\global}
+\protected\def\ekvc@flag@reset#1#2%
+ {%
+ \ifcsname#10\endcsname
+ #2\expandafter\let\csname#10\endcsname\ekvc@undefined
+ \ekvc@flag@reset@1\ekv@stop#1{#2}%
+ \fi
+ }
+\protected\def\ekvc@flag@reset@#1\ekv@stop#2#3\fi
+ {%
+ \fi
+ \ifcsname#2{#1}\endcsname
+ #3\expandafter\let\csname#2{#1}\endcsname\ekvc@undefined
+ \expandafter\ekvc@flag@reset@\the\numexpr#1+1\relax\ekv@stop#2{#3}%
+ \fi
+ }
+\def\ekvcFlagGetHeight#1%
+ {\expandafter\ekvc@flag@get@height@single\ekvcFlagHeight#1\ekv@stop}
+\long\def\ekvc@flag@get@height@single#1\ekv@stop#2{#2{#1}}
+\def\ekvcFlagGetHeights#1%
+ {%
+ \ekvc@flag@get@heights#1\ekv@stop{}%
+ }
+\def\ekvc@flag@get@heights#1%
+ {%
+ \ekv@gobbleto@stop#1\ekvc@flag@get@heights@done\ekv@stop
+ \expandafter\ekvc@flag@get@heights@\ekvcFlagHeight#1\ekv@stop
+ }
+\def\ekvc@flag@get@heights@#1\ekv@stop#2\ekv@stop#3%
+ {\ekvc@flag@get@heights#2\ekv@stop{#3{#1}}}
+\long\def\ekvc@flag@get@heights@done
+ \ekv@stop
+ \expandafter\ekvc@flag@get@heights@\ekvcFlagHeight\ekv@stop\ekv@stop#1#2%
+ {#2{#1}}
+\def\ekvc@extract@mark#1{\expandafter\ekvc@extract@mark@\meaning#1\ekv@stop}
+\begingroup
+\lccode`;=`#
+\lccode`/=`\\
+\lowercase{\endgroup
+\def\ekvc@extract@mark@#1:#2/#3 ;#4\ekv@stop{#3}%
+}
+\ekv@exparg{\def\ekvc@assert@not@long}%
+ {\ekvpAssertIfNot{\ifx\ekvc@long\long}{`long' not accepted}}
+\long\def\ekvc@assert@defined#1%
+ {\ekvpAssertTF{\ekvifdefined\ekvc@set{#1}}{undefined key `#1'}}
+\long\def\ekvc@assert@k@or@p@defined#1%
+ {%
+ \ekvpAssertTF
+ {\ekvifdefined\ekvc@set{#1}\@firstoftwo{\ekvifdefinedNoVal\ekvc@set{#1}}}%
+ {undefined key `#1'}%
+ }
+\protected\long\def\ekvc@errm#1{\errmessage{expkv-cs Error: #1}}
+\protected\long\def\ekvc@err@toomany#1%
+ {\ekvc@errm{Too many keys for macro `\string#1'}}
+\protected\long\def\ekvc@err@value@required#1%
+ {\ekvc@errm{Missing value for key `\ekv@unexpanded{#1}'}}
+\protected\long\def\ekvc@err@already@defined#1%
+ {\ekvc@errm{Macro `\string#1' already defined}}
+\protected\long\def\ekvc@err@no@key@macro#1%
+ {\ekvc@errm{\string#1 is no key=val macro}}
+\ekv@exparg{\long\def\ekvc@err#1}{\ekverr{expkv-cs}{#1}}
+\long\def\ekvc@err@unknown@hash#1{\ekvc@err{unknown hash `#1'}}
+\long\def\ekvc@err@missing@hash#1{\ekvc@err{hash `#1' not found}}
+\long\def\ekvc@err@empty@hash{\ekvc@err{empty hash}}
+\def\ekvc@err@invalid@bool#1{\ekvc@err{invalid boolean value `#1'}}
+\long\def\ekvc@err@unknown@key@or@macro#1#2%
+ {\ekvc@err{unknown key `#2' for #1}}
+\def\ekvc@err@unknown@enum#1#2#3%
+ {\ekvc@err{unknown choice `#3' for `#2' in #1}}
+\catcode`\@=\ekvc@tmp
+%%
+%%
+%% End of file `expkv-cs.tex'.
diff --git a/Master/texmf-dist/tex/generic/expkv-bundle/expkv-def.tex b/Master/texmf-dist/tex/generic/expkv-bundle/expkv-def.tex
new file mode 100644
index 00000000000..89ddadbf916
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/expkv-bundle/expkv-def.tex
@@ -0,0 +1,867 @@
+%%
+%% This is file `expkv-def.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% expkv-def.dtx (with options: `tex')
+%%
+%% ----------------------------------------------------------------
+%% expkv-bundle -- an expandable key=val implementation and friends
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+%% Copyright (C) 2020-2023 Jonathan P. Spratte
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the files expkv-bundle.ins
+%% expkv.dtx
+%% expkv-cs.dtx
+%% expkv-def.dtx
+%% expkv-opt.dtx
+%% expkv-pop.dtx
+%% and the derived files expkv.sty
+%% expkv.tex
+%% t-expkv.tex
+%% expkv-cs.sty
+%% expkv-cs.tex
+%% t-expkv-cs.tex
+%% expkv-def.sty
+%% expkv-def.tex
+%% t-expkv-def.tex
+%% expkv-opt.sty
+%% expkv-pop.sty
+%% expkv-pop.tex
+%% t-expkv-pop.tex
+%%
+%% as well as any documentation files shipped with it.
+%%
+\input expkv-pop
+\expandafter\ifx\csname ekvdVersion\endcsname\relax
+\else
+ \expandafter\endinput
+\fi
+\def\ekvdVersion{1.0}
+\def\ekvdDate{2023-01-23}
+\csname ekvd@tmp\endcsname
+\expandafter\chardef\csname ekvd@tmp\endcsname=\catcode`\@
+\catcode`\@=11
+\protected\long\def\ekvd@ifprimitive#1%
+ {%
+ \begingroup
+ \edef\ekvd@tmpa{\string #1}%
+ \edef\ekvd@tmpb{\meaning#1}%
+ \expandafter
+ \endgroup
+ \ifx\ekvd@tmpa\ekvd@tmpb
+ \ekv@fi@firstoftwo
+ \fi
+ \@secondoftwo
+ }
+\protected\def\ekvd@clear@prefixes
+ {%
+ \let\ekvd@long\ekv@empty
+ \let\ekvd@prot\ekv@empty
+ \let\ekvd@ifalso\@secondoftwo
+ \let\ekvd@do@new\@gobbletwo
+ }
+\ekvd@clear@prefixes
+\ekvpNewParser{ekvd@definekeys}
+\ekvpDefNoValuePrefix{ekvd@definekeys}
+ {\let\ekvd@ifnoarg\@firstoftwo}
+ {\let\ekvd@ifnoarg\@secondoftwo}
+\ekvpDefPrefixLet{ekvd@definekeys}{long} \ekvd@long\long \ekv@empty
+\ekvpDefPrefixLet{ekvd@definekeys}{protected}\ekvd@prot\protected\ekv@empty
+\ekvpDefPrefixLet{ekvd@definekeys}{protect} \ekvd@prot\protected\ekv@empty
+\ekvpDefPrefixLet{ekvd@definekeys}{also}\ekvd@ifalso\@firstoftwo\@secondoftwo
+\ekvpDefPrefixLet{ekvd@definekeys}{new}\ekvd@do@new\ekvd@assert@new\@gobbletwo
+\ekvpDefAutoPrefix{ekvd@definekeys}{\edef\ekvd@cur{\detokenize{#3}}}{}
+\protected\edef\ekvdefinekeys#1%
+ {%
+ \ekv@unexpanded{\def\ekvd@set}{#1}%
+ \ekv@unexpanded{\ekvpParse@unsafe@auto\ekvp@@p@ekvd@definekeys}%
+ \ekv@unexpanded\expandafter{\csname\ekvp@@p@ekvd@definekeys{ppa}\endcsname}%
+ }
+\protected\def\ekvd@def@type#1#2%
+ {%
+ \ekv@exparg{\ekvpDefType{ekvd@definekeys}{#1}}
+ {%
+ \expandafter\expandafter\csname ekvd@th@#1\endcsname
+ \detokenize{##1}\ekv@stop{##2}{##3}%
+ }%
+ \long\expandafter\def\csname ekvd@th@#1\endcsname##1\ekv@stop##2##3{#2}%
+ }
+\protected\long\def\ekvd@def@type@fwd#1#2%
+ {\ekvpDefType{ekvd@definekeys}{#1}{\ekv@exparg{#2}{\detokenize{##1}}{##3}}}
+\ekvd@def@type{set}
+ {\ekvd@ifnoarg{\ekvd@type@set{#1}{#1}}{\ekvd@type@set{#1}{#3}}}
+\protected\def\ekvd@type@set#1#2%
+ {%
+ \ekvd@assert@not@long
+ \ekvd@assert@not@protected
+ \ekvd@do@new{NoVal}{#1}%
+ \ekv@ifempty{#2}%
+ {\ekvd@err@missing@definition}%
+ {%
+ \ekvd@ifalso
+ {%
+ \ekv@expargtwice{\ekvd@add@noval{#1}}%
+ {\ekvchangeset{#2}}%
+ \ekvd@assert@not@protected@also
+ }%
+ {\ekv@expargtwice{\ekvdefNoVal\ekvd@set{#1}}{\ekvchangeset{#2}}}%
+ }%
+ }
+\ekvd@def@type@fwd{noval}{\ekvd@type@noval\def}
+\ekvd@def@type@fwd{enoval}{\ekvd@type@noval\edef}
+\protected\long\def\ekvd@type@noval#1#2#3%
+ {%
+ \ekvd@do@new{NoVal}{#2}%
+ \ekvd@assert@arg
+ \ekvd@assert@not@long
+ \ekvd@prot#1\ekvd@tmp{#3}%
+ \ekvd@ifalso
+ {\ekv@exparg{\ekvd@add@noval{#2}}\ekvd@tmp{}}%
+ {\ekvletNoVal\ekvd@set{#2}\ekvd@tmp}%
+ }
+\ekvd@def@type@fwd{code}{\ekvd@type@code\def}
+\ekvd@def@type@fwd{ecode}{\ekvd@type@code\edef}
+\protected\long\def\ekvd@type@code#1#2#3%
+ {%
+ \ekvd@do@new{}{#2}%
+ \ekvd@assert@arg
+ \ekvd@prot\ekvd@long#1\ekvd@tmp##1{#3}%
+ \ekvd@ifalso
+ {\ekv@exparg{\ekvd@add@val{#2}}{\ekvd@tmp{##1}}{}}%
+ {\ekvlet\ekvd@set{#2}\ekvd@tmp}%
+ }
+\ekvd@def@type@fwd{default}{\ekvd@type@default{\ekv@unexpanded\expandafter}{}}
+\ekvd@def@type@fwd{odefault}
+ {\ekvd@type@default{\ekv@unexpanded\expandafter\expandafter\expandafter}{}}
+\ekvpLet{ekvd@definekeys}{type}{qdefault}{odefault}
+\ekvd@def@type@fwd{fdefault}
+ {\ekvd@type@default{\ekv@unexpanded\expandafter}{\romannumeral`\^^@}}
+\protected\long\def\ekvd@type@default#1#2#3#4%
+ {%
+ \ekvd@assert@arg
+ \ekvd@do@new{NoVal}{#3}%
+ \ekvd@assert@not@long
+ \ekvifdefined\ekvd@set{#3}%
+ {%
+ \ekvd@prot\edef\ekvd@tmp
+ {#1{#2\csname\ekv@name\ekvd@set{#3}\endcsname{#4}}}%
+ \ekvd@ifalso
+ {\ekv@exparg{\ekvd@add@noval{#3}}\ekvd@tmp{}}%
+ {\ekvletNoVal\ekvd@set{#3}\ekvd@tmp}%
+ }%
+ {\ekvd@err@undefined@key{#3}}%
+ }
+\ekvd@def@type{edefault}
+ {%
+ \ekvd@assert@arg
+ \ekvd@do@new{NoVal}{#1}%
+ \ekvd@assert@not@long
+ \ekvifdefined\ekvd@set{#1}%
+ {%
+ \ekvd@prot\edef\ekvd@tmp
+ {%
+ \ekv@unexpanded\ekv@expanded
+ {{\csname\ekv@name\ekvd@set{#1}\endcsname{#3}}}%
+ }%
+ \ekvd@ifalso
+ {\ekv@exparg{\ekvd@add@noval{#1}}\ekvd@tmp{}}%
+ {\ekvletNoVal\ekvd@set{#1}\ekvd@tmp}%
+ }%
+ {\ekvd@err@undefined@key{#1}}%
+ }
+\ekvd@def@type@fwd{initial}{\ekvd@type@initial\@firstofone}
+\ekvd@def@type@fwd{oinitial}{\ekvd@type@initial\ekv@exparg}
+\ekvd@def@type@fwd{einitial}{\ekvd@type@initial\ekv@expandedarg}
+\ekvd@def@type@fwd{finitial}{\ekvd@type@initial\ekv@fexparg}
+\long\def\ekvd@type@initial#1#2#3%
+ {%
+ \ekvd@assert@not@new
+ \ekvd@assert@not@also
+ \ekvd@assert@not@long
+ \ekvd@assert@not@protected
+ \ekvd@ifnoarg
+ {%
+ \ekvifdefinedNoVal\ekvd@set{#2}%
+ {\csname\ekv@name\ekvd@set{#2}N\endcsname}%
+ {\ekvd@err@undefined@noval{#2}}%
+ }%
+ {%
+ \ekvifdefined\ekvd@set{#2}%
+ {#1{\csname\ekv@name\ekvd@set{#2}\endcsname}{#3}}%
+ {\ekvd@err@undefined@key{#2}}%
+ }%
+ }
+\ekvd@def@type@fwd{bool}{\ekvd@type@bool{}\iftrue\iffalse}
+\ekvd@def@type@fwd{gbool}{\ekvd@type@bool\global\iftrue\iffalse}
+\ekvd@def@type@fwd{boolTF}{\ekvd@type@bool{}\@firstoftwo\@secondoftwo}
+\ekvd@def@type@fwd{gboolTF}{\ekvd@type@bool\global\@firstoftwo\@secondoftwo}
+\ekvd@def@type@fwd{invbool}{\ekvd@type@bool{}\iffalse\iftrue}
+\ekvd@def@type@fwd{ginvbool}{\ekvd@type@bool\global\iffalse\iftrue}
+\ekvd@def@type@fwd{invboolTF}{\ekvd@type@bool{}\@secondoftwo\@firstoftwo}
+\ekvd@def@type@fwd{ginvboolTF}{\ekvd@type@bool\global\@secondoftwo\@firstoftwo}
+\protected\def\ekvd@type@bool#1#2#3#4#5%
+ {%
+ \ekvd@do@new{}{#4}%
+ \ekvd@do@new{NoVal}{#4}%
+ \ekvd@assert@filledarg{#5}%
+ \ekvd@newlet#5#3%
+ \ekvd@type@choice{#4}%
+ \protected\ekvdefNoVal\ekvd@set{#4}{#1\let#5#2}%
+ \protected\expandafter\def
+ \csname\ekvd@choice@name\ekvd@set{#4}{true}\endcsname
+ {#1\let#5#2}%
+ \protected\expandafter\def
+ \csname\ekvd@choice@name\ekvd@set{#4}{false}\endcsname
+ {#1\let#5#3}%
+ }
+\ekvd@def@type{boolpair}
+ {\ekvd@assert@twoargs{#3}\ekvd@type@boolpair{}\iftrue\iffalse{#1}#3}
+\ekvd@def@type{gboolpair}
+ {\ekvd@assert@twoargs{#3}\ekvd@type@boolpair\global\iftrue\iffalse{#1}#3}
+\ekvd@def@type{boolpairTF}
+ {\ekvd@assert@twoargs{#3}\ekvd@type@boolpair{}\@firstoftwo\@secondoftwo{#1}#3}
+\ekvd@def@type{gboolpairTF}
+ {%
+ \ekvd@assert@twoargs{#3}%
+ \ekvd@type@boolpair\global\@firstoftwo\@secondoftwo{#1}#3%
+ }
+\protected\def\ekvd@type@boolpair#1#2#3#4#5#6%
+ {%
+ \ekvd@do@new{}{#4}%
+ \ekvd@do@new{NoVal}{#4}%
+ \ekvd@newlet#5#3%
+ \ekvd@newlet#6#2%
+ \ekvd@type@choice{#4}%
+ \protected\ekvdefNoVal\ekvd@set{#4}{#1\let#5#2#1\let#6#3}%
+ \protected\expandafter\def
+ \csname\ekvd@choice@name\ekvd@set{#4}{true}\endcsname
+ {#1\let#5#2#1\let#6#3}%
+ \protected\expandafter\def
+ \csname\ekvd@choice@name\ekvd@set{#4}{false}\endcsname
+ {#1\let#5#3#1\let#6#2}%
+ }
+\ekvd@def@type@fwd{data}
+ {\ekvd@type@data\@secondoftwo\edef{####2}{\ekv@unexpanded{##1}}}
+\ekvd@def@type@fwd{edata}
+ {%
+ \ekvd@type@data\@secondoftwo\edef
+ {####2}{\ekv@unexpanded\ekv@expanded{{##1}}}%
+ }
+\ekvd@def@type@fwd{gdata}
+ {\ekvd@type@data\@secondoftwo\xdef{####2}{\ekv@unexpanded{##1}}}
+\ekvd@def@type@fwd{xdata}
+ {%
+ \ekvd@type@data\@secondoftwo\xdef
+ {####2}{\ekv@unexpanded\ekv@expanded{{##1}}}%
+ }
+\ekvd@def@type@fwd{dataT}{\ekvd@type@data\@gobble\edef{}{\ekv@unexpanded{##1}}}
+\ekvd@def@type@fwd{edataT}
+ {\ekvd@type@data\@gobble\edef{}{\ekv@unexpanded\ekv@expanded{{##1}}}}
+\ekvd@def@type@fwd{gdataT}{\ekvd@type@data\@gobble\xdef{}{\ekv@unexpanded{##1}}}
+\ekvd@def@type@fwd{xdataT}
+ {\ekvd@type@data\@gobble\xdef{}{\ekv@unexpanded\ekv@expanded{{##1}}}}
+\protected\def\ekvd@type@data#1#2#3#4#5#6%
+ {%
+ \ekvd@do@new{}{#5}%
+ \ekvd@assert@filledarg{#6}%
+ \ekvd@newlet#6#1%
+ \ekvd@ifalso
+ {%
+ \let\ekvd@prot\protected
+ \ekvd@add@val{#5}{\long#2#6####1#3{####1{#4}}}{}%
+ }%
+ {%
+ \protected\ekvd@long\ekvdef\ekvd@set{#5}%
+ {\long#2#6####1#3{####1{#4}}}%
+ }%
+ }
+\ekvd@def@type@fwd{box}{\ekvd@type@box{}}
+\ekvd@def@type@fwd{gbox}{\ekvd@type@box\global}
+\protected\def\ekvd@type@box#1#2#3%
+ {%
+ \ekvd@do@new{}{#2}%
+ \ekvd@assert@filledarg{#3}%
+ \ekvd@newreg#3{box}%
+ \ekvd@ifalso
+ {%
+ \let\ekvd@prot\protected
+ \ekvd@add@val{#2}{#1\setbox#3=\hbox{\begingroup##1\endgroup}}{}%
+ }%
+ {%
+ \protected\ekvd@long\ekvdef\ekvd@set{#2}%
+ {#1\setbox#3=\hbox{\begingroup##1\endgroup}}%
+ }%
+ }
+\ekvd@def@type@fwd{toks}{\ekvd@type@toks{}}
+\ekvd@def@type@fwd{gtoks}{\ekvd@type@toks\global}
+\protected\def\ekvd@type@toks#1#2#3%
+ {%
+ \ekvd@do@new{}{#2}%
+ \ekvd@assert@filledarg{#3}%
+ \ekvd@newreg#3{toks}%
+ \ekvd@ifalso
+ {%
+ \let\ekvd@prot\protected
+ \ekvd@add@val{#2}{#1#3={##1}}{}%
+ }%
+ {\protected\ekvd@long\ekvdef\ekvd@set{#2}{#1#3={##1}}}%
+ }
+\ekvd@ifprimitive\toksapp
+ {%
+ \ekvd@def@type@fwd{apptoks}{\ekvd@type@preapptoks\toksapp}
+ \ekvd@def@type@fwd{gapptoks}{\ekvd@type@preapptoks\gtoksapp}
+ \ekvd@def@type@fwd{pretoks}{\ekvd@type@preapptoks\tokspre}
+ \ekvd@def@type@fwd{gpretoks}{\ekvd@type@preapptoks\gtokspre}
+ \protected\def\ekvd@type@preapptoks#1#2#3%
+ {%
+ \ekvd@do@new{}{#2}%
+ \ekvd@assert@filledarg{#3}%
+ \ekvd@newreg#3{toks}%
+ \ekvd@ifalso
+ {%
+ \let\ekvd@prot\protected
+ \ekvd@add@val{#2}{#1#3{##1}}{}%
+ }%
+ {\protected\ekvd@long\ekvdef\ekvd@set{#2}{#1#3{##1}}}%
+ }
+ }
+ {%
+ \ekvd@def@type@fwd{apptoks}{\ekvd@type@apptoks{}}
+ \ekvd@def@type@fwd{gapptoks}{\ekvd@type@apptoks\global}
+ \protected\def\ekvd@type@apptoks#1#2#3%
+ {%
+ \ekvd@do@new{}{#2}%
+ \ekvd@assert@filledarg{#3}%
+ \ekvd@newreg#3{toks}%
+ \ekvd@ifalso
+ {%
+ \let\ekvd@prot\protected
+ \ekvd@add@val{#2}{#1#3=\expandafter{\the#3##1}}{}%
+ }%
+ {%
+ \protected\ekvd@long\ekvdef\ekvd@set{#2}%
+ {#1#3=\expandafter{\the#3##1}}%
+ }%
+ }
+ \ekvd@def@type@fwd{pretoks}{\ekvd@type@pretoks{}}
+ \ekvd@def@type@fwd{gpretoks}{\ekvd@type@pretoks\global}
+ \newtoks\ekvd@toks
+ \protected\def\ekvd@type@pretoks#1#2#3%
+ {%
+ \ekvd@do@new{}{#2}%
+ \ekvd@assert@filledarg{#3}%
+ \ekvd@newreg#3{toks}%
+ \ekvd@ifalso
+ {%
+ \let\ekvd@prot\protected
+ \ekvd@add@val{#2}%
+ {#1#3=\ekv@expanded{{\ekv@unexpanded{##1}\the#3}}}%
+ {}%
+ }%
+ {%
+ \protected\ekvd@long\ekvdef\ekvd@set{#2}%
+ {#1#3=\ekv@expanded{{\ekv@unexpanded{##1}\the#3}}}%
+ }%
+ }
+ }
+\ekvd@def@type@fwd {int}{\ekvd@type@register{count}{}{}}
+\ekvd@def@type@fwd{eint}{\ekvd@type@register{count}{}\numexpr}
+\ekvd@def@type@fwd{gint}{\ekvd@type@register{count}\global{}}
+\ekvd@def@type@fwd{xint}{\ekvd@type@register{count}\global\numexpr}
+\ekvd@def@type@fwd {dimen}{\ekvd@type@register{dimen}{}{}}
+\ekvd@def@type@fwd{edimen}{\ekvd@type@register{dimen}{}\dimexpr}
+\ekvd@def@type@fwd{gdimen}{\ekvd@type@register{dimen}\global{}}
+\ekvd@def@type@fwd{xdimen}{\ekvd@type@register{dimen}\global\dimexpr}
+\ekvd@def@type@fwd {skip}{\ekvd@type@register{skip}{}{}}
+\ekvd@def@type@fwd{eskip}{\ekvd@type@register{skip}{}\glueexpr}
+\ekvd@def@type@fwd{gskip}{\ekvd@type@register{skip}\global{}}
+\ekvd@def@type@fwd{xskip}{\ekvd@type@register{skip}\global\glueexpr}
+\protected\def\ekvd@type@register#1#2#3#4#5%
+ {%
+ \ekvd@do@new{}{#4}%
+ \ekvd@assert@filledarg{#5}%
+ \ekvd@newreg#5{#1}%
+ \ekvd@ifalso
+ {%
+ \let\ekvd@prot\protected
+ \ekvd@add@val{#4}{#2#5=#3##1\relax}{}%
+ }%
+ {\protected\ekvd@long\ekvdef\ekvd@set{#4}{#2#5=#3##1\relax}}%
+ }
+\ekvd@def@type@fwd{store}{\ekvd@type@store\edef{\ekv@unexpanded{##1}}}
+\ekvd@def@type@fwd{gstore}{\ekvd@type@store\xdef{\ekv@unexpanded{##1}}}
+\ekvd@def@type@fwd{estore}
+ {\ekvd@type@store\edef{\ekv@unexpanded\ekv@expanded{{##1}}}}
+\ekvd@def@type@fwd{xstore}
+ {\ekvd@type@store\xdef{\ekv@unexpanded\ekv@expanded{{##1}}}}
+\protected\def\ekvd@type@store#1#2#3#4%
+ {%
+ \ekvd@do@new{}{#3}%
+ \ekvd@assert@filledarg{#4}%
+ \ekvd@newlet#4\ekv@empty
+ \ekvd@ifalso
+ {%
+ \let\ekvd@prot\protected
+ \ekvd@add@val{#3}{#1#4{#2}}{}%
+ }%
+ {\protected\ekvd@long\ekvdef\ekvd@set{#3}{#1#4{#2}}}%
+ }
+\ekvd@def@type@fwd{meta}
+ {\ekvd@type@meta{}{##1}\ekvd@add@val{{##1}}{}\ekv@exparg}
+\ekvd@def@type@fwd{nmeta}
+ {%
+ \ekvd@assert@not@long
+ \ekvd@type@meta
+ {NoVal}{}\ekvd@add@noval{}\ekvd@assert@not@long@also\ekv@expargtwice
+ }
+\protected\long\def\ekvd@type@meta#1#2#3#4#5#6#7#8%
+ {%
+ \ekvd@do@new{#1}{#7}%
+ \ekvd@assert@filledarg{#8}%
+ #6{\ekvd@prot\ekvd@long\def\ekvd@tmp#2}{\ekvmorekv{#8}}%
+ \ekvd@ifalso
+ {\ekv@exparg{#3{#7}}{\ekvd@tmp#4}{#5}}%
+ {\csname ekvlet#1\endcsname\ekvd@set{#7}\ekvd@tmp}%
+ }
+\ekvd@def@type@fwd{smeta}{\ekvd@type@smeta{}{##1}\ekvd@add@val{{##1}}{}}
+\ekvd@def@type@fwd{snmeta}
+ {%
+ \ekvd@assert@not@long
+ \ekvd@type@smeta{NoVal}{}\ekvd@add@noval{}\ekvd@assert@not@long@also
+ }
+\protected\long\def\ekvd@type@smeta#1#2#3#4#5#6#7%
+ {%
+ \ekvd@do@new{#1}{#6}%
+ \ekvd@assert@twoargs{#7}%
+ \ekvd@type@smeta@#7{#2}%
+ \ekvd@ifalso
+ {\ekv@exparg{#3{#6}}{\ekvd@tmp#4}{#5}}%
+ {\csname ekvlet#1\endcsname\ekvd@set{#6}\ekvd@tmp}%
+ }
+\protected\long\def\ekvd@type@smeta@#1#2#3%
+ {\ekvd@prot\ekvd@long\ekv@expargtwice{\def\ekvd@tmp#3}{\ekvset{#1}{#2}}}
+\protected\def\ekvd@type@choice#1%
+ {%
+ \ekvd@assert@not@long
+ \ekv@expargtwice{\ekvd@prot\def\ekvd@tmp##1}%
+ {%
+ \expandafter\expandafter\expandafter
+ \ekvd@h@choice
+ \expandafter\expandafter\expandafter
+ {\expandafter\ekvd@choice@name\expandafter{\ekvd@set}{#1}{##1}}%
+ }%
+ \ekvd@ifalso
+ {%
+ \ekvd@assert@val{#1}%
+ \ekvd@if@not@already@choice{#1}%
+ {%
+ \ekv@exparg
+ {%
+ \expandafter\ekvd@add@aux
+ \csname\ekv@name\ekvd@set{#1}\endcsname{{##1}}{#1}%
+ }%
+ {\ekvd@tmp{##1}}%
+ {\ekvd@long\ekvdef}\ekvd@assert@not@long@also
+ }%
+ }%
+ {\ekvlet\ekvd@set{#1}\ekvd@tmp}%
+ }
+\ekvpNewParser{ekvd@populate@choice}
+\ekvpValueAlwaysRequired{ekvd@populate@choice}
+\ekvpDefType{ekvd@populate@choice}{protect}
+ {\ekvd@populate@choice\protected{#1}{#3}}
+\ekvpDefType{ekvd@populate@choice}{unprotect}{\ekvd@populate@choice{}{#1}{#3}}
+\ekvpDefNoType{ekvd@populate@choice} {\ekvd@populate@choice{}{#1}{#3}}
+\ekvpLet{ekvd@populate@choice}{type}{protected}{protect}
+\ekvpLet{ekvd@populate@choice}{type}{unprotected}{unprotect}
+\protected\long\def\ekvd@populate@choice#1#2#3%
+ {%
+ #1\expandafter\edef
+ \csname\ekvd@choice@name\ekvd@set\ekvd@set@choice{#2}\endcsname
+ {\ekv@unexpanded{#3}}%
+ }
+\ekvd@def@type{choice}
+ {%
+ \ekvd@do@new{}{#1}%
+ \ekvd@assert@arg
+ \ekvd@type@choice{#1}%
+ \def\ekvd@set@choice{#1}%
+ \ekvpParse@unsafe\ekvp@@p@ekvd@populate@choice{#3}%
+ }
+\ekvd@def@type@fwd{choice-store}
+ {\ekvd@type@choicespecial\ekvd@populate@choicestore}
+\ekvd@def@type@fwd{choice-enum}
+ {\ekvd@type@choicespecial\ekvd@populate@choiceenum}
+\protected\long\def\ekvd@type@choicespecial#1#2#3%
+ {%
+ \ekvd@do@new{}{#2}%
+ \ekvd@assert@twoargs{#3}%
+ \ekvd@type@choice{#2}%
+ \def\ekvd@set@choice{#2}%
+ #1#3%
+ }
+\protected\long\def\ekvd@populate@choicestore#1%
+ {%
+ \ekvd@newlet#1\ekv@empty
+ \ekvparse{\ekvd@populate@choicestore@k#1}{\ekvd@populate@choicestore@kv#1}%
+ }
+\protected\long\def\ekvd@populate@choicestore@kv#1#2#3%
+ {%
+ \protected\expandafter\edef
+ \csname\ekvd@choice@name\ekvd@set\ekvd@set@choice{#2}\endcsname
+ {\ekv@unexpanded{\edef#1{\ekv@unexpanded{#3}}}}%
+ }
+\ekv@exparg{\protected\long\def\ekvd@populate@choicestore@k#1#2}%
+ {\ekvd@populate@choicestore@kv{#1}{#2}{#2}}
+\protected\long\def\ekvd@populate@choiceenum#1%
+ {%
+ \ekvd@newreg#1{count}%
+ \def\ekvd@tmp{0}%
+ \ekvcsvloop{\ekvd@populate@choiceenum@#1}%
+ }
+\protected\long\def\ekvd@populate@choiceenum@#1#2%
+ {%
+ \protected\expandafter\edef
+ \csname\ekvd@choice@name\ekvd@set\ekvd@set@choice{#2}\endcsname
+ {#1=\@firstofone{\ekvd@tmp} }%
+ \edef\ekvd@tmp{\the\numexpr\ekvd@tmp+1\relax}%
+ }
+\ekvd@def@type{unknown-choice}
+ {%
+ \ekvd@do@new@for@name{\ekvd@unknown@choice@name\ekvd@set{#1}}%
+ \ekvd@assert@arg
+ \ekvd@assert@not@long
+ \ekvd@assert@not@also
+ \ekvd@prot\expandafter
+ \def\csname\ekvd@unknown@choice@name\ekvd@set{#1}\endcsname##1{#3}%
+ }
+\ekvd@def@type{unknown}
+ {%
+ \ekv@ifdefined{ekvd@type@unknown@\detokenize{#1}}%
+ {\csname ekvd@type@unknown@\detokenize{#1}\endcsname{#3}}%
+ \ekvd@err@misused@unknown
+ }
+\protected\long\def\ekvd@type@unknown@noval#1%
+ {%
+ \ekvd@do@new@for@name{\ekv@name\ekvd@set{}uN}%
+ \ekvd@assert@arg
+ \ekvd@assert@not@also
+ \ekvd@prot\ekvd@long\ekvdefunknownNoVal\ekvd@set{#1}%
+ }
+\protected\long\def\ekvd@type@unknown@code#1%
+ {%
+ \ekvd@do@new@for@name{\ekv@name\ekvd@set{}u}%
+ \ekvd@assert@arg
+ \ekvd@assert@not@also
+ \begingroup
+ \def\ekvd@tmp##1##2##3{#1}%
+ \ekv@exparg
+ {%
+ \endgroup
+ \ekvd@prot\ekvd@long\ekvdefunknown\ekvd@set
+ }%
+ {\ekvd@tmp{##2}{##1}{##3}}%
+ }
+\protected\edef\ekvd@type@unknown@redirect#1%
+ {%
+ \expandafter\noexpand\csname ekvd@type@unknown@redirect-code\endcsname{#1}%
+ \expandafter\noexpand\csname ekvd@type@unknown@redirect-noval\endcsname{#1}%
+ }
+\protected\expandafter\def\csname ekvd@type@unknown@redirect-code\endcsname#1%
+ {%
+ \ekvd@do@new@for@name{\ekv@name\ekvd@set{}u}%
+ \ekvd@assert@arg
+ \ekvd@assert@not@also
+ \ekvd@assert@not@protected
+ \expandafter\ekvredirectunknown\expandafter{\ekvd@set}{#1}%
+ }
+\protected\expandafter\def\csname ekvd@type@unknown@redirect-noval\endcsname#1%
+ {%
+ \ekvd@do@new@for@name{\ekv@name\ekvd@set{}uN}%
+ \ekvd@assert@arg
+ \ekvd@assert@not@also
+ \ekvd@assert@not@protected
+ \expandafter\ekvredirectunknownNoVal\expandafter{\ekvd@set}{#1}%
+ }
+\def\ekvd@h@choice#1%
+ {%
+ \expandafter\ekvd@h@choice@
+ \csname\ifcsname#1\endcsname#1\else relax\fi\endcsname
+ {#1}%
+ }
+\def\ekvd@h@choice@#1#2%
+ {%
+ \ifx#1\relax
+ \ekvd@err@choice@invalid{#2}%
+ \expandafter\@gobble
+ \fi
+ #1%
+ }
+\protected\long\def\ekvd@add@val#1#2#3%
+ {%
+ \ekvd@assert@val{#1}%
+ \expandafter\ekvd@add@aux\csname\ekv@name\ekvd@set{#1}\endcsname{{##1}}%
+ {#1}{#2}{\ekvd@long\ekvdef}{#3}%
+ }
+\protected\long\def\ekvd@add@noval#1#2#3%
+ {%
+ \ekvd@assert@noval{#1}%
+ \expandafter\ekvd@add@aux\csname\ekv@name\ekvd@set{#1}N\endcsname{}%
+ {#1}{#2}\ekvdefNoVal{#3}%
+ }
+\protected\long\def\ekvd@add@aux#1#2%
+ {%
+ \ekvd@extract@prefixes#1%
+ \expandafter\ekvd@add@aux@\expandafter{#1#2}%
+ }
+\protected\long\def\ekvd@add@aux@#1#2#3#4#5%
+ {%
+ #5%
+ \ekvd@prot#4\ekvd@set{#2}{#1#3}%
+ \ekvd@clear@prefixes
+ }
+\protected\def\ekvd@extract@prefixes#1%
+ {%
+ \expandafter\ekvd@extract@prefixes@\meaning#1\ekvd@stop
+ }
+\protected\def\ekvd@extract@prefixes@#1#2#3%
+ {%
+ \protected\def\ekvd@extract@prefixes@##1#1##2\ekvd@stop
+ {%
+ \ekvd@extract@prefixes@long
+ ##1\ekvd@mark\@firstofone#2\ekvd@mark\@gobble\ekvd@stop
+ {\let\ekvd@long\long}%
+ \ekvd@extract@prefixes@prot
+ ##1\ekvd@mark\@firstofone#3\ekvd@mark\@gobble\ekvd@stop
+ {\let\ekvd@prot\protected}%
+ }%
+ \protected\def\ekvd@extract@prefixes@long##1#2##2\ekvd@mark##3##4\ekvd@stop
+ {##3}%
+ \protected\def\ekvd@extract@prefixes@prot##1#3##2\ekvd@mark##3##4\ekvd@stop
+ {##3}%
+ }
+\begingroup
+\edef\ekvd@tmp
+ {%
+ \endgroup
+ \ekvd@extract@prefixes@
+ {\detokenize{macro:}}%
+ {\string\long}%
+ {\string\protected}%
+ }
+\ekvd@tmp
+\protected\def\ekvd@newlet#1#2%
+ {%
+ \ifdefined#1%
+ \ifx#1\relax\ekv@fi@gobble\fi\@firstofone
+ \ekv@fi@gobble
+ \fi
+ \@firstofone{\let#1#2}%
+ }
+\protected\def\ekvd@newreg#1#2%
+ {%
+ \ifdefined#1%
+ \ifx#1\relax\ekv@fi@gobble\fi\@firstofone
+ \ekv@fi@gobble
+ \fi
+ \@firstofone{\csname new#2\endcsname#1}%
+ }
+\long\def\ekvd@assert@twoargs#1%
+ {\ekvd@ifnottwoargs{#1}{\ekvd@err@missing@definition\ekvpGobbleT}{}}
+\long\def\ekvd@ifnottwoargs#1%
+ {%
+ \ekvd@ifempty@gtwo#1\ekv@ifempty@B
+ \ekv@ifempty@false\ekv@ifempty@A\ekv@ifempty@B\@firstoftwo
+ }
+\long\def\ekvd@ifempty@gtwo#1#2{\ekv@ifempty@\ekv@ifempty@A}
+\protected\def\ekvd@assert@val#1%
+ {%
+ \ekvifdefined\ekvd@set{#1}%
+ {\expandafter\ekvd@assert@val@\csname\ekv@name\ekvd@set{#1}\endcsname}%
+ {%
+ \ekvifdefinedNoVal\ekvd@set{#1}%
+ \ekvd@err@add@val@on@noval
+ {\ekvd@err@undefined@key{#1}}%
+ \ekvpGobbleT
+ }%
+ }
+\protected\def\ekvd@assert@val@#1%
+ {%
+ \expandafter\ekvd@extract@args\meaning#1\ekvd@stop
+ \unless\ifx\ekvd@extracted@args\ekvd@one@arg@string
+ \ekvd@err@unsupported@arg
+ \expandafter\ekvpGobbleT
+ \fi
+ }%
+\protected\def\ekvd@assert@noval#1%
+ {%
+ \ekvifdefinedNoVal\ekvd@set{#1}%
+ {\expandafter\ekvd@assert@noval@\csname\ekv@name\ekvd@set{#1}N\endcsname}%
+ {%
+ \ekvifdefined\ekvd@set{#1}%
+ \ekvd@err@add@noval@on@val
+ {\ekvd@err@undefined@key{#1}}%
+ \ekvpGobbleT
+ }%
+ }
+\protected\def\ekvd@assert@noval@#1%
+ {%
+ \expandafter\ekvd@extract@args\meaning#1\ekvd@stop
+ \unless\ifx\ekvd@extracted@args\ekv@empty
+ \ekvd@err@unsupported@arg
+ \expandafter\ekvpGobbleT
+ \fi
+ }
+\protected\def\ekvd@extract@args#1%
+ {%
+ \protected\def\ekvd@extract@args##1#1##2->##3\ekvd@stop
+ {\def\ekvd@extracted@args{##2}}%
+ }
+\expandafter\ekvd@extract@args\expandafter{\detokenize{macro:}}
+\edef\ekvd@one@arg@string{\string#1}
+\def\ekvd@assert@arg{\ekvd@ifnoarg{\ekvd@err@missing@definition\ekvpGobbleT}{}}
+\let\ekvd@ifnoarg\@secondoftwo
+\long\def\ekvd@assert@filledarg#1%
+ {\ekvd@ifnoarg@or@empty{#1}{\ekvd@err@missing@definition\ekvpGobbleT}{}}
+\long\def\ekvd@ifnoarg@or@empty#1%
+ {%
+ \ekvd@ifnoarg
+ \@firstoftwo
+ {\ekv@ifempty{#1}}%
+ }
+\def\ekvd@assert@not@long{\ifx\ekvd@long\long\ekvd@err@no@prefix{long}\fi}
+\def\ekvd@assert@not@protected
+ {\ifx\ekvd@prot\protected\ekvd@err@no@prefix{protected}\fi}
+\def\ekvd@assert@not@also{\ekvd@ifalso{\ekvd@err@no@prefix{also}}{}}
+\def\ekvd@assert@not@long@also
+ {\ifx\ekvd@long\long\ekvd@err@no@prefix@also{long}\fi}
+\def\ekvd@assert@not@protected@also
+ {\ifx\ekvd@prot\protected\ekvd@err@no@prefix@also{protected}\fi}
+\def\ekvd@assert@new#1#2%
+ {%
+ \csname ekvifdefined#1\endcsname\ekvd@set{#2}%
+ {\ekvd@err@not@new\ekvpGobbleT}%
+ {}%
+ }
+\def\ekvd@assert@not@new
+ {\ifx\ekvd@do@new\ekvd@assert@new\ekvd@err@no@prefix{new}\fi}
+\def\ekvd@do@new@for@name#1%
+ {%
+ \ifx\ekvd@do@new\ekvd@assert@new
+ \ekv@fi@firstofone
+ \fi
+ \@gobble{\ekv@ifdefined{#1}{\ekvd@err@not@new\ekvpGobbleT}{}}%
+ }
+\protected\def\ekvd@if@not@already@choice#1%
+ {%
+ \expandafter\ekvd@if@not@already@choice@a
+ \csname\ekv@name\ekvd@set{#1}\endcsname
+ {}\ekvd@h@choice\ekvd@stop
+ }
+\protected\def\ekvd@if@not@already@choice@a
+ {%
+ \expandafter\ekvd@if@not@already@choice@b
+ }
+\long\protected\def\ekvd@if@not@already@choice@b#1\ekvd@h@choice#2\ekvd@stop
+ {%
+ \ekv@ifempty{#2}\@firstofone\@gobble
+ }
+\long\def\ekvd@ifspace#1%
+ {%
+ \ekvd@ifspace@#1 \ekv@ifempty@B
+ \ekv@ifempty@false\ekv@ifempty@A\ekv@ifempty@B\@firstoftwo
+ }
+\long\def\ekvd@ifspace@#1 % keep this space
+ {%
+ \ekv@ifempty@\ekv@ifempty@A
+ }
+\protected\long\def\ekvd@errm#1{\errmessage{expkv-def Error: #1}}
+\protected\def\ekvd@err@missing@definition
+ {\ekvd@errm{Missing definition for key `\ekvd@cur'}}
+\protected\def\ekvd@err@missing@type
+ {\ekvd@errm{Missing type prefix for key `\ekvd@cur'}}
+\protected\def\ekvd@err@undefined@prefix#1%
+ {%
+ \ekvd@errm
+ {%
+ Undefined prefix `\ekv@unexpanded{#1}' found while processing
+ `\ekvd@cur'%
+ }%
+ }
+\protected\def\ekvd@err@undefined@key#1%
+ {%
+ \ekvd@errm
+ {Undefined key `\ekv@unexpanded{#1}' found while processing `\ekvd@cur'}%
+ }
+\protected\def\ekvd@err@undefined@noval#1%
+ {%
+ \ekvd@errm
+ {%
+ Undefined noval key `\ekv@unexpanded{#1}' found while processing
+ `\ekvd@cur'%
+ }%
+ }
+\protected\def\ekvd@err@no@prefix#1%
+ {\ekvd@errm{prefix `#1' not accepted in `\ekvd@cur'}}
+\protected\def\ekvd@err@no@prefix@also#1%
+ {\ekvd@errm{`\ekvd@cur' not allowed with a `#1' key}}
+\protected\def\ekvd@err@add@val@on@noval
+ {\ekvd@errm{`\ekvd@cur' not allowed with a NoVal key}}
+\protected\def\ekvd@err@add@noval@on@val
+ {\ekvd@errm{`\ekvd@cur' not allowed with a value taking key}}
+\protected\def\ekvd@err@unsupported@arg
+ {%
+ \ekvd@errm
+ {%
+ Existing key-macro has the unsupported argument string
+ `\ekvd@extracted@args' for key `\ekvd@cur'%
+ }%
+ }
+\protected\def\ekvd@err@not@new
+ {\ekvd@errm{The key for `\ekvd@cur' is already defined}}
+\protected\long\def\ekvd@err@misused@unknown
+ {\ekvd@errm{Misuse of the unknown type found while processing `\ekvd@cur'}}
+\def\ekvd@err@choice@invalid#1%
+ {%
+ \ekvd@err@choice@invalid@#1%
+ }
+\begingroup
+\catcode40=8
+\catcode41=8
+\@firstofone{\endgroup
+\def\ekvd@choice@name#1#2#3%
+ {%
+ ekvd#1(#2)\detokenize{#3}%
+ }
+\def\ekvd@unknown@choice@name#1#2%
+ {%
+ ekvd:u:#1(#2)%
+ }
+\def\ekvd@err@choice@invalid@ ekvd#1(#2)\detokenize#3%
+ {%
+ \ekv@ifdefined{\ekvd@unknown@choice@name{#1}{#2}}%
+ {\csname\ekvd@unknown@choice@name{#1}{#2}\endcsname{#3}}%
+ {\ekvd@err{invalid choice `#3' for `#2' in set `#1'}}%
+ }
+}
+\ekv@exparg{\long\def\ekvd@err#1}{\ekverr{expkv-def}{#1}}
+\catcode`\@=\ekvd@tmp
+%%
+%%
+%% End of file `expkv-def.tex'.
diff --git a/Master/texmf-dist/tex/generic/expkv-bundle/expkv-pop.tex b/Master/texmf-dist/tex/generic/expkv-bundle/expkv-pop.tex
new file mode 100644
index 00000000000..d0d77817d9a
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/expkv-bundle/expkv-pop.tex
@@ -0,0 +1,326 @@
+%%
+%% This is file `expkv-pop.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% expkv-pop.dtx (with options: `tex')
+%%
+%% ----------------------------------------------------------------
+%% expkv-bundle -- an expandable key=val implementation and friends
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+%% Copyright (C) 2020-2023 Jonathan P. Spratte
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the files expkv-bundle.ins
+%% expkv.dtx
+%% expkv-cs.dtx
+%% expkv-def.dtx
+%% expkv-opt.dtx
+%% expkv-pop.dtx
+%% and the derived files expkv.sty
+%% expkv.tex
+%% t-expkv.tex
+%% expkv-cs.sty
+%% expkv-cs.tex
+%% t-expkv-cs.tex
+%% expkv-def.sty
+%% expkv-def.tex
+%% t-expkv-def.tex
+%% expkv-opt.sty
+%% expkv-pop.sty
+%% expkv-pop.tex
+%% t-expkv-pop.tex
+%%
+%% as well as any documentation files shipped with it.
+%%
+\input expkv
+\expandafter\ifx\csname ekvpVersion\endcsname\relax
+\else
+ \expandafter\endinput
+\fi
+\def\ekvpVersion{1.0}
+\def\ekvpDate{2023-01-23}
+\csname ekvp@tmp\endcsname
+\expandafter\chardef\csname ekvp@tmp\endcsname=\catcode`\@
+\catcode`\@=11
+\long\def\ekvpParse#1#2%
+ {%
+ \ekv@unexpanded\ekv@expanded
+ {{\expandafter\ekvpParse@a\detokenize{#1}\ekv@mark{#2}}}%
+ }
+\def\ekvpParse@a#1\ekv@mark
+ {%
+ \ekv@ifdefined{ekvp@@p@#1}%
+ {\expandafter\ekvpParse@b\csname ekvp@@p@#1\endcsname}%
+ {\ekvp@err@unknownparser{#1}\@gobble}%
+ }
+\def\ekvpParse@b#1%
+ {%
+ \ekv@ifdefined{#1{ppa}}%
+ {%
+ \expandafter\ekvpParse@c\expandafter
+ {\expandafter#1\csname#1{ppa}\endcsname}%
+ }%
+ {\ekvpParse@c{#1{}}}%
+ }
+\def\ekvpParse@c#1#2#3{#2#3}
+\ekv@expargtwice{\long\def\ekvpParse@c#1#2}%
+ {\expandafter\ekvpParse@c\ekvparse{\ekvp@k#1}{\ekvp@p#1}{#2}}
+\long\def\ekvpParse@unsafe#1#2#3{\ekv@unexpanded\ekv@expanded{{#2#3}}}
+\ekv@expargtwice{\long\def\ekvpParse@unsafe@auto#1#2#3}
+ {\expandafter\ekvpParse@unsafe\ekvparse{\ekvp@k#1#2}{\ekvp@p#1#2}{#3}}
+\ekv@expargtwice{\long\def\ekvpParse@unsafe#1#2}%
+ {\expandafter\ekvpParse@unsafe\ekvparse{\ekvp@k#1{}}{\ekvp@p#1{}}{#2}}
+\def\ekvp@k#1{\csname #1k\endcsname#1}
+\long\def\ekvp@ifspace#1%
+ {%
+ \ekvp@ifspace@#1 \ekv@ifempty@B\ekv@ifempty@false
+ \ekv@ifempty@A\ekv@ifempty@B\@firstoftwo
+ }
+\long\def\ekvp@ifspace@#1 % keep this space
+ {\ekv@ifempty@\ekv@ifempty@A}
+\ekv@exparg{\long\def\ekvp@prefix#1}%
+ {%
+ \ekvp@ifspace{#1}%
+ {\ekvp@prefix@a#1\ekv@stop}%
+ {\ekvp@noprefix{#1}}%
+ }
+\ekv@exparg{\long\def\ekvp@p#1#2#3}{\ekvp@prefix{#3}#1{#2}{#3}}
+\long\def\ekvp@prefix@a#1 % keep this space
+ {\expandafter\ekvp@prefix@b\detokenize{#1}\ekv@mark{#1}}
+\ekv@exparg{\long\def\ekvp@prefix@b#1\ekv@mark#2#3\ekv@stop#4}%
+ {%
+ \ekv@ifdefined{#4{pt}@#1}
+ {\expandafter\ekvp@prefix@pt\csname #4{pt}@#1\endcsname{#1}}%
+ {%
+ \ekv@ifdefined{#4{pp}@#1}%
+ {\expandafter\ekvp@prefix@pp\csname #4{pp}@#1\endcsname}%
+ {\@firstoftwo{\ekvp@noprefix{#2 #3}}}%
+ }%
+ {#3}#4%
+ }
+\long\def\ekvp@prefix@pt#1#2#3#4#5#6#7%
+ {%
+ \ekvp@prefix@pt@{#2}{#3}{#6}#5{\@firstoftwo#1}{#7}\ekvpEOT
+ \ekv@unexpanded{\ekvpEOA{#6}}%
+ }
+\long\def\ekvp@prefix@pt@#1#2#3#4{#4{#1}{#2}{#3}}
+\ekv@exparg{\long\def\ekvp@prefix@pp#1#2#3#4}{\ekvp@prefix{#2}#3{#4#1}}
+\long\def\ekvp@noprefix#1#2%
+ {%
+ \ekv@ifdefined{#2{pn}}
+ {\expandafter\ekvp@prefix@pt\csname #2{pn}\endcsname{}{#1}}
+ \ekvp@err@missingtype
+ #2%
+ }
+\protected\long\def\ekvpNewParser#1%
+ {\expandafter\ekvpNewParser@\detokenize{#1}\ekv@mark}
+\protected\def\ekvpNewParser@#1\ekv@mark
+ {%
+ \ekv@ifdefined{ekvp@@p@#1}%
+ {\ekvp@errm{Parser `#1' already defined}}%
+ {%
+ \expandafter\def\csname ekvp@@p@#1\endcsname##1{ekvp@@##1@#1}
+ \expandafter
+ \let\csname\csname ekvp@@p@#1\endcsname k\endcsname\ekvp@k@default
+ }%
+ }
+\protected\long\def\ekvpValueAlwaysRequired#1%
+ {\ekvp@parser@def{#1}\ekvpValueAlwaysRequired@{}}
+\protected\def\ekvpValueAlwaysRequired@#1%
+ {\expandafter\let\csname#1k\endcsname\ekvp@err@noval}
+\protected\long\def\ekvpDefNoValue#1%
+ {\ekvp@parser@def{#1}\ekvpDefNoValue@\@gobble}
+\protected\long\def\ekvpDefNoValue@#1#2%
+ {%
+ \def\ekvp@tmp##1{\ekv@unexpanded{#2}}%
+ \ekv@exparg{\long\expandafter\def\csname#1k\endcsname##1##2##3}%
+ {\ekvp@tmp{##3}}%
+ }
+\protected\long\def\ekvpUseNoValueMarker#1%
+ {\ekvp@parser@def{#1}\ekvpUseNoValueMarker@\@gobble}
+\protected\long\def\ekvpUseNoValueMarker@#1#2%
+ {%
+ \long\expandafter\edef\csname#1k\endcsname##1##2##3%
+ {\ekv@unexpanded{\ekvp@p}##1{##2}{##3}{\ekv@unexpanded{#2}}}%
+ }
+\protected\long\def\ekvpDefNoValuePrefix#1%
+ {\ekvp@parser@def{#1}\ekvpDefNoValuePrefix@\@gobbletwo}
+\protected\def\ekvpDefNoValuePrefix@#1%
+ {\expandafter\ekvpDefNoValuePrefix@@\csname#1{ppn}\endcsname#1}
+\protected\long\def\ekvpDefNoValuePrefix@@#1#2%
+ {%
+ \long\def#1\ekvp@p##1##2##3%
+ {%
+ \ekv@unexpanded{\ekvp@p}%
+ ####1{####2\ekv@unexpanded{#1}}{####3}{\ekv@unexpanded{##3}}%
+ }%
+ \long\expandafter\edef\csname#2k\endcsname##1##2##3%
+ {\expandafter\expandafter\expandafter#1\csname#2k\endcsname{}{}{}}%
+ \ekvp@parser@def@prefix#1%
+ }
+\protected\long\def\ekvpDefAutoPrefix#1%
+ {\ekvp@parser@def{#1}\ekvpDefAutoPrefix@\@gobbletwo}
+\protected\long\def\ekvpDefAutoPrefix@#1%
+ {\expandafter\ekvp@parser@def@prefix\csname#1{ppa}\endcsname}
+\long\def\ekvp@parser@def#1%
+ {\expandafter\ekvp@parser@def@\detokenize{#1}\ekv@mark}
+\def\ekvp@parser@def@#1\ekv@mark#2#3%
+ {%
+ \ekv@ifdefined{ekvp@@p@#1}%
+ {\ekv@exparg{#2}{\csname ekvp@@p@#1\endcsname}}%
+ {\ekvp@errm{Parser `#1' not defined}#3}%
+ }
+\protected\long\def\ekvpDefPrefix#1%
+ {\ekvp@parser@def{#1}\ekvpDefPrefix@\@gobblethree}
+\protected\long\def\ekvpDefPrefix@#1#2%
+ {\expandafter\ekvp@parser@def@prefix\csname#1{pp}@\detokenize{#2}\endcsname}
+\protected\long\def\ekvp@parser@def@prefix#1#2#3%
+ {%
+ \def#1##1##2##3{#2#3}%
+ \long\def#1##1##2##3##4##5\ekvpEOT
+ {\ekv@unexpanded{#2}##4{##1}{##2}{##3}##5\ekvpEOT\ekv@unexpanded{#3}}%
+ }
+\ekv@exparg{\protected\long\def\ekvpDefPrefixLet#1#2#3#4#5}%
+ {\ekvpDefPrefix{#1}{#2}{\ekvpProtect{\let#3= #4}}{\ekvpProtect{\let#3= #5}}}
+\ekv@exparg{\protected\long\def\ekvpDefPrefixStore#1#2#3#4#5}%
+ {%
+ \ekvpDefPrefix{#1}{#2}%
+ {\ekvpProtect{\edef#3{\ekv@unexpanded{#4}}}}%
+ {\ekvpProtect{\edef#3{\ekv@unexpanded{#5}}}}%
+ }
+\protected\long\def\ekvpDefType#1{\ekvp@parser@def{#1}\ekvpDefType@\@gobbletwo}
+\protected\long\def\ekvpDefType@#1#2%
+ {\ekvpDefType@NoType{#1{pt}@\detokenize{#2}}}%
+\protected\long\def\ekvpDefNoType#1{\ekvp@parser@def{#1}\ekvpDefNoType@\@gobble}
+\protected\long\def\ekvpDefNoType@#1{\ekvpDefType@NoType{#1{pn}}}
+\protected\long\def\ekvpDefType@NoType#1#2%
+ {%
+ \long\expandafter\def\csname#1\endcsname##1##2##3\ekvpEOT
+ {\ekv@unexpanded{\ekvpEOP{##2}#2\ekvpEOT{##2}}}%
+ }%
+\protected\long\def\ekvpLet#1#2#3{\ekvoptarg{\ekvpLet@a{#1}{#2}{#3}}{#1}}
+\protected\long\def\ekvpLet@a#1%
+ {\ekvp@parser@def{#1}\ekvpLet@b{\@firstoftwo\@gobblethree}}
+\protected\long\def\ekvpLet@b#1#2#3#4%
+ {\ekvp@parser@def{#4}\ekvpLet@c{\@firstoftwo\@gobblethree}#1{#2}{#3}}
+\protected\long\def\ekvpLet@c#1#2#3%
+ {%
+ \ekv@ifdefined{ekvpLet@@\detokenize{#3}}%
+ {\expandafter\ekvpLet@d\csname ekvpLet@@\detokenize{#3}\endcsname{#1}{#2}}%
+ {\ekvp@errm{unknown type \detokenize{#3}}\@gobbletwo}%
+ }
+\protected\long\def\ekvpLet@d#1#2#3#4#5%
+ {%
+ \ekv@ifdefined{#2{#1}@\detokenize{#5}}%
+ {%
+ \expandafter\let
+ \csname#3{#1}@\detokenize{#4}\expandafter\endcsname
+ \csname#2{#1}@\detokenize{#5}\endcsname
+ }%
+ {\ekvp@errm{Undefined prefix/type \detokenize{#5} can't be copied}}%
+ }
+\def\ekvpLet@@prefix{pp}
+\def\ekvpLet@@type{pt}
+\ekv@ifdefined{c_novalue_tl}
+ {\expandafter\let\expandafter\ekvp@novalflag\csname c_novalue_tl\endcsname}
+ {%
+ \begingroup
+ \lccode`\Z=`\-
+ \lccode`\:=`\-
+ \lccode`\N=\z@
+ \lccode`\V=\z@
+ \lowercase{\endgroup\def\ekvp@novalflag{ZNoValue:}}%
+ }
+\def\ekvpIfNoVal#1%
+ {%
+ \long\def\ekvpIfNoVal##1%
+ {%
+ \ekvp@ifnoval{}##1{}?!#1??!\ekv@ifempty@B\ekv@ifempty@true
+ \ekv@ifempty@A\ekv@ifempty@B\@secondoftwo
+ }%
+ \long\def\ekvp@ifnoval##1#1##2?##3?!{\ekv@ifempty@\ekv@ifempty@A##1##2}%
+ \long\def\ekvp@k@default##1##2##3{\ekvp@p##1{##2}{##3}{#1}}%
+ }
+\expandafter\ekvpIfNoVal\expandafter{\ekvp@novalflag}
+\let\ekvp@novalflag\ekvp@undefined
+\def\ekvpAssertIf{\romannumeral\ekv@alignsafe\ekvoptarg{\ekvpAssertIf@{}}{EOT}}
+\def\ekvpAssertIfNot
+ {\romannumeral\ekv@alignsafe\ekvoptarg{\ekvpAssertIf@\else}{EOT}}
+\long\def\ekvpAssertIf@#1#2#3%
+ {%
+ #3#1\ekvpAssertIf@good\fi
+ \ekvpAssert@notgood{#2}%
+ }
+\long\def\ekvpAssertIf@good\fi\ekvpAssert@notgood#1#2%
+ {\fi\ekv@endalignsafe\ekv@zero}
+\long\def\ekvpAssert@notgood#1%
+ {%
+ \ekv@ifdefined{ekvpAssert@@#1}%
+ {\csname ekvpAssert@@#1\endcsname}%
+ {\ekvp@err@unknownmarker{#1}\ekvpAssert@@EOA}%
+ }
+\def\ekvpAssertTF{\ekvoptarg{\ekvpAssertTF@{}}{EOT}}
+\def\ekvpAssertTFNot{\ekvoptarg{\ekvpAssertTF@{\@secondoftwo\@firstoftwo}}{EOT}}
+\long\def\ekvpAssertTF@#1#2#3%
+ {%
+ \ekv@alignsafe
+ #3#1%
+ {\ekv@endalignsafe\@gobble}%
+ {\romannumeral\ekvpAssert@notgood{#2}}%
+ }
+\ekv@exparg{\def\ekvpAssert@further#1#2#3}%
+ {\ekvoptarg{\ekvpAssert@further{#1}{#2}{#3}}{EOT}}
+\ekv@exparg{\def\ekvpAssertValue}%
+ {\ekvpAssert@further{\@secondoftwo\@firstoftwo}{\ekvpIfNoVal}{missing value}}
+\ekv@exparg{\def\ekvpAssertNoValue}%
+ {\ekvpAssert@further{}{\ekvpIfNoVal}{superfluous value}}
+\ekv@exparg{\def\ekvpAssertOneValue}%
+ {\ekvpAssert@further{}{\ekvp@assert@num@args\@gobble}{argument count != 1}}
+\ekv@exparg{\def\ekvpAssertTwoValues}%
+ {\ekvpAssert@further{}{\ekvp@assert@num@args\@gobbletwo}{argument count != 2}}
+\long\def\ekvp@assert@num@args#1#2%
+ {%
+ \expandafter\ekv@ifempty@\expandafter\ekv@ifempty@A#1#2\ekv@ifempty@B
+ \ekv@ifempty@true\ekv@ifempty@A\ekv@ifempty@B\@secondoftwo
+ }
+\long\def\ekvpAssert@further#1#2#3#4#5{\ekvpAssertTF@{#1}{#4}{#2{#5}}{#3}}
+\def\ekvpAssert@@EOA#1#2%
+ {\long\def#1##1##2#2##3{\ekvp@err{##1 at `##3'}\ekv@endalignsafe\ekv@zero}}
+\ekvpAssert@@EOA\ekvpAssert@@EOP\ekvpEOP
+\ekvpAssert@@EOA\ekvpAssert@@EOT\ekvpEOT
+\ekvpAssert@@EOA\ekvpAssert@@EOA\ekvpEOA
+\long\def\ekvpGobbleP#1\ekvpEOP#2{}
+\long\def\ekvpGobbleT#1\ekvpEOT#2{}
+\long\def\ekvpGobbleA#1\ekvpEOA#2{}
+\let\ekvpEOP\@gobble
+\let\ekvpEOT\@gobble
+\let\ekvpEOA\@gobble
+\def\ekvpProtect{\ekvpProtect@\ekvpProtect@@}
+\protected\long\def\ekvpProtect@\ekvpProtect@@#1{#1}
+\long\def\ekvpProtect@@#1{\ekv@unexpanded{\ekvpProtect@@{#1}}}
+\protected\long\def\ekvp@errm#1{\errmessage{expkv-pop Error: #1}}
+\ekv@exparg{\long\def\ekvp@err#1}{\ekverr{expkv-pop}{#1}}
+\def\ekvp@err@unknownparser#1{\ekvp@err{unknown parser `#1'}}
+\long\def\ekvp@err@noval#1#2#3{\ekvp@err{missing value for `#3'}}
+\long\def\ekvp@err@missingtype#1#2#3#4{\ekvp@err{missing type in `#3'}}
+\long\def\ekvp@err@unknownmarker#1{\ekvp@err{unknown marker `#1'}}
+\let\ekvp@prefix\ekvp@undefined
+\catcode`\@=\ekvp@tmp
+%%
+%%
+%% End of file `expkv-pop.tex'.
diff --git a/Master/texmf-dist/tex/generic/expkv-bundle/expkv.tex b/Master/texmf-dist/tex/generic/expkv-bundle/expkv.tex
new file mode 100644
index 00000000000..5e6488039b1
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/expkv-bundle/expkv.tex
@@ -0,0 +1,1245 @@
+%%
+%% This is file `expkv.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% expkv.dtx (with options: `tex')
+%%
+%% ----------------------------------------------------------------
+%% expkv-bundle -- an expandable key=val implementation and friends
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+%% Copyright (C) 2020-2023 Jonathan P. Spratte
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the files expkv-bundle.ins
+%% expkv.dtx
+%% expkv-cs.dtx
+%% expkv-def.dtx
+%% expkv-opt.dtx
+%% expkv-pop.dtx
+%% and the derived files expkv.sty
+%% expkv.tex
+%% t-expkv.tex
+%% expkv-cs.sty
+%% expkv-cs.tex
+%% t-expkv-cs.tex
+%% expkv-def.sty
+%% expkv-def.tex
+%% t-expkv-def.tex
+%% expkv-opt.sty
+%% expkv-pop.sty
+%% expkv-pop.tex
+%% t-expkv-pop.tex
+%%
+%% as well as any documentation files shipped with it.
+%%
+\expandafter\ifx\csname ekvVersion\endcsname\relax
+\else
+ \expandafter\endinput
+\fi
+\begingroup
+ \edef\ekvtmpa{\string\expanded}
+ \edef\ekvtmpb{\meaning\expanded}
+ \expandafter
+\endgroup
+\ifx\ekvtmpa\ekvtmpb
+ \expandafter\let\csname ekv@expanded\endcsname\expanded
+ \expandafter\let\csname ekv@unexpanded\endcsname\unexpanded
+\else
+ \begingroup
+ \edef\ekvtmpa{\string\expanded}
+ \edef\ekvtmpb{\meaning\normalexpanded}
+ \expandafter
+ \endgroup
+ \ifx\ekvtmpa\ekvtmpb
+ \expandafter\let\csname ekv@expanded\endcsname\normalexpanded
+ \expandafter\let\csname ekv@unexpanded\endcsname\normalunexpanded
+ \else
+ \errmessage
+ {expkv Error: e-TeX and the \noexpand\expanded primitive required}%
+ \expandafter\endinput
+ \fi
+\fi
+\def\ekvVersion{2.0}
+\def\ekvDate{2023-01-23}
+\csname ekv@tmp\endcsname
+\expandafter\chardef\csname ekv@tmp\endcsname=\catcode`\@
+\catcode`\@=11
+\begingroup
+ \edef\ekv@tmpa{\string \lastnamedcs}
+ \edef\ekv@tmpb{\meaning\lastnamedcs}
+ \ifx\ekv@tmpa\ekv@tmpb
+ \def\ekv@if@lastnamedcs{\long\def\ekv@if@lastnamedcs##1##2{##1}}
+ \else
+ \def\ekv@if@lastnamedcs{\long\def\ekv@if@lastnamedcs##1##2{##2}}
+ \fi
+ \expandafter
+\endgroup
+\ekv@if@lastnamedcs
+\def\ekv@empty{}
+\long\def\@gobble#1{}
+\long\def\@gobbletwo#1#2{}
+\long\def\@gobblethree#1#2#3{}
+\long\def\@firstofone#1{#1}
+\long\def\@firstoftwo#1#2{#1}
+\long\def\@secondoftwo#1#2{#2}
+\long\def\ekv@fi@gobble\fi\@firstofone#1{\fi}
+\long\def\ekv@fi@firstofone\fi\@gobble#1{\fi#1}
+\long\def\ekv@fi@firstoftwo\fi\@secondoftwo#1#2{\fi#1}
+\long\def\ekv@fi@secondoftwo\fi\@firstoftwo#1#2{\fi#2}
+\def\ekv@gobble@mark\ekv@mark{}
+\long\def\ekv@gobbleto@stop#1\ekv@stop{}
+\long\def\ekv@gobble@from@mark@to@stop\ekv@mark#1\ekv@stop{}
+\long\def\ekv@ifempty#1%
+ {%
+ \ekv@ifempty@\ekv@ifempty@A#1\ekv@ifempty@B\ekv@ifempty@true
+ \ekv@ifempty@A\ekv@ifempty@B\@secondoftwo
+ }
+\long\def\ekv@ifempty@#1\ekv@ifempty@A\ekv@ifempty@B{}
+\long\def\ekv@ifempty@true\ekv@ifempty@A\ekv@ifempty@B\@secondoftwo#1#2{#1}
+\long\def\ekv@ifempty@false\ekv@ifempty@A\ekv@ifempty@B\@firstoftwo#1#2{#2}
+\long\def\ekv@ifempty@true@F\ekv@ifempty@A\ekv@ifempty@B\@firstofone#1{}
+\long\def\ekv@ifempty@true@F@gobble\ekv@ifempty@A\ekv@ifempty@B\@firstofone#1#2%
+ {}
+\long\def\ekv@ifempty@true@F@gobbletwo
+ \ekv@ifempty@A\ekv@ifempty@B\@firstofone#1#2#3%
+ {}
+\long\def\ekv@ifblank#1%
+ {\ekv@ifblank@#1\ekv@stop\ekv@ifblank@false\ekv@stop\@firstoftwo}
+\long\def\ekv@ifblank@\ekv@mark#1#2\ekv@stop{}
+\long\def\ekv@ifblank@false\ekv@stop\@firstoftwo#1#2{#2}
+\def\ekv@ifblank@gobbletrue\ekv@stop#1{}
+\ekv@if@lastnamedcs
+ {%
+ \long\def\ekv@ifdefined#1{\ifcsname#1\endcsname\ekv@ifdef@\fi\@secondoftwo}
+ \def\ekv@ifdef@\fi\@secondoftwo
+ {%
+ \fi
+ \expandafter\ifx\lastnamedcs\relax
+ \ekv@fi@secondoftwo
+ \fi
+ \@firstoftwo
+ }
+ }
+ {%
+ \long\def\ekv@ifdefined#1%
+ {%
+ \ifcsname#1\endcsname\ekv@ifdef@\fi\ekv@ifdef@false#1\endcsname\relax
+ \ekv@fi@secondoftwo
+ \fi
+ \@firstoftwo
+ }
+ \def\ekv@ifdef@\fi\ekv@ifdef@false{\fi\expandafter\ifx\csname}
+ \long\def\ekv@ifdef@false
+ #1\endcsname\relax\ekv@fi@secondoftwo\fi\@firstoftwo#2#3%
+ {#3}
+ }
+\def\ekv@strip#1%
+ {%
+ \long\def\ekv@strip##1%
+ {%
+ \ekv@strip@a
+ ##1\ekv@nil
+ \ekv@mark#1%
+ #1\ekv@nil
+ }%
+ \long\def\ekv@strip@a##1\ekv@mark#1{\ekv@strip@b##1\ekv@mark}%
+ }
+\ekv@strip{ }
+\long\def\ekv@strip@b#1 \ekv@nil{\ekv@strip@c#1\ekv@nil}
+\long\def\ekv@strip@c\ekv@mark#1\ekv@nil\ekv@mark#2\ekv@nil#3{#3{#1}}
+\def\ekv@strip@key#1%
+ {%
+ \long\def\ekv@strip@key##1{\ekv@strip@key@a##1\ekv@nil\ekv@mark#1#1\ekv@nil}
+ \long\def\ekv@strip@key@a##1\ekv@mark#1{\ekv@strip@key@b##1\ekv@mark}
+ }
+\ekv@strip@key{ }
+\long\def\ekv@strip@key@b#1 \ekv@nil{\ekv@strip@key@c#1\ekv@nil}
+\long\def\ekv@strip@key@c\ekv@mark#1\ekv@nil\ekv@mark#2\ekv@nil#3%
+ {\expandafter#3\detokenize{#1}\ekv@mark{#1}}
+\let\ekv@zero\z@
+\long\def\ekv@exparg#1#2%
+ {\ekv@expanded{\ekv@unexpanded{#1}\expandafter}\expandafter{#2}}
+\long\def\ekv@expandafter#1{\ekv@expanded{\ekv@unexpanded{#1}\expandafter}}
+\long\def\ekv@exparg@#1#2{#2{#1}}%
+\long\def\ekv@expandedarg#1#2{\ekv@expanded{\ekv@unexpanded{#1}{#2}}}
+\long\def\ekv@fexparg#1#2%
+ {%
+ \ekv@expanded{\ekv@unexpanded{#1}\expandafter}\expandafter
+ {\romannumeral`\^^@#2}%
+ }
+\long\def\ekv@expargtwice#1#2{\expandafter\ekv@expargtwice@\expandafter{#2}{#1}}
+\def\ekv@expargtwice@{\expandafter\ekv@exparg@\expandafter}
+\begingroup
+\def\ekvcsvloop#1{%
+\endgroup
+\long\def\ekvcsvloop##1##2%
+ {\ekv@csv@loop@active{##1}\ekv@mark##2#1\ekv@stop#1}
+\long\def\ekv@csv@loop@active##1##2#1%
+ {%
+ \ekv@gobble@from@mark@to@stop##2\ekv@csv@loop@active@end\ekv@stop
+ \ekv@csv@loop{##1}##2,\ekv@stop,%
+ }%
+\long\def\ekv@csv@loop@active@end
+ \ekv@stop
+ \ekv@csv@loop##1\ekv@mark\ekv@stop,\ekv@stop,%
+ {}%
+}
+\catcode`\,=13
+\ekvcsvloop,
+\def\ekv@csv@loop#1%
+ {%
+ \long\def\ekv@csv@loop##1##2,%
+ {%
+ \ekv@gobble@from@mark@to@stop##2\ekv@csv@loop@end\ekv@stop
+ \ekv@ifblank@##2\ekv@stop\ekv@ifblank@gobbletrue
+ \ekv@stop\ekv@csv@loop@blank
+ #1\ekv@csv@loop@do{##1}%
+ }%
+ }
+\expandafter\ekv@csv@loop\expandafter{\ekv@strip{#2}}
+\long\def\ekv@csv@loop@do#1#2{\ekv@unexpanded{#2{#1}}\ekv@csv@loop{#2}\ekv@mark}
+\def\ekv@csv@loop@end#1%
+ {%
+ \long\def\ekv@csv@loop@end
+ \ekv@stop
+ \ekv@ifblank@\ekv@mark\ekv@stop\ekv@stop\ekv@ifblank@gobbletrue
+ \ekv@stop\ekv@csv@loop@blank
+ #1\ekv@csv@loop@do##1%
+ {\ekv@csv@loop@active{##1}\ekv@mark}%
+ }
+\expandafter\ekv@csv@loop@end\expandafter{\ekv@strip{\ekv@mark\ekv@stop}}
+\long\expandafter\def\expandafter\ekv@csv@loop@blank
+ \ekv@strip{\ekv@mark#1}\ekv@csv@loop@do#2%
+ {\ekv@csv@loop{#2}\ekv@mark}
+\def\ekv@name@set#1{ekv#1(}
+\long\def\ekv@name@key#1{#1)}
+\edef\ekv@name
+ {%
+ \ekv@unexpanded\expandafter{\ekv@name@set{#1}}%
+ \ekv@unexpanded\expandafter{\ekv@name@key{\detokenize{#2}}}%
+ }
+\long\ekv@exparg{\def\ekv@name#1#2}{\ekv@name}
+\def\ekv@undefined@set#1{! expkv Error: Set `#1' undefined.}
+\edef\ekv@checkvalid
+ {%
+ \ekv@unexpanded\expandafter{\ekv@ifempty{#1}}%
+ \ekv@unexpanded
+ {{%
+ \def\ekv@tmp{}%
+ \ekv@errm{empty set name not allowed}%
+ }}%
+ {%
+ \ekv@unexpanded\expandafter{\ekv@ifempty{#2}}%
+ \ekv@unexpanded
+ {%
+ {%
+ \def\ekv@tmp{}%
+ \ekv@errm{empty key name not allowed}%
+ }%
+ \@secondoftwo
+ }%
+ }%
+ \ekv@unexpanded{\@gobble}%
+ }
+\ekv@exparg{\protected\def\ekv@checkvalid#1#2}{\ekv@checkvalid}%
+\ekv@expargtwice{\long\def\ekvifdefined#1#2}%
+ {\expandafter\ekv@ifdefined\expandafter{\ekv@name{#1}{#2}}}
+\ekv@expargtwice{\long\def\ekvifdefinedNoVal#1#2}%
+ {\expandafter\ekv@ifdefined\expandafter{\ekv@name{#1}{#2}N}}
+\def\ekvdef#1#2#3#4#5#6%
+ {%
+ \protected\long\def\ekvdef##1##2##3%
+ {#1{\expandafter\def\csname#2\endcsname####1{##3}#4}}%
+ \protected\long\def\ekvdefNoVal##1##2##3%
+ {#1{\expandafter\def\csname#2N\endcsname{##3}#4}}%
+ \protected\long\def\ekvlet##1##2##3%
+ {#1{\expandafter\let\csname#2\endcsname##3#4}}%
+ \protected\long\def\ekvletNoVal##1##2##3%
+ {#1{\expandafter\let\csname#2N\endcsname##3#4}}%
+ \ekv@expargtwice{\protected\long\def\ekv@defunknown##1##2##3##4}%
+ {%
+ \romannumeral
+ \ekv@exparg
+ {\ekv@zero\ekv@checkvalid{##3}.}%
+ {%
+ \expandafter\expandafter\expandafter
+ \def\expandafter\csname\ekv@name{##3}{}u##1\endcsname##2{##4}%
+ #6%
+ }%
+ }%
+ \ekv@expargtwice{\protected\long\def\ekv@letunknown##1##2##3}%
+ {%
+ \romannumeral
+ \ekv@exparg
+ {\ekv@zero\ekv@checkvalid{##2}.}%
+ {%
+ \expandafter\expandafter\expandafter
+ \let\expandafter\csname\ekv@name{##2}{}u##1\endcsname##3%
+ #5%
+ }%
+ }%
+ \protected\long\def\ekvletkv##1##2##3##4%
+ {%
+ #1%
+ {%
+ \expandafter\let\csname#2\expandafter\endcsname
+ \csname#3\endcsname
+ #4%
+ }%
+ }%
+ \protected\long\def\ekvletkvNoVal##1##2##3##4%
+ {%
+ #1%
+ {%
+ \expandafter\let\csname#2N\expandafter\endcsname
+ \csname#3N\endcsname
+ #4%
+ }%
+ }%
+ }
+\edef\ekvdefNoVal
+ {%
+ {\ekv@unexpanded\expandafter{\ekv@checkvalid{#1}{#2}}}%
+ {\ekv@unexpanded\expandafter{\ekv@name{#1}{#2}}}%
+ {\ekv@unexpanded\expandafter{\ekv@name{#3}{#4}}}%
+ {%
+ \ekv@unexpanded{\expandafter\ekv@defsetmacro\csname}%
+ \ekv@unexpanded\expandafter{\ekv@undefined@set{#1}\endcsname{#1}}%
+ }%
+ {%
+ \ekv@unexpanded{\expandafter\ekv@defsetmacro\csname}%
+ \ekv@unexpanded\expandafter{\ekv@undefined@set{#2}\endcsname{#2}}%
+ }%
+ {%
+ \ekv@unexpanded{\expandafter\ekv@defsetmacro\csname}%
+ \ekv@unexpanded\expandafter{\ekv@undefined@set{#3}\endcsname{#3}}%
+ }%
+ }
+\expandafter\ekvdef\ekvdefNoVal
+\ekv@exparg{\protected\long\def\ekvdefunknown#1#2}%
+ {\ekv@defunknown{}{##1##2##3}{#1}{#2}}
+\ekv@exparg{\protected\long\def\ekvdefunknownNoVal#1#2}%
+ {\ekv@defunknown{N}{##1##2}{#1}{#2}}
+\ekv@exparg{\protected\long\def\ekvletunknown#1#2}%
+ {\ekv@letunknown{}{#1}{#2}}
+\ekv@exparg{\protected\long\def\ekvletunknownNoVal#1#2}%
+ {\ekv@letunknown{N}{#1}{#2}}
+\let\ekv@defunknown\ekv@undefined
+\let\ekv@letunknown\ekv@undefined
+\protected\def\ekv@defredirectunknown#1#2#3#4#5#6%
+ {%
+ \begingroup
+ \edef\ekv@tmp
+ {%
+ \ekvcsvloop#1{#6}%
+ \ekv@unexpanded{#2}%
+ {\ekvcsvloop{}{#5,#6}}%
+ }%
+ \ekv@expargtwice
+ {\endgroup\long#3{#5}}%
+ {\expandafter#4\ekv@tmp\ekv@stop}%
+ }
+\ekv@exparg{\protected\def\ekvredirectunknown#1#2}%
+ {%
+ \ekv@defredirectunknown
+ \ekv@redirect@kv
+ \ekv@err@redirect@kv@notfound
+ \ekvdefunknown
+ \ekv@redirectunknown@aux
+ {#1}{#2}%
+ }
+\ekv@exparg{\protected\def\ekvredirectunknownNoVal#1#2}%
+ {%
+ \ekv@defredirectunknown
+ \ekv@redirect@k
+ \ekv@err@redirect@k@notfound
+ \ekvdefunknownNoVal
+ \ekv@redirectunknownNoVal@aux
+ {#1}{#2}%
+ }
+\def\ekv@redirectunknown@aux#1{#1{##1}{##2}}
+\def\ekv@redirectunknownNoVal@aux#1{#1{##1}}
+\let\ekv@defredirectunknown\ekv@undefined
+\def\ekv@redirect@k#1#2#3#4%
+ {%
+ \ekv@if@lastnamedcs
+ {%
+ \def\ekv@redirect@k##1##2##3%
+ {%
+ \ifcsname#1\endcsname\ekv@redirect@k@a\fi
+ ##3{##1}%
+ }%
+ \def\ekv@redirect@k@a\fi{\fi\expandafter\ekv@redirect@k@b\lastnamedcs}%
+ \long\def\ekv@redirect@kv##1##2##3##4%
+ {%
+ \ifcsname#2\endcsname\ekv@redirect@kv@a\fi\@gobble{##1}%
+ ##4{##1}{##2}%
+ }%
+ \def\ekv@redirect@kv@a\fi\@gobble
+ {\fi\expandafter\ekv@redirect@kv@b\lastnamedcs}%
+ }
+ {%
+ \def\ekv@redirect@k##1##2##3%
+ {%
+ \ifcsname#1\endcsname\ekv@redirect@k@a\fi\ekv@redirect@k@a@
+ #1\endcsname
+ ##3{##1}%
+ }%
+ \def\ekv@redirect@k@a@#3\endcsname{}%
+ \def\ekv@redirect@k@a\fi\ekv@redirect@k@a@
+ {\fi\expandafter\ekv@redirect@k@b\csname}%
+ \long\def\ekv@redirect@kv##1##2##3##4%
+ {%
+ \ifcsname#2\endcsname\ekv@redirect@kv@a\fi\ekv@redirect@kv@a@
+ #2\endcsname{##1}%
+ ##4{##1}{##2}%
+ }%
+ \long\def\ekv@redirect@kv@a@#4\endcsname##3{}%
+ \def\ekv@redirect@kv@a\fi\ekv@redirect@kv@a@
+ {\fi\expandafter\ekv@redirect@kv@b\csname}%
+ }%
+ }
+\def\ekv@redirect@kv#1\detokenize#2#3\ekv@stop{\ekv@unexpanded{#1#2#3}}
+\edef\ekv@redirect@kv
+ {%
+ {\expandafter\ekv@redirect@kv\ekv@name{#2}{#1}N\ekv@stop}%
+ {\expandafter\ekv@redirect@kv\ekv@name{#3}{#2}\ekv@stop}%
+ {\expandafter\ekv@redirect@kv\ekv@name{#1}{#2}N\ekv@stop}%
+ {\expandafter\ekv@redirect@kv\ekv@name{#1}{#2}\ekv@stop}%
+ }
+\expandafter\ekv@redirect@k\ekv@redirect@kv
+\def\ekv@redirect@k@b#1%
+ {\ifx\relax#1\ekv@redirect@k@c\fi\ekv@redirect@k@d#1}
+\def\ekv@redirect@k@c\fi\ekv@redirect@k@d#1{\fi}
+\def\ekv@redirect@k@d#1#2\ekv@stop{#1}
+\def\ekv@redirect@kv@b#1%
+ {\ifx\relax#1\ekv@redirect@kv@c\fi\ekv@redirect@kv@d#1}
+\long\def\ekv@redirect@kv@c\fi\ekv@redirect@kv@d#1#2{\fi}
+\long\def\ekv@redirect@kv@d#1#2#3\ekv@stop{#1{#2}}
+\edef\ekv@defsetmacro
+ {%
+ \ekv@unexpanded{\ifx#1\relax\edef#1##1}%
+ {%
+ \ekv@unexpanded\expandafter{\ekv@name@set{#2}}%
+ \ekv@unexpanded\expandafter{\ekv@name@key{##1}}%
+ }%
+ \ekv@unexpanded{\fi}%
+ }
+\ekv@exparg{\protected\def\ekv@defsetmacro#1#2}{\ekv@defsetmacro}
+\ekv@expargtwice{\def\ekvifdefinedset#1}%
+ {\expandafter\ekv@ifdefined\expandafter{\ekv@undefined@set{#1}}}
+\def\ekv@ifexp#1#2%
+ {%
+ \long\def\ekv@ifexp@split@o@or@other
+ ##1: ##2\ekv@stop##3%
+ ##4#1##5\ekv@stop##6%
+ ##7#2##8\ekv@stop##9%
+ {##9##6##3##1\ekv@stop##2}%
+ \long\def\ekv@ifexp@split@a@or@l
+ ##1#1##2\ekv@stop##3%
+ ##4#2##5\ekv@stop##6%
+ {##6##3##1\ekv@stop##2}%
+ \long\def\ekv@ifexp@split@a##1#1##2\ekv@stop##3%
+ {##3##1\ekv@stop##2}%
+ \long\def\ekv@ifexp@split@l##1#2##2\ekv@stop##3%
+ {##3##1\ekv@stop##2}%
+ \long\def\ekv@ifexp##1%
+ {%
+ \ekv@ifexp@split@o@or@other
+ ##1\ekv@nil\ekv@stop\ekv@ifexp@o
+ : \ekv@stop\ekv@ifexp@none
+ ##1\ekv@stop\ekv@ifexp@a#1\ekv@stop{}%
+ ##1\ekv@stop\ekv@ifexp@l#2\ekv@stop{}%
+ }%
+ \long\def\ekv@ifexp@o##1\ekv@stop
+ {\ekv@ifexp@done{##1}\ekv@mark}%
+ \long\def\ekv@ifexp@none
+ ##1\ekv@nil\ekv@stop\ekv@ifexp@o\ekv@stop
+ ##2##3%
+ {##3}%
+ \def\ekv@ifexp@a##1%
+ {%
+ \ekv@ifexp@a@i
+ ##1\ekv@ifexp@a@ii
+ \ekv@ifexp@none\ekv@ifexp@a@or@o
+ }%
+ \def\ekv@ifexp@a@i##1\ekv@ifexp@none{}%
+ \long\def\ekv@ifexp@a@ii
+ \ekv@ifexp@none\ekv@ifexp@a@or@o
+ ##1#1##2\ekv@stop\ekv@ifexp@o\ekv@stop
+ {\ekv@ifexp@done{##1}\ekv@mark##2}%
+ \long\def\ekv@ifexp@a@or@o##1\ekv@stop
+ {%
+ \ekv@ifexp@split@a
+ ##1\ekv@nil\ekv@stop\ekv@ifexp@a@not@o
+ #1\ekv@stop\ekv@ifexp@o@not@a
+ }%
+ \long\def\ekv@ifexp@a@not@o##1\ekv@stop
+ {\ekv@ifexp@a@not@o@{##1}\ekv@mark}
+ \long\def\ekv@ifexp@a@not@o@
+ ##1##2\ekv@nil#1\ekv@stop\ekv@ifexp@o@not@a
+ {\ekv@ifexp@done{##1}##2: }%
+ \long\def\ekv@ifexp@o@not@a
+ ##1\ekv@nil\ekv@stop\ekv@ifexp@a@not@o\ekv@stop
+ {\ekv@ifexp@done{##1}\ekv@mark}%
+ \def\ekv@ifexp@l##1%
+ {%
+ \ekv@ifexp@l@i
+ ##1\ekv@ifexp@l@ii
+ \ekv@ifexp@none{}%
+ ##1\ekv@ifexp@l@or@o
+ \ekv@ifexp@o
+ \ekv@ifexp@l@or@a
+ }%
+ \def\ekv@ifexp@l@i
+ ##1\ekv@ifexp@none##2%
+ ##3\ekv@ifexp@o
+ {##2}%
+ \long\def\ekv@ifexp@l@ii
+ \ekv@ifexp@l@or@a##1#2##2\ekv@stop
+ \ekv@ifexp@o\ekv@stop#2\ekv@stop##3%
+ {\ekv@ifexp@done{##1}\ekv@mark##2}%
+ \long\def\ekv@ifexp@l@or@o
+ \ekv@ifexp@o\ekv@ifexp@l@or@a
+ ##1\ekv@stop
+ {%
+ \ekv@ifexp@split@l
+ ##1\ekv@nil\ekv@stop\ekv@ifexp@l@not@o
+ #2\ekv@stop\ekv@ifexp@o@not@l
+ }%
+ \long\def\ekv@ifexp@l@not@o##1\ekv@stop
+ {\ekv@ifexp@l@not@o@{##1}\ekv@mark}
+ \long\def\ekv@ifexp@l@not@o@
+ ##1##2\ekv@nil#2\ekv@stop\ekv@ifexp@o@not@l
+ ##3#2\ekv@stop##4%
+ {\ekv@ifexp@done{##1}##2: ##3}%
+ \long\def\ekv@ifexp@o@not@l
+ ##1\ekv@nil\ekv@stop\ekv@ifexp@l@not@o\ekv@stop
+ ##2#2\ekv@stop##3%
+ {\ekv@ifexp@done{##1}\ekv@mark##2}%
+ \def\ekv@ifexp@l@or@a##1%
+ {%
+ \ekv@ifexp@a@i
+ ##1\ekv@ifexp@l@or@a@not@o
+ \ekv@ifexp@none
+ \ekv@ifexp@l@or@a@or@o
+ }%
+ \long\def\ekv@ifexp@l@or@a@not@o
+ \ekv@ifexp@none\ekv@ifexp@l@or@a@or@o
+ ##1#1%
+ {%
+ \ekv@ifexp@split@l
+ ##1\ekv@nil\ekv@stop\ekv@ifexp@l@not@a
+ #2\ekv@stop\ekv@ifexp@a@not@l
+ }%
+ \long\def\ekv@ifexp@l@not@a##1\ekv@stop
+ {\ekv@ifexp@l@not@a@{##1}\ekv@mark}%
+ \long\def\ekv@ifexp@l@not@a@
+ ##1##2\ekv@nil#2\ekv@stop\ekv@ifexp@a@not@l
+ ##3\ekv@stop\ekv@ifexp@o\ekv@stop#2\ekv@stop##4%
+ {\ekv@ifexp@done{##1}##2#1##3}%
+ \long\def\ekv@ifexp@a@not@l
+ ##1\ekv@nil\ekv@stop\ekv@ifexp@l@not@a\ekv@stop
+ ##2\ekv@stop\ekv@ifexp@o\ekv@stop#2\ekv@stop##3%
+ {\ekv@ifexp@done{##1}\ekv@mark##2}%
+ \long\def\ekv@ifexp@l@or@a@or@o##1\ekv@stop
+ {%
+ \ekv@ifexp@split@a@or@l
+ ##1\ekv@nil\ekv@stop\ekv@ifexp@a@not@l@or@o
+ #1\ekv@stop\ekv@ifexp@o@not@l@or@a
+ ##1\ekv@stop\ekv@ifexp@l@or@a@or@o@i#2\ekv@stop{}%
+ }%
+ \long\def\ekv@ifexp@o@not@l@or@a
+ ##1\ekv@nil\ekv@stop\ekv@ifexp@a@not@l@or@o\ekv@stop
+ ##2#2\ekv@stop##3%
+ {\ekv@ifexp@done{##1}\ekv@mark##2}%
+ \long\def\ekv@ifexp@a@not@l@or@o##1\ekv@stop
+ {\ekv@ifexp@a@not@l@or@o@{##1}\ekv@mark}
+ \long\def\ekv@ifexp@a@not@l@or@o@
+ ##1##2\ekv@nil##3#2\ekv@stop##4%
+ {\ekv@ifexp@done{##1}##2: ##3}%
+ \def\ekv@ifexp@l@or@a@or@o@i##1%
+ {%
+ \ekv@ifexp@l@or@a@or@o@ii
+ ##1\ekv@ifexp@l@or@a@or@o@iii
+ \ekv@ifexp@o@not@l@or@a
+ \ekv@ifexp@why
+ }%
+ \def\ekv@ifexp@l@or@a@or@o@ii
+ ##1\ekv@ifexp@o@not@l@or@a
+ {}%
+ \long\def\ekv@ifexp@l@or@a@or@o@iii
+ \ekv@ifexp@o@not@l@or@a\ekv@ifexp@why
+ ##1#2%
+ {\ekv@ifexp@l@or@a@or@o@iv{##1}\ekv@mark}%
+ \long\def\ekv@ifexp@l@or@a@or@o@iv
+ ##1##2\ekv@nil\ekv@stop\ekv@ifexp@a@not@l@or@o\ekv@stop
+ #2\ekv@stop##3##4#2\ekv@stop##5%
+ {\ekv@ifexp@done{##1}##2: ##4}%
+ \long\def\ekv@ifexp@why##1\ekv@stop
+ {%
+ \ekv@ifexp@split@l
+ ##1\ekv@nil\ekv@stop\ekv@ifexp@why@l
+ #2\ekv@stop\ekv@ifexp@why@a
+ }%
+ \long\def\ekv@ifexp@why@l##1\ekv@stop
+ {\ekv@ifexp@why@l@i{##1}\ekv@mark}
+ \long\def\ekv@ifexp@why@l@i
+ ##1##2\ekv@nil#2\ekv@stop\ekv@ifexp@why@a
+ {\ekv@ifexp@why@l@ii{##1}##2#1}
+ \long\def\ekv@ifexp@why@l@ii
+ ##1##2\ekv@nil#2\ekv@stop##3##4#2\ekv@stop##5%
+ {\ekv@ifexp@done{##1}##2: ##4}%
+ \long\def\ekv@ifexp@why@a
+ ##1\ekv@nil\ekv@stop\ekv@ifexp@why@l\ekv@stop
+ ##2\ekv@nil#2\ekv@stop##3##4#2\ekv@stop##5%
+ {\ekv@ifexp@done{##1}\ekv@mark##2: ##4}%
+ \ekv@exparg{\long\def\ekv@ifexp@done##1##2\ekv@nil}%
+ {%
+ \@firstofone
+ {\ekv@ifexp@done@test##1\ekv@nil\ekv@ifexp@panic} \ekv@nil{}%
+ ##2\ekv@stop\ekv@ifexp@done@{##1}{##2}\ekv@stop\@secondoftwo
+ }
+ \long\def\ekv@ifexp@done@test##1 ##2\ekv@nil##3##4##5##6\ekv@stop{##3}
+ \ekv@exparg{\long\def\ekv@ifexp@done@##1##2\ekv@stop\@secondoftwo##3}%
+ {\ekv@strip{##2}{##3{##1}}}%
+ \long\def\ekv@ifexp@panic##1\@secondoftwo##2##3{##3}
+ }
+\begingroup
+ \catcode`\~=13
+ \lccode`\~=`\:
+ \catcode`\z=11
+ \lccode`\z=`\:
+\lowercase{\endgroup
+\ekv@ifexp{~ }{z }}
+\begingroup
+\def\ekvset#1#2{%
+\endgroup
+\ekv@exparg{\long\def\ekvset##1##2}%
+ {%
+ \expandafter\expandafter\expandafter
+ \ekv@set\expandafter\csname\ekv@undefined@set{##1}\endcsname
+ \ekv@mark##2#1\ekv@stop#1{}%
+ }
+\long\def\ekv@set##1##2#1%
+ {%
+ \ekv@gobble@from@mark@to@stop##2\ekv@endset\ekv@stop
+ \ekv@set@other##1##2,\ekv@stop,%
+ }
+\long\def\ekv@endset\ekv@stop\ekv@set@other##1\ekv@mark\ekv@stop,\ekv@stop,##2%
+ {##2}
+\long\def\ekv@eq@other@or@active
+ ##1=##2\ekv@mark##3%
+ ##4#2##5\ekv@mark##6%
+ {##6##3##1\ekv@stop\ekv@mark##2}
+\long\def\ekv@eq@other##1=##2\ekv@mark##3{##3##1\ekv@stop\ekv@mark##2}
+\long\def\ekv@eq@active##1#2##2\ekv@mark##3{##3##1\ekv@stop\ekv@mark##2}
+\long\def\ekv@set@other##1##2,%
+ {%
+ \ekv@gobble@from@mark@to@stop##2\ekv@endset@other\ekv@stop
+ \ekv@eq@other@or@active
+ ##2\ekv@nil\ekv@mark\ekv@set@eq@other
+ =\ekv@mark\ekv@set@noeq
+ ##2\ekv@mark\ekv@set@eq@active
+ #2\ekv@mark{}%
+ ##1%
+ \ekv@mark
+ }
+\ekv@exparg{\long\def\ekv@set@next@other##1##2\ekv@set@other##3##4,}%
+ {\ekv@set@other{##3}{##4},}
+\ekv@exparg{\long\def\ekv@endset@other
+ \ekv@stop\ekv@eq@other@or@active
+ \ekv@mark\ekv@stop\ekv@nil\ekv@mark\ekv@set@eq@other
+ =\ekv@mark\ekv@set@noeq
+ \ekv@mark\ekv@stop\ekv@mark\ekv@set@eq@active#2\ekv@mark##1%
+ ##2##3#1}%
+ {\ekv@set{##2}{##3}#1}
+\ekv@exparg{\long\def\ekv@set@eq@other##1\ekv@stop}%
+ {\ekv@strip@key{##1}\ekv@set@pair}
+\def\ekv@set@if@noeq##1\ekv@set@noeq{}
+\def\ekv@set@eq@active##1%
+ {\ekv@set@if@noeq##1\ekv@set@eq@active@\ekv@set@noeq\ekv@set@eq@mixed}
+\ekv@exparg{\long\def\ekv@set@eq@active@
+ \ekv@set@noeq\ekv@set@eq@mixed
+ ##1#2##2\ekv@mark
+ \ekv@set@eq@other\ekv@stop\ekv@mark#2\ekv@mark##3}%
+ {\ekv@strip@key{##1}\ekv@set@pair\ekv@mark##2}
+\long\def\ekv@set@eq@mixed##1\ekv@stop
+ {%
+ \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@set@eq@mixed@a
+ #2\ekv@mark\ekv@set@eq@mixed@o
+ }
+\ekv@exparg{\long\def\ekv@set@eq@mixed@o
+ ##1\ekv@nil\ekv@mark\ekv@set@eq@mixed@a\ekv@stop\ekv@mark
+ ##2\ekv@nil#2\ekv@mark##3}%
+ {\ekv@strip@key{##1}\ekv@set@pair##2\ekv@nil}
+\ekv@exparg{\long\def\ekv@set@eq@mixed@a
+ ##1\ekv@stop
+ ##2\ekv@nil#2\ekv@mark\ekv@set@eq@mixed@o\ekv@mark
+ ##3#2\ekv@mark##4}%
+ {\ekv@strip@key{##1}\ekv@set@pair##2=##3}
+\ekv@expandedarg
+ {%
+ \long\def\ekv@set@noeq
+ ##1\ekv@nil\ekv@mark\ekv@set@eq@other\ekv@stop\ekv@mark
+ }%
+ {%
+ \ekv@unexpanded
+ {%
+ \ekv@ifblank@##1\ekv@stop\ekv@ifblank@gobbletrue
+ \ekv@stop\ekv@set@was@blank
+ }%
+ \ekv@unexpanded\expandafter{\ekv@strip@key{##1}\ekv@set@key}%
+ }
+\ekv@exparg{\long\expandafter\def\expandafter\ekv@set@was@blank
+ \ekv@strip@key{\ekv@mark##1}\ekv@set@key
+ ##2##3,}%
+ {\ekv@set@other{##2}{##3},}
+\long\def\ekvbreak##1##2\ekv@stop#1##3{##1}
+\long\def\ekvbreakPreSneak ##1##2\ekv@stop#1##3{##1##3}
+\long\def\ekvbreakPostSneak##1##2\ekv@stop#1##3{##3##1}
+\long\def\ekvsneak##1##2\ekv@stop#1##3{##2\ekv@stop#1{##3##1}}
+\long\def\ekvsneakPre##1##2\ekv@stop#1##3{##2\ekv@stop#1{##1##3}}
+\long\def\ekvparse##1##2##3%
+ {%
+ \ekv@unexpanded\ekv@expanded
+ {{\ekv@parse{##1}{##2}\ekv@mark##3#1\ekv@stop#1}}%
+ }
+\long\def\ekv@parse##1##2##3#1%
+ {%
+ \ekv@gobble@from@mark@to@stop##3\ekv@endparse\ekv@stop
+ \ekv@parse@other{##1}{##2}##3,\ekv@stop,%
+ }
+\long\def\ekv@endparse\ekv@stop\ekv@parse@other##1\ekv@mark\ekv@stop,\ekv@stop,%
+ {}
+\long\def\ekv@parse@other##1##2##3,%
+ {%
+ \ekv@gobble@from@mark@to@stop##3\ekv@endparse@other\ekv@stop
+ \ekv@eq@other@or@active
+ ##3\ekv@nil\ekv@mark\ekv@parse@eq@other
+ =\ekv@mark\ekv@parse@noeq
+ ##3\ekv@mark\ekv@parse@eq@active#2\ekv@mark{}%
+ {##1}{##2}%
+ \ekv@mark
+ }
+\ekv@exparg{\long\def\ekv@endparse@other
+ \ekv@stop\ekv@eq@other@or@active
+ \ekv@mark\ekv@stop\ekv@nil\ekv@mark\ekv@parse@eq@other
+ =\ekv@mark\ekv@parse@noeq
+ \ekv@mark\ekv@stop\ekv@mark\ekv@parse@eq@active#2\ekv@mark##1%
+ ##2##3##4#1}%
+ {\ekv@parse{##2}{##3}{##4}#1}
+\ekv@exparg{\long\def\ekv@parse@eq@other##1\ekv@stop}%
+ {\ekv@strip{##1}\ekv@parse@pair}%
+\def\ekv@parse@if@noeq##1\ekv@parse@noeq{}
+\def\ekv@parse@eq@active##1%
+ {%
+ \ekv@parse@if@noeq##1\ekv@parse@eq@active@\ekv@parse@noeq
+ \ekv@parse@eq@mixed
+ }
+\ekv@exparg{\long\def\ekv@parse@eq@active@
+ \ekv@parse@noeq\ekv@parse@eq@mixed
+ ##1#2##2\ekv@mark
+ \ekv@parse@eq@other\ekv@stop\ekv@mark#2\ekv@mark##3}%
+ {\ekv@strip{##1}\ekv@parse@pair\ekv@mark##2}
+\long\def\ekv@parse@eq@mixed##1\ekv@stop
+ {%
+ \ekv@eq@active##1\ekv@nil\ekv@mark\ekv@parse@eq@mixed@a
+ #2\ekv@mark\ekv@parse@eq@mixed@o
+ }
+\ekv@exparg{\long\def\ekv@parse@eq@mixed@a
+ ##1\ekv@stop
+ ##2\ekv@nil#2\ekv@mark\ekv@parse@eq@mixed@o\ekv@mark
+ ##3#2\ekv@mark##4}%
+ {\ekv@strip{##1}\ekv@parse@pair##2=##3}
+\ekv@exparg{\long\def\ekv@parse@eq@mixed@o
+ ##1\ekv@nil\ekv@mark\ekv@parse@eq@mixed@a\ekv@stop\ekv@mark
+ ##2\ekv@nil#2\ekv@mark##3}%
+ {\ekv@strip{##1}\ekv@parse@pair##2\ekv@nil}
+\ekv@expandedarg
+ {%
+ \long\def\ekv@parse@noeq
+ ##1\ekv@nil\ekv@mark\ekv@parse@eq@other\ekv@stop\ekv@mark
+ }%
+ {%
+ \ekv@unexpanded
+ {%
+ \ekv@ifblank@##1\ekv@stop\ekv@ifblank@gobbletrue
+ \ekv@stop\ekv@parse@was@blank
+ }%
+ \ekv@unexpanded\expandafter{\ekv@strip{##1}\ekv@parse@key}%
+ }
+\ekv@exparg{\long\expandafter\def\expandafter\ekv@parse@was@blank
+ \ekv@strip{\ekv@mark##1}\ekv@parse@key
+ ##2##3##4,}%
+ {\ekv@parse@other{##2}{##3}{##4},}
+\ekv@exparg{\long\def\ekv@parse@pair##1##2\ekv@nil}%
+ {\ekv@strip{##2}\ekv@parse@pair@{##1}}
+\ekv@exparg{\long\def\ekv@parse@pair@##1##2##3##4}%
+ {%
+ \ekv@ifexp{##2}%
+ {\ekv@expansion@parse@pair{##1}{##4}}%
+ {\ekv@unexpanded{##4{##2}{##1}}}%
+ \ekv@parse@other{##3}{##4}%
+ }
+\ekv@exparg{\long\def\ekv@parse@key##1##2}%
+ {%
+ \ekv@ifexp{##1}%
+ {\ekv@expansion@parse@key{##2}}%
+ {\ekv@unexpanded{##2{##1}}}%
+ \ekv@parse@other{##2}%
+ }
+}
+\catcode`\,=13
+\catcode`\==13
+\ekvset,=
+\edef\ekvsetSneaked
+ {%
+ \ekv@unexpanded{\ekvsneak{#2}}%
+ \ekv@unexpanded\expandafter{\ekvset{#1}{#3}}%
+ }
+\ekv@expargtwice{\long\def\ekvsetSneaked#1#2#3}{\ekvsetSneaked}
+\ekv@exparg{\def\ekvchangeset#1}%
+ {%
+ \expandafter\expandafter\expandafter
+ \ekv@changeset\expandafter\csname\ekv@undefined@set{#1}\endcsname\ekv@empty
+ }
+\long\def\ekv@changeset#1#2\ekv@set@other#3{#2\ekv@set@other#1}
+\def\ekvmorekv#1%
+ {%
+ \long\def\ekvmorekv##1%
+ {%
+ \expandafter\ekv@morekv\ekv@expanded
+ {{\ekv@morekv@loop\ekv@empty##1\ekv@stop\ekv@morekv@done#1}}%
+ \ekv@empty
+ }%
+ \long\def\ekv@parse@more##1\@gobble##2%
+ {%
+ \expandafter\ekv@parse@more@\ekv@expanded
+ {{\ekv@morekv@loop\ekv@empty##1\ekv@stop\ekv@morekv@done#1}}%
+ }%
+ \long\def\ekv@parse@more@##1\ekv@parse@other##2##3\ekv@mark
+ {\ekv@parse@other{##2}{##3}\ekv@mark##1,}%
+ \long\def\ekv@morekv##1##2\ekv@set@other##3\ekv@mark
+ {##2\ekv@set@other##3\ekv@mark##1,}
+ \long\def\ekv@morekv@loop##1#1%
+ {\ekv@morekv@wrap##1\ekv@stop,\ekv@morekv@loop\ekv@empty}%
+ \long\def\ekv@morekv@wrap##1\ekv@stop{\ekv@unexpanded\expandafter{##1}}%
+ \def\ekv@morekv@done\ekv@stop,\ekv@morekv@loop\ekv@empty{}%
+ }
+\begingroup\catcode`\,=13 \@firstofone{\endgroup\ekvmorekv,}
+\protected\def\ekv@def@expansion@rule#1#2#3#4%
+ {%
+ \long\expandafter\def\csname ekv@expansion@rule@#1\endcsname##1#2%
+ {#3\ekv@expansion@rule@#4}%
+ }
+\protected\def\ekv@def@expansion@rule@ea#1#2%
+ {\ekv@def@expansion@rule{#1}{#2}\expandafter}
+\long\def\ekv@expansion@csname#1\ekv@stop
+ {%
+ ekv@expansion@rule@%
+ \ifcsname ekv@expansion@rule@#1\endcsname
+ #1%
+ \else
+ \ekv@err@undefined@expansion{#1}%
+ \fi
+ }
+\long\def\ekv@expansion@rule@#1#2%
+ {\csname\expandafter\ekv@expansion@csname\string#2\ekv@stop\endcsname{#1}}
+\ekv@exparg
+ {%
+ \long\expandafter
+ \def\csname ekv@expansion@rule@\string\ekv@mark\endcsname
+ #1\ekv@stop#2#3#4#5%
+ }%
+ {%
+ \romannumeral\ekv@exparg{\expandafter\ekv@zero\ekv@ifempty{#3}{#5{#2}{#1}}}%
+ {\ekv@ifempty{#2}{#4{#1}}{\ekv@err@val@no@reinsert{#2}}}%
+ }
+\ekv@def@expansion@rule@ea{o}{}{\expandafter{#1}}
+\ekv@def@expansion@rule@ea{e}{}{\ekv@expanded{{#1}}}
+\ekv@def@expansion@rule@ea{c}{}{\csname#1\endcsname}
+\ekv@def@expansion@rule@ea{f}{}{\expandafter{\romannumeral`\^^@#1}}
+\ekv@exparg{\ekv@def@expansion@rule{s}{}}{\ekv@strip{\ekv@mark#1}}{}
+\ekv@def@expansion@rule{b}{}{}{{{#1}}}
+\ekv@def@expansion@rule{\string\r}{#2\ekv@stop#3#4}{}{{#1}#2\ekv@stop{#3}{#4r}}
+\ekv@def@expansion@rule@ea{g}{}{\expandafter{\@gobble#1}}
+\ekv@def@expansion@rule{p}{#2}{}{{#2#1}}
+\ekv@def@expansion@rule{P}{#2}{}{{#1#2}}
+\long\def\ekv@expansion@rule@V#1%
+ {%
+ \ifx\relax#1\ekv@err@erroneous@variable{#1}\ekv@expansion@@clean@V\fi
+ \ekv@expansion@@V{#1}%
+ }
+\ekv@expandedarg{\long\def\ekv@expansion@rule@v#1}%
+ {%
+ \ekv@unexpanded{\ekv@ifdefined{#1}%
+ {\expandafter\ekv@expansion@@V\csname#1\endcsname}}%
+ {%
+ \ekv@unexpanded{\expandafter\ekv@err@erroneous@variable\ekv@expanded}%
+ {{\expandafter\@gobble\string\\#1}}%
+ \ekv@unexpanded{\ekv@expansion@rule@}{}%
+ }%
+ }
+\ekv@exparg{\long\def\ekv@expansion@rule@r#1#2\ekv@stop#3#4}%
+ {\ekv@expansion@rule@v{#1}#2\ekv@stop{#3}{#4r}}
+\ekv@exparg{\long\def\ekv@expansion@rule@R#1#2\ekv@stop#3#4}%
+ {\ekv@expansion@rule@V{#1}#2\ekv@stop{#3}{#4r}}
+\long\def\ekv@expansion@@V#1%
+ {%
+ \expandafter\ifx\noexpand#1#1%
+ \ekv@fi@firstoftwo
+ \fi
+ \@secondoftwo
+ {\expandafter\ekv@expansion@rule@\expandafter{\the#1}}%
+ {\expandafter\ekv@expansion@rule@\expandafter{#1}}%
+ }
+\long\def\ekv@expansion@@clean@V\fi\ekv@expansion@@V#1%
+ {\fi\ekv@expansion@rule@{}}
+\ekv@def@expansion@rule{\string\key}{#2#3\ekv@stop#4}%
+ {}{{#4}#2\ekv@key@after\ekv@stop{#1}{}{#3}}
+\ekv@exparg{\ekv@def@expansion@rule{\string\ekv@key@after}{\ekv@stop#2#3#4}}%
+ {\ekv@ifempty{#3}{}\ekv@err@key@no@reinsert}
+ {{#2}#4\ekv@stop{#1}}
+\ekv@if@lastnamedcs
+ {%
+ \long\def\ekv@set@pair#1\ekv@mark#2#3\ekv@nil#4%
+ {%
+ \ifcsname#4{#1}\endcsname\expandafter\ekv@set@pair@\lastnamedcs\fi
+ \ekv@set@pair@undefined{#3}{#1}{#2}%
+ \ekv@set@other#4%
+ }
+ \ekv@exparg{\long\def\ekv@set@pair@undefined#1#2#3\ekv@set@other#4}%
+ {%
+ \romannumeral
+ \ekv@exparg
+ {\expandafter\ekv@zero\ekv@ifexp{#3}}%
+ {\ekv@strip{#1}\ekv@expansion@set@pair}%
+ {%
+ \ifcsname#4{}u\endcsname\expandafter\ekv@set@pair@u\lastnamedcs\fi
+ \ekv@set@pair@no@u{#1}{#2}{#3}%
+ }%
+ \ekv@set@other#4%
+ }
+ }
+ {%
+ \long\def\ekv@set@pair#1\ekv@mark#2#3\ekv@nil#4%
+ {%
+ \ifcsname#4{#1}\endcsname
+ \expandafter\ekv@set@pair@\csname#4{#1}\endcsname
+ \fi
+ \ekv@set@pair@undefined{#3}{#1}{#2}%
+ \ekv@set@other#4%
+ }
+ \ekv@exparg{\long\def\ekv@set@pair@undefined#1#2#3\ekv@set@other#4}%
+ {%
+ \romannumeral
+ \ekv@exparg
+ {\expandafter\ekv@zero\ekv@ifexp{#3}}%
+ {\ekv@strip{#1}\ekv@expansion@set@pair}%
+ {%
+ \ifcsname#4{}u\endcsname
+ \expandafter\ekv@set@pair@u\csname#4{}u\endcsname
+ \fi
+ \ekv@set@pair@no@u{#1}{#2}{#3}%
+ }%
+ \ekv@set@other#4%
+ }
+ }
+\ekv@expandedarg{\long\def\ekv@set@pair@#1\fi\ekv@set@pair@undefined#2}%
+ {%
+ \ekv@unexpanded{\fi\ifx#1\relax\ekv@set@pair@relax\fi}%
+ \ekv@unexpanded\expandafter{\ekv@strip{#2}#1\ekv@set@next@other}%
+ }
+\ekv@expandafter{\long\def\ekv@set@pair@relax\fi}%
+ \ekv@strip{#1}#2\ekv@set@next@other
+ {\fi\ekv@set@pair@undefined{#1}}
+\ekv@expandedarg{\long\def\ekv@set@pair@u#1\fi\ekv@set@pair@no@u#2}%
+ {%
+ \ekv@unexpanded
+ {%
+ \fi
+ \ifx\relax#1%
+ \ekv@set@pair@u@relax
+ \fi
+ }%
+ \ekv@unexpanded\expandafter{\ekv@strip{#2}#1}%
+ }
+\ekv@expandafter{\long\def\ekv@set@pair@u@relax\fi}\ekv@strip{\ekv@mark#1}#2%
+ {\fi\ekv@set@pair@no@u.}
+\long\def\ekv@set@pair@no@u#1#2#3\ekv@set@other#4%
+ {%
+ \ekv@ifdefined{#4{#2}N}%
+ \ekv@err@noarg
+ \ekv@err@unknown
+ #4{#2}{#3}%
+ \ekv@set@other#4%
+ }
+\ekv@if@lastnamedcs
+ {%
+ \long\def\ekv@set@key#1\ekv@mark#2#3%
+ {%
+ \ifcsname#3{#1}N\endcsname\expandafter\ekv@set@key@\lastnamedcs\fi
+ \ekv@set@key@undefined{#1}{#2}%
+ \ekv@set@other#3%
+ }
+ \ekv@exparg{\long\def\ekv@set@key@undefined#1#2\ekv@set@other#3}%
+ {%
+ \ekv@ifexp{#2}%
+ \ekv@expansion@set@key
+ {%
+ \ifcsname#3{}uN\endcsname\expandafter\ekv@set@key@u\lastnamedcs\fi
+ \ekv@set@key@no@u{#1}{#2}%
+ }%
+ \ekv@set@other#3%
+ }
+ }
+ {%
+ \long\def\ekv@set@key#1\ekv@mark#2#3%
+ {%
+ \ifcsname#3{#1}N\endcsname
+ \expandafter\ekv@set@key@\csname#3{#1}N\endcsname
+ \fi
+ \ekv@set@key@undefined{#1}{#2}%
+ \ekv@set@other#3%
+ }
+ \ekv@exparg{\long\def\ekv@set@key@undefined#1#2\ekv@set@other#3}%
+ {%
+ \ekv@ifexp{#2}%
+ \ekv@expansion@set@key
+ {%
+ \ifcsname#3{}uN\endcsname
+ \expandafter\ekv@set@key@u\csname#3{}uN\endcsname
+ \fi
+ \ekv@set@key@no@u{#1}{#2}%
+ }%
+ \ekv@set@other#3%
+ }
+ }
+\long\def\ekv@set@key@#1\fi\ekv@set@key@undefined
+ {\fi\ifx#1\relax\ekv@set@key@relax\fi#1\ekv@set@next@other}
+\long\def\ekv@set@key@relax\fi#1\ekv@set@next@other{\fi\ekv@set@key@undefined}
+\long\def\ekv@set@key@u#1\fi\ekv@set@key@no@u
+ {\fi\ifx\relax#1\ekv@set@key@u@relax\fi#1}
+\def\ekv@set@key@u@relax\fi#1{\fi\ekv@set@key@no@u}
+\long\def\ekv@set@key@no@u#1#2\ekv@set@other#3%
+ {%
+ \ekv@ifdefined{#3{#1}}%
+ \ekv@err@reqval
+ \ekv@err@unknown
+ #3{#1}{#2}%
+ \ekv@set@other#3%
+ }
+\long\def\ekv@expansion@set@key#1#2#3%
+ {%
+ \ekv@expansion@rule@{#2}#1\ekv@mark\ekv@stop{}{}\ekvmorekv
+ \ekv@expansion@set@key@
+ }
+\long\def\ekv@expansion@set@key@#1#2\ekv@set@other#3%
+ {\expandafter\ekv@set@key\detokenize{#2}\ekv@mark{#2}#3}
+\long\def\ekv@expansion@set@pair#1#2#3#4%
+ {%
+ \ekv@expansion@rule@{#1}#2\ekv@mark\ekv@stop{#3}{}\ekvmorekv
+ \ekv@expansion@set@pair@
+ }
+\long\def\ekv@expansion@set@pair@#1#2\ekv@set@other#3%
+ {\expandafter\ekv@set@pair\detokenize{#1}\ekv@mark{#1}\ekv@mark{#2}\ekv@nil#3}
+\long\def\ekv@expansion@parse@key#1#2#3#4%
+ {%
+ \ekv@expansion@rule@{#3}#2\ekv@mark\ekv@stop{}{}\ekv@parse@more
+ \ekv@expansion@parse@key@\@gobble{#1}%
+ }
+\long\def\ekv@expansion@parse@key@#1#2\@gobble#3{\ekv@unexpanded{#3{#2}}}
+\long\def\ekv@expansion@parse@pair#1#2#3#4#5%
+ {%
+ \ekv@expansion@rule@{#1}#3\ekv@mark\ekv@stop{#4}{}\ekv@parse@more
+ \ekv@expansion@parse@pair@\@gobble{#2}%
+ }
+\long\def\ekv@expansion@parse@pair@#1#2\@gobble#3{\ekv@unexpanded{#3{#1}{#2}}}
+\ekv@expargtwice{\protected\def\ekvsetdef#1#2}%
+ {%
+ \romannumeral
+ \ekv@exparg{\ekv@zero\ekv@exparg{\def#1##1}}%
+ {\ekvset{#2}{##1}}%
+ }
+\ekv@expargtwice{\protected\def\ekvsetSneakeddef#1#2}%
+ {%
+ \romannumeral
+ \ekv@exparg{\ekv@zero\ekv@exparg{\long\def#1##1##2}}%
+ {\ekvsetSneaked{#2}{##1}{##2}}%
+ }
+\ekv@expargtwice{\protected\def\ekvsetdefSneaked#1#2#3}%
+ {%
+ \romannumeral
+ \ekv@exparg{\ekv@zero\ekv@exparg{\long\def#1##1}}%
+ {\ekvsetSneaked{#2}{#3}{##1}}%
+ }
+\begingroup
+\catcode`\^^@=2
+\@firstofone{\endgroup
+ \def\ekv@alignsafe{\romannumeral\iffalse{\fi`^^@ }
+}
+\def\ekv@endalignsafe{\ifnum`{=\ekv@zero}\fi}
+\begingroup
+\def\ekvoptarg#1#2{%
+\endgroup
+\def\ekvoptarg{#1\ekv@optarg@a}
+\long\def\ekv@optarg@a##1##2##3%
+ {%
+ \ekv@optarg@if\ekv@mark##3\ekv@mark\ekv@optarg@b\ekv@mark[\ekv@mark
+ #2%
+ \@firstofone{ ##1}{##2}{##3}%
+ }%
+\def\ekvoptargTF{#1\ekv@optargTF@a}
+\long\def\ekv@optargTF@a##1##2##3%
+ {%
+ \ekv@optarg@if\ekv@mark##3\ekv@mark\ekv@optargTF@b{##1}\ekv@mark[\ekv@mark
+ #2%
+ \@firstofone{ ##2}{##3}%
+ }
+\long\def\ekv@optarg@b\ekv@mark[\ekv@mark\ifnum`##1\fi\@firstofone##2##3##4##5]%
+ {#2##2{##5}}
+\long\def\ekv@optargTF@b
+ ##1\ekv@mark[\ekv@mark\ifnum`##2\fi\@firstofone##3##4##5]%
+ {#2 ##1{##5}}
+}
+\ekv@exparg
+ {%
+ \expandafter\ekv@strip\expandafter
+ {\expandafter\ekv@mark\ekv@alignsafe}%
+ \ekvoptarg
+ }%
+ \ekv@endalignsafe
+\long\def\ekv@optarg@if#1\ekv@mark[\ekv@mark{}
+\long\def\ekv@ifstar#1#2#3%
+ {%
+ \if*\string#3%
+ \ekv@fi@firstoftwo
+ \fi
+ \@secondoftwo
+ {#1}%
+ {#2{#3}}%
+ }
+\protected\long\def\ekvcompile
+ {%
+ \ekv@alignsafe
+ \ekv@ifstar{\ekv@compile{}}{\ekv@compile{\expandafter\expandafter}}%
+ }
+\def\ekv@compile#1#2#3#{\ekv@compile@{#1}{#2#3}}
+\def\ekv@compile@#1#2#3{#2#3}
+\ekv@exparg{\protected\long\def\ekv@compile@#1#2#3#4}%
+ {%
+ \expandafter\ekv@expanded\expandafter
+ {%
+ \romannumeral\ekv@expargtwice{\ekv@zero\def\ekv@unexpanded{#2}}%
+ {%
+ \expandafter\ekv@compile@
+ \ekvparse
+ {\ekv@compile@key{#1}{#3}}%
+ {\ekv@compile@pair{#1}{#3}}%
+ {#4}%
+ }%
+ }%
+ \ekv@endalignsafe
+ }
+\ekv@exparg{\long\def\ekv@compile@key#1#2#3}%
+ {%
+ \ekvifdefinedNoVal{#2}{#3}%
+ {\ekv@unexpanded#1\expandafter{\csname\ekv@name{#2}{#3}N\endcsname}}%
+ {%
+ \ekv@ifdefined{\ekv@name{#2}{}uN}
+ {%
+ \ekv@unexpanded#1\expandafter
+ {%
+ \csname\ekv@name{#2}{}uN\expandafter\endcsname
+ \expandafter{\detokenize{#3}}{#3}%
+ }%
+ }%
+ {%
+ \ekvifdefined{#2}{#3}%
+ {\ekv@err{missing value for `#3' in set `#2'}}%
+ {\ekv@err{unknown key `#3' in set `#2'}}%
+ }%
+ }%
+ }
+\ekv@exparg{\long\def\ekv@compile@pair#1#2#3#4}%
+ {%
+ \ekvifdefined{#2}{#3}%
+ {\ekv@unexpanded#1\expandafter{\csname\ekv@name{#2}{#3}\endcsname{#4}}}%
+ {%
+ \ekv@ifdefined{\ekv@name{#2}{}u}%
+ {%
+ \ekv@unexpanded#1\expandafter
+ {%
+ \csname\ekv@name{#2}{}u\ekv@expanded{\endcsname
+ {\ekv@unexpanded{#4}}{\detokenize{#3}}}{#3}%
+ }%
+ }%
+ {%
+ \ekvifdefinedNoVal{#2}{#3}%
+ {\ekv@err{unwanted value for `#3' in set `#2'}}%
+ {\ekv@err{unknown key `#3' in set `#2'}}%
+ }%
+ }%
+ }
+\def\ekv@err@cleanup\par{}
+\def\ekv@err@collect#1%
+ {%
+ \def\ekv@err@collect##1\par##2%
+ {%
+ \expandafter
+ \ekv@err@cleanup
+ #1! ##2 Error: ##1\par
+ }%
+ \def#1##1\thanks@jfbu{}%
+ }
+\def\ekverr{ }
+\expandafter\ekv@err@collect\csname <an-expandable-macro>^^J%
+ completed due to above exception. \ekverr If the error^^J%
+ summary is \ekverr not comprehensible \ekverr see the package^^J%
+ documentation.^^J%
+ I will try to recover now. \ekverr If you're in inter-^^J%
+ active mode hit <return> \ekverr at the ? prompt and I^^J%
+ continue hoping recovery\endcsname
+\long\def\ekverr#1#2{\expandafter\ekv@err@collect\detokenize{#2}\par{#1}}
+\ekv@exparg{\long\def\ekv@err#1}{\ekverr{expkv}{#1}}
+\protected\long\def\ekv@errm#1{\errmessage{expkv Error: #1}}
+\long\def\ekv@err@common #1#2{\expandafter\ekv@err@common@\string#2{#1}}
+\ekv@exparg{\long\def\ekv@err@common@#1`#2' #3.#4#5}%
+ {\ekv@err{#4 `#5' in set `#2'}}
+\ekv@exparg{\long\def\ekv@err@unknown#1#2}{\ekv@err@common{unknown key}{#1}}
+\ekv@exparg{\long\def\ekv@err@noarg#1#2}
+ {\ekv@err@common{unwanted value for}{#1}}
+\ekv@exparg{\long\def\ekv@err@reqval#1#2}%
+ {\ekv@err@common{missing value for}{#1}}
+\ekv@exparg{\long\def\ekv@err@redirect@kv@notfound#1#2#3\ekv@stop}%
+ {\ekv@err{no key `#2' in sets #3}}
+\ekv@exparg{\def\ekv@err@redirect@k@notfound#1#2\ekv@stop}%
+ {\ekv@err{no NoVal key `#1' in sets #2}}
+\ekv@exparg{\def\ekv@err@undefined@expansion#1\fi}%
+ {\expandafter\fi\ekv@err{Undefined expansion rule `#1'}}%
+\ekv@exparg{\def\ekv@err@erroneous@variable#1}%
+ {\ekv@err{Erroneous variable `#1' used}}
+\ekv@exparg{\def\ekv@err@key@no@reinsert}%
+ {\ekv@err{Reinsertion in \key expansion forbidden}}
+\ekv@exparg{\def\ekv@err@val@no@reinsert#1}%
+ {\ekv@err{Reinsertion with key `#1' forbidden}}
+\catcode`\@=\ekv@tmp
+%%
+%%
+%% End of file `expkv.tex'.
diff --git a/Master/texmf-dist/tex/latex/expkv-bundle/expkv-cs.sty b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-cs.sty
new file mode 100644
index 00000000000..66faca62fe7
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-cs.sty
@@ -0,0 +1,67 @@
+%%
+%% This is file `expkv-cs.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% expkv-cs.dtx (with options: `pkg')
+%%
+%% ----------------------------------------------------------------
+%% expkv-bundle -- an expandable key=val implementation and friends
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+%% Copyright (C) 2020-2023 Jonathan P. Spratte
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the files expkv-bundle.ins
+%% expkv.dtx
+%% expkv-cs.dtx
+%% expkv-def.dtx
+%% expkv-opt.dtx
+%% expkv-pop.dtx
+%% and the derived files expkv.sty
+%% expkv.tex
+%% t-expkv.tex
+%% expkv-cs.sty
+%% expkv-cs.tex
+%% t-expkv-cs.tex
+%% expkv-def.sty
+%% expkv-def.tex
+%% t-expkv-def.tex
+%% expkv-opt.sty
+%% expkv-pop.sty
+%% expkv-pop.tex
+%% t-expkv-pop.tex
+%%
+%% as well as any documentation files shipped with it.
+%%
+\RequirePackage{expkv-pop}
+\def\ekvc@tmp
+ {%
+ \ProvidesFile{expkv-cs.tex}%
+ [%
+ \ekvcDate\space v\ekvcVersion\space
+ define expandable key=val macros using expkv%
+ ]%
+ }
+\input{expkv-cs.tex}
+\ProvidesPackage{expkv-cs}%
+ [%
+ \ekvcDate\space v\ekvcVersion\space
+ define expandable key=val macros using expkv%
+ ]
+%%
+%%
+%% End of file `expkv-cs.sty'.
diff --git a/Master/texmf-dist/tex/latex/expkv-bundle/expkv-def.sty b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-def.sty
new file mode 100644
index 00000000000..300974bd57f
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-def.sty
@@ -0,0 +1,61 @@
+%%
+%% This is file `expkv-def.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% expkv-def.dtx (with options: `pkg')
+%%
+%% ----------------------------------------------------------------
+%% expkv-bundle -- an expandable key=val implementation and friends
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+%% Copyright (C) 2020-2023 Jonathan P. Spratte
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the files expkv-bundle.ins
+%% expkv.dtx
+%% expkv-cs.dtx
+%% expkv-def.dtx
+%% expkv-opt.dtx
+%% expkv-pop.dtx
+%% and the derived files expkv.sty
+%% expkv.tex
+%% t-expkv.tex
+%% expkv-cs.sty
+%% expkv-cs.tex
+%% t-expkv-cs.tex
+%% expkv-def.sty
+%% expkv-def.tex
+%% t-expkv-def.tex
+%% expkv-opt.sty
+%% expkv-pop.sty
+%% expkv-pop.tex
+%% t-expkv-pop.tex
+%%
+%% as well as any documentation files shipped with it.
+%%
+\RequirePackage{expkv-pop}
+\def\ekvd@tmp
+ {%
+ \ProvidesFile{expkv-def.tex}%
+ [\ekvdDate\space v\ekvdVersion\space a key-defining frontend for expkv]%
+ }
+\input{expkv-def.tex}
+\ProvidesPackage{expkv-def}%
+ [\ekvdDate\space v\ekvdVersion\space a key-defining frontend for expkv]
+%%
+%%
+%% End of file `expkv-def.sty'.
diff --git a/Master/texmf-dist/tex/latex/expkv-bundle/expkv-opt-2020-10-10.sty b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-opt-2020-10-10.sty
new file mode 100644
index 00000000000..c2082261d77
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-opt-2020-10-10.sty
@@ -0,0 +1,288 @@
+%%
+%% This is file `expkv-opt-2020-10-10.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% expkv-opt-2020-10-10.dtx (with options: `pkg')
+%%
+%% --------------------------------------------------------------
+%% expkv-opt -- parse class and package options with expkv
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% --------------------------------------------------------------
+%%
+%% Copyright (C) 2020-2023 Jonathan P. Spratte
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the file expkv-opt.dtx
+%% and the derived files expkv-opt.pdf
+%% expkv-opt.sty
+%% and the file expkv-opt-2020-10-10.dtx
+%% and the derived file expkv-opt-2020-10-10.sty
+%%
+\newcommand*\ekvoVersion{0.1c}
+\newcommand*\ekvoDate{2020-10-10}
+\ProvidesPackage{expkv-opt}
+ [%
+ \ekvoDate\space v\ekvoVersion\space
+ parse class and package options with expkv%
+ ]
+\RequirePackage{expkv}
+\protected\long\def\ekvo@CurrentOption@loop#1#2%
+ {%
+ \ekvo@CurrentOption@loop@#2\ekv@set@other\ekv@mark#1,\ekv@stop,\ekvo@tail
+ }
+\long\def\ekvo@CurrentOption@loop@#1\ekv@set@other#2,%
+ {%
+ \ekv@gobble@from@mark@to@stop#2\ekvo@end@loop\ekv@stop
+ \ekv@ifblank{#2}%
+ {}%
+ {%
+ \edef\CurrentOption{\unexpanded\expandafter{\ekv@gobble@mark#2}}%
+ #1{#2}%
+ }%
+ \ekvo@CurrentOption@loop@#1\ekv@set@other\ekv@mark
+ }
+\long\def\ekvo@end@loop#1\ekvo@tail{}
+\def\ekvo@ifx@TF#1#2{\ifx#1#2\ekv@fi@firstoftwo\fi\@secondoftwo}
+\def\ekvo@ifx@F#1#2{\ifx#1#2\ekv@fi@gobble\fi\@firstofone}
+\protected\def\ekvo@do@with@set#1#2%
+ {%
+ \ekvifdefinedset{#1}%
+ {%
+ \expandafter
+ \let\expandafter\ekvo@name\csname\ekv@undefined@set{#1}\endcsname
+ \def\ekvo@setname{#1}%
+ #2%
+ }%
+ {\ekvo@err@undefined@set{#1}}%
+ }
+\protected\long\def\ekvo@handle@undefined@k@pkg#1%
+ {%
+ \ekv@ifdefined{\ekvo@name{#1}}%
+ {\ekvo@err@value@required{#1}}%
+ {\ekvo@err@undefined@key{#1}}%
+ }
+\def\ekvo@handle@undefined@kv@pkg#1#2%
+ {%
+ \ekv@ifdefined{\ekvo@name{#1}N}%
+ {\ekvo@err@value@forbidden{#1}}%
+ {\ekvo@err@undefined@key{#1}}%
+ }
+\long\def\ekvo@addto@unused@one#1{\ekvo@addto@list\@unusedoptionlist}
+\long\def\ekvo@addto@unused@two#1#2{\ekvo@addto@list\@unusedoptionlist}
+\long\def\ekvo@rmfrom@unused@one#1{\ekvo@rmfrom@list\@unusedoptionlist}
+\long\def\ekvo@rmfrom@unused@two#1#2{\ekvo@rmfrom@list\@unusedoptionlist}
+\protected\def\ekvo@set@handlers@local
+ {%
+ \ekvo@if@need@handlers
+ {%
+ \ifx\@currext\@clsextension
+ \ifx\@classoptionslist\relax
+ \let\ekvo@handle@undefined@k\@gobble
+ \let\ekvo@handle@undefined@kv\@gobbletwo
+ \else
+ \expandafter
+ \ifx\csname opt@\@currname.\@currext\endcsname\@classoptionslist
+ \let\ekvo@handle@undefined@k\ekvo@addto@unused@one
+ \let\ekvo@handle@undefined@kv\ekvo@addto@unused@two
+ \else
+ \let\ekvo@handle@undefined@k\@gobble
+ \let\ekvo@handle@undefined@kv\@gobbletwo
+ \fi
+ \fi
+ \else
+ \let\ekvo@handle@undefined@k\ekvo@handle@undefined@k@pkg
+ \let\ekvo@handle@undefined@kv\ekvo@handle@undefined@kv@pkg
+ \fi
+ }%
+ }
+\protected\def\ekvo@set@handlers@global
+ {%
+ \unless\ifx\@unusedoptionlist\@empty
+ \let\ekvo@handle@defined@k\ekvo@rmfrom@unused@one
+ \let\ekvo@handle@defined@kv\ekvo@rmfrom@unused@two
+ \fi
+ \ekvo@if@need@handlers
+ {%
+ \let\ekvo@handle@undefined@k\@gobble
+ \let\ekvo@handle@undefined@kv\@gobbletwo
+ }%
+ }
+\protected\def\ekvo@set@handlers@unusedglobal
+ {%
+ \ekvo@if@need@handlers
+ {%
+ \let\ekvo@handle@undefined@k\ekvo@addto@unused@one
+ \let\ekvo@handle@undefined@kv\ekvo@addto@unused@two
+ \let\@unusedoptionlist\@empty
+ \@gobbletwo
+ }%
+ \@firstofone
+ {%
+ \let\ekvo@handle@defined@k\ekvo@rmfrom@unused@one
+ \let\ekvo@handle@defined@kv\ekvo@rmfrom@unused@two
+ }%
+ }
+\protected\def\ekvo@set@handlers@list
+ {%
+ \ekvo@if@need@handlers
+ {%
+ \let\ekvo@handle@undefined@k\@gobble
+ \let\ekvo@handle@undefined@kv\@gobbletwo
+ }%
+ }
+\let\ekvo@if@need@handlers\@firstofone
+\protected\long\def\ekvo@dont@need@handlers#1%
+ {%
+ \let\ekvo@if@need@handlers\@firstofone
+ }%
+\let\ekvo@handle@defined@k\@gobble
+\let\ekvo@handle@defined@kv\@gobbletwo
+\protected\def\ekvo@process@common#1#2#3%
+ {%
+ #1{\ekvo@do@with@set{#3}{#2}}%
+ }
+\protected\def\ekvo@process@list#1%
+ {%
+ \expandafter\ekvo@CurrentOption@loop\expandafter{#1}\ekvo@parse
+ }
+\protected\long\def\ekvo@parse#1%
+ {%
+ \ekv@expanded
+ {\ekv@unexpanded{\ekvparse\ekvo@set@k\ekvo@set@kv}\expandafter}%
+ \expandafter{\ekv@gobble@mark#1}\ekvo@tail
+ }
+\protected\def\ekvo@set@k#1#2\ekvo@tail
+ {%
+ \ekv@ifdefined{\ekvo@name{#1}N}%
+ {%
+ \ekvo@handle@defined@k{#1}%
+ \csname\ekvo@name{#1}N\endcsname
+ }%
+ {\ekvo@handle@undefined@k{#1}}%
+ }
+\protected\def\ekvo@set@kv#1#2#3\ekvo@tail
+ {%
+ \ekv@ifdefined{\ekvo@name{#1}}%
+ {%
+ \ekvo@handle@defined@kv{#1}{#2}%
+ \csname\ekvo@name{#1}\endcsname{#2}%
+ }%
+ {\ekvo@handle@undefined@kv{#1}{#2}}%
+ }
+\protected\def\ekvo@addto@list#1%
+ {%
+ \ekvo@ifx@TF#1\@empty
+ {\let#1\CurrentOption}%
+ {%
+ \edef#1%
+ {%
+ \unexpanded\expandafter{#1},%
+ \unexpanded\expandafter{\CurrentOption}%
+ }%
+ }%
+ }
+\protected\def\ekvo@rmfrom@list#1%
+ {%
+ \ekvo@ifx@F#1\@empty
+ {%
+ \let\ekvo@tmp@list\@empty
+ \let\ekvo@curropt\CurrentOption
+ \expandafter\ekvo@CurrentOption@loop\expandafter{#1}\ekvo@rmfrom@list@
+ \let\CurrentOption\ekvo@curropt
+ \let#1\ekvo@tmp@list
+ }%
+ }
+\protected\long\def\ekvo@rmfrom@list@#1%
+ {%
+ \ekvo@ifx@F\CurrentOption\ekvo@curropt
+ {\ekvo@addto@list\ekvo@tmp@list}%
+ }
+\protected\def\ekvo@err@undefined@key#1%
+ {%
+ \PackageError{expkv-opt}{Undefined key `#1' in set `\ekvo@setname'}{}%
+ }
+\protected\def\ekvo@err@value@required#1%
+ {%
+ \PackageError{expkv-opt}%
+ {Value required for key `#1' in set `\ekvo@setname'}%
+ {}%
+ }
+\protected\def\ekvo@err@value@forbidden#1%
+ {%
+ \PackageError{expkv-opt}%
+ {Value forbidden for key `#1' in set `\ekvo@setname'}%
+ {}%
+ }
+\protected\def\ekvo@err@undefined@set#1%
+ {%
+ \PackageError{expkv-opt}%
+ {Undefined set `#1'}%
+ {The set for which you try to parse options isn't defined in expkv.}%
+ }
+\protected\def\ekvoProcessLocalOptions
+ {%
+ \ekvo@process@common
+ {\ekv@ifdefined{opt@\@currname.\@currext}\@firstofone\@gobble}%
+ {%
+ \ekvo@set@handlers@local
+ \expandafter
+ \ekvo@process@list\csname opt@\@currname.\@currext\endcsname
+ \AtEndOfPackage{\let\@unprocessedoptions\relax}%
+ }%
+ }
+\protected\def\ekvoProcessGlobalOptions
+ {%
+ \ekvo@process@common{\ekvo@ifx@F\@classoptionslist\relax}%
+ {%
+ \ekvo@set@handlers@global
+ \ekvo@process@list\@classoptionslist
+ \let\ekvo@handle@defined@k\@gobble
+ \let\ekvo@handle@defined@kv\@gobbletwo
+ }%
+ }
+\protected\def\ekvoProcessUnusedGlobalOptions
+ {%
+ \ekvo@process@common{\ekvo@ifx@F\@unusedoptionlist\@empty}%
+ {%
+ \let\ekvo@tmp@list\@unusedoptionlist
+ \ekvo@set@handlers@unusedglobal
+ \ekvo@process@list\ekvo@tmp@list
+ \let\ekvo@handle@defined@k\@gobble
+ \let\ekvo@handle@defined@kv\@gobbletwo
+ }%
+ }
+\protected\def\ekvoProcessOptionsList#1%
+ {%
+ \ekvo@process@common{\ekvo@ifx@F#1\@empty}%
+ {%
+ \ekvo@set@handlers@list
+ \ekvo@process@list#1%
+ }%
+ }
+\protected\def\ekvoUseUnknownHandlers#1#2%
+ {%
+ \let\ekvo@handle@undefined@k#1\relax
+ \let\ekvo@handle@undefined@kv#2\relax
+ \let\ekvo@if@need@handlers\ekvo@dont@need@handlers
+ }
+\@onlypreamble\ekvoProcessLocalOptions
+\@onlypreamble\ekvoProcessGlobalOptions
+\@onlypreamble\ekvoProcessUnusedGlobalOptions
+\@onlypreamble\ekvoProcessOptionsList
+\@onlypreamble\ekvoUseUnknownHandlers
+%%
+%%
+%% End of file `expkv-opt-2020-10-10.sty'.
diff --git a/Master/texmf-dist/tex/latex/expkv-bundle/expkv-opt.sty b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-opt.sty
new file mode 100644
index 00000000000..a3d3dd2a742
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-opt.sty
@@ -0,0 +1,517 @@
+%%
+%% This is file `expkv-opt.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% expkv-opt.dtx (with options: `pkg')
+%%
+%% ----------------------------------------------------------------
+%% expkv-bundle -- an expandable key=val implementation and friends
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+%% Copyright (C) 2020-2023 Jonathan P. Spratte
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the files expkv-bundle.ins
+%% expkv.dtx
+%% expkv-cs.dtx
+%% expkv-def.dtx
+%% expkv-opt.dtx
+%% expkv-pop.dtx
+%% and the derived files expkv.sty
+%% expkv.tex
+%% t-expkv.tex
+%% expkv-cs.sty
+%% expkv-cs.tex
+%% t-expkv-cs.tex
+%% expkv-def.sty
+%% expkv-def.tex
+%% t-expkv-def.tex
+%% expkv-opt.sty
+%% expkv-pop.sty
+%% expkv-pop.tex
+%% t-expkv-pop.tex
+%%
+%% as well as any documentation files shipped with it.
+%%
+\IfFormatAtLeastTF{2021/05/01}
+ {}
+ {%
+ \ifx\pkgcls@targetlabel\@empty
+ \ifnum\requestedLaTeXdate=\pkgcls@targetdate
+ \pkgcls@parse@date@arg{=v0.1}%
+ \fi
+ \fi
+ }
+\DeclareRelease{v0.1}{2020/10/10}{expkv-opt-2020-10-10.sty}
+\DeclareCurrentRelease{v0.2}{2021/04/04}
+\newcommand*\ekvoVersion{1.0}
+\newcommand*\ekvoDate{2023-01-23}
+\ProvidesPackage{expkv-opt}
+ [%
+ \ekvoDate\space v\ekvoVersion\space
+ parse class and package options with expkv%
+ ]
+\RequirePackage{expkv}
+\protected\long\def\ekvo@CurrentOption@loop#1#2%
+ {%
+ \ekvo@CurrentOption@loop@#2\ekv@set@other\ekv@mark#1,\ekv@stop,\ekvo@tail
+ }
+\long\def\ekvo@CurrentOption@loop@#1\ekv@set@other#2,%
+ {%
+ \ekv@gobble@from@mark@to@stop#2\ekvo@end@loop\ekv@stop
+ \ekv@ifblank{#2}%
+ {}%
+ {%
+ \edef\CurrentOption{\unexpanded\expandafter{\ekv@gobble@mark#2}}%
+ #1{#2}%
+ }%
+ \ekvo@CurrentOption@loop@#1\ekv@set@other\ekv@mark
+ }
+\long\def\ekvo@end@loop#1\ekvo@tail{}
+\def\ekvo@ifx@TF#1#2{\ifx#1#2\ekv@fi@firstoftwo\fi\@secondoftwo}
+\def\ekvo@ifx@T#1#2{\ifx#1#2\ekv@fi@firstofone\fi\@gobble}
+\def\ekvo@ifx@F#1#2{\ifx#1#2\ekv@fi@gobble\fi\@firstofone}
+\protected\def\ekvo@do@with@set#1#2%
+ {%
+ \ekvifdefinedset{#1}%
+ {%
+ \expandafter
+ \let\expandafter\ekvo@name\csname\ekv@undefined@set{#1}\endcsname
+ \def\ekvo@setname{#1}%
+ #2%
+ }%
+ {\ekvo@err@undefined@set{#1}}%
+ }
+\protected\long\def\ekvo@handle@undefined@k@pkg#1%
+ {%
+ \ekv@ifdefined{\ekvo@name{#1}}%
+ {\ekvo@err@value@required{#1}}%
+ {\ekvo@err@undefined@key{#1}}%
+ }
+\def\ekvo@handle@undefined@kv@pkg#1#2%
+ {%
+ \ekv@ifdefined{\ekvo@name{#1}N}%
+ {\ekvo@err@value@forbidden{#1}}%
+ {\ekvo@err@undefined@key{#1}}%
+ }
+\long\def\ekvo@addto@unused@one#1{\ekvo@do@unusedoptionlist\ekvo@addnewto@list}
+\long\def\ekvo@addto@unused@two#1#2{\ekvo@do@unusedoptionlist\ekvo@addnewto@list}
+\long\def\ekvo@rmfrom@unused@one#1%
+ {%
+ \ekvo@ifx@F\@unusedoptionlist\@empty
+ {\ekvo@do@unusedoptionlist\ekvo@rmfrom@list}%
+ }
+\long\def\ekvo@rmfrom@unused@two#1#2%
+ {%
+ \ekvo@ifx@F\@unusedoptionlist\@empty
+ {\ekvo@do@unusedoptionlist\ekvo@rmfrom@list}%
+ }
+\protected\def\ekvo@do@unusedoptionlist#1%
+ {%
+ \let\ekvo@unpreparedCurrentOption\CurrentOption
+ \edef\CurrentOption
+ {\expandafter\ekvo@prepare@unusedoption\CurrentOption=\ekv@mark}%
+ #1\@unusedoptionlist
+ \let\CurrentOption\ekvo@unpreparedCurrentOption
+ }
+\def\ekvo@prepare@unusedoption{\ekvo@prepare@unusedoption@a\@empty}
+\def\ekvo@prepare@unusedoption@a#1%
+ {%
+ \long\def\ekvo@prepare@unusedoption@a##1=##2\ekv@mark
+ {%
+ \ekvo@prepare@unusedoption@b##1\ekv@stop
+ \ekv@mark\ekvo@prepare@unusedoption@b
+ #1\ekv@mark\ekvo@prepare@unusedoption@c
+ }%
+ }
+\ekvo@prepare@unusedoption@a{ }
+\long\def\ekvo@prepare@unusedoption@b#1 #2\ekv@mark#3{#3#1#2\ekv@mark#3}
+\long\def\ekvo@prepare@unusedoption@c
+ #1\ekv@stop
+ \ekv@mark\ekvo@prepare@unusedoption@b\ekv@mark\ekvo@prepare@unusedoption@c
+ {\unexpanded\expandafter{#1}}
+\protected\def\ekvo@set@handlers@local
+ {%
+ \ekvo@if@need@handlers
+ {%
+ \ifx\@currext\@clsextension
+ \ifx\@classoptionslist\relax
+ \let\ekvo@handle@undefined@k\@gobble
+ \let\ekvo@handle@undefined@kv\@gobbletwo
+ \else
+ \expandafter
+ \ifx
+ \csname @raw@opt@\@currname.\@currext\endcsname
+ \@raw@classoptionslist
+ \let\ekvo@handle@undefined@k\ekvo@addto@unused@one
+ \let\ekvo@handle@undefined@kv\ekvo@addto@unused@two
+ \unless\ifx\@unusedoptionlist\@empty
+ \let\ekvo@handle@defined@k\ekvo@rmfrom@unused@one
+ \let\ekvo@handle@defined@kv\ekvo@rmfrom@unused@two
+ \fi
+ \else
+ \let\ekvo@handle@undefined@k\@gobble
+ \let\ekvo@handle@undefined@kv\@gobbletwo
+ \fi
+ \fi
+ \else
+ \let\ekvo@handle@undefined@k\ekvo@handle@undefined@k@pkg
+ \let\ekvo@handle@undefined@kv\ekvo@handle@undefined@kv@pkg
+ \fi
+ }%
+ }
+\protected\def\ekvo@set@handlers@global
+ {%
+ \unless\ifx\@unusedoptionlist\@empty
+ \let\ekvo@handle@defined@k\ekvo@rmfrom@unused@one
+ \let\ekvo@handle@defined@kv\ekvo@rmfrom@unused@two
+ \fi
+ \ekvo@if@need@handlers
+ {%
+ \let\ekvo@handle@undefined@k\@gobble
+ \let\ekvo@handle@undefined@kv\@gobbletwo
+ }%
+ }
+\protected\def\ekvo@set@handlers@list
+ {%
+ \ekvo@if@need@handlers
+ {%
+ \let\ekvo@handle@undefined@k\@gobble
+ \let\ekvo@handle@undefined@kv\@gobbletwo
+ }%
+ }
+\let\ekvo@if@need@handlers\@firstofone
+\protected\long\def\ekvo@dont@need@handlers#1%
+ {%
+ \let\ekvo@if@need@handlers\@firstofone
+ }%
+\let\ekvo@handle@defined@k\@gobble
+\let\ekvo@handle@defined@kv\@gobbletwo
+\protected\def\ekvo@process@common#1#2#3%
+ {%
+ #1{\ekvo@do@with@set{#3}{#2}}%
+ }
+\protected\def\ekvo@process@list#1%
+ {%
+ \expandafter\ekvo@CurrentOption@loop\expandafter{#1}\ekvo@parse
+ }
+\long\def\ekvo@parse#1%
+ {%
+ \ekv@eq@other#1\ekv@nil\ekv@mark\ekvo@parse@kv
+ =\ekv@mark\ekvo@parse@k
+ }
+\long\def\ekvo@parse@kv#1\ekv@stop#2\ekv@nil=\ekv@mark\ekvo@parse@k
+ {\ekv@strip{#2}{\ekv@strip{#1}\ekvo@parse@kv@}}
+\long\def\ekvo@parse@kv@#1#2%
+ {%
+ \ekv@ifexp{#1}%
+ {\ekvo@expansion@kv{#2}}%
+ {\ekvo@set@kv{#1}{#2}}%
+ }
+\long\def\ekvo@expansion@kv#1#2#3#4%
+ {%
+ \ekv@expansion@rule@{#1}#2\ekv@mark\ekv@stop{#3}{}%
+ {\ekvo@handle@defined@kv{#3}{#1}\ekvmorekv}%
+ \ekvo@expansion@kv@
+ }
+\long\def\ekvo@expansion@kv@#1#2{\ekvo@set@kv{#1}{#2}}
+\long\def\ekvo@parse@k#1\ekv@nil\ekv@mark\ekvo@parse@kv\ekv@stop\ekv@mark
+ {\ekv@strip{#1}\ekvo@parse@k@}
+\long\def\ekvo@parse@k@#1%
+ {%
+ \ekv@ifexp{#1}%
+ \ekvo@expansion@k
+ {\ekvo@set@k{#1}}%
+ }
+\long\def\ekvo@expansion@k#1#2#3%
+ {%
+ \ekv@expansion@rule@{#2}#1\ekv@mark\ekv@stop{}{}%
+ {\ekvo@handle@defined@k{#2}\ekvmorekv}%
+ \ekvo@expansion@k@
+ }
+\long\def\ekvo@expansion@k@#1#2{\ekvo@set@k{#2}}
+\protected\def\ekvo@set@k#1%
+ {%
+ \ekv@ifdefined{\ekvo@name{#1}N}%
+ {%
+ \ekvo@handle@defined@k{#1}%
+ \csname\ekvo@name{#1}N\endcsname
+ }%
+ {\ekvo@handle@undefined@k{#1}}%
+ }
+\protected\def\ekvo@set@kv#1#2%
+ {%
+ \ekv@ifdefined{\ekvo@name{#1}}%
+ {%
+ \ekvo@handle@defined@kv{#1}{#2}%
+ \csname\ekvo@name{#1}\endcsname{#2}%
+ }%
+ {\ekvo@handle@undefined@kv{#1}{#2}}%
+ }
+\protected\def\ekvo@addto@list#1%
+ {%
+ \ekvo@ifx@TF#1\@empty
+ {\let#1\CurrentOption}%
+ {%
+ \edef#1%
+ {%
+ \unexpanded\expandafter{#1},%
+ \unexpanded\expandafter{\CurrentOption}%
+ }%
+ }%
+ }
+\protected\def\ekvo@addnewto@list#1%
+ {%
+ \ekvo@ifx@TF#1\@empty
+ {\let#1\CurrentOption}%
+ {%
+ \ekvo@if@in@list#1%
+ {}%
+ {%
+ \edef#1%
+ {%
+ \unexpanded\expandafter{#1},%
+ \unexpanded\expandafter{\CurrentOption}%
+ }%
+ }%
+ }%
+ }
+\protected\def\ekvo@if@in@list#1%
+ {%
+ \ekvo@ifx@TF#1\@empty
+ \@secondoftwo
+ {%
+ \let\ekvo@curropt\CurrentOption
+ \let\ekvo@if@in@list@result\@secondoftwo
+ \expandafter\ekvo@CurrentOption@loop\expandafter{#1}\ekvo@if@in@list@
+ \let\CurrentOption\ekvo@curropt
+ \ekvo@if@in@list@result
+ }%
+ }
+\protected\long\def\ekvo@if@in@list@#1%
+ {%
+ \ekvo@ifx@T\ekvo@curropt\CurrentOption
+ {%
+ \let\ekvo@if@in@list@result\@firstoftwo
+ \ekvo@end@loop
+ }%
+ }
+\protected\def\ekvo@rmfrom@list#1%
+ {%
+ \ekvo@ifx@F#1\@empty
+ {%
+ \let\ekvo@tmp@list\@empty
+ \let\ekvo@curropt\CurrentOption
+ \expandafter\ekvo@CurrentOption@loop\expandafter{#1}\ekvo@rmfrom@list@
+ \let\CurrentOption\ekvo@curropt
+ \let#1\ekvo@tmp@list
+ }%
+ }
+\protected\long\def\ekvo@rmfrom@list@#1%
+ {%
+ \ekvo@ifx@F\CurrentOption\ekvo@curropt
+ {\ekvo@addto@list\ekvo@tmp@list}%
+ }
+\protected\def\ekvo@err@undefined@key#1%
+ {%
+ \ekvo@pkg@cls@error
+ {Undefined option `\detokenize{#1}'}%
+ {The used option was not defined. Perhaps you misspelled it?}%
+ }
+\protected\def\ekvo@err@value@required#1%
+ {%
+ \ekvo@pkg@cls@error
+ {Missing value for option `\detokenize{#1}'}%
+ {The used option requires a value or you misspelled its name.}%
+ }
+\protected\def\ekvo@err@value@forbidden#1%
+ {%
+ \ekvo@pkg@cls@error
+ {Unwanted value for option `\detokenize{#1}'}%
+ {The used option doesn't support a value or you misspelled its name.}%
+ }
+\protected\def\ekvo@err@undefined@set#1%
+ {%
+ \PackageError{expkv-opt}%
+ {Undefined set `#1'}%
+ {The set for which you try to parse options isn't defined in expkv.}%
+ }
+\protected\def\ekvo@pkg@cls@error
+ {%
+ \ekvo@ifx@TF\@currext\@clsextension
+ \ClassError
+ \PackageError
+ \@currname
+ }
+\protected\def\ekvoProcessOptions#1%
+ {%
+ \ekvo@if@need@handlers
+ {%
+ \ekvoProcessGlobalOptions{#1}%
+ \ekvoProcessLocalOptions {#1}%
+ \ekvoProcessFutureOptions{#1}%
+ \@gobbletwo
+ }%
+ \@firstofone
+ {%
+ \let\ekvo@tmpa\ekvo@handle@undefined@k
+ \let\ekvo@tmpb\ekvo@handle@undefined@kv
+ \ekvoUseUnknownHandlers\ekvo@tmpa\ekvo@tmpb
+ \ekvoProcessGlobalOptions{#1}%
+ \ekvoUseUnknownHandlers\ekvo@tmpa\ekvo@tmpb
+ \ekvoProcessLocalOptions {#1}%
+ \ekvoUseUnknownHandlers\ekvo@tmpa\ekvo@tmpb
+ \ekvoProcessFutureOptions{#1}%
+ \let\ekvo@tmpa\ekvo@undefined
+ \let\ekvo@tmpb\ekvo@undefined
+ }%
+ }
+\protected\def\ekvoProcessLocalOptions
+ {%
+ \ekvo@process@common
+ {\ekv@ifdefined{@raw@opt@\@currname.\@currext}\@firstofone\@gobble}%
+ {%
+ \ekvo@set@handlers@local
+ \expandafter
+ \ekvo@process@list\csname @raw@opt@\@currname.\@currext\endcsname
+ \AtEndOfPackage{\let\@unprocessedoptions\relax}%
+ }%
+ }
+\protected\def\ekvoProcessGlobalOptions
+ {%
+ \ekvo@process@common{\ekvo@ifx@F\@classoptionslist\relax}%
+ {%
+ \ekvo@set@handlers@global
+ \ekvo@process@list\@raw@classoptionslist
+ \let\ekvo@handle@defined@k\@gobble
+ \let\ekvo@handle@defined@kv\@gobbletwo
+ }%
+ }
+\protected\def\ekvoProcessUnusedGlobalOptions#1%
+ {%
+ \PackageError{expkv-opt}%
+ {%
+ \noexpand
+ \ekvoProcessUnusedGlobalOptions no longer works because of changes in%
+ \MessageBreak
+ the LaTeX2e kernel%
+ }%
+ {}%
+ }
+\IfFormatAtLeastTF{2022/11/01}
+ {%
+ \protected\def\ekvoProcessFutureOptions#1%
+ {%
+ \ekvo@if@need@handlers\@gobbletwo
+ \@firstofone
+ {%
+ \expandafter\let
+ \csname ekvo@future@undefined@k@\@currname.\@currext\endcsname
+ \ekvo@handle@undefined@k
+ \expandafter\let
+ \csname ekvo@future@undefined@kv@\@currname.\@currext\endcsname
+ \ekvo@handle@undefined@kv
+ }%
+ \protected\expandafter
+ \xdef\csname opt@handler@\@currname.\@currext\endcsname
+ {\ekv@unexpanded{\ekvo@future{#1}}}%
+ }
+ \protected\def\ekvo@future
+ {%
+ \ekvo@process@common
+ {\ekv@ifdefined{@raw@opt@\@currname.\@currext}\@firstofone\@gobble}%
+ {%
+ \ekvo@set@handlers@future
+ \expandafter\ekvo@process@list
+ \csname @raw@opt@\@currname.\@currext\endcsname
+ \AtEndOfPackage{\let\@unprocessedoptions\relax}%
+ }%
+ }
+ \protected\def\ekvo@set@handlers@future
+ {%
+ \expandafter\let\expandafter
+ \ekvo@handle@undefined@k
+ \csname
+ \ekv@ifdefined{ekvo@future@undefined@k@\@currname.\@currext}%
+ {ekvo@future@undefined@k@\@currname.\@currext}%
+ {ekvo@handle@undefined@k@pkg}%
+ \endcsname
+ \expandafter\let\expandafter
+ \ekvo@handle@undefined@kv
+ \csname
+ \ekv@ifdefined{ekvo@future@undefined@kv@\@currname.\@currext}%
+ {ekvo@future@undefined@kv@\@currname.\@currext}%
+ {ekvo@handle@undefined@kv@pkg}%
+ \endcsname
+ }
+ }
+ {%
+ \protected\def\ekvoProcessFutureOptions#1%
+ {%
+ \PackageWarning{expkv-opt}%
+ {LaTeX-kernel is too old to process future options.\@gobbletwo}%
+ \protected\gdef\ekvoProcessFutureOptions##1{}%
+ }%
+ }
+\protected\def\ekvoProcessOptionsList#1%
+ {%
+ \ekvo@process@common{\ekvo@ifx@F#1\@empty}%
+ {%
+ \ekvo@set@handlers@list
+ \ekvo@process@list#1%
+ }%
+ }
+\protected\def\ekvoUseUnknownHandlers
+ {%
+ \let\ekvo@if@need@handlers\ekvo@dont@need@handlers
+ \@ifstar\ekvoUseUnknownHandlers@s\ekvoUseUnknownHandlers@n
+ }
+\protected\def\ekvoUseUnknownHandlers@s
+ {%
+ \long\def\ekvo@handle@undefined@k##1%
+ {%
+ \ekv@ifdefined{\ekvo@name{}uN}%
+ {%
+ \csname\ekvo@name{}uN\expandafter\endcsname\expandafter
+ {\detokenize{##1}}{##1}%
+ }%
+ {\@gobble}%
+ }%
+ \long\def\ekvo@handle@undefined@kv##1##2%
+ {%
+ \ekv@ifdefined{\ekvo@name{}u}%
+ {%
+ \csname\ekvo@name{}u\ekv@expanded{\endcsname
+ {\ekv@unexpanded{##2}}{\detokenize{##1}}}{##1}%
+ }%
+ {}%
+ }%
+ }
+\protected\def\ekvoUseUnknownHandlers@n#1#2%
+ {%
+ \let\ekvo@handle@undefined@k#1\relax
+ \let\ekvo@handle@undefined@kv#2\relax
+ }
+\@onlypreamble\ekvoProcessOptions
+\@onlypreamble\ekvoProcessLocalOptions
+\@onlypreamble\ekvoProcessGlobalOptions
+\@onlypreamble\ekvoProcessFutureOptions
+\@onlypreamble\ekvoProcessOptionsList
+\@onlypreamble\ekvoUseUnknownHandlers
+%%
+%%
+%% End of file `expkv-opt.sty'.
diff --git a/Master/texmf-dist/tex/latex/expkv-bundle/expkv-pop.sty b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-pop.sty
new file mode 100644
index 00000000000..d72d49d2567
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/expkv-bundle/expkv-pop.sty
@@ -0,0 +1,61 @@
+%%
+%% This is file `expkv-pop.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% expkv-pop.dtx (with options: `pkg')
+%%
+%% ----------------------------------------------------------------
+%% expkv-bundle -- an expandable key=val implementation and friends
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+%% Copyright (C) 2020-2023 Jonathan P. Spratte
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the files expkv-bundle.ins
+%% expkv.dtx
+%% expkv-cs.dtx
+%% expkv-def.dtx
+%% expkv-opt.dtx
+%% expkv-pop.dtx
+%% and the derived files expkv.sty
+%% expkv.tex
+%% t-expkv.tex
+%% expkv-cs.sty
+%% expkv-cs.tex
+%% t-expkv-cs.tex
+%% expkv-def.sty
+%% expkv-def.tex
+%% t-expkv-def.tex
+%% expkv-opt.sty
+%% expkv-pop.sty
+%% expkv-pop.tex
+%% t-expkv-pop.tex
+%%
+%% as well as any documentation files shipped with it.
+%%
+\RequirePackage{expkv}
+\def\ekvp@tmp
+ {%
+ \ProvidesFile{expkv-pop.tex}%
+ [\ekvpDate\space v\ekvpVersion\space a prefix oriented parser]%
+ }
+\input{expkv-pop.tex}
+\ProvidesPackage{expkv-pop}%
+ [\ekvpDate\space v\ekvpVersion\space a prefix oriented parser]
+%%
+%%
+%% End of file `expkv-pop.sty'.
diff --git a/Master/texmf-dist/tex/latex/expkv-bundle/expkv.sty b/Master/texmf-dist/tex/latex/expkv-bundle/expkv.sty
new file mode 100644
index 00000000000..310beff3bc9
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/expkv-bundle/expkv.sty
@@ -0,0 +1,68 @@
+%%
+%% This is file `expkv.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% expkv.dtx (with options: `pkg')
+%%
+%% ----------------------------------------------------------------
+%% expkv-bundle -- an expandable key=val implementation and friends
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+%% Copyright (C) 2020-2023 Jonathan P. Spratte
+%%
+%% This work may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this license or
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the files expkv-bundle.ins
+%% expkv.dtx
+%% expkv-cs.dtx
+%% expkv-def.dtx
+%% expkv-opt.dtx
+%% expkv-pop.dtx
+%% and the derived files expkv.sty
+%% expkv.tex
+%% t-expkv.tex
+%% expkv-cs.sty
+%% expkv-cs.tex
+%% t-expkv-cs.tex
+%% expkv-def.sty
+%% expkv-def.tex
+%% t-expkv-def.tex
+%% expkv-opt.sty
+%% expkv-pop.sty
+%% expkv-pop.tex
+%% t-expkv-pop.tex
+%%
+%% as well as any documentation files shipped with it.
+%%
+\def\ekv@tmp
+ {%
+ \ProvidesFile{expkv.tex}%
+ [\ekvDate\space v\ekvVersion\space an expandable key=val implementation]%
+ }
+\input{expkv.tex}
+\ProvidesPackage{expkv}%
+ [\ekvDate\space v\ekvVersion\space an expandable key=val implementation]
+\let\ekv@tmp\@empty
+\DeclareOption{all}
+ {%
+ \def\ekv@tmp
+ {\RequirePackage{expkv-pop,expkv-cs,expkv-def,expkv-opt}}%
+ }
+\ProcessOptions\relax
+\ekv@tmp
+%%
+%%
+%% End of file `expkv.sty'.