texlive[52909] trunk: attachfile2 splt from oberdiek (24nov19)

commits+karl at tug.org commits+karl at tug.org
Sun Nov 24 22:34:38 CET 2019


Revision: 52909
          http://tug.org/svn/texlive?view=revision&revision=52909
Author:   karl
Date:     2019-11-24 22:34:37 +0100 (Sun, 24 Nov 2019)
Log Message:
-----------
attachfile2 splt from oberdiek (24nov19)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/Makefile.am
    trunk/Build/source/texk/texlive/linked_scripts/Makefile.in
    trunk/Build/source/texk/texlive/linked_scripts/attachfile2/pdfatfi.pl
    trunk/Build/source/texk/texlive/linked_scripts/scripts.lst
    trunk/Master/bin/aarch64-linux/pdfatfi
    trunk/Master/bin/amd64-freebsd/pdfatfi
    trunk/Master/bin/amd64-netbsd/pdfatfi
    trunk/Master/bin/armhf-linux/pdfatfi
    trunk/Master/bin/i386-cygwin/pdfatfi
    trunk/Master/bin/i386-freebsd/pdfatfi
    trunk/Master/bin/i386-linux/pdfatfi
    trunk/Master/bin/i386-netbsd/pdfatfi
    trunk/Master/bin/i386-solaris/pdfatfi
    trunk/Master/bin/x86_64-cygwin/pdfatfi
    trunk/Master/bin/x86_64-darwin/pdfatfi
    trunk/Master/bin/x86_64-darwinlegacy/pdfatfi
    trunk/Master/bin/x86_64-linux/pdfatfi
    trunk/Master/bin/x86_64-linuxmusl/pdfatfi
    trunk/Master/bin/x86_64-solaris/pdfatfi
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/libexec/ctan2tds
    trunk/Master/tlpkg/tlpsrc/collection-latexrecommended.tlpsrc
    trunk/Master/tlpkg/tlpsrc/pdftools.tlpsrc

Added Paths:
-----------
    trunk/Build/source/texk/texlive/linked_scripts/attachfile2/
    trunk/Master/texmf-dist/doc/latex/attachfile2/
    trunk/Master/texmf-dist/doc/latex/attachfile2/README.md
    trunk/Master/texmf-dist/doc/latex/attachfile2/attachfile2.pdf
    trunk/Master/texmf-dist/scripts/attachfile2/
    trunk/Master/texmf-dist/scripts/attachfile2/pdfatfi.pl
    trunk/Master/texmf-dist/source/latex/attachfile2/
    trunk/Master/texmf-dist/source/latex/attachfile2/attachfile2.dtx
    trunk/Master/texmf-dist/tex/latex/attachfile2/
    trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-dvipdfmx.def
    trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-dvips.def
    trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-luatex.def
    trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-pdftex.def
    trunk/Master/texmf-dist/tex/latex/attachfile2/attachfile2.sty
    trunk/Master/tlpkg/tlpsrc/attachfile2.tlpsrc

Removed Paths:
-------------
    trunk/Build/source/texk/texlive/linked_scripts/oberdiek/

Modified: trunk/Build/source/texk/texlive/linked_scripts/Makefile.am
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/Makefile.am	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Build/source/texk/texlive/linked_scripts/Makefile.am	2019-11-24 21:34:37 UTC (rev 52909)
@@ -83,6 +83,7 @@
 	accfonts/vpl2ovp \
 	accfonts/vpl2vpl \
 	arara/arara.sh \
+	attachfile2/pdfatfi.pl \
 	authorindex/authorindex \
 	bib2gls/bib2gls.sh \
 	bib2gls/convertgls2bib.sh \
@@ -157,7 +158,6 @@
 	multibibliography/multibibliography.pl \
 	musixtex/musixflx.lua \
 	musixtex/musixtex.lua \
-	oberdiek/pdfatfi.pl \
 	pax/pdfannotextractor.pl \
 	pdfcrop/pdfcrop.pl \
 	pdflatexpicscale/pdflatexpicscale.pl \

Modified: trunk/Build/source/texk/texlive/linked_scripts/Makefile.in
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/Makefile.in	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Build/source/texk/texlive/linked_scripts/Makefile.in	2019-11-24 21:34:37 UTC (rev 52909)
@@ -296,6 +296,7 @@
 	accfonts/vpl2ovp \
 	accfonts/vpl2vpl \
 	arara/arara.sh \
+	attachfile2/pdfatfi.pl \
 	authorindex/authorindex \
 	bib2gls/bib2gls.sh \
 	bib2gls/convertgls2bib.sh \
@@ -370,7 +371,6 @@
 	multibibliography/multibibliography.pl \
 	musixtex/musixflx.lua \
 	musixtex/musixtex.lua \
-	oberdiek/pdfatfi.pl \
 	pax/pdfannotextractor.pl \
 	pdfcrop/pdfcrop.pl \
 	pdflatexpicscale/pdflatexpicscale.pl \

Modified: trunk/Build/source/texk/texlive/linked_scripts/attachfile2/pdfatfi.pl
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/oberdiek/pdfatfi.pl	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Build/source/texk/texlive/linked_scripts/attachfile2/pdfatfi.pl	2019-11-24 21:34:37 UTC (rev 52909)
@@ -19,9 +19,8 @@
 # This work has the LPPL maintenance status "maintained".
 #
 # The Current Maintainers of this work are
-Heiko Oberdiek and the Oberdiek Package Support Group
-https://github.com/ho-tex/oberdiek/issues
-
+# Heiko Oberdiek and the Oberdiek Package Support Group
+# https://github.com/ho-tex/attachfile2/issues
 #
 # See file "attachfile2.pdf" for a list of files that belong to
 # this project.
@@ -33,7 +32,7 @@
 my $file        = "$prj.pl";
 my $program     = uc($&) if $file =~ /^\w+/;
 my $version     = "2.9";
-my $date        = "2019/07/24";
+my $date        = "2019/11/24";
 my $author      = "Heiko Oberdiek";
 my $copyright   = "Copyright (c) 2005-2010, 2012 by $author.";
 #
@@ -42,7 +41,7 @@
 #   2006/08/16 v2.2: Included in DTX file of attachfile2.dtx.
 #   2010/09/27 v2.6: Keys ModDateTZ and CreationDateTZ added.
 #   2016/05/16 v2.8: Option --version added.
-#   2019/07/24 v2.9: adapted version to attachfile2 version.
+#   2019/11/24 v2.10: adapted version to attachfile2 version.
 #
 
 use POSIX qw(strftime); # %z is used (GNU)
@@ -145,9 +144,9 @@
             print "!!! Warning: File `$file' not found!\n";
         }
         else {
-            my $size = @s[7];
-            my $mtime = @s[9];
-            my $ctime = @s[10]; # inode change time
+            my $size = $s[7];
+            my $mtime = $s[9];
+            my $ctime = $s[10]; # inode change time
 
             my ($sec, $min, $hour, $mday, $mon, $year) =
                     localtime($mtime);

Modified: trunk/Build/source/texk/texlive/linked_scripts/scripts.lst
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/scripts.lst	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Build/source/texk/texlive/linked_scripts/scripts.lst	2019-11-24 21:34:37 UTC (rev 52909)
@@ -26,6 +26,7 @@
 accfonts/vpl2ovp
 accfonts/vpl2vpl
 arara/arara.sh
+attachfile2/pdfatfi.pl
 authorindex/authorindex
 bib2gls/bib2gls.sh
 bib2gls/convertgls2bib.sh
@@ -100,7 +101,6 @@
 multibibliography/multibibliography.pl
 musixtex/musixflx.lua
 musixtex/musixtex.lua
-oberdiek/pdfatfi.pl
 pax/pdfannotextractor.pl
 pdfcrop/pdfcrop.pl
 pdflatexpicscale/pdflatexpicscale.pl

Modified: trunk/Master/bin/aarch64-linux/pdfatfi
===================================================================
--- trunk/Master/bin/aarch64-linux/pdfatfi	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/bin/aarch64-linux/pdfatfi	2019-11-24 21:34:37 UTC (rev 52909)
@@ -1 +1 @@
-link ../../texmf-dist/scripts/oberdiek/pdfatfi.pl
\ No newline at end of file
+link ../../texmf-dist/scripts/attachfile2/pdfatfi.pl
\ No newline at end of file

Modified: trunk/Master/bin/amd64-freebsd/pdfatfi
===================================================================
--- trunk/Master/bin/amd64-freebsd/pdfatfi	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/bin/amd64-freebsd/pdfatfi	2019-11-24 21:34:37 UTC (rev 52909)
@@ -1 +1 @@
-link ../../texmf-dist/scripts/oberdiek/pdfatfi.pl
\ No newline at end of file
+link ../../texmf-dist/scripts/attachfile2/pdfatfi.pl
\ No newline at end of file

Modified: trunk/Master/bin/amd64-netbsd/pdfatfi
===================================================================
--- trunk/Master/bin/amd64-netbsd/pdfatfi	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/bin/amd64-netbsd/pdfatfi	2019-11-24 21:34:37 UTC (rev 52909)
@@ -1 +1 @@
-link ../../texmf-dist/scripts/oberdiek/pdfatfi.pl
\ No newline at end of file
+link ../../texmf-dist/scripts/attachfile2/pdfatfi.pl
\ No newline at end of file

Modified: trunk/Master/bin/armhf-linux/pdfatfi
===================================================================
--- trunk/Master/bin/armhf-linux/pdfatfi	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/bin/armhf-linux/pdfatfi	2019-11-24 21:34:37 UTC (rev 52909)
@@ -1 +1 @@
-link ../../texmf-dist/scripts/oberdiek/pdfatfi.pl
\ No newline at end of file
+link ../../texmf-dist/scripts/attachfile2/pdfatfi.pl
\ No newline at end of file

Modified: trunk/Master/bin/i386-cygwin/pdfatfi
===================================================================
--- trunk/Master/bin/i386-cygwin/pdfatfi	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/bin/i386-cygwin/pdfatfi	2019-11-24 21:34:37 UTC (rev 52909)
@@ -1 +1 @@
-link ../../texmf-dist/scripts/oberdiek/pdfatfi.pl
\ No newline at end of file
+link ../../texmf-dist/scripts/attachfile2/pdfatfi.pl
\ No newline at end of file

Modified: trunk/Master/bin/i386-freebsd/pdfatfi
===================================================================
--- trunk/Master/bin/i386-freebsd/pdfatfi	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/bin/i386-freebsd/pdfatfi	2019-11-24 21:34:37 UTC (rev 52909)
@@ -1 +1 @@
-link ../../texmf-dist/scripts/oberdiek/pdfatfi.pl
\ No newline at end of file
+link ../../texmf-dist/scripts/attachfile2/pdfatfi.pl
\ No newline at end of file

Modified: trunk/Master/bin/i386-linux/pdfatfi
===================================================================
--- trunk/Master/bin/i386-linux/pdfatfi	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/bin/i386-linux/pdfatfi	2019-11-24 21:34:37 UTC (rev 52909)
@@ -1 +1 @@
-link ../../texmf-dist/scripts/oberdiek/pdfatfi.pl
\ No newline at end of file
+link ../../texmf-dist/scripts/attachfile2/pdfatfi.pl
\ No newline at end of file

Modified: trunk/Master/bin/i386-netbsd/pdfatfi
===================================================================
--- trunk/Master/bin/i386-netbsd/pdfatfi	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/bin/i386-netbsd/pdfatfi	2019-11-24 21:34:37 UTC (rev 52909)
@@ -1 +1 @@
-link ../../texmf-dist/scripts/oberdiek/pdfatfi.pl
\ No newline at end of file
+link ../../texmf-dist/scripts/attachfile2/pdfatfi.pl
\ No newline at end of file

Modified: trunk/Master/bin/i386-solaris/pdfatfi
===================================================================
--- trunk/Master/bin/i386-solaris/pdfatfi	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/bin/i386-solaris/pdfatfi	2019-11-24 21:34:37 UTC (rev 52909)
@@ -1 +1 @@
-link ../../texmf-dist/scripts/oberdiek/pdfatfi.pl
\ No newline at end of file
+link ../../texmf-dist/scripts/attachfile2/pdfatfi.pl
\ No newline at end of file

Modified: trunk/Master/bin/x86_64-cygwin/pdfatfi
===================================================================
--- trunk/Master/bin/x86_64-cygwin/pdfatfi	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/bin/x86_64-cygwin/pdfatfi	2019-11-24 21:34:37 UTC (rev 52909)
@@ -1 +1 @@
-link ../../texmf-dist/scripts/oberdiek/pdfatfi.pl
\ No newline at end of file
+link ../../texmf-dist/scripts/attachfile2/pdfatfi.pl
\ No newline at end of file

Modified: trunk/Master/bin/x86_64-darwin/pdfatfi
===================================================================
--- trunk/Master/bin/x86_64-darwin/pdfatfi	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/bin/x86_64-darwin/pdfatfi	2019-11-24 21:34:37 UTC (rev 52909)
@@ -1 +1 @@
-link ../../texmf-dist/scripts/oberdiek/pdfatfi.pl
\ No newline at end of file
+link ../../texmf-dist/scripts/attachfile2/pdfatfi.pl
\ No newline at end of file

Modified: trunk/Master/bin/x86_64-darwinlegacy/pdfatfi
===================================================================
--- trunk/Master/bin/x86_64-darwinlegacy/pdfatfi	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/bin/x86_64-darwinlegacy/pdfatfi	2019-11-24 21:34:37 UTC (rev 52909)
@@ -1 +1 @@
-link ../../texmf-dist/scripts/oberdiek/pdfatfi.pl
\ No newline at end of file
+link ../../texmf-dist/scripts/attachfile2/pdfatfi.pl
\ No newline at end of file

Modified: trunk/Master/bin/x86_64-linux/pdfatfi
===================================================================
--- trunk/Master/bin/x86_64-linux/pdfatfi	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/bin/x86_64-linux/pdfatfi	2019-11-24 21:34:37 UTC (rev 52909)
@@ -1 +1 @@
-link ../../texmf-dist/scripts/oberdiek/pdfatfi.pl
\ No newline at end of file
+link ../../texmf-dist/scripts/attachfile2/pdfatfi.pl
\ No newline at end of file

Modified: trunk/Master/bin/x86_64-linuxmusl/pdfatfi
===================================================================
--- trunk/Master/bin/x86_64-linuxmusl/pdfatfi	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/bin/x86_64-linuxmusl/pdfatfi	2019-11-24 21:34:37 UTC (rev 52909)
@@ -1 +1 @@
-link ../../texmf-dist/scripts/oberdiek/pdfatfi.pl
\ No newline at end of file
+link ../../texmf-dist/scripts/attachfile2/pdfatfi.pl
\ No newline at end of file

Modified: trunk/Master/bin/x86_64-solaris/pdfatfi
===================================================================
--- trunk/Master/bin/x86_64-solaris/pdfatfi	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/bin/x86_64-solaris/pdfatfi	2019-11-24 21:34:37 UTC (rev 52909)
@@ -1 +1 @@
-link ../../texmf-dist/scripts/oberdiek/pdfatfi.pl
\ No newline at end of file
+link ../../texmf-dist/scripts/attachfile2/pdfatfi.pl
\ No newline at end of file

Added: trunk/Master/texmf-dist/doc/latex/attachfile2/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/attachfile2/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/attachfile2/README.md	2019-11-24 21:34:37 UTC (rev 52909)
@@ -0,0 +1,11 @@
+# attachfile2
+attach files to PDF documents
+
+
+
+See the embedfile package for a newer package supporting this feature.
+
+
+This package comes with a Perl script pdfatfi.pl
+that should be installed somewhere in PATH as `pdfatfi', see also
+package documentation.


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

Index: trunk/Master/texmf-dist/doc/latex/attachfile2/attachfile2.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/attachfile2/attachfile2.pdf	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/texmf-dist/doc/latex/attachfile2/attachfile2.pdf	2019-11-24 21:34:37 UTC (rev 52909)

Property changes on: trunk/Master/texmf-dist/doc/latex/attachfile2/attachfile2.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/scripts/attachfile2/pdfatfi.pl
===================================================================
--- trunk/Master/texmf-dist/scripts/attachfile2/pdfatfi.pl	                        (rev 0)
+++ trunk/Master/texmf-dist/scripts/attachfile2/pdfatfi.pl	2019-11-24 21:34:37 UTC (rev 52909)
@@ -0,0 +1,218 @@
+#!/usr/bin/env perl
+use strict;
+$^W=1; # turn warning on
+#
+# pdfatfi.pl
+#
+# Copyright (C) 2005-2010, 2012 Heiko Oberdiek.
+#
+# This work may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either
+# version 1.3c of this license or (at your option) any later
+# version. This version of this license is in
+#    https://www.latex-project.org/lppl/lppl-1-3c.txt
+# and the latest version of this license is in
+#    https://www.latex-project.org/lppl.txt
+# and version 1.3 or later is part of all distributions of
+# LaTeX version 2005/12/01 or later.
+#
+# This work has the LPPL maintenance status "maintained".
+#
+# The Current Maintainers of this work are
+# Heiko Oberdiek and the Oberdiek Package Support Group
+# https://github.com/ho-tex/attachfile2/issues
+#
+# See file "attachfile2.pdf" for a list of files that belong to
+# this project.
+#
+# This file "pdfatfi.pl" may be renamed to "pdfatfi"
+# for installation purposes.
+#
+my $prj         = 'pdfatfi';
+my $file        = "$prj.pl";
+my $program     = uc($&) if $file =~ /^\w+/;
+my $version     = "2.9";
+my $date        = "2019/11/24";
+my $author      = "Heiko Oberdiek";
+my $copyright   = "Copyright (c) 2005-2010, 2012 by $author.";
+#
+# History:
+#   2005/05/21 v1.0: First release.
+#   2006/08/16 v2.2: Included in DTX file of attachfile2.dtx.
+#   2010/09/27 v2.6: Keys ModDateTZ and CreationDateTZ added.
+#   2016/05/16 v2.8: Option --version added.
+#   2019/11/24 v2.10: adapted version to attachfile2 version.
+#
+
+use POSIX qw(strftime); # %z is used (GNU)
+use Digest::MD5;
+
+### program identification
+my $title = "$program $version, $date - $copyright\n";
+
+### error strings
+my $Error = "!!! Error:"; # error prefix
+
+### variables
+my $atfifile;
+
+### option variables
+my @bool = ("false", "true");
+$::opt_help       = 0;
+$::opt_quiet      = 0;
+$::opt_debug      = 0;
+$::opt_verbose    = 0;
+$::opt_version    = 0;
+
+my $usage = <<"END_OF_USAGE";
+${title}Syntax:   \L$program\E [options] <file[.atfi]>
+Function: Help program for LaTeX package "attachfile2".
+Options:                                    (defaults:)
+  --help          print usage
+  --version       print version number
+  --(no)quiet     suppress messages         ($bool[$::opt_quiet])
+  --(no)verbose   verbose printing          ($bool[$::opt_verbose])
+  --(no)debug     debug informations        ($bool[$::opt_debug])
+END_OF_USAGE
+
+### process options
+my @OrgArgv = @ARGV;
+use Getopt::Long;
+GetOptions(
+  "help!",
+  "version!",
+  "quiet!",
+  "debug!",
+  "verbose!",
+) or die $usage;
+!$::opt_help or die $usage;
+if ($::opt_version) {
+    print "$prj $date v$version\n";
+    exit(0);
+}
+ at ARGV == 1 or die "$usage$Error Missing jobname!\n";
+
+$::opt_quiet = 0 if $::opt_verbose;
+
+print $title unless $::opt_quiet;
+
+### get jobname
+$atfifile = $ARGV[0];
+if (!-f $atfifile && -f "$atfifile.atfi") {
+    $atfifile .= ".atfi";
+}
+-f $atfifile or die "$Error File `$atfifile' not found!\n";
+
+print "* job file     = $atfifile\n" if $::opt_verbose;
+
+if ($::opt_debug) {
+  print <<"END_DEB";
+* OSNAME: $^O
+* PERL_VERSION: $]
+* ARGV: @OrgArgv
+END_DEB
+}
+
+my $tmpfile = $atfifile . ".tmp";
+
+my $timezone = strftime "%z", localtime;
+
+sub gettz ($) {
+    my $time = shift;
+    my $tz = strftime "%z", localtime($time);
+    return '' unless $tz;
+    return 'Z' if $tz eq '+0000';
+    $tz =~ s/^([+\-]\d\d)(\d\d)$/$1'$2'/;
+    return $tz;
+}
+
+open(IN, $atfifile) or die "$Error Cannot open `$atfifile'!\n";
+open(OUT, ">$tmpfile") or die "$Error Cannot write `$tmpfile'!\n";
+
+while(<IN>) {
+    # timezone
+    if (s/^(\\attachfile\@timezone\{).*(\})$/$1$timezone$2/) {
+        print "* timezone     = $timezone\n" if $::opt_verbose;
+    }
+
+    # file entry
+    if (/^\\attachfile\@file\[[^\]]*\]\{(.*)\}$/) {
+        my $hexfile = $1;
+        my $file = pack('H*', $hexfile);
+        my @s = stat($file);
+        if (@s == 0) {
+            print "!!! Warning: File `$file' not found!\n";
+        }
+        else {
+            my $size = $s[7];
+            my $mtime = $s[9];
+            my $ctime = $s[10]; # inode change time
+
+            my ($sec, $min, $hour, $mday, $mon, $year) =
+                    localtime($mtime);
+            my $moddate = sprintf("%04d%02d%02d%02d%02d%02d",
+                                  $year + 1900, $mon + 1, $mday,
+                                  $hour, $min, $sec);
+            my $moddatetz = 'D:' . $moddate . gettz($mtime);
+
+            # Manual page "perlport" says that "ctime" is creation
+            # time instead of inode change time for "Win32" and
+            # "Mac OS", but it is unsupported for "Mac OS X".
+            my $creationdate = "";
+            my $creationdatetz = "";
+            if ($^O eq 'MSWin32') { # cygwin?
+                ($sec, $min, $hour, $mday, $mon, $year) =
+                        localtime($ctime);
+                $creationdate = sprintf("%04d%02d%02d%02d%02d%02d",
+                                        $year + 1900, $mon + 1, $mday,
+                                        $hour, $min, $sec);
+                $creationdatetz =
+                        'D:' . $creationdate . gettz($ctime);
+            }
+
+            # md5 checksum
+            my $checksum = "";
+            my $ctx = Digest::MD5->new;
+            if (open(FILE, $file)) {
+                $ctx->addfile(*FILE);
+                $checksum = $ctx->hexdigest;
+                close(FILE);
+            }
+            else {
+                print "!!! Warning: File `$file' cannot be read,"
+                      . " dropping checksum!\n";
+            }
+
+            $_ = "\\attachfile\@file["
+                 . "ModDateTZ=$moddatetz"
+                 . ",Size=$size"
+                 . ($checksum ? ",CheckSum=$checksum" : "")
+                 . ($creationdatetz ?
+                         ",CreationDateTZ=$creationdatetz" :
+                         ($creationdate ?
+                                 ",CreationDate=$creationdate" : ""))
+                 . "]{$hexfile}\n";
+            if ($::opt_verbose) {
+                print "* file entry   = $file\n";
+                print "  size         = $size\n";
+                print "  moddate      = $moddate\n";
+                print "  creationdate = $creationdate\n"
+                        if $creationdate;
+                print "  checksum     = $checksum\n" if $checksum;
+            }
+        }
+    }
+
+    print OUT $_;
+}
+
+close(IN);
+close(OUT);
+
+unlink($atfifile) or die "$Error Cannot delete old `$atfifile'!\n";
+rename $tmpfile, $atfifile
+        or die "$Error Cannot move `$tmpfile' to `$atfifile'!\n";
+
+print "*** ready. ***\n" unless $::opt_quiet;
+
+__END__


Property changes on: trunk/Master/texmf-dist/scripts/attachfile2/pdfatfi.pl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/attachfile2/attachfile2.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/attachfile2/attachfile2.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/attachfile2/attachfile2.dtx	2019-11-24 21:34:37 UTC (rev 52909)
@@ -0,0 +1,3296 @@
+% \iffalse meta-comment
+%
+% File: attachfile2.dtx
+% Version: 2019/11/24 v2.10
+% Info: Attach files into PDF
+%
+% Copyright (C)
+%    2005-2010, 2012 Heiko Oberdiek
+%    2016-2019  Oberdiek Package Support Group
+%    https://github.com/ho-tex/attachfile2/issues
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. This version of this license is in
+%    https://www.latex-project.org/lppl/lppl-1-3c.txt
+% and the latest version of this license is in
+%    https://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% The Current Maintainers of this work are
+% Heiko Oberdiek and the Oberdiek Package Support Group
+% https://github.com/ho-tex/attachfile2/issues
+%
+% This work consists of the main source file attachfile2.dtx
+% and the derived files
+%    attachfile2.sty, attachfile2.pdf, attachfile2.ins, attachfile2.drv,
+%    atfi-dvips.def, atfi-pdftex.def, atfi-dvipdfmx.def, atfi-luatex.def
+%    pdfatfi.pl.
+%
+% Distribution:
+%    CTAN:macros/latex/contrib/attachfile2/attachfile2.dtx
+%    CTAN:macros/latex/contrib/attachfile2/attachfile2.pdf
+%
+% Unpacking:
+%    (a) If attachfile2.ins is present:
+%           tex attachfile2.ins
+%    (b) Without attachfile2.ins:
+%           tex attachfile2.dtx
+%    (c) If you insist on using LaTeX
+%           latex \let\install=y\input{attachfile2.dtx}
+%        (quote the arguments according to the demands of your shell)
+%
+% Documentation:
+%    (a) If attachfile2.drv is present:
+%           latex attachfile2.drv
+%    (b) Without attachfile2.drv:
+%           latex attachfile2.dtx; ...
+%    The class ltxdoc loads the configuration file ltxdoc.cfg
+%    if available. Here you can specify further options, e.g.
+%    use A4 as paper format:
+%       \PassOptionsToClass{a4paper}{article}
+%
+%    Programm calls to get the documentation (example):
+%       pdflatex attachfile2.dtx
+%       makeindex -s gind.ist attachfile2.idx
+%       pdflatex attachfile2.dtx
+%       makeindex -s gind.ist attachfile2.idx
+%       pdflatex attachfile2.dtx
+%
+% Installation:
+%    TDS:tex/latex/attachfile2/attachfile2.sty
+%    TDS:tex/latex/attachfile2/atfi-dvips.def
+%    TDS:tex/latex/attachfile2/atfi-pdftex.def
+%    TDS:tex/latex/attachfile2/atfi-dvipdfmx.def
+%    TDS:tex/latex/attachfile2/atfi-luatex.def
+%    TDS:scripts/attachfile2/pdfatfi.pl (exec flag)
+%    TDS:doc/latex/attachfile2/attachfile2.pdf
+%    TDS:source/latex/attachfile2/attachfile2.dtx
+%
+%<*ignore>
+\begingroup
+  \catcode123=1 %
+  \catcode125=2 %
+  \def\x{LaTeX2e}%
+\expandafter\endgroup
+\ifcase 0\ifx\install y1\fi\expandafter
+         \ifx\csname processbatchFile\endcsname\relax\else1\fi
+         \ifx\fmtname\x\else 1\fi\relax
+\else\csname fi\endcsname
+%</ignore>
+%<*install>
+\input docstrip.tex
+\Msg{************************************************************************}
+\Msg{* Installation}
+\Msg{* Package: attachfile2 2019/11/24 v2.10 Attach files into PDF (HO)}
+\Msg{************************************************************************}
+
+\keepsilent
+\askforoverwritefalse
+
+\let\MetaPrefix\relax
+\preamble
+
+This is a generated file.
+
+Project: attachfile2
+Version: 2019/11/24 v2.10
+
+Copyright (C)
+   2005-2010, 2012  Heiko Oberdiek
+   2016-2019  Oberdiek Package Support Group
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3c of this license or (at your option) any later
+version. This version of this license is in
+   https://www.latex-project.org/lppl/lppl-1-3c.txt
+and the latest version of this license is in
+   https://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of
+LaTeX version 2005/12/01 or later.
+
+This work has the LPPL maintenance status "maintained".
+
+The Current Maintainers of this work are
+Heiko Oberdiek and the Oberdiek Package Support Group
+https://github.com/ho-tex/attachfile2/issues
+
+
+This work consists of the main source file attachfile2.dtx
+and the derived files
+   attachfile2.sty, attachfile2.pdf, attachfile2.ins, attachfile2.drv,
+   atfi-dvips.def, atfi-pdftex.def, atfi-dvipdfmx.def, atfi-luatex.def
+   pdfatfi.pl.
+
+\endpreamble
+\let\MetaPrefix\DoubleperCent
+
+\generate{%
+  \file{attachfile2.ins}{\from{attachfile2.dtx}{install}}%
+  \file{attachfile2.drv}{\from{attachfile2.dtx}{driver}}%
+  \usedir{tex/latex/attachfile2}%
+  \file{attachfile2.sty}{\from{attachfile2.dtx}{package}}%
+  \file{atfi-dvips.def}{\from{attachfile2.dtx}{dvips}}%
+  \file{atfi-pdftex.def}{\from{attachfile2.dtx}{pdftex}}%
+  \file{atfi-luatex.def}{\from{attachfile2.dtx}{luatex}}%
+  \file{atfi-dvipdfmx.def}{\from{attachfile2.dtx}{dvipdfmx}}%
+  \nopreamble
+  \nopostamble
+  \usedir{scripts/attachfile2}%
+  \csname execfiletrue\endcsname
+  \file{pdfatfi.pl}{\from{attachfile2.dtx}{pdfatfi}}%
+%  \usedir{source/latex/attachfile2/catalogue}%
+%  \file{attachfile2.xml}{\from{attachfile2.dtx}{catalogue}}%
+}
+
+\catcode32=13\relax% active space
+\let =\space%
+\Msg{************************************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by TeX:}
+\Msg{*}
+\Msg{*     attachfile2.sty, atfi-dvips.def, atfi-pdftex.def,}
+\Msg{*     atfi-dvipdfmx.def, atfi-luatex.def}
+\Msg{*}
+\Msg{* And install the following script file:}
+\Msg{*}
+\Msg{*     pdfatfi.pl}
+\Msg{*}
+\Msg{* To produce the documentation run the file `attachfile2.drv'}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*}
+\Msg{************************************************************************}
+
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+%<*driver>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{attachfile2.drv}%
+  [2019/11/24 v2.10 Attach files into PDF (HO)]%
+\documentclass{ltxdoc}
+\usepackage{holtxdoc}[2011/11/22]
+\begin{document}
+  \DocInput{attachfile2.dtx}%
+\end{document}
+%</driver>
+% \fi
+%
+%
+% \CharacterTable
+%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%   Digits        \0\1\2\3\4\5\6\7\8\9
+%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%   Dollar        \$     Percent       \%     Ampersand     \&
+%   Acute accent  \'     Left paren    \(     Right paren   \)
+%   Asterisk      \*     Plus          \+     Comma         \,
+%   Minus         \-     Point         \.     Solidus       \/
+%   Colon         \:     Semicolon     \;     Less than     \<
+%   Equals        \=     Greater than  \>     Question mark \?
+%   Commercial at \@     Left bracket  \[     Backslash     \\
+%   Right bracket \]     Circumflex    \^     Underscore    \_
+%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%   Right brace   \}     Tilde         \~}
+%
+% \GetFileInfo{attachfile2.drv}
+%
+% \title{The \xpackage{attachfile2} package}
+% \date{2019/11/24 v2.10}
+% \author{Heiko Oberdiek\thanks
+% {Please report any issues at \url{https://github.com/ho-tex/attachfile2/issues}}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% This package can be used to attach files to a PDF document.
+% It is a further development of Scott Pakin's package
+% \xpackage{attachfile} for \pdfTeX. Apart from bug fixes,
+% package \xpackage{attachfile2} adds support for \xoption{dvips},
+% some new options, gets and writes meta information data about
+% the attached files.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Documentation}
+%
+% \subsection{Introduction}
+%
+%    The PDF format (\cite{pdfspec}) allows the inclusion of files
+%    inside the PDF document. The included files can be bound to an
+%    annotation on a page. Or they can be recorded in a sorted
+%    list of embedded files. The packages \xpackage{attachfile}
+%    or \xpackage{attachfile2} follow the first approach,
+%    package \xpackage{embedfile} uses the latter method.
+%
+% \subsubsection{Future development}
+%
+%    My dream is a large package that merges the features of
+%    all these packages meantioned before:
+%    \begin{itemize}
+%    \item Files can be attached to a page.
+%    \item Files can be attached to the document.
+%    \item An easy user interface for simple, common tasks and
+%          beginners.
+%    \item An interface for the advanced users that want to setup
+%          every detail.
+%    \item Support of many drivers (pdftex, dvips, dvipdfm, \dots).
+%    \item \dots
+%    \end{itemize}
+%    However, I have not managed to take the time for this project.
+%    Instead:
+%    \begin{itemize}
+%    \item First I experimented with package \xpackage{attachfile},
+%          adding driver support, fixing bugs, \dots. The result is
+%          currently named as \xpackage{attachfile2}. It uses an external
+%          script to get file properties (size, date, checksum, \dots).
+%    \item In order to avoid an external program for getting basic
+%          file properties I provided a patch ``EscapeAndOther'' for
+%          pdfTeX that was accepted for version 1.30.
+%    \item Package \xpackage{embedfile} closes a gap left by the
+%          packages for attaching
+%          files and allows the embedding of files to the document.
+%          Also it makes use of the new primitives of \pdfTeX.
+%    \end{itemize}
+%    Until this future becomes true, I provide the intermediate
+%    step \xpackage{attachfile2} at its current state.
+%    There are many things to do:
+%    \begin{itemize}
+%    \item Documentation, documentation, \dots
+%    \item Improving portability of the Perl script \xfile{pdfatfi.pl}
+%          (Windows, non-GNU, \dots).
+%    \item Comfortable program for extracting embeddd files.
+%    \item Embedding files to the document, see package \xpackage{embedfile}.
+%    \item Additionally use featurs of \pdfTeX\ 1.30. With a recent
+%          \pdfTeX\ the Perl script step is then obsolete.
+%    \item GoToE links.
+%    \item Layout of PinPush, especially the tip does not scale well.
+%    \item Driver for \xoption{dvipsone}, similar to \xoption{dvips}, changes:
+%          \begin{itemize}
+%          \item coordinate transformation need to be fixed here,
+%                \xfile{hdvipson.def} contains:
+%                \begin{quote}
+%\begin{verbatim}
+%/DvipsToPDF { 65781 div  } def
+%/PDFToDvips { 65781 mul } def
+%\end{verbatim}
+%                \end{quote}
+%          \item Syntax for \cs{special}: \xfile{hdvipson.def} contains
+%                both \verb|\special{! #1}| and
+%                \verb|\special{headertext= #1}|. Are bothe the same?
+%          \end{itemize}
+%    \item File name conversion, see PDF specification:
+%          \begin{quote}
+%            \verb|c:\somewhere\foobar.txt| $\rightarrow$
+%            \verb|/c/somewhere/foobar.txt|
+%          \end{quote}
+%    \item Option \xoption{scale} for icons?
+%    \item Compatibility for \plainTeX.
+%    \item ToDos for \xfile{atfidvips.def}.
+%    \end{itemize}
+%
+% \subsection{User interface}
+%
+%    Basically this package \xpackage{attachfile2} follows the
+%    user interface of package \xpackage{attachfile},
+%    look into its documentation (\cite{attachfile}).
+%
+% \subsubsection{New options}
+%    \begin{itemize}
+%    \item Driver options \xoption{dvips}, \xoption{pdftex},
+%          \xoption{dvipdfmx} and \xoption{xetex} that is an
+%          alias for \xoption{dvipdfmx}.
+%    \item Option \xoption{driverfallback} specifies a DVI driver
+%          if the driver cannot be detected automatically.
+%    \item New options \xoption{final} and \xoption{draft}.
+%    \item New option \xoption{scale} for scaling the annotation rectangle.
+%    \item Options \xoption{file} and \xoption{nofile} for controlling
+%          the generation of the auxiliary file \xfile{.atfi}.
+%    \item New option \xoption{ucfilespec} for file names with
+%          characters outside ASCII (PDF 1.7).
+%    \end{itemize}
+%
+% \subsubsection{Option \xoption{color}}
+%
+%    Package \xpackage{attachfile}'s option \xoption{color} only
+%    understands explicit RGB values as three space separated
+%    real numbers in the range from 0 to 1.
+%
+%    This package \xpackage{attachfile2} extends the syntax.
+%    The usual color specifications of packages \xpackage{color}
+%    or \xpackage{xcolor} may be used. The latter one requires
+%    that package \xpackage{xcolor} is loaded.
+%    Without package \xpackage{xcolor} a limited range of
+%    explicit color specifications are supported, the color models
+%    \texttt{rgb} and \texttt{gray} (and \texttt{cmyk} if
+%    package \xpackage{hyperref}'s option \xoption{pdfversion} is set
+%    to \texttt{1.7} or greater.
+%
+%    Example without package \xpackage{xcolor}:
+%\begin{quote}
+%\begin{verbatim}
+%\documentclass{article}
+%\usepackage[color={1 0 .5}]{attachfile2}
+% % Spaces in option values in \usepackage or \documentclass
+% % must be protected by curly braces. Otherwise LaTeX strips
+% % the spaces and the package would see `color=10.5'.
+% % This protection is not necessary for \attachfilesetup.
+%\attachfilesetup{color=1 0 .5}
+%\attachfilesetup{color=[rgb]{1,0,.5}}
+%\attachfilesetup{color=[gray]{.5}}
+%\end{verbatim}
+%\end{quote}
+%
+%    The following example with package \xpackage{xcolor} shows
+%    additional color specifications:
+%\begin{quote}
+%\begin{verbatim}
+%\documentclass{article}
+%\usepackage{xcolor}
+%\definecolor{attachfilecolor}{cmyk}{.1,.2,.3,.4}
+%\usepackage{color=red}{attachfile2}
+%\attachfilesetup{color=red}
+%\attachfilesetup{color=attachfilecolor}
+%\end{verbatim}
+%\end{quote}
+%
+% \paragraph{For experts.}%
+% If the color is used in annotations, the color is converted
+% with the help of package \xpackage{xcolor} to RGB.
+% PDF versions 1.7 or later also understand color models Gray and
+% CMYK. The PDF version is detected if the experimental
+% option \xoption{pdfversion}
+% of package \xpackage{hyperref} is used, example:
+%\begin{quote}
+%\begin{verbatim}
+%\documentclass{article}
+%\usepackage[pdfversion=1.7]{hyperref}
+%\usepackage{attachfile2}
+%\end{verbatim}
+%\end{quote}
+% However, currently only driver \xoption{pdftex} also supports
+% the actual setting of the PDF version in the output PDF file.
+%
+% \subsubsection{Perl script \xfile{pdfatfi.pl}}
+%
+%    This package also tries to get and add meta information data,
+%    such as file size, file date, checksum, \dots.
+%    As package \xpackage{embedfile} shows the new features
+%    of \pdfTeX\ 1.30 are very useful for getting this kind of
+%    data. Since version 2.6 these data are used if available.
+%
+%    For older versions of \pdfTeX\ and \XeTeX\ the Perl script
+%    \xfile{pdfatfi.pl} is provided to get this data.
+%    The use of the Perl script is not mandatory. This data can be shown
+%    by PDF viewers, but they are not a requirement of the PDF specification.
+%
+%    Package \xpackage{attachfile2} and the Perl script communicate
+%    via an auxiliary file with file extension \xfile{.atfi}. The script
+%    is used between two \LaTeX\ runs and updates the auxiliary file,
+%    example for \xoption{dvips}:
+%    \begin{quote}
+%\begin{verbatim}
+%latex test
+%pdfatfi test
+%latex test
+%dvips test
+%ps2pdf test.ps test.pdf
+%\end{verbatim}
+%    \end{quote}
+%
+% \subsection{Changes to \xpackage{attachfile}}
+%
+%    Some of the changes I can remember:
+%    \begin{itemize}
+%    \item Support for dvips.
+%    \item Support for dvipdfmx/\XeTeX.
+%    \item Setting and filling the /Param entry for files
+%          (file date, file size, \dots).
+%    \item Perl script \xfile{pdfatfi.pl}.
+%    \item New options.
+%    \item Bug fixes.
+%    \item \dots
+%    \end{itemize}
+%
+% \StopEventually{
+% }
+%
+% \section{Implementation}
+%
+% \subsection{Package}
+%
+%    \begin{macrocode}
+%<*package>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{attachfile2}%
+  [2019/11/24 v2.10 Attach files into PDF (HO)]%
+%    \end{macrocode}
+%
+% \subsubsection{Loading of packages}
+%
+%    \begin{macrocode}
+\RequirePackage{iftex}[2019/11/07]
+\RequirePackage{keyval}
+\RequirePackage{color}
+\RequirePackage{infwarerr}[2010/04/08]
+\RequirePackage{ltxcmds}[2010/04/26]
+\RequirePackage{kvoptions}[2009/07/21]
+\RequirePackage{pdftexcmds}[2010/04/01]
+\RequirePackage{pdfescape}[2007/11/11]
+%    \end{macrocode}
+%    Package \xpackage{hyperref} is needed because of \cs{pdfstringdef}.
+%    \begin{macrocode}
+\RequirePackage{hyperref}
+\RequirePackage{hycolor}[2008/07/29]
+%    \end{macrocode}
+%
+% \subsubsection{Value checking}
+%
+%    \begin{macro}{\atfi at Match}
+%    \begin{macrocode}
+\ltx at IfUndefined{pdfmatch}{%
+  \def\atfi at Match#1#2#3#4#5{}%
+}{%
+  \def\atfi at Match#1#2#3{%
+    \begingroup
+    \edef\^{\ltx at backslashchar\string^}%
+    \edef\.{\ltx at backslashchar.}%
+    \let\#\ltx at hashchar
+    \edef\[{\ltx at backslashchar[}% ]]
+    \edef\${\ltx at backslashchar$}%
+    \let\%\ltx at percentchar
+    \edef\&{\string&}%
+    \edef\({\ltx at backslashchar(}%
+    \edef\){\ltx at backslashchar)}%
+    \edef\|{\ltx at backslashchar|}%
+    \edef\*{\ltx at backslashchar*}%
+    \edef\+{\ltx at backslashchar+}%
+    \edef\?{\ltx at backslashchar?}%
+    \edef\{{\ltx at backslashchar\ltx at leftbracechar}%
+    \edef\}{\ltx at rightbracechar}%
+    \edef\\{\ltx at backslashchar\ltx at backslashchar}%
+    \edef\~{\string~}%
+    \ifcase\pdfmatch#3{#2}{#1} %
+      \endgroup
+      \expandafter\ltx at secondoftwo
+    \or
+      \endgroup
+      \expandafter\ltx at firstoftwo
+    \else
+      \atfi at Warning{%
+        Internal error: Wrong pattern!\MessageBreak
+        --> #2 <--\MessageBreak
+        Pattern check ignored%
+      }%
+      \endgroup
+      \expandafter\ltx at firstoftwo
+    \fi
+  }%
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at PatToken}
+%    \begin{macrocode}
+  \def\atfi at PatToken{%
+    [%
+      -% first character
+      !%
+      \#$\%\&'%
+      \*\+\.%
+      0-9%
+      A-Z%
+      \^_`%
+      a-z%
+      \{\}\|\~%
+    ]+%
+  }%
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at CR}
+%    \begin{macrocode}
+  \begingroup
+    \lccode64=13 % @
+  \lowercase{\endgroup
+    \def\atfi at CR{@}%
+  }%
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at PatQuotedString}
+%    \begin{macrocode}
+  \def\atfi at PatQuotedString{%
+    "%
+    ([^"\\\atfi at CR]|\\.)*%
+    "%
+  }%
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macrocode}
+  \ltx at ifpackagelater{ltxcmds}{2010/09/11}{}{%
+%    \end{macrocode}
+%    \begin{macro}{\atfi at ltx@leftbracechar}
+%    \begin{macrocode}
+    \begingroup
+      \lccode`0=`\{\relax
+    \lowercase{\endgroup
+      \def\ltx at leftbracechar{0}%
+    }%
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\ltx at rightbracechar}
+%    \begin{macrocode}
+    \begingroup
+      \lccode`0=`\}\relax
+    \lowercase{\endgroup
+      \def\ltx at rightbracechar{0}%
+    }%
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macrocode}
+  }%
+}
+%    \end{macrocode}
+%
+%    \begin{macro}{\atfi at Warning}
+%    \begin{macrocode}
+\def\atfi at Warning{\PackageWarning{attachfile2}}
+%    \end{macrocode}
+%    \end{macro}
+%
+% \subsubsection{Option declarations}
+%
+%    \begin{macrocode}
+\SetupKeyvalOptions{%
+  family=AtFi,%
+  prefix=atfi@%
+}
+%    \end{macrocode}
+%    \begin{macro}{\atfi at setup}
+%    \begin{macrocode}
+\def\atfi at setup{\setkeys{AtFi}}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    Options \xoption{draft} and \xoption{final}.
+%    \begin{macrocode}
+\DeclareBoolOption{draft}
+\DeclareComplementaryOption{final}{draft}
+%    \end{macrocode}
+%
+%    Option \xoption{mimetype}.
+%    \begin{macro}{\atfi at mimetype}
+%    \begin{macrocode}
+\def\atfi at mimetype{}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macrocode}
+\define at key{AtFi}{mimetype}{%
+  \edef\atfi at mimetype{#1}%
+  \ifx\atfi at mimetype\ltx at empty
+  \else
+    \atfi at Match\atfi at mimetype{%
+      ^(application|audio|image|model|text|video|x-\atfi at PatToken)%
+      /%
+      ([a-z\-\+_\.0-9]+)%
+      (; ?\atfi at PatToken=(\atfi at PatToken|\atfi at PatQuotedString))*$%
+    }{icase}{}{%
+      \atfi at Warning{%
+        Invalid value `\atfi at mimetype'\MessageBreak
+        of option `mimetype'.\MessageBreak
+        Value is discarded%
+      }%
+      \let\atfi at mimetype\ltx at empty
+    }%
+  \fi
+  \ifx\atfi at mimetype\ltx at empty
+  \else
+    \EdefEscapeName\atfi at mimetype{\atfi at mimetype}%
+    \edef\atfi at mimetype{/Subtype/\atfi at mimetype}%
+  \fi
+}
+%    \end{macrocode}
+%
+%    Option \xoption{icon}
+%    \begin{macrocode}
+\define at key{AtFi}{icon}{%
+  \def\atfi at icon{/Name/#1}%
+  \def\atfi at icon@icon{#1}%
+}
+\atfi at setup{icon=PushPin}
+%    \end{macrocode}
+%
+%    Option \xoption{color}
+%    \begin{macrocode}
+\define at key{AtFi}{color}{%
+  \HyColor at AttachfileColor{#1}%
+          \atfi at color@tex\atfi at color@inline\atfi at color@annot
+          {attachfile2}{color}%
+}
+\atfi at setup{color=1 0.9255 0.7765}
+%    \end{macrocode}
+%
+%    time options timezone and date
+%    \begin{macro}{\atfi at pad@ii}
+%    \begin{macrocode}
+\def\atfi at pad@ii#1{%
+  \ifnum#1>9 %
+    \number#1%
+  \else
+    0\number#1%
+  \fi%
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{atfi at timezone}
+%    \begin{macrocode}
+\let\atfi at timezone\ltx at empty
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macrocode}
+\define at key{AtFi}{timezone}{\def\atfi at timezone{#1}}
+%    \end{macrocode}
+%    \begin{macro}{\atfi at time}
+%    \begin{macrocode}
+\edef\atfi at time{\the\time}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at hours}
+%    \begin{macrocode}
+\def\atfi at hours{%
+  \numexpr\dimexpr0.01667\dimexpr\atfi at time sp\relax\relax\relax
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at minutes}
+%    \begin{macrocode}
+\def\atfi at minutes{%
+  \numexpr\atfi at time-60*\atfi at hours\relax
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at seconds}
+%    \begin{macrocode}
+\def\atfi at seconds{0}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at date}
+%    \begin{macrocode}
+\def\atfi at date{%
+  /M(D:\the\year
+      \atfi at pad@ii\month
+      \atfi at pad@ii\day
+      \atfi at pad@ii\atfi at hours
+      \atfi at pad@ii\atfi at minutes
+      \atfi at pad@ii\atfi at seconds
+      \atfi at timezone)%
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macrocode}
+\define at key{AtFi}{date}{%
+  \EdefEscapeString\atfi at date{#1}%
+  \edef\atfi at date{/M(\atfi at date)}%
+}
+%    \end{macrocode}
+%
+%    Text options author, description, and subject
+%    \begin{macro}{\atfi at pdfstringdef}
+%    \begin{macrocode}
+\DeclareRobustCommand{\atfi at pdfstringdef}[2]{%
+  \pdfstringdef\atfi at temp@string{#2}%
+  \edef#1{\atfi at temp@string}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macro}{\atfi at NoValue}
+%    \begin{macrocode}
+\def\atfi at NoValue{\NoValue}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macro}{\atfi at DefNoValueName}
+%    \begin{macrocode}
+\def\atfi at DefNoValueName#1#2#3{%
+  \def#1{#3}%
+  \ifx#1\atfi at NoValue
+    \let#1\ltx at empty
+  \else
+    \atfi at pdfstringdef#1{#1}%
+    \edef#1{/#2(#1)}%
+  \fi
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    Name for annotation to be used in GoToE actions
+%    \begin{macro}{\atfi at annotname}
+%    \begin{macrocode}
+\let\atfi at annotname\ltx at empty
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macrocode}
+\define at key{AtFi}{annotname}[\NoValue]{%
+  \atfi at DefNoValueName\atfi at annotname{NM}{#1}%
+}
+%    \end{macrocode}
+%
+%    Option \xoption{author}.
+%    \begin{macro}{\atfi at author}
+%    \begin{macrocode}
+\def\atfi at author{}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macrocode}
+\define at key{AtFi}{author}[\NoValue]{%
+  \atfi at DefNoValueName\atfi at author{T}{#1}%
+}
+%    \end{macrocode}
+%
+%    Option \xoption{description}.
+%    \begin{macro}{\atfi at description}
+%    \begin{macrocode}
+\def\atfi at description{}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macrocode}
+\define at key{AtFi}{description}[\NoValue]{%
+  \atfi at DefNoValueName\atfi at description{Contents}{#1}%
+}
+%    \end{macrocode}
+%
+%    Option \xoption{subject}.
+%    \begin{macro}{\atfi at subject}
+%    \begin{macrocode}
+\def\atfi at subject{}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macrocode}
+\define at key{AtFi}{subject}[\NoValue]{%
+  \atfi at DefNoValueName\atfi at subject{Subj}{#1}%
+}
+%    \end{macrocode}
+%
+%    Option \xoption{print}.
+%    \begin{macrocode}
+\DeclareBoolOption[true]{print}
+%    \end{macrocode}
+%
+%    Option \xoption{zoom}.
+%    \begin{macrocode}
+\DeclareBoolOption[true]{zoom}
+%    \end{macrocode}
+%
+%    Option \xoption{appearance}.
+%    \begin{macrocode}
+\DeclareBoolOption[true]{appearance}
+%    \end{macrocode}
+%
+%    Option \xoption{scale}.
+%    \begin{macrocode}
+\DeclareStringOption[1]{scale}
+%    \end{macrocode}
+%
+%    Option \xoption{ucfilespec}.
+%    \begin{macro}{\atfi at ucfilespec}
+%    \begin{macrocode}
+\def\atfi at ucfilespec{}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macrocode}
+\define at key{AtFi}{ucfilespec}[1]{%
+  \def\atfi at ucfilespec{#1}%
+  \ifx\atfi at ucfilespec\ltx at empty
+  \else
+    \atfi at pdfstringdef\atfi at ucfilespec{#1}%
+  \fi
+}
+%    \end{macrocode}
+%
+%    Option \xoption{nofiles}.
+%    \begin{macrocode}
+\DeclareBoolOption{nofiles}
+%    \end{macrocode}
+%
+%    Driver options.
+%    \begin{macrocode}
+\let\atfi at driver\ltx at empty
+\def\atfi at driver@pdftex{pdftex}
+\def\atfi at driver@luatex{luatex}
+\def\atfi at driver@dvips{dvips}
+\def\atfi at driver@dvipdfmx{dvipdfmx}
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareVoidOption{pdftex}{%
+ \ifpdf
+  \let\atfi at driver\atfi at driver@pdftex
+ \else
+   \let\atfi at driver\ltx at empty
+    \PackageError{attachfile2}{%
+      Wrong driver option `pdftex',\MessageBreak
+      because pdfTeX in PDF mode is not detected%
+    }\@ehc
+ \fi
+}
+\DeclareVoidOption{luatex}{%
+  \let\atfi at driver\atfi at driver@luatex
+}
+\DeclareVoidOption{dvips}{%
+  \let\atfi at driver\atfi at driver@dvips
+}
+\DeclareVoidOption{dvipdfmx}{%
+  \let\atfi at driver\atfi at driver@dvipdfmx
+}
+\DeclareVoidOption{xetex}{%
+  \let\atfi at driver\atfi at driver@dvipdfmx
+}
+%    \end{macrocode}
+%    \begin{macrocode}
+\DeclareStringOption{driverfallback}
+%    \end{macrocode}
+%
+%    \begin{macro}{\attachfilesetup}
+%    \begin{macrocode}
+\DeclareRobustCommand{\attachfilesetup}[1]{\setkeys{AtFi}{#1}}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macrocode}
+\DeclareLocalOptions{%
+  annotname,%
+  appearance,%
+  author,%
+  color,%
+  date,%
+  description,%
+  icon,%
+  mimetype,%
+  nofiles,%
+  print,%
+  scale,%
+  subject,%
+  timezone,%
+  ucfilespec,%
+  zoom,%
+}
+%    \end{macrocode}
+%
+% \subsubsection{Option calling}
+%
+%    Timezone setting, \dots
+%    \begin{macrocode}
+\InputIfFileExists{attachfile.cfg}{}{}
+%    \end{macrocode}
+%    \begin{macrocode}
+\ProcessKeyvalOptions*
+%    \end{macrocode}
+%
+%    \begin{macro}{\atfi at DisableOption}
+%    \begin{macrocode}
+\def\atfi at DisableOption{%
+  \DisableKeyvalOption[action=error,package=attachfile2]{AtFi}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+% \subsubsection{Evaluate driver options}
+%
+%    \begin{macrocode}
+\ifpdf
+ \ifluatex
+  \let\atfi at driver\atfi at driver@luatex
+ \else
+  \let\atfi at driver\atfi at driver@pdftex
+ \fi
+\else
+ \ifxetex
+    \let\atfi at driver\atfi at driver@dvipdfmx
+  \else
+    \ifx\atfi at driver\ltx at empty
+      \ifx\atfi at driverfallback\ltx at empty
+      \else
+        \expandafter\let\expandafter\atfi at driver
+            \csname atfi at driver@\atfi at driverfallback\endcsname
+        \ifx\atfi at driver\atfi at driver@dvips
+        \else
+          \ifx\atfi at driver\atfi at driver@dvipdfmx
+          \else
+             \let\atfi at driver\ltx at empty
+             \PackageWarningNoLine{attachfile2}{%
+               Option `driverfallback' with unsupported\MessageBreak
+               DVI driver (\atfi at driverfallback)%
+             }%
+          \fi
+        \fi
+      \fi
+      \ifx\atfi at driver\ltx at empty
+        \PackageWarningNoLine{attachfile2}{%
+          Driver is not specified,\MessageBreak
+          enforce draft settings%
+        }%
+        \atfi at drafttrue
+      \fi
+    \fi
+  \fi
+\fi
+%    \end{macrocode}
+%    \begin{macrocode}
+\atfi at DisableOption{pdftex}
+\atfi at DisableOption{dvips}
+\atfi at DisableOption{dvipdfmx}
+\atfi at DisableOption{xetex}
+\atfi at DisableOption{driverfallback}
+%    \end{macrocode}
+%
+% \subsubsection{Evaluate options \xoption{draft}/\xoption{final}}
+%
+%    \begin{macro}{\notextattachfile}
+%    \begin{macrocode}
+\DeclareRobustCommand{\notextattachfile}[2][]{%
+  \begingroup
+    \atfi at setup{#1}%
+    \ifatfi at print
+      \leavevmode
+      \begingroup
+        \HyColor at UseColor\atfi at color@tex
+        #2\strut
+      \endgroup
+    \else
+      \sbox\ltx at zero{#2\strut}%
+      \makebox[\wd0]{}%
+    \fi
+  \endgroup
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macrocode}
+\atfi at DisableOption{draft}%
+\atfi at DisableOption{final}%
+\ifatfi at draft
+  \def\atfi at dummy@pushpin{%
+    \raisebox{-1.25bp}{\parbox[b][14bp]{24bp}{}}%
+  }%
+  \DeclareRobustCommand{\textattachfile}[3][]{%
+    \notextattachfile[{#1}]{#3}%
+  }%
+  \DeclareRobustCommand{\noattachfile}[1][]{%
+    \notextattachfile[{#1}]{\atfi at dummy@pushpin}%
+  }%
+  \DeclareRobustCommand{\attachfile}[2][]{%
+    \noattachfile[{#1}]%
+  }%
+   \expandafter\endinput
+\fi
+%    \end{macrocode}
+%
+% \subsubsection{Load driver file}
+%
+%    \begin{macrocode}
+\input{atfi-\atfi at driver.def}
+%    \end{macrocode}
+%
+% \subsubsection{Graphics}
+%
+%    \begin{macro}{\atfi at acroGraph@data}
+%    \begin{macrocode}
+\def\atfi at acroGraph@data{%
+  \atfi at GSAVE
+  0.5 \atfi at SETGRAYFILL
+  1.1133 0 20.7202 18.2754 \atfi at RECTFILL
+  0 \atfi at SETFLAT
+  0.5 \atfi at SETLINEWIDTH
+  4 \atfi at SETMITERLIMIT
+  \atfi at RECTSTROKEFILL{%
+    1 \atfi at SETGRAYFILL
+  }{%
+    0 \atfi at SETGRAYSTROKE
+  }{%
+    0.25 1.6453 20.145 17.7715 %
+  }%
+  0 \atfi at SETGRAYFILL
+  2.7319 4.1367 3.9571 13.8867 \atfi at RECTFILL
+  8.7031 4.1367 3.9571 9.8867 \atfi at RECTFILL
+  14.7471 4.1367 3.9571 11.8867 \atfi at RECTFILL
+  \atfi at color@inline{FILL}%
+  1.689 3.0938 3.9571 13.8867 \atfi at RECTFILL
+  7.6602 3.0938 3.9571 9.8867 \atfi at RECTFILL
+  13.7041 3.0938 3.9571 11.8867 \atfi at RECTFILL
+  \atfi at GRESTORE
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at acroGraph}
+%    \begin{macrocode}
+\def\atfi at acroGraph{%
+  \raisebox{-1.5bp}{\parbox[b][20bp]{22bp}{%
+    \rule{0pt}{0pt}\atfi at literal{\atfi at acroGraph@data}}%
+  }%
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at acroPaperclip@data}
+%    \begin{macrocode}
+\newcommand{\atfi at acroPaperclip@data}{%
+  \atfi at GSAVE
+  0.75 \atfi at SETGRAYSTROKE
+  0 \atfi at SETFLAT
+  2.5 \atfi at SETLINEWIDTH
+  1 \atfi at SETLINECAP
+  4 \atfi at SETMITERLIMIT
+  1.9619 11.7559 \atfi at MOVETO
+  1.9619 3.3037 1.9619 2.5059 \atfi at CURVETOV
+  1.9619 1.707 4.0947 1.25 \atfi at CURVETOY
+  7.4141 1.25 \atfi at LINETO
+  9.4292 1.8223 9.4292 3.3066 \atfi at CURVETOV
+  9.4292 4.79 9.4292 16.8945 \atfi at CURVETOY
+  9.7852 18.1514 8.481 18.1514 \atfi at CURVETOV
+  7.1768 18.1514 5.1616 18.1514 \atfi at CURVETOY
+  3.8574 17.9209 3.8574 16.8945 \atfi at CURVETOV
+  3.8574 15.8652 3.8574 6.6172 \atfi at CURVETOY
+  4.3325 5.418 5.1025 5.418 \atfi at CURVETOV
+  5.8726 5.418 6.5845 5.418 \atfi at CURVETOY
+  7.6812 5.6455 7.6812 6.4736 \atfi at CURVETOV
+  7.6812 7.3027 7.6812 11.5264 \atfi at CURVETOY
+  \atfi at STROKE
+  0 \atfi at SETGRAYSTROKE
+  1.2495 12.4404 \atfi at MOVETO
+  1.2495 3.9883 1.2495 3.1895 \atfi at CURVETOV
+  1.2495 2.3906 3.3833 1.9326 \atfi at CURVETOY
+  6.7026 1.9326 \atfi at LINETO
+  8.7178 2.5068 8.7178 3.9902 \atfi at CURVETOV
+  8.7178 5.4736 8.7178 17.5781 \atfi at CURVETOY
+  9.0732 18.834 7.769 18.834 \atfi at CURVETOV
+  6.4653 18.834 4.4497 18.834 \atfi at CURVETOY
+  3.146 18.6055 3.146 17.5781 \atfi at CURVETOV
+  3.146 16.5498 3.146 7.3018 \atfi at CURVETOY
+  3.6201 6.1016 4.3911 6.1016 \atfi at CURVETOV
+  5.1611 6.1016 5.873 6.1016 \atfi at CURVETOY
+  6.9692 6.3301 6.9692 7.1572 \atfi at CURVETOV
+  6.9692 7.9863 6.9692 12.21 \atfi at CURVETOY
+  \atfi at STROKE
+  \atfi at color@inline{STROKE}%
+  1 \atfi at SETLINEWIDTH
+  1.2495 12.4404 \atfi at MOVETO
+  1.2495 3.9883 1.2495 3.1895 \atfi at CURVETOV
+  1.2495 2.3906 3.3833 1.9326 \atfi at CURVETOY
+  6.7026 1.9326 \atfi at LINETO
+  8.7178 2.5068 8.7178 3.9902 \atfi at CURVETOV
+  8.7178 5.4736 8.7178 17.5781 \atfi at CURVETOY
+  9.0732 18.834 7.769 18.834 \atfi at CURVETOV
+  6.4653 18.834 4.4497 18.834 \atfi at CURVETOY
+  3.146 18.6055 3.146 17.5781 \atfi at CURVETOV
+  3.146 16.5498 3.146 7.3018 \atfi at CURVETOY
+  3.6201 6.1016 4.3911 6.1016 \atfi at CURVETOV
+  5.1611 6.1016 5.873 6.1016 \atfi at CURVETOY
+  6.9692 6.3301 6.9692 7.1572 \atfi at CURVETOV
+  6.9692 7.9863 6.9692 12.21 \atfi at CURVETOY
+  \atfi at STROKE
+  \atfi at GRESTORE
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at acroPaperclip}
+%    \begin{macrocode}
+\def\atfi at acroPaperclip{%
+  \raisebox{-1.25bp}{\parbox[b][21bp]{12bp}{%
+    \rule{0pt}{0pt}\atfi at literal{\atfi at acroPaperclip@data}}%
+  }%
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at acroPushPin@data}
+%    \begin{macrocode}
+\def\atfi at acroPushPin@data{%
+  \atfi at GSAVE
+  1 \atfi at SETLINEWIDTH
+  1 6   \atfi at MOVETO
+  11 6  \atfi at LINETO
+  11 13 \atfi at LINETO
+  12 13 \atfi at LINETO
+  14 11 \atfi at LINETO
+  21 11 \atfi at LINETO
+  22 12 \atfi at LINETO
+  23 12 \atfi at LINETO
+  23 2  \atfi at LINETO
+  22 2  \atfi at LINETO
+  21 3  \atfi at LINETO
+  14 3  \atfi at LINETO
+  12 1  \atfi at LINETO
+  11 1  \atfi at LINETO
+  11 6  \atfi at LINETO
+  \atfi at FILLSTROKE{%
+    \atfi at color@inline{FILL}%
+  }{%
+    0 \atfi at SETGRAYSTROKE
+  }%
+  0.5 \atfi at SETGRAYSTROKE
+  0 7  \atfi at MOVETO
+  10 7 \atfi at LINETO
+  10 8 \atfi at LINETO
+  1 8  \atfi at LINETO
+  \atfi at STROKE
+  1 \atfi at SETGRAYSTROKE
+  12 12 \atfi at MOVETO
+  14 10 \atfi at LINETO
+  22 10 \atfi at LINETO
+  22 11 \atfi at LINETO
+  \atfi at STROKE
+  \atfi at GRESTORE
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at acroPushPin}
+%    \begin{macrocode}
+\def\atfi at acroPushPin{%
+  \raisebox{-1.25bp}{\parbox[b][14bp]{24bp}{%
+    \rule{0pt}{0pt}\atfi at literal{\atfi at acroPushPin@data}}%
+  }%
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at acroTag@data}
+%    \begin{macrocode}
+\def\atfi at acroTag@data{%
+  \atfi at GSAVE
+  0.5 \atfi at SETGRAYFILL
+  10.0542 14.9873 \atfi at MOVETO
+  24.27 14.9873 \atfi at LINETO
+  25.252 14.0059 \atfi at LINETO
+  25.252 1.1455 \atfi at LINETO
+  24.1064 0 \atfi at LINETO
+  9.9609 0 \atfi at LINETO
+  6.0327 6.0088 \atfi at LINETO
+  6.0327 9.002 \atfi at LINETO
+  10.0542 14.9873 \atfi at LINETO
+  9.3994 9.376 \atfi at MOVETO
+  8.5215 9.376 7.8096 8.5596 7.8096 7.5527 \atfi at CURVETO
+  7.8096 6.5449 8.5215 5.7285 9.3994 5.7285 \atfi at CURVETO
+  10.2778 5.7285 10.9897 6.5449 10.9897 7.5527 \atfi at CURVETO
+  10.9897 8.5596 10.2778 9.376 9.3994 9.376 \atfi at CURVETO
+  \atfi at CLOSEPATH
+  \atfi at FILL
+  0 \atfi at SETFLAT
+  0.5 \atfi at SETLINEWIDTH
+  4 \atfi at SETMITERLIMIT
+  1 \atfi at SETLINEJOIN
+  8.5107 16.5313 \atfi at MOVETO
+  22.7266 16.5313 \atfi at LINETO
+  23.7085 15.5488 \atfi at LINETO
+  23.7085 2.6895 \atfi at LINETO
+  22.563 1.543 \atfi at LINETO
+  8.4175 1.543 \atfi at LINETO
+  4.4893 7.5527 \atfi at LINETO
+  4.4893 10.5449 \atfi at LINETO
+  8.5107 16.5313 \atfi at LINETO
+  7.856 10.9199 \atfi at MOVETO
+  6.978 10.9199 6.2661 10.1035 6.2661 9.0957 \atfi at CURVETO
+  6.2661 8.0879 6.978 7.2715 7.856 7.2715 \atfi at CURVETO
+  8.7344 7.2715 9.4463 8.0879 9.4463 9.0957 \atfi at CURVETO
+  9.4463 10.1035 8.7344 10.9199 7.856 10.9199 \atfi at CURVETO
+  \atfi at CLOSEPATH
+  \atfi at FILLSTROKE{%
+    \atfi at color@inline{FILL}%
+  }{%
+    0 \atfi at SETGRAYSTROKE
+  }%
+  1 \atfi at SETLINEWIDTH
+  12.3291 12.2656 \atfi at MOVETO
+  21.1206 12.2656 \atfi at LINETO
+  \atfi at STROKE
+  12.3291 9.1797 \atfi at MOVETO
+  21.1206 9.1797 \atfi at LINETO
+  \atfi at STROKE
+  12.3291 6.1875 \atfi at MOVETO
+  21.1206 6.1875 \atfi at LINETO
+  \atfi at STROKE
+  % 0 \atfi at SETGRAYSTROKE % redundant?
+  0.5 \atfi at SETLINEWIDTH
+  0 9.0488 \atfi at MOVETO
+  6.2661 9.0957 \atfi at LINETO
+  \atfi at STROKE
+  1.4028 5.2148 \atfi at MOVETO
+  1.4028 9.6094 \atfi at LINETO
+  1.6831 10.6387 2.4316 10.6387 \atfi at CURVETOV
+  3.6475 10.6387 3.5542 9.0488 \atfi at CURVETOY
+  \atfi at STROKE
+  \atfi at GRESTORE
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at acroTag}
+%    \begin{macrocode}
+\def\atfi at acroTag{%
+  \raisebox{-1.6bp}{\parbox[b][17bp]{25bp}{%
+    \rule{0pt}{0pt}\atfi at literal{\atfi at acroTag@data}}%
+  }%
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+% \subsubsection{Reading the \xext{atfi} file}
+%
+%     Commands used in \cs{jobname}\xext{atfi}:
+%     \begin{itemize}
+%     \item |attachfile at timezone{<timezone in PDF format>}|
+%     \item
+%\begin{verbatim}
+%\attachfile at file[
+%  Size=<size>,
+%  CreationDate=<date>, % <date> local time without "D:" and timezone
+%  ModDateTZ=<date+TZ>,
+%  ModDate=<date>,
+%  CheckSum=<checksum>
+%]{<filename as hex string>}
+%\end{verbatim}
+%    \end{itemize}
+%
+%    \begin{macro}{\attachfile at timezone}
+%    \begin{macrocode}
+\def\attachfile at timezone#1{%
+  \ifx\\#1\\%
+    % no timezone information given
+  \else
+    \def\atfi at timezone{#1}%
+  \fi
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\attachfile at file}
+%    \begin{macrocode}
+\newcommand*{\attachfile at file}[2][]{%
+  \EdefUnescapeHex\atfi at filename{#2}%
+  \ifx\atfi at filename\ltx at empty
+    \PackageError{attachfile2}{Empty file name}\@ehc
+  \else
+    \@namedef{atfi at file@\atfi at filename}{#1}%
+  \fi
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macrocode}
+\InputIfFileExists{\jobname.atfi}{}{}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\newif\ifatfi at checksum
+\define at key{AtFi at file}{CheckSum}{%
+  \atfi at checksumtrue
+  \edef\atfi at params{\atfi at params/CheckSum<#1>}%
+}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newif\ifatfi at creationdate
+\define at key{AtFi at file}{CreationDateTZ}{%
+  \ifatfi at creationdate
+  \else
+    \atfi at creationdatetrue
+    \edef\atfi at params{%
+      \atfi at params
+      /CreationDate(#1)%
+    }%
+  \fi
+}
+%    \end{macrocode}
+%    \begin{macrocode}
+\define at key{AtFi at file}{CreationDate}{%
+  \ifatfi at creationdate
+  \else
+    \atfi at creationdatetrue
+    \edef\atfi at params{%
+      \atfi at params
+      /CreationDate(#1\atfi at timezone)%
+    }%
+  \fi
+}
+%    \end{macrocode}
+%    \begin{macrocode}
+\newif\ifatfi at moddate
+\define at key{AtFi at file}{ModDateTZ}{%
+  \ifatfi at moddate
+  \else
+    \atfi at moddatetrue
+    \edef\atfi at params{%
+      \atfi at params
+      /ModDate(#1)%
+    }%
+  \fi
+}
+%    \end{macrocode}
+%    \begin{macrocode}
+\define at key{AtFi at file}{ModDate}{%
+  \ifatfi at moddate
+  \else
+    \atfi at moddatetrue
+    \edef\atfi at params{%
+      \atfi at params
+      /ModDate(D:#1\atfi at timezone)%
+    }%
+  \fi
+}
+%    \end{macrocode}
+%
+%    \begin{macro}{\atfi at pdftexdata}
+%    \begin{macrocode}
+\let\atfi at temp\ltx at one
+\ltx at IfUndefined{pdf at filesize}{%
+  \let\atfi at temp\ltx at zero
+}{}
+\ltx at IfUndefined{pdf at filemoddate}{%
+  \let\atfi at temp\ltx at zero
+}{}
+\ltx at IfUndefined{pdf at filemdfivesum}{%
+  \let\atfi at temp\ltx at zero
+}{}
+\ifcase\atfi at temp
+  \let\atfi at pdftexdata\ltx at gobble
+\or
+  \def\atfi at pdftexdata#1{%
+    \edef\atfi at temp{\pdf at filesize{#1}}%
+    \ifx\atfi at temp\ltx at empty
+    \else
+      \setkeys{AtFi at file}{Size=\atfi at temp}%
+      \edef\atfi at temp{\pdf at filemoddate{#1}}%
+      \ifx\atfi at temp\ltx at empty
+      \else
+        \setkeys{AtFi at file}{ModDateTZ=\atfi at temp}%
+      \fi
+      \edef\atfi at temp{\pdf at filemdfivesum{#1}}%
+      \ifx\atfi at temp\ltx at empty
+      \else
+        \setkeys{AtFi at file}{CheckSum=\atfi at temp}%
+      \fi
+    \fi
+  }%
+\fi
+%    \end{macrocode}
+%    \end{macro}
+%
+% \subsubsection{Writing the \xext{atfi} file}
+%
+%    Respect \cs{nofiles} and option \xoption{nofiles}.
+%    \cs{nofiles} has more weight than option \xoption{nofiles}.
+%    \begin{macrocode}
+\if at filesw
+\else
+  \atfi at nofilestrue
+\fi
+\ifatfi at nofiles
+  \PackageInfo{attachfile2}{%
+    File `\jobname.atfi' will not be written because of\MessageBreak
+    \string\nofiles\space or option `nofiles'%
+  }%
+%    \end{macrocode}
+%    \begin{macro}{\atfi at writefile}
+%    \begin{macrocode}
+  \let\atfi at writefile\ltx at gobble
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macrocode}
+\else
+%    \end{macrocode}
+%    \begin{macro}{\atfi at stream}
+%    \begin{macrocode}
+  \newwrite\atfi at stream
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macrocode}
+  \immediate\openout\atfi at stream=\jobname.atfi\relax
+  \immediate\write\atfi at stream{%
+    \string\attachfile at timezone{\atfi at timezone}%
+  }%
+%    \end{macrocode}
+%    \begin{macro}{\atfi at writefile}
+%    \begin{macrocode}
+  \def\atfi at writefile#1{%
+    \begingroup
+      \EdefEscapeHex\atfi at temp{#1}%
+      \immediate\write\atfi at stream{%
+        \string\attachfile at file[%
+          \ltx at ifundefined{atfi at file@#1}{}{\@nameuse{atfi at file@#1}}%
+        ]{\atfi at temp}%
+      }%
+    \endgroup
+  }%
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macrocode}
+\fi
+\atfi at DisableOption{nofiles}
+%    \end{macrocode}
+%
+%    \begin{macro}{\atfi at attachfile}
+%    \begin{macrocode}
+\def\atfi at attachfile#1#2{%
+  \ltx at IfUndefined{atfi at fileobj@#2}{%
+    \atfi at writefile{#2}%
+  }{%
+    % don't need duplicates
+  }%
+  \atfi at setup{#1}%
+  \atfi at embedfile{#2}%
+  \atfi at set@appearance at icon
+  \atfi at flags@to at int
+  \atfi at insert@file at annot{#2}%
+  \endgroup
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+% \subsubsection{Annotation appearance}
+%
+%    \begin{macro}{\atfi at appearancewidth}
+%    \begin{macrocode}
+\newlength{\atfi at appearancewidth}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at appearanceheight}
+%    \begin{macrocode}
+\newlength{\atfi at appearanceheight}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at appearancedepth}
+%    \begin{macrocode}
+\newlength{\atfi at appearancedepth}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at appearancebox}
+%    \begin{macrocode}
+\newsavebox{\atfi at appearancebox}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macro}{\atfi at set@appearance at icon}
+%    \begin{macrocode}
+\def\atfi at set@appearance at icon{%
+  \ltx at IfUndefined{atfi at appobj@\atfi at icon@icon}{%
+    \savebox{\atfi at appearancebox}{%
+      \@nameuse{atfi at acro\atfi at icon@icon}%
+    }%
+    \expandafter
+    \xdef\csname atfi at appwidth@\atfi at icon@icon\endcsname{%
+      \the\wd\atfi at appearancebox
+    }%
+    \expandafter
+    \xdef\csname atfi at appheight@\atfi at icon@icon\endcsname{%
+      \the\ht\atfi at appearancebox
+    }%
+    \expandafter
+    \xdef\csname atfi at appdepth@\atfi at icon@icon\endcsname{%
+      \the\dp\atfi at appearancebox
+    }%
+    \atfi at xform@icon
+    \global\expandafter\let
+        \csname atfi at appobj@\atfi at icon@icon\endcsname
+        \atfi at appearanceobj
+  }{%
+  }%
+  % optimization: \setlength dropped
+  \atfi at appearancewidth=%
+      \@nameuse{atfi at appwidth@\atfi at icon@icon}\relax
+  \atfi at appearanceheight=%
+      \@nameuse{atfi at appheight@\atfi at icon@icon}\relax
+  \atfi at appearancedepth=%
+      \@nameuse{atfi at appdepth@\atfi at icon@icon}\relax
+  \expandafter\let\expandafter\atfi at appearanceobj
+      \csname atfi at appobj@\atfi at icon@icon\endcsname
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macro}{\atfi at set@appearance}
+%    \begin{macrocode}
+\def\atfi at set@appearance#1{%
+  \savebox{\atfi at appearancebox}{#1}%
+  \atfi at appearancewidth=\wd\atfi at appearancebox
+  \atfi at appearanceheight=\ht\atfi at appearancebox
+  \atfi at appearancedepth=\dp\atfi at appearancebox
+  \atfi at xform
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macrocode}
+\newcounter{atfi at flags}
+%    \end{macrocode}
+%    \begin{macro}{\atfi at flags@to at int}
+%    \begin{macrocode}
+\DeclareRobustCommand{\atfi at flags@to at int}{%
+  \setcounter{atfi at flags}{0}%
+  \ifatfi at print
+    \addtocounter{atfi at flags}{4}%
+  \fi%
+  \ifatfi at zoom
+  \else
+    \addtocounter{atfi at flags}{8}%
+  \fi%
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macro}{\atfi at textattachfile}
+%    \begin{macrocode}
+\def\atfi at textattachfile#1#2{%
+    \endgroup
+    \atfi at textattachfile@i{#1}{#2}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at textattachfile@i}
+%    \begin{macrocode}
+\def\atfi at textattachfile@i#1#2#3{%
+    \ltx at IfUndefined{atfi at fileobj@#2}{%
+      \atfi at writefile{#2}%
+    }{%
+      % don't need duplicates
+    }%
+    \atfi at setup{#1}%
+    \atfi at embedfile{#2}%
+    \atfi at set@appearance{%
+      \leavevmode
+      \begingroup
+        \HyColor at UseColor\atfi at color@tex
+        #3\strut
+      \endgroup
+    }%
+    \atfi at flags@to at int
+    \atfi at insert@file at annot{#2}%
+  \endgroup
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macro}{\attachfile}
+%    \begin{macrocode}
+\DeclareRobustCommand{\attachfile}[1][]{%
+  \begingroup
+    \let\do\@makeother
+    \dospecials
+    \catcode`\{=1\relax
+    \catcode`\}=2\relax
+    \atfi at attachfile{#1}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\textattachfile}
+%    \begin{macrocode}
+\DeclareRobustCommand{\textattachfile}[1][]{%
+  \begingroup
+    \begingroup
+      \let\do\@makeother
+      \dospecials
+      \catcode`\{=1\relax
+      \catcode`\}=2\relax
+      \atfi at textattachfile{#1}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\noattachfile}
+%    \begin{macrocode}
+\DeclareRobustCommand{\noattachfile}[1][]{%
+  \begingroup
+    \atfi at setup{#1}%
+    \atfi at set@appearance at icon
+    \ifatfi at print
+      \expandafter
+      \atfi at refxform\csname atfi at appobj@\atfi at icon@icon\endcsname
+    \else
+      \makebox[\atfi at appearancewidth]{}%
+    \fi
+  \endgroup
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macrocode}
+%</package>
+%    \end{macrocode}
+%
+% \subsection{Drivers}
+%
+% \subsubsection{\pdfTeX}
+%
+%    \begin{macrocode}
+%<*pdftex>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{atfi-pdftex.def}%
+  [2019/11/24 v2.10 attachfile2 driver for pdfTeX (HO)]%
+%    \end{macrocode}
+%
+% \paragraph{Macros for graphics data}
+%
+%    \begin{macro}{\atfi at literal}
+%    \begin{macrocode}
+\let\atfi at literal\pdfliteral
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macrocode}
+\def\atfi at GSAVE{q }
+\def\atfi at GRESTORE{Q }
+\def\atfi at SETLINEWIDTH{w }
+\def\atfi at LINETO{l }
+\def\atfi at MOVETO{m }
+\def\atfi at STROKE{S }
+\def\atfi at FILL{f }
+% \atfi at FILLSTROKE{<fill color>}{<stroke color>}
+\def\atfi at FILLSTROKE#1#2{#1#2B }
+%    \end{macrocode}
+% color: uppercase are stroke colors, lowercase non-stroke (fill) colors
+% PS, however, does not different between stroke and not-stroke colors
+%    \begin{macrocode}
+\def\atfi at SETRGBCOLORSTROKE{RG }
+\def\atfi at SETRGBCOLORFILL{rg }
+\def\atfi at SETGRAYSTROKE{G }
+\def\atfi at SETGRAYFILL{g }
+\def\atfi at SETCMYKCOLORSTROKE{K }
+\def\atfi at SETCMYKCOLORFILL{k }
+\def\atfi at RECTFILL{re f }
+\def\atfi at RECTSTROKEFILL#1#2#3{#1#2#3re B }
+\def\atfi at SETMITERLIMIT{M }
+\def\atfi at SETFLAT{i }
+\def\atfi at SETLINECAP{J }
+\def\atfi at CURVETO{c }
+\def\atfi at CURVETOV{v }
+\def\atfi at CURVETOY{y }
+\def\atfi at CLOSEPATH{h }
+\def\atfi at SETLINEJOIN{j }
+%    \end{macrocode}
+%
+% \paragraph{File embedding}
+%
+%    \begin{macrocode}
+\define at key{AtFi at file}{Size}{%
+  \edef\atfi at params{\atfi at params/Size #1}%
+}
+%    \end{macrocode}
+%    \begin{macro}{\atfi at embedfile}
+%    \begin{macrocode}
+\def\atfi at embedfile#1{%
+  \ltx at IfUndefined{atfi at fileobj@#1}{%
+    \begingroup
+      \let\atfi at params\ltx at empty
+      \expandafter\let\expandafter\atfi at temp
+          \csname atfi at file@#1\endcsname
+      \ifx\atfi at temp\ltx at empty
+        \let\atfi at temp\relax
+      \fi
+      \ifx\atfi at temp\relax
+        \atfi at pdftexdata{#1}%
+      \else
+        \edef\x{%
+          \noexpand\setkeys{AtFi at file}{\@nameuse{atfi at file@#1}}%
+        }%
+        \x
+      \fi
+      \ifx\atfi at params\ltx at empty
+      \else
+        \edef\atfi at params{/Params<<\atfi at params>>}%
+      \fi
+      \immediate\pdfobj stream attr {%
+        /Type/EmbeddedFile%
+        \atfi at mimetype
+        \atfi at params
+      } file {#1}%
+      \expandafter
+      \xdef\csname atfi at fileobj@#1\endcsname{\the\pdflastobj}%
+    \endgroup
+  }{%
+    % file already embedded
+  }%
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+% \paragraph{Annotation appearance}
+%
+%    \begin{macro}{\atfi at xform}
+%    input: \cs{atfi at appearancebox}, output: \cs{atfi at appearanceobj}
+%    \begin{macrocode}
+\def\atfi at xform{%
+  \immediate\pdfxform\atfi at appearancebox
+  \edef\atfi at appearanceobj{\the\pdflastxform}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at xform@icon}
+%    \begin{macrocode}
+\let\atfi at xform@icon\atfi at xform
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macro}{\atfi at refxform}
+%    \begin{macrocode}
+\def\atfi at refxform#1{%
+  \pdfrefxform#1\relax
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+% \paragraph{File attachment annotation}
+%
+%    \begin{macro}{\atfi at insert@file at annot}
+%    \begin{macrocode}
+\def\atfi at insert@file at annot#1{%
+  \rule{0pt}{0pt}%
+  \ifatfi at appearance
+    \def\atfi at appearance@dict{%
+      /AP<<%
+        /N \atfi at appearanceobj\space 0 R%
+        /R \atfi at appearanceobj\space 0 R%
+        /D \atfi at appearanceobj\space 0 R%
+      >>%
+    }%
+  \else
+    \let\atfi at appearance@dict\ltx at empty
+  \fi
+  \ltx at IfUndefined{atfi at fsobj@#1}{%
+    \begingroup
+      \hypersetup{unicode=false}%
+      \atfi at pdfstringdef\atfi at file{#1}%
+      \immediate\pdfobj{%
+        <<%
+          /Type/Filespec%
+          /F(\atfi at file)%
+          \ifx\atfi at ucfilespec\ltx at empty
+          \else
+            /UF(\atfi at ucfilespec)%
+          \fi
+          /EF<<%
+            /F \@nameuse{atfi at fileobj@#1} 0 R%
+          >>%
+        >>%
+      }%
+      \expandafter\xdef\csname atfi at fsobj@#1\endcsname{%
+        \the\pdflastobj
+      }%
+    \endgroup
+  }{%
+  }%
+  \pdfannot width \atfi at scale\atfi at appearancewidth
+            height \atfi at scale\atfi at appearanceheight
+            depth \atfi at scale\atfi at appearancedepth {%
+    /Subtype/FileAttachment%
+    \atfi at icon
+    \atfi at color@annot
+    \atfi at author
+    \atfi at date
+    \atfi at annotname
+    \atfi at description
+    \atfi at subject
+    \atfi at appearance@dict
+    /F \theatfi at flags
+    /FS \@nameuse{atfi at fsobj@#1} 0 R%
+  }%
+  \rule{0pt}{\atfi at appearanceheight}%
+  \rule[-\atfi at appearancedepth]{0pt}{\atfi at appearancedepth}%
+  \rule{\atfi at appearancewidth}{0pt}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macrocode}
+%</pdftex>
+%    \end{macrocode}
+%
+% \subsection{luatex}
+%    \begin{macrocode}
+%<*luatex>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{atfi-luatex.def}%
+  [2019/11/24 v2.10 attachfile2 driver for luaTeX (HO)]%
+\protected\def\atfi at literal        {\pdfextension literal}
+\def\atfi at GSAVE{q }
+\def\atfi at GRESTORE{Q }
+\def\atfi at SETLINEWIDTH{w }
+\def\atfi at LINETO{l }
+\def\atfi at MOVETO{m }
+\def\atfi at STROKE{S }
+\def\atfi at FILL{f }
+\def\atfi at FILLSTROKE#1#2{#1#2B }
+\def\atfi at SETRGBCOLORSTROKE{RG }
+\def\atfi at SETRGBCOLORFILL{rg }
+\def\atfi at SETGRAYSTROKE{G }
+\def\atfi at SETGRAYFILL{g }
+\def\atfi at SETCMYKCOLORSTROKE{K }
+\def\atfi at SETCMYKCOLORFILL{k }
+\def\atfi at RECTFILL{re f }
+\def\atfi at RECTSTROKEFILL#1#2#3{#1#2#3re B }
+\def\atfi at SETMITERLIMIT{M }
+\def\atfi at SETFLAT{i }
+\def\atfi at SETLINECAP{J }
+\def\atfi at CURVETO{c }
+\def\atfi at CURVETOV{v }
+\def\atfi at CURVETOY{y }
+\def\atfi at CLOSEPATH{h }
+\def\atfi at SETLINEJOIN{j }
+\define at key{AtFi at file}{Size}{%
+  \edef\atfi at params{\atfi at params/Size #1}%
+}
+\def\atfi at embedfile#1{%
+  \ltx at IfUndefined{atfi at fileobj@#1}{%
+    \begingroup
+      \let\atfi at params\ltx at empty
+      \expandafter\let\expandafter\atfi at temp
+          \csname atfi at file@#1\endcsname
+      \ifx\atfi at temp\ltx at empty
+        \let\atfi at temp\relax
+      \fi
+      \ifx\atfi at temp\relax
+        \atfi at pdftexdata{#1}%
+      \else
+        \edef\x{%
+          \noexpand\setkeys{AtFi at file}{\@nameuse{atfi at file@#1}}%
+        }%
+        \x
+      \fi
+      \ifx\atfi at params\ltx at empty
+      \else
+        \edef\atfi at params{/Params<<\atfi at params>>}%
+      \fi
+      \immediate\pdfextension obj stream attr {%
+        /Type/EmbeddedFile%
+        \atfi at mimetype
+        \atfi at params
+      } file {#1}%
+      \expandafter
+      \xdef\csname atfi at fileobj@#1\endcsname{\the\numexpr\pdffeedback lastobj\relax}%
+    \endgroup
+  }{%
+    % file already embedded
+  }%
+}
+\def\atfi at xform{%
+  \immediate\saveboxresource\atfi at appearancebox
+  \edef\atfi at appearanceobj{\the\lastsavedboxresourceindex}%
+}
+\let\atfi at xform@icon\atfi at xform
+\def\atfi at refxform#1{%
+  \useboxresource#1\relax
+}
+\def\atfi at insert@file at annot#1{%
+  \rule{0pt}{0pt}%
+  \ifatfi at appearance
+    \def\atfi at appearance@dict{%
+      /AP<<%
+        /N \atfi at appearanceobj\space 0 R%
+        /R \atfi at appearanceobj\space 0 R%
+        /D \atfi at appearanceobj\space 0 R%
+      >>%
+    }%
+  \else
+    \let\atfi at appearance@dict\ltx at empty
+  \fi
+  \ltx at IfUndefined{atfi at fsobj@#1}{%
+    \begingroup
+      \hypersetup{unicode=false}%
+      \atfi at pdfstringdef\atfi at file{#1}%
+      \immediate\pdfextension obj{%
+        <<%
+          /Type/Filespec%
+          /F(\atfi at file)%
+          \ifx\atfi at ucfilespec\ltx at empty
+          \else
+            /UF(\atfi at ucfilespec)%
+          \fi
+          /EF<<%
+            /F \@nameuse{atfi at fileobj@#1} 0 R%
+          >>%
+        >>%
+      }%
+      \expandafter\xdef\csname atfi at fsobj@#1\endcsname{%
+        \the\numexpr\pdffeedback lastobj\relax
+      }%
+    \endgroup
+  }{%
+  }%
+  \pdfextension annot width \atfi at scale\atfi at appearancewidth
+                      height \atfi at scale\atfi at appearanceheight
+                      depth \atfi at scale\atfi at appearancedepth {%
+    /Subtype/FileAttachment%
+    \atfi at icon
+    \atfi at color@annot
+    \atfi at author
+    \atfi at date
+    \atfi at annotname
+    \atfi at description
+    \atfi at subject
+    \atfi at appearance@dict
+    /F \theatfi at flags
+    /FS \@nameuse{atfi at fsobj@#1} 0 R%
+  }%
+  \rule{0pt}{\atfi at appearanceheight}%
+  \rule[-\atfi at appearancedepth]{0pt}{\atfi at appearancedepth}%
+  \rule{\atfi at appearancewidth}{0pt}%
+}
+%</luatex>
+%    \end{macrocode}
+%
+% \subsubsection{dvips}
+%
+%    \begin{macrocode}
+%<*dvips>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{atfi-dvips.def}%
+  [2019/11/24 v2.10 attachfile2 driver for dvips (HO)]%
+%    \end{macrocode}
+%
+% \paragraph{Macros for graphics data}
+%
+%    \begin{macro}{\atfi at literal}
+%    \begin{macrocode}
+\def\atfi at literal#1{%
+  \special{ps:atfi_dict begin{#1}atfi_?pdfmark end}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at header}
+%    \begin{macrocode}
+\def\atfi at header#1{%
+  \special{! #1}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macrocode}
+\atfi at header{%
+  userdict begin 20 dict dup /atfi_dict exch def end begin%
+    /atfi_?pdfmark systemdict %
+    dup/pdfmark known%
+    {%
+      /exec get def%
+    }{%
+      /pop get def%
+    } ifelse%
+    {%
+      %
+      % x y width height atfi_re ->
+      languagelevel 2 ge {%
+        /atfi_rectfill { rectfill } bind def%
+        /atfi_rectstroke { rectstroke } bind def%
+      }{%
+        /atfi_rect {%
+          /atfi_height exch def%
+          /atfi_width exch def%
+          /atfi_x exch def%
+          /atfi_y exch def %
+          newpath %
+          atfi_x atfi_y moveto %
+          atfi_x atfi_width add atfi_y lineto %
+          atfi_x atfi_width add atfi_y atfi_height add lineto %
+          atfi_x atfi_y atfi_height add lineto %
+          closepath%
+        } bind def%
+        /atfi_rectfill {%
+          atfi_rect fill%
+        } bind def%
+        /atfi_rectstroke {%
+          atfi_rect stroke%
+        } bind def%
+      } ifelse%
+      /atfi_curveto_v {%
+        currentpoint 6 2 roll curveto%
+      } bind def%
+      /atfi_curveto_y {%
+        2 copy curveto%
+      } bind def%
+      %
+      % help macro for atfi_convert_date
+      /atfi_two {%
+        dup 10 lt%
+        {%
+          1 string cvs %
+          exch 1 add exch%
+        }{%
+          2 string cvs%
+        } ifelse %
+        putinterval%
+      } bind def%
+      %
+      % <seconds since 1970-01-01> atfi_convert_date -> (D:...Z)
+      /atfi_convert_date {%
+        dup%
+        /atfi_days exch 3600 idiv 24 idiv def%
+        % calc date part
+        /atfi_year 1970 def%
+        {%
+          atfi_year 400 mod 0 eq %
+          atfi_year 100 mod 0 ne %
+          atfi_year 4   mod 0 eq %
+          and or%
+          {366} {365} ifelse %
+          dup atfi_days lt%
+          {%
+            atfi_days exch sub /atfi_days exch def%
+            /atfi_year atfi_year 1 add def%
+          }{%
+            exit%
+          } ifelse%
+        } loop%
+        /atfi_month 1 def%
+        /atfi_days atfi_days 1 add def %
+        31 atfi_days lt%
+        {%
+          atfi_days 31 sub /atfi_days exch def%
+          /atfi_month atfi_month 1 add def %
+          366 eq {29} {28} ifelse dup atfi_days lt%
+          {%
+            atfi_days exch sub /atfi_days exch def%
+            /atfi_month atfi_month 1 add def %
+          31 atfi_days lt%
+          {%
+            atfi_days 31 sub /atfi_days exch def%
+            /atfi_month atfi_month 1 add def %
+          30 atfi_days lt%
+          {%
+            atfi_days 30 sub /atfi_days exch def%
+            /atfi_month atfi_month 1 add def %
+            31 atfi_days lt%
+            {%
+              atfi_days 31 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def %
+            30 atfi_days lt%
+            {%
+              atfi_days 30 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def %
+            31 atfi_days lt%
+            {%
+              atfi_days 31 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def %
+            31 atfi_days lt%
+            {%
+              atfi_days 31 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def %
+            30 atfi_days lt%
+            {%
+              atfi_days 30 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def %
+            31 atfi_days lt%
+            {%
+              atfi_days 31 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def %
+            30 atfi_days lt%
+            {%
+              atfi_days 30 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def %
+            31 atfi_days lt%
+            {%
+              atfi_days 31 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def%
+            } if%
+            } if%
+            } if%
+            } if%
+            } if%
+            } if%
+            } if%
+            } if%
+            } if%
+            } if%
+          } { pop } ifelse%
+        }{ pop } ifelse %
+        % calc time part
+        3600 24 mul mod %
+        dup 3600 idiv dup /atfi_hour exch def %
+        3600 mul sub %
+        dup 60 idiv dup /atfi_min exch def %
+        60 mul sub %
+        /atfi_sec exch def%
+        (D:19700101000000Z)%
+        dup 2  atfi_year 4 string cvs putinterval %
+        dup 6  atfi_month atfi_two %
+        dup 8  atfi_days  atfi_two %
+        dup 10 atfi_hour  atfi_two %
+        dup 12 atfi_min   atfi_two %
+        dup 14 atfi_sec   atfi_two%
+      } bind def %
+      %
+      % <filename> atfi_calc_checksum -> /CheckSum <checksum>
+      % or returns nothing, if MD5Encode is not given
+      false %
+      languagelevel 2 ge {%
+        (MD5Encode)%
+        { pop true or }%
+        (MD5Encode) length string%
+        /Filter %
+        resourceforall%
+      } if%
+      {%
+        /atfi_calc_checksum {%
+          /atfi_checksum 16 string def%
+          /atfi_file exch (r) file def%
+          /atfi_md5sum atfi_checksum /MD5Encode filter def %
+          % not too efficient to read and write byte by byte,
+          % using a buffer is probably faster
+          atfi_size {%
+            atfi_file read%
+            {%
+              atfi_md5sum exch write%
+            } if%
+          } repeat %
+          atfi_md5sum closefile %
+          atfi_file closefile%
+          /CheckSum atfi_checksum%
+        } bind def%
+      }{%
+        /atfi_calc_checksum { pop } bind def%
+      } ifelse%
+      %
+      /atfi_pttobp { 72.27 div 72 mul } bind def%
+      /atfi_pdftodvipsx { 72.27 div Resolution mul } bind def%
+      /atfi_pdftodvipsy { 72.27 div VResolution mul } bind def%
+      %
+    } atfi_?pdfmark %
+  end%
+}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\atfi at GSAVE{gsave }
+\def\atfi at GRESTORE{grestore }
+\def\atfi at SETLINEWIDTH{setlinewidth }
+\def\atfi at LINETO{lineto }
+\def\atfi at MOVETO{moveto }
+\def\atfi at STROKE{stroke }
+\def\atfi at FILL{fill }
+\def\atfi at FILLSTROKE#1#2{gsave #1 fill grestore #2 stroke }
+\def\atfi at SETRGBCOLORSTROKE{setrgbcolor }
+\def\atfi at SETRGBCOLORFILL{setrgbcolor }
+\def\atfi at SETGRAYSTROKE{setgray }
+\def\atfi at SETGRAYFILL{setgray }
+\def\atfi at SETCMYKCOLORSTROKE{setcmykcolor }
+\def\atfi at SETCMYKCOLORFILL{setcmykcolor }
+\def\atfi at RECTFILL{atfi_rectfill }
+\def\atfi at RECTSTROKEFILL#1#2#3{%
+  #3%
+  #1%
+  gsave atfi_rectfill grestore %
+  #2%
+  #3%
+  atfi_rectstroke %
+  #1%
+}
+\def\atfi at SETMITERLIMIT{setmiterlimit }
+\def\atfi at SETFLAT{setflat }
+\def\atfi at SETLINECAP{setlinecap }
+\def\atfi at CURVETO{curveto }
+\def\atfi at CURVETOV{atfi_curveto_v }
+\def\atfi at CURVETOY{atfi_curveto_y }
+\def\atfi at CLOSEPATH{closepath }
+\def\atfi at SETLINEJOIN{setlinejoin }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\newcounter{atfi at obj}
+\renewcommand*{\theatfi at obj}{%
+  {atfi_obj_\number\c at atfi@obj}%
+}
+%    \end{macrocode}
+%
+% \paragraph{File embedding}
+%
+%    Most values for Params dictionary found in the \xext{atfi} file
+%    have priority:
+%    \begin{itemize}
+%    \item Recalculation (md5sum, \dots) is avoided.
+%    \item An external script has more possibilities than programming
+%          at PostScript level (operating system, getting the date and
+%          time values of the file with correct interpretation.
+%    \item Exception: status is called to test file existence, thus
+%          we get the value of size for free.
+%    \end{itemize}
+%    \begin{macrocode}
+\define at key{AtFi at file}{Size}{}
+%    \end{macrocode}
+%    \begin{macro}{\atfi at embedfile}
+%    \begin{macrocode}
+\def\atfi at embedfile#1{%
+  \ltx at IfUndefined{atfi at fileobj@#1}{%
+    \atfi at pdfstringdef\atfi at psfilename{#1}%
+    \stepcounter{atfi at obj}%
+    \expandafter\xdef\csname atfi at fileobj@#1\endcsname{\theatfi at obj}%
+    \begingroup
+      \let\atfi at params\ltx at empty
+      \expandafter\let\expandafter\atfi at temp
+          \csname atfi at file@#1\endcsname
+      \ifx\atfi at temp\ltx at empty
+        \let\atfi at temp\relax
+      \fi
+      \ifx\atfi at temp\relax
+        \atfi at pdftexdata{#1}%
+      \else
+        \edef\x{%
+          \noexpand\setkeys{AtFi at file}{\@nameuse{atfi at file@#1}}%
+        }%
+        \x
+      \fi
+      \atfi at literal{%
+        /atfi_filename(\atfi at psfilename)def %
+        atfi_filename status%
+        {%
+%    \end{macrocode}
+%         ok: file found\\
+%         save parameters of status command
+%    \begin{macrocode}
+          /atfi_created exch def%
+          /atfi_referenced exch def%
+          /atfi_size exch def %
+          pop %
+%    \end{macrocode}
+%\begin{verbatim}
+%drop parameter "pages" (storage space), never needed
+%ghostscript:
+%  created:       stat.st_ctime
+%  referenced:    stat.st_mtime
+%  stat.st_ctime: interpretion depends on operating system:
+%                 * unix: inode change time (not interesting)
+%                 * win32: probably creation time
+%                          --> /CreationDate
+%  stat.st_mtime: modification time --> /ModDate
+%  time values are seconds since 1970-01-01, GMT
+%TODO: ghostscript offers "getenv" for getting the value
+%      of an environment variable. That could be used to
+%      to detect windows and settingthe /CreationDate entry.
+%TODO: how are these values interpreted by other distiller
+%      programs?
+%\end{verbatim}
+%    \begin{macrocode}
+          [%
+            /_objdef \theatfi at obj
+            /type/stream%
+          /OBJ pdfmark%
+          [%
+            \theatfi at obj
+            <<%
+              /Type/EmbeddedFile%
+              \atfi at mimetype
+              /Params%
+              <<%
+                \atfi at params
+                %
+                /Size atfi_size%
+                %
+                /product where%
+                {%
+                  pop %
+%    \end{macrocode}
+% check for ghostscript
+%    \begin{macrocode}
+                  product (Ghostscript) search%
+                  {%
+                    pop pop pop %
+%    \end{macrocode}
+%                     ghostscript is running
+%    \begin{macrocode}
+                    \ifatfi at creationdate
+                    \else
+                      false % TODO: test for windows
+                      {%
+                        /CreationDate atfi_created atfi_convert_date%
+                      } if%
+                    \fi
+                    \ifatfi at moddate
+                    \else
+                      /ModDate atfi_referenced atfi_convert_date%
+                    \fi
+                  } if%
+%    \end{macrocode}
+%                   look for MD5Encode filter and calculate CheckSum
+%    \begin{macrocode}
+                } if %
+                \ifatfi at checksum
+                \else
+                  atfi_filename atfi_calc_checksum%
+                \fi
+              >>%
+            >>%
+          /PUT pdfmark%
+          [%
+            \theatfi at obj
+            atfi_filename (r) file%
+          /PUT pdfmark%
+          [%
+            \theatfi at obj
+          /CLOSE pdfmark%
+        }{%
+%    \end{macrocode}
+%           error: file not found\\
+%           currently nothing is done
+%    \begin{macrocode}
+        } ifelse%
+      }%
+    \endgroup
+  }{%
+%    \end{macrocode}
+%     file already embedded
+%    \begin{macrocode}
+  }%
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+%
+% \paragraph{Annotation appearance}
+%
+% output: \cs{atfi at appearanceobj}\\
+% input: \cs{atfi at appearancebox}, \cs{atfi at icon@icon}
+%    \begin{macro}{atfi at xfrom@icon}
+%    \begin{macrocode}
+\def\atfi at xform@icon{%
+  \stepcounter{atfi at obj}%
+  \edef\atfi at appearanceobj{\theatfi at obj}%
+  \atfi at literal{%
+    [%
+      /_objdef \atfi at appearanceobj
+      /BBox[%
+        0 %
+        0 %
+        \strip at pt\wd\atfi at appearancebox\space atfi_pttobp %
+        \strip at pt\dimexpr\dp\atfi at appearancebox
+            +\ht\atfi at appearancebox\relax\space atfi_pttobp%
+      ]%
+    /BP pdfmark %
+    \csname atfi at acro\atfi at icon@icon @data\endcsname
+    [%
+    /EP pdfmark%
+  }%
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at xform}
+%    output: \cs{atfi at appearanceobj},
+%    input: \cs{atfi at appearancebox}
+%    \begin{macrocode}
+\def\atfi at xform{%
+  \stepcounter{atfi at obj}%
+  \edef\atfi at appearanceobj{\theatfi at obj}%
+  \begingroup
+    \setbox\ltx at zero=\hbox{%
+      \atfi at literal{%
+        [%
+          /_objdef \atfi at appearanceobj
+          /BBox[%
+            currentpoint %
+              \strip at pt\dp\atfi at appearancebox\space sub %
+            currentpoint %
+              exch \strip at pt\wd\atfi at appearancebox\space add %
+              exch \strip at pt\ht\atfi at appearancebox\space add%
+          ]%
+        /BP pdfmark %
+        gsave %
+        currentpoint %
+        2 copy translate %
+        72.27 Resolution div 72.27 VResolution div neg scale %
+        exch neg exch neg translate%
+      }%
+      \usebox{\atfi at appearancebox}%
+      \atfi at literal{%
+        grestore%
+        [%
+        /EP pdfmark%
+      }%
+    }%
+    % do not allocate any space for xobject definition
+    \dp\ltx at zero=\z@
+    \ht\ltx at zero=\z@
+    \wd\ltx at zero=\z@
+    \mbox{\usebox\ltx at zero}%
+  \endgroup
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at refxform}
+%    \begin{macrocode}
+\def\atfi at refxform#1{%
+  \raisebox{-\atfi at appearancedepth}{%
+    \atfi at literal{%
+      gsave %
+        currentpoint translate %
+        Resolution 72 div VResolution neg 72 div scale%
+        [#1 /SP pdfmark % hash-ok
+      grestore%
+    }%
+    \makebox[\atfi at appearancewidth]{}%
+  }%
+  \rule{0pt}{\atfi at appearanceheight}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+% \paragraph{File attachment annotation}
+%
+%    \begin{macro}{\atfi at insert@file at annot}
+%    \begin{macrocode}
+\def\atfi at insert@file at annot#1{%
+  \rule{0pt}{0pt}%
+  \ifatfi at appearance
+    \def\atfi at appearance@dict{%
+      /AP<<%
+        /N \atfi at appearanceobj
+        /R \atfi at appearanceobj
+        /D \atfi at appearanceobj
+      >>%
+    }%
+  \else
+    \let\atfi at appearance@dict\ltx at empty
+  \fi
+  \ltx at IfUndefined{atfi at fsobj@#1}{%
+    \stepcounter{atfi at obj}%
+    \expandafter
+    \xdef\csname atfi at fsobj@#1\endcsname{\theatfi at obj}%
+    \begingroup
+      \hypersetup{unicode=false}%
+      \atfi at pdfstringdef\atfi at file{#1}%
+      \atfi at literal{%
+        [%
+          /_objdef \theatfi at obj
+          /type/dict%
+        /OBJ pdfmark%
+        [%
+          \theatfi at obj
+          <<%
+            /Type/Filespec%
+            /F(\atfi at file)%
+            \ifx\atfi at ucfilespec\ltx at empty
+            \else
+              /UF(\atfi at ucfilespec)%
+            \fi
+            /EF<<%
+              /F \csname atfi at fileobj@#1\endcsname
+            >>%
+          >>%
+        /PUT pdfmark%
+      }%
+    \endgroup
+  }{%
+  }%
+  \atfi at literal{%
+    [%
+      /Subtype/FileAttachment%
+      \atfi at icon
+      \atfi at color@annot
+      \atfi at author
+      \atfi at date
+      \atfi at annotname
+      \atfi at description
+      \atfi at subject
+      \atfi at appearance@dict
+      /F \theatfi at flags
+      /FS \csname atfi at fsobj@#1\endcsname
+      /Rect[%
+        currentpoint %
+          \strip at pt\dimexpr\atfi at scale\atfi at appearancedepth\relax
+            \space atfi_pdftodvipsy add %
+        currentpoint %
+          exch %
+            \strip at pt\dimexpr\atfi at scale\atfi at appearancewidth\relax
+            \space atfi_pdftodvipsx add %
+          exch %
+            \strip at pt\dimexpr\atfi at scale\atfi at appearanceheight\relax
+            \space atfi_pdftodvipsy sub %
+      ]%
+    /ANN pdfmark%
+  }%
+  \rule{0pt}{\atfi at appearanceheight}%
+  \rule[-\atfi at appearancedepth]{0pt}{\atfi at appearancedepth}%
+  \rule{\atfi at appearancewidth}{0pt}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macrocode}
+%</dvips>
+%    \end{macrocode}
+%
+% \subsubsection{dvipdfmx}
+%
+%    \begin{macrocode}
+%<*dvipdfmx>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{atfi-dvipdfmx.def}%
+  [2019/11/24 v2.10 attachfile2 driver for dvipdfmx/XeTeX (HO)]%
+%    \end{macrocode}
+%
+% \paragraph{Macros for graphics data}
+%
+%    \begin{macro}{\atfi at special}
+%    \begin{macrocode}
+\def\atfi at special#1{%
+  \special{pdf:#1}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at literal}
+%    \begin{macrocode}
+\def\atfi at literal#1{%
+  \atfi at special{content #1}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macrocode}
+\def\atfi at GSAVE{q }
+\def\atfi at GRESTORE{Q }
+\def\atfi at SETLINEWIDTH{w }
+\def\atfi at LINETO{l }
+\def\atfi at MOVETO{m }
+\def\atfi at STROKE{S }
+\def\atfi at FILL{f }
+\def\atfi at FILLSTROKE#1#2{#1#2B }
+\def\atfi at SETRGBCOLORSTROKE{RG }
+\def\atfi at SETRGBCOLORFILL{rg }
+\def\atfi at SETGRAYSTROKE{G }
+\def\atfi at SETGRAYFILL{g }
+\def\atfi at SETCMYKCOLORSTROKE{K }
+\def\atfi at SETCMYKCOLORFILL{k }
+\def\atfi at RECTFILL{re f }
+\def\atfi at RECTSTROKEFILL#1#2#3{#1#2#3re B }
+\def\atfi at SETMITERLIMIT{M }
+\def\atfi at SETFLAT{i }
+\def\atfi at SETLINECAP{J }
+\def\atfi at CURVETO{c }
+\def\atfi at CURVETOV{v }
+\def\atfi at CURVETOY{y }
+\def\atfi at CLOSEPATH{h }
+\def\atfi at SETLINEJOIN{j }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\newcounter{atfi at obj}
+\renewcommand*{\theatfi at obj}{%
+  @atfi_obj_\number\c at atfi@obj
+}
+%    \end{macrocode}
+%
+% \paragraph{File embedding}
+%
+%    \begin{macrocode}
+\define at key{AtFi at file}{Size}{%
+  \edef\atfi at params{\atfi at params/Size #1}%
+}
+%    \end{macrocode}
+%    \begin{macro}{\atfi at embedfile}
+%    \begin{macrocode}
+\def\atfi at embedfile#1{%
+  \ltx at IfUndefined{atfi at fileobj@#1}{%
+    \stepcounter{atfi at obj}%
+    \begingroup
+      \let\atfi at params\ltx at empty
+      \expandafter\let\expandafter\atfi at temp
+          \csname atfi at file@#1\endcsname
+      \ifx\atfi at temp\ltx at empty
+        \let\atfi at temp\relax
+      \fi
+      \ifx\atfi at temp\relax
+        \atfi at pdftexdata{#1}%
+      \else
+        \edef\x{%
+          \noexpand\setkeys{AtFi at file}{\@nameuse{atfi at file@#1}}%
+        }%
+        \x
+      \fi
+      \ifx\atfi at params\ltx at empty
+      \else
+        \edef\atfi at params{/Params<<\atfi at params>>}%
+      \fi
+      \edef\atfi at FILE{#1}%
+      \filename at parse\atfi at FILE
+      \ifx\filename at area\ltx at empty
+        \edef\atfi at FILE{./\atfi at FILE}%
+      \fi
+      \EdefEscapeString\atfi at FILE{\atfi at FILE}%
+      \atfi at special{fstream %
+        \theatfi at obj
+        (\atfi at FILE)%
+        <<%
+          /Type/EmbeddedFile%
+          \atfi at mimetype
+          \atfi at params
+        >>%
+      }%
+      \atfi at special{close \theatfi at obj}%
+      \expandafter
+      \xdef\csname atfi at fileobj@#1\endcsname{\theatfi at obj}%
+    \endgroup
+  }{%
+    % file already embedded
+  }%
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+% \paragraph{Annotation appearance}
+%
+%    \begin{macro}{\atfi at xform}
+%    input: \cs{atfi at appearancebox}, output: \cs{atfi at appearanceobj}
+%    \begin{macrocode}
+\def\atfi at xform{%
+  \stepcounter{atfi at obj}%
+  \smash{%
+    \rlap{%
+      \atfi at special{bxobj \theatfi at obj\space
+        width \the\wd\atfi at appearancebox\space
+        height \the\ht\atfi at appearancebox\space
+        depth \the\dp\atfi at appearancebox
+      }%
+      \usebox\atfi at appearancebox
+      \atfi at special{exobj}%
+    }%
+  }%
+  \edef\atfi at appearanceobj{\theatfi at obj}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \begin{macro}{\atfi at xform@icon}
+%    \begin{macrocode}
+\let\atfi at xform@icon\atfi at xform
+%    \end{macrocode}
+%    \end{macro}
+%
+%    \begin{macro}{\atfi at refxform}
+%    \begin{macrocode}
+\def\atfi at refxform#1{%
+  \leavevmode
+  \atfi at special{uxobj #1}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+% \paragraph{File attachment annotation}
+%
+%    \begin{macro}{\atfi at insert@file at annot}
+%    \begin{macrocode}
+\def\atfi at insert@file at annot#1{%
+  \rule{0pt}{0pt}%
+  \ifatfi at appearance
+    \def\atfi at appearance@dict{%
+      /AP<<%
+        /N \atfi at appearanceobj
+        /R \atfi at appearanceobj
+        /D \atfi at appearanceobj
+      >>%
+    }%
+  \else
+    \let\atfi at appearance@dict\ltx at empty
+  \fi
+  \ltx at IfUndefined{atfi at fsobj@#1}{%
+    \begingroup
+      \ifxetex
+        \let\atfi at temp\Hy at Warning
+        \let\Hy at Warning\ltx at gobble
+      \fi
+      \hypersetup{unicode=false}%
+      \ifxetex
+        \let\Hy at Warning\atfi at temp
+      \fi
+      \atfi at pdfstringdef\atfi at file{#1}%
+      \stepcounter{atfi at obj}%
+      \atfi at special{obj \theatfi at obj <<%
+          /Type/Filespec%
+          /F(\atfi at file)%
+          \ifx\atfi at ucfilespec\ltx at empty
+          \else
+            /UF(\atfi at ucfilespec)%
+          \fi
+          /EF<<%
+            /F \@nameuse{atfi at fileobj@#1}%
+          >>%
+        >>%
+      }%
+      \expandafter\xdef\csname atfi at fsobj@#1\endcsname{%
+        \theatfi at obj
+      }%
+    \endgroup
+  }{%
+  }%
+  \begingroup
+    \dimen@=\atfi at scale\atfi at appearancewidth
+    \edef\atfi at rule{width \the\dimen@}%
+    \dimen@=\atfi at scale\atfi at appearanceheight
+    \edef\atfi at rule{\atfi at rule\space height \the\dimen@}%
+    \dimen@=\atfi at scale\atfi at appearancedepth
+    \edef\atfi at rule{\atfi at rule\space depth \the\dimen@}%
+    \atfi at special{ann \atfi at rule
+      <<%
+        /Subtype/FileAttachment%
+        \atfi at icon
+        \atfi at color@annot
+        \atfi at author
+        \atfi at date
+        \atfi at annotname
+        \atfi at description
+        \atfi at subject
+        \atfi at appearance@dict
+        /F \theatfi at flags
+        /FS \@nameuse{atfi at fsobj@#1}%
+      >>%
+    }%
+  \endgroup
+  \rule{0pt}{\atfi at appearanceheight}%
+  \rule[-\atfi at appearancedepth]{0pt}{\atfi at appearancedepth}%
+  \rule{\atfi at appearancewidth}{0pt}%
+}
+%    \end{macrocode}
+%    \end{macro}
+%
+%
+%    \begin{macrocode}
+%</dvipdfmx>
+%    \end{macrocode}
+%
+% \subsection{Perl script \xfile{pdfatfi.pl}}
+%
+%    \begin{macrocode}
+%<*pdfatfi>
+%    \end{macrocode}
+%    \begingroup\small
+%    \SpecialEscapechar\|
+%    \begin{macrocode}
+#!/usr/bin/env perl
+use strict;
+$^W=1; # turn warning on
+#
+# pdfatfi.pl
+#
+# Copyright (C) 2005-2010, 2012 Heiko Oberdiek.
+#
+# This work may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either
+# version 1.3c of this license or (at your option) any later
+# version. This version of this license is in
+#    https://www.latex-project.org/lppl/lppl-1-3c.txt
+# and the latest version of this license is in
+#    https://www.latex-project.org/lppl.txt
+# and version 1.3 or later is part of all distributions of
+# LaTeX version 2005/12/01 or later.
+#
+# This work has the LPPL maintenance status "maintained".
+#
+# The Current Maintainers of this work are
+# Heiko Oberdiek and the Oberdiek Package Support Group
+# https://github.com/ho-tex/attachfile2/issues
+#
+# See file "attachfile2.pdf" for a list of files that belong to
+# this project.
+#
+# This file "pdfatfi.pl" may be renamed to "pdfatfi"
+# for installation purposes.
+#
+my $prj         = 'pdfatfi';
+my $file        = "$prj.pl";
+my $program     = uc($&) if $file =~ /^\w+/;
+my $version     = "2.9";
+my $date        = "2019/11/24";
+my $author      = "Heiko Oberdiek";
+my $copyright   = "Copyright (c) 2005-2010, 2012 by $author.";
+#
+# History:
+#   2005/05/21 v1.0: First release.
+#   2006/08/16 v2.2: Included in DTX file of attachfile2.dtx.
+#   2010/09/27 v2.6: Keys ModDateTZ and CreationDateTZ added.
+#   2016/05/16 v2.8: Option --version added.
+#   2019/11/24 v2.10: adapted version to attachfile2 version.
+#
+
+use POSIX qw(strftime); # %z is used (GNU)
+use Digest::MD5;
+
+### program identification
+my $title = "$program $version, $date - $copyright\n";
+
+### error strings
+my $Error = "!!! Error:"; # error prefix
+
+### variables
+my $atfifile;
+
+### option variables
+my @bool = ("false", "true");
+$::opt_help       = 0;
+$::opt_quiet      = 0;
+$::opt_debug      = 0;
+$::opt_verbose    = 0;
+$::opt_version    = 0;
+
+my $usage = <<"END_OF_USAGE";
+${title}Syntax:   \L$program\E [options] <file[.atfi]>
+Function: Help program for LaTeX package "attachfile2".
+Options:                                    (defaults:)
+  --help          print usage
+  --version       print version number
+  --(no)quiet     suppress messages         ($bool[$::opt_quiet])
+  --(no)verbose   verbose printing          ($bool[$::opt_verbose])
+  --(no)debug     debug informations        ($bool[$::opt_debug])
+END_OF_USAGE
+
+### process options
+my @OrgArgv = @ARGV;
+use Getopt::Long;
+GetOptions(
+  "help!",
+  "version!",
+  "quiet!",
+  "debug!",
+  "verbose!",
+) or die $usage;
+!$::opt_help or die $usage;
+if ($::opt_version) {
+    print "$prj $date v$version\n";
+    exit(0);
+}
+ at ARGV == 1 or die "$usage$Error Missing jobname!\n";
+
+$::opt_quiet = 0 if $::opt_verbose;
+
+print $title unless $::opt_quiet;
+
+### get jobname
+$atfifile = $ARGV[0];
+if (!-f $atfifile && -f "$atfifile.atfi") {
+    $atfifile .= ".atfi";
+}
+-f $atfifile or die "$Error File `$atfifile' not found!\n";
+
+print "* job file     = $atfifile\n" if $::opt_verbose;
+
+if ($::opt_debug) {
+  print <<"END_DEB";
+* OSNAME: $^O
+* PERL_VERSION: $]
+* ARGV: @OrgArgv
+END_DEB
+}
+
+my $tmpfile = $atfifile . ".tmp";
+
+my $timezone = strftime "%z", localtime;
+
+sub gettz ($) {
+    my $time = shift;
+    my $tz = strftime "%z", localtime($time);
+    return '' unless $tz;
+    return 'Z' if $tz eq '+0000';
+    $tz =~ s/^([+\-]\d\d)(\d\d)$/$1'$2'/;
+    return $tz;
+}
+
+open(IN, $atfifile) or die "$Error Cannot open `$atfifile'!\n";
+open(OUT, ">$tmpfile") or die "$Error Cannot write `$tmpfile'!\n";
+
+while(<IN>) {
+    # timezone
+    if (s/^(\\attachfile\@timezone\{).*(\})$/$1$timezone$2/) {
+        print "* timezone     = $timezone\n" if $::opt_verbose;
+    }
+
+    # file entry
+    if (/^\\attachfile\@file\[[^\]]*\]\{(.*)\}$/) {
+        my $hexfile = $1;
+        my $file = pack('H*', $hexfile);
+        my @s = stat($file);
+        if (@s == 0) {
+            print "!!! Warning: File `$file' not found!\n";
+        }
+        else {
+            my $size = $s[7];
+            my $mtime = $s[9];
+            my $ctime = $s[10]; # inode change time
+
+            my ($sec, $min, $hour, $mday, $mon, $year) =
+                    localtime($mtime);
+            my $moddate = sprintf("%04d%02d%02d%02d%02d%02d",
+                                  $year + 1900, $mon + 1, $mday,
+                                  $hour, $min, $sec);
+            my $moddatetz = 'D:' . $moddate . gettz($mtime);
+
+            # Manual page "perlport" says that "ctime" is creation
+            # time instead of inode change time for "Win32" and
+            # "Mac OS", but it is unsupported for "Mac OS X".
+            my $creationdate = "";
+            my $creationdatetz = "";
+            if ($^O eq 'MSWin32') { # cygwin?
+                ($sec, $min, $hour, $mday, $mon, $year) =
+                        localtime($ctime);
+                $creationdate = sprintf("%04d%02d%02d%02d%02d%02d",
+                                        $year + 1900, $mon + 1, $mday,
+                                        $hour, $min, $sec);
+                $creationdatetz =
+                        'D:' . $creationdate . gettz($ctime);
+            }
+
+            # md5 checksum
+            my $checksum = "";
+            my $ctx = Digest::MD5->new;
+            if (open(FILE, $file)) {
+                $ctx->addfile(*FILE);
+                $checksum = $ctx->hexdigest;
+                close(FILE);
+            }
+            else {
+                print "!!! Warning: File `$file' cannot be read,"
+                      . " dropping checksum!\n";
+            }
+
+            $_ = "\\attachfile\@file["
+                 . "ModDateTZ=$moddatetz"
+                 . ",Size=$size"
+                 . ($checksum ? ",CheckSum=$checksum" : "")
+                 . ($creationdatetz ?
+                         ",CreationDateTZ=$creationdatetz" :
+                         ($creationdate ?
+                                 ",CreationDate=$creationdate" : ""))
+                 . "]{$hexfile}\n";
+            if ($::opt_verbose) {
+                print "* file entry   = $file\n";
+                print "  size         = $size\n";
+                print "  moddate      = $moddate\n";
+                print "  creationdate = $creationdate\n"
+                        if $creationdate;
+                print "  checksum     = $checksum\n" if $checksum;
+            }
+        }
+    }
+
+    print OUT $_;
+}
+
+close(IN);
+close(OUT);
+
+unlink($atfifile) or die "$Error Cannot delete old `$atfifile'!\n";
+rename $tmpfile, $atfifile
+        or die "$Error Cannot move `$tmpfile' to `$atfifile'!\n";
+
+print "*** ready. ***\n" unless $::opt_quiet;
+
+__END__
+%    \end{macrocode}
+%    \endgroup
+%    \begin{macrocode}
+%</pdfatfi>
+%    \end{macrocode}
+%
+%
+% \section{Installation}
+%
+% \subsection{Download}
+%
+% \paragraph{Package.} This package is available on
+% CTAN\footnote{\CTANpkg{attachfile2}}:
+% \begin{description}
+% \item[\CTAN{macros/latex/contrib/attachfile2/attachfile2.dtx}] The source file.
+% \item[\CTAN{macros/latex/contrib/attachfile2/attachfile2.pdf}] Documentation.
+% \end{description}
+%
+%
+% \paragraph{Bundle.} All the packages of the bundle `attachfile2'
+% are also available in a TDS compliant ZIP archive. There
+% the packages are already unpacked and the documentation files
+% are generated. The files and directories obey the TDS standard.
+% \begin{description}
+% \item[\CTANinstall{install/macros/latex/contrib/attachfile2.tds.zip}]
+% \end{description}
+% \emph{TDS} refers to the standard ``A Directory Structure
+% for \TeX\ Files'' (\CTAN{tds/tds.pdf}). Directories
+% with \xfile{texmf} in their name are usually organized this way.
+%
+% \subsection{Bundle installation}
+%
+% \paragraph{Unpacking.} Unpack the \xfile{attachfile2.tds.zip} in the
+% TDS tree (also known as \xfile{texmf} tree) of your choice.
+% Example (linux):
+% \begin{quote}
+%   |unzip attachfile2.tds.zip -d ~/texmf|
+% \end{quote}
+%
+% \paragraph{Script installation.}
+% Check the directory \xfile{TDS:scripts/attachfile2/} for
+% scripts that need further installation steps.
+% Package \xpackage{attachfile2} comes with the Perl script
+% \xfile{pdfatfi.pl} that should be installed in such a way
+% that it can be called as \texttt{pdfatfi}.
+% Example (linux):
+% \begin{quote}
+%   |chmod +x scripts/attachfile2/pdfatfi.pl|\\
+%   |cp scripts/attachfile2/pdfatfi.pl /usr/local/bin/|
+% \end{quote}
+%
+% \subsection{Package installation}
+%
+% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting
+% \docstrip\ archive. The files are extracted by running the
+% \xfile{.dtx} through \plainTeX:
+% \begin{quote}
+%   \verb|tex attachfile2.dtx|
+% \end{quote}
+%
+% \paragraph{TDS.} Now the different files must be moved into
+% the different directories in your installation TDS tree
+% (also known as \xfile{texmf} tree):
+% \begin{quote}
+% \def\t{^^A
+% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}}
+%   attachfile2.sty & tex/latex/attachfile2/attachfile2.sty\\
+%   atfi-dvips.def & tex/latex/attachfile2/atfi-dvips.def\\
+%   atfi-pdftex.def & tex/latex/attachfile2/atfi-pdftex.def\\
+%   atfi-dvipdfmx.def & tex/latex/attachfile2/atfi-dvipdfmx.def\\
+%   pdfatfi.pl & scripts/attachfile2/pdfatfi.pl\\
+%   attachfile2.pdf & doc/latex/attachfile2/attachfile2.pdf\\
+%   attachfile2.dtx & source/latex/attachfile2/attachfile2.dtx\\
+% \end{tabular}^^A
+% }^^A
+% \sbox0{\t}^^A
+% \ifdim\wd0>\linewidth
+%   \begingroup
+%     \advance\linewidth by\leftmargin
+%     \advance\linewidth by\rightmargin
+%   \edef\x{\endgroup
+%     \def\noexpand\lw{\the\linewidth}^^A
+%   }\x
+%   \def\lwbox{^^A
+%     \leavevmode
+%     \hbox to \linewidth{^^A
+%       \kern-\leftmargin\relax
+%       \hss
+%       \usebox0
+%       \hss
+%       \kern-\rightmargin\relax
+%     }^^A
+%   }^^A
+%   \ifdim\wd0>\lw
+%     \sbox0{\small\t}^^A
+%     \ifdim\wd0>\linewidth
+%       \ifdim\wd0>\lw
+%         \sbox0{\footnotesize\t}^^A
+%         \ifdim\wd0>\linewidth
+%           \ifdim\wd0>\lw
+%             \sbox0{\scriptsize\t}^^A
+%             \ifdim\wd0>\linewidth
+%               \ifdim\wd0>\lw
+%                 \sbox0{\tiny\t}^^A
+%                 \ifdim\wd0>\linewidth
+%                   \lwbox
+%                 \else
+%                   \usebox0
+%                 \fi
+%               \else
+%                 \lwbox
+%               \fi
+%             \else
+%               \usebox0
+%             \fi
+%           \else
+%             \lwbox
+%           \fi
+%         \else
+%           \usebox0
+%         \fi
+%       \else
+%         \lwbox
+%       \fi
+%     \else
+%       \usebox0
+%     \fi
+%   \else
+%     \lwbox
+%   \fi
+% \else
+%   \usebox0
+% \fi
+% \end{quote}
+% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's
+% TDS installing feature, then some files can already be in the right
+% place, see the documentation of \docstrip.
+%
+% \subsection{Refresh file name databases}
+%
+% If your \TeX~distribution
+% (\teTeX, \mikTeX, \dots) relies on file name databases, you must refresh
+% these. For example, \teTeX\ users run \verb|texhash| or
+% \verb|mktexlsr|.
+%
+% \subsection{Script installation}
+%    This package comes with a Perl script \xfile{pdfatfi.pl}.
+%    Install it somewhere so that it is executed, when it is called
+%    as \verb|pdfatfi| on the command line. Example for
+%    installing it under Linux:
+%    \begin{quote}
+%\begin{verbatim}
+%cp pdfatfi.pl /usr/local/bin/pdfatfi
+%chmod +x /usr/local/bin/pdfatfi
+%\end{verbatim}
+%    \end{quote}
+%
+%
+% \subsection{Some details for the interested}
+%
+% \paragraph{Unpacking with \LaTeX.}
+% The \xfile{.dtx} chooses its action depending on the format:
+% \begin{description}
+% \item[\plainTeX:] Run \docstrip\ and extract the files.
+% \item[\LaTeX:] Generate the documentation.
+% \end{description}
+% If you insist on using \LaTeX\ for \docstrip\ (really,
+% \docstrip\ does not need \LaTeX), then inform the autodetect routine
+% about your intention:
+% \begin{quote}
+%   \verb|latex \let\install=y\input{attachfile2.dtx}|
+% \end{quote}
+% Do not forget to quote the argument according to the demands
+% of your shell.
+%
+% \paragraph{Generating the documentation.}
+% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate
+% the documentation. The process can be configured by the
+% configuration file \xfile{ltxdoc.cfg}. For instance, put this
+% line into this file, if you want to have A4 as paper format:
+% \begin{quote}
+%   \verb|\PassOptionsToClass{a4paper}{article}|
+% \end{quote}
+% An example follows how to generate the
+% documentation with pdf\LaTeX:
+% \begin{quote}
+%\begin{verbatim}
+%pdflatex attachfile2.dtx
+%makeindex -s gind.ist attachfile2.idx
+%pdflatex attachfile2.dtx
+%makeindex -s gind.ist attachfile2.idx
+%pdflatex attachfile2.dtx
+%\end{verbatim}
+% \end{quote}
+%
+% \begin{thebibliography}{9}
+% \bibitem{attachfile}
+%   Scott Pakin: \textit{The \xpackage{attachfile} package};
+%   2005/02/20 v1.2;
+%   \CTANpkg{attachfile}.
+%
+% \bibitem{embedfile}
+%   Heiko Oberdiek: \textit{The \xpackage{embedfile} package};
+%   2006/08/16 v1.0;
+%   \CTAN{macros/latex/contrib/oberdiek/embedfile.pdf}.
+%
+% \bibitem{pdfspec}
+%   Adobe Systems Incorporated:
+%   \href{https://www.adobe.com/devnet/pdf/pdf_reference.html}%
+%       {\textit{PDF Reference, Version 1.7}},%
+%
+% \bibitem{mime}
+%   Network Working Group: RFC 2046, \textit{Multipurpose Internet Mail Extensions (MIME) Part Two:
+%     Media Types}, November 1996; \url{http://www.rfc-editor.org/}.
+%
+% \bibitem{types}
+%   IANA (Internet Assigned Numbers Authority):
+%   \textit{MIME Media Types}, May 2006;
+%   \url{http://www.iana.org/assignments/media-types/}.
+%
+% \end{thebibliography}
+%
+% \begin{History}
+%   \begin{Version}{2005/02/23 v2.0}
+%   \item
+%     New options: \xoption{draft}/\xoption{final}.
+%   \item
+%     New option scale for scaling the annotation rectangle.
+%   \item
+%     Supported driver options: \xoption{pdftex}, \xoption{dvips}.
+%   \item
+%     Configuration file `attachfile.cfg' supported.
+%   \item
+%     Dependency of package calc dropped.
+%   \item
+%     \eTeX\ (\cs{numexpr}, \cs{dimexpr}) used.
+%   \item
+%     New auxiliary file \cs{jobname.atfi} to get data unavailable
+%     by (pdf)\TeX, controlled by \cs{nofiles} and option nofiles.
+%   \item
+%     Use of package \xpackage{prokvopt} (never released).
+%   \end{Version}
+%   \begin{Version}{2005/10/07 v2.1}
+%   \item
+%     Option \xoption{annotname} for naming annotations
+%     (this name can be used for embedded go-to actions).
+%   \end{Version}
+%   \begin{Version}{2006/08/17 v2.2}
+%   \item
+%     Use of package \xpackage{kvoptions} instead of \xpackage{prokvopt}.
+%   \item
+%     DTX framework.
+%   \item
+%     A little documentation.
+%   \end{Version}
+%   \begin{Version}{2007/04/11 v2.3}
+%   \item
+%     Line ends sanitized.
+%   \end{Version}
+%   \begin{Version}{2008/07/29 v2.4}
+%   \item
+%     Improved color support. Option \xoption{color} now understands
+%     the usual color specifications if package \xpackage{xcolor} is
+%     loaded.
+%   \end{Version}
+%   \begin{Version}{2009/09/25 v2.5}
+%   \item
+%     New option \xoption{ucfilespec} (since PDF 1.7).
+%   \item
+%     Fix: \xpackage{hyperref}'s option \xoption{unicode} is disabled
+%     for file names except for \xoption{ucfilespec}.
+%   \end{Version}
+%   \begin{Version}{2010/09/27 v2.6}
+%   \item
+%     Support for dvipdfmx added, new option \xoption{dvipdfmx}
+%     and alias option \xoption{xetex}.
+%     (Thanks Will Robertson for pointing to |\special{pdf:fstream ...}|).
+%   \item
+%     New option \xoption{driverfallback}.
+%   \item
+%     All options except driver options are local options,
+%     that means they are ignored as global options.
+%   \item
+%     Some options are disabled after they are used
+%     (driver options, \xoption{draft}, \xoption{final}, \xoption{nofiles}).
+%   \item
+%     Driver files renamed from \texttt{atfi<driver>.def} to
+%     \texttt{atfi-<driver>.def}.
+%   \item
+%     Bug fix: \cs{textattachfile} now adds an entry into
+%     the \xext{atfi} file.
+%   \item
+%     Program \xfile{pdfatfi.pl} sets modification and creation time with
+%     time zone, because the time zone offset might differ with
+%     the file date.
+%   \end{Version}
+%   \begin{Version}{2012/04/18 v2.7}
+%   \item
+%     Program \xfile{pdfatfi.pl}: Option \xoption{version} added.
+%   \end{Version}
+%   \begin{Version}{2016/05/16 v2.8}
+%   \item
+%     Documentation updates.
+%   \end{Version}
+%   \begin{Version}{2019/07/24 v2.9}
+%   \item
+%     Added luatex driver (UF, issue 69)
+%   \end{Version}
+%   \begin{Version}{2019/11/24 v2.10}
+%   \item
+%     Fix perl header comment 
+%   \item
+%     Address perl warning \verb|Scalar value @s[7] better written as $s[7] at pdfatfi.pl line 147|
+%   \item
+%     use \CTANpkg{iftex} not \CTANpkg{ifpdf}, \CTANpkg{ifxetex}, \CTANpkg{ifluatex}.
+%   \end{Version}
+% \end{History}
+%
+% \PrintIndex
+%
+% \Finale
+\endinput


Property changes on: trunk/Master/texmf-dist/source/latex/attachfile2/attachfile2.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-dvipdfmx.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-dvipdfmx.def	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-dvipdfmx.def	2019-11-24 21:34:37 UTC (rev 52909)
@@ -0,0 +1,218 @@
+%%
+%% This is file `atfi-dvipdfmx.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% attachfile2.dtx  (with options: `dvipdfmx')
+%% 
+%% This is a generated file.
+%% 
+%% Project: attachfile2
+%% Version: 2019/11/24 v2.10
+%% 
+%% Copyright (C)
+%%    2005-2010, 2012  Heiko Oberdiek
+%%    2016-2019  Oberdiek Package Support Group
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. This version of this license is in
+%%    https://www.latex-project.org/lppl/lppl-1-3c.txt
+%% and the latest version of this license is in
+%%    https://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%% 
+%% This work has the LPPL maintenance status "maintained".
+%% 
+%% The Current Maintainers of this work are
+%% Heiko Oberdiek and the Oberdiek Package Support Group
+%% https://github.com/ho-tex/attachfile2/issues
+%% 
+%% 
+%% This work consists of the main source file attachfile2.dtx
+%% and the derived files
+%%    attachfile2.sty, attachfile2.pdf, attachfile2.ins, attachfile2.drv,
+%%    atfi-dvips.def, atfi-pdftex.def, atfi-dvipdfmx.def, atfi-luatex.def
+%%    pdfatfi.pl.
+%% 
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{atfi-dvipdfmx.def}%
+  [2019/11/24 v2.10 attachfile2 driver for dvipdfmx/XeTeX (HO)]%
+\def\atfi at special#1{%
+  \special{pdf:#1}%
+}
+\def\atfi at literal#1{%
+  \atfi at special{content #1}%
+}
+\def\atfi at GSAVE{q }
+\def\atfi at GRESTORE{Q }
+\def\atfi at SETLINEWIDTH{w }
+\def\atfi at LINETO{l }
+\def\atfi at MOVETO{m }
+\def\atfi at STROKE{S }
+\def\atfi at FILL{f }
+\def\atfi at FILLSTROKE#1#2{#1#2B }
+\def\atfi at SETRGBCOLORSTROKE{RG }
+\def\atfi at SETRGBCOLORFILL{rg }
+\def\atfi at SETGRAYSTROKE{G }
+\def\atfi at SETGRAYFILL{g }
+\def\atfi at SETCMYKCOLORSTROKE{K }
+\def\atfi at SETCMYKCOLORFILL{k }
+\def\atfi at RECTFILL{re f }
+\def\atfi at RECTSTROKEFILL#1#2#3{#1#2#3re B }
+\def\atfi at SETMITERLIMIT{M }
+\def\atfi at SETFLAT{i }
+\def\atfi at SETLINECAP{J }
+\def\atfi at CURVETO{c }
+\def\atfi at CURVETOV{v }
+\def\atfi at CURVETOY{y }
+\def\atfi at CLOSEPATH{h }
+\def\atfi at SETLINEJOIN{j }
+\newcounter{atfi at obj}
+\renewcommand*{\theatfi at obj}{%
+  @atfi_obj_\number\c at atfi@obj
+}
+\define at key{AtFi at file}{Size}{%
+  \edef\atfi at params{\atfi at params/Size #1}%
+}
+\def\atfi at embedfile#1{%
+  \ltx at IfUndefined{atfi at fileobj@#1}{%
+    \stepcounter{atfi at obj}%
+    \begingroup
+      \let\atfi at params\ltx at empty
+      \expandafter\let\expandafter\atfi at temp
+          \csname atfi at file@#1\endcsname
+      \ifx\atfi at temp\ltx at empty
+        \let\atfi at temp\relax
+      \fi
+      \ifx\atfi at temp\relax
+        \atfi at pdftexdata{#1}%
+      \else
+        \edef\x{%
+          \noexpand\setkeys{AtFi at file}{\@nameuse{atfi at file@#1}}%
+        }%
+        \x
+      \fi
+      \ifx\atfi at params\ltx at empty
+      \else
+        \edef\atfi at params{/Params<<\atfi at params>>}%
+      \fi
+      \edef\atfi at FILE{#1}%
+      \filename at parse\atfi at FILE
+      \ifx\filename at area\ltx at empty
+        \edef\atfi at FILE{./\atfi at FILE}%
+      \fi
+      \EdefEscapeString\atfi at FILE{\atfi at FILE}%
+      \atfi at special{fstream %
+        \theatfi at obj
+        (\atfi at FILE)%
+        <<%
+          /Type/EmbeddedFile%
+          \atfi at mimetype
+          \atfi at params
+        >>%
+      }%
+      \atfi at special{close \theatfi at obj}%
+      \expandafter
+      \xdef\csname atfi at fileobj@#1\endcsname{\theatfi at obj}%
+    \endgroup
+  }{%
+    % file already embedded
+  }%
+}
+\def\atfi at xform{%
+  \stepcounter{atfi at obj}%
+  \smash{%
+    \rlap{%
+      \atfi at special{bxobj \theatfi at obj\space
+        width \the\wd\atfi at appearancebox\space
+        height \the\ht\atfi at appearancebox\space
+        depth \the\dp\atfi at appearancebox
+      }%
+      \usebox\atfi at appearancebox
+      \atfi at special{exobj}%
+    }%
+  }%
+  \edef\atfi at appearanceobj{\theatfi at obj}%
+}
+\let\atfi at xform@icon\atfi at xform
+\def\atfi at refxform#1{%
+  \leavevmode
+  \atfi at special{uxobj #1}%
+}
+\def\atfi at insert@file at annot#1{%
+  \rule{0pt}{0pt}%
+  \ifatfi at appearance
+    \def\atfi at appearance@dict{%
+      /AP<<%
+        /N \atfi at appearanceobj
+        /R \atfi at appearanceobj
+        /D \atfi at appearanceobj
+      >>%
+    }%
+  \else
+    \let\atfi at appearance@dict\ltx at empty
+  \fi
+  \ltx at IfUndefined{atfi at fsobj@#1}{%
+    \begingroup
+      \ifxetex
+        \let\atfi at temp\Hy at Warning
+        \let\Hy at Warning\ltx at gobble
+      \fi
+      \hypersetup{unicode=false}%
+      \ifxetex
+        \let\Hy at Warning\atfi at temp
+      \fi
+      \atfi at pdfstringdef\atfi at file{#1}%
+      \stepcounter{atfi at obj}%
+      \atfi at special{obj \theatfi at obj <<%
+          /Type/Filespec%
+          /F(\atfi at file)%
+          \ifx\atfi at ucfilespec\ltx at empty
+          \else
+            /UF(\atfi at ucfilespec)%
+          \fi
+          /EF<<%
+            /F \@nameuse{atfi at fileobj@#1}%
+          >>%
+        >>%
+      }%
+      \expandafter\xdef\csname atfi at fsobj@#1\endcsname{%
+        \theatfi at obj
+      }%
+    \endgroup
+  }{%
+  }%
+  \begingroup
+    \dimen@=\atfi at scale\atfi at appearancewidth
+    \edef\atfi at rule{width \the\dimen@}%
+    \dimen@=\atfi at scale\atfi at appearanceheight
+    \edef\atfi at rule{\atfi at rule\space height \the\dimen@}%
+    \dimen@=\atfi at scale\atfi at appearancedepth
+    \edef\atfi at rule{\atfi at rule\space depth \the\dimen@}%
+    \atfi at special{ann \atfi at rule
+      <<%
+        /Subtype/FileAttachment%
+        \atfi at icon
+        \atfi at color@annot
+        \atfi at author
+        \atfi at date
+        \atfi at annotname
+        \atfi at description
+        \atfi at subject
+        \atfi at appearance@dict
+        /F \theatfi at flags
+        /FS \@nameuse{atfi at fsobj@#1}%
+      >>%
+    }%
+  \endgroup
+  \rule{0pt}{\atfi at appearanceheight}%
+  \rule[-\atfi at appearancedepth]{0pt}{\atfi at appearancedepth}%
+  \rule{\atfi at appearancewidth}{0pt}%
+}
+\endinput
+%%
+%% End of file `atfi-dvipdfmx.def'.


Property changes on: trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-dvipdfmx.def
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-dvips.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-dvips.def	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-dvips.def	2019-11-24 21:34:37 UTC (rev 52909)
@@ -0,0 +1,504 @@
+%%
+%% This is file `atfi-dvips.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% attachfile2.dtx  (with options: `dvips')
+%% 
+%% This is a generated file.
+%% 
+%% Project: attachfile2
+%% Version: 2019/11/24 v2.10
+%% 
+%% Copyright (C)
+%%    2005-2010, 2012  Heiko Oberdiek
+%%    2016-2019  Oberdiek Package Support Group
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. This version of this license is in
+%%    https://www.latex-project.org/lppl/lppl-1-3c.txt
+%% and the latest version of this license is in
+%%    https://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%% 
+%% This work has the LPPL maintenance status "maintained".
+%% 
+%% The Current Maintainers of this work are
+%% Heiko Oberdiek and the Oberdiek Package Support Group
+%% https://github.com/ho-tex/attachfile2/issues
+%% 
+%% 
+%% This work consists of the main source file attachfile2.dtx
+%% and the derived files
+%%    attachfile2.sty, attachfile2.pdf, attachfile2.ins, attachfile2.drv,
+%%    atfi-dvips.def, atfi-pdftex.def, atfi-dvipdfmx.def, atfi-luatex.def
+%%    pdfatfi.pl.
+%% 
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{atfi-dvips.def}%
+  [2019/11/24 v2.10 attachfile2 driver for dvips (HO)]%
+\def\atfi at literal#1{%
+  \special{ps:atfi_dict begin{#1}atfi_?pdfmark end}%
+}
+\def\atfi at header#1{%
+  \special{! #1}%
+}
+\atfi at header{%
+  userdict begin 20 dict dup /atfi_dict exch def end begin%
+    /atfi_?pdfmark systemdict %
+    dup/pdfmark known%
+    {%
+      /exec get def%
+    }{%
+      /pop get def%
+    } ifelse%
+    {%
+      %
+      % x y width height atfi_re ->
+      languagelevel 2 ge {%
+        /atfi_rectfill { rectfill } bind def%
+        /atfi_rectstroke { rectstroke } bind def%
+      }{%
+        /atfi_rect {%
+          /atfi_height exch def%
+          /atfi_width exch def%
+          /atfi_x exch def%
+          /atfi_y exch def %
+          newpath %
+          atfi_x atfi_y moveto %
+          atfi_x atfi_width add atfi_y lineto %
+          atfi_x atfi_width add atfi_y atfi_height add lineto %
+          atfi_x atfi_y atfi_height add lineto %
+          closepath%
+        } bind def%
+        /atfi_rectfill {%
+          atfi_rect fill%
+        } bind def%
+        /atfi_rectstroke {%
+          atfi_rect stroke%
+        } bind def%
+      } ifelse%
+      /atfi_curveto_v {%
+        currentpoint 6 2 roll curveto%
+      } bind def%
+      /atfi_curveto_y {%
+        2 copy curveto%
+      } bind def%
+      %
+      % help macro for atfi_convert_date
+      /atfi_two {%
+        dup 10 lt%
+        {%
+          1 string cvs %
+          exch 1 add exch%
+        }{%
+          2 string cvs%
+        } ifelse %
+        putinterval%
+      } bind def%
+      %
+      % <seconds since 1970-01-01> atfi_convert_date -> (D:...Z)
+      /atfi_convert_date {%
+        dup%
+        /atfi_days exch 3600 idiv 24 idiv def%
+        % calc date part
+        /atfi_year 1970 def%
+        {%
+          atfi_year 400 mod 0 eq %
+          atfi_year 100 mod 0 ne %
+          atfi_year 4   mod 0 eq %
+          and or%
+          {366} {365} ifelse %
+          dup atfi_days lt%
+          {%
+            atfi_days exch sub /atfi_days exch def%
+            /atfi_year atfi_year 1 add def%
+          }{%
+            exit%
+          } ifelse%
+        } loop%
+        /atfi_month 1 def%
+        /atfi_days atfi_days 1 add def %
+        31 atfi_days lt%
+        {%
+          atfi_days 31 sub /atfi_days exch def%
+          /atfi_month atfi_month 1 add def %
+          366 eq {29} {28} ifelse dup atfi_days lt%
+          {%
+            atfi_days exch sub /atfi_days exch def%
+            /atfi_month atfi_month 1 add def %
+          31 atfi_days lt%
+          {%
+            atfi_days 31 sub /atfi_days exch def%
+            /atfi_month atfi_month 1 add def %
+          30 atfi_days lt%
+          {%
+            atfi_days 30 sub /atfi_days exch def%
+            /atfi_month atfi_month 1 add def %
+            31 atfi_days lt%
+            {%
+              atfi_days 31 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def %
+            30 atfi_days lt%
+            {%
+              atfi_days 30 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def %
+            31 atfi_days lt%
+            {%
+              atfi_days 31 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def %
+            31 atfi_days lt%
+            {%
+              atfi_days 31 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def %
+            30 atfi_days lt%
+            {%
+              atfi_days 30 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def %
+            31 atfi_days lt%
+            {%
+              atfi_days 31 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def %
+            30 atfi_days lt%
+            {%
+              atfi_days 30 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def %
+            31 atfi_days lt%
+            {%
+              atfi_days 31 sub /atfi_days exch def%
+              /atfi_month atfi_month 1 add def%
+            } if%
+            } if%
+            } if%
+            } if%
+            } if%
+            } if%
+            } if%
+            } if%
+            } if%
+            } if%
+          } { pop } ifelse%
+        }{ pop } ifelse %
+        % calc time part
+        3600 24 mul mod %
+        dup 3600 idiv dup /atfi_hour exch def %
+        3600 mul sub %
+        dup 60 idiv dup /atfi_min exch def %
+        60 mul sub %
+        /atfi_sec exch def%
+        (D:19700101000000Z)%
+        dup 2  atfi_year 4 string cvs putinterval %
+        dup 6  atfi_month atfi_two %
+        dup 8  atfi_days  atfi_two %
+        dup 10 atfi_hour  atfi_two %
+        dup 12 atfi_min   atfi_two %
+        dup 14 atfi_sec   atfi_two%
+      } bind def %
+      %
+      % <filename> atfi_calc_checksum -> /CheckSum <checksum>
+      % or returns nothing, if MD5Encode is not given
+      false %
+      languagelevel 2 ge {%
+        (MD5Encode)%
+        { pop true or }%
+        (MD5Encode) length string%
+        /Filter %
+        resourceforall%
+      } if%
+      {%
+        /atfi_calc_checksum {%
+          /atfi_checksum 16 string def%
+          /atfi_file exch (r) file def%
+          /atfi_md5sum atfi_checksum /MD5Encode filter def %
+          % not too efficient to read and write byte by byte,
+          % using a buffer is probably faster
+          atfi_size {%
+            atfi_file read%
+            {%
+              atfi_md5sum exch write%
+            } if%
+          } repeat %
+          atfi_md5sum closefile %
+          atfi_file closefile%
+          /CheckSum atfi_checksum%
+        } bind def%
+      }{%
+        /atfi_calc_checksum { pop } bind def%
+      } ifelse%
+      %
+      /atfi_pttobp { 72.27 div 72 mul } bind def%
+      /atfi_pdftodvipsx { 72.27 div Resolution mul } bind def%
+      /atfi_pdftodvipsy { 72.27 div VResolution mul } bind def%
+      %
+    } atfi_?pdfmark %
+  end%
+}
+\def\atfi at GSAVE{gsave }
+\def\atfi at GRESTORE{grestore }
+\def\atfi at SETLINEWIDTH{setlinewidth }
+\def\atfi at LINETO{lineto }
+\def\atfi at MOVETO{moveto }
+\def\atfi at STROKE{stroke }
+\def\atfi at FILL{fill }
+\def\atfi at FILLSTROKE#1#2{gsave #1 fill grestore #2 stroke }
+\def\atfi at SETRGBCOLORSTROKE{setrgbcolor }
+\def\atfi at SETRGBCOLORFILL{setrgbcolor }
+\def\atfi at SETGRAYSTROKE{setgray }
+\def\atfi at SETGRAYFILL{setgray }
+\def\atfi at SETCMYKCOLORSTROKE{setcmykcolor }
+\def\atfi at SETCMYKCOLORFILL{setcmykcolor }
+\def\atfi at RECTFILL{atfi_rectfill }
+\def\atfi at RECTSTROKEFILL#1#2#3{%
+  #3%
+  #1%
+  gsave atfi_rectfill grestore %
+  #2%
+  #3%
+  atfi_rectstroke %
+  #1%
+}
+\def\atfi at SETMITERLIMIT{setmiterlimit }
+\def\atfi at SETFLAT{setflat }
+\def\atfi at SETLINECAP{setlinecap }
+\def\atfi at CURVETO{curveto }
+\def\atfi at CURVETOV{atfi_curveto_v }
+\def\atfi at CURVETOY{atfi_curveto_y }
+\def\atfi at CLOSEPATH{closepath }
+\def\atfi at SETLINEJOIN{setlinejoin }
+\newcounter{atfi at obj}
+\renewcommand*{\theatfi at obj}{%
+  {atfi_obj_\number\c at atfi@obj}%
+}
+\define at key{AtFi at file}{Size}{}
+\def\atfi at embedfile#1{%
+  \ltx at IfUndefined{atfi at fileobj@#1}{%
+    \atfi at pdfstringdef\atfi at psfilename{#1}%
+    \stepcounter{atfi at obj}%
+    \expandafter\xdef\csname atfi at fileobj@#1\endcsname{\theatfi at obj}%
+    \begingroup
+      \let\atfi at params\ltx at empty
+      \expandafter\let\expandafter\atfi at temp
+          \csname atfi at file@#1\endcsname
+      \ifx\atfi at temp\ltx at empty
+        \let\atfi at temp\relax
+      \fi
+      \ifx\atfi at temp\relax
+        \atfi at pdftexdata{#1}%
+      \else
+        \edef\x{%
+          \noexpand\setkeys{AtFi at file}{\@nameuse{atfi at file@#1}}%
+        }%
+        \x
+      \fi
+      \atfi at literal{%
+        /atfi_filename(\atfi at psfilename)def %
+        atfi_filename status%
+        {%
+          /atfi_created exch def%
+          /atfi_referenced exch def%
+          /atfi_size exch def %
+          pop %
+          [%
+            /_objdef \theatfi at obj
+            /type/stream%
+          /OBJ pdfmark%
+          [%
+            \theatfi at obj
+            <<%
+              /Type/EmbeddedFile%
+              \atfi at mimetype
+              /Params%
+              <<%
+                \atfi at params
+                %
+                /Size atfi_size%
+                %
+                /product where%
+                {%
+                  pop %
+                  product (Ghostscript) search%
+                  {%
+                    pop pop pop %
+                    \ifatfi at creationdate
+                    \else
+                      false % TODO: test for windows
+                      {%
+                        /CreationDate atfi_created atfi_convert_date%
+                      } if%
+                    \fi
+                    \ifatfi at moddate
+                    \else
+                      /ModDate atfi_referenced atfi_convert_date%
+                    \fi
+                  } if%
+                } if %
+                \ifatfi at checksum
+                \else
+                  atfi_filename atfi_calc_checksum%
+                \fi
+              >>%
+            >>%
+          /PUT pdfmark%
+          [%
+            \theatfi at obj
+            atfi_filename (r) file%
+          /PUT pdfmark%
+          [%
+            \theatfi at obj
+          /CLOSE pdfmark%
+        }{%
+        } ifelse%
+      }%
+    \endgroup
+  }{%
+  }%
+}
+\def\atfi at xform@icon{%
+  \stepcounter{atfi at obj}%
+  \edef\atfi at appearanceobj{\theatfi at obj}%
+  \atfi at literal{%
+    [%
+      /_objdef \atfi at appearanceobj
+      /BBox[%
+        0 %
+        0 %
+        \strip at pt\wd\atfi at appearancebox\space atfi_pttobp %
+        \strip at pt\dimexpr\dp\atfi at appearancebox
+            +\ht\atfi at appearancebox\relax\space atfi_pttobp%
+      ]%
+    /BP pdfmark %
+    \csname atfi at acro\atfi at icon@icon @data\endcsname
+    [%
+    /EP pdfmark%
+  }%
+}
+\def\atfi at xform{%
+  \stepcounter{atfi at obj}%
+  \edef\atfi at appearanceobj{\theatfi at obj}%
+  \begingroup
+    \setbox\ltx at zero=\hbox{%
+      \atfi at literal{%
+        [%
+          /_objdef \atfi at appearanceobj
+          /BBox[%
+            currentpoint %
+              \strip at pt\dp\atfi at appearancebox\space sub %
+            currentpoint %
+              exch \strip at pt\wd\atfi at appearancebox\space add %
+              exch \strip at pt\ht\atfi at appearancebox\space add%
+          ]%
+        /BP pdfmark %
+        gsave %
+        currentpoint %
+        2 copy translate %
+        72.27 Resolution div 72.27 VResolution div neg scale %
+        exch neg exch neg translate%
+      }%
+      \usebox{\atfi at appearancebox}%
+      \atfi at literal{%
+        grestore%
+        [%
+        /EP pdfmark%
+      }%
+    }%
+    % do not allocate any space for xobject definition
+    \dp\ltx at zero=\z@
+    \ht\ltx at zero=\z@
+    \wd\ltx at zero=\z@
+    \mbox{\usebox\ltx at zero}%
+  \endgroup
+}
+\def\atfi at refxform#1{%
+  \raisebox{-\atfi at appearancedepth}{%
+    \atfi at literal{%
+      gsave %
+        currentpoint translate %
+        Resolution 72 div VResolution neg 72 div scale%
+        [#1 /SP pdfmark % hash-ok
+      grestore%
+    }%
+    \makebox[\atfi at appearancewidth]{}%
+  }%
+  \rule{0pt}{\atfi at appearanceheight}%
+}
+\def\atfi at insert@file at annot#1{%
+  \rule{0pt}{0pt}%
+  \ifatfi at appearance
+    \def\atfi at appearance@dict{%
+      /AP<<%
+        /N \atfi at appearanceobj
+        /R \atfi at appearanceobj
+        /D \atfi at appearanceobj
+      >>%
+    }%
+  \else
+    \let\atfi at appearance@dict\ltx at empty
+  \fi
+  \ltx at IfUndefined{atfi at fsobj@#1}{%
+    \stepcounter{atfi at obj}%
+    \expandafter
+    \xdef\csname atfi at fsobj@#1\endcsname{\theatfi at obj}%
+    \begingroup
+      \hypersetup{unicode=false}%
+      \atfi at pdfstringdef\atfi at file{#1}%
+      \atfi at literal{%
+        [%
+          /_objdef \theatfi at obj
+          /type/dict%
+        /OBJ pdfmark%
+        [%
+          \theatfi at obj
+          <<%
+            /Type/Filespec%
+            /F(\atfi at file)%
+            \ifx\atfi at ucfilespec\ltx at empty
+            \else
+              /UF(\atfi at ucfilespec)%
+            \fi
+            /EF<<%
+              /F \csname atfi at fileobj@#1\endcsname
+            >>%
+          >>%
+        /PUT pdfmark%
+      }%
+    \endgroup
+  }{%
+  }%
+  \atfi at literal{%
+    [%
+      /Subtype/FileAttachment%
+      \atfi at icon
+      \atfi at color@annot
+      \atfi at author
+      \atfi at date
+      \atfi at annotname
+      \atfi at description
+      \atfi at subject
+      \atfi at appearance@dict
+      /F \theatfi at flags
+      /FS \csname atfi at fsobj@#1\endcsname
+      /Rect[%
+        currentpoint %
+          \strip at pt\dimexpr\atfi at scale\atfi at appearancedepth\relax
+            \space atfi_pdftodvipsy add %
+        currentpoint %
+          exch %
+            \strip at pt\dimexpr\atfi at scale\atfi at appearancewidth\relax
+            \space atfi_pdftodvipsx add %
+          exch %
+            \strip at pt\dimexpr\atfi at scale\atfi at appearanceheight\relax
+            \space atfi_pdftodvipsy sub %
+      ]%
+    /ANN pdfmark%
+  }%
+  \rule{0pt}{\atfi at appearanceheight}%
+  \rule[-\atfi at appearancedepth]{0pt}{\atfi at appearancedepth}%
+  \rule{\atfi at appearancewidth}{0pt}%
+}
+\endinput
+%%
+%% End of file `atfi-dvips.def'.


Property changes on: trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-dvips.def
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-luatex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-luatex.def	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-luatex.def	2019-11-24 21:34:37 UTC (rev 52909)
@@ -0,0 +1,170 @@
+%%
+%% This is file `atfi-luatex.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% attachfile2.dtx  (with options: `luatex')
+%% 
+%% This is a generated file.
+%% 
+%% Project: attachfile2
+%% Version: 2019/11/24 v2.10
+%% 
+%% Copyright (C)
+%%    2005-2010, 2012  Heiko Oberdiek
+%%    2016-2019  Oberdiek Package Support Group
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. This version of this license is in
+%%    https://www.latex-project.org/lppl/lppl-1-3c.txt
+%% and the latest version of this license is in
+%%    https://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%% 
+%% This work has the LPPL maintenance status "maintained".
+%% 
+%% The Current Maintainers of this work are
+%% Heiko Oberdiek and the Oberdiek Package Support Group
+%% https://github.com/ho-tex/attachfile2/issues
+%% 
+%% 
+%% This work consists of the main source file attachfile2.dtx
+%% and the derived files
+%%    attachfile2.sty, attachfile2.pdf, attachfile2.ins, attachfile2.drv,
+%%    atfi-dvips.def, atfi-pdftex.def, atfi-dvipdfmx.def, atfi-luatex.def
+%%    pdfatfi.pl.
+%% 
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{atfi-luatex.def}%
+  [2019/11/24 v2.10 attachfile2 driver for luaTeX (HO)]%
+\protected\def\atfi at literal        {\pdfextension literal}
+\def\atfi at GSAVE{q }
+\def\atfi at GRESTORE{Q }
+\def\atfi at SETLINEWIDTH{w }
+\def\atfi at LINETO{l }
+\def\atfi at MOVETO{m }
+\def\atfi at STROKE{S }
+\def\atfi at FILL{f }
+\def\atfi at FILLSTROKE#1#2{#1#2B }
+\def\atfi at SETRGBCOLORSTROKE{RG }
+\def\atfi at SETRGBCOLORFILL{rg }
+\def\atfi at SETGRAYSTROKE{G }
+\def\atfi at SETGRAYFILL{g }
+\def\atfi at SETCMYKCOLORSTROKE{K }
+\def\atfi at SETCMYKCOLORFILL{k }
+\def\atfi at RECTFILL{re f }
+\def\atfi at RECTSTROKEFILL#1#2#3{#1#2#3re B }
+\def\atfi at SETMITERLIMIT{M }
+\def\atfi at SETFLAT{i }
+\def\atfi at SETLINECAP{J }
+\def\atfi at CURVETO{c }
+\def\atfi at CURVETOV{v }
+\def\atfi at CURVETOY{y }
+\def\atfi at CLOSEPATH{h }
+\def\atfi at SETLINEJOIN{j }
+\define at key{AtFi at file}{Size}{%
+  \edef\atfi at params{\atfi at params/Size #1}%
+}
+\def\atfi at embedfile#1{%
+  \ltx at IfUndefined{atfi at fileobj@#1}{%
+    \begingroup
+      \let\atfi at params\ltx at empty
+      \expandafter\let\expandafter\atfi at temp
+          \csname atfi at file@#1\endcsname
+      \ifx\atfi at temp\ltx at empty
+        \let\atfi at temp\relax
+      \fi
+      \ifx\atfi at temp\relax
+        \atfi at pdftexdata{#1}%
+      \else
+        \edef\x{%
+          \noexpand\setkeys{AtFi at file}{\@nameuse{atfi at file@#1}}%
+        }%
+        \x
+      \fi
+      \ifx\atfi at params\ltx at empty
+      \else
+        \edef\atfi at params{/Params<<\atfi at params>>}%
+      \fi
+      \immediate\pdfextension obj stream attr {%
+        /Type/EmbeddedFile%
+        \atfi at mimetype
+        \atfi at params
+      } file {#1}%
+      \expandafter
+      \xdef\csname atfi at fileobj@#1\endcsname{\the\numexpr\pdffeedback lastobj\relax}%
+    \endgroup
+  }{%
+    % file already embedded
+  }%
+}
+\def\atfi at xform{%
+  \immediate\saveboxresource\atfi at appearancebox
+  \edef\atfi at appearanceobj{\the\lastsavedboxresourceindex}%
+}
+\let\atfi at xform@icon\atfi at xform
+\def\atfi at refxform#1{%
+  \useboxresource#1\relax
+}
+\def\atfi at insert@file at annot#1{%
+  \rule{0pt}{0pt}%
+  \ifatfi at appearance
+    \def\atfi at appearance@dict{%
+      /AP<<%
+        /N \atfi at appearanceobj\space 0 R%
+        /R \atfi at appearanceobj\space 0 R%
+        /D \atfi at appearanceobj\space 0 R%
+      >>%
+    }%
+  \else
+    \let\atfi at appearance@dict\ltx at empty
+  \fi
+  \ltx at IfUndefined{atfi at fsobj@#1}{%
+    \begingroup
+      \hypersetup{unicode=false}%
+      \atfi at pdfstringdef\atfi at file{#1}%
+      \immediate\pdfextension obj{%
+        <<%
+          /Type/Filespec%
+          /F(\atfi at file)%
+          \ifx\atfi at ucfilespec\ltx at empty
+          \else
+            /UF(\atfi at ucfilespec)%
+          \fi
+          /EF<<%
+            /F \@nameuse{atfi at fileobj@#1} 0 R%
+          >>%
+        >>%
+      }%
+      \expandafter\xdef\csname atfi at fsobj@#1\endcsname{%
+        \the\numexpr\pdffeedback lastobj\relax
+      }%
+    \endgroup
+  }{%
+  }%
+  \pdfextension annot width \atfi at scale\atfi at appearancewidth
+                      height \atfi at scale\atfi at appearanceheight
+                      depth \atfi at scale\atfi at appearancedepth {%
+    /Subtype/FileAttachment%
+    \atfi at icon
+    \atfi at color@annot
+    \atfi at author
+    \atfi at date
+    \atfi at annotname
+    \atfi at description
+    \atfi at subject
+    \atfi at appearance@dict
+    /F \theatfi at flags
+    /FS \@nameuse{atfi at fsobj@#1} 0 R%
+  }%
+  \rule{0pt}{\atfi at appearanceheight}%
+  \rule[-\atfi at appearancedepth]{0pt}{\atfi at appearancedepth}%
+  \rule{\atfi at appearancewidth}{0pt}%
+}
+\endinput
+%%
+%% End of file `atfi-luatex.def'.


Property changes on: trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-luatex.def
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-pdftex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-pdftex.def	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-pdftex.def	2019-11-24 21:34:37 UTC (rev 52909)
@@ -0,0 +1,170 @@
+%%
+%% This is file `atfi-pdftex.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% attachfile2.dtx  (with options: `pdftex')
+%% 
+%% This is a generated file.
+%% 
+%% Project: attachfile2
+%% Version: 2019/11/24 v2.10
+%% 
+%% Copyright (C)
+%%    2005-2010, 2012  Heiko Oberdiek
+%%    2016-2019  Oberdiek Package Support Group
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. This version of this license is in
+%%    https://www.latex-project.org/lppl/lppl-1-3c.txt
+%% and the latest version of this license is in
+%%    https://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%% 
+%% This work has the LPPL maintenance status "maintained".
+%% 
+%% The Current Maintainers of this work are
+%% Heiko Oberdiek and the Oberdiek Package Support Group
+%% https://github.com/ho-tex/attachfile2/issues
+%% 
+%% 
+%% This work consists of the main source file attachfile2.dtx
+%% and the derived files
+%%    attachfile2.sty, attachfile2.pdf, attachfile2.ins, attachfile2.drv,
+%%    atfi-dvips.def, atfi-pdftex.def, atfi-dvipdfmx.def, atfi-luatex.def
+%%    pdfatfi.pl.
+%% 
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{atfi-pdftex.def}%
+  [2019/11/24 v2.10 attachfile2 driver for pdfTeX (HO)]%
+\let\atfi at literal\pdfliteral
+\def\atfi at GSAVE{q }
+\def\atfi at GRESTORE{Q }
+\def\atfi at SETLINEWIDTH{w }
+\def\atfi at LINETO{l }
+\def\atfi at MOVETO{m }
+\def\atfi at STROKE{S }
+\def\atfi at FILL{f }
+\def\atfi at FILLSTROKE#1#2{#1#2B }
+\def\atfi at SETRGBCOLORSTROKE{RG }
+\def\atfi at SETRGBCOLORFILL{rg }
+\def\atfi at SETGRAYSTROKE{G }
+\def\atfi at SETGRAYFILL{g }
+\def\atfi at SETCMYKCOLORSTROKE{K }
+\def\atfi at SETCMYKCOLORFILL{k }
+\def\atfi at RECTFILL{re f }
+\def\atfi at RECTSTROKEFILL#1#2#3{#1#2#3re B }
+\def\atfi at SETMITERLIMIT{M }
+\def\atfi at SETFLAT{i }
+\def\atfi at SETLINECAP{J }
+\def\atfi at CURVETO{c }
+\def\atfi at CURVETOV{v }
+\def\atfi at CURVETOY{y }
+\def\atfi at CLOSEPATH{h }
+\def\atfi at SETLINEJOIN{j }
+\define at key{AtFi at file}{Size}{%
+  \edef\atfi at params{\atfi at params/Size #1}%
+}
+\def\atfi at embedfile#1{%
+  \ltx at IfUndefined{atfi at fileobj@#1}{%
+    \begingroup
+      \let\atfi at params\ltx at empty
+      \expandafter\let\expandafter\atfi at temp
+          \csname atfi at file@#1\endcsname
+      \ifx\atfi at temp\ltx at empty
+        \let\atfi at temp\relax
+      \fi
+      \ifx\atfi at temp\relax
+        \atfi at pdftexdata{#1}%
+      \else
+        \edef\x{%
+          \noexpand\setkeys{AtFi at file}{\@nameuse{atfi at file@#1}}%
+        }%
+        \x
+      \fi
+      \ifx\atfi at params\ltx at empty
+      \else
+        \edef\atfi at params{/Params<<\atfi at params>>}%
+      \fi
+      \immediate\pdfobj stream attr {%
+        /Type/EmbeddedFile%
+        \atfi at mimetype
+        \atfi at params
+      } file {#1}%
+      \expandafter
+      \xdef\csname atfi at fileobj@#1\endcsname{\the\pdflastobj}%
+    \endgroup
+  }{%
+    % file already embedded
+  }%
+}
+\def\atfi at xform{%
+  \immediate\pdfxform\atfi at appearancebox
+  \edef\atfi at appearanceobj{\the\pdflastxform}%
+}
+\let\atfi at xform@icon\atfi at xform
+\def\atfi at refxform#1{%
+  \pdfrefxform#1\relax
+}
+\def\atfi at insert@file at annot#1{%
+  \rule{0pt}{0pt}%
+  \ifatfi at appearance
+    \def\atfi at appearance@dict{%
+      /AP<<%
+        /N \atfi at appearanceobj\space 0 R%
+        /R \atfi at appearanceobj\space 0 R%
+        /D \atfi at appearanceobj\space 0 R%
+      >>%
+    }%
+  \else
+    \let\atfi at appearance@dict\ltx at empty
+  \fi
+  \ltx at IfUndefined{atfi at fsobj@#1}{%
+    \begingroup
+      \hypersetup{unicode=false}%
+      \atfi at pdfstringdef\atfi at file{#1}%
+      \immediate\pdfobj{%
+        <<%
+          /Type/Filespec%
+          /F(\atfi at file)%
+          \ifx\atfi at ucfilespec\ltx at empty
+          \else
+            /UF(\atfi at ucfilespec)%
+          \fi
+          /EF<<%
+            /F \@nameuse{atfi at fileobj@#1} 0 R%
+          >>%
+        >>%
+      }%
+      \expandafter\xdef\csname atfi at fsobj@#1\endcsname{%
+        \the\pdflastobj
+      }%
+    \endgroup
+  }{%
+  }%
+  \pdfannot width \atfi at scale\atfi at appearancewidth
+            height \atfi at scale\atfi at appearanceheight
+            depth \atfi at scale\atfi at appearancedepth {%
+    /Subtype/FileAttachment%
+    \atfi at icon
+    \atfi at color@annot
+    \atfi at author
+    \atfi at date
+    \atfi at annotname
+    \atfi at description
+    \atfi at subject
+    \atfi at appearance@dict
+    /F \theatfi at flags
+    /FS \@nameuse{atfi at fsobj@#1} 0 R%
+  }%
+  \rule{0pt}{\atfi at appearanceheight}%
+  \rule[-\atfi at appearancedepth]{0pt}{\atfi at appearancedepth}%
+  \rule{\atfi at appearancewidth}{0pt}%
+}
+\endinput
+%%
+%% End of file `atfi-pdftex.def'.


Property changes on: trunk/Master/texmf-dist/tex/latex/attachfile2/atfi-pdftex.def
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/attachfile2/attachfile2.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/attachfile2/attachfile2.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/attachfile2/attachfile2.sty	2019-11-24 21:34:37 UTC (rev 52909)
@@ -0,0 +1,819 @@
+%%
+%% This is file `attachfile2.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% attachfile2.dtx  (with options: `package')
+%% 
+%% This is a generated file.
+%% 
+%% Project: attachfile2
+%% Version: 2019/11/24 v2.10
+%% 
+%% Copyright (C)
+%%    2005-2010, 2012  Heiko Oberdiek
+%%    2016-2019  Oberdiek Package Support Group
+%% 
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. This version of this license is in
+%%    https://www.latex-project.org/lppl/lppl-1-3c.txt
+%% and the latest version of this license is in
+%%    https://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%% 
+%% This work has the LPPL maintenance status "maintained".
+%% 
+%% The Current Maintainers of this work are
+%% Heiko Oberdiek and the Oberdiek Package Support Group
+%% https://github.com/ho-tex/attachfile2/issues
+%% 
+%% 
+%% This work consists of the main source file attachfile2.dtx
+%% and the derived files
+%%    attachfile2.sty, attachfile2.pdf, attachfile2.ins, attachfile2.drv,
+%%    atfi-dvips.def, atfi-pdftex.def, atfi-dvipdfmx.def, atfi-luatex.def
+%%    pdfatfi.pl.
+%% 
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{attachfile2}%
+  [2019/11/24 v2.10 Attach files into PDF (HO)]%
+\RequirePackage{iftex}[2019/11/07]
+\RequirePackage{keyval}
+\RequirePackage{color}
+\RequirePackage{infwarerr}[2010/04/08]
+\RequirePackage{ltxcmds}[2010/04/26]
+\RequirePackage{kvoptions}[2009/07/21]
+\RequirePackage{pdftexcmds}[2010/04/01]
+\RequirePackage{pdfescape}[2007/11/11]
+\RequirePackage{hyperref}
+\RequirePackage{hycolor}[2008/07/29]
+\ltx at IfUndefined{pdfmatch}{%
+  \def\atfi at Match#1#2#3#4#5{}%
+}{%
+  \def\atfi at Match#1#2#3{%
+    \begingroup
+    \edef\^{\ltx at backslashchar\string^}%
+    \edef\.{\ltx at backslashchar.}%
+    \let\#\ltx at hashchar
+    \edef\[{\ltx at backslashchar[}% ]]
+    \edef\${\ltx at backslashchar$}%
+    \let\%\ltx at percentchar
+    \edef\&{\string&}%
+    \edef\({\ltx at backslashchar(}%
+    \edef\){\ltx at backslashchar)}%
+    \edef\|{\ltx at backslashchar|}%
+    \edef\*{\ltx at backslashchar*}%
+    \edef\+{\ltx at backslashchar+}%
+    \edef\?{\ltx at backslashchar?}%
+    \edef\{{\ltx at backslashchar\ltx at leftbracechar}%
+    \edef\}{\ltx at rightbracechar}%
+    \edef\\{\ltx at backslashchar\ltx at backslashchar}%
+    \edef\~{\string~}%
+    \ifcase\pdfmatch#3{#2}{#1} %
+      \endgroup
+      \expandafter\ltx at secondoftwo
+    \or
+      \endgroup
+      \expandafter\ltx at firstoftwo
+    \else
+      \atfi at Warning{%
+        Internal error: Wrong pattern!\MessageBreak
+        --> #2 <--\MessageBreak
+        Pattern check ignored%
+      }%
+      \endgroup
+      \expandafter\ltx at firstoftwo
+    \fi
+  }%
+  \def\atfi at PatToken{%
+    [%
+      -% first character
+      !%
+      \#$\%\&'%
+      \*\+\.%
+      0-9%
+      A-Z%
+      \^_`%
+      a-z%
+      \{\}\|\~%
+    ]+%
+  }%
+  \begingroup
+    \lccode64=13 % @
+  \lowercase{\endgroup
+    \def\atfi at CR{@}%
+  }%
+  \def\atfi at PatQuotedString{%
+    "%
+    ([^"\\\atfi at CR]|\\.)*%
+    "%
+  }%
+  \ltx at ifpackagelater{ltxcmds}{2010/09/11}{}{%
+    \begingroup
+      \lccode`0=`\{\relax
+    \lowercase{\endgroup
+      \def\ltx at leftbracechar{0}%
+    }%
+    \begingroup
+      \lccode`0=`\}\relax
+    \lowercase{\endgroup
+      \def\ltx at rightbracechar{0}%
+    }%
+  }%
+}
+\def\atfi at Warning{\PackageWarning{attachfile2}}
+\SetupKeyvalOptions{%
+  family=AtFi,%
+  prefix=atfi@%
+}
+\def\atfi at setup{\setkeys{AtFi}}
+\DeclareBoolOption{draft}
+\DeclareComplementaryOption{final}{draft}
+\def\atfi at mimetype{}
+\define at key{AtFi}{mimetype}{%
+  \edef\atfi at mimetype{#1}%
+  \ifx\atfi at mimetype\ltx at empty
+  \else
+    \atfi at Match\atfi at mimetype{%
+      ^(application|audio|image|model|text|video|x-\atfi at PatToken)%
+      /%
+      ([a-z\-\+_\.0-9]+)%
+      (; ?\atfi at PatToken=(\atfi at PatToken|\atfi at PatQuotedString))*$%
+    }{icase}{}{%
+      \atfi at Warning{%
+        Invalid value `\atfi at mimetype'\MessageBreak
+        of option `mimetype'.\MessageBreak
+        Value is discarded%
+      }%
+      \let\atfi at mimetype\ltx at empty
+    }%
+  \fi
+  \ifx\atfi at mimetype\ltx at empty
+  \else
+    \EdefEscapeName\atfi at mimetype{\atfi at mimetype}%
+    \edef\atfi at mimetype{/Subtype/\atfi at mimetype}%
+  \fi
+}
+\define at key{AtFi}{icon}{%
+  \def\atfi at icon{/Name/#1}%
+  \def\atfi at icon@icon{#1}%
+}
+\atfi at setup{icon=PushPin}
+\define at key{AtFi}{color}{%
+  \HyColor at AttachfileColor{#1}%
+          \atfi at color@tex\atfi at color@inline\atfi at color@annot
+          {attachfile2}{color}%
+}
+\atfi at setup{color=1 0.9255 0.7765}
+\def\atfi at pad@ii#1{%
+  \ifnum#1>9 %
+    \number#1%
+  \else
+    0\number#1%
+  \fi%
+}
+\let\atfi at timezone\ltx at empty
+\define at key{AtFi}{timezone}{\def\atfi at timezone{#1}}
+\edef\atfi at time{\the\time}
+\def\atfi at hours{%
+  \numexpr\dimexpr0.01667\dimexpr\atfi at time sp\relax\relax\relax
+}
+\def\atfi at minutes{%
+  \numexpr\atfi at time-60*\atfi at hours\relax
+}
+\def\atfi at seconds{0}
+\def\atfi at date{%
+  /M(D:\the\year
+      \atfi at pad@ii\month
+      \atfi at pad@ii\day
+      \atfi at pad@ii\atfi at hours
+      \atfi at pad@ii\atfi at minutes
+      \atfi at pad@ii\atfi at seconds
+      \atfi at timezone)%
+}
+\define at key{AtFi}{date}{%
+  \EdefEscapeString\atfi at date{#1}%
+  \edef\atfi at date{/M(\atfi at date)}%
+}
+\DeclareRobustCommand{\atfi at pdfstringdef}[2]{%
+  \pdfstringdef\atfi at temp@string{#2}%
+  \edef#1{\atfi at temp@string}%
+}
+\def\atfi at NoValue{\NoValue}
+\def\atfi at DefNoValueName#1#2#3{%
+  \def#1{#3}%
+  \ifx#1\atfi at NoValue
+    \let#1\ltx at empty
+  \else
+    \atfi at pdfstringdef#1{#1}%
+    \edef#1{/#2(#1)}%
+  \fi
+}
+\let\atfi at annotname\ltx at empty
+\define at key{AtFi}{annotname}[\NoValue]{%
+  \atfi at DefNoValueName\atfi at annotname{NM}{#1}%
+}
+\def\atfi at author{}
+\define at key{AtFi}{author}[\NoValue]{%
+  \atfi at DefNoValueName\atfi at author{T}{#1}%
+}
+\def\atfi at description{}
+\define at key{AtFi}{description}[\NoValue]{%
+  \atfi at DefNoValueName\atfi at description{Contents}{#1}%
+}
+\def\atfi at subject{}
+\define at key{AtFi}{subject}[\NoValue]{%
+  \atfi at DefNoValueName\atfi at subject{Subj}{#1}%
+}
+\DeclareBoolOption[true]{print}
+\DeclareBoolOption[true]{zoom}
+\DeclareBoolOption[true]{appearance}
+\DeclareStringOption[1]{scale}
+\def\atfi at ucfilespec{}
+\define at key{AtFi}{ucfilespec}[1]{%
+  \def\atfi at ucfilespec{#1}%
+  \ifx\atfi at ucfilespec\ltx at empty
+  \else
+    \atfi at pdfstringdef\atfi at ucfilespec{#1}%
+  \fi
+}
+\DeclareBoolOption{nofiles}
+\let\atfi at driver\ltx at empty
+\def\atfi at driver@pdftex{pdftex}
+\def\atfi at driver@luatex{luatex}
+\def\atfi at driver@dvips{dvips}
+\def\atfi at driver@dvipdfmx{dvipdfmx}
+\DeclareVoidOption{pdftex}{%
+ \ifpdf
+  \let\atfi at driver\atfi at driver@pdftex
+ \else
+   \let\atfi at driver\ltx at empty
+    \PackageError{attachfile2}{%
+      Wrong driver option `pdftex',\MessageBreak
+      because pdfTeX in PDF mode is not detected%
+    }\@ehc
+ \fi
+}
+\DeclareVoidOption{luatex}{%
+  \let\atfi at driver\atfi at driver@luatex
+}
+\DeclareVoidOption{dvips}{%
+  \let\atfi at driver\atfi at driver@dvips
+}
+\DeclareVoidOption{dvipdfmx}{%
+  \let\atfi at driver\atfi at driver@dvipdfmx
+}
+\DeclareVoidOption{xetex}{%
+  \let\atfi at driver\atfi at driver@dvipdfmx
+}
+\DeclareStringOption{driverfallback}
+\DeclareRobustCommand{\attachfilesetup}[1]{\setkeys{AtFi}{#1}}
+\DeclareLocalOptions{%
+  annotname,%
+  appearance,%
+  author,%
+  color,%
+  date,%
+  description,%
+  icon,%
+  mimetype,%
+  nofiles,%
+  print,%
+  scale,%
+  subject,%
+  timezone,%
+  ucfilespec,%
+  zoom,%
+}
+\InputIfFileExists{attachfile.cfg}{}{}
+\ProcessKeyvalOptions*
+\def\atfi at DisableOption{%
+  \DisableKeyvalOption[action=error,package=attachfile2]{AtFi}%
+}
+\ifpdf
+ \ifluatex
+  \let\atfi at driver\atfi at driver@luatex
+ \else
+  \let\atfi at driver\atfi at driver@pdftex
+ \fi
+\else
+ \ifxetex
+    \let\atfi at driver\atfi at driver@dvipdfmx
+  \else
+    \ifx\atfi at driver\ltx at empty
+      \ifx\atfi at driverfallback\ltx at empty
+      \else
+        \expandafter\let\expandafter\atfi at driver
+            \csname atfi at driver@\atfi at driverfallback\endcsname
+        \ifx\atfi at driver\atfi at driver@dvips
+        \else
+          \ifx\atfi at driver\atfi at driver@dvipdfmx
+          \else
+             \let\atfi at driver\ltx at empty
+             \PackageWarningNoLine{attachfile2}{%
+               Option `driverfallback' with unsupported\MessageBreak
+               DVI driver (\atfi at driverfallback)%
+             }%
+          \fi
+        \fi
+      \fi
+      \ifx\atfi at driver\ltx at empty
+        \PackageWarningNoLine{attachfile2}{%
+          Driver is not specified,\MessageBreak
+          enforce draft settings%
+        }%
+        \atfi at drafttrue
+      \fi
+    \fi
+  \fi
+\fi
+\atfi at DisableOption{pdftex}
+\atfi at DisableOption{dvips}
+\atfi at DisableOption{dvipdfmx}
+\atfi at DisableOption{xetex}
+\atfi at DisableOption{driverfallback}
+\DeclareRobustCommand{\notextattachfile}[2][]{%
+  \begingroup
+    \atfi at setup{#1}%
+    \ifatfi at print
+      \leavevmode
+      \begingroup
+        \HyColor at UseColor\atfi at color@tex
+        #2\strut
+      \endgroup
+    \else
+      \sbox\ltx at zero{#2\strut}%
+      \makebox[\wd0]{}%
+    \fi
+  \endgroup
+}
+\atfi at DisableOption{draft}%
+\atfi at DisableOption{final}%
+\ifatfi at draft
+  \def\atfi at dummy@pushpin{%
+    \raisebox{-1.25bp}{\parbox[b][14bp]{24bp}{}}%
+  }%
+  \DeclareRobustCommand{\textattachfile}[3][]{%
+    \notextattachfile[{#1}]{#3}%
+  }%
+  \DeclareRobustCommand{\noattachfile}[1][]{%
+    \notextattachfile[{#1}]{\atfi at dummy@pushpin}%
+  }%
+  \DeclareRobustCommand{\attachfile}[2][]{%
+    \noattachfile[{#1}]%
+  }%
+   \expandafter\endinput
+\fi
+\input{atfi-\atfi at driver.def}
+\def\atfi at acroGraph@data{%
+  \atfi at GSAVE
+  0.5 \atfi at SETGRAYFILL
+  1.1133 0 20.7202 18.2754 \atfi at RECTFILL
+  0 \atfi at SETFLAT
+  0.5 \atfi at SETLINEWIDTH
+  4 \atfi at SETMITERLIMIT
+  \atfi at RECTSTROKEFILL{%
+    1 \atfi at SETGRAYFILL
+  }{%
+    0 \atfi at SETGRAYSTROKE
+  }{%
+    0.25 1.6453 20.145 17.7715 %
+  }%
+  0 \atfi at SETGRAYFILL
+  2.7319 4.1367 3.9571 13.8867 \atfi at RECTFILL
+  8.7031 4.1367 3.9571 9.8867 \atfi at RECTFILL
+  14.7471 4.1367 3.9571 11.8867 \atfi at RECTFILL
+  \atfi at color@inline{FILL}%
+  1.689 3.0938 3.9571 13.8867 \atfi at RECTFILL
+  7.6602 3.0938 3.9571 9.8867 \atfi at RECTFILL
+  13.7041 3.0938 3.9571 11.8867 \atfi at RECTFILL
+  \atfi at GRESTORE
+}
+\def\atfi at acroGraph{%
+  \raisebox{-1.5bp}{\parbox[b][20bp]{22bp}{%
+    \rule{0pt}{0pt}\atfi at literal{\atfi at acroGraph@data}}%
+  }%
+}
+\newcommand{\atfi at acroPaperclip@data}{%
+  \atfi at GSAVE
+  0.75 \atfi at SETGRAYSTROKE
+  0 \atfi at SETFLAT
+  2.5 \atfi at SETLINEWIDTH
+  1 \atfi at SETLINECAP
+  4 \atfi at SETMITERLIMIT
+  1.9619 11.7559 \atfi at MOVETO
+  1.9619 3.3037 1.9619 2.5059 \atfi at CURVETOV
+  1.9619 1.707 4.0947 1.25 \atfi at CURVETOY
+  7.4141 1.25 \atfi at LINETO
+  9.4292 1.8223 9.4292 3.3066 \atfi at CURVETOV
+  9.4292 4.79 9.4292 16.8945 \atfi at CURVETOY
+  9.7852 18.1514 8.481 18.1514 \atfi at CURVETOV
+  7.1768 18.1514 5.1616 18.1514 \atfi at CURVETOY
+  3.8574 17.9209 3.8574 16.8945 \atfi at CURVETOV
+  3.8574 15.8652 3.8574 6.6172 \atfi at CURVETOY
+  4.3325 5.418 5.1025 5.418 \atfi at CURVETOV
+  5.8726 5.418 6.5845 5.418 \atfi at CURVETOY
+  7.6812 5.6455 7.6812 6.4736 \atfi at CURVETOV
+  7.6812 7.3027 7.6812 11.5264 \atfi at CURVETOY
+  \atfi at STROKE
+  0 \atfi at SETGRAYSTROKE
+  1.2495 12.4404 \atfi at MOVETO
+  1.2495 3.9883 1.2495 3.1895 \atfi at CURVETOV
+  1.2495 2.3906 3.3833 1.9326 \atfi at CURVETOY
+  6.7026 1.9326 \atfi at LINETO
+  8.7178 2.5068 8.7178 3.9902 \atfi at CURVETOV
+  8.7178 5.4736 8.7178 17.5781 \atfi at CURVETOY
+  9.0732 18.834 7.769 18.834 \atfi at CURVETOV
+  6.4653 18.834 4.4497 18.834 \atfi at CURVETOY
+  3.146 18.6055 3.146 17.5781 \atfi at CURVETOV
+  3.146 16.5498 3.146 7.3018 \atfi at CURVETOY
+  3.6201 6.1016 4.3911 6.1016 \atfi at CURVETOV
+  5.1611 6.1016 5.873 6.1016 \atfi at CURVETOY
+  6.9692 6.3301 6.9692 7.1572 \atfi at CURVETOV
+  6.9692 7.9863 6.9692 12.21 \atfi at CURVETOY
+  \atfi at STROKE
+  \atfi at color@inline{STROKE}%
+  1 \atfi at SETLINEWIDTH
+  1.2495 12.4404 \atfi at MOVETO
+  1.2495 3.9883 1.2495 3.1895 \atfi at CURVETOV
+  1.2495 2.3906 3.3833 1.9326 \atfi at CURVETOY
+  6.7026 1.9326 \atfi at LINETO
+  8.7178 2.5068 8.7178 3.9902 \atfi at CURVETOV
+  8.7178 5.4736 8.7178 17.5781 \atfi at CURVETOY
+  9.0732 18.834 7.769 18.834 \atfi at CURVETOV
+  6.4653 18.834 4.4497 18.834 \atfi at CURVETOY
+  3.146 18.6055 3.146 17.5781 \atfi at CURVETOV
+  3.146 16.5498 3.146 7.3018 \atfi at CURVETOY
+  3.6201 6.1016 4.3911 6.1016 \atfi at CURVETOV
+  5.1611 6.1016 5.873 6.1016 \atfi at CURVETOY
+  6.9692 6.3301 6.9692 7.1572 \atfi at CURVETOV
+  6.9692 7.9863 6.9692 12.21 \atfi at CURVETOY
+  \atfi at STROKE
+  \atfi at GRESTORE
+}
+\def\atfi at acroPaperclip{%
+  \raisebox{-1.25bp}{\parbox[b][21bp]{12bp}{%
+    \rule{0pt}{0pt}\atfi at literal{\atfi at acroPaperclip@data}}%
+  }%
+}
+\def\atfi at acroPushPin@data{%
+  \atfi at GSAVE
+  1 \atfi at SETLINEWIDTH
+  1 6   \atfi at MOVETO
+  11 6  \atfi at LINETO
+  11 13 \atfi at LINETO
+  12 13 \atfi at LINETO
+  14 11 \atfi at LINETO
+  21 11 \atfi at LINETO
+  22 12 \atfi at LINETO
+  23 12 \atfi at LINETO
+  23 2  \atfi at LINETO
+  22 2  \atfi at LINETO
+  21 3  \atfi at LINETO
+  14 3  \atfi at LINETO
+  12 1  \atfi at LINETO
+  11 1  \atfi at LINETO
+  11 6  \atfi at LINETO
+  \atfi at FILLSTROKE{%
+    \atfi at color@inline{FILL}%
+  }{%
+    0 \atfi at SETGRAYSTROKE
+  }%
+  0.5 \atfi at SETGRAYSTROKE
+  0 7  \atfi at MOVETO
+  10 7 \atfi at LINETO
+  10 8 \atfi at LINETO
+  1 8  \atfi at LINETO
+  \atfi at STROKE
+  1 \atfi at SETGRAYSTROKE
+  12 12 \atfi at MOVETO
+  14 10 \atfi at LINETO
+  22 10 \atfi at LINETO
+  22 11 \atfi at LINETO
+  \atfi at STROKE
+  \atfi at GRESTORE
+}
+\def\atfi at acroPushPin{%
+  \raisebox{-1.25bp}{\parbox[b][14bp]{24bp}{%
+    \rule{0pt}{0pt}\atfi at literal{\atfi at acroPushPin@data}}%
+  }%
+}
+\def\atfi at acroTag@data{%
+  \atfi at GSAVE
+  0.5 \atfi at SETGRAYFILL
+  10.0542 14.9873 \atfi at MOVETO
+  24.27 14.9873 \atfi at LINETO
+  25.252 14.0059 \atfi at LINETO
+  25.252 1.1455 \atfi at LINETO
+  24.1064 0 \atfi at LINETO
+  9.9609 0 \atfi at LINETO
+  6.0327 6.0088 \atfi at LINETO
+  6.0327 9.002 \atfi at LINETO
+  10.0542 14.9873 \atfi at LINETO
+  9.3994 9.376 \atfi at MOVETO
+  8.5215 9.376 7.8096 8.5596 7.8096 7.5527 \atfi at CURVETO
+  7.8096 6.5449 8.5215 5.7285 9.3994 5.7285 \atfi at CURVETO
+  10.2778 5.7285 10.9897 6.5449 10.9897 7.5527 \atfi at CURVETO
+  10.9897 8.5596 10.2778 9.376 9.3994 9.376 \atfi at CURVETO
+  \atfi at CLOSEPATH
+  \atfi at FILL
+  0 \atfi at SETFLAT
+  0.5 \atfi at SETLINEWIDTH
+  4 \atfi at SETMITERLIMIT
+  1 \atfi at SETLINEJOIN
+  8.5107 16.5313 \atfi at MOVETO
+  22.7266 16.5313 \atfi at LINETO
+  23.7085 15.5488 \atfi at LINETO
+  23.7085 2.6895 \atfi at LINETO
+  22.563 1.543 \atfi at LINETO
+  8.4175 1.543 \atfi at LINETO
+  4.4893 7.5527 \atfi at LINETO
+  4.4893 10.5449 \atfi at LINETO
+  8.5107 16.5313 \atfi at LINETO
+  7.856 10.9199 \atfi at MOVETO
+  6.978 10.9199 6.2661 10.1035 6.2661 9.0957 \atfi at CURVETO
+  6.2661 8.0879 6.978 7.2715 7.856 7.2715 \atfi at CURVETO
+  8.7344 7.2715 9.4463 8.0879 9.4463 9.0957 \atfi at CURVETO
+  9.4463 10.1035 8.7344 10.9199 7.856 10.9199 \atfi at CURVETO
+  \atfi at CLOSEPATH
+  \atfi at FILLSTROKE{%
+    \atfi at color@inline{FILL}%
+  }{%
+    0 \atfi at SETGRAYSTROKE
+  }%
+  1 \atfi at SETLINEWIDTH
+  12.3291 12.2656 \atfi at MOVETO
+  21.1206 12.2656 \atfi at LINETO
+  \atfi at STROKE
+  12.3291 9.1797 \atfi at MOVETO
+  21.1206 9.1797 \atfi at LINETO
+  \atfi at STROKE
+  12.3291 6.1875 \atfi at MOVETO
+  21.1206 6.1875 \atfi at LINETO
+  \atfi at STROKE
+  % 0 \atfi at SETGRAYSTROKE % redundant?
+  0.5 \atfi at SETLINEWIDTH
+  0 9.0488 \atfi at MOVETO
+  6.2661 9.0957 \atfi at LINETO
+  \atfi at STROKE
+  1.4028 5.2148 \atfi at MOVETO
+  1.4028 9.6094 \atfi at LINETO
+  1.6831 10.6387 2.4316 10.6387 \atfi at CURVETOV
+  3.6475 10.6387 3.5542 9.0488 \atfi at CURVETOY
+  \atfi at STROKE
+  \atfi at GRESTORE
+}
+\def\atfi at acroTag{%
+  \raisebox{-1.6bp}{\parbox[b][17bp]{25bp}{%
+    \rule{0pt}{0pt}\atfi at literal{\atfi at acroTag@data}}%
+  }%
+}
+\def\attachfile at timezone#1{%
+  \ifx\\#1\\%
+    % no timezone information given
+  \else
+    \def\atfi at timezone{#1}%
+  \fi
+}
+\newcommand*{\attachfile at file}[2][]{%
+  \EdefUnescapeHex\atfi at filename{#2}%
+  \ifx\atfi at filename\ltx at empty
+    \PackageError{attachfile2}{Empty file name}\@ehc
+  \else
+    \@namedef{atfi at file@\atfi at filename}{#1}%
+  \fi
+}
+\InputIfFileExists{\jobname.atfi}{}{}%
+\newif\ifatfi at checksum
+\define at key{AtFi at file}{CheckSum}{%
+  \atfi at checksumtrue
+  \edef\atfi at params{\atfi at params/CheckSum<#1>}%
+}
+\newif\ifatfi at creationdate
+\define at key{AtFi at file}{CreationDateTZ}{%
+  \ifatfi at creationdate
+  \else
+    \atfi at creationdatetrue
+    \edef\atfi at params{%
+      \atfi at params
+      /CreationDate(#1)%
+    }%
+  \fi
+}
+\define at key{AtFi at file}{CreationDate}{%
+  \ifatfi at creationdate
+  \else
+    \atfi at creationdatetrue
+    \edef\atfi at params{%
+      \atfi at params
+      /CreationDate(#1\atfi at timezone)%
+    }%
+  \fi
+}
+\newif\ifatfi at moddate
+\define at key{AtFi at file}{ModDateTZ}{%
+  \ifatfi at moddate
+  \else
+    \atfi at moddatetrue
+    \edef\atfi at params{%
+      \atfi at params
+      /ModDate(#1)%
+    }%
+  \fi
+}
+\define at key{AtFi at file}{ModDate}{%
+  \ifatfi at moddate
+  \else
+    \atfi at moddatetrue
+    \edef\atfi at params{%
+      \atfi at params
+      /ModDate(D:#1\atfi at timezone)%
+    }%
+  \fi
+}
+\let\atfi at temp\ltx at one
+\ltx at IfUndefined{pdf at filesize}{%
+  \let\atfi at temp\ltx at zero
+}{}
+\ltx at IfUndefined{pdf at filemoddate}{%
+  \let\atfi at temp\ltx at zero
+}{}
+\ltx at IfUndefined{pdf at filemdfivesum}{%
+  \let\atfi at temp\ltx at zero
+}{}
+\ifcase\atfi at temp
+  \let\atfi at pdftexdata\ltx at gobble
+\or
+  \def\atfi at pdftexdata#1{%
+    \edef\atfi at temp{\pdf at filesize{#1}}%
+    \ifx\atfi at temp\ltx at empty
+    \else
+      \setkeys{AtFi at file}{Size=\atfi at temp}%
+      \edef\atfi at temp{\pdf at filemoddate{#1}}%
+      \ifx\atfi at temp\ltx at empty
+      \else
+        \setkeys{AtFi at file}{ModDateTZ=\atfi at temp}%
+      \fi
+      \edef\atfi at temp{\pdf at filemdfivesum{#1}}%
+      \ifx\atfi at temp\ltx at empty
+      \else
+        \setkeys{AtFi at file}{CheckSum=\atfi at temp}%
+      \fi
+    \fi
+  }%
+\fi
+\if at filesw
+\else
+  \atfi at nofilestrue
+\fi
+\ifatfi at nofiles
+  \PackageInfo{attachfile2}{%
+    File `\jobname.atfi' will not be written because of\MessageBreak
+    \string\nofiles\space or option `nofiles'%
+  }%
+  \let\atfi at writefile\ltx at gobble
+\else
+  \newwrite\atfi at stream
+  \immediate\openout\atfi at stream=\jobname.atfi\relax
+  \immediate\write\atfi at stream{%
+    \string\attachfile at timezone{\atfi at timezone}%
+  }%
+  \def\atfi at writefile#1{%
+    \begingroup
+      \EdefEscapeHex\atfi at temp{#1}%
+      \immediate\write\atfi at stream{%
+        \string\attachfile at file[%
+          \ltx at ifundefined{atfi at file@#1}{}{\@nameuse{atfi at file@#1}}%
+        ]{\atfi at temp}%
+      }%
+    \endgroup
+  }%
+\fi
+\atfi at DisableOption{nofiles}
+\def\atfi at attachfile#1#2{%
+  \ltx at IfUndefined{atfi at fileobj@#2}{%
+    \atfi at writefile{#2}%
+  }{%
+    % don't need duplicates
+  }%
+  \atfi at setup{#1}%
+  \atfi at embedfile{#2}%
+  \atfi at set@appearance at icon
+  \atfi at flags@to at int
+  \atfi at insert@file at annot{#2}%
+  \endgroup
+}
+\newlength{\atfi at appearancewidth}
+\newlength{\atfi at appearanceheight}
+\newlength{\atfi at appearancedepth}
+\newsavebox{\atfi at appearancebox}
+\def\atfi at set@appearance at icon{%
+  \ltx at IfUndefined{atfi at appobj@\atfi at icon@icon}{%
+    \savebox{\atfi at appearancebox}{%
+      \@nameuse{atfi at acro\atfi at icon@icon}%
+    }%
+    \expandafter
+    \xdef\csname atfi at appwidth@\atfi at icon@icon\endcsname{%
+      \the\wd\atfi at appearancebox
+    }%
+    \expandafter
+    \xdef\csname atfi at appheight@\atfi at icon@icon\endcsname{%
+      \the\ht\atfi at appearancebox
+    }%
+    \expandafter
+    \xdef\csname atfi at appdepth@\atfi at icon@icon\endcsname{%
+      \the\dp\atfi at appearancebox
+    }%
+    \atfi at xform@icon
+    \global\expandafter\let
+        \csname atfi at appobj@\atfi at icon@icon\endcsname
+        \atfi at appearanceobj
+  }{%
+  }%
+  % optimization: \setlength dropped
+  \atfi at appearancewidth=%
+      \@nameuse{atfi at appwidth@\atfi at icon@icon}\relax
+  \atfi at appearanceheight=%
+      \@nameuse{atfi at appheight@\atfi at icon@icon}\relax
+  \atfi at appearancedepth=%
+      \@nameuse{atfi at appdepth@\atfi at icon@icon}\relax
+  \expandafter\let\expandafter\atfi at appearanceobj
+      \csname atfi at appobj@\atfi at icon@icon\endcsname
+}
+\def\atfi at set@appearance#1{%
+  \savebox{\atfi at appearancebox}{#1}%
+  \atfi at appearancewidth=\wd\atfi at appearancebox
+  \atfi at appearanceheight=\ht\atfi at appearancebox
+  \atfi at appearancedepth=\dp\atfi at appearancebox
+  \atfi at xform
+}
+\newcounter{atfi at flags}
+\DeclareRobustCommand{\atfi at flags@to at int}{%
+  \setcounter{atfi at flags}{0}%
+  \ifatfi at print
+    \addtocounter{atfi at flags}{4}%
+  \fi%
+  \ifatfi at zoom
+  \else
+    \addtocounter{atfi at flags}{8}%
+  \fi%
+}
+\def\atfi at textattachfile#1#2{%
+    \endgroup
+    \atfi at textattachfile@i{#1}{#2}%
+}
+\def\atfi at textattachfile@i#1#2#3{%
+    \ltx at IfUndefined{atfi at fileobj@#2}{%
+      \atfi at writefile{#2}%
+    }{%
+      % don't need duplicates
+    }%
+    \atfi at setup{#1}%
+    \atfi at embedfile{#2}%
+    \atfi at set@appearance{%
+      \leavevmode
+      \begingroup
+        \HyColor at UseColor\atfi at color@tex
+        #3\strut
+      \endgroup
+    }%
+    \atfi at flags@to at int
+    \atfi at insert@file at annot{#2}%
+  \endgroup
+}
+\DeclareRobustCommand{\attachfile}[1][]{%
+  \begingroup
+    \let\do\@makeother
+    \dospecials
+    \catcode`\{=1\relax
+    \catcode`\}=2\relax
+    \atfi at attachfile{#1}%
+}
+\DeclareRobustCommand{\textattachfile}[1][]{%
+  \begingroup
+    \begingroup
+      \let\do\@makeother
+      \dospecials
+      \catcode`\{=1\relax
+      \catcode`\}=2\relax
+      \atfi at textattachfile{#1}%
+}
+\DeclareRobustCommand{\noattachfile}[1][]{%
+  \begingroup
+    \atfi at setup{#1}%
+    \atfi at set@appearance at icon
+    \ifatfi at print
+      \expandafter
+      \atfi at refxform\csname atfi at appobj@\atfi at icon@icon\endcsname
+    \else
+      \makebox[\atfi at appearancewidth]{}%
+    \fi
+  \endgroup
+}
+\endinput
+%%
+%% End of file `attachfile2.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/attachfile2/attachfile2.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2019-11-24 21:34:37 UTC (rev 52909)
@@ -54,7 +54,7 @@
     askmaps asmeconf asmejour aspectratio
     assignment assoccnt astro asyfig
     asymptote-faq-zh-cn asymptote-by-example-zh-cn asymptote-manual-zh-cn
-    asypictureb attachfile
+    asypictureb attachfile attachfile2
     aucklandthesis augie auncial-new aurical aurl
     auto-pst-pdf-lua autobreak autopdf
     authoraftertitle authorarchive authordate authorindex

Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2019-11-24 21:34:37 UTC (rev 52909)
@@ -3064,6 +3064,7 @@
  'accfonts'             => 'mkt1font|vpl2',
  'adhocfilelist'        => 'adhocfilelist\.sh$',
  'arara'                => 'arara\.sh$',
+ 'attachfile2'		=> 'pdfatfi\.pl$',
  'authorindex'          => 'authorindex$',
  'bib2gls'		=> '\.sh$',
  'bibexport'            => 'bibexport\.sh$',

Added: trunk/Master/tlpkg/tlpsrc/attachfile2.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/attachfile2.tlpsrc	                        (rev 0)
+++ trunk/Master/tlpkg/tlpsrc/attachfile2.tlpsrc	2019-11-24 21:34:37 UTC (rev 52909)
@@ -0,0 +1 @@
+binpattern f bin/${ARCH}/pdfatfi

Modified: trunk/Master/tlpkg/tlpsrc/collection-latexrecommended.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-latexrecommended.tlpsrc	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/tlpkg/tlpsrc/collection-latexrecommended.tlpsrc	2019-11-24 21:34:37 UTC (rev 52909)
@@ -8,6 +8,7 @@
 # euenc is because fontspec[-luatex] depends on it.
 #
 depend anysize
+depend attachfile2
 depend beamer
 depend booktabs
 depend breqn

Modified: trunk/Master/tlpkg/tlpsrc/pdftools.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/pdftools.tlpsrc	2019-11-24 21:26:15 UTC (rev 52908)
+++ trunk/Master/tlpkg/tlpsrc/pdftools.tlpsrc	2019-11-24 21:34:37 UTC (rev 52909)
@@ -5,7 +5,6 @@
 binpattern f bin/${ARCH}/pdfopen
 #
 binpattern f bin/${ARCH}/e2pall
-binpattern f bin/${ARCH}/pdfatfi
 binpattern f bin/${ARCH}/pdftosrc
 #
 # Windows-only for some reason.



More information about the tex-live-commits mailing list