./photoml-0.28/0000755000175000017500000000000011530542510012574 5ustar brendtbrendt./photoml-0.28/configure.ac0000644000175000017500000000750011371066164015075 0ustar brendtbrendtdnl autoconf source for PhotoML tools installation dnl Brendt Wohlberg dnl Most recent modification: 07 May 2010 dnl Process this file with autoconf to produce a configure script. AC_INIT(dtd/photo.dtd) AC_PROG_INSTALL dnl Find path to sh AC_PATH_PROG(SH, sh) dnl Find path to perl AC_PATH_PROG(PERL, perl) dnl Ensure perl is not ancient AC_MSG_CHECKING(whether perl is appropriate version) if $PERL -e 'require 5;' 2>/dev/null; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_ERROR($PERL seems to be older than required version 5.) fi dnl Perl modules required by pmlcreate, pmldigital, pmlupgrade, and dnl pmlvalid tools PERLMODSREQ="Date::Manip File::Basename File::Copy File::Temp Getopt::Std Image::ExifTool" PERLMODSERR="" AC_MSG_CHECKING(whether all required perl modules are installed) for m in $PERLMODSREQ; do if ! $PERL -e "use $m;" 2>/dev/null; then PERLMODSERR="$PERLMODSERR $m" fi done if test "$PERLMODSERR" = ""; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_WARN(required Perl modules are not installed: $PERLMODSERR) fi dnl Find path to standard utilities AC_PATH_PROG(RM, rm) AC_PATH_PROG(ECHO, echo) dnl XML/XSLT processing utility paths AC_PATH_PROG(XMLLINT, xmllint) AC_PATH_PROG(XSLTPROC, xsltproc) dnl Utility required for pmlgrep AC_PATH_PROG(XGREP, xgrep) if test "$XGREP" != ""; then AC_MSG_CHECKING(whether correct xgrep found) XGREPVERSION=`$XGREP -v` if echo $XGREPVERSION | grep 'libxml2' > /dev/null 2>&1; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) XGREP='' fi fi dnl Utilities required for pmldigital AC_PATH_PROG(MD5SUM, md5sum) AC_PATH_PROG(IMAGEINFO, imageinfo) AC_PATH_PROG(DCRAW, dcraw) dnl Utilities required for validation XSLT and DTD documentation AC_PATH_PROG(DTDTO, dtdto) dnl Utility for generating XSD from DTD AC_PATH_PROG(TRANG, trang) dnl Utilities for processing DocBook documentation AC_PATH_PROG(XMLTO, xmlto) AC_PATH_PROG(FOP, fop) AC_PATH_PROG(LYNX, lynx) if test "$LYNX" != ''; then AC_MSG_CHECKING(whether lynx accepts -justify flag) if $LYNX -dump -justify /dev/null > /dev/null 2>&1; then AC_MSG_RESULT(yes) LYNXFLAGS='-force_html -dump -nolist -justify -width=76' else AC_MSG_RESULT(no) LYNXFLAGS='-force_html -dump -nolist -width=76' fi AC_SUBST(LYNXFLAGS) fi dnl Warn about inoperative tools due to missing prerequisites if test "$XMLLINT" = "" -o "$XSLTPROC" = "" ; then AC_MSG_WARN(critical XML processing prerequisites are missing) fi if test "$PERLMODSERR" != "" ; then AC_MSG_WARN(some tools inoperative due to missing perl modules) fi if test "$XGREP" = ""; then AC_MSG_WARN(pmlgrep tool inoperative due to missing prerequisites) fi if test "$SH" = "" -o "$PERL" = "" -o \ "$MD5SUM" = "" -o "$IMAGEINFO" = "" -o \ "$DCRAW" = ""; then AC_MSG_WARN(pmldigital tool inoperative due to missing prerequisites) fi dnl Find paths to package build tools AC_PATH_PROG(RPM, rpm) AC_PATH_PROG(RPMBUILD, rpmbuild) AC_PATH_PROG(RPMLINT, rpmlint) AC_PATH_PROG(DEBUILD, debuild) AC_PATH_PROG(DEBSIGN, debsign) AC_PATH_PROG(DEBSIGS, debsigs) dnl Determine version numbers DTDVERSION=`cat dtd/photo.dtd | grep Version: | awk -- '{print $2}'` PKGVERSION=`cat version` dnl Configure package build information if test -d "redhat" -a "$RPM" != ''; then rpmver=`grep 'Version:' redhat/photoml.spec | cut -f 2` rpmrel0=`grep 'Release:' redhat/photoml.spec | cut -f 2` rpmrel=`rpm --eval "$rpmrel0"` RPMVER=$rpmver-$rpmrel fi if test -d "debian"; then DEBVER=`grep -o '^photoml *(@<:@^()@:>@*)' debian/changelog | head -n 1 | \ sed -e 's/photoml (\(.*\))/\1/'` fi AC_SUBST(PKGVERSION) AC_SUBST(DTDVERSION) AC_SUBST(RPMVER) AC_SUBST(RPMARCH) AC_SUBST(DEBVER) AC_SUBST(DEBARCH) AC_OUTPUT(Makefile dtd/catalog.xml dtd/Makefile tools/Makefile xsd/Makefile xsl/Makefile xml/Makefile docs/Makefile docs/sections/Makefile) ./photoml-0.28/LICENCE0000644000175000017500000004310311361730561013571 0ustar brendtbrendt GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ./photoml-0.28/configure0000755000175000017500000033576611530532021014523 0ustar brendtbrendt#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.65. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error ERROR [LINENO LOG_FD] # --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with status $?, using 1 if that was 0. as_fn_error () { as_status=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="dtd/photo.dtd" ac_subst_vars='LTLIBOBJS LIBOBJS DEBARCH DEBVER RPMARCH RPMVER DTDVERSION PKGVERSION DEBSIGS DEBSIGN DEBUILD RPMLINT RPMBUILD RPM LYNXFLAGS LYNX FOP XMLTO TRANG DTDTO DCRAW IMAGEINFO MD5SUM XGREP XSLTPROC XMLLINT ECHO RM PERL SH INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking ' ac_precious_vars='build_alias host_alias target_alias' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error "unrecognized option: \`$ac_option' Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.65 Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do for ac_t in install-sh install.sh shtool; do if test -f "$ac_dir/$ac_t"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/$ac_t -c" break 2 fi done done if test -z "$ac_aux_dir"; then as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # Extract the first word of "sh", so it can be a program name with args. set dummy sh; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_SH+set}" = set; then : $as_echo_n "(cached) " >&6 else case $SH in [\\/]* | ?:[\\/]*) ac_cv_path_SH="$SH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_SH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi SH=$ac_cv_path_SH if test -n "$SH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SH" >&5 $as_echo "$SH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PERL+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether perl is appropriate version" >&5 $as_echo_n "checking whether perl is appropriate version... " >&6; } if $PERL -e 'require 5;' 2>/dev/null; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error "$PERL seems to be older than required version 5." "$LINENO" 5 fi PERLMODSREQ="Date::Manip File::Basename File::Copy File::Temp Getopt::Std Image::ExifTool" PERLMODSERR="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether all required perl modules are installed" >&5 $as_echo_n "checking whether all required perl modules are installed... " >&6; } for m in $PERLMODSREQ; do if ! $PERL -e "use $m;" 2>/dev/null; then PERLMODSERR="$PERLMODSERR $m" fi done if test "$PERLMODSERR" = ""; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: required Perl modules are not installed: $PERLMODSERR" >&5 $as_echo "$as_me: WARNING: required Perl modules are not installed: $PERLMODSERR" >&2;} fi # Extract the first word of "rm", so it can be a program name with args. set dummy rm; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_RM+set}" = set; then : $as_echo_n "(cached) " >&6 else case $RM in [\\/]* | ?:[\\/]*) ac_cv_path_RM="$RM" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi RM=$ac_cv_path_RM if test -n "$RM"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 $as_echo "$RM" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "echo", so it can be a program name with args. set dummy echo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ECHO+set}" = set; then : $as_echo_n "(cached) " >&6 else case $ECHO in [\\/]* | ?:[\\/]*) ac_cv_path_ECHO="$ECHO" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ECHO="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ECHO=$ac_cv_path_ECHO if test -n "$ECHO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ECHO" >&5 $as_echo "$ECHO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xmllint", so it can be a program name with args. set dummy xmllint; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_XMLLINT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $XMLLINT in [\\/]* | ?:[\\/]*) ac_cv_path_XMLLINT="$XMLLINT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_XMLLINT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XMLLINT=$ac_cv_path_XMLLINT if test -n "$XMLLINT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLLINT" >&5 $as_echo "$XMLLINT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xsltproc", so it can be a program name with args. set dummy xsltproc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_XSLTPROC+set}" = set; then : $as_echo_n "(cached) " >&6 else case $XSLTPROC in [\\/]* | ?:[\\/]*) ac_cv_path_XSLTPROC="$XSLTPROC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_XSLTPROC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XSLTPROC=$ac_cv_path_XSLTPROC if test -n "$XSLTPROC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5 $as_echo "$XSLTPROC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgrep", so it can be a program name with args. set dummy xgrep; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_XGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else case $XGREP in [\\/]* | ?:[\\/]*) ac_cv_path_XGREP="$XGREP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_XGREP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XGREP=$ac_cv_path_XGREP if test -n "$XGREP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGREP" >&5 $as_echo "$XGREP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$XGREP" != ""; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether correct xgrep found" >&5 $as_echo_n "checking whether correct xgrep found... " >&6; } XGREPVERSION=`$XGREP -v` if echo $XGREPVERSION | grep 'libxml2' > /dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } XGREP='' fi fi # Extract the first word of "md5sum", so it can be a program name with args. set dummy md5sum; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_MD5SUM+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MD5SUM in [\\/]* | ?:[\\/]*) ac_cv_path_MD5SUM="$MD5SUM" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_MD5SUM="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MD5SUM=$ac_cv_path_MD5SUM if test -n "$MD5SUM"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MD5SUM" >&5 $as_echo "$MD5SUM" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "imageinfo", so it can be a program name with args. set dummy imageinfo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_IMAGEINFO+set}" = set; then : $as_echo_n "(cached) " >&6 else case $IMAGEINFO in [\\/]* | ?:[\\/]*) ac_cv_path_IMAGEINFO="$IMAGEINFO" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_IMAGEINFO="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi IMAGEINFO=$ac_cv_path_IMAGEINFO if test -n "$IMAGEINFO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IMAGEINFO" >&5 $as_echo "$IMAGEINFO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "dcraw", so it can be a program name with args. set dummy dcraw; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DCRAW+set}" = set; then : $as_echo_n "(cached) " >&6 else case $DCRAW in [\\/]* | ?:[\\/]*) ac_cv_path_DCRAW="$DCRAW" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DCRAW="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DCRAW=$ac_cv_path_DCRAW if test -n "$DCRAW"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DCRAW" >&5 $as_echo "$DCRAW" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "dtdto", so it can be a program name with args. set dummy dtdto; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DTDTO+set}" = set; then : $as_echo_n "(cached) " >&6 else case $DTDTO in [\\/]* | ?:[\\/]*) ac_cv_path_DTDTO="$DTDTO" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DTDTO="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DTDTO=$ac_cv_path_DTDTO if test -n "$DTDTO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DTDTO" >&5 $as_echo "$DTDTO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "trang", so it can be a program name with args. set dummy trang; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_TRANG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $TRANG in [\\/]* | ?:[\\/]*) ac_cv_path_TRANG="$TRANG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_TRANG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi TRANG=$ac_cv_path_TRANG if test -n "$TRANG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TRANG" >&5 $as_echo "$TRANG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xmlto", so it can be a program name with args. set dummy xmlto; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_XMLTO+set}" = set; then : $as_echo_n "(cached) " >&6 else case $XMLTO in [\\/]* | ?:[\\/]*) ac_cv_path_XMLTO="$XMLTO" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_XMLTO="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XMLTO=$ac_cv_path_XMLTO if test -n "$XMLTO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLTO" >&5 $as_echo "$XMLTO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "fop", so it can be a program name with args. set dummy fop; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_FOP+set}" = set; then : $as_echo_n "(cached) " >&6 else case $FOP in [\\/]* | ?:[\\/]*) ac_cv_path_FOP="$FOP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_FOP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi FOP=$ac_cv_path_FOP if test -n "$FOP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FOP" >&5 $as_echo "$FOP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "lynx", so it can be a program name with args. set dummy lynx; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_LYNX+set}" = set; then : $as_echo_n "(cached) " >&6 else case $LYNX in [\\/]* | ?:[\\/]*) ac_cv_path_LYNX="$LYNX" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_LYNX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi LYNX=$ac_cv_path_LYNX if test -n "$LYNX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LYNX" >&5 $as_echo "$LYNX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$LYNX" != ''; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lynx accepts -justify flag" >&5 $as_echo_n "checking whether lynx accepts -justify flag... " >&6; } if $LYNX -dump -justify /dev/null > /dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } LYNXFLAGS='-force_html -dump -nolist -justify -width=76' else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } LYNXFLAGS='-force_html -dump -nolist -width=76' fi fi if test "$XMLLINT" = "" -o "$XSLTPROC" = "" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: critical XML processing prerequisites are missing" >&5 $as_echo "$as_me: WARNING: critical XML processing prerequisites are missing" >&2;} fi if test "$PERLMODSERR" != "" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: some tools inoperative due to missing perl modules" >&5 $as_echo "$as_me: WARNING: some tools inoperative due to missing perl modules" >&2;} fi if test "$XGREP" = ""; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pmlgrep tool inoperative due to missing prerequisites" >&5 $as_echo "$as_me: WARNING: pmlgrep tool inoperative due to missing prerequisites" >&2;} fi if test "$SH" = "" -o "$PERL" = "" -o \ "$MD5SUM" = "" -o "$IMAGEINFO" = "" -o \ "$DCRAW" = ""; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pmldigital tool inoperative due to missing prerequisites" >&5 $as_echo "$as_me: WARNING: pmldigital tool inoperative due to missing prerequisites" >&2;} fi # Extract the first word of "rpm", so it can be a program name with args. set dummy rpm; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_RPM+set}" = set; then : $as_echo_n "(cached) " >&6 else case $RPM in [\\/]* | ?:[\\/]*) ac_cv_path_RPM="$RPM" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_RPM="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi RPM=$ac_cv_path_RPM if test -n "$RPM"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RPM" >&5 $as_echo "$RPM" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "rpmbuild", so it can be a program name with args. set dummy rpmbuild; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_RPMBUILD+set}" = set; then : $as_echo_n "(cached) " >&6 else case $RPMBUILD in [\\/]* | ?:[\\/]*) ac_cv_path_RPMBUILD="$RPMBUILD" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_RPMBUILD="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi RPMBUILD=$ac_cv_path_RPMBUILD if test -n "$RPMBUILD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RPMBUILD" >&5 $as_echo "$RPMBUILD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "rpmlint", so it can be a program name with args. set dummy rpmlint; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_RPMLINT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $RPMLINT in [\\/]* | ?:[\\/]*) ac_cv_path_RPMLINT="$RPMLINT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_RPMLINT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi RPMLINT=$ac_cv_path_RPMLINT if test -n "$RPMLINT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RPMLINT" >&5 $as_echo "$RPMLINT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "debuild", so it can be a program name with args. set dummy debuild; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DEBUILD+set}" = set; then : $as_echo_n "(cached) " >&6 else case $DEBUILD in [\\/]* | ?:[\\/]*) ac_cv_path_DEBUILD="$DEBUILD" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DEBUILD="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DEBUILD=$ac_cv_path_DEBUILD if test -n "$DEBUILD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEBUILD" >&5 $as_echo "$DEBUILD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "debsign", so it can be a program name with args. set dummy debsign; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DEBSIGN+set}" = set; then : $as_echo_n "(cached) " >&6 else case $DEBSIGN in [\\/]* | ?:[\\/]*) ac_cv_path_DEBSIGN="$DEBSIGN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DEBSIGN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DEBSIGN=$ac_cv_path_DEBSIGN if test -n "$DEBSIGN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEBSIGN" >&5 $as_echo "$DEBSIGN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "debsigs", so it can be a program name with args. set dummy debsigs; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_DEBSIGS+set}" = set; then : $as_echo_n "(cached) " >&6 else case $DEBSIGS in [\\/]* | ?:[\\/]*) ac_cv_path_DEBSIGS="$DEBSIGS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DEBSIGS="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DEBSIGS=$ac_cv_path_DEBSIGS if test -n "$DEBSIGS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEBSIGS" >&5 $as_echo "$DEBSIGS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi DTDVERSION=`cat dtd/photo.dtd | grep Version: | awk -- '{print $2}'` PKGVERSION=`cat version` if test -d "redhat" -a "$RPM" != ''; then rpmver=`grep 'Version:' redhat/photoml.spec | cut -f 2` rpmrel0=`grep 'Release:' redhat/photoml.spec | cut -f 2` rpmrel=`rpm --eval "$rpmrel0"` RPMVER=$rpmver-$rpmrel fi if test -d "debian"; then DEBVER=`grep -o '^photoml *([^()]*)' debian/changelog | head -n 1 | \ sed -e 's/photoml (\(.*\))/\1/'` fi ac_config_files="$ac_config_files Makefile dtd/catalog.xml dtd/Makefile tools/Makefile xsd/Makefile xsl/Makefile xml/Makefile docs/Makefile docs/sections/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error ERROR [LINENO LOG_FD] # --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with status $?, using 1 if that was 0. as_fn_error () { as_status=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "dtd/catalog.xml") CONFIG_FILES="$CONFIG_FILES dtd/catalog.xml" ;; "dtd/Makefile") CONFIG_FILES="$CONFIG_FILES dtd/Makefile" ;; "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; "xsd/Makefile") CONFIG_FILES="$CONFIG_FILES xsd/Makefile" ;; "xsl/Makefile") CONFIG_FILES="$CONFIG_FILES xsl/Makefile" ;; "xml/Makefile") CONFIG_FILES="$CONFIG_FILES xml/Makefile" ;; "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; "docs/sections/Makefile") CONFIG_FILES="$CONFIG_FILES docs/sections/Makefile" ;; *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || as_fn_error "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || as_fn_error "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit $? fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi ./photoml-0.28/xml/0000755000175000017500000000000011530542507013402 5ustar brendtbrendt./photoml-0.28/xml/photoml02.xml0000644000175000017500000001561411520573615015762 0ustar brendtbrendt %definitions; ]> &film.velvia50.135; &lab.carlsdarkroom.abq; 3136 2001-09-05 2001-09-01 2001-09-01 USA Utah Arches National Park &body.nikon.f80s; 38.616166 -109.620509 Near entrance to park 38.618329 -109.617655 Near entrance to park 8 1/180 0.0 38.619444 -109.617398 Near entrance to park 38.743206 -109.565191 Near Fiery Furnace Near Fiery Furnace Near Fiery Furnace Near Fiery Furnace Canyonlands National Park Shafer Canyon Overlook 9.5 1/90 0.0 Shafer Canyon Overlook Shafer Canyon Overlook Shafer Canyon Overlook Shafer Canyon Overlook Shafer Canyon Overlook Mesa Arch 8 1/180 0.0 Mesa Arch Mesa Arch 2001-09-01 Green River Overlook View from Aztec Butte Buck Canyon Overlook 13 1/60 0.0 Buck Canyon Overlook Buck Canyon Overlook Orange Cliffs Overlook Orange Cliffs Overlook Grand View Point Overlook Grand View Point Overlook 11 1/15 0.0 Grand View Point Overlook Grand View Point Overlook Grand View Point Overlook Dead Horse Point State Park Dead Horse Point Overlook Dead Horse Point Overlook Dead Horse Point Overlook 8 1/30 +1.0 Dead Horse Point Overlook Dead Horse Point Overlook Dead Horse Point Overlook Dead Horse Point Overlook Dead Horse Point Overlook 2001-09-01 ./photoml-0.28/xml/photoml01.xml0000644000175000017500000000705711467565722015775 0ustar brendtbrendt Fuji Provia 100F 100 E6 35mm Carl's Darkroom
Albuquerque, NM
4378 2001-06-02
2001-05-12 Brendt Wohlberg 2001-05-12 Italy Umbria Nikon F80s Nikkor 28-105AF D 2001-05-12 Assisi Basilica di San Francesco 43.074585 12.607171 View of the front of the basilica 8 1/250 Orvieto Inside the duomo 2001-05-13 Tuscany Siena Piazza del Campo 2001-05-15 Germany Bavaria München 2001-05-15
./photoml-0.28/xml/definitions.mod0000644000175000017500000000374611460354007016426 0ustar brendtbrendt Fuji Provia 100F 100 E6 35mm "> Fuji Provia 100F 100 E6 120 "> Fuji Velvia 50 E6 35mm "> Fuji Velvia 50 E6 120 "> Camera Graphics Imaging
Albuquerque, NM
"> Carl's Darkroom
Albuquerque, NM
"> Nikon N60 "> Nikon F80s "> Nikkor 28-105AF D "> ./photoml-0.28/xml/photoml03.xml0000644000175000017500000000422311371062122015743 0ustar brendtbrendt Nikon LS-2000 1.31 NikonScan 3.12 0.0 8x clean image (normal) 3888 2592 12 ea400dff5e8de79a59e2dd3f97e13683 2001-08-30 2605 3780 12 3880 2599 8 3880 2599 8 3000 2000 Canon D1 ./photoml-0.28/xml/Makefile.in0000644000175000017500000000267011460324525015454 0ustar brendtbrendt# Makefile for PhotoML xml examples # Most recent modification: 22 October 2010 prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@/photoml bindir = @bindir@ INSTALL = @INSTALL@ SHELL = @SH@ RM = @RM@ XMLLINT = @XMLLINT@ DTDVERSION = @DTDVERSION@ XMLFILES := $(shell find . -name "photoml??.xml") SHTMLFILES = $(XMLFILES:%.xml=%s.html) DHTMLFILES = $(XMLFILES:%.xml=%d.html) .PHONY: all xslhtml index dtdver test check validate-xml validate-html \ clean install uninstall .SUFFIXES: .xml s.html d.html all: dtdver xslhtml index xslhtml: ${SHTMLFILES} ${DHTMLFILES} .xmls.html: @../tools/pmltrans -m $< > $@ .xmld.html: @../tools/pmltrans -d $< > $@ index: index.html index.html: ${SHTMLFILES} ${DHTMLFILES} @./mkindex > index.html dtdver: @for pml in photoml??.xml; do\ v=`grep '^<\!DOCTYPE' $$pml | grep -o '\([\.0-9]\)\+\/\/' \ | sed 's/\/\///'` ;\ if [ "$$v" != "${DTDVERSION}" ]; then\ echo "Warning: DTD version in $$pml does not match current DTD";\ fi;\ done check: test test: validate-xml validate-html validate-xml: .xmlvalid.stamp .xmlvalid.stamp: ${XMLFILES} ../dtd/photo.dtd @../tools/pmlvalid photoml??.xml @touch .xmlvalid.stamp validate-html: .htmlvalid.stamp .htmlvalid.stamp: ${SHTMLFILES} ${DHTMLFILES} index.html @${XMLLINT} --valid --noout *.html @touch .htmlvalid.stamp clean: @${RM} -f *.html .xmlvalid.stamp .htmlvalid.stamp install: uninstall: ./photoml-0.28/xml/mkindex0000755000175000017500000000305711361730557015002 0ustar brendtbrendt#! /bin/sh # Copyright © 2004 Brendt Wohlberg # Please see the PhotoML distribution LICENCE file for licence information cat < XSLExample Index

XSL Example Index

PhotoML

EOF for pml in photoml??.xml; do pmlbase=`basename $pml .xml` shtml="${pmlbase}s.html" dhtml="${pmlbase}d.html" cat < EOF done cat < EOF ./photoml-0.28/NEWS0000644000175000017500000001610211530542301013271 0ustar brendtbrendt Significant changes in PhotoML versions --------------------------------------- Version 0.28 (2011-02-21) ------------------------- * Fixed some bugs in pmltoxmp, and made some improvements, including conversion of additional PhotoML elements to XMP equivalents. * Various improvements and new features in Google Maps included in pmltrans summary output. * Added pmlindex option for grouping table entries by year. * Made some changes to summary output handling of multiple groups in a single PhotoML file, and made various cosmetic changes. Version 0.27 (2010-11-19) ------------------------- * Fixed some bugs in pmlcreate. * Summary output of pmltrans now has option of including a map of photo locations when coordinates are recorded. * Renamed merge:reject processing instruction to merge-reject to avoid invalid use of a namespace prefix on a processing instruction. * Added pmltoxmp tool for converting PhotoML data to XMP format. * Significant changes to the PhotoML DTD: - version number incremented to 0.13 - modified content models of location, device, and coordinates - renamed idximage to index-image and source to source-image - removed geometry element and moved width,height children as direct children of properties - replace all xlink:simple attributes with href - added additional file format options to std attribute of file-format element Version 0.26 (2008-06-04) ------------------------- * Fixed bug in pmlexpand resulting from changes in recent versions of sed (same problem as the one in pmltrans, corrected in version 0.23). Version 0.25 (2008-01-15) ------------------------- * Fixed bug in pmlvalid which resulted in a spurious validity error for frame elements within a frame-set within a digital element. * Rewrote a significant part of the XSLT implementation of defaults expansion to avoid the excessive recursion which resulted in memory being exhausted when processing large files. Version 0.24 (2007-12-17) ------------------------- * Another bugfix release, primarily addressing issues of compatibility with Ubuntu Debian packaging. Version 0.23 (2007-12-14) ------------------------- * Fixed bug in pmltrans which resulted in the script failing when run on a platform with a recent version of sed (e.g. Ubuntu 8.04 development version). Version 0.22 (2007-12-09) ------------------------- * Significant changes to the PhotoML DTD: - version number incremented to 0.12 - all occurences of date? replaced with date?,time? (date and time now represented by separate elements) - developer/type replaced by developer/make and developer/name - frame/viewpoint removed (should now be represented in frame/location) - semantics of frame/size changed, with corresponding removal of default for units attribute - order of children of frame/scene changed - element scene/type renamed to scene/genre - content model of scene/location changed, including renaming of location/suburb to location/subcity and location/street to location/road, removal of location/annotation, and introduction of location/subsubcity, location/area, and location/direction - added reference attribute to coordinates/altitude and numerous other corresponding modifications in example XML, XSLT, etc. - element hardware/manufacturer renamed to hardware/make - element properties/bits renamed to properties/bit-depth - element properties/fileformat renamed to properties/file-format - element properties/iccprofile renamed to properties/icc-profile - element object/type changed to attribute object/@type - element device/type changed to attribute device/@type - order of children of equipment/body and equipment/lens changed - ISOlat1 and ISOlat2 character entities removed * Modified defaults expansion method of signalling that an element should be pruned in the subtree merge. This is now indicated by the processing instruction instead of an empty element. * The date/time offset format for the pmldigital utility has changed. * Fixed bug in pmldigital handling of multiple camera owners, camera bodies, or lenses in a single set of digital images. Version 0.21 (2007-06-08) ------------------------- * Complete rewrite of pmldigital utility. * Improved error handling in utility scripts. * Utility scripts now output XML and XHTML documents with UTF8 encoding. * Default (summary) output of pmltrans creates Google Maps links when location coordinates are specified. EXIF GPS information is now read by pmldigital utility. * Various minor improvements and fixes. Version 0.20 (2006-07-23) ------------------------- * Defaults expansion XSLT now uses more reliable automaton-based content model validation mechanism. * Improved efficiency of pmlindex utility. * Added debian package building capability. Version 0.19 (2006-02-09) ------------------------- * Corrected pmldigital problems in handling of images from Nikon digital cameras. Version 0.18 (2005-11-06) ------------------------- * Bugfix release to address problems in handling of the new frame-set and digimage-set elements, and a problem in defaults expansion for history elements. * Modified pmlvalid utility to detect version mismatch between XML files and installed PhotoML DTD. Version 0.17 (2005-10-10) ------------------------- * Bugfix release to address incorrect PhotoML DTD version in output of pmlcreate and pmldigital utilities. Version 0.16 (2005-08-27) ------------------------- * Added pmlcreate utility for constructing roll descriptions outlines as a convenient starting point for editing. * Completely rewrote pmlvalid utility, introducing new functionality. * Introduced new pmldigital utility for constructing descriptions of digital camera images and scanned images. * Significant changes to defaults expansion. Rewrote defaults expansion implementation, and removed the 'select' defaults combine mode. Introduced frame-set and digimage-set elements for restricting the scope of defaults elements. * Modified the location element content model, and made id attributes required for roll, sheet, and digital elements. * Added new elements to represent film expiry date, and for frame rating/evaluation. Version 0.15 (2004-11-20) ------------------------- * Merged the DigImageML DTD into the PhotoML DTD. * Modified empty element handling in defaults expansion. * Changed command line options for pmltrans and pmlindex tools. * Fixed bugs in the defaults expansion and HTML output XSLT. Version 0.14 (2004-04-13) ------------------------- * Bugfix release to address problems apparent on release of libxslt version 1.1.5. Version 0.13 (2003-12-27) ------------------------- * Defaults expansion now handled by XSLT rather than C code. * Various changes to the main PhotoML DTD. ./photoml-0.28/ChangeLog0000644000175000017500000010720211530532231014347 0ustar brendtbrendt2011-02-21 Brendt Wohlberg * In summary.xsl, changed handling top-level handling of sheet, roll, and digital elements to sort output by group id, replaced anchor ("a") elements with name attributes by span elements with id attributes, changed symbol denoting Google Maps link, and added some space below Google Map canvas. * In cssinc.xsl and index.xsl, changed CSS on anchor ("a") elements. * Released version 0.28. 2011-02-11 Brendt Wohlberg * Added pmlindex option for grouping table entries by year. 2011-02-06 Brendt Wohlberg * Improvements to xmp.xsl, including conversion of additional PhotoML elements to XMP equivalents. 2011-01-28 Brendt Wohlberg * Fixed error in custom function pml:fractrunc in xmp.xsl. * Improved google maps output of summary.xsl: MaxZoomService now used to determine maximum zoom, marker includes indication of coordinates relevance attribute, circle around marker indicates uncertainty attribute value, and map is centered on click position. Also changed mechanism for passing marker description strings to google maps javascript. * Added some more coordinates usage examples to xml/photoml02.xml. * Various improvements to xmp.xsl, including inclusion of additional information, and more careful handling of date/time tags. * The -s option of pmltoxmp now specified an image id format string rather than just a format string specifying an output filename when required. 2010-12-03 Brendt Wohlberg * Fixed mistake in usage and error strings in pmltoxmp script. 2010-11-19 Brendt Wohlberg * Modified XSL generating summary HTML output to take DTD changes into account (removal of geometry element, rename of source to source-image). * Fixed error in XSL upgrade script in handling of attributes in rename of source to source-image. * In XSL upgrade scripts (and some other XSL scripts), explicitly set output encoding to utf-8 to avoid replacement of some characters by the corresponding character entity references. * Added pmltoxmp to list of tools to be installed in makefile in tools directory. * Made some minor changes to tool manpages in response to lintian warnings about undefined macros. * Released version 0.27. 2010-11-13 Brendt Wohlberg * Added pmltoxmp tool for converting PhotoML data to XMP format. 2010-11-12 Brendt Wohlberg * In DTD, DTD, changed location content model from (((ocean?,sea?)|(continent?,country?,region?,subregion?,district?, city?,subcity?,subsubcity?,area?,subarea?,road?)),place?,point?, description?,coordinates?,direction?,note?) to (((ocean?,sea?,island?)|(continent?,country?)),region?,subregion?, district?,city?,subcity?,subsubcity?,area?,subarea?,road?,place?, point?,description?,coordinates?,direction?,note?) 2010-10-22 Brendt Wohlberg * Cleaned up occurrences of xlink:href in some XSL and other files. * Updated docs to reflect some changes since previous version, and fixed some broken links. * Fixed handling of merge:reject rename in pmlupgrade script. * In pmlcreate, fixed bug introduced during previous bugfix, which resulted in a spurious extra frame being generated for rolls using the syntax to indicate a completed but unloaded roll at day end. * Modified Makefile in xml examples directory to generate location map for summary output. 2010-05-07 Brendt Wohlberg * In DTD, changed location content model from (((ocean?,sea?,region?,subregion?,area?,subarea?)|(continent?, country?,region?,subregion?,district?,city?,subcity?,subsubcity?, area?,subarea?,road?)),place?,point?,description?,coordinates?, direction?,note?) to (((ocean?,sea?)|(continent?,country?,region?,subregion?,district?, city?,subcity?,subsubcity?,area?,subarea?,road?)),place?,point?, description?,coordinates?,direction?,note?) 2010-05-07 Brendt Wohlberg * In DTD, changed device content model from (make?,model?,serial?,note?) to (make?,model?,serial?,firmware?,note?) * In DTD, changed location content model from ((ocean?,sea?)|(continent?,country?,region?,subregion?,district?, city?,subcity?,subsubcity?,area?,subarea?,road?,place?,point?, description?,coordinates?,direction?,note?)) to (((ocean?,sea?,region?,subregion?,area?,subarea?)|(continent?, country?,region?,subregion?,district?,city?,subcity?,subsubcity?, area?,subarea?,road?)),place?,point?,description?,coordinates?, direction?,note?) 2010-05-02 Brendt Wohlberg * Incremented DTD version from 0.12 to 0.13. (The following changes all also apply to the DTD.) * Replaced all xlink:simple attributes with href (in elements lab, index-image, photographer, owner, person, object, digimage, source-image, icc-profile) * Changed expiry element to YearMonth entity * Renamed idximage to index-image * Renamed source to source-image * Changed location content model from (country?,region?,subregion?,district?,city?,subcity?,subsubcity?, area?,road?,place?,description?,coordinates?,direction?,note?) to ((ocean?,sea?)|(continent?,country?,region?,subregion?,district?, city?,subcity?,subsubcity?,area?,subarea?,road?,place?,point?, description?,coordinates?,direction?,note?)) New elements are: ocean, sea, continent, subarea, point. * Changed coordinates content model from (latitude?,longitude?,altitude?) to (latitude?,longitude?,altitude?,measurement?,estimation?,note?) and added attributes datum, relevance, and uncertainty New elements are: measurement, estimation and subelements. * Removed geometry element and moved width,height children as direct children of properties * Added additional file format options to std attribute of file-format element 2010-05-01 Brendt Wohlberg * In merge.xsl, relevant merge test files, and documentation, changed merge:reject to merge-reject to remove invalid use of a namespace prefix on a processing instruction. 2010-03-26 Brendt Wohlberg * Added option for inclusion of Google Maps output to pmltrans (and pmlindex). 2010-02-13 Brendt Wohlberg * Modified create.xsl to force utf-8 output encoding of pmlcreate. 2010-02-12 Brendt Wohlberg * In pmlcreate, fixed bug in parsing camera model name in quotes. * In pmlcreate, fixed error encountered when only the final frame of a roll is left unfinished at the end of a day. 2008-06-05 Brendt Wohlberg * Released version 0.26. 2008-06-04 Brendt Wohlberg * Fixed bug in pmlexpand, apparently resulting from recent changes to sed behaviour. * Improved error checking in pmlindex. * Added two new tools test scripts. * Corrected bashisms in a number of shell scripts. 2008-02-26 Brendt Wohlberg * In pmldigital, added conversion to & entity for '&' characters in EXIF tags. 2008-02-02 Brendt Wohlberg * In pmlvalid support XSLT (misc/valid.xsl), fixed bug leading to spurious warnings (when simultaneously validating multiple digital groups) of duplicate identities for digimage elements which have digital/frame-set/frame ancestors. 2008-02-01 Brendt Wohlberg * In summary.xsl, modified google maps URL construction for compatibility with recent changes in the format. 2008-01-15 Brendt Wohlberg * In defaults.xsl, modified template matching document root to avoid problems with documents having a comment before the root element. * Additional changes to copyright statements in distribution files. * Released version 0.25. 2008-01-14 Brendt Wohlberg * Made significant changes to copyright statements in distribution files in response to comments obtained during review of Ubuntu packaging. 2008-01-12 Brendt Wohlberg * Rewrote function dflts:expand-defaults in defaults.xsl. The previous version required a recursive call for processing each consecutive sibling at the same level, which led to excessive memory usage for large files. The new version is much more memory efficient, utilising xsl:for-each for processing consecutive nodes, except when a defaults node requires a recursive call to establish a new defaults scope, or when recursing down the subtree of each element. 2008-01-08 Brendt Wohlberg * Fixed bug in pmlvalid: in valid.xsl, changed test ensuring that a digimage element is only allowed within a digital frame to test for frames with ancestor::digital rather than parent::digital (which ignores the possibility of a frame-set element as parent of the frame). 2007-12-17 Brendt Wohlberg * Fixed a number of issues related to compatibility with Debian packaging. * Fixed problem in dist target of top level Makefile: datestamp target was forcing rebuild of distribution tarball on every instance of make dist. * Released version 0.24. 2007-12-14 Brendt Wohlberg * Fixed problem in pmltrans script, apparently due to recent changes in grep behaviour. * Released version 0.23. 2007-12-09 Brendt Wohlberg * In top-level Makefile.in, improved location of install message about SGML_SEARCH_PATH environment variable, and added auto-update of distribution date stamp. * Released version 0.22. 2007-12-07 Brendt Wohlberg * In support XSLT for pmldigital tool, fixed some problems with detection of a set of images with a common camera body, lens, or photographer. * Corrected a number of instances of use of the bash operator '==' in shell scripts. 2007-11-30 Brendt Wohlberg * In upgrade XSLT, improved handling of change to scene/location content model: appropriate merge:reject processing instruction now inserted when merging expected to include more than one of road, place, or description children. 2007-11-27 Brendt Wohlberg * Modified pmlcreate script and create.xsl to allow exposure compensation part of exposure information to be omitted. * In summary.xsl, removed handling of defunct location/annotation element, and corrected handling of occasion/date and occasion/time elements. 2007-11-22 Brendt Wohlberg * Switched pmldigital script from using Class::Date to Date::Manip. Added test for valid date/time offset, and modified man page to reflect changes in this format. * Removed Class::Date from list of required Perl modules. 2007-11-21 Brendt Wohlberg * Modified upgrade XSLT to handle change in defaults expansion of attributes of text elements (resulting from recent changes to merge.xsl), and added test to template handling merge prune signalling by empty element, avoiding undesired matching of an element which has a preceding defaults descendant, but with different parent (e.g. location/description instead of scene/description). * Fixed merge.xsl handling of whitespace text nodes when removing merge:reject processing instructions. 2007-11-12 Brendt Wohlberg * Modified upgrade XSLT to insert a warning when expanded defaults might have changed due to changes to the content model of the location element. * Modified merge:reject processing instruction handling in merge.xsl so that comments directly preceding rejected elements are also rejected. 2007-11-11 Brendt Wohlberg * Another change to the mechanism for signalling that an element should be excluded from the subtree merge applied during defaults expansion. This is now indicated by the processing instruction which is a sibling node of the element or attribute to be excluded. Changes to merge.xsl, modified existing and added new merge-test files, edited documentation, and modified the upgrade XSLT to apply the changes. 2007-11-04 Brendt Wohlberg * Fixed validation XSLT bug resulting in spurious error messages for empty elements subject to content format check (e.g. date, file-hash). 2007-11-01 Brendt Wohlberg * In expanding defaults elements, replaced empty element with the processing instruction as a signal to prune that element in the subtree merge. Changes to XSLT (merge.xsl and defaults.xsl), modified existing and added new test files (merge-test and dflts-test), edited documentation, and modified the upgrade XSLT to apply the changes. * In defaults XSLT test directories merge-test and dflts-test, modified the 'runtests' scripts so that xsltproc output piped to /dev/null when running on all tests, but not when a specific test is selected. 2007-10-26 Brendt Wohlberg * Modified upgrade XSLT to automatically handle some common developer/type text. * Fixed validation XSLT bug which incorrectly identified non-unique frame id and fn attributes when the same values for these attributes were found across multiple roll or digital elements. * Modified the PhotoML DTD: changed elements object/type and device/type to attributes object/@type and device/@type respectively, and changed order of children of elements equipment/body and equipment/lens. Made corresponding changes to upgrade XSLT. * Modified pmlupgrade to write a .fail file for failed upgrade attempts. 2007-10-21 Brendt Wohlberg * Removed ISOlat1 and ISOlat2 character entities from the DTD, and modified pmlupgrade to handle these changes. 2007-10-14 Brendt Wohlberg * Modified pmlvalid and support XSLT to be compatible with date/time changes in the DTD, and fixed an error in valid.xsl. * In photo.dtd, changed the zone attribute declaration from NMTOKEN to CDATA to allow the '+' symbol as valid content. 2007-10-13 Brendt Wohlberg * Modified the PhotoML DTD: elements properties/bits, properties/fileformat, and properties/iccprofile renamed to properties/bit-depth, properties/file-format, and properties/icc-profile respectively. Made corresponding changes in example XML and relevant XSLT. * Replaced environment variable SGML_CATALOG_FILES with XML_CATALOG_FILES when using xmllint and xsltproc. 2007-10-12 Brendt Wohlberg * Fixed some top-level makefile issues: dependency problems for dist target and correct handling of rpmbuild failure in dist-rpm target. 2007-10-07 Brendt Wohlberg * Removed building of HTML version of man pages in tools directory. * Various edits to DocBook documentation. 2007-09-21 Brendt Wohlberg * Modified the PhotoML DTD: element hardware/manufacturer renamed to hardware/make. Made corresponding changes to relevant files in xsl/defaults/dflts-test, xml/photoml03.xml, xsl/misc/digital.xsl, xsl/upgrade/photo-0.11-0.12.xsl, and xsl/html/summary.xsl. * Modified xsl/html/summary.xsl to handle new date and time elements. * Fixed xsl/upgrade/photo-0.11-0.12.xsl commenting out an entire node subtree. 2007-09-15 Brendt Wohlberg * Significant changes to the PhotoML DTD: - version number incremented to 0.12 - all occurences of date? replaced with date?,time? (date and time now represented by separate elements) - developer/type replaced by developer/make and developer/name - frame/viewpoint removed (should now be represented in frame/location) - semantics of frame/size changed, with corresponding removal of default for units attribute - order of children of frame/scene changed - element scene/type renamed to scene/genre - content model of scene/location changed, including renaming of location/suburb to location/subcity and location/street to location/road, removal of location/annotation, and introduction of location/subsubcity, location/area, and location/direction - added reference attribute to coordinates/altitude * New upgrade file xsl/upgrade/photo-0.11-0.12.xsl to handle DTD changes, and changed xsltproc path handling in tools/pmlupgrade so that xsltproc is able to locate entities in the same directory as the file being upgraded (necessary for examples such as xml/photoml02.xml). Changed output character encoding in all xsl/upgrade XSLT from iso-8859-1 to the default utf-8. * Changed xml/Makefile.in to issue warning on mismatch between DTD versions in dtd/photo.dtd and xml example DOCTYPE declarations, and made a small fix to validation targets. Upgraded example xml files to new DTD version. * Incremented DTD versions in xsl/defaults/expand.xsl, xsl/misc/create.xsl, and xsl/misc/digital.xsl. Modified date/time handling in xsl/misc/digital.xsl and xsl/misc/valid.xsl. * Modified some of the tests in xsl/defaults/dflts-test for compliance with the new DTD. 2007-09-13 Brendt Wohlberg * Fixed bug in summary.xsl handling of location with coordinates but no other information. 2007-09-10 Brendt Wohlberg * Various improvements to redhat and debian package building. 2007-08-26 Brendt Wohlberg * Minor changes to top-level makefile, including addition of distclean target, and improvements to dist-deb target. * Updated all makefiles to use new autoconf datarootdir variable, changed @datadir@/PhotoML to @datadir@/photoml, and switched to installing docs in standard location. 2007-07-17 Brendt Wohlberg * Fixed some minor issues in the tool man pages. 2007-07-01 Brendt Wohlberg * Improved makefiles, particularly redhat and debian package building targets. 2007-06-30 Brendt Wohlberg * Improved recursive make mechanism in top-level makefile. 2007-06-08 Brendt Wohlberg * Improved error handling in utility scripts. Minor edits to bring documentation up to date with recent changes. Renamed configure.in as configure.ac to avoid autoconf version problems under Ubuntu. Fixed some digimage related problems in digital.xsl. * Released version 0.21. 2007-06-03 Brendt Wohlberg * Rewrote pmlvalid handling of unique frame id tests to correct problem with frame-set children. 2007-05-25 Brendt Wohlberg * Removed "edit here" scene/description element from pmlcreate output. 2007-05-23 Brendt Wohlberg * Added location/coordinates xml usage example and relevant value tests to pmlvalid. 2007-05-18 Brendt Wohlberg * Improved pmldigital handling of camera make information for a variety of manufacturers. 2007-05-15 Brendt Wohlberg * Corrected configure.in and rpm and deb package builds for dependencies in new implementation of pmldigital. 2007-05-08 Brendt Wohlberg * Switched pmlcreate output to UTF-8 encoding. Changed frame number colour in cssinc.xsl. Modified location/coordinates handling in summary.xsl. Replaced pmldigital with complete rewrite using Image::Exiftool module. Added GPS EXIF tag handling to pmldigital. 2007-05-07 Brendt Wohlberg * Added file read test to pmltrans utility. Switched XSLT for HTML output to UTF-8 encoding. Added dflts namespace declaration in merge.xsl to address strange new behaviour in libxslt 1.1.20. 2007-05-05 Brendt Wohlberg * Added ability to specify film expiry date in pmlcreate input. 2007-05-04 Brendt Wohlberg * Fixed bug in pmlcreate utility, occurring when the first roll in the list is unloaded before the end of the day on which it is loaded. 2006-07-23 Brendt Wohlberg * Some improvements and corrections to pmlindex and associated XSL (including summary.xsl). * Released version 0.20. 2006-07-08 Brendt Wohlberg * Fixed debian/changelog version synchronisation by top level Makefile so that only most recent entry is modified. 2006-06-22 Brendt Wohlberg * Modified pmlindex utility and support XSL for more efficient operation by removing the necessity of defaults expansion on every file to be indexed. 2006-06-01 Brendt Wohlberg * Modified defaults expansion mechanism to use new automaton-based content model validation mechanism generated by dtdto. DTD documentation now generated by dtdto. 2006-03-16 Brendt Wohlberg * Added debian package build capability. 2006-02-09 Brendt Wohlberg * Fixed namespace problem in pmldigital support XSL. * Released version 0.19. 2006-01-26 Brendt Wohlberg * Modified pmldigital support XSL to improve output when processing EXIF data in images from Nikon digital cameras. 2005-12-10 Brendt Wohlberg * Modified pmldigital utility and support XSL to correct problems in processing EXIF data in images from Nikon digital cameras. 2005-11-13 Brendt Wohlberg * Modified pmldigital support XSL so that rated-speed element only inserted if the corresponding image EXIF data is numeric (not "Auto", etc.). In summary.xsl, improved handling of digimage children of frame within a digital element. 2005-11-11 Brendt Wohlberg * Edited pmlvalid support XSL to allow exp-comp and flash-comp element content to be expressed as a quotient. Corrected bug in pmldigital support XSL that was preventing generation of equipment and photographer defaults under certain circumstances. 2005-11-06 Brendt Wohlberg * Released version 0.18. 2005-11-05 Brendt Wohlberg * Added new tests in 'dflts-test' and fixed problem XSL generated by DTDContentModel.pm. 2005-11-04 Brendt Wohlberg * Added detection of correct PhotoML DTD version to pmlvalid tool. Modified detailed.xsl to support frame-set elements. 2005-10-26 Brendt Wohlberg * Modified frame-set and digimage-set content models in DTD to allow content with no defaults as expected after defaults expansion. (DTD version not upgraded since no changes required in existing XML files.) Fixed expand.xsl so that defaults expanded into frame-set and digimage-set children, and added corresponding defaults expansion tests. Modified preindex.xsl and summary.xsl to support frame-set and digimage-set elements. 2005-10-10 Brendt Wohlberg * Fixed errors in makefiles in 'xsl' and 'xsl/misc' directories which prevented automatic update of DTD version numbers in relevant XSL. Corrected DTD version errors in create.xsl and digital.xsl in 'xsl/misc'. * Released version 0.17. 2005-08-27 Brendt Wohlberg * Modified the DTD to make id attributes required for roll, sheet, and digital elements. Minor edits to HTML index and summary XSL. * Released version 0.16. 2005-08-21 Brendt Wohlberg * Cleaned up tools man pages and usage messages. 2005-08-20 Brendt Wohlberg * Fixed path problem in running pmlvalid from within pmltrans, and modified tools shell scripts to send error messages to stderr. Minor edit to a comment in the DTD. 2005-07-28 Brendt Wohlberg * Added tools/test directory containing some scripts for testing the utilities. 2005-07-24 Brendt Wohlberg * Removed option of using nsgmls for validation in the 'xml' directory. 2005-07-23 Brendt Wohlberg * Added flag to pmltrans and pmlindex utilities allowing the user to select whether to include the exposure details column in the HTML output. 2005-07-15 Brendt Wohlberg * Added pmlcreate utility for constructing roll descriptions outlines as a convenient starting point for editing. 2005-04-30 Brendt Wohlberg * Edited pmldigital support XSL in digital.xsl to include more relevant EXIF data in the output. If camera or photographer is common to all frames, this information is now specified using an initial defaults section, instead of in each frame. 2005-04-27 Brendt Wohlberg * Added pmldigital utility for constructing descriptions of digital camera images and scanned images. New pmlvalid utility does more than simply checking validity with respect to the DTD. 2005-04-16 Brendt Wohlberg * In the DTD, expanded comments on restrictions to a digimage element that is the child of a frame child of a digital element. Changed types of elements width, height, and bits from Integer to PositiveInteger. 2005-03-31 Brendt Wohlberg * Restructured RPM building method in top-level Makefile. 2005-03-20 Brendt Wohlberg * Added basic digimage support to the pmlindex utility. 2005-03-19 Brendt Wohlberg * Switched to complete rewrite of defaults.xsl. 2005-03-12 Brendt Wohlberg * Switched to complete rewrite of merge.xsl, with accompanying test framework. Restructured defaults expansion test framework and moved it to xsl/defaults. Removed the 'select' defaults combine mode. 2005-01-17 Brendt Wohlberg * Modified location element in the DTD to disallow multiple consecutive region elements, as this was incompatible with a practical defaults expansion strategy. Renamed old subregion element to segment. 2005-01-08 Brendt Wohlberg * Added a new element to the DTD to represent the film expiry date. 2004-12-20 Brendt Wohlberg * Added a new element to the DTD to allow frame rating/evaluation. 2004-11-28 Brendt Wohlberg * Corrected expand.xsl so that output includes the full public id, including DTD version number, and modified the makefile so that the version number is automatically synchronised with that of the DTD. 2004-11-25 Brendt Wohlberg * Renamed a number of files in xsl/html and xsl/defaults, and made corresponding changes elsewhere. 2004-11-20 Brendt Wohlberg * Fixed some problems with make uninstall. * Released version 0.15. 2004-11-14 Brendt Wohlberg * Modified XSLT for pmlindex so that anchors are constructed for links into files containing multiple roll, sheet, or digital elements. Modified top level makefile so that the date is recorded on building a new distribution, and the version and date files are copied into the data directory on installation. 2004-11-13 Brendt Wohlberg * Fixed a bug in defaults expansion XSLT. Added support for sheet elements to the XSLT used by pmlindex. 2004-11-06 Brendt Wohlberg * Fixed table layout problem in HTML output for digimage elements. Added support for digital elements to pmlindex. 2004-11-03 Brendt Wohlberg * Added command line argument checking to pmlvalid and pmlupgrade tools. 2004-10-25 Brendt Wohlberg * Added font size selection parameter to pmlindex tool and associated XSL. 2004-10-24 Brendt Wohlberg * Added a parameter to the relevant XSL, and a command line option to the pmltrans tool allowing user selection of the output font size. The dist-rpm target of the main Makefile now updates the package version in the RPM spec file. 2004-10-17 Brendt Wohlberg * Modified empty element handling in merge.xsl. When overwriting with an empty element, the empty element is now removed from the merged subtree, rather than being present as an empty element. 2004-10-11 Brendt Wohlberg * Modified command line options on pmltrans and pmlindex tools. Various minor modifications to tools. 2004-04-13 Brendt Wohlberg * Fixed problems in defaults expansion XSL which have only become apparent with a recent version (1.1.5) of libxslt. * Released version 0.14. (Changes were made to version 0.13, and not the CVS head.) 2004-02-04 Brendt Wohlberg * In the DTD, modified the history element content model to allow multiple editing elements (so that multiple stages of editing, using different software, may be described). 2004-01-25 Brendt Wohlberg * In the DTD, added note element as child in a number of digimage element descendants. 2004-01-11 Brendt Wohlberg * Renamed the hash element to image-hash, and added new file-hash element to the DTD. 2004-01-02 Brendt Wohlberg * Added idximage element to the DTD. 2004-01-02 Brendt Wohlberg * Modified the fileformat element, adding an abbrev attribute for specifying standard file format abbreviations. 2003-12-31 Brendt Wohlberg * Merged the DigImageML DTD into the PhotoML DTD, and made numerous edits consistent with this change. 2003-12-27 Brendt Wohlberg * Released version 0.13. 2003-12-21 Brendt Wohlberg * Added the fn attribute for the frame element in photo.dtd. Modified HTML output XSL accordingly. 2003-11-23 Brendt Wohlberg * Major restructuring. Removed utilities directory and replaced it with tools directory containing scripts rather than C source code. Defaults expansion now handled by XSL transforms rather than C code linked to libxml2. 2003-11-07 Brendt Wohlberg * In photo.dtd, added a size element as a child of the frame element, and edited comments for the process, type, and format child elements of the film element. 2003-10-28 Brendt Wohlberg * Added units attribute to altitude element in photo.dtd. 2003-10-25 Brendt Wohlberg * Modified xsd/Makefile.in so that XSD generated for PhotoML *and* DigImageML DTDs. 2003-10-21 Brendt Wohlberg * Restructured documentation and added auto-generated appendices describing the DTDs. 2003-09-27 Brendt Wohlberg * Switched to a new scheme for handling collections of roll, sheet, and digital elements. Modified the photo DTD, associated XSL, and examples accordingly. 2003-04-27 Brendt Wohlberg * Created an initial XSL stylesheet for DigImageML files, and updated pmltrans and the examples generating scripts to use it. 2003-04-19 Brendt Wohlberg * Modified directory structure of installed data. 2003-04-19 Brendt Wohlberg * Moved DigImageML DTD into the distribution and modified appropriate makefile, catalog.xml etc. 2003-04-19 Brendt Wohlberg * Moved HTML generated by XSL from XML examples from xsl directory to xml directory. 2003-03-28 Brendt Wohlberg * Modified photo.dtd to allow an empty element, which may be used to clear support specifications within a element. 2003-03-21 Brendt Wohlberg * Fixed some minor errors in XHTML generated by summary.xsl 2003-03-16 Brendt Wohlberg * Improved makefiles in main and subsidiary directories 2003-03-09 Brendt Wohlberg * Fixed some problems in defaults expansion code, and added some new expansion test files. 2003-03-08 Brendt Wohlberg * Modified DTD to allow defaults elements within collection elements. 2003-03-05 Brendt Wohlberg * Added options to configure.in for selecting xml.soc path. 2003-03-01 Brendt Wohlberg * Modified pmlexpand.c to remove namespace declarations inserted from the DTD. Also, miscellaneous editing of utilities code. 2003-02-22 Brendt Wohlberg * Moved main documentation from README file in text format into DocBook XML in docs directory, and updated makefiles and configure scripts to build documents and include them in the distribution. 2003-02-15 Brendt Wohlberg * Enhanced readability of photo.dtd by adding entities defining various data types for elements with PCDATA content. Added "units" attribute to elements with content representing values with associated physical units. Added xml:lang attribute to a number of relevant elements. 2003-02-08 Brendt Wohlberg * Replaced www elements with xlink:href attribute in the parent elements. Modified summary XSL to place a hyperlink on the laboratory name if the laboratory name has an xlink:href attribute. 2003-01-24 Brendt Wohlberg * Added memory leak checks using valgrind (when found by configure) to utiltest called by the "check" makefile target 2003-01-21 Brendt Wohlberg * Modified MergeSubtreein merge.c to address memory leaks revealed by valgrind. 2003-01-21 Brendt Wohlberg * Modified CopyNodeExtended in merge.c to address memory leaks revealed by valgrind. 2003-01-17 Brendt Wohlberg * MergeSubtree in merge.c: modified handling of leaf destination nodes --- content copy changed to node copy. 2003-01-17 Brendt Wohlberg * Modified MergeSubtree in merge.c so that merging an empty src element removes the children of the destination element. 2003-01-17 Brendt Wohlberg * Modified the DTD, adding a description element for groupings roll, collection, and digital. 2002-10-05 Brendt Wohlberg * Fixed pmltrans script so that the call to pmlexpand works before and after a make install. 2002-08-07 Brendt Wohlberg * Renamed rollsummary.xsl to summary.xsl 2002-08-06 Brendt Wohlberg * Modified rollsummary.xsl handling of load, unload, photographer, and equipment elements. 2002-08-05 Brendt Wohlberg * Modified rollsummary.xsl to allow multiple roll elements. 2002-08-04 Brendt Wohlberg * Made significant modifications to "pmltrans" script. 2002-08-04 Brendt Wohlberg * Renamed original XSL style sheet file and added an alternative XSL which generates a summary of a PhotoML file containing a single roll element. 2002-08-03 Brendt Wohlberg * Added "pmlvalid" script to call xmllint. 2002-08-02 Brendt Wohlberg * Modified dist target of main makefile so that the distribution is built as a subdirectory of the top level directory. 2002-07-30 Brendt Wohlberg * Tracked down memory leaks with valgrind. Fixed minor problem with makefile in utilities directory. 2002-07-14 Brendt Wohlberg * Renamed xmldflt and xmlfind to pmlexpand and pmlgrep respectively. 2002-07-14 Brendt Wohlberg * Modified configure.in and xml/Makefile.in so that configure tries to find location of pubtext/xml.soc for nsgmls. 2002-07-14 Brendt Wohlberg * Added "pmltrans" script to call xsltproc. 2002-07-12 Brendt Wohlberg * Added uninstall target to makefiles. 2002-07-04 Brendt Wohlberg * Major restructuring of the distribution. ./photoml-0.28/docs/0000755000175000017500000000000011530542510013524 5ustar brendtbrendt./photoml-0.28/docs/customhtml.xsl0000644000175000017500000000122011361730560016454 0ustar brendtbrendt ./photoml-0.28/docs/pmldoc.html0000644000175000017500000124160711471535455015721 0ustar brendtbrendt PhotoML: Photo Description Markup Language

PhotoML: Photo Description Markup Language

Brendt Wohlberg

XSL
source summary detailed
$pmlbase.xml $shtml $dhtml
Revision History
Revision 0.08 13 November 2010
Revision 0.07 22 November 2007
Revision 0.06 8 June 2007
Revision 0.05 20 August 2005
Revision 0.04 18 November 2004
Revision 0.03 31 January 2004

Purpose

This distribution is primarily intended to provide a format (defined by the PhotoML DTD) and tools for describing details of photo creation, processing, and content in a collection of photographs. It is designed to be appropriate for a wide variety of photographic formats, including roll film (such as 35mm and 120/220), sheet film (such as 4x5 and 8x10) and digital images. The type of information represented, while allowing description of details of content, creation etc. for digital images, does not support some of the more low-level housekeeping details that might be necessary in an application such as an online database of digital images. In particular, PhotoML is not yet another web photo gallery generator.

Alternative Formats

While alternatives exist, none of them seem to completely fit the role for which PhotoML was designed. Photo RDF has significantly lower complexity than PhotoML, allowing representation of a much smaller set of information, and does not provide any of the photo grouping mechanisms which seem desirable when describing a large collection of photos. DIG35 has higher complexity than PhotoML in some respects, providing support for greater detail for individual images. Since DIG35 is designed as metadata to be attached in the header of a digital image, it also lacks the image grouping facilities of PhotoML, and while DIG35 is intended to become an industry standard, the schema is not completely freely distributed (available on request only, but free for government and educational use).

Further Development

PhotoML has received a substantial amount of work, but a number of rough edges still require attention. Comments, suggestions, and contributions (including any involving significant changes) are welcome, and should be directed to . There are no immediate plans for a transition from the DTD to an XML Schema as the primary format definition (in contrast to DTDs, there does not yet seem to be much free software supporting editing and validation of schemas), but example schemas auto-generated from the DTD are included in the distribution.

The Distribution

The distribution consists of XML document type definitions, XSLT stylesheets for generating HTML formatted versions of the photo description XML, and various software tools. Note that the name PhotoML is used to describe the XML format defined by the PhotoML DTD as well as the entire distribution; the intended meaning should be clear from the context in which the name is used.

License

Use of this distribution is subject to the terms of the GNU General Public License (version 2), a copy of which is included in the distribution. If anyone wishing to use this distribution finds the GPL too restrictive, I will consider requests to make it available under an alternative open source license.

Platforms

The primary content of the dtd, xsd, xsl, and xml directories should be platform independent, but the configuration and installation files require a UNIX environment. The scripts in the tools directory have been tested under Linux on an i386 architecture, but should work on any UNIX platform with recent versions of libxml2 and libxslt installed. MS Windows versions of the utility scripts are not currently available, but should be easily ported from shell script to a scripting language available on that platform. Windows users may, however, wish to try installing under the cygwin environment.

Prerequisites

The primary prerequisites, other than basic UNIX shell utilities, are perl, and the libxml2 and libxslt packages. Some of the tools have additional requirements:

md5sum Standard on many Linux systems.
dcraw Available as source, RPM and deb packages.
imageinfo Source, SRPM and Ubuntu source deb packages available.
xgrep Source, SRPM and Ubuntu source deb packages available.
Date::Manip Perl module available from CPAN.
Image::ExifTool Perl module available from CPAN.

Installation

The source distribution is available from the PhotoML download page. After unpacking the tar archive, the simplest installation procedure consists of the following commands (executed from the distribution root directory):

     ./configure
      make
      make test
      make install

The final make install usually needs to be performed with root privileges (see the INSTALL file for further details). Using the default configuration, software tools are installed in /usr/local/bin, and the DTD, XSL, and associated files are installed in /usr/local/share/photoml.

Users of Red Hat/Fedora or Ubuntu Linux may install the RPM or deb packages available from the PhotoML download page. When installing from RPM or deb packages, software tools are installed in /usr/bin, and the DTD, XSL, and associated files are installed in /usr/share/photoml.

Distribution Content

The distribution content is divided up into a number of subdirectories, as described below.

DTD

The dtd directory contains the PhotoML DTD and associated files (character set defining external entities) and a catalogue file which is used by libxml2 tools for locating DTDs. The PhotoML DTD defines the primary XML format for describing collections of photographs, and, while still under development, should be reasonably stable. When the DTD is changed, the pmlupgrade utility provides automatic (or semi-automatic, in complex cases) conversion to the new format.

XSL

The xsl directory contains XSLT stylesheets for constructing HTML views of PhotoML XML files (in the xsl/html directory), for expansion of defaults elements (in the xsl/defaults directory), for upgrading PhotoML XML files from older DTD versions (in the xsl/upgrade directory), and for supporting the functionality of some of the tools (in the xsl/misc directory).

XML

The xml directory contains XML examples of PhotoML photo description and image description files. The top level make command builds HTML views of these files using the XSLT stylesheets in the xsl directory.

Tools

The tools directory contains tools for expanding defaults in PhotoML files, validating PhotoML files, constructing HTML representations etc.:

pmlcreate Generate PhotoML roll description outline
pmldigital Generate PhotoML descriptions of digital images from digital cameras and film scanners
pmlexpand Expand and remove defaults in a PhotoML XML file
pmlgrep Provides a grep-like utility for PhotoML files
pmlindex Constructs an HTML index of PhotoML files
pmltrans Transform a PhotoML XML file using the standard PhotoML XSL style sheet
pmltoxmp Transform PhotoML data to XMP format
pmlupgrade Upgrade PhotoML XML files to latest DTD version
pmlvalid Validate PhotoML XML files

Further details are provided in the man pages in that directory. Installation of libxml2 and libxslt is required, as the scripts in this directory make use of the xmllint and xsltproc utilities.

Documentation

Suprisingly enough, the docs directory contains documentation; the main document source in DocBook format, and viewable documents in HTML, PDF, and text formats.

XSD

The xsd directory contains an XML Schema definition that has been auto-generated from the PhotoML DTD by trang. While this schema may be useful to those wishing to use schema based XML tools, it has not been verified to be correct, and should not be considered as the primary document type definition.

Using PhotoML

At least some familiarity with XML is probably necessary to make use of PhotoML. It is particularly important for users who are not familiar with DTD syntax to use an XML editor (see Appendix A, XML Editing Tools) that provides DTD guided context-dependent element insertion to ensure that valid documents are created.

The recommended formal public identifier for the current version of the PhotoML DTD is

"-//BW//DTD PhotoML 0.13//EN"

A PhotoML XML file will therefore usually begin with the following two lines

<?xml version="1.0">
<!DOCTYPE photo PUBLIC "-//BW//DTD PhotoML 0.13//EN" "photo.dtd">

It is important to use the full public identifier including the DTD version number so that the version upgrade script is able to correctly identify the relevant DTD version when transitioning to a new DTD.

The PhotoML DTD

PhotoML is a very flexible format, providing facilities for recording far more detail than is likely to be of interest to the average photographer. A reasonable introduction to the format can be obtained by inspecting the example files in the xml directory, and viewing the corresponding HTML views generated by the XSLT stylesheets. For those who are familiar with DTD syntax, see Appendix B, PhotoML DTD or read through the heavily commented DTD in the dtd directory. A few issues are sufficiently complex to warrant additional discussion.

Collections

The id attribute of roll, sheet, and digital elements is intended to assign the primary identity for the group. If the group contains a collection element, the cgid attribute represents a secondary identity for the group relative to the collection, the identity of which is determined by the id attribute of the collection element. The fstid and lsid attributes specify the first and last frame identities which are contained in the the collection, so that it may contain only part of the group. A group may also contain multiple collection elements.

The frame id and fn attributes

The id attribute is intended to assign the primary identity for the frame. It is recommended that the values be two digit numbers, increasing in chronological frame order (e.g. 01 for the first frame exposed, 02 for the second frame exposed etc.). If the actual frame number marked on the film differs from the id, it may be recorded using the fn attribute, which is also useful in other situations, e.g. when the camera exposes film beginning at the end, so that the id numbers increase in chronological order, while the fn values decrease.

The xml:lang attribute

The xml:lang attribute, available for relevant elements, is a standard mechanism for specifying the language of the element content. In addition to the definition in the XML standard, relevant information is available in the documents describing rfc3066 and iso639-2.

The date element

The date element has the format YYYY[-MM[-DD]], (that is, YYYY-MM-DD, YYYY-MM, or YYYY).

The time element

The time element (using the 24 hour clock) has the format hh[:mm[:ss[.ss*]]] (that is, hh, hh:mm, hh:mm:ss, or hh:mm:ss.s with an arbitrary number of fractional seconds after the decimal point).

The optional zone attribute represents the UTC time zone in the format (+|-)hh[:mm] (that is +hh:mm, -hh:mm, +hh, or -hh).

For further details see a comprehensive discussion of ISO time notation, upon which these restrictions are based.

The digimage element

The digimage element is intended to provide a mechanism for describing digital images, primarily images from digital cameras, from film scanners, and edited digital images. Note that this format complements the primary PhotoML digital element for images from digital images. For example, each image captured using a digital camera is both a photograph (relevant aspects of which, such as creation date, location, scene description etc. are described using digital elements and their frame children) and a digital image (relevant aspects of which, such as image geometry, bit depth, image format etc. are described using digimage elements).

The defaults element

Elements contained within a defaults element provide default values for the subsequent entities in which the relevant elements have not been specified (for example, sub-elements of a frame specified within a defaults element are considered implied markup within any subsequent frame for which those sub-elements are not explicitly specified. An expanded version of a PhotoML file, with all defaults elements explicitly merged into the relevant elements, may be obtained by using the pmlexpand utility.

An understanding of the rules governing defaults elements is necessary for using them appropriately. The ruling defaults at any point in a PhotoML document are obtained by combining (as discussed below) all preceding defaults elements at higher levels in the element tree, and preceding defaults elements which are also children of the current parent node (the scope of a defaults element is defined by its parent element). For example, within the following document

 <photo>
   <defaults> ... A  ... </defaults>
   <roll>
     <defaults> ... B ... </defaults>
     <frame>
       ... 1 ...
     </frame>
   </roll>
   <roll>
     <frame>
       ... 2 ...
     </frame>
   </roll>  
 </photo>

defaults A and B apply to frame 1, but only defaults A apply to frame 2.

The current defaults at any point in the document are obtained by combining all preceding relevant (those within the current scope) defaults. As each defaults element is encountered in document order, a new current defaults set is constructed by combining the newly encountered defaults element with the current set in the manner specified by the combine attribute of the newly encountered defaults element. (A new copy of the current set is created when an inner scope is encountered so that any modifications to the current set within that scope do not effect the outer scope.) The possible values of the combine attribute are (the default attribute value is merge):

replace

The current defaults are deleted and replaced by the content of a defaults element with a value of replace for its combine attribute.

merge

The defaults element with a value of merge for its combine attribute is merged over the current defaults in the sense that any elements not in the current defaults are inserted, and any terminal node elements in both are replaced by those in the defaults element.

The processing instruction <?merge-reject element-name element-name ... @attribute-name @attribute-name ... ?> may be used to signal the removal of an element during a subtree merge, as illustrated in the following example

 <photo>
   <roll>

     <defaults>
       <frame>
         <scene>
           <occasion>
	     <date>2000-01-01</date>
             <time zone='+02:00'>12:30</time>
	   </occasion>
           <location>
             <country>country-name</country>
             <city>city-name</city>
           </location>
         </scene>
       </frame>
     </defaults>

     <frame id='01'>
       <scene>
         <occasion>
           <time>
             <?merge-reject @zone?>
           </time>
         </occasion>
         <location>
           <?merge-reject city?>
         </location>
       </scene>
     </frame>

   </roll> 
 </photo>

where defaults expansion results in the frame with id='01' having the defaults content merged in, with the exception of the attribute zone and the element city.

Finally, note that the defaults mechanism is not yet completely stable, and may still be subject to modification. If changes are made, every effort will be made to support automatic conversion to a new mechanism via the pmlupgrade utility.

Recommended Frame Numbering System

The PhotoML DTD assumes that film rolls, frames, etc. are assigned unique identifiers. This section describes a recommended numbering system for photographic images, to be used within PhotoML documents. The general format consists of a full or partial date (that is, a year, a year and month, or a year, month, and day), a number within a grouping for that partial date (for example, a number for a roll of film started on the date part of the identifier), and a frame number with respect to the grouping (for example, a frame number within the roll). In the following forms year denotes a four digit number, month denotes a two digit number (range 01 to 12), day denotes a two digit number (range 01 to 31), and roll number, digital media number, and frame number denote two or three digit numbers with leading zeros where necessary.

Roll Film

The recommended forms are

<year>r<roll number>f<frame number>

or

<year>-<month>r<roll number>f<frame number>

For example, 2001r31f08 denotes frame 8 on roll 31 of the year 2001, while 2001-05r03f12 denotes frame 12 on roll 3 of May 2001.

Digital Camera Images

The recommended forms are

<year>d<digital media number>f<frame number>

or

<year>-<month>d<digital media number>f<frame number>

or

<year>-<month>-<day>d<frame number>

For example, 2000d020f12 denotes frame 12 on compact flash card 20 (assuming a policy of assigning a new number each time an empty card is loaded) of the year 2000, while 2000-01d03f09 denotes frame 9 on compact flash card 3 of January 2000, and 2000-02-21d45 denotes frame 45 taken on 21 February 2000.

Sheet Film

The recommended forms are

<year>-<month>s<frame number>

or

<year>-<month>-<day>s<frame number>

For example, 2002-10s05 denotes frame 5 taken during October 2002, while 2002-03-09s02 denotes frame 2 taken on 9 October 2002.

Image Identifiers

An image identifier specifies a specific version of an image derived via editing of an original frame. The recommended form of an image identifier is

<frame identifier>n<version number>

where version number is a two digit number representing the specific version. For example, if two differently cropped images are derived from a scan of frame 2001r31f08, they may be assigned image numbers 2001r31f08n01 and 2001r31f08n02.

Acknowledgments

Thanks to Stephen Darlington and Oskar Ojala for valuable comments and suggestions. Oskar Ojala has also made a number of contributions to the distribution, including the detailed.xsl XSLT stylesheet.

A. XML Editing Tools

A number of XML editing tools are available, including open source, shareware, and commercial products for a variety of platforms.

Emacs/XEmacs

The emacs and xemacs editors are highly recommended, both of which provide XML editing support via the following extension packages:

psgml A major mode for editing SGML and XML
tdtd A major mode for editing DTDs
xslide A major mode for editing XSL stylesheets
css-mode A major mode for editing CSS stylesheets

The psgml package relies on the nsgml parser for validation. The environment variable SGML_SEARCH_PATH needs be set so that the PhotoML DTD can be found; for editing after building the PhotoML distribution, but prior to installation, the following command issued from the distribution root directory will work for csh/tcsh:

setenv SGML_SEARCH_PATH `(cd dtd; pwd)`

or for sh/bash:

SGML_SEARCH_PATH=`(cd dtd; pwd)`; export SGML_SEARCH_PATH

After installation, this environment variable should be set to the directory in which the DTD, entities etc. are installed - /usr/local/share/photoml/dtd by default.

B. PhotoML DTD



                 PhotoML: Photo Description Markup Language
                 Version: 0.13       Date: 12 November 2010

           The recommended formal public identifier for this DTD is:

                      "-//BW//DTD PhotoML 0.13//EN"

        Please consult the comments in this file, and the notes in the 
        PhotoML distribution documentation.


        Copyright © 2002-2010   Brendt Wohlberg  <photoml@wohlberg.net>

        This is free software; you can redistribute it and/or modify it 
        under the terms of version 2 of the GNU General Public License 
        at http://www.gnu.org/licenses/gpl-2.0.txt.

        This DTD is distributed in the hope that it will be useful, but
        WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
        GNU General Public License for more details.
        
        
        Acknowledgement: Thanks to Stephen Darlington and Oskar Ojala for 
        valuable comments and suggestions.

Parameter Entities

xml-lang-attribute

The language specification attribute

Definition "xml:lang NMTOKEN #IMPLIED"

Text

Unrestricted text string

Definition "#PCDATA"

Integer

An integer

Definition "#PCDATA"

PositiveInteger

A positive integer (including zero)

Definition "#PCDATA"

Real

A real number

Definition "#PCDATA"

Rational

A rational number, expressed either as a decimal fraction or in numerator/denominator form

Definition "#PCDATA"

Fraction

A fraction, expressed either as a real number, or as the quotient of two integer or real numbers

Definition "#PCDATA"

HexString

A string of hexadecimal digits

Definition "#PCDATA"

YearMonth

A date string without the day

Definition "#PCDATA"

Date

A date

Definition "#PCDATA"

Time

A time

Definition "#PCDATA"

DateTime

A date and time

Definition "#PCDATA"

TimeInterval

A time interval

Definition "#PCDATA"

EmailAddress

An email address

Definition "#PCDATA"

PhoneNumber

A phone number

Definition "#PCDATA"

CompassDirection

A compass direction

Definition "#PCDATA"

ElevationAngle

An elevation angle

Definition "#PCDATA"

Latitude

A latitude value

Definition "#PCDATA"

Longitude

A longitude value

Definition "#PCDATA"

Elements

photo

The root element contains optional default settings, photograph description elements roll (for roll film), sheet (for sheet film), and digital (for photographs taken using a digital camera), and digimage elements describing specific digital images, either direct from a camera or scanner, or derived via editing, composition etc.

Content model (defaults?, (roll | sheet | digital | digimage | digimage-set)+)+
Attributes xml:lang NMTOKEN #IMPLIED
Used inside  

defaults

Elements contained within a defaults element provide default values for the corresponding elements in which the relevant information has not been specified. A full description of the semantics of this element is rather lengthy, and may be found in the accompanying documentation.

Content model (film?, processing?, frame?, properties?, history?)
Attributes combine (merge|replace) 'merge'
Used inside photo | roll | digital | frame-set | digimage-set

roll

The details of a roll of film (e.g. 35mm, APS, 120). Optional film and processing descriptions are followed by a sequence of optional loading details, optional defaults (to be applied to the following frames), frame descriptions, and optional unloading details. A defaults element must always precede at least one frame element, and load and unload elements, if present, must respectively precede and follow some group of frame elements. The id attribute specifies an identity/name assigned to the roll.

Content model (collection*, description?, film?, processing?, (load?, (defaults?, (frame | frame-set))+, unload?)+, note?)
Attributes id NMTOKEN #REQUIRED
Used inside photo

sheet

The details of a single sheet of film (e.g. 4x5, 8x10). Optional film, processing and loading descriptions precede the single frame description, which is followed by an optional unloading description. The id attribute specifies an identity/name assigned to the sheet.

Content model (collection*, film?, processing?, load?, frame, unload?, note?)
Attributes id NMTOKEN #REQUIRED
Used inside photo

digital

The details of a sequence of digital photographs. Each group of frame descriptions may be preceded by a defaults element. The id attribute specifies an identity/name assigned to the digital sequence.

Content model (collection*, description?, (defaults?, (frame | frame-set))+, note?)
Attributes id NMTOKEN #REQUIRED
Used inside photo

collection

A collection of photograph descriptions that should be grouped together. Particularly useful for sheet film, since each sheet element describes a single photo, but also useful, for example, for a number of roll film descriptions for the same day, event, trip etc. The id attribute allows an identity/name to be assigned to the collection, the cgid attribute provides a collection based id for the group (roll, digital, or sheet), and the optional fstfid and lstfid specify initial and final frame ids for a subset of the frames in the group.

Content model (description?, note?)
Attributes id NMTOKEN #REQUIRED
  cgid NMTOKEN #REQUIRED
  fstfid NMTOKEN #IMPLIED
  lstfid NMTOKEN #IMPLIED
Used inside roll | sheet | digital

description

A brief description of the parent element. Provides a description of the scene or location for a specific frame when a child of the scene or location elements, or of an entire collection, roll, or digital photography session, providing information relevant to all of the frames within the grouping, when a child of the collection, roll, or digital elements.

Content model %Text;
Attributes xml:lang NMTOKEN #IMPLIED
Used inside roll | digital | collection | scene | location | estimation | operation

note

A note for miscellaneous details of the parent element.

film

A description of the film used.

Content model (make?, name?, speed?, process?, type?, format?, expiry?, note?)
Used inside defaults | roll | sheet

make

The manufacturer of the product, e.g. Fuji (when the parent element is film).

Content model %Text;
Used inside film | developer | body | lens | device | hardware

name

The name of a person, business, or product, e.g. Velvia (when the parent element is film).

Content model %Text;
Used inside film | lab | developer | photographer | owner | person | object | software

speed

The ISO film speed, e.g. 50.

Content model %PositiveInteger;
Used inside film

process

The appropriate film developing process. Recommended values are C41 (standard negative film), E6 (standard slide film), K14 (Kodachrome) and B&W (black and white). A custom designation should be used for processes not listed here. As a child of the film element, this indicates the designated process of the film. In the case of cross-processing, a different process may be specified as a child of the developing element.

Content model %Text;
Used inside film | developing

type

The type of a film (recommended values for film type are colour positive, colour negative, b&w positive, and b&w negative), camera body (e.g. SLR, TLR, rangefinder), or lens (e.g. zoom, prime).

Content model %Text;
Used inside film | body | lens

format

The film format. Recommended values are APS, 35mm (or 135), 120 or 220 for medium format, and the film size for large format.

Content model %Text;
Used inside film

expiry

The film expiry (expiration in the US) date. The format is YYYY-MM since film expiry dates usually only specify a year and month.

Content model %YearMonth;
Used inside film

processing

A description of the film processing.

Content model (lab?, tag?, date?, time?, developing?, note?)
Used inside defaults | roll | sheet

tag

The number of the double/triple check tag affixed to the film by the lab.

Content model %Text;
Used inside processing

date

A date, represented in the format YYYY[-MM[-DD]].

Content model %Date;
Used inside processing | load | unload | occasion | measurement | origin | editing

time

A time, represented in the format hh[:mm[:ss[.ss*]]]. The optional zone attribute represents the time zone in the format (+|-)hh[:mm].

Content model %Time;
Attributes zone CDATA #IMPLIED
Used inside processing | load | unload | occasion | measurement | origin | editing

lab

The lab that developed the film. The optional href attribute represents the laboratory web page.

Content model (name, address?, phone?, fax?, email?, note?)
Attributes href CDATA #IMPLIED
Used inside processing

address

The address of a person or business.

Content model %Text;
Used inside lab | photographer | owner | person | object

phone

The phone number of a person or business.

Content model %PhoneNumber;
Used inside lab | photographer | owner | person

fax

The fax number of a person or business.

Content model %PhoneNumber;
Used inside lab | photographer | owner | person

email

The email address of a person or business.

Content model %EmailAddress;
Used inside lab | photographer | owner | person

developing

A description of the development stage of processing.

Content model (process?, shift?, developer?, method?, agitation?, temperature?, duration?, note?)
Used inside processing

shift

The number of stops push or pull applied during processing.

Content model %Real;
Attributes type (push|pull) #REQUIRED
Used inside developing

method

The development method, e.g. daylight tank, tray etc.

Content model %Text;
Used inside developing

agitation

Description of the agitation during development.

Content model %Text;
Used inside developing

temperature

The temperature of the developer solution (in degrees Celcius by default).

Content model %Real;
Attributes units CDATA '°C'
Used inside developing

duration

The amount of time the film spent in the developer, represented in the form %m:%s (minutes:seconds).

Content model %TimeInterval;
Used inside developing

developer

The developer solution used.

Content model (make?, name?, dilution?, note?)
Used inside developing

dilution

The dilution of the developer solution.

Content model %Text;
Used inside developer

load

Film loading details.

Content model (date?, time?, note?)
Used inside roll | sheet

unload

Film unloading details.

Content model (date?, time?, note?)
Used inside roll | sheet

frame-set

A container allowing the scope of defaults elements to be restricted to the contained set of frame elements.

Content model (defaults?, ((frame | frame-set)+, defaults?)+)
Used inside roll | digital | frame-set

frame

The frame element describes a single frame in a roll of film or sequence of digital photos, and also describes the single frame on a piece of sheet film. The id attribute should be an identifying number assigned in chronological sequence (e.g. 01, 02 etc.). If the actual frame number marked on the film differs from the id, it may be recorded using the fn attribute. The fn attribute is also useful in other situations, e.g. when the camera exposes film beginning at the end, so the the id numbers increase in chronological order while the fn values decrease. A frame that is not a child of a digital element should not have a digimage child element.

Content model (photographer?, ipr?, scene?, equipment?, exposure?, focus?, size?, evaluation?, condition?, digimage?, index-image?, note?)
Attributes id NMTOKEN #IMPLIED
  fn CDATA #IMPLIED
Used inside defaults | roll | sheet | digital | frame-set

size

The physical size of the frame. The value may be specified as actual physical dimensions in the format <width>x<height> (e.g. a value of "24x36" with units "mm" for standard 135 (35mm) film frames, or a value of "56x41.5" with units "mm" for 645 frames on 120 film), in which case the units attribute must be specified, or as standard frame size designations (e.g. "645", "6x6", "6x7", etc. on 120 film, or "4x5", "8x10" etc. large format film), in which case the units attribute must be omitted as an indication that the value does not represent an actual physical measurement.

Content model %Text;
Attributes units CDATA #IMPLIED
Used inside frame

condition

A description of any damage, such as scratches, to a frame.

Content model %Text;
Attributes xml:lang NMTOKEN #IMPLIED
Used inside frame

index-image

The index-image allows the specification of the location of an index image suitable for viewing in an image index, and should therefore be small enough for convenient display in a web browser (for example), but larger than a thumbnail. This facility is useful for constructing indices of frame descriptions, or, within digimage elements, when the actual digital image being described is too large for convenient display in this context.

Content model EMPTY
Attributes href CDATA #IMPLIED
Used inside frame | digimage

photographer

The name and other details of the photographer. The optional href attribute represents the photographer's web page.

Content model (name, address?, phone?, fax?, email?, note?)
Attributes href CDATA #IMPLIED
Used inside frame

ipr

Intellectual Property Rights details

Content model (copyright?, owner?, note?)
Used inside frame

copyright

A copyright statement

Content model %Text;
Attributes xml:lang NMTOKEN #IMPLIED
Used inside ipr

owner

Details of the copyright owner. The optional href attribute represents the owner's web page.

Content model (name, address?, phone?, fax?, email?)
Attributes href CDATA #IMPLIED
Used inside ipr

scene

A description of the scene depicted in the frame

Content model (occasion?, location?, description?, caption?, genre?, keywords?, content?, note?)
Used inside frame

caption

A short descriptive caption for the photograph.

Content model %Text;
Attributes xml:lang NMTOKEN #IMPLIED
Used inside scene

genre

The genre of the scene, e.g. portrait, landscape, sport, travel, macro etc.

Content model %Text;
Used inside scene

keywords

Keywords relevant to the description of the scene.

Content model %Text;
Attributes xml:lang NMTOKEN #IMPLIED
Used inside scene

occasion

A description of when the photograph was taken.

Content model (date?, time?, event?, note?)
Used inside scene

event

A description of the event at which the photo was taken.

Content model %Text;
Attributes xml:lang NMTOKEN #IMPLIED
Used inside occasion

location

A description of the location at which the photo was taken. The content model is intended to allow a wide range of locations to be described, but this flexibility also allows incoherent choices, which should be avoided. These descriptions will usually follow one of the patterns: country,region,...,city,... (indicating a location within the borders of some country), ocean,sea,island,... (indicating a location on an island that may be a possession of, but is not considered to be within the borders of, any country), ocean,sea,description (indicating a location removed from any land mass, e.g. on a ship at sea), continent,region,... (indicating a location on a continent that is not within the borders of any country - the continent in question will invariably be Antarctica). With the exception of the description element, child elements with text content should contain only the name of the associated location component, and not a descriptive sentence.

Content model (((ocean?, sea?, island?) | (continent?, country?)), region?, subregion?, district?, city?, subcity?, subsubcity?, area?, subarea?, road?, place?, point?, description?, coordinates?, direction?, note?)
Used inside scene

ocean

If the location is at sea, at a distance from a continent or island, the ocean may be specified.

Content model %Text;
Attributes xml:lang NMTOKEN #IMPLIED
Used inside location

sea

The sea, if any, within the relevant ocean (e.g. the Andaman Sea is part of the Indian Ocean).

Content model %Text;
Attributes xml:lang NMTOKEN #IMPLIED
Used inside location

island

An island within the specified ocean or sea. This element is intended for islands which may be posessions of, but are not considered an integral part of any country.

Content model %Text;
Attributes xml:lang NMTOKEN #IMPLIED
Used inside location

continent

The continent of the location. This would usually be omitted, but would be used if the location is not part of any country (e.g. a part of Antarctica).

Content model %Text;
Attributes xml:lang NMTOKEN #IMPLIED
Used inside location

country

The country of the location.

Content model %Text;
Attributes xml:lang NMTOKEN #IMPLIED
Used inside location

region

A region within the location. The type attribute may be used to specify the type of region (e.g. province, state, etc.). For example, in the US, typical usage would be to use the region element to represent a state, and the subregion or district element to represent a county, while in Italy a region element would represent an official region, and a subregion element would represent a province.

Content model %Text;
Attributes type CDATA #IMPLIED
  xml:lang NMTOKEN #IMPLIED
Used inside location

subregion

A subdivision of the region. The type attribute may be used to specify the type of subdivision.

Content model %Text;
Attributes type CDATA #IMPLIED
  xml:lang NMTOKEN #IMPLIED
Used inside location

district

A subdivision of the subregion, when necessary. May also be a direct subdivision of the region when the subregion is omitted. The type attribute may be used to specify the type of subdivision.

Content model %Text;
Attributes type CDATA #IMPLIED
  xml:lang NMTOKEN #IMPLIED
Used inside location

city

The city of the location.

Content model %Text;
Attributes xml:lang NMTOKEN #IMPLIED
Used inside location

subcity

A subdivision of the city, such as a suburb, borough, or ward. The type attribute may be used to specify the type of subdivision (e.g. an arrondissement of Paris or a ku (ward) of Tokyo).

Content model %Text;
Attributes type CDATA #IMPLIED
  xml:lang NMTOKEN #IMPLIED
Used inside location

subsubcity

A subdivision of the subcity, when necessary (for example, Asakusa is a subdivision of Taito-ku, which is a ward of Tokyo). The type attribute may be used to specify the type of subdivision.

Content model %Text;
Attributes type CDATA #IMPLIED
  xml:lang NMTOKEN #IMPLIED
Used inside location

area

The area is intended for a level of detail below that of city, when a city is specified (e.g. `Central Park'), or below that of district when there is no relevant city (e.g. `Kruger National Park'). The type attribute may be used to specify the type of subdivision.

Content model %Text;
Attributes type CDATA #IMPLIED
  xml:lang NMTOKEN #IMPLIED
Used inside location

subarea

The subarea is intended for a level of detail below that of area (e.g. 'Conservatory Garden' when the area is 'Central Park', or 'Skukuza Camp' when the area is `Kruger National Park').

Content model %Text;
Attributes type CDATA #IMPLIED
  xml:lang NMTOKEN #IMPLIED
Used inside location

road

A road or city street.

Content model %Text;
Attributes xml:lang NMTOKEN #IMPLIED
Used inside location

place

The place is intended for a level of detail below that of area, when appropriate. The type attribute may be used to specify the type of subdivision.

Content model %Text;
Attributes xml:lang NMTOKEN #IMPLIED
Used inside location

point

The point is intended for a level of detail below that of place, when necessary.

Content model %Text;
Attributes xml:lang NMTOKEN #IMPLIED
Used inside location

coordinates

The (latitude, longitude, altitude) coordinates (e.g. obtained from a GPS device) of the location. The datum attribute specifies the map datum for the coordinate system, which is WGS 84 by default. The relevance attribute specifies whether the coordinates represent an estimate of the specific point at which the photo was taken, or merely indicate the general area (e.g. if the photo was taken at a significant monument, the coordinates might be copies from the wikipedia entry for that monument). The uncertainty attribute provides an estimate of the uncertainty (in units of metres) of the coordinates. When the relevance is set to "area" and an uncertainty estimate is provided, the implication is that the unknown "point" coordinates lie within the uncertainty radius of the provided coordinates.

Content model (latitude?, longitude?, altitude?, measurement?, estimation?, note?)
Attributes datum CDATA 'WGS 84'
  relevance (point|area) #IMPLIED
  uncertainty CDATA #IMPLIED
Used inside location

latitude

The location latitude.

Content model %Latitude;
Used inside coordinates | measurement

longitude

The location longitude.

Content model %Longitude;
Used inside coordinates | measurement

altitude

The location altitude (in metres by default). The optional reference attribute specifies whether the specified altitude is Above Mean Sea Level or Above Ground Level.

Content model %Real;
Attributes units CDATA 'm'
  reference (amsl|agl) #IMPLIED
Used inside coordinates | measurement

measurement

Details of the measurement of the location coordinates. Note that measurement implies the use of a GPS receiver or other navigation device, while estimation refers to a (usually) less reliable approach, by use of a map or satellite imagery with coordinates, or by comparison with a separate geotagged image of approximately the same scene. The optional association attribute indicates whether the location information was associated with the photo at the time of creation ("immediate"), by use of a GPS device tethered to a DSLR, for example, or at a later stage ("delayed"), by correlating a GPS log with an EXIF time stamp, for example.

Content model (device?, date?, time?, latitude?, longitude?, altitude?, hdop?, vdop?, pdop?, note?)
Attributes association (immediate|delayed) #IMPLIED
Used inside coordinates

hdop

Horizontal Dilution of Precision (of a GPS measurement).

Content model %Real;
Used inside measurement

vdop

Vertical Dilution of Precision (of a GPS measurement).

Content model %Real;
Used inside measurement

pdop

Positional Dilution of Precision (of a GPS measurement).

Content model %Real;
Used inside measurement

estimation

Details of the estimation of the coordinates, e.g. by locating relevant features on a map. Typically only one of the measurement or estimation elements will be specified, but if both are present, the implication is that the measured coordinates were modified based on some other method of estimating the position. For example, if GPS data are available, but are inaccurate due to poor reception, the coordinates may be estimated by using a recognised location on a map, but it may still be desired to record the measured location in case the estimate is later found to be poor.

Content model ((source-frame | source-ref)?, description?)
Used inside coordinates

source-frame

If the coordinates are estimated by comparing the scene with another photo with known coordinates, and which has been assigned a group-id and frame-id, the source-frame element may be used to provide relevant information on the geotagged photo, and the group-id and frame-id attributes should provide its corresponding id tags.

Content model %Text;
Attributes group-id NMTOKEN #IMPLIED
  frame-id NMTOKEN #IMPLIED
Used inside estimation

source-ref

If the approximate coordinates are obtained from some internet resource, the source-ref element may be used to describe the resource, and the href attribute should provide a link to the relevant resource (e.g. a wikipedia entry).

Content model %Text;
Attributes href CDATA #IMPLIED
Used inside estimation

direction

The direction in which the camera was pointed (i.e. from the viewpoint to the scene; coordinates are usually considered to be of the scene viewpoint, and always have this interpretation when direction is specified).

Content model (azimuth?, elevation?)
Used inside location

azimuth

The compass direction of the scene from the viewpoint (e.g. "0" for North, "90" for East, etc.) in the range 0 to 360 (degrees).

Content model %CompassDirection;
Used inside direction

elevation

The elevation angle of the scene from the viewpoint (e.g. "0" for horizontal, "90" for directly upwards, etc.) in the range -90 to 90 (degrees).

Content model %ElevationAngle;
Used inside direction

content

A detailed description of the scene content.

Content model ((person | object)+ | segment+)
Used inside scene

person

The optional href attribute represents the person's web page.

Content model (name, address?, phone?, fax?, email?)
Attributes href CDATA #IMPLIED
Used inside content | segment

object

The optional type and href attributes represent the object type (e.g. building, vehicle) and a URL associated with the object (e.g. for a museum).

Content model (name?, address?, note?)
Attributes type CDATA #IMPLIED
  href CDATA #IMPLIED
Used inside content | segment

segment

A segment of the scene. The label attribute allows identification of segments (e.g. foreground, upper-left, etc.

Content model (segment | person | object)+
Attributes label CDATA #IMPLIED
Used inside content | segment

equipment

A description of the camera and associated equipment.

Content model (body?, body-attachment?, lens?, lens-attachment?, illumination?, support?, note?)
Used inside frame

body

The camera body. While often fixed for a particular roll, it is included here since it forms part of the equipment, and is also not always fixed (e.g. APS mid-roll roll change).

Content model (make?, model?, serial?, type?, note?)
Used inside equipment

body-attachment

An accessory attached to the body, e.g. motor-drive, multi-function back

Content model (device+, note?)
Used inside equipment

lens

A lens.

Content model (make?, model?, serial?, type?, note?)
Used inside equipment

lens-attachment

An accessory attached to the lens, e.g. teleconverter, extension-tube, diopter, filter, lens-hood.

Content model (device+, note?)
Used inside equipment

illumination

An illumination source, e.g. flash.

Content model (device+, note?)
Used inside equipment

support

A support, e.g. tripod leg set, ball-head, monopod.

Content model (device*, note?)
Used inside equipment

device

A description of an item of equipment. The optional type attribute represents the device type (e.g. filter, ball-head, flash).

Content model (make?, model?, serial?, firmware?, note?)
Attributes type CDATA #IMPLIED
Used inside measurement | body-attachment | lens-attachment | illumination | support

model

The model number/code of a photographic product.

Content model %Text;
Used inside body | lens | device | hardware

serial

The serial number/code of a photographic product.

Content model %Text;
Used inside body | lens | device | hardware

firmware

The firmware version.

Content model %Text;
Used inside device | hardware

exposure

A description of film exposure and camera metering settings.

Content model (aperture?, shutter?, exp-comp?, flash?, flash-comp?, rated-speed?, mode?, metering?, note?)
Used inside frame

aperture

The lens aperture in f/-stops.

Content model %Real;
Used inside exposure

shutter

The shutter speed in seconds.

Content model %Fraction;
Used inside exposure

exp-comp

Exposure compensation in EV units.

Content model %Real;
Used inside exposure

flash

Flash usage description.

Content model %Text;
Used inside exposure

flash-comp

Flash exposure compensation in EV units.

Content model %Real;
Used inside exposure

rated-speed

ISO speed setting of the camera (useful if different from the actual film ISO speed, or for a digital camera).

Content model %PositiveInteger;
Used inside exposure

mode

Exposure mode (e.g. program, manual, shutter priority) for an automated camera.

Content model %Text;
Used inside exposure | focus

metering

Metering mode (e.g. matrix, centre-weighted, spot).

Content model %Text;
Used inside exposure

focus

Information relevant to lens focus.

Content model (focal-length?, focal-distance?, mode?, note?)
Used inside frame

focal-length

The lens focal length (useful when the lens doesn't have a fixed focal length), in millimeters by default.

Content model %Real;
Attributes units CDATA 'mm'
Used inside focus

focal-distance

The focal distance (in metres by default).

Content model %Real;
Attributes units CDATA 'm'
Used inside focus

evaluation

An evaluation of the merits of the frame. If a score attribute is specified, it represents the aggregate rating for the frame, independent of the score values for child elements; if it is not specified, the aggregate score should be computed as a weighted average of the score attributes of child elements.

Content model (artistic?, technical?)
Attributes score CDATA #IMPLIED
Used inside frame

artistic

An evaluation of the artistic merits of the frame. The element content is a comment on the evaluation, and a numeric rating is provided by the score attribute.

Content model %Text;
Attributes score CDATA #IMPLIED
Used inside evaluation

technical

An evaluation of the technical merits (focus, depth of field, etc.) of the frame. The element content is a comment on the evaluation, and a numeric rating is provided by the score attribute.

Content model %Text;
Attributes score CDATA #IMPLIED
Used inside evaluation

digimage

The details of an individual digital image. The optional href attribute represents the location of the digital image file being described. The group-id attribute is the id of the roll, sheet, or digital element in which the corresponding photographic frame is described, the frame-id attribute is the id of that frame element, and the image-id provides an id number for the specific digital file representing that frame (e.g. two scans of the same film frame would have the same group-id and frame-id, but different image-id.

Content model (properties?, history?, index-image?, note?)
Attributes href CDATA #IMPLIED
  group-id NMTOKEN #IMPLIED
  frame-id NMTOKEN #IMPLIED
  image-id NMTOKEN #IMPLIED
Used inside photo | frame | digimage-set

digimage-set

A container allowing the scope of defaults elements to be restricted to the contained set of digimage elements.

Content model (defaults?, ((digimage | digimage-set)+, defaults?)+)
Used inside photo | digimage-set

properties

Details of the image properties.

Content model ((width, height)?, bit-depth?, file-format?, icc-profile?, file-hash?, image-hash?, note?)
Used inside defaults | digimage

width

The image width in pixels

Content model %PositiveInteger;
Used inside properties

height

The image height in pixels

Content model %PositiveInteger;
Used inside properties

bit-depth

The bit depth of a sample, commonly 8 or 12 bits per colour band per pixel.

Content model %PositiveInteger;
Used inside properties

file-format

The image format. This may either be described by using the std attribute within an empty element, or omitting the std attribute and describing the format within the element content. When possible, the former approach is preferred.

Content model %Text;
Attributes std (bmp|crw|cr2|dng|jpeg|j2k|nef|pef|png|psd|tiff) #IMPLIED
Used inside properties

icc-profile

The ICC profile for the image colour space. The optional href refers to the relevant ICC profile specification file.

Content model %Text;
Attributes href CDATA #IMPLIED
Used inside properties

file-hash

The result of a hash function applied to the image file. Not as reliable as the hash value of the image content (i.e. the raw decoded bitmap representation of the image, which is not dependent on the specific image file format), but may be faster to compute in some circumstances, and therefore useful for an initial match test.

Content model %HexString;
Attributes type (md5|sha-256) 'md5'
Used inside properties | source-image

image-hash

The result of a hash function applied to the image content. Useful for ensuring a correct match between the image description and the image data file.

Content model %HexString;
Attributes type (md5|sha-256) 'md5'
Used inside properties | source-image

history

Details of the creation and editing history of the image. More than one editing element is allowed so that multiple stages of editing, using different software, may be described.

Content model (origin?, editing*, note?)
Used inside defaults | digimage

origin

Details of the origin of the image; either a film scanner or digital camera, or source image(s) from which it is derived via editing (multiple source images are possible when, for example, a panoramic image is composed of a number of smaller images).

Content model ((date?, time?, (scanner | camera)?) | source-image+)
Used inside history

editing

Details of the editing operations applied to the image.

Content model (date?, time?, software?, operations?, note?)
Used inside history

scanner

The details of the scanner and scanning process.

Content model (hardware?, software?, settings?, note?)
Used inside origin

camera

The details of the digital camera.

Content model (hardware?, settings?, note?)
Used inside origin

source-image

A description of the source image to which editing operations were applied to derive the image described by the image element. The group-id and frame-id attributes should only be used when they differ from the respective values of the image element.

Content model (file-hash?, image-hash?)
Attributes href CDATA #IMPLIED
  group-id NMTOKEN #IMPLIED
  frame-id NMTOKEN #IMPLIED
  image-id NMTOKEN #IMPLIED
Used inside origin

software

The software used to perform the editing.

Content model (publisher?, name?, version?, note?)
Used inside editing | scanner

operations

The details of the editing operations.

Content model operation+
Used inside editing

hardware

The details of the camera or scanner hardware.

Content model (make?, model?, serial?, firmware?, note?)
Used inside scanner | camera

settings

The details of the camera, scanner, or editing software settings.

Content model (setting+, note?)
Used inside scanner | camera | operation

publisher

The name of the company that developed the software.

Content model %Text;
Used inside software

version

The version number of the software.

Content model %Text;
Used inside software

operation

The details of an individual edit. In addition to the text description, further details may be specified by providing the relevant command line when editing was performed via a command shell, or settings for operations applied via a GUI.

Content model (description?, (command | settings)?, note?)
Used inside operations

command

The command line used to apply the edit.

Content model %Text;
Used inside operation

setting

The setting element describes software configuration settings during scanning. The name attribute should contain the name of the setting (e.g. multi-pass, ICE), and the element content represents the corresponding value.

Content model %Text;
Attributes name CDATA #REQUIRED
  units CDATA #IMPLIED
Used inside settings

./photoml-0.28/docs/sections/0000755000175000017500000000000011530542510015353 5ustar brendtbrendt./photoml-0.28/docs/sections/distrib.xml0000644000175000017500000002702511467603574017564 0ustar brendtbrendt
The Distribution The distribution consists of XML document type definitions, XSLT stylesheets for generating HTML formatted versions of the photo description XML, and various software tools. Note that the name PhotoML is used to describe the XML format defined by the PhotoML DTD as well as the entire distribution; the intended meaning should be clear from the context in which the name is used.
License Use of this distribution is subject to the terms of the GNU General Public License (version 2), a copy of which is included in the distribution. If anyone wishing to use this distribution finds the GPL too restrictive, I will consider requests to make it available under an alternative open source license.
Platforms The primary content of the dtd, xsd, xsl, and xml directories should be platform independent, but the configuration and installation files require a UNIX environment. The scripts in the tools directory have been tested under Linux on an i386 architecture, but should work on any UNIX platform with recent versions of libxml2 and libxslt installed. MS Windows versions of the utility scripts are not currently available, but should be easily ported from shell script to a scripting language available on that platform. Windows users may, however, wish to try installing under the cygwin environment.
Prerequisites The primary prerequisites, other than basic UNIX shell utilities, are perl, and the libxml2 and libxslt packages. Some of the tools have additional requirements: md5sum Standard on many Linux systems. dcraw Available as source, RPM and deb packages. imageinfo Source, SRPM and Ubuntu source deb packages available. xgrep Source, SRPM and Ubuntu source deb packages available. Date::Manip Perl module available from CPAN. Image::ExifTool Perl module available from CPAN.
Installation The source distribution is available from the PhotoML download page. After unpacking the tar archive, the simplest installation procedure consists of the following commands (executed from the distribution root directory): ./configure make make test make install The final make install usually needs to be performed with root privileges (see the INSTALL file for further details). Using the default configuration, software tools are installed in /usr/local/bin, and the DTD, XSL, and associated files are installed in /usr/local/share/photoml. Users of Red Hat/Fedora or Ubuntu Linux may install the RPM or deb packages available from the PhotoML download page. When installing from RPM or deb packages, software tools are installed in /usr/bin, and the DTD, XSL, and associated files are installed in /usr/share/photoml.
Distribution Content The distribution content is divided up into a number of subdirectories, as described below.
DTD The dtd directory contains the PhotoML DTD and associated files (character set defining external entities) and a catalogue file which is used by libxml2 tools for locating DTDs. The PhotoML DTD defines the primary XML format for describing collections of photographs, and, while still under development, should be reasonably stable. When the DTD is changed, the pmlupgrade utility provides automatic (or semi-automatic, in complex cases) conversion to the new format.
XSL The xsl directory contains XSLT stylesheets for constructing HTML views of PhotoML XML files (in the xsl/html directory), for expansion of defaults elements (in the xsl/defaults directory), for upgrading PhotoML XML files from older DTD versions (in the xsl/upgrade directory), and for supporting the functionality of some of the tools (in the xsl/misc directory).
XML The xml directory contains XML examples of PhotoML photo description and image description files. The top level make command builds HTML views of these files using the XSLT stylesheets in the xsl directory.
Tools The tools directory contains tools for expanding defaults in PhotoML files, validating PhotoML files, constructing HTML representations etc.: pmlcreate Generate PhotoML roll description outline pmldigital Generate PhotoML descriptions of digital images from digital cameras and film scanners pmlexpand Expand and remove defaults in a PhotoML XML file pmlgrep Provides a grep-like utility for PhotoML files pmlindex Constructs an HTML index of PhotoML files pmltrans Transform a PhotoML XML file using the standard PhotoML XSL style sheet pmltoxmp Transform PhotoML data to XMP format pmlupgrade Upgrade PhotoML XML files to latest DTD version pmlvalid Validate PhotoML XML files Further details are provided in the man pages in that directory. Installation of libxml2 and libxslt is required, as the scripts in this directory make use of the xmllint and xsltproc utilities.
Documentation Suprisingly enough, the docs directory contains documentation; the main document source in DocBook format, and viewable documents in HTML, PDF, and text formats.
XSD The xsd directory contains an XML Schema definition that has been auto-generated from the PhotoML DTD by trang. While this schema may be useful to those wishing to use schema based XML tools, it has not been verified to be correct, and should not be considered as the primary document type definition.
./photoml-0.28/docs/sections/acknowledge.xml0000644000175000017500000000075411361730561020375 0ustar brendtbrendt
Acknowledgments Thanks to Stephen Darlington and Oskar Ojala for valuable comments and suggestions. Oskar Ojala has also made a number of contributions to the distribution, including the detailed.xsl XSLT stylesheet.
./photoml-0.28/docs/sections/purpose.xml0000644000175000017500000000571511460350570017607 0ustar brendtbrendt
Purpose This distribution is primarily intended to provide a format (defined by the PhotoML DTD) and tools for describing details of photo creation, processing, and content in a collection of photographs. It is designed to be appropriate for a wide variety of photographic formats, including roll film (such as 35mm and 120/220), sheet film (such as 4x5 and 8x10) and digital images. The type of information represented, while allowing description of details of content, creation etc. for digital images, does not support some of the more low-level housekeeping details that might be necessary in an application such as an online database of digital images. In particular, PhotoML is not yet another web photo gallery generator.
Alternative Formats While alternatives exist, none of them seem to completely fit the role for which PhotoML was designed. Photo RDF has significantly lower complexity than PhotoML, allowing representation of a much smaller set of information, and does not provide any of the photo grouping mechanisms which seem desirable when describing a large collection of photos. DIG35 has higher complexity than PhotoML in some respects, providing support for greater detail for individual images. Since DIG35 is designed as metadata to be attached in the header of a digital image, it also lacks the image grouping facilities of PhotoML, and while DIG35 is intended to become an industry standard, the schema is not completely freely distributed (available on request only, but free for government and educational use).
Further Development PhotoML has received a substantial amount of work, but a number of rough edges still require attention. Comments, suggestions, and contributions (including any involving significant changes) are welcome, and should be directed to photoml@wohlberg.net. There are no immediate plans for a transition from the DTD to an XML Schema as the primary format definition (in contrast to DTDs, there does not yet seem to be much free software supporting editing and validation of schemas), but example schemas auto-generated from the DTD are included in the distribution.
./photoml-0.28/docs/sections/xmledit.xml0000644000175000017500000000531011460351446017552 0ustar brendtbrendt XML Editing Tools A number of XML editing tools are available, including open source, shareware, and commercial products for a variety of platforms.
Emacs/XEmacs The emacs and xemacs editors are highly recommended, both of which provide XML editing support via the following extension packages: psgml A major mode for editing SGML and XML tdtd A major mode for editing DTDs xslide A major mode for editing XSL stylesheets css-mode A major mode for editing CSS stylesheets The psgml package relies on the nsgml parser for validation. The environment variable SGML_SEARCH_PATH needs be set so that the PhotoML DTD can be found; for editing after building the PhotoML distribution, but prior to installation, the following command issued from the distribution root directory will work for csh/tcsh: setenv SGML_SEARCH_PATH `(cd dtd; pwd)` or for sh/bash: SGML_SEARCH_PATH=`(cd dtd; pwd)`; export SGML_SEARCH_PATH After installation, this environment variable should be set to the directory in which the DTD, entities etc. are installed - /usr/local/share/photoml/dtd by default.
./photoml-0.28/docs/sections/photodtd.xml0000644000175000017500000071775311471535445017763 0ustar brendtbrendt PhotoML DTD PhotoML: Photo Description Markup Language Version: 0.13 Date: 12 November 2010 The recommended formal public identifier for this DTD is: "-//BW//DTD PhotoML 0.13//EN" Please consult the comments in this file, and the notes in the PhotoML distribution documentation. Copyright © 2002-2010 Brendt Wohlberg <photoml@wohlberg.net> This is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License at http://www.gnu.org/licenses/gpl-2.0.txt. This DTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Acknowledgement: Thanks to Stephen Darlington and Oskar Ojala for valuable comments and suggestions.
Parameter Entities
<emphasis role="entdeftitle"><anchor id="photo-pe-xml-lang-attribute"/>xml-lang-attribute</emphasis> The language specification attribute Definition "xml:lang NMTOKEN #IMPLIED"
<emphasis role="entdeftitle"><anchor id="photo-pe-Text"/>Text</emphasis> Unrestricted text string Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-Integer"/>Integer</emphasis> An integer Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-PositiveInteger"/>PositiveInteger</emphasis> A positive integer (including zero) Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-Real"/>Real</emphasis> A real number Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-Rational"/>Rational</emphasis> A rational number, expressed either as a decimal fraction or in numerator/denominator form Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-Fraction"/>Fraction</emphasis> A fraction, expressed either as a real number, or as the quotient of two integer or real numbers Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-HexString"/>HexString</emphasis> A string of hexadecimal digits Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-YearMonth"/>YearMonth</emphasis> A date string without the day Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-Date"/>Date</emphasis> A date Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-Time"/>Time</emphasis> A time Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-DateTime"/>DateTime</emphasis> A date and time Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-TimeInterval"/>TimeInterval</emphasis> A time interval Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-EmailAddress"/>EmailAddress</emphasis> An email address Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-PhoneNumber"/>PhoneNumber</emphasis> A phone number Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-CompassDirection"/>CompassDirection</emphasis> A compass direction Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-ElevationAngle"/>ElevationAngle</emphasis> An elevation angle Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-Latitude"/>Latitude</emphasis> A latitude value Definition "#PCDATA"
<emphasis role="entdeftitle"><anchor id="photo-pe-Longitude"/>Longitude</emphasis> A longitude value Definition "#PCDATA"
Elements
<emphasis role="dtdelttitle">photo</emphasis> <anchor id="photo-elt-photo"/> The root element contains optional default settings, photograph description elements roll (for roll film), sheet (for sheet film), and digital (for photographs taken using a digital camera), and digimage elements describing specific digital images, either direct from a camera or scanner, or derived via editing, composition etc. Content model (defaults?, (roll | sheet | digital | digimage | digimage-set)+)+ Attributes xml:lang NMTOKEN #IMPLIED Used inside
<emphasis role="dtdelttitle">defaults</emphasis> <anchor id="photo-elt-defaults"/> Elements contained within a defaults element provide default values for the corresponding elements in which the relevant information has not been specified. A full description of the semantics of this element is rather lengthy, and may be found in the accompanying documentation. Content model (film?, processing?, frame?, properties?, history?) Attributes combine (merge|replace) 'merge' Used inside photo | roll | digital | frame-set | digimage-set
<emphasis role="dtdelttitle">roll</emphasis> <anchor id="photo-elt-roll"/> The details of a roll of film (e.g. 35mm, APS, 120). Optional film and processing descriptions are followed by a sequence of optional loading details, optional defaults (to be applied to the following frames), frame descriptions, and optional unloading details. A defaults element must always precede at least one frame element, and load and unload elements, if present, must respectively precede and follow some group of frame elements. The id attribute specifies an identity/name assigned to the roll. Content model (collection*, description?, film?, processing?, (load?, (defaults?, (frame | frame-set))+, unload?)+, note?) Attributes id NMTOKEN #REQUIRED Used inside photo
<emphasis role="dtdelttitle">sheet</emphasis> <anchor id="photo-elt-sheet"/> The details of a single sheet of film (e.g. 4x5, 8x10). Optional film, processing and loading descriptions precede the single frame description, which is followed by an optional unloading description. The id attribute specifies an identity/name assigned to the sheet. Content model (collection*, film?, processing?, load?, frame, unload?, note?) Attributes id NMTOKEN #REQUIRED Used inside photo
<emphasis role="dtdelttitle">digital</emphasis> <anchor id="photo-elt-digital"/> The details of a sequence of digital photographs. Each group of frame descriptions may be preceded by a defaults element. The id attribute specifies an identity/name assigned to the digital sequence. Content model (collection*, description?, (defaults?, (frame | frame-set))+, note?) Attributes id NMTOKEN #REQUIRED Used inside photo
<emphasis role="dtdelttitle">collection</emphasis> <anchor id="photo-elt-collection"/> A collection of photograph descriptions that should be grouped together. Particularly useful for sheet film, since each sheet element describes a single photo, but also useful, for example, for a number of roll film descriptions for the same day, event, trip etc. The id attribute allows an identity/name to be assigned to the collection, the cgid attribute provides a collection based id for the group (roll, digital, or sheet), and the optional fstfid and lstfid specify initial and final frame ids for a subset of the frames in the group. Content model (description?, note?) Attributes id NMTOKEN #REQUIRED cgid NMTOKEN #REQUIRED fstfid NMTOKEN #IMPLIED lstfid NMTOKEN #IMPLIED Used inside roll | sheet | digital
<emphasis role="dtdelttitle">description</emphasis> <anchor id="photo-elt-description"/> A brief description of the parent element. Provides a description of the scene or location for a specific frame when a child of the scene or location elements, or of an entire collection, roll, or digital photography session, providing information relevant to all of the frames within the grouping, when a child of the collection, roll, or digital elements. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside roll | digital | collection | scene | location | estimation | operation
<emphasis role="dtdelttitle">note</emphasis> <anchor id="photo-elt-note"/> A note for miscellaneous details of the parent element. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside roll | sheet | digital | collection | film | processing | lab | developing | developer | load | unload | frame | photographer | ipr | scene | occasion | location | coordinates | measurement | object | equipment | body | body-attachment | lens | lens-attachment | illumination | support | device | exposure | focus | digimage | properties | history | editing | scanner | camera | software | hardware | settings | operation
<emphasis role="dtdelttitle">film</emphasis> <anchor id="photo-elt-film"/> A description of the film used. Content model (make?, name?, speed?, process?, type?, format?, expiry?, note?) Used inside defaults | roll | sheet
<emphasis role="dtdelttitle">make</emphasis> <anchor id="photo-elt-make"/> The manufacturer of the product, e.g. Fuji (when the parent element is film). Content model %Text; Used inside film | developer | body | lens | device | hardware
<emphasis role="dtdelttitle">name</emphasis> <anchor id="photo-elt-name"/> The name of a person, business, or product, e.g. Velvia (when the parent element is film). Content model %Text; Used inside film | lab | developer | photographer | owner | person | object | software
<emphasis role="dtdelttitle">speed</emphasis> <anchor id="photo-elt-speed"/> The ISO film speed, e.g. 50. Content model %PositiveInteger; Used inside film
<emphasis role="dtdelttitle">process</emphasis> <anchor id="photo-elt-process"/> The appropriate film developing process. Recommended values are C41 (standard negative film), E6 (standard slide film), K14 (Kodachrome) and B&W (black and white). A custom designation should be used for processes not listed here. As a child of the film element, this indicates the designated process of the film. In the case of cross-processing, a different process may be specified as a child of the developing element. Content model %Text; Used inside film | developing
<emphasis role="dtdelttitle">type</emphasis> <anchor id="photo-elt-type"/> The type of a film (recommended values for film type are colour positive, colour negative, b&w positive, and b&w negative), camera body (e.g. SLR, TLR, rangefinder), or lens (e.g. zoom, prime). Content model %Text; Used inside film | body | lens
<emphasis role="dtdelttitle">format</emphasis> <anchor id="photo-elt-format"/> The film format. Recommended values are APS, 35mm (or 135), 120 or 220 for medium format, and the film size for large format. Content model %Text; Used inside film
<emphasis role="dtdelttitle">expiry</emphasis> <anchor id="photo-elt-expiry"/> The film expiry (expiration in the US) date. The format is YYYY-MM since film expiry dates usually only specify a year and month. Content model %YearMonth; Used inside film
<emphasis role="dtdelttitle">processing</emphasis> <anchor id="photo-elt-processing"/> A description of the film processing. Content model (lab?, tag?, date?, time?, developing?, note?) Used inside defaults | roll | sheet
<emphasis role="dtdelttitle">tag</emphasis> <anchor id="photo-elt-tag"/> The number of the double/triple check tag affixed to the film by the lab. Content model %Text; Used inside processing
<emphasis role="dtdelttitle">date</emphasis> <anchor id="photo-elt-date"/> A date, represented in the format YYYY[-MM[-DD]]. Content model %Date; Used inside processing | load | unload | occasion | measurement | origin | editing
<emphasis role="dtdelttitle">time</emphasis> <anchor id="photo-elt-time"/> A time, represented in the format hh[:mm[:ss[.ss*]]]. The optional zone attribute represents the time zone in the format (+|-)hh[:mm]. Content model %Time; Attributes zone CDATA #IMPLIED Used inside processing | load | unload | occasion | measurement | origin | editing
<emphasis role="dtdelttitle">lab</emphasis> <anchor id="photo-elt-lab"/> The lab that developed the film. The optional href attribute represents the laboratory web page. Content model (name, address?, phone?, fax?, email?, note?) Attributes href CDATA #IMPLIED Used inside processing
<emphasis role="dtdelttitle">address</emphasis> <anchor id="photo-elt-address"/> The address of a person or business. Content model %Text; Used inside lab | photographer | owner | person | object
<emphasis role="dtdelttitle">phone</emphasis> <anchor id="photo-elt-phone"/> The phone number of a person or business. Content model %PhoneNumber; Used inside lab | photographer | owner | person
<emphasis role="dtdelttitle">fax</emphasis> <anchor id="photo-elt-fax"/> The fax number of a person or business. Content model %PhoneNumber; Used inside lab | photographer | owner | person
<emphasis role="dtdelttitle">email</emphasis> <anchor id="photo-elt-email"/> The email address of a person or business. Content model %EmailAddress; Used inside lab | photographer | owner | person
<emphasis role="dtdelttitle">developing</emphasis> <anchor id="photo-elt-developing"/> A description of the development stage of processing. Content model (process?, shift?, developer?, method?, agitation?, temperature?, duration?, note?) Used inside processing
<emphasis role="dtdelttitle">shift</emphasis> <anchor id="photo-elt-shift"/> The number of stops push or pull applied during processing. Content model %Real; Attributes type (push|pull) #REQUIRED Used inside developing
<emphasis role="dtdelttitle">method</emphasis> <anchor id="photo-elt-method"/> The development method, e.g. daylight tank, tray etc. Content model %Text; Used inside developing
<emphasis role="dtdelttitle">agitation</emphasis> <anchor id="photo-elt-agitation"/> Description of the agitation during development. Content model %Text; Used inside developing
<emphasis role="dtdelttitle">temperature</emphasis> <anchor id="photo-elt-temperature"/> The temperature of the developer solution (in degrees Celcius by default). Content model %Real; Attributes units CDATA '°C' Used inside developing
<emphasis role="dtdelttitle">duration</emphasis> <anchor id="photo-elt-duration"/> The amount of time the film spent in the developer, represented in the form %m:%s (minutes:seconds). Content model %TimeInterval; Used inside developing
<emphasis role="dtdelttitle">developer</emphasis> <anchor id="photo-elt-developer"/> The developer solution used. Content model (make?, name?, dilution?, note?) Used inside developing
<emphasis role="dtdelttitle">dilution</emphasis> <anchor id="photo-elt-dilution"/> The dilution of the developer solution. Content model %Text; Used inside developer
<emphasis role="dtdelttitle">load</emphasis> <anchor id="photo-elt-load"/> Film loading details. Content model (date?, time?, note?) Used inside roll | sheet
<emphasis role="dtdelttitle">unload</emphasis> <anchor id="photo-elt-unload"/> Film unloading details. Content model (date?, time?, note?) Used inside roll | sheet
<emphasis role="dtdelttitle">frame-set</emphasis> <anchor id="photo-elt-frame-set"/> A container allowing the scope of defaults elements to be restricted to the contained set of frame elements. Content model (defaults?, ((frame | frame-set)+, defaults?)+) Used inside roll | digital | frame-set
<emphasis role="dtdelttitle">frame</emphasis> <anchor id="photo-elt-frame"/> The frame element describes a single frame in a roll of film or sequence of digital photos, and also describes the single frame on a piece of sheet film. The id attribute should be an identifying number assigned in chronological sequence (e.g. 01, 02 etc.). If the actual frame number marked on the film differs from the id, it may be recorded using the fn attribute. The fn attribute is also useful in other situations, e.g. when the camera exposes film beginning at the end, so the the id numbers increase in chronological order while the fn values decrease. A frame that is not a child of a digital element should not have a digimage child element. Content model (photographer?, ipr?, scene?, equipment?, exposure?, focus?, size?, evaluation?, condition?, digimage?, index-image?, note?) Attributes id NMTOKEN #IMPLIED fn CDATA #IMPLIED Used inside defaults | roll | sheet | digital | frame-set
<emphasis role="dtdelttitle">size</emphasis> <anchor id="photo-elt-size"/> The physical size of the frame. The value may be specified as actual physical dimensions in the format <width>x<height> (e.g. a value of "24x36" with units "mm" for standard 135 (35mm) film frames, or a value of "56x41.5" with units "mm" for 645 frames on 120 film), in which case the units attribute must be specified, or as standard frame size designations (e.g. "645", "6x6", "6x7", etc. on 120 film, or "4x5", "8x10" etc. large format film), in which case the units attribute must be omitted as an indication that the value does not represent an actual physical measurement. Content model %Text; Attributes units CDATA #IMPLIED Used inside frame
<emphasis role="dtdelttitle">condition</emphasis> <anchor id="photo-elt-condition"/> A description of any damage, such as scratches, to a frame. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside frame
<emphasis role="dtdelttitle">index-image</emphasis> <anchor id="photo-elt-index-image"/> The index-image allows the specification of the location of an index image suitable for viewing in an image index, and should therefore be small enough for convenient display in a web browser (for example), but larger than a thumbnail. This facility is useful for constructing indices of frame descriptions, or, within digimage elements, when the actual digital image being described is too large for convenient display in this context. Content model EMPTY Attributes href CDATA #IMPLIED Used inside frame | digimage
<emphasis role="dtdelttitle">photographer</emphasis> <anchor id="photo-elt-photographer"/> The name and other details of the photographer. The optional href attribute represents the photographer's web page. Content model (name, address?, phone?, fax?, email?, note?) Attributes href CDATA #IMPLIED Used inside frame
<emphasis role="dtdelttitle">ipr</emphasis> <anchor id="photo-elt-ipr"/> Intellectual Property Rights details Content model (copyright?, owner?, note?) Used inside frame
<emphasis role="dtdelttitle">owner</emphasis> <anchor id="photo-elt-owner"/> Details of the copyright owner. The optional href attribute represents the owner's web page. Content model (name, address?, phone?, fax?, email?) Attributes href CDATA #IMPLIED Used inside ipr
<emphasis role="dtdelttitle">scene</emphasis> <anchor id="photo-elt-scene"/> A description of the scene depicted in the frame Content model (occasion?, location?, description?, caption?, genre?, keywords?, content?, note?) Used inside frame
<emphasis role="dtdelttitle">caption</emphasis> <anchor id="photo-elt-caption"/> A short descriptive caption for the photograph. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside scene
<emphasis role="dtdelttitle">genre</emphasis> <anchor id="photo-elt-genre"/> The genre of the scene, e.g. portrait, landscape, sport, travel, macro etc. Content model %Text; Used inside scene
<emphasis role="dtdelttitle">keywords</emphasis> <anchor id="photo-elt-keywords"/> Keywords relevant to the description of the scene. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside scene
<emphasis role="dtdelttitle">occasion</emphasis> <anchor id="photo-elt-occasion"/> A description of when the photograph was taken. Content model (date?, time?, event?, note?) Used inside scene
<emphasis role="dtdelttitle">event</emphasis> <anchor id="photo-elt-event"/> A description of the event at which the photo was taken. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside occasion
<emphasis role="dtdelttitle">location</emphasis> <anchor id="photo-elt-location"/> A description of the location at which the photo was taken. The content model is intended to allow a wide range of locations to be described, but this flexibility also allows incoherent choices, which should be avoided. These descriptions will usually follow one of the patterns: country,region,...,city,... (indicating a location within the borders of some country), ocean,sea,island,... (indicating a location on an island that may be a possession of, but is not considered to be within the borders of, any country), ocean,sea,description (indicating a location removed from any land mass, e.g. on a ship at sea), continent,region,... (indicating a location on a continent that is not within the borders of any country - the continent in question will invariably be Antarctica). With the exception of the description element, child elements with text content should contain only the name of the associated location component, and not a descriptive sentence. Content model (((ocean?, sea?, island?) | (continent?, country?)), region?, subregion?, district?, city?, subcity?, subsubcity?, area?, subarea?, road?, place?, point?, description?, coordinates?, direction?, note?) Used inside scene
<emphasis role="dtdelttitle">ocean</emphasis> <anchor id="photo-elt-ocean"/> If the location is at sea, at a distance from a continent or island, the ocean may be specified. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">sea</emphasis> <anchor id="photo-elt-sea"/> The sea, if any, within the relevant ocean (e.g. the Andaman Sea is part of the Indian Ocean). Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">island</emphasis> <anchor id="photo-elt-island"/> An island within the specified ocean or sea. This element is intended for islands which may be posessions of, but are not considered an integral part of any country. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">continent</emphasis> <anchor id="photo-elt-continent"/> The continent of the location. This would usually be omitted, but would be used if the location is not part of any country (e.g. a part of Antarctica). Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">country</emphasis> <anchor id="photo-elt-country"/> The country of the location. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">region</emphasis> <anchor id="photo-elt-region"/> A region within the location. The type attribute may be used to specify the type of region (e.g. province, state, etc.). For example, in the US, typical usage would be to use the region element to represent a state, and the subregion or district element to represent a county, while in Italy a region element would represent an official region, and a subregion element would represent a province. Content model %Text; Attributes type CDATA #IMPLIED xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">subregion</emphasis> <anchor id="photo-elt-subregion"/> A subdivision of the region. The type attribute may be used to specify the type of subdivision. Content model %Text; Attributes type CDATA #IMPLIED xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">district</emphasis> <anchor id="photo-elt-district"/> A subdivision of the subregion, when necessary. May also be a direct subdivision of the region when the subregion is omitted. The type attribute may be used to specify the type of subdivision. Content model %Text; Attributes type CDATA #IMPLIED xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">city</emphasis> <anchor id="photo-elt-city"/> The city of the location. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">subcity</emphasis> <anchor id="photo-elt-subcity"/> A subdivision of the city, such as a suburb, borough, or ward. The type attribute may be used to specify the type of subdivision (e.g. an arrondissement of Paris or a ku (ward) of Tokyo). Content model %Text; Attributes type CDATA #IMPLIED xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">subsubcity</emphasis> <anchor id="photo-elt-subsubcity"/> A subdivision of the subcity, when necessary (for example, Asakusa is a subdivision of Taito-ku, which is a ward of Tokyo). The type attribute may be used to specify the type of subdivision. Content model %Text; Attributes type CDATA #IMPLIED xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">area</emphasis> <anchor id="photo-elt-area"/> The area is intended for a level of detail below that of city, when a city is specified (e.g. `Central Park'), or below that of district when there is no relevant city (e.g. `Kruger National Park'). The type attribute may be used to specify the type of subdivision. Content model %Text; Attributes type CDATA #IMPLIED xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">subarea</emphasis> <anchor id="photo-elt-subarea"/> The subarea is intended for a level of detail below that of area (e.g. 'Conservatory Garden' when the area is 'Central Park', or 'Skukuza Camp' when the area is `Kruger National Park'). Content model %Text; Attributes type CDATA #IMPLIED xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">road</emphasis> <anchor id="photo-elt-road"/> A road or city street. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">place</emphasis> <anchor id="photo-elt-place"/> The place is intended for a level of detail below that of area, when appropriate. The type attribute may be used to specify the type of subdivision. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">point</emphasis> <anchor id="photo-elt-point"/> The point is intended for a level of detail below that of place, when necessary. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location
<emphasis role="dtdelttitle">coordinates</emphasis> <anchor id="photo-elt-coordinates"/> The (latitude, longitude, altitude) coordinates (e.g. obtained from a GPS device) of the location. The datum attribute specifies the map datum for the coordinate system, which is WGS 84 by default. The relevance attribute specifies whether the coordinates represent an estimate of the specific point at which the photo was taken, or merely indicate the general area (e.g. if the photo was taken at a significant monument, the coordinates might be copies from the wikipedia entry for that monument). The uncertainty attribute provides an estimate of the uncertainty (in units of metres) of the coordinates. When the relevance is set to "area" and an uncertainty estimate is provided, the implication is that the unknown "point" coordinates lie within the uncertainty radius of the provided coordinates. Content model (latitude?, longitude?, altitude?, measurement?, estimation?, note?) Attributes datum CDATA 'WGS 84' relevance (point|area) #IMPLIED uncertainty CDATA #IMPLIED Used inside location
<emphasis role="dtdelttitle">latitude</emphasis> <anchor id="photo-elt-latitude"/> The location latitude. Content model %Latitude; Used inside coordinates | measurement
<emphasis role="dtdelttitle">longitude</emphasis> <anchor id="photo-elt-longitude"/> The location longitude. Content model %Longitude; Used inside coordinates | measurement
<emphasis role="dtdelttitle">altitude</emphasis> <anchor id="photo-elt-altitude"/> The location altitude (in metres by default). The optional reference attribute specifies whether the specified altitude is Above Mean Sea Level or Above Ground Level. Content model %Real; Attributes units CDATA 'm' reference (amsl|agl) #IMPLIED Used inside coordinates | measurement
<emphasis role="dtdelttitle">measurement</emphasis> <anchor id="photo-elt-measurement"/> Details of the measurement of the location coordinates. Note that measurement implies the use of a GPS receiver or other navigation device, while estimation refers to a (usually) less reliable approach, by use of a map or satellite imagery with coordinates, or by comparison with a separate geotagged image of approximately the same scene. The optional association attribute indicates whether the location information was associated with the photo at the time of creation ("immediate"), by use of a GPS device tethered to a DSLR, for example, or at a later stage ("delayed"), by correlating a GPS log with an EXIF time stamp, for example. Content model (device?, date?, time?, latitude?, longitude?, altitude?, hdop?, vdop?, pdop?, note?) Attributes association (immediate|delayed) #IMPLIED Used inside coordinates
<emphasis role="dtdelttitle">hdop</emphasis> <anchor id="photo-elt-hdop"/> Horizontal Dilution of Precision (of a GPS measurement). Content model %Real; Used inside measurement
<emphasis role="dtdelttitle">vdop</emphasis> <anchor id="photo-elt-vdop"/> Vertical Dilution of Precision (of a GPS measurement). Content model %Real; Used inside measurement
<emphasis role="dtdelttitle">pdop</emphasis> <anchor id="photo-elt-pdop"/> Positional Dilution of Precision (of a GPS measurement). Content model %Real; Used inside measurement
<emphasis role="dtdelttitle">estimation</emphasis> <anchor id="photo-elt-estimation"/> Details of the estimation of the coordinates, e.g. by locating relevant features on a map. Typically only one of the measurement or estimation elements will be specified, but if both are present, the implication is that the measured coordinates were modified based on some other method of estimating the position. For example, if GPS data are available, but are inaccurate due to poor reception, the coordinates may be estimated by using a recognised location on a map, but it may still be desired to record the measured location in case the estimate is later found to be poor. Content model ((source-frame | source-ref)?, description?) Used inside coordinates
<emphasis role="dtdelttitle">source-frame</emphasis> <anchor id="photo-elt-source-frame"/> If the coordinates are estimated by comparing the scene with another photo with known coordinates, and which has been assigned a group-id and frame-id, the source-frame element may be used to provide relevant information on the geotagged photo, and the group-id and frame-id attributes should provide its corresponding id tags. Content model %Text; Attributes group-id NMTOKEN #IMPLIED frame-id NMTOKEN #IMPLIED Used inside estimation
<emphasis role="dtdelttitle">source-ref</emphasis> <anchor id="photo-elt-source-ref"/> If the approximate coordinates are obtained from some internet resource, the source-ref element may be used to describe the resource, and the href attribute should provide a link to the relevant resource (e.g. a wikipedia entry). Content model %Text; Attributes href CDATA #IMPLIED Used inside estimation
<emphasis role="dtdelttitle">direction</emphasis> <anchor id="photo-elt-direction"/> The direction in which the camera was pointed (i.e. from the viewpoint to the scene; coordinates are usually considered to be of the scene viewpoint, and always have this interpretation when direction is specified). Content model (azimuth?, elevation?) Used inside location
<emphasis role="dtdelttitle">azimuth</emphasis> <anchor id="photo-elt-azimuth"/> The compass direction of the scene from the viewpoint (e.g. "0" for North, "90" for East, etc.) in the range 0 to 360 (degrees). Content model %CompassDirection; Used inside direction
<emphasis role="dtdelttitle">elevation</emphasis> <anchor id="photo-elt-elevation"/> The elevation angle of the scene from the viewpoint (e.g. "0" for horizontal, "90" for directly upwards, etc.) in the range -90 to 90 (degrees). Content model %ElevationAngle; Used inside direction
<emphasis role="dtdelttitle">content</emphasis> <anchor id="photo-elt-content"/> A detailed description of the scene content. Content model ((person | object)+ | segment+) Used inside scene
<emphasis role="dtdelttitle">person</emphasis> <anchor id="photo-elt-person"/> The optional href attribute represents the person's web page. Content model (name, address?, phone?, fax?, email?) Attributes href CDATA #IMPLIED Used inside content | segment
<emphasis role="dtdelttitle">object</emphasis> <anchor id="photo-elt-object"/> The optional type and href attributes represent the object type (e.g. building, vehicle) and a URL associated with the object (e.g. for a museum). Content model (name?, address?, note?) Attributes type CDATA #IMPLIED href CDATA #IMPLIED Used inside content | segment
<emphasis role="dtdelttitle">segment</emphasis> <anchor id="photo-elt-segment"/> A segment of the scene. The label attribute allows identification of segments (e.g. foreground, upper-left, etc. Content model (segment | person | object)+ Attributes label CDATA #IMPLIED Used inside content | segment
<emphasis role="dtdelttitle">equipment</emphasis> <anchor id="photo-elt-equipment"/> A description of the camera and associated equipment. Content model (body?, body-attachment?, lens?, lens-attachment?, illumination?, support?, note?) Used inside frame
<emphasis role="dtdelttitle">body</emphasis> <anchor id="photo-elt-body"/> The camera body. While often fixed for a particular roll, it is included here since it forms part of the equipment, and is also not always fixed (e.g. APS mid-roll roll change). Content model (make?, model?, serial?, type?, note?) Used inside equipment
<emphasis role="dtdelttitle">body-attachment</emphasis> <anchor id="photo-elt-body-attachment"/> An accessory attached to the body, e.g. motor-drive, multi-function back Content model (device+, note?) Used inside equipment
<emphasis role="dtdelttitle">lens</emphasis> <anchor id="photo-elt-lens"/> A lens. Content model (make?, model?, serial?, type?, note?) Used inside equipment
<emphasis role="dtdelttitle">lens-attachment</emphasis> <anchor id="photo-elt-lens-attachment"/> An accessory attached to the lens, e.g. teleconverter, extension-tube, diopter, filter, lens-hood. Content model (device+, note?) Used inside equipment
<emphasis role="dtdelttitle">illumination</emphasis> <anchor id="photo-elt-illumination"/> An illumination source, e.g. flash. Content model (device+, note?) Used inside equipment
<emphasis role="dtdelttitle">support</emphasis> <anchor id="photo-elt-support"/> A support, e.g. tripod leg set, ball-head, monopod. Content model (device*, note?) Used inside equipment
<emphasis role="dtdelttitle">device</emphasis> <anchor id="photo-elt-device"/> A description of an item of equipment. The optional type attribute represents the device type (e.g. filter, ball-head, flash). Content model (make?, model?, serial?, firmware?, note?) Attributes type CDATA #IMPLIED Used inside measurement | body-attachment | lens-attachment | illumination | support
<emphasis role="dtdelttitle">model</emphasis> <anchor id="photo-elt-model"/> The model number/code of a photographic product. Content model %Text; Used inside body | lens | device | hardware
<emphasis role="dtdelttitle">serial</emphasis> <anchor id="photo-elt-serial"/> The serial number/code of a photographic product. Content model %Text; Used inside body | lens | device | hardware
<emphasis role="dtdelttitle">firmware</emphasis> <anchor id="photo-elt-firmware"/> The firmware version. Content model %Text; Used inside device | hardware
<emphasis role="dtdelttitle">exposure</emphasis> <anchor id="photo-elt-exposure"/> A description of film exposure and camera metering settings. Content model (aperture?, shutter?, exp-comp?, flash?, flash-comp?, rated-speed?, mode?, metering?, note?) Used inside frame
<emphasis role="dtdelttitle">aperture</emphasis> <anchor id="photo-elt-aperture"/> The lens aperture in f/-stops. Content model %Real; Used inside exposure
<emphasis role="dtdelttitle">shutter</emphasis> <anchor id="photo-elt-shutter"/> The shutter speed in seconds. Content model %Fraction; Used inside exposure
<emphasis role="dtdelttitle">exp-comp</emphasis> <anchor id="photo-elt-exp-comp"/> Exposure compensation in EV units. Content model %Real; Used inside exposure
<emphasis role="dtdelttitle">flash</emphasis> <anchor id="photo-elt-flash"/> Flash usage description. Content model %Text; Used inside exposure
<emphasis role="dtdelttitle">flash-comp</emphasis> <anchor id="photo-elt-flash-comp"/> Flash exposure compensation in EV units. Content model %Real; Used inside exposure
<emphasis role="dtdelttitle">rated-speed</emphasis> <anchor id="photo-elt-rated-speed"/> ISO speed setting of the camera (useful if different from the actual film ISO speed, or for a digital camera). Content model %PositiveInteger; Used inside exposure
<emphasis role="dtdelttitle">mode</emphasis> <anchor id="photo-elt-mode"/> Exposure mode (e.g. program, manual, shutter priority) for an automated camera. Content model %Text; Used inside exposure | focus
<emphasis role="dtdelttitle">metering</emphasis> <anchor id="photo-elt-metering"/> Metering mode (e.g. matrix, centre-weighted, spot). Content model %Text; Used inside exposure
<emphasis role="dtdelttitle">focus</emphasis> <anchor id="photo-elt-focus"/> Information relevant to lens focus. Content model (focal-length?, focal-distance?, mode?, note?) Used inside frame
<emphasis role="dtdelttitle">focal-length</emphasis> <anchor id="photo-elt-focal-length"/> The lens focal length (useful when the lens doesn't have a fixed focal length), in millimeters by default. Content model %Real; Attributes units CDATA 'mm' Used inside focus
<emphasis role="dtdelttitle">focal-distance</emphasis> <anchor id="photo-elt-focal-distance"/> The focal distance (in metres by default). Content model %Real; Attributes units CDATA 'm' Used inside focus
<emphasis role="dtdelttitle">evaluation</emphasis> <anchor id="photo-elt-evaluation"/> An evaluation of the merits of the frame. If a score attribute is specified, it represents the aggregate rating for the frame, independent of the score values for child elements; if it is not specified, the aggregate score should be computed as a weighted average of the score attributes of child elements. Content model (artistic?, technical?) Attributes score CDATA #IMPLIED Used inside frame
<emphasis role="dtdelttitle">artistic</emphasis> <anchor id="photo-elt-artistic"/> An evaluation of the artistic merits of the frame. The element content is a comment on the evaluation, and a numeric rating is provided by the score attribute. Content model %Text; Attributes score CDATA #IMPLIED Used inside evaluation
<emphasis role="dtdelttitle">technical</emphasis> <anchor id="photo-elt-technical"/> An evaluation of the technical merits (focus, depth of field, etc.) of the frame. The element content is a comment on the evaluation, and a numeric rating is provided by the score attribute. Content model %Text; Attributes score CDATA #IMPLIED Used inside evaluation
<emphasis role="dtdelttitle">digimage</emphasis> <anchor id="photo-elt-digimage"/> The details of an individual digital image. The optional href attribute represents the location of the digital image file being described. The group-id attribute is the id of the roll, sheet, or digital element in which the corresponding photographic frame is described, the frame-id attribute is the id of that frame element, and the image-id provides an id number for the specific digital file representing that frame (e.g. two scans of the same film frame would have the same group-id and frame-id, but different image-id. Content model (properties?, history?, index-image?, note?) Attributes href CDATA #IMPLIED group-id NMTOKEN #IMPLIED frame-id NMTOKEN #IMPLIED image-id NMTOKEN #IMPLIED Used inside photo | frame | digimage-set
<emphasis role="dtdelttitle">digimage-set</emphasis> <anchor id="photo-elt-digimage-set"/> A container allowing the scope of defaults elements to be restricted to the contained set of digimage elements. Content model (defaults?, ((digimage | digimage-set)+, defaults?)+) Used inside photo | digimage-set
<emphasis role="dtdelttitle">properties</emphasis> <anchor id="photo-elt-properties"/> Details of the image properties. Content model ((width, height)?, bit-depth?, file-format?, icc-profile?, file-hash?, image-hash?, note?) Used inside defaults | digimage
<emphasis role="dtdelttitle">width</emphasis> <anchor id="photo-elt-width"/> The image width in pixels Content model %PositiveInteger; Used inside properties
<emphasis role="dtdelttitle">height</emphasis> <anchor id="photo-elt-height"/> The image height in pixels Content model %PositiveInteger; Used inside properties
<emphasis role="dtdelttitle">bit-depth</emphasis> <anchor id="photo-elt-bit-depth"/> The bit depth of a sample, commonly 8 or 12 bits per colour band per pixel. Content model %PositiveInteger; Used inside properties
<emphasis role="dtdelttitle">file-format</emphasis> <anchor id="photo-elt-file-format"/> The image format. This may either be described by using the std attribute within an empty element, or omitting the std attribute and describing the format within the element content. When possible, the former approach is preferred. Content model %Text; Attributes std (bmp|crw|cr2|dng|jpeg|j2k|nef|pef|png|psd|tiff) #IMPLIED Used inside properties
<emphasis role="dtdelttitle">icc-profile</emphasis> <anchor id="photo-elt-icc-profile"/> The ICC profile for the image colour space. The optional href refers to the relevant ICC profile specification file. Content model %Text; Attributes href CDATA #IMPLIED Used inside properties
<emphasis role="dtdelttitle">file-hash</emphasis> <anchor id="photo-elt-file-hash"/> The result of a hash function applied to the image file. Not as reliable as the hash value of the image content (i.e. the raw decoded bitmap representation of the image, which is not dependent on the specific image file format), but may be faster to compute in some circumstances, and therefore useful for an initial match test. Content model %HexString; Attributes type (md5|sha-256) 'md5' Used inside properties | source-image
<emphasis role="dtdelttitle">image-hash</emphasis> <anchor id="photo-elt-image-hash"/> The result of a hash function applied to the image content. Useful for ensuring a correct match between the image description and the image data file. Content model %HexString; Attributes type (md5|sha-256) 'md5' Used inside properties | source-image
<emphasis role="dtdelttitle">history</emphasis> <anchor id="photo-elt-history"/> Details of the creation and editing history of the image. More than one editing element is allowed so that multiple stages of editing, using different software, may be described. Content model (origin?, editing*, note?) Used inside defaults | digimage
<emphasis role="dtdelttitle">origin</emphasis> <anchor id="photo-elt-origin"/> Details of the origin of the image; either a film scanner or digital camera, or source image(s) from which it is derived via editing (multiple source images are possible when, for example, a panoramic image is composed of a number of smaller images). Content model ((date?, time?, (scanner | camera)?) | source-image+) Used inside history
<emphasis role="dtdelttitle">editing</emphasis> <anchor id="photo-elt-editing"/> Details of the editing operations applied to the image. Content model (date?, time?, software?, operations?, note?) Used inside history
<emphasis role="dtdelttitle">scanner</emphasis> <anchor id="photo-elt-scanner"/> The details of the scanner and scanning process. Content model (hardware?, software?, settings?, note?) Used inside origin
<emphasis role="dtdelttitle">camera</emphasis> <anchor id="photo-elt-camera"/> The details of the digital camera. Content model (hardware?, settings?, note?) Used inside origin
<emphasis role="dtdelttitle">source-image</emphasis> <anchor id="photo-elt-source-image"/> A description of the source image to which editing operations were applied to derive the image described by the image element. The group-id and frame-id attributes should only be used when they differ from the respective values of the image element. Content model (file-hash?, image-hash?) Attributes href CDATA #IMPLIED group-id NMTOKEN #IMPLIED frame-id NMTOKEN #IMPLIED image-id NMTOKEN #IMPLIED Used inside origin
<emphasis role="dtdelttitle">software</emphasis> <anchor id="photo-elt-software"/> The software used to perform the editing. Content model (publisher?, name?, version?, note?) Used inside editing | scanner
<emphasis role="dtdelttitle">operations</emphasis> <anchor id="photo-elt-operations"/> The details of the editing operations. Content model operation+ Used inside editing
<emphasis role="dtdelttitle">hardware</emphasis> <anchor id="photo-elt-hardware"/> The details of the camera or scanner hardware. Content model (make?, model?, serial?, firmware?, note?) Used inside scanner | camera
<emphasis role="dtdelttitle">settings</emphasis> <anchor id="photo-elt-settings"/> The details of the camera, scanner, or editing software settings. Content model (setting+, note?) Used inside scanner | camera | operation
<emphasis role="dtdelttitle">publisher</emphasis> <anchor id="photo-elt-publisher"/> The name of the company that developed the software. Content model %Text; Used inside software
<emphasis role="dtdelttitle">version</emphasis> <anchor id="photo-elt-version"/> The version number of the software. Content model %Text; Used inside software
<emphasis role="dtdelttitle">operation</emphasis> <anchor id="photo-elt-operation"/> The details of an individual edit. In addition to the text description, further details may be specified by providing the relevant command line when editing was performed via a command shell, or settings for operations applied via a GUI. Content model (description?, (command | settings)?, note?) Used inside operations
<emphasis role="dtdelttitle">command</emphasis> <anchor id="photo-elt-command"/> The command line used to apply the edit. Content model %Text; Used inside operation
<emphasis role="dtdelttitle">setting</emphasis> <anchor id="photo-elt-setting"/> The setting element describes software configuration settings during scanning. The name attribute should contain the name of the setting (e.g. multi-pass, ICE), and the element content represents the corresponding value. Content model %Text; Attributes name CDATA #REQUIRED units CDATA #IMPLIED Used inside settings
./photoml-0.28/docs/sections/using.xml0000644000175000017500000004210711371045361017233 0ustar brendtbrendt
Using PhotoML At least some familiarity with XML is probably necessary to make use of PhotoML. It is particularly important for users who are not familiar with DTD syntax to use an XML editor (see ) that provides DTD guided context-dependent element insertion to ensure that valid documents are created. The recommended formal public identifier for the current version of the PhotoML DTD is "-//BW//DTD PhotoML 0.13//EN" A PhotoML XML file will therefore usually begin with the following two lines <?xml version="1.0"> <!DOCTYPE photo PUBLIC "-//BW//DTD PhotoML 0.13//EN" "photo.dtd"> It is important to use the full public identifier including the DTD version number so that the version upgrade script is able to correctly identify the relevant DTD version when transitioning to a new DTD.
The PhotoML DTD PhotoML is a very flexible format, providing facilities for recording far more detail than is likely to be of interest to the average photographer. A reasonable introduction to the format can be obtained by inspecting the example files in the xml directory, and viewing the corresponding HTML views generated by the XSLT stylesheets. For those who are familiar with DTD syntax, see or read through the heavily commented DTD in the dtd directory. A few issues are sufficiently complex to warrant additional discussion.
Collections The id attribute of roll, sheet, and digital elements is intended to assign the primary identity for the group. If the group contains a collection element, the cgid attribute represents a secondary identity for the group relative to the collection, the identity of which is determined by the id attribute of the collection element. The fstid and lsid attributes specify the first and last frame identities which are contained in the the collection, so that it may contain only part of the group. A group may also contain multiple collection elements.
The <emphasis>frame</emphasis> <emphasis>id</emphasis> and <emphasis>fn</emphasis> attributes The id attribute is intended to assign the primary identity for the frame. It is recommended that the values be two digit numbers, increasing in chronological frame order (e.g. 01 for the first frame exposed, 02 for the second frame exposed etc.). If the actual frame number marked on the film differs from the id, it may be recorded using the fn attribute, which is also useful in other situations, e.g. when the camera exposes film beginning at the end, so that the id numbers increase in chronological order, while the fn values decrease.
The <emphasis>xml:lang</emphasis> attribute The xml:lang attribute, available for relevant elements, is a standard mechanism for specifying the language of the element content. In addition to the definition in the XML standard, relevant information is available in the documents describing rfc3066 and iso639-2.
The <emphasis>date</emphasis> element The date element has the format YYYY[-MM[-DD]], (that is, YYYY-MM-DD, YYYY-MM, or YYYY).
The <emphasis>time</emphasis> element The time element (using the 24 hour clock) has the format hh[:mm[:ss[.ss*]]] (that is, hh, hh:mm, hh:mm:ss, or hh:mm:ss.s with an arbitrary number of fractional seconds after the decimal point). The optional zone attribute represents the UTC time zone in the format (+|-)hh[:mm] (that is +hh:mm, -hh:mm, +hh, or -hh). For further details see a comprehensive discussion of ISO time notation, upon which these restrictions are based.
The <emphasis>digimage</emphasis> element The digimage element is intended to provide a mechanism for describing digital images, primarily images from digital cameras, from film scanners, and edited digital images. Note that this format complements the primary PhotoML digital element for images from digital images. For example, each image captured using a digital camera is both a photograph (relevant aspects of which, such as creation date, location, scene description etc. are described using digital elements and their frame children) and a digital image (relevant aspects of which, such as image geometry, bit depth, image format etc. are described using digimage elements).
The <emphasis>defaults</emphasis> element Elements contained within a defaults element provide default values for the subsequent entities in which the relevant elements have not been specified (for example, sub-elements of a frame specified within a defaults element are considered implied markup within any subsequent frame for which those sub-elements are not explicitly specified. An expanded version of a PhotoML file, with all defaults elements explicitly merged into the relevant elements, may be obtained by using the pmlexpand utility. An understanding of the rules governing defaults elements is necessary for using them appropriately. The ruling defaults at any point in a PhotoML document are obtained by combining (as discussed below) all preceding defaults elements at higher levels in the element tree, and preceding defaults elements which are also children of the current parent node (the scope of a defaults element is defined by its parent element). For example, within the following document ... A ... ... B ... ... 1 ... ... 2 ... ]]> defaults A and B apply to frame 1, but only defaults A apply to frame 2. The current defaults at any point in the document are obtained by combining all preceding relevant (those within the current scope) defaults. As each defaults element is encountered in document order, a new current defaults set is constructed by combining the newly encountered defaults element with the current set in the manner specified by the combine attribute of the newly encountered defaults element. (A new copy of the current set is created when an inner scope is encountered so that any modifications to the current set within that scope do not effect the outer scope.) The possible values of the combine attribute are (the default attribute value is merge): replace The current defaults are deleted and replaced by the content of a defaults element with a value of replace for its combine attribute. merge The defaults element with a value of merge for its combine attribute is merged over the current defaults in the sense that any elements not in the current defaults are inserted, and any terminal node elements in both are replaced by those in the defaults element. The processing instruction <?merge-reject element-name element-name ... @attribute-name @attribute-name ... ?> may be used to signal the removal of an element during a subtree merge, as illustrated in the following example 2000-01-01 country-name city-name ]]> where defaults expansion results in the frame with id='01' having the defaults content merged in, with the exception of the attribute zone and the element city. Finally, note that the defaults mechanism is not yet completely stable, and may still be subject to modification. If changes are made, every effort will be made to support automatic conversion to a new mechanism via the pmlupgrade utility.
Recommended Frame Numbering System The PhotoML DTD assumes that film rolls, frames, etc. are assigned unique identifiers. This section describes a recommended numbering system for photographic images, to be used within PhotoML documents. The general format consists of a full or partial date (that is, a year, a year and month, or a year, month, and day), a number within a grouping for that partial date (for example, a number for a roll of film started on the date part of the identifier), and a frame number with respect to the grouping (for example, a frame number within the roll). In the following forms year denotes a four digit number, month denotes a two digit number (range 01 to 12), day denotes a two digit number (range 01 to 31), and roll number, digital media number, and frame number denote two or three digit numbers with leading zeros where necessary.
Roll Film The recommended forms are <year>r<roll number>f<frame number> or <year>-<month>r<roll number>f<frame number> For example, 2001r31f08 denotes frame 8 on roll 31 of the year 2001, while 2001-05r03f12 denotes frame 12 on roll 3 of May 2001.
Digital Camera Images The recommended forms are <year>d<digital media number>f<frame number> or <year>-<month>d<digital media number>f<frame number> or <year>-<month>-<day>d<frame number> For example, 2000d020f12 denotes frame 12 on compact flash card 20 (assuming a policy of assigning a new number each time an empty card is loaded) of the year 2000, while 2000-01d03f09 denotes frame 9 on compact flash card 3 of January 2000, and 2000-02-21d45 denotes frame 45 taken on 21 February 2000.
Sheet Film The recommended forms are <year>-<month>s<frame number> or <year>-<month>-<day>s<frame number> For example, 2002-10s05 denotes frame 5 taken during October 2002, while 2002-03-09s02 denotes frame 2 taken on 9 October 2002.
Image Identifiers An image identifier specifies a specific version of an image derived via editing of an original frame. The recommended form of an image identifier is <frame identifier>n<version number> where version number is a two digit number representing the specific version. For example, if two differently cropped images are derived from a scan of frame 2001r31f08, they may be assigned image numbers 2001r31f08n01 and 2001r31f08n02.
./photoml-0.28/docs/sections/Makefile.in0000644000175000017500000000217511460343514017432 0ustar brendtbrendt# Makefile for PhotoML documentation DTD appendices # Most recent modification: 22 October 2010 prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@/photoml docdir = ${datadir}/doc RM = @RM@ DTDTO = @DTDTO@ DTDPATH = ../../dtd PHOTODTD = $(DTDPATH)/photo.dtd PHOTODOC = photodtd.xml DTDVERSION = @DTDVERSION@ .PHONY: all dtdver clean all: $(PHOTODOC) dtdver $(PHOTODOC): $(PHOTODTD) @if [ -x "$(DTDTO)" ]; then \ $(DTDTO) --docbook --top-id photodtd --title "PhotoML DTD" \ --anchor-prefix "photo-" $(PHOTODTD) $(PHOTODOC); \ sed -e 's/^//' $(PHOTODOC) > sed.tmp; \ mv sed.tmp $(PHOTODOC); \ else \ echo "Cannot build DTD description using dtdto"; \ fi dtdver: @v=`grep -o -m 1 '<\!--DTDver-->\([\.0-9]\)\+' using.xml | sed 's/<\!--DTDver-->//'`;\ if [ "$$v" != "${DTDVERSION}" ]; then\ sed 's/\(<\!--DTDver-->\)[\.0-9]\+/\1${DTDVERSION}/' using.xml > sed.tmp;\ mv sed.tmp using.xml;\ fi clean: @if [ -x "$(DTDTO)" ]; then \ ${RM} -f $(PHOTODOC); \ else \ echo "Not cleaning $(PHOTODOC) - can't find tool for rebuild"; \ fi ./photoml-0.28/docs/pmldoc.xml0000644000175000017500000000310011467603214015526 0ustar brendtbrendt ]>
PhotoML: Photo Description Markup Language Brendt Wohlberg
photoml@wohlberg.net
0.08 13 November 2010 0.07 22 November 2007 0.06 8 June 2007 0.05 20 August 2005 0.04 18 November 2004 0.03 31 January 2004
&purpose; &distrib; &using; &acknowledge; &xmledit; &photodtd;
./photoml-0.28/docs/pmldoc.txt0000644000175000017500000016563611471535473015602 0ustar brendtbrendtPhotoML: Photo Description Markup Language Brendt Wohlberg Revision History Revision 0.08 13 November 2010 Revision 0.07 22 November 2007 Revision 0.06 8 June 2007 Revision 0.05 20 August 2005 Revision 0.04 18 November 2004 Revision 0.03 31 January 2004 ______________________________________________________________ Purpose This distribution is primarily intended to provide a format (defined by the PhotoML DTD) and tools for describing details of photo creation, processing, and content in a collection of photographs. It is designed to be appropriate for a wide variety of photographic formats, including roll film (such as 35mm and 120/220), sheet film (such as 4x5 and 8x10) and digital images. The type of information represented, while allowing description of details of content, creation etc. for digital images, does not support some of the more low-level housekeeping details that might be necessary in an application such as an online database of digital images. In particular, PhotoML is not yet another web photo gallery generator. Alternative Formats While alternatives exist, none of them seem to completely fit the role for which PhotoML was designed. Photo RDF has significantly lower complexity than PhotoML, allowing representation of a much smaller set of information, and does not provide any of the photo grouping mechanisms which seem desirable when describing a large collection of photos. DIG35 has higher complexity than PhotoML in some respects, providing support for greater detail for individual images. Since DIG35 is designed as metadata to be attached in the header of a digital image, it also lacks the image grouping facilities of PhotoML, and while DIG35 is intended to become an industry standard, the schema is not completely freely distributed (available on request only, but free for government and educational use). Further Development PhotoML has received a substantial amount of work, but a number of rough edges still require attention. Comments, suggestions, and contributions (including any involving significant changes) are welcome, and should be directed to . There are no immediate plans for a transition from the DTD to an XML Schema as the primary format definition (in contrast to DTDs, there does not yet seem to be much free software supporting editing and validation of schemas), but example schemas auto-generated from the DTD are included in the distribution. The Distribution The distribution consists of XML document type definitions, XSLT stylesheets for generating HTML formatted versions of the photo description XML, and various software tools. Note that the name PhotoML is used to describe the XML format defined by the PhotoML DTD as well as the entire distribution; the intended meaning should be clear from the context in which the name is used. License Use of this distribution is subject to the terms of the GNU General Public License (version 2), a copy of which is included in the distribution. If anyone wishing to use this distribution finds the GPL too restrictive, I will consider requests to make it available under an alternative open source license. Platforms The primary content of the dtd, xsd, xsl, and xml directories should be platform independent, but the configuration and installation files require a UNIX environment. The scripts in the tools directory have been tested under Linux on an i386 architecture, but should work on any UNIX platform with recent versions of libxml2 and libxslt installed. MS Windows versions of the utility scripts are not currently available, but should be easily ported from shell script to a scripting language available on that platform. Windows users may, however, wish to try installing under the cygwin environment. Prerequisites The primary prerequisites, other than basic UNIX shell utilities, are perl, and the libxml2 and libxslt packages. Some of the tools have additional requirements: md5sum Standard on many Linux systems. dcraw Available as source, RPM and deb packages. imageinfo Source, SRPM and Ubuntu source deb packages available. xgrep Source, SRPM and Ubuntu source deb packages available. Date::Manip Perl module available from CPAN. Image::ExifTool Perl module available from CPAN. Installation The source distribution is available from the PhotoML download page. After unpacking the tar archive, the simplest installation procedure consists of the following commands (executed from the distribution root directory): ./configure make make test make install The final make install usually needs to be performed with root privileges (see the INSTALL file for further details). Using the default configuration, software tools are installed in /usr/local/bin, and the DTD, XSL, and associated files are installed in /usr/local/share/photoml. Users of Red Hat/Fedora or Ubuntu Linux may install the RPM or deb packages available from the PhotoML download page. When installing from RPM or deb packages, software tools are installed in /usr/bin, and the DTD, XSL, and associated files are installed in /usr/share/photoml. Distribution Content The distribution content is divided up into a number of subdirectories, as described below. DTD The dtd directory contains the PhotoML DTD and associated files (character set defining external entities) and a catalogue file which is used by libxml2 tools for locating DTDs. The PhotoML DTD defines the primary XML format for describing collections of photographs, and, while still under development, should be reasonably stable. When the DTD is changed, the pmlupgrade utility provides automatic (or semi-automatic, in complex cases) conversion to the new format. XSL The xsl directory contains XSLT stylesheets for constructing HTML views of PhotoML XML files (in the xsl/html directory), for expansion of defaults elements (in the xsl/defaults directory), for upgrading PhotoML XML files from older DTD versions (in the xsl/upgrade directory), and for supporting the functionality of some of the tools (in the xsl/misc directory). XML The xml directory contains XML examples of PhotoML photo description and image description files. The top level make command builds HTML views of these files using the XSLT stylesheets in the xsl directory. Tools The tools directory contains tools for expanding defaults in PhotoML files, validating PhotoML files, constructing HTML representations etc.: pmlcreate Generate PhotoML roll description outline pmldigital Generate PhotoML descriptions of digital images from digital cameras and film scanners pmlexpand Expand and remove defaults in a PhotoML XML file pmlgrep Provides a grep-like utility for PhotoML files pmlindex Constructs an HTML index of PhotoML files pmltrans Transform a PhotoML XML file using the standard PhotoML XSL style sheet pmltoxmp Transform PhotoML data to XMP format pmlupgrade Upgrade PhotoML XML files to latest DTD version pmlvalid Validate PhotoML XML files Further details are provided in the man pages in that directory. Installation of libxml2 and libxslt is required, as the scripts in this directory make use of the xmllint and xsltproc utilities. Documentation Suprisingly enough, the docs directory contains documentation; the main document source in DocBook format, and viewable documents in HTML, PDF, and text formats. XSD The xsd directory contains an XML Schema definition that has been auto-generated from the PhotoML DTD by trang. While this schema may be useful to those wishing to use schema based XML tools, it has not been verified to be correct, and should not be considered as the primary document type definition. Using PhotoML At least some familiarity with XML is probably necessary to make use of PhotoML. It is particularly important for users who are not familiar with DTD syntax to use an XML editor (see Appendix A, XML Editing Tools) that provides DTD guided context-dependent element insertion to ensure that valid documents are created. The recommended formal public identifier for the current version of the PhotoML DTD is "-//BW//DTD PhotoML 0.13//EN" A PhotoML XML file will therefore usually begin with the following two lines It is important to use the full public identifier including the DTD version number so that the version upgrade script is able to correctly identify the relevant DTD version when transitioning to a new DTD. The PhotoML DTD PhotoML is a very flexible format, providing facilities for recording far more detail than is likely to be of interest to the average photographer. A reasonable introduction to the format can be obtained by inspecting the example files in the xml directory, and viewing the corresponding HTML views generated by the XSLT stylesheets. For those who are familiar with DTD syntax, see Appendix B, PhotoML DTD or read through the heavily commented DTD in the dtd directory. A few issues are sufficiently complex to warrant additional discussion. Collections The id attribute of roll, sheet, and digital elements is intended to assign the primary identity for the group. If the group contains a collection element, the cgid attribute represents a secondary identity for the group relative to the collection, the identity of which is determined by the id attribute of the collection element. The fstid and lsid attributes specify the first and last frame identities which are contained in the the collection, so that it may contain only part of the group. A group may also contain multiple collection elements. The frame id and fn attributes The id attribute is intended to assign the primary identity for the frame. It is recommended that the values be two digit numbers, increasing in chronological frame order (e.g. 01 for the first frame exposed, 02 for the second frame exposed etc.). If the actual frame number marked on the film differs from the id, it may be recorded using the fn attribute, which is also useful in other situations, e.g. when the camera exposes film beginning at the end, so that the id numbers increase in chronological order, while the fn values decrease. The xml:lang attribute The xml:lang attribute, available for relevant elements, is a standard mechanism for specifying the language of the element content. In addition to the definition in the XML standard, relevant information is available in the documents describing rfc3066 and iso639-2. The date element The date element has the format YYYY[-MM[-DD]], (that is, YYYY-MM-DD, YYYY-MM, or YYYY). The time element The time element (using the 24 hour clock) has the format hh[:mm[:ss[.ss*]]] (that is, hh, hh:mm, hh:mm:ss, or hh:mm:ss.s with an arbitrary number of fractional seconds after the decimal point). The optional zone attribute represents the UTC time zone in the format (+|-)hh[:mm] (that is +hh:mm, -hh:mm, +hh, or -hh). For further details see a comprehensive discussion of ISO time notation, upon which these restrictions are based. The digimage element The digimage element is intended to provide a mechanism for describing digital images, primarily images from digital cameras, from film scanners, and edited digital images. Note that this format complements the primary PhotoML digital element for images from digital images. For example, each image captured using a digital camera is both a photograph (relevant aspects of which, such as creation date, location, scene description etc. are described using digital elements and their frame children) and a digital image (relevant aspects of which, such as image geometry, bit depth, image format etc. are described using digimage elements). The defaults element Elements contained within a defaults element provide default values for the subsequent entities in which the relevant elements have not been specified (for example, sub-elements of a frame specified within a defaults element are considered implied markup within any subsequent frame for which those sub-elements are not explicitly specified. An expanded version of a PhotoML file, with all defaults elements explicitly merged into the relevant elements, may be obtained by using the pmlexpand utility. An understanding of the rules governing defaults elements is necessary for using them appropriately. The ruling defaults at any point in a PhotoML document are obtained by combining (as discussed below) all preceding defaults elements at higher levels in the element tree, and preceding defaults elements which are also children of the current parent node (the scope of a defaults element is defined by its parent element). For example, within the following document ... A ... ... B ... ... 1 ... ... 2 ... defaults A and B apply to frame 1, but only defaults A apply to frame 2. The current defaults at any point in the document are obtained by combining all preceding relevant (those within the current scope) defaults. As each defaults element is encountered in document order, a new current defaults set is constructed by combining the newly encountered defaults element with the current set in the manner specified by the combine attribute of the newly encountered defaults element. (A new copy of the current set is created when an inner scope is encountered so that any modifications to the current set within that scope do not effect the outer scope.) The possible values of the combine attribute are (the default attribute value is merge): replace The current defaults are deleted and replaced by the content of a defaults element with a value of replace for its combine attribute. merge The defaults element with a value of merge for its combine attribute is merged over the current defaults in the sense that any elements not in the current defaults are inserted, and any terminal node elements in both are replaced by those in the defaults element. The processing instruction may be used to signal the removal of an element during a subtree merge, as illustrated in the following example 2000-01-01 country-name city-name where defaults expansion results in the frame with id='01' having the defaults content merged in, with the exception of the attribute zone and the element city. Finally, note that the defaults mechanism is not yet completely stable, and may still be subject to modification. If changes are made, every effort will be made to support automatic conversion to a new mechanism via the pmlupgrade utility. Recommended Frame Numbering System The PhotoML DTD assumes that film rolls, frames, etc. are assigned unique identifiers. This section describes a recommended numbering system for photographic images, to be used within PhotoML documents. The general format consists of a full or partial date (that is, a year, a year and month, or a year, month, and day), a number within a grouping for that partial date (for example, a number for a roll of film started on the date part of the identifier), and a frame number with respect to the grouping (for example, a frame number within the roll). In the following forms year denotes a four digit number, month denotes a two digit number (range 01 to 12), day denotes a two digit number (range 01 to 31), and roll number, digital media number, and frame number denote two or three digit numbers with leading zeros where necessary. Roll Film The recommended forms are rf or -rf For example, 2001r31f08 denotes frame 8 on roll 31 of the year 2001, while 2001-05r03f12 denotes frame 12 on roll 3 of May 2001. Digital Camera Images The recommended forms are df or -df or --d For example, 2000d020f12 denotes frame 12 on compact flash card 20 (assuming a policy of assigning a new number each time an empty card is loaded) of the year 2000, while 2000-01d03f09 denotes frame 9 on compact flash card 3 of January 2000, and 2000-02-21d45 denotes frame 45 taken on 21 February 2000. Sheet Film The recommended forms are -s or --s For example, 2002-10s05 denotes frame 5 taken during October 2002, while 2002-03-09s02 denotes frame 2 taken on 9 October 2002. Image Identifiers An image identifier specifies a specific version of an image derived via editing of an original frame. The recommended form of an image identifier is n where version number is a two digit number representing the specific version. For example, if two differently cropped images are derived from a scan of frame 2001r31f08, they may be assigned image numbers 2001r31f08n01 and 2001r31f08n02. Acknowledgments Thanks to Stephen Darlington and Oskar Ojala for valuable comments and suggestions. Oskar Ojala has also made a number of contributions to the distribution, including the detailed.xsl XSLT stylesheet. A. XML Editing Tools A number of XML editing tools are available, including open source, shareware, and commercial products for a variety of platforms. Emacs/XEmacs The emacs and xemacs editors are highly recommended, both of which provide XML editing support via the following extension packages: psgml A major mode for editing SGML and XML tdtd A major mode for editing DTDs xslide A major mode for editing XSL stylesheets css-mode A major mode for editing CSS stylesheets The psgml package relies on the nsgml parser for validation. The environment variable SGML_SEARCH_PATH needs be set so that the PhotoML DTD can be found; for editing after building the PhotoML distribution, but prior to installation, the following command issued from the distribution root directory will work for csh/tcsh: setenv SGML_SEARCH_PATH `(cd dtd; pwd)` or for sh/bash: SGML_SEARCH_PATH=`(cd dtd; pwd)`; export SGML_SEARCH_PATH After installation, this environment variable should be set to the directory in which the DTD, entities etc. are installed - /usr/local/share/photoml/dtd by default. B. PhotoML DTD PhotoML: Photo Description Markup Language Version: 0.13 Date: 12 November 2010 The recommended formal public identifier for this DTD is : "-//BW//DTD PhotoML 0.13//EN" Please consult the comments in this file, and the notes in the PhotoML distribution documentation. Copyright © 2002-2010 Brendt Wohlberg This is free software; you can redistribute it and/or modif y it under the terms of version 2 of the GNU General Public Lice nse at http://www.gnu.org/licenses/gpl-2.0.txt. This DTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See th e GNU General Public License for more details. Acknowledgement: Thanks to Stephen Darlington and Oskar Oja la for valuable comments and suggestions. Parameter Entities xml-lang-attribute The language specification attribute Definition "xml:lang NMTOKEN #IMPLIED" Text Unrestricted text string Definition "#PCDATA" Integer An integer Definition "#PCDATA" PositiveInteger A positive integer (including zero) Definition "#PCDATA" Real A real number Definition "#PCDATA" Rational A rational number, expressed either as a decimal fraction or in numerator/denominator form Definition "#PCDATA" Fraction A fraction, expressed either as a real number, or as the quotient of two integer or real numbers Definition "#PCDATA" HexString A string of hexadecimal digits Definition "#PCDATA" YearMonth A date string without the day Definition "#PCDATA" Date A date Definition "#PCDATA" Time A time Definition "#PCDATA" DateTime A date and time Definition "#PCDATA" TimeInterval A time interval Definition "#PCDATA" EmailAddress An email address Definition "#PCDATA" PhoneNumber A phone number Definition "#PCDATA" CompassDirection A compass direction Definition "#PCDATA" ElevationAngle An elevation angle Definition "#PCDATA" Latitude A latitude value Definition "#PCDATA" Longitude A longitude value Definition "#PCDATA" Elements photo The root element contains optional default settings, photograph description elements roll (for roll film), sheet (for sheet film), and digital (for photographs taken using a digital camera), and digimage elements describing specific digital images, either direct from a camera or scanner, or derived via editing, composition etc. Content model (defaults?, (roll | sheet | digital | digimage | digimage-set)+)+ Attributes xml:lang NMTOKEN #IMPLIED Used inside defaults Elements contained within a defaults element provide default values for the corresponding elements in which the relevant information has not been specified. A full description of the semantics of this element is rather lengthy, and may be found in the accompanying documentation. Content model (film?, processing?, frame?, properties?, history?) Attributes combine (merge|replace) 'merge' Used inside photo | roll | digital | frame-set | digimage-set roll The details of a roll of film (e.g. 35mm, APS, 120). Optional film and processing descriptions are followed by a sequence of optional loading details, optional defaults (to be applied to the following frames), frame descriptions, and optional unloading details. A defaults element must always precede at least one frame element, and load and unload elements, if present, must respectively precede and follow some group of frame elements. The id attribute specifies an identity/name assigned to the roll. Content model (collection*, description?, film?, processing?, (load?, (defaults?, (frame | frame-set))+, unload?)+, note?) Attributes id NMTOKEN #REQUIRED Used inside photo sheet The details of a single sheet of film (e.g. 4x5, 8x10). Optional film, processing and loading descriptions precede the single frame description, which is followed by an optional unloading description. The id attribute specifies an identity/name assigned to the sheet. Content model (collection*, film?, processing?, load?, frame, unload?, note?) Attributes id NMTOKEN #REQUIRED Used inside photo digital The details of a sequence of digital photographs. Each group of frame descriptions may be preceded by a defaults element. The id attribute specifies an identity/name assigned to the digital sequence. Content model (collection*, description?, (defaults?, (frame | frame-set))+, note?) Attributes id NMTOKEN #REQUIRED Used inside photo collection A collection of photograph descriptions that should be grouped together. Particularly useful for sheet film, since each sheet element describes a single photo, but also useful, for example, for a number of roll film descriptions for the same day, event, trip etc. The id attribute allows an identity/name to be assigned to the collection, the cgid attribute provides a collection based id for the group (roll, digital, or sheet), and the optional fstfid and lstfid specify initial and final frame ids for a subset of the frames in the group. Content model (description?, note?) Attributes id NMTOKEN #REQUIRED cgid NMTOKEN #REQUIRED fstfid NMTOKEN #IMPLIED lstfid NMTOKEN #IMPLIED Used inside roll | sheet | digital description A brief description of the parent element. Provides a description of the scene or location for a specific frame when a child of the scene or location elements, or of an entire collection, roll, or digital photography session, providing information relevant to all of the frames within the grouping, when a child of the collection, roll, or digital elements. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside roll | digital | collection | scene | location | estimation | operation note A note for miscellaneous details of the parent element. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside roll | sheet | digital | collection | film | processing | lab | developing | developer | load | unload | frame | photographer | ipr | scene | occasion | location | coordinates | measurement | object | equipment | body | body-attachment | lens | lens-attachment | illumination | support | device | exposure | focus | digimage | properties | history | editing | scanner | camera | software | hardware | settings | operation film A description of the film used. Content model (make?, name?, speed?, process?, type?, format?, expiry?, note?) Used inside defaults | roll | sheet make The manufacturer of the product, e.g. Fuji (when the parent element is film). Content model %Text; Used inside film | developer | body | lens | device | hardware name The name of a person, business, or product, e.g. Velvia (when the parent element is film). Content model %Text; Used inside film | lab | developer | photographer | owner | person | object | software speed The ISO film speed, e.g. 50. Content model %PositiveInteger; Used inside film process The appropriate film developing process. Recommended values are C41 (standard negative film), E6 (standard slide film), K14 (Kodachrome) and B&W (black and white). A custom designation should be used for processes not listed here. As a child of the film element, this indicates the designated process of the film. In the case of cross-processing, a different process may be specified as a child of the developing element. Content model %Text; Used inside film | developing type The type of a film (recommended values for film type are colour positive, colour negative, b&w positive, and b&w negative), camera body (e.g. SLR, TLR, rangefinder), or lens (e.g. zoom, prime). Content model %Text; Used inside film | body | lens format The film format. Recommended values are APS, 35mm (or 135), 120 or 220 for medium format, and the film size for large format. Content model %Text; Used inside film expiry The film expiry (expiration in the US) date. The format is YYYY-MM since film expiry dates usually only specify a year and month. Content model %YearMonth; Used inside film processing A description of the film processing. Content model (lab?, tag?, date?, time?, developing?, note?) Used inside defaults | roll | sheet tag The number of the double/triple check tag affixed to the film by the lab. Content model %Text; Used inside processing date A date, represented in the format YYYY[-MM[-DD]]. Content model %Date; Used inside processing | load | unload | occasion | measurement | origin | editing time A time, represented in the format hh[:mm[:ss[.ss*]]]. The optional zone attribute represents the time zone in the format (+|-)hh[:mm]. Content model %Time; Attributes zone CDATA #IMPLIED Used inside processing | load | unload | occasion | measurement | origin | editing lab The lab that developed the film. The optional href attribute represents the laboratory web page. Content model (name, address?, phone?, fax?, email?, note?) Attributes href CDATA #IMPLIED Used inside processing address The address of a person or business. Content model %Text; Used inside lab | photographer | owner | person | object phone The phone number of a person or business. Content model %PhoneNumber; Used inside lab | photographer | owner | person fax The fax number of a person or business. Content model %PhoneNumber; Used inside lab | photographer | owner | person email The email address of a person or business. Content model %EmailAddress; Used inside lab | photographer | owner | person developing A description of the development stage of processing. Content model (process?, shift?, developer?, method?, agitation?, temperature?, duration?, note?) Used inside processing shift The number of stops push or pull applied during processing. Content model %Real; Attributes type (push|pull) #REQUIRED Used inside developing method The development method, e.g. daylight tank, tray etc. Content model %Text; Used inside developing agitation Description of the agitation during development. Content model %Text; Used inside developing temperature The temperature of the developer solution (in degrees Celcius by default). Content model %Real; Attributes units CDATA '°C' Used inside developing duration The amount of time the film spent in the developer, represented in the form %m:%s (minutes:seconds). Content model %TimeInterval; Used inside developing developer The developer solution used. Content model (make?, name?, dilution?, note?) Used inside developing dilution The dilution of the developer solution. Content model %Text; Used inside developer load Film loading details. Content model (date?, time?, note?) Used inside roll | sheet unload Film unloading details. Content model (date?, time?, note?) Used inside roll | sheet frame-set A container allowing the scope of defaults elements to be restricted to the contained set of frame elements. Content model (defaults?, ((frame | frame-set)+, defaults?)+) Used inside roll | digital | frame-set frame The frame element describes a single frame in a roll of film or sequence of digital photos, and also describes the single frame on a piece of sheet film. The id attribute should be an identifying number assigned in chronological sequence (e.g. 01, 02 etc.). If the actual frame number marked on the film differs from the id, it may be recorded using the fn attribute. The fn attribute is also useful in other situations, e.g. when the camera exposes film beginning at the end, so the the id numbers increase in chronological order while the fn values decrease. A frame that is not a child of a digital element should not have a digimage child element. Content model (photographer?, ipr?, scene?, equipment?, exposure?, focus?, size?, evaluation?, condition?, digimage?, index-image?, note?) Attributes id NMTOKEN #IMPLIED fn CDATA #IMPLIED Used inside defaults | roll | sheet | digital | frame-set size The physical size of the frame. The value may be specified as actual physical dimensions in the format x (e.g. a value of "24x36" with units "mm" for standard 135 (35mm) film frames, or a value of "56x41.5" with units "mm" for 645 frames on 120 film), in which case the units attribute must be specified, or as standard frame size designations (e.g. "645", "6x6", "6x7", etc. on 120 film, or "4x5", "8x10" etc. large format film), in which case the units attribute must be omitted as an indication that the value does not represent an actual physical measurement. Content model %Text; Attributes units CDATA #IMPLIED Used inside frame condition A description of any damage, such as scratches, to a frame. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside frame index-image The index-image allows the specification of the location of an index image suitable for viewing in an image index, and should therefore be small enough for convenient display in a web browser (for example), but larger than a thumbnail. This facility is useful for constructing indices of frame descriptions, or, within digimage elements, when the actual digital image being described is too large for convenient display in this context. Content model EMPTY Attributes href CDATA #IMPLIED Used inside frame | digimage photographer The name and other details of the photographer. The optional href attribute represents the photographer's web page. Content model (name, address?, phone?, fax?, email?, note?) Attributes href CDATA #IMPLIED Used inside frame ipr Intellectual Property Rights details Content model (copyright?, owner?, note?) Used inside frame copyright A copyright statement Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside ipr owner Details of the copyright owner. The optional href attribute represents the owner's web page. Content model (name, address?, phone?, fax?, email?) Attributes href CDATA #IMPLIED Used inside ipr scene A description of the scene depicted in the frame Content model (occasion?, location?, description?, caption?, genre?, keywords?, content?, note?) Used inside frame caption A short descriptive caption for the photograph. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside scene genre The genre of the scene, e.g. portrait, landscape, sport, travel, macro etc. Content model %Text; Used inside scene keywords Keywords relevant to the description of the scene. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside scene occasion A description of when the photograph was taken. Content model (date?, time?, event?, note?) Used inside scene event A description of the event at which the photo was taken. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside occasion location A description of the location at which the photo was taken. The content model is intended to allow a wide range of locations to be described, but this flexibility also allows incoherent choices, which should be avoided. These descriptions will usually follow one of the patterns: country,region,...,city,... (indicating a location within the borders of some country), ocean,sea,island,... (indicating a location on an island that may be a possession of, but is not considered to be within the borders of, any country), ocean,sea,description (indicating a location removed from any land mass, e.g. on a ship at sea), continent,region,... (indicating a location on a continent that is not within the borders of any country - the continent in question will invariably be Antarctica). With the exception of the description element, child elements with text content should contain only the name of the associated location component, and not a descriptive sentence. Content model (((ocean?, sea?, island?) | (continent?, country?)), region?, subregion?, district?, city?, subcity?, subsubcity?, area?, subarea?, road?, place?, point?, description?, coordinates?, direction?, note?) Used inside scene ocean If the location is at sea, at a distance from a continent or island, the ocean may be specified. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location sea The sea, if any, within the relevant ocean (e.g. the Andaman Sea is part of the Indian Ocean). Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location island An island within the specified ocean or sea. This element is intended for islands which may be posessions of, but are not considered an integral part of any country. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location continent The continent of the location. This would usually be omitted, but would be used if the location is not part of any country (e.g. a part of Antarctica). Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location country The country of the location. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location region A region within the location. The type attribute may be used to specify the type of region (e.g. province, state, etc.). For example, in the US, typical usage would be to use the region element to represent a state, and the subregion or district element to represent a county, while in Italy a region element would represent an official region, and a subregion element would represent a province. Content model %Text; Attributes type CDATA #IMPLIED xml:lang NMTOKEN #IMPLIED Used inside location subregion A subdivision of the region. The type attribute may be used to specify the type of subdivision. Content model %Text; Attributes type CDATA #IMPLIED xml:lang NMTOKEN #IMPLIED Used inside location district A subdivision of the subregion, when necessary. May also be a direct subdivision of the region when the subregion is omitted. The type attribute may be used to specify the type of subdivision. Content model %Text; Attributes type CDATA #IMPLIED xml:lang NMTOKEN #IMPLIED Used inside location city The city of the location. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location subcity A subdivision of the city, such as a suburb, borough, or ward. The type attribute may be used to specify the type of subdivision (e.g. an arrondissement of Paris or a ku (ward) of Tokyo). Content model %Text; Attributes type CDATA #IMPLIED xml:lang NMTOKEN #IMPLIED Used inside location subsubcity A subdivision of the subcity, when necessary (for example, Asakusa is a subdivision of Taito-ku, which is a ward of Tokyo). The type attribute may be used to specify the type of subdivision. Content model %Text; Attributes type CDATA #IMPLIED xml:lang NMTOKEN #IMPLIED Used inside location area The area is intended for a level of detail below that of city, when a city is specified (e.g. `Central Park'), or below that of district when there is no relevant city (e.g. `Kruger National Park'). The type attribute may be used to specify the type of subdivision. Content model %Text; Attributes type CDATA #IMPLIED xml:lang NMTOKEN #IMPLIED Used inside location subarea The subarea is intended for a level of detail below that of area (e.g. 'Conservatory Garden' when the area is 'Central Park', or 'Skukuza Camp' when the area is `Kruger National Park'). Content model %Text; Attributes type CDATA #IMPLIED xml:lang NMTOKEN #IMPLIED Used inside location road A road or city street. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location place The place is intended for a level of detail below that of area, when appropriate. The type attribute may be used to specify the type of subdivision. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location point The point is intended for a level of detail below that of place, when necessary. Content model %Text; Attributes xml:lang NMTOKEN #IMPLIED Used inside location coordinates The (latitude, longitude, altitude) coordinates (e.g. obtained from a GPS device) of the location. The datum attribute specifies the map datum for the coordinate system, which is WGS 84 by default. The relevance attribute specifies whether the coordinates represent an estimate of the specific point at which the photo was taken, or merely indicate the general area (e.g. if the photo was taken at a significant monument, the coordinates might be copies from the wikipedia entry for that monument). The uncertainty attribute provides an estimate of the uncertainty (in units of metres) of the coordinates. When the relevance is set to "area" and an uncertainty estimate is provided, the implication is that the unknown "point" coordinates lie within the uncertainty radius of the provided coordinates. Content model (latitude?, longitude?, altitude?, measurement?, estimation?, note?) Attributes datum CDATA 'WGS 84' relevance (point|area) #IMPLIED uncertainty CDATA #IMPLIED Used inside location latitude The location latitude. Content model %Latitude; Used inside coordinates | measurement longitude The location longitude. Content model %Longitude; Used inside coordinates | measurement altitude The location altitude (in metres by default). The optional reference attribute specifies whether the specified altitude is Above Mean Sea Level or Above Ground Level. Content model %Real; Attributes units CDATA 'm' reference (amsl|agl) #IMPLIED Used inside coordinates | measurement measurement Details of the measurement of the location coordinates. Note that measurement implies the use of a GPS receiver or other navigation device, while estimation refers to a (usually) less reliable approach, by use of a map or satellite imagery with coordinates, or by comparison with a separate geotagged image of approximately the same scene. The optional association attribute indicates whether the location information was associated with the photo at the time of creation ("immediate"), by use of a GPS device tethered to a DSLR, for example, or at a later stage ("delayed"), by correlating a GPS log with an EXIF time stamp, for example. Content model (device?, date?, time?, latitude?, longitude?, altitude?, hdop?, vdop?, pdop?, note?) Attributes association (immediate|delayed) #IMPLIED Used inside coordinates hdop Horizontal Dilution of Precision (of a GPS measurement). Content model %Real; Used inside measurement vdop Vertical Dilution of Precision (of a GPS measurement). Content model %Real; Used inside measurement pdop Positional Dilution of Precision (of a GPS measurement). Content model %Real; Used inside measurement estimation Details of the estimation of the coordinates, e.g. by locating relevant features on a map. Typically only one of the measurement or estimation elements will be specified, but if both are present, the implication is that the measured coordinates were modified based on some other method of estimating the position. For example, if GPS data are available, but are inaccurate due to poor reception, the coordinates may be estimated by using a recognised location on a map, but it may still be desired to record the measured location in case the estimate is later found to be poor. Content model ((source-frame | source-ref)?, description?) Used inside coordinates source-frame If the coordinates are estimated by comparing the scene with another photo with known coordinates, and which has been assigned a group-id and frame-id, the source-frame element may be used to provide relevant information on the geotagged photo, and the group-id and frame-id attributes should provide its corresponding id tags. Content model %Text; Attributes group-id NMTOKEN #IMPLIED frame-id NMTOKEN #IMPLIED Used inside estimation source-ref If the approximate coordinates are obtained from some internet resource, the source-ref element may be used to describe the resource, and the href attribute should provide a link to the relevant resource (e.g. a wikipedia entry). Content model %Text; Attributes href CDATA #IMPLIED Used inside estimation direction The direction in which the camera was pointed (i.e. from the viewpoint to the scene; coordinates are usually considered to be of the scene viewpoint, and always have this interpretation when direction is specified). Content model (azimuth?, elevation?) Used inside location azimuth The compass direction of the scene from the viewpoint (e.g. "0" for North, "90" for East, etc.) in the range 0 to 360 (degrees). Content model %CompassDirection; Used inside direction elevation The elevation angle of the scene from the viewpoint (e.g. "0" for horizontal, "90" for directly upwards, etc.) in the range -90 to 90 (degrees). Content model %ElevationAngle; Used inside direction content A detailed description of the scene content. Content model ((person | object)+ | segment+) Used inside scene person The optional href attribute represents the person's web page. Content model (name, address?, phone?, fax?, email?) Attributes href CDATA #IMPLIED Used inside content | segment object The optional type and href attributes represent the object type (e.g. building, vehicle) and a URL associated with the object (e.g. for a museum). Content model (name?, address?, note?) Attributes type CDATA #IMPLIED href CDATA #IMPLIED Used inside content | segment segment A segment of the scene. The label attribute allows identification of segments (e.g. foreground, upper-left, etc. Content model (segment | person | object)+ Attributes label CDATA #IMPLIED Used inside content | segment equipment A description of the camera and associated equipment. Content model (body?, body-attachment?, lens?, lens-attachment?, illumination?, support?, note?) Used inside frame body The camera body. While often fixed for a particular roll, it is included here since it forms part of the equipment, and is also not always fixed (e.g. APS mid-roll roll change). Content model (make?, model?, serial?, type?, note?) Used inside equipment body-attachment An accessory attached to the body, e.g. motor-drive, multi-function back Content model (device+, note?) Used inside equipment lens A lens. Content model (make?, model?, serial?, type?, note?) Used inside equipment lens-attachment An accessory attached to the lens, e.g. teleconverter, extension-tube, diopter, filter, lens-hood. Content model (device+, note?) Used inside equipment illumination An illumination source, e.g. flash. Content model (device+, note?) Used inside equipment support A support, e.g. tripod leg set, ball-head, monopod. Content model (device*, note?) Used inside equipment device A description of an item of equipment. The optional type attribute represents the device type (e.g. filter, ball-head, flash). Content model (make?, model?, serial?, firmware?, note?) Attributes type CDATA #IMPLIED Used inside measurement | body-attachment | lens-attachment | illumination | support model The model number/code of a photographic product. Content model %Text; Used inside body | lens | device | hardware serial The serial number/code of a photographic product. Content model %Text; Used inside body | lens | device | hardware firmware The firmware version. Content model %Text; Used inside device | hardware exposure A description of film exposure and camera metering settings. Content model (aperture?, shutter?, exp-comp?, flash?, flash-comp?, rated-speed?, mode?, metering?, note?) Used inside frame aperture The lens aperture in f/-stops. Content model %Real; Used inside exposure shutter The shutter speed in seconds. Content model %Fraction; Used inside exposure exp-comp Exposure compensation in EV units. Content model %Real; Used inside exposure flash Flash usage description. Content model %Text; Used inside exposure flash-comp Flash exposure compensation in EV units. Content model %Real; Used inside exposure rated-speed ISO speed setting of the camera (useful if different from the actual film ISO speed, or for a digital camera). Content model %PositiveInteger; Used inside exposure mode Exposure mode (e.g. program, manual, shutter priority) for an automated camera. Content model %Text; Used inside exposure | focus metering Metering mode (e.g. matrix, centre-weighted, spot). Content model %Text; Used inside exposure focus Information relevant to lens focus. Content model (focal-length?, focal-distance?, mode?, note?) Used inside frame focal-length The lens focal length (useful when the lens doesn't have a fixed focal length), in millimeters by default. Content model %Real; Attributes units CDATA 'mm' Used inside focus focal-distance The focal distance (in metres by default). Content model %Real; Attributes units CDATA 'm' Used inside focus evaluation An evaluation of the merits of the frame. If a score attribute is specified, it represents the aggregate rating for the frame, independent of the score values for child elements; if it is not specified, the aggregate score should be computed as a weighted average of the score attributes of child elements. Content model (artistic?, technical?) Attributes score CDATA #IMPLIED Used inside frame artistic An evaluation of the artistic merits of the frame. The element content is a comment on the evaluation, and a numeric rating is provided by the score attribute. Content model %Text; Attributes score CDATA #IMPLIED Used inside evaluation technical An evaluation of the technical merits (focus, depth of field, etc.) of the frame. The element content is a comment on the evaluation, and a numeric rating is provided by the score attribute. Content model %Text; Attributes score CDATA #IMPLIED Used inside evaluation digimage The details of an individual digital image. The optional href attribute represents the location of the digital image file being described. The group-id attribute is the id of the roll, sheet, or digital element in which the corresponding photographic frame is described, the frame-id attribute is the id of that frame element, and the image-id provides an id number for the specific digital file representing that frame (e.g. two scans of the same film frame would have the same group-id and frame-id, but different image-id. Content model (properties?, history?, index-image?, note?) Attributes href CDATA #IMPLIED group-id NMTOKEN #IMPLIED frame-id NMTOKEN #IMPLIED image-id NMTOKEN #IMPLIED Used inside photo | frame | digimage-set digimage-set A container allowing the scope of defaults elements to be restricted to the contained set of digimage elements. Content model (defaults?, ((digimage | digimage-set)+, defaults?)+) Used inside photo | digimage-set properties Details of the image properties. Content model ((width, height)?, bit-depth?, file-format?, icc-profile?, file-hash?, image-hash?, note?) Used inside defaults | digimage width The image width in pixels Content model %PositiveInteger; Used inside properties height The image height in pixels Content model %PositiveInteger; Used inside properties bit-depth The bit depth of a sample, commonly 8 or 12 bits per colour band per pixel. Content model %PositiveInteger; Used inside properties file-format The image format. This may either be described by using the std attribute within an empty element, or omitting the std attribute and describing the format within the element content. When possible, the former approach is preferred. Content model %Text; Attributes std (bmp|crw|cr2|dng|jpeg|j2k|nef|pef|png|psd|tiff) #IMPLIED Used inside properties icc-profile The ICC profile for the image colour space. The optional href refers to the relevant ICC profile specification file. Content model %Text; Attributes href CDATA #IMPLIED Used inside properties file-hash The result of a hash function applied to the image file. Not as reliable as the hash value of the image content (i.e. the raw decoded bitmap representation of the image, which is not dependent on the specific image file format), but may be faster to compute in some circumstances, and therefore useful for an initial match test. Content model %HexString; Attributes type (md5|sha-256) 'md5' Used inside properties | source-image image-hash The result of a hash function applied to the image content. Useful for ensuring a correct match between the image description and the image data file. Content model %HexString; Attributes type (md5|sha-256) 'md5' Used inside properties | source-image history Details of the creation and editing history of the image. More than one editing element is allowed so that multiple stages of editing, using different software, may be described. Content model (origin?, editing*, note?) Used inside defaults | digimage origin Details of the origin of the image; either a film scanner or digital camera, or source image(s) from which it is derived via editing (multiple source images are possible when, for example, a panoramic image is composed of a number of smaller images). Content model ((date?, time?, (scanner | camera)?) | source-image+) Used inside history editing Details of the editing operations applied to the image. Content model (date?, time?, software?, operations?, note?) Used inside history scanner The details of the scanner and scanning process. Content model (hardware?, software?, settings?, note?) Used inside origin camera The details of the digital camera. Content model (hardware?, settings?, note?) Used inside origin source-image A description of the source image to which editing operations were applied to derive the image described by the image element. The group-id and frame-id attributes should only be used when they differ from the respective values of the image element. Content model (file-hash?, image-hash?) Attributes href CDATA #IMPLIED group-id NMTOKEN #IMPLIED frame-id NMTOKEN #IMPLIED image-id NMTOKEN #IMPLIED Used inside origin software The software used to perform the editing. Content model (publisher?, name?, version?, note?) Used inside editing | scanner operations The details of the editing operations. Content model operation+ Used inside editing hardware The details of the camera or scanner hardware. Content model (make?, model?, serial?, firmware?, note?) Used inside scanner | camera settings The details of the camera, scanner, or editing software settings. Content model (setting+, note?) Used inside scanner | camera | operation publisher The name of the company that developed the software. Content model %Text; Used inside software version The version number of the software. Content model %Text; Used inside software operation The details of an individual edit. In addition to the text description, further details may be specified by providing the relevant command line when editing was performed via a command shell, or settings for operations applied via a GUI. Content model (description?, (command | settings)?, note?) Used inside operations command The command line used to apply the edit. Content model %Text; Used inside operation setting The setting element describes software configuration settings during scanning. The name attribute should contain the name of the setting (e.g. multi-pass, ICE), and the element content represents the corresponding value. Content model %Text; Attributes name CDATA #REQUIRED units CDATA #IMPLIED Used inside settings ./photoml-0.28/docs/customfo.xsl0000644000175000017500000000322511371054564016127 0ustar brendtbrendt 11 blue false 9pt 9pt start ./photoml-0.28/docs/pmldoc.css0000644000175000017500000000213611361730560015524 0ustar brendtbrendtbody { margin-left: 3%; margin-right: 3%; margin-top: 4em; margin-bottom: 4em ; font-family: sans-serif; color: black; background: white; } h1.title { text-align: center; } p { text-align: justify; } div.informaltable { margin-left: 2%; } div.informalexample { margin-left: 0%; } table { #border: 1px solid rgb(100,100,100); border-collapse: collapse; color: black; background: rgb(240,240,240); } table.simplelist { margin-left: 2%; border: 0px; background: white; } td { padding: 4px; } pre { color: black; background: rgb(240,240,240); border: 1px solid rgb(100,100,100); padding: 6px; } .informaltable td { padding-right: 2em; background: white; border: 0px; } span.application { font-weight: bold; } .dtdtopcmnt { margin-left: 6%; margin-right: 6%; } .dtdeltname { font-weight: normal; } .dtdelttitle, .entdeftitle { text-align: left; font-size: 130%; font-style : normal; font-weight : normal; color: #a80000; } .dtdeltdesc { margin-left: 6%; margin-right: 6%; text-align: justify; } .dtdeltdef { font-size: 60%; } ./photoml-0.28/docs/Makefile.in0000644000175000017500000000433411361730560015603 0ustar brendtbrendt# Makefile for PhotoML docs # Most recent modification: 7 December 2007 prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@/photoml docdir = @datadir@/doc/photoml SECTIONS := $(shell find sections -name "*.xml") INSTALL = @INSTALL@ SHELL = @SH@ RM = @RM@ DTDTO = @DTDTO@ XMLTO = @XMLTO@ FOP = @FOP@ LYNX = @LYNX@ LYNXFLAGS = @LYNXFLAGS@ .PHONY: all dtddoc test install uninstall clean clean-html clean-pdf clean-txt all: dtddoc pmldoc.html pmldoc.pdf pmldoc.txt dtddoc: @(cd sections; make) test: install: all @echo "Installing documentation in ${DESTDIR}${datadir}";\ if [ ! -d ${DESTDIR}${datadir} ]; then \ ${INSTALL} -d ${DESTDIR}${datadir}; \ fi;\ if [ ! -d ${DESTDIR}${docdir} ]; then \ ${INSTALL} -d ${DESTDIR}${docdir}; \ fi;\ ${INSTALL} -m 644 pmldoc.html pmldoc.css pmldoc.pdf pmldoc.txt\ ${DESTDIR}${docdir} uninstall: @echo "Uninstalling documentation in ${DESTDIR}${datadir}";\ ${RM} -f ${DESTDIR}${docdir}/* @-rmdir ${DESTDIR}${docdir} 2>/dev/null;\ @-rmdir ${DESTDIR}${datadir} 2>/dev/null clean: clean-html clean-pdf clean-txt @${RM} -f pmldoc.fo;\ (cd sections; make clean) clean-html: @if [ -x "${XMLTO}" ]; then\ ${RM} -f pmldoc.html;\ else\ echo "Not cleaning HTML document - can't find tool for rebuild";\ fi clean-pdf: @if [ -x "${XMLTO}" -a -x "${FOP}" ]; then\ ${RM} -f pmldoc.pdf;\ else\ echo "Not cleaning PDF document - can't find tool for rebuild";\ fi clean-txt: @if [ -x "${XMLTO}" -a -x "${LYNX}" ]; then\ ${RM} -f pmldoc.txt;\ else\ echo "Not cleaning TXT document - can't find tool for rebuild";\ fi %.html: %.xml $(SECTIONS) @if [ -x "${XMLTO}" -a -x "${DTDTO}" ]; then \ ${XMLTO} -m customhtml.xsl xhtml-nochunks $<; \ else \ echo "Cannot update HTML document from XML source document"; \ fi %.pdf: %.xml $(SECTIONS) @if [ -x "${XMLTO}" -a -x "${FOP}" -a -x "${DTDTO}" ]; then \ ${XMLTO} -m customfo.xsl fo $< ;\ ${FOP} $*.fo $@; \ ${RM} $*.fo; \ else \ echo "Cannot update PDF document from XML source document"; \ fi %.txt: %.html pmldoc.css @if [ -x "${LYNX}" ]; then \ ${LYNX} ${LYNXFLAGS} $< > $@; \ else \ echo "Cannot update TXT document from HTML document"; \ fi ./photoml-0.28/docs/pmldoc.pdf0000644000175000017500000077347211471535473015537 0ustar brendtbrendt%PDF-1.4 % 4 0 obj << /Title (PhotoML: Photo Description Markup Language) /Author (Brendt Wohlberg) /Creator (DocBook XSL Stylesheets with Apache FOP) /Producer (Apache FOP Version 0.95) /CreationDate (D:20101119110023-07'00') >> endobj 5 0 obj << /N 3 /Length 15 0 R /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 6 0 obj [/ICCBased 5 0 R] endobj 7 0 obj << /Type /Metadata /Subtype /XML /Length 16 0 R >> stream PhotoML: Photo Description Markup Language Brendt Wohlberg 2010-11-19T11:00:23-07:00 1.4 Apache FOP Version 0.95 2010-11-19T11:00:23-07:00 DocBook XSL Stylesheets with Apache FOP 2010-11-19T11:00:23-07:00 endstream endobj 10 0 obj << /Type /Annot /Subtype /Link /Rect [ 164.074 306.633 213.362 316.533 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.w3.org/TR/photo-rdf/) /S /URI >> /H /I >> endobj 12 0 obj << /Type /Annot /Subtype /Link /Rect [ 410.995 280.233 441.542 290.133 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.i3a.org/technologies/metadata/dig35/) /S /URI >> /H /I >> endobj 13 0 obj << /Type /Annot /Subtype /Link /Rect [ 375.952 113.25399 438.824 123.15399 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.w3.org/XML/Schema) /S /URI >> /H /I >> endobj 14 0 obj << /Length 17 0 R /Filter /FlateDecode >> stream xZ~?z/OGM% @hÑ(ВȡHۋ[ I?iv?>_*LLȏ/ `AJLUlB?||Ҙ*'y>ڌ`G WAD,ܐ$ċ2yZN՞X 6]F$j*7Tޥb\S񚨋ZB<ULnx}JҥaNKYh$FccHiC9BkwEE;-e]ߎwh{gfW󊨋ZB$$P0% 9f2AGC-鋪ovڂ6JL0O Uhށfhqi)DAYwGݖcTLX߃|խᮕ''޸8YTaY(g?H$q eG<2֟ =/ lEm#< WA``L⢷dH_!bE!]L:mFDyh0DzmZapVL0ղ"ڞ @@u:C ds6Ss97M58Fl|r!Ra't祹}0Blȇn.F.ChlzDD9?Bdzz~`cM7, :O3$LY?*!/ls@C '6a("PeØ,O!A;l/}|Cp5oP<%h@$Ρ(ָ#"Q *P|")ibhJaFr9ǖM>#]*S9g̭4a:*ӊ=CdS߇4T܇pn/m!d`Dїu#FC+e_l|ł7 ^n 72iw:;3!zhנ$}@QbB)Th:AwxXKyېgqwջt3cQzAJdOP3C"žxW=&)khȬciSЮm>MP-) z93LAZ)evT%+kDg42QSst6& .LH4Kc s6ga2_YvШe{FVy֬io5̲/Eb駡Cϓ(,'I,OǬ!n(TY`/'M6[a> endobj 15 0 obj 2596 endobj 16 0 obj 952 endobj 17 0 obj 2509 endobj 19 0 obj << /Type /Annot /Subtype /Link /Rect [ 245.352 670.664 269.794 680.564 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.w3.org/XML/) /S /URI >> /H /I >> endobj 21 0 obj << /Type /Annot /Subtype /Link /Rect [ 395.443 670.664 422.943 680.564 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.w3.org/Style/XSL/) /S /URI >> /H /I >> endobj 22 0 obj << /Type /Annot /Subtype /Link /Rect [ 382.241 561.023 485.71 570.923 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.gnu.org/copyleft/gpl.html) /S /URI >> /H /I >> endobj 23 0 obj << /Type /Annot /Subtype /Link /Rect [ 267.61902 424.982 306.56702 434.882 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.xmlsoft.org/) /S /URI >> /H /I >> endobj 24 0 obj << /Type /Annot /Subtype /Link /Rect [ 329.442 424.982 361.66898 434.882 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.xmlsoft.org/XSLT.html) /S /URI >> /H /I >> endobj 25 0 obj << /Type /Annot /Subtype /Link /Rect [ 163.989 385.38202 199.739 395.282 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://cygwin.com/) /S /URI >> /H /I >> endobj 26 0 obj << /Type /Annot /Subtype /Link /Rect [ 426.931 328.54102 444.036 338.441 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.perl.org/) /S /URI >> /H /I >> endobj 27 0 obj << /Type /Annot /Subtype /Link /Rect [ 486.44 328.54102 520.672 338.441 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.xmlsoft.org/) /S /URI >> /H /I >> endobj 28 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 315.341 147.511 325.241 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.xmlsoft.org/XSLT.html) /S /URI >> /H /I >> endobj 29 0 obj << /Type /Annot /Subtype /Link /Rect [ 389.431 273.403 418.141 283.303 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://cybercom.net/~dcoffin/dcraw/) /S /URI >> /H /I >> endobj 30 0 obj << /Type /Annot /Subtype /Link /Rect [ 375.065 243.003 414.775 252.903 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.wohlberg.net/public/software/photo/imageinfo/) /S /URI >> /H /I >> endobj 31 0 obj << /Type /Annot /Subtype /Link /Rect [ 375.065 212.603 414.775 222.503 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.wohlberg.net/public/software/xml/xgrep/) /S /URI >> /H /I >> endobj 32 0 obj << /Type /Annot /Subtype /Link /Rect [ 319.108 119.36202 431.344 129.26202 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.wohlberg.net/public/software/photo/photoml/) /S /URI >> /H /I >> endobj 33 0 obj << /Length 34 0 R /Filter /FlateDecode >> stream xZ[sۺ~ϯ< x6ZfEA%}I\3>u8o.WyKោ3/߿ 0% bQ ͻ_#Ro ox]pw-<;AySny˿)>AB">#A>={ȚadpU>ۊq/7iD̀A%RXJۦV8@_> f@R$'$˝ְhX": S/ 3QB|O-3U /Ro6HrRj$G@_oQlߋu/bSTԴV$ ~?|x5^Jpn0hn>ayzKM3g]'֘C4\LZú٘4<]׺D0[fK¬)!`[oc8$l ?ם]9VV\ oQe{۾)!Yyޫi㲆Z-o}y4c+NΦ'Ss/t zryl‡ f8tltHkxZyd.\H!׃럮UThȪmB1``"k0iBNsc]0F9Ip\jL N`&'a ~xZq1]B't4K;^B XaNyBUF"ԮIu;v %Fr8Wec#4 )bm`?vs7Ic#CHRc?`t^O -]}ֱ*/{cj4P7.ɟfK]9XvŠ>qup 9`ݺ$eC jJ!!<?>cR=!Ȼ⇸O:eѡ^5P!w:EGV٪tWNIʁLA&Leu2@[M>ׄ`ƠCcu&h/aćV픽MϚij4|rW 0Q(J8B+Qnݭ/jiy$Õ=Sh3Sh#㹽07eds3hcn s! `έ+F1H ˳$O  |˻)D+, ^9lsrDx':W.bP<7'I4T4 l~Sl{NaV˫aEvYYlrR_Ce \=B|Q4u%[uKRvQ`kr΀ B<RI%d#SM"i+!*v1zd1\;8gf95OFǺ~|; v Π>Zo$L>2iw;V! :4\)ܡ 8B ~MPdf`XA@c*XF(NdtY(Ud Cj \ZeVVcA@=)k8Ӹ~DR*|<8,),` v|U9мo05\8:ʫ t6^w$p|`Q#h b9lQ׵&x859Ǥ\η &nUߊ09M0PU5g/6 ᲇCF7r(3T=J8u8x7gI8/co;{H)gK*% #վ4b(ZH+ Gֽd9Fcyn1o0 fXatcXUi:YF-;/BH A4%añO *krt!4;a84lf:6”rwn }ׄr‘,9΍(ڃ;ijcTgS:S2Uߪ~]dpK6MtN]v ȇ&&rnx;:j9Κ DS *^:oe,n(>=E8a:ƄS[n?zӜC-b5׹e!p+jS_X:kv0(>(&j/L4fZ/zA? 3*Xh|0 Tp8=1Gk5c[I {$~8\'鿵O&}:qwUŅݲy[C>zݫd*U/X3qⓌww<% zY|z+##(c(T=b]"#D>O1\w/u0A#[?Tc0!OZW*l) 'A&ܞ`.7\Fkp_IWa(e: Oo3*(-RS[E;4u.}o胞l견R\PVo ,~>X  b`9u FF}&,o$ !LP'30Hz6'GM !#w3 endstream endobj 20 0 obj [ 19 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R ] endobj 18 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 20 0 R /Contents 33 0 R >> endobj 34 0 obj 2522 endobj 36 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.7 604.152 196.04999 614.052 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.redhat.com/) /S /URI >> /H /I >> endobj 38 0 obj << /Type /Annot /Subtype /Link /Rect [ 199.108 604.152 229.655 614.052 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://fedora.redhat.com/) /S /URI >> /H /I >> endobj 39 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.308 604.152 277.30798 614.052 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.ubuntu.com/) /S /URI >> /H /I >> endobj 40 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.89 590.952 250.113 600.852 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.wohlberg.net/public/software/photo/photoml/) /S /URI >> /H /I >> endobj 41 0 obj << /Length 42 0 R /Filter /FlateDecode >> stream xZYo8~ϯУ$H:mgzEz1=6Yfleɫ#ǿߢxAwTbݤL~n),(WFQbB'~B!4&4$ 6ڡxu qˮ: U\ D)ጇ! #Q!},ip_4؋燫OHՈYO JYJH6?mvN9a+WppH4# H1 8 :<:A.U90Hųb߱*lK'HĢ<Ͽ{s,VAUE]/< ֛D>$%18+bmTǮ%ix):=mݣ&u ?,;qwcyBSnˢVͅ ӵ:X^La>_6E߷eU %I.C`ڠ9G*Zu2l\$fY e AM8҈I^tay[[퓅LbѡȕmB+֢m($^Fs Sh4dL]ޕ8cd0a)B~PjWۄ͆T0a\󏏎BЩ(LkxYlkg="AJt]]>蛮eY>wͮ}iعH30*ĕh\t6FW0s/on\dOϺ^r ] <$0 '.:W0Smr` j|:T!LD 9sU;1kس2w(&pPN¹a^쌑\C]s46hc9 ![TO5ovr8OzڭFߨs]ը3bnvUwvWuڮR9[Va"N2d&v9ȵ-M)apdgC&Ier\U ã\f.Yh4yw)gVG<6D4~ܔ4E9"bpA8TT)L I LĪm 钇96x0Beݏ%B_Uyp5W06£Jb˜ɰRWc_Aʓnmo_5Wʉ|]Q zS> e>FUE:k"\|,ִBZ^ >أTl=+(7a-1|㽾;ƌL%Cλ>6;߉g(#ՍOܡ띇-މoz߼qx(hZ0uE5 *1ًo_PO#ʠjEy.mX'pN\:Ì#9\͋K'Q5,6BkeB1)X:G5 #V8tuTPOxuץxy"i0Fl2 Y0qpTr0^4!i@ne}@JR>EmQ0K 9fËڃ&ca6oХB 㪘a K]5Nj/ܵiĨHߏ;HHڠ%TxujP_OOKdr?hPĎU5,բ,[|V ]H8Uwm j bN.ԃ¨n@`[Ɍ[W[j+WyrwpN1IÿۃiB"p:)v|jbFtj;].Ii*tC5ıJ<[ ՞~P)cPc՗0tM}ovqNu}0,Q s|YrۅB1ud^*Y"!4luW!ZYyteB'iw$#6)iwq}xwn)TD(7!lhOV˹FϾXQHBy:zf6 G]L4z}`=d MUU iܻfB~/iJp0=V!И\1 WsZrsIrӤ &f zp8k2l}k?WKcٓXȜK4 I*@#f0wZڹI4* FMO#ƀfԋh v2o> endobj 42 0 obj 2576 endobj 46 0 obj << /Length 47 0 R /Filter /FlateDecode >> stream xZK6ϯбaA 6sX$d֖II-"Y|lИJE]YFg??cY3Q ?@<xgeϻ 0I"1ÿOC4vhOSwuDIrS3Ή(iY෺{;o?x0% J3^Z\p^e[ vY@VXvr|!I.vAۡ/xbm5*ؠ$qX[dӼFvo[;ՇxCsli ] T-{<{M;>6v^{yt^`h/&>4:߹uu?61 xצ]D#&^aF;$#6F_\ڥ!V3TJ"페K'oKqc3];0XH:`opGO,IsՁ{)hPbeND "d5'{nN$%sY%M6 |}Zɀb`'ȣ[Ǡ:`˯y1NqGT R@CтIm m3𞠹V)BRU'|LDpDOGvؔ-vCFMBƫNduK{\€W@0>9ܻwӊ|9|nFl_pcGQԶZ"D6DfxPQowM?4fSPg`g&>`搴% k3|:B{sx8Zcw͕f?8/r4z[e9G=T0BC ,]H" a5n07<]gKQuwn4WE)R.\OBOkJY(*2^^ݮ]%7j J҃Rmn2\gVbe7=B|>BߕqϞR l!:MhfkSrdH)A (l*m1uc&c9? }YͬE -:7~*@?xqRo#Lg㯋4*[Np2f~AsoƗǟ.J"U4PolhN@ml_3"M{иOw p9FbMI{ڔ Gηrs5[Qf4j+#њԾB7͙2zBy3X6lzA WvOOTs r~gtWߏVGTr xQ`!N4//sDVa+<Z.v`;GE~qAD%oWSAZ^N[5)K` üd uǦcԵtW# ^YItv.W{ Ln1U|A蔎mg~)U BEyئI&x WGXИ(49,FA endstream endobj 45 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Contents 46 0 R >> endobj 47 0 obj 2743 endobj 49 0 obj << /Length 50 0 R /Filter /FlateDecode >> stream xZYs6~S'5l%$>$qW$4(ؖ>}w`x ?oH !F<,!_"#x X^/?~ϲ^Wٱ6OOC(!4aLN~IǞikӝwx%*#$g0(TMPrz\+􍧅1yĶ^t'{ &[Eq uQ0Dbgj巵<=1X G@! KǜUњ +R3c_l\yeNB@{LCW̅(f\$@gO8&},`r;C=N'(Z`O<8iv89f&Ow2|.M.ܑ3}J:ثtuF^Iҵ[ԷI}vm#>.0Dsɶ٩#g)#dPlf0ʯzu~Fg?+[ǣO6eVX \{.x¢/Q-f3:O61c~h~4ACC+-T 0P/$ dfF\=jFx|_Yſ^F'jy&"{dh:`w>?~v|X{Y<-f}HiδڕDˎgz!f8Y8G!P}A\:%Z;mtl׈1WSEMnA > endobj 50 0 obj 2093 endobj 52 0 obj << /Length 53 0 R /Filter /FlateDecode >> stream xXYo6~ϯУEF]6oM6 kK6$)*RIq873" 9?rw ih$Ii¤O"B p^$$ BGD#"YK)&~w^Vmg~R$&"&Ƥ1<;9{2n>92B[U?yd0*) L UHO@TWWfa r2Ey0uk(h2B[VS~BϚ-<޾WR㢷: J@(F=udM<FZh++T& q~,άzC1၊~5@e0xR"8,<]ٳ.rDأm"vrlUOTg;]%[~t&[SSCS zA ))m|eJ2hvow'"T"LŞæ2r3tΟj׫UaRIn@':8Ieu[]z y/lPabZunuh$0he1 cxP]9aIGbWk/)Қj-;s BQ2~kLY 6c+(+FX(%u08*B=sB XGM~%a(|kC ".bXT =dƐآZ(aĤIJB[|*ZS!0ct^理bn #f?Uf?`XO7P?X_ }(HB|M.cjd ju@)C#UthjD\cfHJ>ADE -0Zi"V0!``uXǁU :#bWERiP9Y].8@KgCL67Y)gY]?cfyA[ ]m|0E0pnsyZaŨ1LDȇ|{abNuy!n Rϥ:%܍ 0*U]qvͰ;UK RZA9&+X( hMPBBX.+#ZbP-hZn`G2ݸg3N ١N )3Hq cECJ(bSs0P/s5ZhunDT!JVn1_ήC\Hj[kM$S&˻Sz]q",]L&tMiLu#!&ˏA¾s=aѰKA'!wn vr\q"Bs×\e> endobj 53 0 obj 1570 endobj 55 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.04599 521.675 257.665 531.575 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.xml.com/pub/rg/XML_Editors) /S /URI >> /H /I >> endobj 57 0 obj << /Type /Annot /Subtype /Link /Rect [ 139.993 451.638 171.591 461.538 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.gnu.org/software/emacs/emacs.html) /S /URI >> /H /I >> endobj 58 0 obj << /Type /Annot /Subtype /Link /Rect [ 193.251 451.638 230.349 461.538 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.xemacs.org/) /S /URI >> /H /I >> endobj 59 0 obj << /Type /Annot /Subtype /Link /Rect [ 122.0 413.704 148.895 423.604 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.lysator.liu.se/projects/about_psgml.html) /S /URI >> /H /I >> endobj 60 0 obj << /Type /Annot /Subtype /Link /Rect [ 122.0 396.504 139.116 406.404 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.menteith.com/wiki/tdtd) /S /URI >> /H /I >> endobj 61 0 obj << /Type /Annot /Subtype /Link /Rect [ 122.0 379.304 148.27899 389.204 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.menteith.com/wiki/xslide) /S /URI >> /H /I >> endobj 62 0 obj << /Type /Annot /Subtype /Link /Rect [ 122.0 362.104 163.547 372.004 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.garshol.priv.no/download/software/css-mode/) /S /URI >> /H /I >> endobj 63 0 obj << /Type /Annot /Subtype /Link /Rect [ 280.14502 336.49002 313.56702 346.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.jclark.com/sp/) /S /URI >> /H /I >> endobj 64 0 obj << /Length 65 0 R /Filter /FlateDecode >> stream xY[6~]5օSdMm$ӕrf+Q!C`f=it'{-ADHG#N@IH^{!4"\'BggcZ6o^;;>px2_ G=C)b>Ø>xqnY ^dEiFP *vh9ZM_xz7xma,y7pC4RQ!υ?o>d TQԲ;pŃH3(ך}~ Mf2m-JTZ$;gE"-ȵj!EdZ糓S[a k}io+RWJr扔d\f.⺬*,t].\+Z٣Tk c^,iTr-5d.C0as$5#'n *:TXGy(Vn=kRfB_sl&^"LNh LSEZVy\ߙ>¡Et{gp3WtWh ;>86~(ʧ\$ hr|X-=xN%p1oD :'Д&q#[~̅Aˀccٞ,U4B0Op@Ap#KsYZ OE1]A֖mhvƖ`-ƚ͊8o{_V9}hx e~UeRt0l̅Lh^P~⢇-J.ɦX;e~*H䡈~Qsǰ)፰(wPqrbz]ߖcLpʨn&B:$6m5e[ 'ՠ:x!BVuh/PgxĻ* |RO8<)R2X.i $n soEUcde}`%?xZ/VŞiEQ l|.>|"BUAb~ @*37|ytJ̠Ϥע5Hnc٤6UI{JxU,YgKHyڦ)YȶʺѦi#]9XOύ("dWAeoi*<06cl68aR&HM9?00*~krZ*M$`~]w; n wz mׅف\ I<0h78]_G٬`!Q]UD,e]3Ӵ+XEw61&Yu#Px*Y `%P $k m( Rg1Pd olvfDeJUuG[iRTPDCP.wo~|{Jc IgL$ UzFDkA> &EB,mZ7'U2CWӞhǖKʶHY6qf?5bt2],RpjBKtSd LδԨiWɆ9_,(1pv|l1Z6XQqLGL.f< 9?eyL 3Ȣe\ !Q: 2A9BΩwYA-r5ܕX}% ez4R=u:\]=%j`v^0# %TVB,aj޺P1b2%uk h(/> endobj 65 0 obj 2034 endobj 66 0 obj << /Type /Annot /Subtype /Link /Rect [ 453.534 568.768 491.12 578.66797 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://xmlsoft.org/) /S /URI >> /H /I >> endobj 68 0 obj << /Type /Annot /Subtype /Link /Rect [ 511.269 568.768 540.00104 578.66797 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://xmlsoft.org/XSLT/) /S /URI >> /H /I >> endobj 69 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 489.996 160.931 499.896 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.docbook.org/) /S /URI >> /H /I >> endobj 70 0 obj << /Type /Annot /Subtype /Link /Rect [ 202.125 424.424 229.90399 434.324 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.thaiopensource.com/relaxng/trang.html) /S /URI >> /H /I >> endobj 71 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.978 337.29 288.41998 347.19 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.w3.org/XML/) /S /URI >> /H /I >> endobj 73 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 310.89 260.888 320.79 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 72 0 R /H /I >> endobj 74 0 obj << /Length 75 0 R /Filter /FlateDecode >> stream xZYsܸ~ׯ`4 76Wٖ\qjR[<kjEo&\lJ9y҈OGrGg̪ȝv[ͫlڐi,.ɬ~&>ݓXzVZƾcy&f^-Y҉5ʤ2Y7*~MCd+u8a QޒȈ?N١aT$k;^?'iU*"Tgo. zհch,@o ZS!XEkI 4+w Z_} OC{!ƁuXyQqh[ -޴Ъtҙvu󄌡 qŠ(Dd4xaQ]OBDcsv4ZRj:{!]lEg3W8t}Jq^.n~agwy \7|A {;=)$;0\77l^5(+"64#{f퀮 M,-uER6tYb"qu%DzIq4֟IXlXU;s@NR@ 3]l\N\/}(+y՚#?F\6QH[Mj]  N@!7ܗO8'\E^d.`!I& 2ro1)c݌(=nG81y|GpMfm>>b#Ϗ Rl}Up($p]L/k6DmDltL4 Yxy樏VĢǎ1X)3M]ږ5|먇H&9Lu8L,s힖dYC<s-՝x.r}̙r>?'(yZFAMCUVx .'vJe5?Q -W%-,1yaxZ&@uѾ331-XՖo P8\Mu˂E_Y7u=}aWtWp~hl:ۜ:-(^*@hTvqml#0M x\ ~WL ^NWxJ6KZ%>4m6wG^+J E,5jK8mkKM֢ttKY&mLP3Xf 4~N[,Cm;StyI#‘`T7]"R {PMGuɔ(Ea)}D;C{Mjک 6-coׂ\CUxSzNIѐ: ӯ<)u:gZ/p86:ͮ9"?zuß9n{1n,w|@Xc{]= ՓB V.oY"4U7ːܤ Vb_Z 3Ӻ,9bO\aswE#7F}U*+N /'x~W(b3 n :04ُtԡ ?&ïWWj"9qCUNqrF:O QϠK̓(*NE^u7@c]`(d/, > A,#.s'ވ@^6~;5~.z7/dZlBЧ'*ͻ6"ۦTwԾv41ꩧ+HB}J>Sow/*at/w[dX ?%/}F,nճťa<(N塘łݫ=e4"(o.O3C|L$ϕq/8UA 9(&z~Q-LJ$BAv8=p9Q!Oi_\ƀWN;I:|ީm?/[3ee//l(o#?cjX̡Q/ҴT-]@ d 2ߛkYjwID[tEVB,OP<Ը1_'HzU 1Ǥ<l ^t muUc󾽜FD35Uo_T^gAx endstream endobj 67 0 obj [ 66 0 R 68 0 R 69 0 R 70 0 R 71 0 R 73 0 R ] endobj 43 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 67 0 R /Contents 74 0 R >> endobj 75 0 obj 2464 endobj 77 0 obj << /Type /Annot /Subtype /Link /Rect [ 138.693 695.25 269.661 705.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 76 0 R /H /I >> endobj 79 0 obj << /Type /Annot /Subtype /Link /Rect [ 361.199 381.10202 403.978 391.002 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.w3.org/TR/REC-xml#sec-lang-tag) /S /URI >> /H /I >> endobj 80 0 obj << /Type /Annot /Subtype /Link /Rect [ 353.728 367.902 387.938 377.802 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.ietf.org/rfc/rfc3066.txt) /S /URI >> /H /I >> endobj 81 0 obj << /Type /Annot /Subtype /Link /Rect [ 409.322 367.902 447.822 377.802 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.loc.gov/standards/iso639-2/php/English_list.php) /S /URI >> /H /I >> endobj 82 0 obj << /Type /Annot /Subtype /Link /Rect [ 235.157 178.36203 352.047 188.26202 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A << /URI (http://www.cl.cam.ac.uk/~mgk25/iso-time.html) /S /URI >> /H /I >> endobj 83 0 obj << /Length 84 0 R /Filter /FlateDecode >> stream xk۶>!$-;vL3ONHJRwN||Xؾ*5[m0ي9Jw,Ww(LB\4ܗMWcVoe~4d2؊1"M%8 >9}zܿbSֱ B,&ъ%$龞K;ǒ0 A^DL@$6zs'J4?KY6K_ÛgdSYa+ŵd{h]"!9l-Rm=\9x6MSVoKe>gNϻ]AA%F C[z iUE3̰&n͹DF9/JqErpʛDĉ֪C,HirјULt$y@ñ"B1ciFr6M?̺]QIb¡UnYB u+IQ)  %^͏NηsޤU0Hqre̸x= 6C.aK \/OU~L7Ln ؙhhb=EJK Ch< ð 0xSBNˋ Hbeҕe3 Af]t~y]IB $ iyQK*;UYm[nHPJ m[+ÆC9u>NCt֑j3<8fb6atK3Opw%ƲH!EƦXkD*`p1>SQe8s^(wz%e @vuR-qMݮ& ^i չCaKic1}[?>u 2 ^ɡde/魨>qN欯CΡu9Cxcs^c 膇 "3tv=`q.m~l7L>=xVԂGlY)B{e-t͞>nsIAŵv =/t.Y.lƄ$Qr;?K !|lFr= \'wum0 H~&X_İOoۍ$SVwx$/6Uyð;*P>盡5b60ag\z&*xc5sƫѳζwx$bf%}lMn!ȆgِK<-EN:p?| |(9Qt3Laծሡ||^}3/V=ɶ.`JXR34: Q 5g(>* ^]F4#af';S[[JkXЃ >g;4f z\J񤭗ny|ʞV}IKu.@ Ҷ=ۇ AkI| iNvԺ6'u9W1ΡП_,9?8 ܈ JtV.!km rg:! 濡wRcoJ<ҿms賂8|8Գ]`#L&-Ho3ridzoNUD};6|nvvkT p p Duvy[i.rQqk_✗ñGElX;42^OI 1ȁ1Iuq:ܜ##P34fEB1:8T ‡)8\,uD9`5)VB]*?0/US.SDŽJo꣸Ԋ>JʙٝF="(QY'R3Ru-(Hʬ7cm:F#|bHbQ7ȭTqSd <$| `VMHN$#ib#¤(ChC`pw#z\B>=u-j撑DMJط:!EΈhDlGa} shl$|)h fK7Is9\QT{K}mo`DJKP6vIp,9j~`@MA"3͌mE9y'š p_+xs(7FY3b=)-4XM@e{eҼ}VӅS_ ^mM9~-pQ6};lF(ڗ~%';H=W>]3{|RGC9]Lk@`Rs2[ N,֥ XoҢM#Ӆ me: k pN,w,B oA%tn.Nq`.5fb 쏧sIYܘb6nVHj`A79WXVG҂2m6tFb̓Y*=<派DMku޾l?U! endstream endobj 78 0 obj [ 77 0 R 79 0 R 80 0 R 81 0 R 82 0 R ] endobj 44 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 78 0 R /Contents 83 0 R >> endobj 84 0 obj 3583 endobj 86 0 obj << /Length 87 0 R /Filter /FlateDecode >> stream xW[oF~WX9/T=JZn!/^cصKx2;7;chmccDG[x;(u8M ЍR Ɗ"l)]NV O+RV]S,Jn#FBn隆w~PL1ٙzw0 NFGj q[}?M ]oLuB͞bXC:VA(c))UA;v"@E[UoUuc:IjotqS0QwZg$~F0O,"L,.W09d!E<"N8=_L׼05d5xfd.:q#͵;6Y,XI#|j 1Y3{ C1忝kF#d*DUR*Ò%KSUoI.cKRZ*1 ZMR!Dɂ-ߎ=&2$"y *OiIxxiVŜOWiꇒG,ds! ؜{ Ăq&i| يn69J@ w'ejiS$ņ 鍃_]%PUļ\%UC %v3.2eOyb:@ct?xB~ty?UK {ĢuJsڂ+uc- 63v؛:7AߓizROW׿}ta:)wn5bfd\|*,Ng_p6a}}?&֙?&%CUʏe =Uɲ,xyUp=?~CYh⇹? )ڕ%Y4+ a+1Bfo ^e ݆ Lԏ(/^gEq nj\:NkCh.>/kPPMְ^a١[9[WƱjMMu(~ powl>jDXq]x", 񟽑A׽?o4ֺm"ˌ+]RLs "Ea^ձf KObiAa|& U^|v;^\ B.Ʈ#~iP#(ӆaI5vk4Sގnw$^9 Rd[ ǐm'a`e.GDM^c-6TQ ^"m[mJ˯:(q9w endstream endobj 85 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Contents 86 0 R >> endobj 87 0 obj 1239 endobj 89 0 obj << /Length 90 0 R /Filter /FlateDecode >> stream x]o0+qI#+ &mZdKS6=i>4dUmlDZxy4#d8 b&>>]8_A ) ~~Ί9'-Ul}(l^$pE%c`/w忶MTT9T;͸(-#,wwuL;|c-+=`bg_١V( D/VxTBkŀyeĖt4fr٘bmmB&2{Enը ߦnɮ*vm^2S9pStEȔ&DmQ* |­m|'0r+D.%~ѯ&Trx@j0-(4OE.hm2DHM=˻L6D(NaJ$ND$pc͒HPO>[-JQI TO>nΰ4)1}@ K7+4Rr(C@ /c]wRNg' endstream endobj 88 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Contents 89 0 R >> endobj 90 0 obj 691 endobj 99 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 706.45 275.884 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 98 0 R /H /I >> endobj 102 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 623.586 259.384 633.486 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 103 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 606.386 275.884 616.286 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 98 0 R /H /I >> endobj 104 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 523.522 259.384 533.422 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 105 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 506.322 275.884 516.222 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 98 0 R /H /I >> endobj 107 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 423.458 259.384 433.358 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 106 0 R /H /I >> endobj 108 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 389.058 275.884 398.958 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 98 0 R /H /I >> endobj 110 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 292.994 296.652 302.894 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 109 0 R /H /I >> endobj 111 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 275.794 275.884 285.694 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 98 0 R /H /I >> endobj 113 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 192.93 254.489 202.83 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 112 0 R /H /I >> endobj 115 0 obj << /Type /Annot /Subtype /Link /Rect [ 264.873 192.93 288.699 202.83 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 114 0 R /H /I >> endobj 117 0 obj << /Type /Annot /Subtype /Link /Rect [ 299.083 192.93 333.315 202.83 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 116 0 R /H /I >> endobj 119 0 obj << /Type /Annot /Subtype /Link /Rect [ 343.699 192.93 362.641 202.83 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 120 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 175.73 275.884 185.63 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 98 0 R /H /I >> endobj 121 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 92.866 259.384 102.766 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 123 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 75.666 270.373 85.566 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 122 0 R /H /I >> endobj 124 0 obj << /Length 125 0 R /Filter /FlateDecode >> stream xXo8~߿u{8ҫtU*]Nۧnw;!bF&盱`yG'/H9F:LtZ-!jgqa#YEN>^]:K>Ae4<0/ocP` s>Gp<+jqעu!(z*vʺm=>Gpe.df8%yZ/ښ,Zp>YK61mH=f.AHdkdCDr)ei|Nbw}GxHx cW&|C6R6#I=MCt?V: kAOqwS wjnXX%[ug\.Vcxlg)4"ZcXbB h2#3RuY j4lQte|}}dE ʆBaQH?Nylgu) t,*JjTZ Π'Ң -Þ&-3Md&>,9-ͭaa}Tfnah©g YQ]tZ\Kec:2CmAb6׫kBf nWxMQ6䳗4Q1tV}zf>PH_ca $ˢ.Π!= pvTarkL1UQwg%" >B4[zqQW$620r*̆ &J4a$SQ63UǿFsO EHR{malb:;< !Vm(xPyn/;:a+/m8AP}gc :`)S0cBP%y@=a > endobj 125 0 obj 1025 endobj 131 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 642.104 259.384 652.004 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 134 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 607.704 262.44202 617.604 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 135 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 516.689 259.384 526.589 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 136 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 482.289 262.44202 492.189 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 137 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 404.474 259.384 414.374 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 138 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 370.074 262.44202 379.974 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 139 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 239.459 259.384 249.359 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 140 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 187.859 262.44202 197.759 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 141 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 110.044 259.384 119.944 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 142 0 obj << /Length 143 0 R /Filter /FlateDecode >> stream xX]o6}ϯ0 p)Qݓ$@k0i݃,61Y$}mD$FQ'U" Nv}>A tLAG8p' ܖ J "E㽣YRޡfBKQpC='izÇXs5/L5[%g,f&5(,Buje ۰壱%K薺8N%༬yV͛h{a?}^ltIg-o*IWŞYma _NgR*6K-.-=jNvszmy.r\E`nsvpm-XLiiB댽a!#:>iY̊8_7'86+=L#4ϻ/=㙆LJ}+_N8"Gd_=VˡKJN1",>O"YÈ6|,}gnETj2"0ddXw.Jb /KQ4Y44} JOO%G_'e%}ĉ~þ:4&OCA4OB@$3>7&Prx,I[h"gey$A\_g+E rIQ{ ῏jþ ת!=C3=Cs9 z{\ Nsjlp.>}m#/iu Wrϵu#[2v44/[5:\$\3Q LnXmQZw(ƅ~К!y1˨YF܋ <5loTC2~[JZ)QvO,J9|ۜ藆":yx#,dݼ4$vY-xkkL^פ&'I桌nO\hzR~%{;ci@>-vPϖKsqnt06IrU[E}@WsþPAy3<=J!l/ <3/!Ұn5ԭxå'g[XR½/+K7Ы^puן4 ({#q[uBpx~9DҒVG Y#G AٿB@zCC l@ YA0 " ! J|% endstream endobj 132 0 obj [ 131 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R ] endobj 130 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 132 0 R /Contents 142 0 R >> endobj 143 0 obj 1404 endobj 145 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 706.45 262.44202 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 147 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 612.606 259.384 622.506 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 148 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 561.006 262.44202 570.906 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 149 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 480.362 259.384 490.262 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 150 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 445.962 262.44202 455.862 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 151 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 352.118 259.384 362.018 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 152 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 300.518 262.44202 310.418 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 153 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 206.674 259.384 216.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 154 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 155.074 262.44202 164.974 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 155 0 obj << /Length 156 0 R /Filter /FlateDecode >> stream xY[o6~ϯ0 so=eI tMm|Q&MKYIqI >Cϗ y'A/D!HWBLO>~j$ 7zLVI\:&wx/E6OmO+Bse<}v Amhp\zsgJ߇ `F KkO` (W`0rgl< `5L[GfnofvZTG1l6ZZc_կw"{.cltGpT<翷Ң+xuHYz ]\O;}l/_n\]v{O8͍yJ87ۛ__n{\7:B ]o,0 @Pdx8U"aׯHZ`H[wcnj1] QOHPhcB#s$u|Nx>]ƻr?PR7"m{X~A$ǐ$sToBjlCZnJ=LߚtG̒4/WHRu:FF͔ZI5-,j&WL4cHfe=N&&Fy&;yNVr:3U7Ysi~IO"`%*vq2*:1Qё?s$H!"IđpPJ]G| x>)b~ Ϩ)%c$ Aqn (lG&F`41!:fQ1PU'u5a̷2y u6n8OZDHWJWbXVSk96PUJy@U3Аf*Dh(Ds7J&EL46%cĂK&Fױ,DɄ00x~R61Hٯd6(h#Ӱ:j#߰(x> endobj 156 0 obj 1429 endobj 158 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 706.45 259.384 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 160 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 654.85 262.44202 664.75 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 161 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 559.038 259.384 568.938 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 162 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 507.438 262.44202 517.338 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 163 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 424.826 259.384 434.726 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 164 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 390.426 262.44202 400.326 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 165 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 294.614 259.384 304.514 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 166 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 260.214 262.44202 270.114 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 167 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 177.602 259.384 187.502 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 168 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 143.202 262.44202 153.102 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 169 0 obj << /Length 170 0 R /Filter /FlateDecode >> stream xX]O6}WD*@bvdD]m(+CTDd&$K}I_lF˧Ux=P@-ץ34p( T"bWY'=@vc鲏(DU xzi4"wІ/<<sꧯ7w_.{# Sɜ@Xǟb*a?\6ddd" dQs:uҎB,&V{='-  (ݜW?#GHa2vfF /)+rl%8 (SO£̄ E U,$501υрB|r.@ϧv.D%0c)Hybsl/+aԫbT&xrv2wra%U}o*7]"UYgI8u|4bNȺ>w:L= ʰT]6 1v2(DEgضN;c@1D&_q-T:hCa@QCU7AzZu8LZIgZwTmlӈ],EnGۈ<_n˚+nWIQ=Z=G<}I7-+~|ʃtȧ%|Zʧ%ߨ|€;B>Y>HseMXu->,m;,Tzآ|9]MeQ.ur&m{VF,D/iqI.5ߐ}oLv*dOvKdJclnz92Y$IF^osw<0w!(iJt?߅* 8,Gx\> endobj 170 0 obj 1296 endobj 174 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 602.62 263.663 612.52 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 173 0 R /H /I >> endobj 177 0 obj << /Type /Annot /Subtype /Link /Rect [ 274.047 602.62 315.605 612.52 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 176 0 R /H /I >> endobj 179 0 obj << /Type /Annot /Subtype /Link /Rect [ 325.989 602.62 358.989 612.52 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 178 0 R /H /I >> endobj 181 0 obj << /Type /Annot /Subtype /Link /Rect [ 369.373 602.62 428.025 612.52 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 183 0 obj << /Type /Annot /Subtype /Link /Rect [ 438.409 602.62 484.246 612.52 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 182 0 R /H /I >> endobj 184 0 obj << /Type /Annot /Subtype /Link /Rect [ 494.63 602.62 513.572 612.52 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 185 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 533.82 262.44202 543.72 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 187 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 450.122 275.884 460.022 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 186 0 R /H /I >> endobj 189 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 432.922 277.71 442.822 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 188 0 R /H /I >> endobj 190 0 obj << /Type /Annot /Subtype /Link /Rect [ 285.41 432.922 344.062 442.822 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 192 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 349.224 284.44202 359.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 191 0 R /H /I >> endobj 193 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 332.024 277.71 341.924 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 188 0 R /H /I >> endobj 194 0 obj << /Type /Annot /Subtype /Link /Rect [ 285.41 332.024 344.062 341.924 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 195 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 235.126 259.384 245.026 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 106 0 R /H /I >> endobj 196 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 183.526 277.71 193.426 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 188 0 R /H /I >> endobj 197 0 obj << /Type /Annot /Subtype /Link /Rect [ 285.41 183.526 344.062 193.426 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 198 0 obj << /Length 199 0 R /Filter /FlateDecode >> stream xZo6_!t +R>"kC2>,{Pd&O,HY>Fwx<[6|.1Cb?g٫_\R .Žk{Lytn-,|mʸ໊ٹM8>6A6>F~DfmX죢AՏ=& j[$@unOt7Ag|7PbhT`KAk-[KcQTUWQc1_sVꢧ-i8ϋϢDU]JU2ceȤnQR`ȁ/ F.g-v9RHz Uq( \b_Zp=LJU2C4)aT {J7[F7Q<=Q'wl S K;K;mqM%ؙi2t$pSTgM6 :R+G&Qd4R ":y1tUi/ޣY R ݹ.1*sH~ފ1E4< /ud8ױuxQ2:/"ߧXg $8W ]H<%ulrMh@3S!˟ /.Í"La'^mak hH0`Sq ; ,*K5"6F6qН3 ^m̐P׫Ɯ<Ʀ^Y^mGQa ~d>i< f1jɈ7W7W˫7W}j7~7 r2unsuv7/:/gf駐ɀ(oٴ|T?KqFih&cS$7Z)q_9]HtqLܫ_C7!uvD?S-ð Bb,y G*3_=qOǛVG}=YƘ9FmrA8/GK w*L@Ɲgr"k.¾_:.F> j/;ө }vNqt|=3ǘct1dԘEOaBBQC߼sP*@V:x(Whh*$D&A֬`(h>, ɰ@-%>׾Q@ŵcܹo1q_\x˺:SW(]ܰGt]ﻚȡXq!| 2=D`Q2?\U>2R-Rșl9Lud#L&em&"JKI[fN&7c.A0#0^K~ECЖRekWD>}xM O)5DcS2*nd;gȡbЄ8J#H,ҡw>`b3j”a΢GWVBJgFV}|D,^(ݮȣx{IDF%!hOIޱР\9IxݰBר~L@e_2 kiXᐺE"CkZRx v^EMi;=3)mu{GJ٣T!u맷5uY1W\Z}B ۷_8CJ0 yetVUK'9'*suRg:(ci7 endstream endobj 175 0 obj [ 174 0 R 177 0 R 179 0 R 181 0 R 183 0 R 184 0 R 185 0 R 187 0 R 189 0 R 190 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R 197 0 R ] endobj 171 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 175 0 R /Contents 198 0 R >> endobj 199 0 obj 1900 endobj 201 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 669.532 259.384 679.432 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 203 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 617.932 272.837 627.832 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 182 0 R /H /I >> endobj 204 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 510.57 259.384 520.47 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 205 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 476.17 272.837 486.07 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 182 0 R /H /I >> endobj 207 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 368.808 266.105 378.708 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 206 0 R /H /I >> endobj 209 0 obj << /Type /Annot /Subtype /Link /Rect [ 276.489 368.808 316.815 378.708 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 208 0 R /H /I >> endobj 210 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 351.608 262.44202 361.508 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 212 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 257.446 321.105 267.346 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 211 0 R /H /I >> endobj 214 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 240.246 266.105 250.146 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 216 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 146.084 308.268 155.984 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 215 0 R /H /I >> endobj 217 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 128.884 266.105 138.784 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 218 0 obj << /Length 219 0 R /Filter /FlateDecode >> stream xY]o6}ϯ: pOC֤@kiك"Q[(9iwA%Bˣ{ϥlYbPb.pa+ ! < ckiG;EkY|N2ۥ৾laE,x^,V xM,B;H|=-(-kg߮.h:4~hT"! j%> KrI8팺 P>znczq3C(Aڜ/؎=Fii t}l`l*{˲2nG̫ܸ2(YcrvAIET?JV@drKigB"5OrTN0HJ φC;0*-fiv-ٚ{uc Sužoia*|hN9Qznן&ٟ/>|{3#|:k:l:8y|'6dy"(YQT'OU +J.QQ.G( [";-۴9#A nX/ꬭMjuiߪh`e,TEPF_R|9"?}oe]Wvl |g.|(t<wJ1xhtm,p>.4kW5" [@H_q endstream endobj 202 0 obj [ 201 0 R 203 0 R 204 0 R 205 0 R 207 0 R 209 0 R 210 0 R 212 0 R 214 0 R 216 0 R 217 0 R ] endobj 200 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 202 0 R /Contents 218 0 R >> endobj 219 0 obj 1506 endobj 221 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 689.25 239.221 699.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 220 0 R /H /I >> endobj 223 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 607.448 254.489 617.348 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 114 0 R /H /I >> endobj 225 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.989 607.448 292.978 617.348 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 224 0 R /H /I >> endobj 227 0 obj << /Type /Annot /Subtype /Link /Rect [ 303.362 607.448 330.246 617.348 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 226 0 R /H /I >> endobj 229 0 obj << /Type /Annot /Subtype /Link /Rect [ 340.63 607.448 354.677 617.348 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 228 0 R /H /I >> endobj 231 0 obj << /Type /Annot /Subtype /Link /Rect [ 365.061 607.448 389.503 617.348 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 230 0 R /H /I >> endobj 232 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 573.048 239.221 582.948 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 220 0 R /H /I >> endobj 234 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 491.246 269.152 501.146 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 233 0 R /H /I >> endobj 235 0 obj << /Type /Annot /Subtype /Link /Rect [ 279.536 491.246 314.978 501.146 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 237 0 obj << /Type /Annot /Subtype /Link /Rect [ 325.362 491.246 374.246 501.146 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 236 0 R /H /I >> endobj 239 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.63 491.246 417.014 501.146 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 238 0 R /H /I >> endobj 241 0 obj << /Type /Annot /Subtype /Link /Rect [ 427.398 491.246 451.82898 501.146 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 240 0 R /H /I >> endobj 243 0 obj << /Type /Annot /Subtype /Link /Rect [ 462.213 491.246 504.981 501.146 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 242 0 R /H /I >> endobj 245 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 478.046 259.384 487.946 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 244 0 R /H /I >> endobj 246 0 obj << /Type /Annot /Subtype /Link /Rect [ 269.768 478.046 288.71 487.946 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 248 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 460.846 252.65201 470.746 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 249 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 379.044 259.384 388.944 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 251 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 344.644 251.431 354.544 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 250 0 R /H /I >> endobj 252 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 262.842 259.384 272.742 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 253 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 245.642 251.431 255.542 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 250 0 R /H /I >> endobj 254 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 163.84 259.384 173.74 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 255 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 129.44 251.431 139.34 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 250 0 R /H /I >> endobj 256 0 obj << /Length 257 0 R /Filter /FlateDecode >> stream xXYoF~ PvJ 7v$vSZK%R%#CiIǒ؆a73ΐ~~'GjěN $ h>"\x;n[!!", 4"MeZWo΂~wq49 f8L"N9410&{(Z(YE c/g'_\e]x TRq@R{j qXKۙ?Mg81HC|ϋ"[}+Lop>q~CQק/?9!<P+bws m|5wN^l_mcĝnpH-B2ubT_c=*@"ZjPu@AI 0EZ6鍽(^GZ,J ٛY-6Zef*JG{mfrynPVkJRoӤwڽ~N-R7! u,DSI J7D;낦H+jD98 8Rj- [(644] P@_7c S 1oh T@TM+Csf U{B+E֞`o/gnDmP8χGDHsHpǦ{m7ȾJ"qsUخ(Sm⥰" zb{QoQ~h0RDp#XiQᰡOVwz&ygh(2v4F+;IsHQՖ mxHyH%lpv 9@%$25S̖B /P᧩EoA>C 9ӫ΃~]cAPX3Lx_S0*IG{avC\&4+t|_19ߤYo,ȢCEXׅ=KfÙV :1)=' 8:zvF ZM(Mئ7cH8DŽti1D) ;\!AX59Y>5hQ [,Z+Ȣyu\Duf]m8>l"vUtkx*څĊrfB~lNa.^OH`tTeBՇJ :XC>z]+8tH~9^k&;> endobj 257 0 obj 1247 endobj 259 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 706.45 248.989 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 258 0 R /H /I >> endobj 262 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.373 706.45 278.931 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 264 0 obj << /Type /Annot /Subtype /Link /Rect [ 289.315 706.45 313.141 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 263 0 R /H /I >> endobj 265 0 obj << /Type /Annot /Subtype /Link /Rect [ 323.525 706.45 342.467 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 266 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 689.25 251.431 699.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 250 0 R /H /I >> endobj 267 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 605.552 259.384 615.452 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 268 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 571.152 265.489 581.052 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 233 0 R /H /I >> endobj 270 0 obj << /Type /Annot /Subtype /Link /Rect [ 237.989 355.454 263.641 365.354 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 269 0 R /H /I >> endobj 272 0 obj << /Type /Annot /Subtype /Link /Rect [ 274.025 355.454 288.072 365.354 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 271 0 R /H /I >> endobj 274 0 obj << /Type /Annot /Subtype /Link /Rect [ 298.456 355.454 324.735 365.354 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 273 0 R /H /I >> endobj 276 0 obj << /Type /Annot /Subtype /Link /Rect [ 344.645 355.454 385.587 365.354 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 275 0 R /H /I >> endobj 278 0 obj << /Type /Annot /Subtype /Link /Rect [ 395.971 355.454 429.576 365.354 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 277 0 R /H /I >> endobj 280 0 obj << /Type /Annot /Subtype /Link /Rect [ 447.286 355.454 475.391 365.354 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 279 0 R /H /I >> endobj 282 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.775 355.454 529.159 365.354 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 281 0 R /H /I >> endobj 284 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 342.254 257.558 352.154 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 283 0 R /H /I >> endobj 286 0 obj << /Type /Annot /Subtype /Link /Rect [ 267.94202 342.254 284.44202 352.154 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 285 0 R /H /I >> endobj 288 0 obj << /Type /Annot /Subtype /Link /Rect [ 294.826 342.254 326.60498 352.154 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 287 0 R /H /I >> endobj 290 0 obj << /Type /Annot /Subtype /Link /Rect [ 336.989 342.254 384.047 352.154 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 289 0 R /H /I >> endobj 292 0 obj << /Type /Annot /Subtype /Link /Rect [ 394.431 342.254 412.746 352.154 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 291 0 R /H /I >> endobj 294 0 obj << /Type /Annot /Subtype /Link /Rect [ 423.13 342.254 456.724 352.154 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 293 0 R /H /I >> endobj 296 0 obj << /Type /Annot /Subtype /Link /Rect [ 467.108 342.254 486.655 352.154 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 295 0 R /H /I >> endobj 298 0 obj << /Type /Annot /Subtype /Link /Rect [ 497.039 342.254 520.249 352.154 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 297 0 R /H /I >> endobj 300 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 329.05402 249.616 338.954 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 299 0 R /H /I >> endobj 301 0 obj << /Type /Annot /Subtype /Link /Rect [ 260.0 329.05402 308.884 338.954 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 236 0 R /H /I >> endobj 302 0 obj << /Type /Annot /Subtype /Link /Rect [ 319.268 329.05402 369.978 338.954 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 188 0 R /H /I >> endobj 303 0 obj << /Type /Annot /Subtype /Link /Rect [ 380.362 329.05402 419.467 338.954 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 304 0 obj << /Type /Annot /Subtype /Link /Rect [ 429.851 329.05402 448.793 338.954 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 305 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 311.854 251.431 321.754 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 250 0 R /H /I >> endobj 306 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 228.156 259.384 238.056 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 307 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 193.756 262.44202 203.656 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 308 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 110.058 259.384 119.958 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 309 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 75.658 262.44202 85.558 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 310 0 obj << /Length 311 0 R /Filter /FlateDecode >> stream xZݏ۸߿@Q`HJ!H{9 nчn2w--$y7 HP֥#ߐ͘XqUJ4*.I( wWVBU`"B&pen/.>z{^*-}?|)8+)Yő|JCd U!~q`T$#61dnڞNI\ӛ+2OWOvѿ+u][Z\;&dz Ӱ o^'R0gۣs!Ql|v$"4U>ĚOatP^>BPG.}wCGRCt{IYuY^eRirdR;9~v%=awm*D-;}];ġphԗCDPpw..\tx w$!G(Yed;~5B8mh֜x!>)&CU/Q=ly`׷CM0dǭ=d۬~qDUEkxK=2Wm)B v2(I!8&z '>: 胝 ֔ŐI^GGL=d:qKvW<>|}bS0jiD!,Tm=&vdp773CCA"*b# Nʴ칿aq"0@+03]SBY^y /5sjs9Pgx6&m,x_| ad"蹱?< wp5B avGϝfC`sQ1ucjۺ'gY5躮6p(f:1(^%ύ Yn\sB~gl8|.J@,W RP i$!t=> endobj 311 0 obj 2161 endobj 314 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 689.25 274.047 699.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 313 0 R /H /I >> endobj 316 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 606.386 259.384 616.286 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 318 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 589.186 240.442 599.086 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 317 0 R /H /I >> endobj 320 0 obj << /Type /Annot /Subtype /Link /Rect [ 248.142 589.186 306.794 599.086 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 319 0 R /H /I >> endobj 322 0 obj << /Type /Annot /Subtype /Link /Rect [ 314.49402 589.186 341.983 599.086 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 321 0 R /H /I >> endobj 324 0 obj << /Type /Annot /Subtype /Link /Rect [ 349.68298 589.186 379.009 599.086 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 323 0 R /H /I >> endobj 326 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.70898 589.186 413.593 599.086 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 325 0 R /H /I >> endobj 328 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 506.322 302.768 516.222 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 327 0 R /H /I >> endobj 329 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 489.122 240.442 499.022 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 317 0 R /H /I >> endobj 330 0 obj << /Type /Annot /Subtype /Link /Rect [ 248.142 489.122 306.794 499.022 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 319 0 R /H /I >> endobj 331 0 obj << /Type /Annot /Subtype /Link /Rect [ 314.49402 489.122 341.983 499.022 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 321 0 R /H /I >> endobj 332 0 obj << /Type /Annot /Subtype /Link /Rect [ 349.68298 489.122 379.009 499.022 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 323 0 R /H /I >> endobj 333 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 406.258 302.768 416.158 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 327 0 R /H /I >> endobj 334 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 389.058 240.442 398.958 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 317 0 R /H /I >> endobj 335 0 obj << /Type /Annot /Subtype /Link /Rect [ 248.142 389.058 306.794 398.958 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 319 0 R /H /I >> endobj 336 0 obj << /Type /Annot /Subtype /Link /Rect [ 314.49402 389.058 341.983 398.958 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 321 0 R /H /I >> endobj 337 0 obj << /Type /Annot /Subtype /Link /Rect [ 349.68298 389.058 379.009 398.958 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 323 0 R /H /I >> endobj 339 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 306.194 301.547 316.094 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 338 0 R /H /I >> endobj 340 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 288.994 240.442 298.894 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 317 0 R /H /I >> endobj 341 0 obj << /Type /Annot /Subtype /Link /Rect [ 248.142 288.994 306.794 298.894 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 319 0 R /H /I >> endobj 342 0 obj << /Type /Annot /Subtype /Link /Rect [ 314.49402 288.994 341.983 298.894 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 321 0 R /H /I >> endobj 343 0 obj << /Type /Annot /Subtype /Link /Rect [ 349.68298 288.994 379.009 298.894 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 323 0 R /H /I >> endobj 345 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 206.13 263.652 216.03 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 344 0 R /H /I >> endobj 347 0 obj << /Type /Annot /Subtype /Link /Rect [ 274.036 206.13 293.594 216.03 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 346 0 R /H /I >> endobj 348 0 obj << /Type /Annot /Subtype /Link /Rect [ 303.978 206.13 347.351 216.03 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 122 0 R /H /I >> endobj 350 0 obj << /Type /Annot /Subtype /Link /Rect [ 357.735 206.13 390.735 216.03 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 349 0 R /H /I >> endobj 352 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.11902 206.13 439.61902 216.03 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 351 0 R /H /I >> endobj 354 0 obj << /Type /Annot /Subtype /Link /Rect [ 450.003 206.13 502.539 216.03 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 353 0 R /H /I >> endobj 356 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 192.93 263.663 202.83 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 355 0 R /H /I >> endobj 357 0 obj << /Type /Annot /Subtype /Link /Rect [ 274.047 192.93 292.989 202.83 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 358 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 175.73 274.047 185.63 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 313 0 R /H /I >> endobj 359 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 92.866 259.384 102.766 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 106 0 R /H /I >> endobj 360 0 obj << /Length 361 0 R /Filter /FlateDecode >> stream xKo6 $@b{(& H$6=1m-U-C~He pl˜̐'OiFHL!<}(B "#x,H~ .x_kdqZ2=a *0I1M|͍BeV>CR*H4Daպy{Š"mD{8]} -Ⱦ"'펉P9 _W~yw{pw{s.D8xSOj~>4K^Lp)AJ𾲣4{g#k1)εM`gv < BB%qsX~Kf=5Yn~܇2+O>"#,yJIօYN|LͲcX<ڧF|)~!#򩀗ĉasZkiZE7)nvgQ0YV0WB\sY.gbCf'a~ 2IPnF`pM2ü=D*ծצq+m7 ,sެ&&{])`Ih?iD&[| | ߧF?$(: +YHpBۦY740@Icl,2ˋ'ĢOuXd`ѧ7gYU/GXh6mdH)u(@:X *Yidf}U뇒:)A͡USY&`NfȐ$Rku$M&2 #Pw*hzx;Tb[ɋBn? I6lgatwpe\^m%$^>?}Y;p0lhs %PilQ@LGa̞VX$V7r8"d":׬y=9R;Jdͪ0+跨d՗H0ݖlyuɼ"MèGqe[7Iњ0m/5pGoT M!0uI;MIXI%|nKx׳PLe=ge s>uz2ҿe6~do]{?P߯v@}+n?>oGj endstream endobj 315 0 obj [ 314 0 R 316 0 R 318 0 R 320 0 R 322 0 R 324 0 R 326 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 345 0 R 347 0 R 348 0 R 350 0 R 352 0 R 354 0 R 356 0 R 357 0 R 358 0 R 359 0 R ] endobj 96 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 315 0 R /Contents 360 0 R >> endobj 361 0 obj 1151 endobj 364 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 668.12 259.373 678.02 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 363 0 R /H /I >> endobj 366 0 obj << /Type /Annot /Subtype /Link /Rect [ 269.757 668.12 288.083 678.02 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 258 0 R /H /I >> endobj 367 0 obj << /Type /Annot /Subtype /Link /Rect [ 298.467 668.12 318.025 678.02 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 368 0 obj << /Type /Annot /Subtype /Link /Rect [ 328.409 668.12 361.409 678.02 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 173 0 R /H /I >> endobj 369 0 obj << /Type /Annot /Subtype /Link /Rect [ 371.793 668.12 413.351 678.02 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 176 0 R /H /I >> endobj 370 0 obj << /Type /Annot /Subtype /Link /Rect [ 423.735 668.12 456.735 678.02 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 178 0 R /H /I >> endobj 372 0 obj << /Type /Annot /Subtype /Link /Rect [ 467.11902 668.12 489.11902 678.02 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 371 0 R /H /I >> endobj 374 0 obj << /Type /Annot /Subtype /Link /Rect [ 499.503 668.12 521.503 678.02 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 373 0 R /H /I >> endobj 376 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 654.92 249.0 664.82 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 375 0 R /H /I >> endobj 377 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.384 654.92 278.326 664.82 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 378 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 620.52 277.71 630.42 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 188 0 R /H /I >> endobj 379 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 535.322 259.384 545.222 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 106 0 R /H /I >> endobj 380 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 518.122 285.652 528.022 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 381 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 432.924 259.384 442.824 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 106 0 R /H /I >> endobj 382 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 415.724 285.652 425.624 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 383 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 330.526 259.384 340.426 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 106 0 R /H /I >> endobj 384 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 313.326 285.652 323.226 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 386 0 obj << /Type /Annot /Subtype /Link /Rect [ 234.326 162.128 292.351 172.028 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 385 0 R /H /I >> endobj 388 0 obj << /Type /Annot /Subtype /Link /Rect [ 300.051 162.128 344.634 172.028 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 387 0 R /H /I >> endobj 389 0 obj << /Type /Annot /Subtype /Link /Rect [ 358.681 162.128 407.565 172.028 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 236 0 R /H /I >> endobj 390 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 144.928 277.71 154.828 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 188 0 R /H /I >> endobj 391 0 obj << /Length 392 0 R /Filter /FlateDecode >> stream xYmo6 _alpՒ}2@fÀ>lݝQl_ }%[-CH|LR4l]ae/~[|bQoL®Ë7f v"Q!\oE-^}{a-,k^EeRԉ/_%#M,Bm=׬|+:w,؆w_=xJ1٫fDCG P_=>mO7'ȅq?3/ Tk._%YW vhX=bm 2wjķ<6ME^{k:Z*eEMY})Ġ%T_M yʞy,5xh:7SA|~){xMX'YF 덄$B% ]ۢt K $S]jB? 3P󁂵}qF\ԸieD_dħp> x$Hh#tO2J)Zų8.\S\ȸJd}Qq>ϥbGB*9ΟjaǁWpP 3>28 8Ja6wk,\;3M rj8(ƥmF )r3W&YSebY 2\? (+t&GφV/J'<[?.@\*q=KӦͥ-JyJT UĨuKApԕ;)*yt4`owu4 Q=Y&juiVTwXU'^>bl:P%2ktM[ab6 $5' qH+"j+I+Œ6&ʉL$[iD /L$/GѮlTS5v:m迪iL[-t*wbO1u3@3,+euYtW mL>b's{D6ARO-J`po8@-b^%+9XU&o!b}^_\Ldz\eеq\:\|LC-a1++#~.깦.d[lOۃM05:MˋcMOXzk_&U0>ns= pF;w> endobj 392 0 obj 1748 endobj 394 0 obj << /Type /Annot /Subtype /Link /Rect [ 234.326 706.45 263.652 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 323 0 R /H /I >> endobj 396 0 obj << /Type /Annot /Subtype /Link /Rect [ 271.352 706.45 298.236 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 325 0 R /H /I >> endobj 398 0 obj << /Type /Annot /Subtype /Link /Rect [ 315.803 706.45 352.466 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 397 0 R /H /I >> endobj 399 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 689.25 251.431 699.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 250 0 R /H /I >> endobj 400 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 604.61 254.489 614.51 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 114 0 R /H /I >> endobj 401 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.989 604.61 292.978 614.51 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 224 0 R /H /I >> endobj 402 0 obj << /Type /Annot /Subtype /Link /Rect [ 303.362 604.61 330.246 614.51 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 226 0 R /H /I >> endobj 403 0 obj << /Type /Annot /Subtype /Link /Rect [ 340.63 604.61 354.677 614.51 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 228 0 R /H /I >> endobj 404 0 obj << /Type /Annot /Subtype /Link /Rect [ 365.061 604.61 389.503 614.51 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 230 0 R /H /I >> endobj 405 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 570.21 259.384 580.11 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 244 0 R /H /I >> endobj 406 0 obj << /Type /Annot /Subtype /Link /Rect [ 267.08398 570.21 303.747 580.11 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 397 0 R /H /I >> endobj 407 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 472.37 254.489 482.27 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 114 0 R /H /I >> endobj 408 0 obj << /Type /Annot /Subtype /Link /Rect [ 264.873 472.37 297.862 482.27 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 224 0 R /H /I >> endobj 409 0 obj << /Type /Annot /Subtype /Link /Rect [ 308.246 472.37 327.188 482.27 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 410 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 420.77 259.384 430.67 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 244 0 R /H /I >> endobj 411 0 obj << /Type /Annot /Subtype /Link /Rect [ 267.08398 420.77 303.747 430.67 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 397 0 R /H /I >> endobj 412 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 322.93 267.326 332.83 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 397 0 R /H /I >> endobj 413 0 obj << /Type /Annot /Subtype /Link /Rect [ 275.026 322.93 304.352 332.83 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 323 0 R /H /I >> endobj 414 0 obj << /Type /Annot /Subtype /Link /Rect [ 312.052 322.93 338.936 332.83 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 325 0 R /H /I >> endobj 415 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 288.53 259.384 298.43 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 244 0 R /H /I >> endobj 416 0 obj << /Type /Annot /Subtype /Link /Rect [ 267.08398 288.53 303.747 298.43 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 397 0 R /H /I >> endobj 418 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 203.89 252.663 213.79 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 417 0 R /H /I >> endobj 420 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.047 203.89 336.978 213.79 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 419 0 R /H /I >> endobj 422 0 obj << /Type /Annot /Subtype /Link /Rect [ 347.362 203.89 365.083 213.79 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 421 0 R /H /I >> endobj 424 0 obj << /Type /Annot /Subtype /Link /Rect [ 375.46698 203.89 445.119 213.79 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 423 0 R /H /I >> endobj 426 0 obj << /Type /Annot /Subtype /Link /Rect [ 455.503 203.89 509.293 213.79 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 425 0 R /H /I >> endobj 428 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 190.69 260.0 200.59 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 427 0 R /H /I >> endobj 429 0 obj << /Type /Annot /Subtype /Link /Rect [ 270.384 190.69 289.326 200.59 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 430 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 173.49 252.65201 183.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 431 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 75.65 254.489 85.55 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 112 0 R /H /I >> endobj 433 0 obj << /Type /Annot /Subtype /Link /Rect [ 264.873 75.65 292.373 85.55 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 432 0 R /H /I >> endobj 435 0 obj << /Type /Annot /Subtype /Link /Rect [ 302.75702 75.65 326.583 85.55 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 434 0 R /H /I >> endobj 437 0 obj << /Type /Annot /Subtype /Link /Rect [ 336.967 75.65 355.909 85.55 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 436 0 R /H /I >> endobj 438 0 obj << /Type /Annot /Subtype /Link /Rect [ 366.293 75.65 385.235 85.55 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 439 0 obj << /Length 440 0 R /Filter /FlateDecode >> stream xYK6Cw]KHAV#K$7 ߑ-I=b="y3" r{d$4`/"\_xu@H `bq~W~6_HvUgW3S1 (EL0]T|({Gq3CTF=18%D8 辷uac,{p<cA}gUUMD*Nç9.;>#FEo.."3 $8 h0DzͻeR" oճ&$ f2~j"PYoƳ+wa-IcÓLV{^L'a\Y0;@B.ܱ0N!Jk՛X*Pa~sč!-DisSkTUEڑE+Vl h/C:GZԞ=9 Y]2]to`iuXh . #-ֲ7Ÿ) ngNf& @6ZG_ݧZ"!cޛo$ujuchgol# x\XTZva?}WÑꡳ|x*.L I({՗'1Ok*dtQ;ˇ@8jLs'S=܊ƚ9,Q2Eg mX5a62FȔ>td惿MLOޙ:D!ZY4,eU%6Sv=9q΋x[ۗ~{5D-@@'Xj%+J"E\bD8M;فC;~dz5D;~X6I;T(0s႑yT8qf*87k[v"B]"[p N8F!{Җ~ɪd,ci.Ov@cյpmҘwPޤjre\-ⳛ ^ŭ#8f3iy;5aPR"ƉY hCivE`fTtE dYΎClqM$qD"8B5ZSuşn:Q9y7B%Pxo\]cѶnE[`x9? 9'I~^ !_}s:U|Ci2ZnX>jq,s2Er@К[J&<+aB٩G%i&YyYW55AEp {J ;0s!k1oFæם#Ouq'lHB1sgĺ5o<#Of ݼ K&Im| )̒mҶӑwQQ%}ك> endobj 440 0 obj 1646 endobj 442 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 706.45 273.44202 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 441 0 R /H /I >> endobj 444 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 625.782 259.373 635.682 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 363 0 R /H /I >> endobj 445 0 obj << /Type /Annot /Subtype /Link /Rect [ 271.077 625.782 290.019 635.682 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 446 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 608.582 273.44202 618.482 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 441 0 R /H /I >> endobj 447 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 527.914 254.489 537.814 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 112 0 R /H /I >> endobj 448 0 obj << /Type /Annot /Subtype /Link /Rect [ 264.873 527.914 292.373 537.814 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 432 0 R /H /I >> endobj 449 0 obj << /Type /Annot /Subtype /Link /Rect [ 302.75702 527.914 326.583 537.814 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 434 0 R /H /I >> endobj 450 0 obj << /Type /Annot /Subtype /Link /Rect [ 336.967 527.914 355.909 537.814 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 436 0 R /H /I >> endobj 451 0 obj << /Type /Annot /Subtype /Link /Rect [ 366.293 527.914 385.235 537.814 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 452 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 510.714 273.44202 520.614 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 441 0 R /H /I >> endobj 453 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 430.046 259.373 439.946 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 363 0 R /H /I >> endobj 454 0 obj << /Type /Annot /Subtype /Link /Rect [ 271.077 430.046 290.019 439.946 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 455 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 412.846 273.44202 422.746 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 441 0 R /H /I >> endobj 456 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 332.178 259.373 342.078 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 363 0 R /H /I >> endobj 457 0 obj << /Type /Annot /Subtype /Link /Rect [ 271.077 332.178 290.019 342.078 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 458 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 314.978 273.44202 324.878 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 441 0 R /H /I >> endobj 459 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 234.31 259.373 244.21 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 363 0 R /H /I >> endobj 460 0 obj << /Type /Annot /Subtype /Link /Rect [ 270.373 234.31 289.315 244.21 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 461 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 217.11 273.44202 227.01 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 441 0 R /H /I >> endobj 462 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 123.242 254.489 133.142 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 112 0 R /H /I >> endobj 463 0 obj << /Type /Annot /Subtype /Link /Rect [ 264.873 123.242 292.373 133.142 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 432 0 R /H /I >> endobj 464 0 obj << /Type /Annot /Subtype /Link /Rect [ 302.75702 123.242 326.583 133.142 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 434 0 R /H /I >> endobj 466 0 obj << /Type /Annot /Subtype /Link /Rect [ 336.967 123.242 377.282 133.142 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 465 0 R /H /I >> endobj 467 0 obj << /Type /Annot /Subtype /Link /Rect [ 387.66602 123.242 406.608 133.142 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 468 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 88.842 285.652 98.742 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 469 0 obj << /Type /Annot /Subtype /Link /Rect [ 293.352 88.842 367.283 98.742 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 419 0 R /H /I >> endobj 470 0 obj << /Type /Annot /Subtype /Link /Rect [ 374.983 88.842 444.635 98.742 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 423 0 R /H /I >> endobj 471 0 obj << /Type /Annot /Subtype /Link /Rect [ 452.33502 88.842 506.125 98.742 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 425 0 R /H /I >> endobj 472 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 75.642 260.0 85.542 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 427 0 R /H /I >> endobj 473 0 obj << /Length 474 0 R /Filter /FlateDecode >> stream xYKo6W%ik&{).Elt,Ėzl`|G+L*j_D9 qfa%5 ۋ/~I*W ~_, ̷ir\SmoL]UW0J Ca({.w-m<ѓi?/{RLSװ(I$,5 Bmv޽`Iri7UÁ=1<1#7qK30f,{/eۚ bJmc|EE-=wCÞk-(A'w !ֺ|Έ i^ bmڧڟgPf,jrSijU,mģ󫛬T!b$lOV~i6=p"n<jM^tIYs?=PJK"I '"aÕa-: 8>5q0(IQPr\A!KJ. & X L! ZR$rfD`9MV:da6f&_MVr(]o*Xw )@ݦS0e>SRdZF>lmDfM1E:䇡8(H_e_i-AM}QO%CNۨN0!}'S//w4)5UJ<а)bfNWf?]v^tf6Ѳ$sigďop +1Z@9rԤ4D_%wsaU99G)> p0]lMH*W1]frН;\;lV PCBhIϦVUypw@sHx+wzWq; endstream endobj 443 0 obj [ 442 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R ] endobj 362 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 443 0 R /Contents 473 0 R >> endobj 474 0 obj 1245 endobj 477 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 639.646 259.384 649.546 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 106 0 R /H /I >> endobj 480 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 605.246 250.826 615.146 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 479 0 R /H /I >> endobj 481 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 523.744 259.384 533.644 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 106 0 R /H /I >> endobj 482 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 489.344 250.826 499.244 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 479 0 R /H /I >> endobj 484 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 368.242 260.605 378.142 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 483 0 R /H /I >> endobj 486 0 obj << /Type /Annot /Subtype /Link /Rect [ 270.989 368.242 310.699 378.142 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 485 0 R /H /I >> endobj 487 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 333.842 252.65201 343.742 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 488 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 239.14 259.384 249.04 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 490 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 204.74 272.826 214.64 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 489 0 R /H /I >> endobj 491 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 110.038 259.384 119.938 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 492 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 75.638 272.826 85.538 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 489 0 R /H /I >> endobj 493 0 obj << /Length 494 0 R /Filter /FlateDecode >> stream xYێ6}߯P6 "HI>}PljK,oҿHօ2IKMv8<Μ:$yAh}C*  싈7~߼|/B^a<,?fY}]0 Ok̓Cd]g0a *0I19}NcnNF׻o2BϦ~)Ep4DYm#w;(nԸ˘ߘ˞g-#ΖNb[=sl #$)chn=/< ((>EpT~|Q. bv:թ%,ڰ1-,6~bۅ^Mrlqwo$dKйm.3.APe}+OuYe(ܟFZ|NJJA 9 ~]yTi4)<`TN5מzS-oa# :cʐda2|>{8y8ER0Vɱӥ`K$0qÈT(R8< ~];Ru]Uυ" )RX>K-X$518r' D+HBd<Ԅz!HEo+D?ĻSlarT!bb,ICBEPyH"êlԳZa7ҽΫz :9>0brrܔc-qY}hѐ^xC\&Wf/neN˰r0/q8LHq%`Dk=V(P腡YخI٩s5kG[dIdu~yw~_We2˜7'^3x/Q|y?{1F-S9 eu,z?Y EaXMiƦB/iR \!d[Tŝ2!1D:|DYe">}[& ,>#N)%ʙqE1Y~stY |kV19s!ܰcc0wdXY[I\&NDEB LZ,N2u{Kkg׆l0][uPF)x߁syȑmj8u B2"5nznz QMDՊmͭ𤐒z: ȕl_n5$($6K BMYŊIxq~<[ inL滕_KT4äoC> endobj 494 0 obj 1411 endobj 495 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 706.45 259.384 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 106 0 R /H /I >> endobj 498 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 689.25 266.71 699.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 497 0 R /H /I >> endobj 499 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 606.386 259.384 616.286 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 500 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 589.186 266.71 599.086 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 497 0 R /H /I >> endobj 501 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 506.322 259.384 516.222 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 106 0 R /H /I >> endobj 502 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 489.122 266.71 499.022 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 497 0 R /H /I >> endobj 504 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 393.058 305.826 402.958 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 503 0 R /H /I >> endobj 505 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 375.858 266.71 385.758 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 497 0 R /H /I >> endobj 506 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 292.994 259.384 302.894 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 507 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 275.794 266.71 285.694 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 497 0 R /H /I >> endobj 508 0 obj << /Type /Annot /Subtype /Link /Rect [ 274.41 275.794 298.236 285.694 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 479 0 R /H /I >> endobj 509 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 192.93 259.384 202.83 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 510 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 175.73 266.71 185.63 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 497 0 R /H /I >> endobj 512 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 92.866 283.815 102.766 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 511 0 R /H /I >> endobj 514 0 obj << /Type /Annot /Subtype /Link /Rect [ 294.199 92.866 355.898 102.766 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 513 0 R /H /I >> endobj 516 0 obj << /Type /Annot /Subtype /Link /Rect [ 366.28198 92.866 390.724 102.766 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 515 0 R /H /I >> endobj 517 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.108 92.866 420.05 102.766 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 518 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 75.666 252.65201 85.566 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 519 0 obj << /Length 520 0 R /Filter /FlateDecode >> stream xKo6p+>%m`]tR ؔ,Ԗ\f%Z-$X8=>xưa0} J0C2O",y?mr7௺׿rU{ٝ#QA}>F߇U!ʒC(+=J1]}n âR}(gW{^p@r)q;s b 3)?Vks>~V$.Mly_JnYfT{UCR[)`HX6*7VY&;^#֋ 0̧HCY[]ON#&Xt_c^fwy o6-yX((, z`4rխq@eeTN0{,ե &HY{L.ݯ4^\&80ŋHCW1$ '>N 9J%-Q?VGs>ܚ*,qoHoTolTPT|}4Uv$.U^D+}tۗwr`u:vO9fd%:~;WRLWI}1s?eӯ=KTNbJ}į~B4qS81ɚ*m": ¨':p!6-[]. %<)qZAAkU4SӼHhPGnt3uy*:]l2qq6]_yDa @4OfRh40Ko"] ,@ d|u(dw'1( eWtyCK^chyH_B=d=.~PJl9ܢ:`!>ѧRʎ3 S;[} ʠ΅ڪQo[8`7us#y-{9whLfpH`̺:#%d{0`j:Vu _Fd`Zk! iRg-mDP@N\\*I}sk1M֑¤> endobj 520 0 obj 1078 endobj 523 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 92.848 265.489 102.748 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 526 0 obj << /Type /Annot /Subtype /Link /Rect [ 279.536 92.848 294.815 102.748 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 525 0 R /H /I >> endobj 528 0 obj << /Type /Annot /Subtype /Link /Rect [ 302.515 92.848 325.12 102.748 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 527 0 R /H /I >> endobj 530 0 obj << /Type /Annot /Subtype /Link /Rect [ 332.82 92.848 360.936 102.748 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 529 0 R /H /I >> endobj 532 0 obj << /Type /Annot /Subtype /Link /Rect [ 368.636 92.848 409.578 102.748 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 531 0 R /H /I >> endobj 534 0 obj << /Type /Annot /Subtype /Link /Rect [ 417.278 92.848 474.104 102.748 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 533 0 R /H /I >> endobj 535 0 obj << /Length 536 0 R /Filter /FlateDecode >> stream xXKo6WMXR|K&)&o6+;hA-'4|p4 0| |E* Vſ`#ATtM ߗBƍaP(D ieWe0 poM*]eO!8 QA1&5ܽ.w`^o[^>Ηm32)"~J<ӯ8+!v" :k5tGE9U%qIu;]qaV e]V5[6kTB!%Up61祒t1q<-$O+%TkT(ʄ.j>/TxUw+99n_uSFy5rR JgXۀulU˸jF>jɩ|mjN`UgF(8$`V{+Pɥ=["&RQ3< #"$ղ=RWS@ 본@i43, {d'0u捺,O,IaFr/dvc1f/3\Psw^UP)iSm&>/a br??.>ݶ. endstream endobj 524 0 obj [ 523 0 R 526 0 R 528 0 R 530 0 R 532 0 R 534 0 R ] endobj 91 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 524 0 R /Contents 535 0 R >> endobj 536 0 obj 1094 endobj 537 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 652.188 248.989 662.088 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 258 0 R /H /I >> endobj 539 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.373 652.188 278.931 662.088 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 540 0 obj << /Type /Annot /Subtype /Link /Rect [ 289.315 652.188 308.257 662.088 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 541 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 634.988 242.279 644.888 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 525 0 R /H /I >> endobj 542 0 obj << /Type /Annot /Subtype /Link /Rect [ 249.979 634.988 272.58398 644.888 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 527 0 R /H /I >> endobj 543 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 552.499 248.989 562.399 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 258 0 R /H /I >> endobj 544 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.373 552.499 278.931 562.399 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 545 0 obj << /Type /Annot /Subtype /Link /Rect [ 289.315 552.499 308.257 562.399 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 546 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 535.299 242.279 545.199 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 525 0 R /H /I >> endobj 547 0 obj << /Type /Annot /Subtype /Link /Rect [ 249.979 535.299 272.58398 545.199 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 527 0 R /H /I >> endobj 548 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 439.61 265.489 449.51 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 549 0 obj << /Type /Annot /Subtype /Link /Rect [ 283.199 439.61 308.851 449.51 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 551 0 obj << /Type /Annot /Subtype /Link /Rect [ 316.551 439.61 358.087 449.51 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 550 0 R /H /I >> endobj 552 0 obj << /Type /Annot /Subtype /Link /Rect [ 373.45398 439.61 408.28 449.51 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 553 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 422.41 242.279 432.31 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 525 0 R /H /I >> endobj 554 0 obj << /Type /Annot /Subtype /Link /Rect [ 249.979 422.41 278.095 432.31 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 529 0 R /H /I >> endobj 555 0 obj << /Type /Annot /Subtype /Link /Rect [ 285.79498 422.41 327.331 432.31 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 550 0 R /H /I >> endobj 556 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 260.721 289.315 270.621 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 319 0 R /H /I >> endobj 557 0 obj << /Type /Annot /Subtype /Link /Rect [ 299.699 260.721 311.91998 270.621 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 220 0 R /H /I >> endobj 558 0 obj << /Type /Annot /Subtype /Link /Rect [ 322.30402 260.721 346.735 270.621 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 250 0 R /H /I >> endobj 559 0 obj << /Type /Annot /Subtype /Link /Rect [ 357.11902 260.721 403.561 270.621 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 441 0 R /H /I >> endobj 560 0 obj << /Type /Annot /Subtype /Link /Rect [ 413.945 260.721 453.655 270.621 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 497 0 R /H /I >> endobj 561 0 obj << /Type /Annot /Subtype /Link /Rect [ 464.039 260.721 487.865 270.621 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 479 0 R /H /I >> endobj 563 0 obj << /Type /Annot /Subtype /Link /Rect [ 498.249 260.721 515.354 270.621 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 562 0 R /H /I >> endobj 564 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 247.521 272.826 257.421 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 489 0 R /H /I >> endobj 566 0 obj << /Type /Annot /Subtype /Link /Rect [ 283.21 247.521 324.768 257.421 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 565 0 R /H /I >> endobj 567 0 obj << /Type /Annot /Subtype /Link /Rect [ 335.152 247.521 376.094 257.421 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 531 0 R /H /I >> endobj 569 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.478 247.521 441.46698 257.421 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 568 0 R /H /I >> endobj 570 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.851 247.521 470.793 257.421 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 571 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 195.921 261.826 205.821 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 572 0 obj << /Type /Annot /Subtype /Link /Rect [ 269.526 195.921 284.805 205.821 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 525 0 R /H /I >> endobj 573 0 obj << /Type /Annot /Subtype /Link /Rect [ 292.505 195.921 315.11 205.821 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 527 0 R /H /I >> endobj 574 0 obj << /Type /Annot /Subtype /Link /Rect [ 322.81 195.921 350.926 205.821 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 529 0 R /H /I >> endobj 575 0 obj << /Type /Annot /Subtype /Link /Rect [ 358.626 195.921 400.16202 205.821 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 550 0 R /H /I >> endobj 576 0 obj << /Length 577 0 R /Filter /FlateDecode >> stream xZݏBp_.#R"%Am.SZؒ#ٽ"|"E*p( ?řxq%Û_ABM!L _Wo}Oզ_"8F80!]ٔ>.X_ו<6,5(A0$!(bQܧt |̊)ۊ՛φ&'0(YIQj;~(u1?/32'J !J{ ,y|>l@$Ɣcx!NnLz+vrdr_#Va伵`֮CY4hz҇2{03I?-{Jjk1enγFۍ#ֿwҞ ΚjjKϡπ>9 U~SM0x[/(E_,jCu{gN9T~ $S#()~h<$:ThL/ DiwT\Dut0=|9q"eGN8v\oHL#!|I!$[yFLy`SePq u×@P҄kw?vzZO,=,Dd}2섃ƁrNv^ ݅2gU%ꦒf|* p Ws]P]h.As0.kyeb(/T=$$|.p CsMe!rj{u.4E mwZƏ8k#{>' +=UE+̺ݫ!=@wj%*󒻐=ﳨݥ̅jx3sMT;߱! OdgTz#]Q{Ey"C_epX.3Mn ,(skэ˺+|lpAWeJK|jV i8f9d/.fp I LЈaf#ڳ*=۽e~;d_\C0WNX>_c1Mģǔ]6rn2(ZlNC.TT()1pµSs1u:Le'< {jp [e¯Dz_2ct9>, R((rCҿz J_8<]U E'LX+³@Df*ǯe'.qsil2-۟+s.:Rթk1ScSQ2]{Q8y݇'s 1-#5}r,woC~~1I.㘢^Τ=lmdV֕AXBИ&CM\{( cעsDNr N+عSeYRx M-fS{30rr}vȄ}6ũ&#$j$,P @[f|{8afeh:.\cD9bwy<(NAY,G!Q3&,8ޏ:/ c>|{|jBGr, ,RGsIiwlh޽=o=vzͣ).m>/l&8Dvz3f(_^m7 ̑Bo=}Y0hϴ`TCG)4.L71WG396S͝oR W(2ox8oIqtq֍;PncQmq:CXˍN/dJjZ5Y; VxP}UJ`݋̛9JDWjX*1F_#lvөغ&CdEUFpDM"z8y.m 0(V*X&stE:g_vrg;$ p 2ZT7cYLisE:`&c~2\is7"s3z^N>;CCI?j8j3 ht SqhpÅ{Eg01%0Җ%.] 5Pu3@ɬ^Խ8<.˃lƿ|qDK@t` YLQ˼21ıwzɀ5DXxo endstream endobj 538 0 obj [ 537 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 563 0 R 564 0 R 566 0 R 567 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R ] endobj 126 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 538 0 R /Contents 576 0 R >> endobj 577 0 obj 2343 endobj 578 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 706.45 259.384 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 580 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 672.05 252.65201 681.95 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 581 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 590.05 259.384 599.95 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 582 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 555.65 252.65201 565.55 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 583 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 386.45 252.65201 396.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 584 0 obj << /Type /Annot /Subtype /Link /Rect [ 260.352 386.45 301.294 396.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 531 0 R /H /I >> endobj 585 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 291.25 254.489 301.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 114 0 R /H /I >> endobj 586 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.989 291.25 292.978 301.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 224 0 R /H /I >> endobj 587 0 obj << /Type /Annot /Subtype /Link /Rect [ 303.362 291.25 330.246 301.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 226 0 R /H /I >> endobj 588 0 obj << /Type /Annot /Subtype /Link /Rect [ 340.63 291.25 354.677 301.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 228 0 R /H /I >> endobj 589 0 obj << /Type /Annot /Subtype /Link /Rect [ 365.061 291.25 389.503 301.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 230 0 R /H /I >> endobj 590 0 obj << /Type /Annot /Subtype /Link /Rect [ 399.887 291.25 418.82898 301.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 591 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 256.85 252.65201 266.75 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 593 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 174.85 272.826 184.75 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 592 0 R /H /I >> endobj 594 0 obj << /Type /Annot /Subtype /Link /Rect [ 283.21 174.85 310.699 184.75 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 321 0 R /H /I >> endobj 595 0 obj << /Type /Annot /Subtype /Link /Rect [ 321.083 174.85 340.025 184.75 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 596 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 157.65 252.65201 167.55 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 597 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 75.65 259.384 85.55 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 598 0 obj << /Length 599 0 R /Filter /FlateDecode >> stream xYmo6_!`)KR%ùnMއa٦-aIT;K&]#oG#C, W>Nj/H%#K-ED?/^XX}3 !b3Gh S~|si,l~/md&֟vCE)1n| CD}<0&6H rζ-!=m+oإȁv)6_Agl| 3Hwi"E"ӝѠca ۵xL8rRfѦ"6H"9Ei_'ͬ7']f3Ė](ɣI/=}.,80+mcgva|߯Ui}Qs {ku:gL(x`7L$7S;)8BBjʋmN[6 6y;GA 2>/92!Iϰo>Yϥ%J|XIF7JvUtk*󔥐!E틪x0 8}ϥRObm~MqT9PT;P E$Miv.#ȧ6A51>q 3_iw,"VL*FG"IZBE9e E$Q:C(?fɃبgpDcu{[ u >l18bqy A*Udq"6aV7IHZQ6# h 3'Y=`+TcCANyq3(mv""zd^zr#5! HTzQEVXkFtT޴ee+F΋.FN=NUkcu*z*l"!ޭn1]^ܗ4FF!$ꙻbjrwѠCLpD:[OmK3Fۡc'E] eTkʧC®.!^~1uٞ;0>Z%qWGTmqwBBu{Pj-:iUohfL2~l%2 1!j\kSbYNp`2#/0ɌFi" )Aԫy)z#`|׭n#z1!`v C+xym1Xp3v w]5laN=G`vNm*.m(Ի'ȣQo/'/~-YRe竬3U*˘1zܗ|x`pDhY+St/}R+|sݦ2Š_eIdgktۤߗ3mvFFYzr:2;5 Geg1TJ-U42fH|5/!ӛC;Na5V2\Iy}jl.Y]'HmR#?_ Sz endstream endobj 579 0 obj [ 578 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R ] endobj 127 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 579 0 R /Contents 598 0 R >> endobj 599 0 obj 1505 endobj 603 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 586.449 249.0 596.349 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 602 0 R /H /I >> endobj 605 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.384 586.449 306.431 596.349 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 313 0 R /H /I >> endobj 606 0 obj << /Type /Annot /Subtype /Link /Rect [ 316.815 586.449 342.467 596.349 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 608 0 obj << /Type /Annot /Subtype /Link /Rect [ 352.851 586.449 396.84 596.349 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 607 0 R /H /I >> endobj 610 0 obj << /Type /Annot /Subtype /Link /Rect [ 407.224 586.449 437.782 596.349 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 609 0 R /H /I >> endobj 612 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 552.049 252.058 561.949 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 611 0 R /H /I >> endobj 613 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.758 552.049 275.037 561.949 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 525 0 R /H /I >> endobj 614 0 obj << /Type /Annot /Subtype /Link /Rect [ 282.737 552.049 310.853 561.949 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 529 0 R /H /I >> endobj 615 0 obj << /Type /Annot /Subtype /Link /Rect [ 318.553 552.049 360.089 561.949 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 550 0 R /H /I >> endobj 616 0 obj << /Type /Annot /Subtype /Link /Rect [ 367.789 552.049 424.615 561.949 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 533 0 R /H /I >> endobj 618 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 405.648 274.047 415.548 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 617 0 R /H /I >> endobj 619 0 obj << /Type /Annot /Subtype /Link /Rect [ 285.047 405.648 333.931 415.548 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 236 0 R /H /I >> endobj 620 0 obj << /Type /Annot /Subtype /Link /Rect [ 344.315 405.648 362.652 415.548 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 602 0 R /H /I >> endobj 621 0 obj << /Type /Annot /Subtype /Link /Rect [ 373.036 405.648 420.083 415.548 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 313 0 R /H /I >> endobj 623 0 obj << /Type /Annot /Subtype /Link /Rect [ 434.13 405.648 453.072 415.548 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 622 0 R /H /I >> endobj 624 0 obj << /Type /Annot /Subtype /Link /Rect [ 467.11902 405.648 501.945 415.548 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 625 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 392.448 256.315 402.348 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 626 0 obj << /Type /Annot /Subtype /Link /Rect [ 264.015 392.448 305.551 402.348 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 550 0 R /H /I >> endobj 628 0 obj << /Type /Annot /Subtype /Link /Rect [ 324.581 392.448 354.523 402.348 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 627 0 R /H /I >> endobj 629 0 obj << /Type /Annot /Subtype /Link /Rect [ 374.774 392.448 393.716 402.348 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 630 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 358.048 252.058 367.948 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 611 0 R /H /I >> endobj 631 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 251.247 274.047 261.147 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 617 0 R /H /I >> endobj 632 0 obj << /Type /Annot /Subtype /Link /Rect [ 285.047 251.247 303.384 261.147 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 602 0 R /H /I >> endobj 633 0 obj << /Type /Annot /Subtype /Link /Rect [ 313.768 251.247 360.815 261.147 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 313 0 R /H /I >> endobj 634 0 obj << /Type /Annot /Subtype /Link /Rect [ 371.199 251.247 390.141 261.147 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 622 0 R /H /I >> endobj 635 0 obj << /Type /Annot /Subtype /Link /Rect [ 400.525 251.247 426.177 261.147 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 636 0 obj << /Type /Annot /Subtype /Link /Rect [ 431.677 251.247 461.619 261.147 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 627 0 R /H /I >> endobj 637 0 obj << /Type /Annot /Subtype /Link /Rect [ 472.003 251.247 490.945 261.147 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 638 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 216.847 252.058 226.747 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 611 0 R /H /I >> endobj 639 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 110.046 274.047 119.946 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 617 0 R /H /I >> endobj 640 0 obj << /Type /Annot /Subtype /Link /Rect [ 285.047 110.046 333.931 119.946 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 236 0 R /H /I >> endobj 641 0 obj << /Type /Annot /Subtype /Link /Rect [ 347.978 110.046 382.804 119.946 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 642 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.851 110.046 422.503 119.946 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 643 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.203 110.046 471.739 119.946 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 550 0 R /H /I >> endobj 644 0 obj << /Type /Annot /Subtype /Link /Rect [ 490.769 110.046 509.711 119.946 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 645 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 75.646 252.058 85.546 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 611 0 R /H /I >> endobj 646 0 obj << /Length 647 0 R /Filter /FlateDecode >> stream xZߓ۶~3}=o/48<(STHHXJd[dnbǻboy4 ?t̂;hYXDAȀiirĄ*<~ܗM?kic}D2,`pÐ}HbwJvi7*Ǒ&RÀE$:"\ʧg>+EȆxS Sͧ$?mY!f_UDzd=N@ƹ9Qmq1S2Bzȇ`li?%}aU|=>"*JKb&cζY!="۞oӖ[$1#i|αɇd&[׈XPq tx@8b_URl!yE/Z 51hd.Ǥx˚(Sյ)'p.WBb_F3:4d~^u,?ír.7UjOk=KD1hVP%s@J}\2x_dǑcZ5YZf֯B˜68MYBᩋܻ{zLaa}T˩׉2p^18!voUz̓u:vGUk\JA|s pԔeh.gT$l1V:Zj$21/"ѷHI4ףIl5 %p"[KLA{_=ȜP.E9̬tw hUVqQBz_o" ySRCi ޼=d/:>grϫ/px"1C$@<XBףff$e4ly'՗%N91o-eVi)yXb̡Ayu"'ca 8ݵfzX"628_s,˜L S1λM;l ént9 sN^{)_t$ "Ӥesn˻<`^Bfg>oĴmqN]spQtptdr0"ƈ?( s< &vUyi& 4/"jx,aĜ\ *vGklXj# kh@׷E*}׷~e+7E 9&QȾ-\h{-\ÚLm1$:vБIa;c"2H&Dr`(2(LP'^g46MC,Ԅ†;|)a̠ŞRiĎiAbמ V[7k?Y|sΘx0s6Et܂,K5E2H0#tGj-/E 6Ɏ9@gGs: Mfܔi2,4tka?tL4,/i.b<} ާi+0%r^g \Mapm̏K]m̀V,a5cͳlI[о"/'kM(H)B8˛ W>In55օWM 7d0VqH> endobj 647 0 obj 2260 endobj 648 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 706.45 259.384 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 650 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 689.25 245.337 699.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 602 0 R /H /I >> endobj 652 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 595.382 289.931 605.282 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 651 0 R /H /I >> endobj 653 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 578.182 245.337 588.082 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 602 0 R /H /I >> endobj 654 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 497.514 244.105 507.414 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 317 0 R /H /I >> endobj 656 0 obj << /Type /Annot /Subtype /Link /Rect [ 254.489 497.514 267.931 507.414 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 655 0 R /H /I >> endobj 657 0 obj << /Type /Annot /Subtype /Link /Rect [ 278.315 497.514 296.641 507.414 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 258 0 R /H /I >> endobj 658 0 obj << /Type /Annot /Subtype /Link /Rect [ 307.025 497.514 326.583 507.414 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 659 0 obj << /Type /Annot /Subtype /Link /Rect [ 336.967 497.514 385.851 507.414 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 98 0 R /H /I >> endobj 660 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.235 497.514 415.177 507.414 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 661 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 480.314 261.826 490.214 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 662 0 obj << /Type /Annot /Subtype /Link /Rect [ 269.526 480.314 284.805 490.214 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 525 0 R /H /I >> endobj 663 0 obj << /Type /Annot /Subtype /Link /Rect [ 292.505 480.314 315.11 490.214 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 527 0 R /H /I >> endobj 664 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 399.646 259.384 409.546 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 665 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 382.446 274.047 392.346 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 313 0 R /H /I >> endobj 667 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 301.778 259.989 311.678 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 666 0 R /H /I >> endobj 668 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 284.578 274.047 294.478 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 313 0 R /H /I >> endobj 669 0 obj << /Type /Annot /Subtype /Link /Rect [ 281.747 284.578 300.689 294.478 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 622 0 R /H /I >> endobj 670 0 obj << /Type /Annot /Subtype /Link /Rect [ 308.389 284.578 338.331 294.478 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 627 0 R /H /I >> endobj 671 0 obj << /Type /Annot /Subtype /Link /Rect [ 346.031 284.578 384.52 294.478 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 233 0 R /H /I >> endobj 672 0 obj << /Type /Annot /Subtype /Link /Rect [ 392.22 284.578 450.872 294.478 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 674 0 obj << /Type /Annot /Subtype /Link /Rect [ 458.57202 284.578 484.851 294.478 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 673 0 R /H /I >> endobj 676 0 obj << /Type /Annot /Subtype /Link /Rect [ 492.551 284.578 523.109 294.478 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 675 0 R /H /I >> endobj 678 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 190.71 262.44202 200.61 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 677 0 R /H /I >> endobj 679 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 156.31 274.047 166.21 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 313 0 R /H /I >> endobj 680 0 obj << /Type /Annot /Subtype /Link /Rect [ 281.747 156.31 300.689 166.21 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 622 0 R /H /I >> endobj 681 0 obj << /Type /Annot /Subtype /Link /Rect [ 308.389 156.31 338.331 166.21 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 627 0 R /H /I >> endobj 682 0 obj << /Type /Annot /Subtype /Link /Rect [ 346.031 156.31 384.52 166.21 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 233 0 R /H /I >> endobj 683 0 obj << /Type /Annot /Subtype /Link /Rect [ 392.22 156.31 450.872 166.21 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 684 0 obj << /Type /Annot /Subtype /Link /Rect [ 458.57202 156.31 484.851 166.21 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 673 0 R /H /I >> endobj 685 0 obj << /Type /Annot /Subtype /Link /Rect [ 492.551 156.31 523.109 166.21 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 675 0 R /H /I >> endobj 686 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 75.642 254.489 85.542 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 114 0 R /H /I >> endobj 687 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.989 75.642 292.978 85.542 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 224 0 R /H /I >> endobj 688 0 obj << /Type /Annot /Subtype /Link /Rect [ 303.362 75.642 330.246 85.542 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 226 0 R /H /I >> endobj 689 0 obj << /Type /Annot /Subtype /Link /Rect [ 340.63 75.642 354.677 85.542 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 228 0 R /H /I >> endobj 690 0 obj << /Type /Annot /Subtype /Link /Rect [ 365.061 75.642 389.503 85.542 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 230 0 R /H /I >> endobj 691 0 obj << /Type /Annot /Subtype /Link /Rect [ 399.887 75.642 418.82898 85.542 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 692 0 obj << /Length 693 0 R /Filter /FlateDecode >> stream xYKoFW( m#=n)b AC`@KEDUj"?"%]QDKݝ|3;! (C3]#%"$g߈hPZ F)c*F:ݶv7XQ$\3Ȱ2 }|p*[ɪ=̦¯õB'o~&ydZt6mtls4w1eN/57C%Z 6ړu: qB0Uϓ# q-yTtrow7>=N2AeYK Ew|]\_w7t5fX AԸ)6bQcN&lW\ni5'תC3B#H iݛk T=$cigQlTGYs$0)28pĕW/kOL Ya|n&52U4fս7Zt 9uJk\E?xs ֐!Apc-CH="4F_ZKclmϡlaiِ,!۷Km" @XjEFD) R ]9B h͢,|BT[Uu"6JׇyXD."PV-b$hJB )70JRX\0J \-h,NZ=8?9p| 8f%h.Q*H>;/67QhAkp28)- ǃҩ Q[m`x@|squuw -U'?Vwoh] }B+yph0W.HNU[d'EAg[hLg p[1NM&qq8`eAQKVr&O튣PZ" GABv!FmWEmTN'Ӵ<ոd6nxնKz8teX3u .5u;X܏|ÂbkXXo^,7//w[lt}s+^twVq ]lM,t& D5m_6h{kׯ 5A@6 07\Ĩ9YݵGı/hzuu9 tP~z{Wa Sti?*Jء6ە" xD"V<\j|=9B[Ϻ5Kh'S:rv?Nuʌd^O3{qGj1rLSpwQkr-=4$ȷ V)0C$g\͋*GY~i] ݤt2vy],铢lJc !5.8g endstream endobj 649 0 obj [ 648 0 R 650 0 R 652 0 R 653 0 R 654 0 R 656 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 665 0 R 667 0 R 668 0 R 669 0 R 670 0 R 671 0 R 672 0 R 674 0 R 676 0 R 678 0 R 679 0 R 680 0 R 681 0 R 682 0 R 683 0 R 684 0 R 685 0 R 686 0 R 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R ] endobj 95 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 649 0 R /Contents 692 0 R >> endobj 693 0 obj 1536 endobj 694 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 586.276 274.652 596.176 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 607 0 R /H /I >> endobj 696 0 obj << /Type /Annot /Subtype /Link /Rect [ 285.036 586.276 315.594 596.176 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 609 0 R /H /I >> endobj 697 0 obj << /Type /Annot /Subtype /Link /Rect [ 325.978 586.276 380.96698 596.176 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 568 0 R /H /I >> endobj 698 0 obj << /Type /Annot /Subtype /Link /Rect [ 391.351 586.276 410.293 596.176 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 699 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 500.276 252.058 510.176 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 611 0 R /H /I >> endobj 700 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.758 500.276 285.41 510.176 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 701 0 obj << /Type /Annot /Subtype /Link /Rect [ 293.11 500.276 349.936 510.176 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 533 0 R /H /I >> endobj 702 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 404.719 265.489 414.619 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 703 0 obj << /Type /Annot /Subtype /Link /Rect [ 283.199 404.719 324.141 414.619 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 531 0 R /H /I >> endobj 704 0 obj << /Type /Annot /Subtype /Link /Rect [ 331.841 404.719 388.667 414.619 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 533 0 R /H /I >> endobj 705 0 obj << /Type /Annot /Subtype /Link /Rect [ 404.034 404.719 438.86 414.619 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 706 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 387.519 252.058 397.419 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 611 0 R /H /I >> endobj 707 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.758 387.519 316.58398 397.419 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 533 0 R /H /I >> endobj 709 0 obj << /Type /Annot /Subtype /Link /Rect [ 234.326 305.162 259.384 315.062 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 708 0 R /H /I >> endobj 711 0 obj << /Type /Annot /Subtype /Link /Rect [ 264.884 305.162 292.384 315.062 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 710 0 R /H /I >> endobj 713 0 obj << /Type /Annot /Subtype /Link /Rect [ 306.431 305.162 346.152 315.062 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 712 0 R /H /I >> endobj 715 0 obj << /Type /Annot /Subtype /Link /Rect [ 356.536 305.162 404.188 315.062 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 714 0 R /H /I >> endobj 717 0 obj << /Type /Annot /Subtype /Link /Rect [ 414.57202 305.162 460.387 315.062 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 716 0 R /H /I >> endobj 719 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.771 305.162 509.26 315.062 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 718 0 R /H /I >> endobj 721 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 291.962 277.71 301.862 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 720 0 R /H /I >> endobj 722 0 obj << /Type /Annot /Subtype /Link /Rect [ 288.094 291.962 307.036 301.862 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 723 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 274.762 261.826 284.662 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 724 0 obj << /Type /Annot /Subtype /Link /Rect [ 269.526 274.762 310.46802 284.662 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 531 0 R /H /I >> endobj 725 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 192.405 305.826 202.305 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 503 0 R /H /I >> endobj 726 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 175.205 270.989 185.105 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 607 0 R /H /I >> endobj 727 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 92.848 305.826 102.748 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 503 0 R /H /I >> endobj 728 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 75.648 270.989 85.548 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 607 0 R /H /I >> endobj 729 0 obj << /Length 730 0 R /Filter /FlateDecode >> stream xY[o6~ϯ0 HИ]PtM tk=(6m -O؏]")Z`Gws&_~@+R؈Sɾ 7#[nB8"{"y˃]~=W|*NYo?-cQd>L<*wq{zy3UFh9Տ=3,ʧ>2=*S$`A\Ƈ'z8)o1$Dua!2@Axo׌ kAP2 Q]uF~ol[xmq}pezmwN1. KkYDSS} \*,~CԶe<#tU &G6pyzGK-]werЁYW$o-k:q2[++R@q^J`Um{Emnc\ T)S}|ʙr'n޵5ɾpbvW V(}RQ R6V@pIkvaf1hUnvQ] ǼNI ԥS%::W6״ғ^E}|`$ (˛9i8S2r%5J>\kE6SlUxL-k{OrK=\8ϧ_[]~b-?Z&Xvզ. ڪkm6:i8)HJV>E1">) i٫xnBp]Aɶ#鐄/C?tE:mu>b5A(C,NvP h^<7t '(Ј2WDr8c(5Ɲ߼t@htbAF{|9 }û'8y#Ad+p/ÛOuB778yxӡS9}Cj`Nnd(svR]17!d.N}MT ,T~ 1y(Hn*-d=u‡lNX:iZ z#m|&JVY-9c,Dύ~?Ҹu9/,Ș=zBa(=[}-V~z!BwcVjz#'j)V$!FbmҨ>$Fc䛈љسh&I4R $Y`Y\ޠ fO%Me_5J1 ڇgAn3Ső‹JZوFe6˳>'$d #O!0&+l{=`KMݛ܆CS5rd&héO:9"NSt9;Z Mx8m_QX{)_:;Z|/a&NUB@pr7$*sx @!H]pϨ!I@cMjhP"R~F !Y }j endstream endobj 695 0 obj [ 694 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 709 0 R 711 0 R 713 0 R 715 0 R 717 0 R 719 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R ] endobj 521 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 695 0 R /Contents 729 0 R >> endobj 730 0 obj 1729 endobj 731 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 651.134 305.826 661.034 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 503 0 R /H /I >> endobj 733 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 633.934 270.989 643.834 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 607 0 R /H /I >> endobj 734 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 523.464 259.384 533.364 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 735 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 462.664 270.989 472.564 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 607 0 R /H /I >> endobj 736 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 365.394 259.384 375.294 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 737 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 330.994 270.989 340.894 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 607 0 R /H /I >> endobj 739 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 207.324 284.44202 217.224 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 738 0 R /H /I >> endobj 740 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 172.924 270.989 182.824 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 607 0 R /H /I >> endobj 742 0 obj << /Type /Annot /Subtype /Link /Rect [ 278.689 172.924 337.94598 182.824 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 741 0 R /H /I >> endobj 743 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 75.654 284.44202 85.554 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 738 0 R /H /I >> endobj 744 0 obj << /Length 745 0 R /Filter /FlateDecode >> stream xY[o6~ϯ0 M)QK[,C;=,{efD:i)ek`8?9$?`ˆ?$V^sk [>o a'@,^rӶ vv\+Dsejuqnk q Z68>6A6n>D}>ڲv'TO#& P{f}(v:tޘa͞~D;z96+.kV];ѫwa#um1#n`9!Aycma~7C~(-igS5F&h V|}YEZQo,ACRۢ9؛_6膇=zgeify1sMr;7Ǐs%`w0ז?g۫-ub33|EC%gB>[AbalxL#yt>rp|bFaN6;"p 'b 7f!aBGIn[0ߺּUfVC! 0^?<3 1`,-TSoBIj58 éWK;7k;6@Lۆm:FP?F`sǴ*SEmO`._ O\+bTQNy%۰d9[P<\q%&EU6u_ļRֻEͻ^!.Ml{Ra5eC_C6zèB dIf&G.w>{f~\]p1C\R5T"9&x]fMnou7iڰK&9j.⢈bths^Q@t,a0:ޕ*Pcx8#Hx+ `UM)¿"aC£Ub`66ZfC MY5tOD߮x樋ʀP=N5A$Sxexٰ Z;_Pr>xy+]r5+Xԇ~hcԐz-FK%RAErzC}4GB5LcqCbSCϘ>2b& eA갪g 'C)a]V3.y@ld_U)Xm s'_ٷ?϶IrηBJT\Up!u+.}/;aͭ94vCsPj\8Έ٢2 )QP%rNU8R)TųA˛* _ r=+$UQ)FЋ Vl|Vodd_k* ľ~<|% kSi'u> endobj 745 0 obj 1582 endobj 747 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 706.45 261.826 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 749 0 obj << /Type /Annot /Subtype /Link /Rect [ 269.526 706.45 284.805 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 525 0 R /H /I >> endobj 750 0 obj << /Type /Annot /Subtype /Link /Rect [ 292.505 706.45 315.11 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 527 0 R /H /I >> endobj 751 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 626.484 259.384 636.384 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 752 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 609.284 245.337 619.184 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 602 0 R /H /I >> endobj 753 0 obj << /Type /Annot /Subtype /Link /Rect [ 253.037 609.284 296.41 619.184 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 122 0 R /H /I >> endobj 754 0 obj << /Type /Annot /Subtype /Link /Rect [ 304.11 609.284 326.11 619.184 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 417 0 R /H /I >> endobj 755 0 obj << /Type /Annot /Subtype /Link /Rect [ 333.81 609.284 351.531 619.184 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 421 0 R /H /I >> endobj 756 0 obj << /Type /Annot /Subtype /Link /Rect [ 359.23102 609.284 387.941 619.184 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 363 0 R /H /I >> endobj 758 0 obj << /Type /Annot /Subtype /Link /Rect [ 395.641 609.284 436.561 619.184 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 759 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 529.318 259.384 539.218 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 760 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 512.118 245.337 522.018 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 602 0 R /H /I >> endobj 761 0 obj << /Type /Annot /Subtype /Link /Rect [ 253.037 512.118 266.479 522.018 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 317 0 R /H /I >> endobj 762 0 obj << /Type /Annot /Subtype /Link /Rect [ 274.17902 512.118 317.552 522.018 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 122 0 R /H /I >> endobj 763 0 obj << /Type /Annot /Subtype /Link /Rect [ 325.252 512.118 383.904 522.018 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 319 0 R /H /I >> endobj 764 0 obj << /Type /Annot /Subtype /Link /Rect [ 391.604 512.118 419.09302 522.018 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 321 0 R /H /I >> endobj 765 0 obj << /Type /Annot /Subtype /Link /Rect [ 426.793 512.118 456.119 522.018 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 323 0 R /H /I >> endobj 766 0 obj << /Type /Annot /Subtype /Link /Rect [ 463.819 512.118 490.703 522.018 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 325 0 R /H /I >> endobj 768 0 obj << /Type /Annot /Subtype /Link /Rect [ 498.403 512.118 536.276 522.018 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 767 0 R /H /I >> endobj 769 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 432.152 305.826 442.052 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 503 0 R /H /I >> endobj 770 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 414.952 245.337 424.852 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 602 0 R /H /I >> endobj 771 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 282.186 259.384 292.086 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 772 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 264.986 245.337 274.886 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 602 0 R /H /I >> endobj 773 0 obj << /Type /Annot /Subtype /Link /Rect [ 253.037 264.986 301.921 274.886 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 98 0 R /H /I >> endobj 774 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 158.62 259.384 168.52 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 775 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 141.42 245.337 151.32 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 602 0 R /H /I >> endobj 776 0 obj << /Type /Annot /Subtype /Link /Rect [ 253.037 141.42 275.037 151.32 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 417 0 R /H /I >> endobj 777 0 obj << /Type /Annot /Subtype /Link /Rect [ 282.737 141.42 300.458 151.32 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 421 0 R /H /I >> endobj 778 0 obj << /Length 779 0 R /Filter /FlateDecode >> stream xY[o6~ϯˊHX^Eq{jbxüEmx~eI$ʗ C;40<7zQz1I1_.!lٴaS̛ޟy{wyYQo8Ϯ/{=L"Aԣ1aLvޅŗQ6Vp闳Нz0 JRC Pm,)0\igFPR/pY/&Apܵ) IU6:gdu7Ns?T!\7iyL,4 $0WJʵ֕:>/H1K/mDbY`yhx`\*:ֺ4̶0.(_6/UkSmT]7Pj9n^keBgU+t2NG2YEU{iP}l0T?ՂJBד>c?M(> k1&\GZ;v|83MI뛺_]Vr>n`6=짠'Br$v?2 #Giɇҹq#~|>YbqDR",@SkxG &9=LNħHg>+-̳nelͦwŭG#/b1^SH_Dq]>4ΚKsk΢HI]PS~gJ6]fU&8#>GSR~MRa `4zӻ,Qj_ IL~YGӌϐq$̗L@Sef"e fd(Pe!#E{k텃abE*9)8(+˸k04ARsyg3EqSTG8."Xs҇50K<qXkը 5|QB^3a݅Vc?/8a˲ VLB_] L$FJ᥿eI3g5Ihgl!ܡMuz~5j#?jn0r:t]? h[Vy:WY1 ðI{.ϷIƍg %vne[_fזMrĭ:h;G=+xv_nk_-wקzz.FCA3d}&FaFE^7ek-K?3L_[ Ae(^]& G{&u3dv24c.d)<o"~g)Ştc=d|NCDz%Ƀ!lW#dON8,jcڝveEyoJ7M}y}@[?n;80? }``sÊP+Zm誈^k]ꋺ<Oo?pf+Ԣ _m[}穫N mzHp(d:\*|lT:;`ҩ{e@oxq܊5NMX&sTVy+De @0MPIKF,m~a6X{Fe lZسG ؑy-0?X0#!Mݖ~^۩иh )6mcaR/Voh'a$A endstream endobj 748 0 obj [ 747 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R ] endobj 94 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 748 0 R /Contents 778 0 R >> endobj 779 0 obj 1712 endobj 780 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 652.878 259.384 662.778 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 782 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 635.678 249.0 645.578 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 417 0 R /H /I >> endobj 783 0 obj << /Type /Annot /Subtype /Link /Rect [ 256.7 635.678 274.421 645.578 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 421 0 R /H /I >> endobj 784 0 obj << /Type /Annot /Subtype /Link /Rect [ 282.121 635.678 310.831 645.578 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 363 0 R /H /I >> endobj 785 0 obj << /Type /Annot /Subtype /Link /Rect [ 318.531 635.678 359.451 645.578 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 786 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 554.224 259.384 564.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 787 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 537.024 249.0 546.924 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 417 0 R /H /I >> endobj 788 0 obj << /Type /Annot /Subtype /Link /Rect [ 256.7 537.024 274.421 546.924 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 421 0 R /H /I >> endobj 789 0 obj << /Type /Annot /Subtype /Link /Rect [ 282.121 537.024 310.831 546.924 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 363 0 R /H /I >> endobj 790 0 obj << /Type /Annot /Subtype /Link /Rect [ 318.531 537.024 359.451 546.924 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 791 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 455.57 259.384 465.47 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 792 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 438.37 255.70999 448.27 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 363 0 R /H /I >> endobj 793 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.41 438.37 304.33 448.27 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 795 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 356.916 266.699 366.816 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 794 0 R /H /I >> endobj 797 0 obj << /Type /Annot /Subtype /Link /Rect [ 277.083 356.916 307.025 366.816 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 796 0 R /H /I >> endobj 799 0 obj << /Type /Annot /Subtype /Link /Rect [ 317.409 356.916 361.398 366.816 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 798 0 R /H /I >> endobj 801 0 obj << /Type /Annot /Subtype /Link /Rect [ 371.78198 356.916 393.166 366.816 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 800 0 R /H /I >> endobj 803 0 obj << /Type /Annot /Subtype /Link /Rect [ 403.55 356.916 453.039 366.816 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 802 0 R /H /I >> endobj 805 0 obj << /Type /Annot /Subtype /Link /Rect [ 463.423 356.916 514.122 366.816 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 804 0 R /H /I >> endobj 806 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 343.716 251.442 353.616 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 515 0 R /H /I >> endobj 808 0 obj << /Type /Annot /Subtype /Link /Rect [ 261.826 343.716 300.931 353.616 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 807 0 R /H /I >> endobj 809 0 obj << /Type /Annot /Subtype /Link /Rect [ 311.315 343.716 330.257 353.616 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 810 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 326.516 252.65201 336.416 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 811 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 245.062 259.384 254.962 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 106 0 R /H /I >> endobj 812 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 227.862 266.71 237.762 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 497 0 R /H /I >> endobj 814 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 146.408 275.884 156.308 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 813 0 R /H /I >> endobj 815 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 129.20801 266.71 139.108 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 497 0 R /H /I >> endobj 816 0 obj << /Length 817 0 R /Filter /FlateDecode >> stream xXKo6WR G{(H.^v{J-Ԓ\In,zXF/EX9 of>~QQ}Ac$P4`?DOnx|!r'#x`,X6y}}p=`˨HvUgSHP1 (EL2ImX9olY?-/PM/aX nfW{_Hrqi9pD0`CBHn3%\czvl\ b6/7;yi$>gӏaoD@T$}_D !AKBX 4'mKUR4a8L@_D$ !a&O(A +9EFgT~2Rp@EF8YN^CD`2ϻOZ:շb#M踫lSxNQ&R[Ac֧.SUV8DtÝYU{H=1> k7_^.(7 6sl3g95c}t7W.Čk 9R jQYWF9 BI@7cՀ^@=nsjյ*j(hcsB{74ǫGJ &R'?!)_ϑC0f75f`zfD"}vr|}rh+>S}eU@|PN<ʃ!34\y}o{9Tk)IPV[l%(>ߓgn+!ϠT?AJE5qaP֗#@VyDmޚJ'Oi<"7$w0?B)D{|eH h=*<G-eI]D j&?Ud E(h{޹}T],BC endstream endobj 781 0 obj [ 780 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R 795 0 R 797 0 R 799 0 R 801 0 R 803 0 R 805 0 R 806 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 814 0 R 815 0 R ] endobj 393 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 781 0 R /Contents 816 0 R >> endobj 817 0 obj 1136 endobj 818 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 689.25 270.989 699.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 607 0 R /H /I >> endobj 820 0 obj << /Type /Annot /Subtype /Link /Rect [ 278.689 689.25 337.94598 699.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 741 0 R /H /I >> endobj 821 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 594.461 256.942 604.361 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 673 0 R /H /I >> endobj 822 0 obj << /Type /Annot /Subtype /Link /Rect [ 267.326 594.461 297.884 604.361 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 675 0 R /H /I >> endobj 823 0 obj << /Type /Annot /Subtype /Link /Rect [ 308.884 594.461 327.826 604.361 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 824 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 577.261 261.826 587.161 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 522 0 R /H /I >> endobj 825 0 obj << /Type /Annot /Subtype /Link /Rect [ 269.526 577.261 310.46802 587.161 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 531 0 R /H /I >> endobj 826 0 obj << /Type /Annot /Subtype /Link /Rect [ 234.326 469.272 252.65201 479.172 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 258 0 R /H /I >> endobj 827 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.036 469.272 282.594 479.172 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 829 0 obj << /Type /Annot /Subtype /Link /Rect [ 296.641 469.272 330.235 479.172 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 828 0 R /H /I >> endobj 831 0 obj << /Type /Annot /Subtype /Link /Rect [ 337.935 469.272 369.692 479.172 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 830 0 R /H /I >> endobj 832 0 obj << /Type /Annot /Subtype /Link /Rect [ 389.602 469.272 448.859 479.172 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 741 0 R /H /I >> endobj 833 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 452.072 257.558 461.972 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 609 0 R /H /I >> endobj 834 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 370.483 248.989 380.383 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 258 0 R /H /I >> endobj 835 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.373 370.483 278.931 380.383 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 836 0 obj << /Type /Annot /Subtype /Link /Rect [ 289.315 370.483 327.188 380.383 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 767 0 R /H /I >> endobj 838 0 obj << /Type /Annot /Subtype /Link /Rect [ 337.572 370.483 383.398 380.383 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 837 0 R /H /I >> endobj 839 0 obj << /Type /Annot /Subtype /Link /Rect [ 393.78198 370.483 412.724 380.383 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 840 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 353.283 257.558 363.183 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 609 0 R /H /I >> endobj 841 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 271.694 271.583 281.594 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 842 0 obj << /Type /Annot /Subtype /Link /Rect [ 281.967 271.694 319.84 281.594 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 767 0 R /H /I >> endobj 844 0 obj << /Type /Annot /Subtype /Link /Rect [ 330.224 271.694 363.84 281.594 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 843 0 R /H /I >> endobj 845 0 obj << /Type /Annot /Subtype /Link /Rect [ 374.224 271.694 393.166 281.594 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 846 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 254.494 253.27899 264.394 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 673 0 R /H /I >> endobj 847 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 172.905 271.583 182.805 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 848 0 obj << /Type /Annot /Subtype /Link /Rect [ 281.967 172.905 315.583 182.805 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 843 0 R /H /I >> endobj 849 0 obj << /Type /Annot /Subtype /Link /Rect [ 325.967 172.905 344.909 182.805 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 850 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 155.705 253.27899 165.605 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 673 0 R /H /I >> endobj 851 0 obj << /Length 852 0 R /Filter /FlateDecode >> stream xYK6-v[b{Ҧ9 APKr%9Z/Jd+M5$g3of(a<(mȅFzLIDHVw/ oG 0)D$V!+~|]lTYz~ *0I1ؽΧ(}:GO^*#RC h[ QXﶡ7P$`.tFx0t}]y9p &Bάt0& tZN|.#r}?a@'Nx7_c6'j8ʳ˸!J5FϕR A4To]~A \)Ddt2?Ջ_eEF`.ٜ^B2.XT}DYt 'cp(AwF\xyؗQIT[42vQ?ЩPb?gi)d;} ed0$a=98u!dOfcĨhXDQr*}7/"$EiVjAJz5ƕsrkμ.ɅX!%Cꉁ' Oq80y$J"L)TXAІMk7V\,㘮cјɘZl4uq42:Q6.U/`}BBDT>Y&|19.bL<ė=1^փa6otiŦGc)+xb|Øo`OPs〺8EiGImШwYզښ~zN6FvK,ʅZt!.佞ˆ(W"wIA$Bfb=8q M!1xT6J Q&=gb|XW@YF*:$[$J`A+%}Y*-~&ST-HS~q-SD!or\=  Wb楘l;hf}]zfEt:֞e6Zߴ$NaL %o5 y/'* ƆQ64%!㾺ꙦjnB̗1"Qa(!SyEDAHP6CZ@aě@u)yH(n@rPLLա뺯@KV@*z9<ꢘ=T 7a!wS1ْD\犢D\{SK$AKd&Iow|-{!:*n^Cyfv> b,GwUaiI / å2ThHb<90fs/)_5"t]qj-€|I0Yߥ >>u ˢuw^wUbѭlL,rm.x!O\S_q {gp5N@$|B|ZA2Eߧ)ΧxB[#Y}l8 |x~asU2y#\`L&~. ⤷edct< ͦsmMEvu endstream endobj 819 0 obj [ 818 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 829 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R 838 0 R 839 0 R 840 0 R 841 0 R 842 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R ] endobj 601 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 819 0 R /Contents 851 0 R >> endobj 852 0 obj 1703 endobj 854 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 706.45 259.384 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 856 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 689.25 264.873 699.15 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 767 0 R /H /I >> endobj 857 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 580.442 279.547 590.342 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 236 0 R /H /I >> endobj 859 0 obj << /Type /Annot /Subtype /Link /Rect [ 293.594 580.442 336.978 590.342 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 858 0 R /H /I >> endobj 860 0 obj << /Type /Annot /Subtype /Link /Rect [ 344.678 580.442 378.294 590.342 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 843 0 R /H /I >> endobj 861 0 obj << /Type /Annot /Subtype /Link /Rect [ 392.341 580.442 411.283 590.342 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 862 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 563.242 272.826 573.142 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 837 0 R /H /I >> endobj 863 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 480.834 259.384 490.734 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 865 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 463.634 268.547 473.534 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 864 0 R /H /I >> endobj 866 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 354.826 259.384 364.726 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 867 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 303.226 260.616 313.126 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 843 0 R /H /I >> endobj 868 0 obj << /Length 869 0 R /Filter /FlateDecode >> stream xXYo6~ϯ ( H}($[HyjkюP;u- {l$.^FGÇ"8|頋O_"6@" w*FY_"@7*_gd՟aFmSD)vcw/] p'm)}xQu=P}(zxd页lG1sEcO^ 0{&J#q̀0f@=/+ohڑ0}UP < &V4žUf= wGԘ*ݩLpbM[b.jh>]<[q8zV\GV FAn Ba/aPȠTAX`|iBBS5;m* o5Ѡޔe|7v٩u 66|7MRol5MNHȦ.{u2_DGy}V&i*s6i,| &%-[͕ʗu*ZiA+WEŵ&fmZE[qJvQ]q6!ʱmi3JoVp8柍z׫ܿ[#Oqpٿ9)b,-x͵a:oHB>ΆG~-@ endstream endobj 855 0 obj [ 854 0 R 856 0 R 857 0 R 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R 865 0 R 866 0 R 867 0 R ] endobj 853 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 855 0 R /Contents 868 0 R >> endobj 869 0 obj 1114 endobj 870 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 585.704 279.547 595.604 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 236 0 R /H /I >> endobj 872 0 obj << /Type /Annot /Subtype /Link /Rect [ 289.931 585.704 308.873 595.604 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 873 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 499.704 242.279 509.604 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 525 0 R /H /I >> endobj 874 0 obj << /Type /Annot /Subtype /Link /Rect [ 249.979 499.704 272.58398 509.604 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 527 0 R /H /I >> endobj 875 0 obj << /Type /Annot /Subtype /Link /Rect [ 280.284 499.704 308.4 509.604 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 529 0 R /H /I >> endobj 876 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 376.889 259.384 386.789 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 877 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 342.489 242.279 352.389 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 525 0 R /H /I >> endobj 878 0 obj << /Type /Annot /Subtype /Link /Rect [ 249.979 342.489 278.095 352.389 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 529 0 R /H /I >> endobj 879 0 obj << /Type /Annot /Subtype /Link /Rect [ 285.79498 342.489 329.179 352.389 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 617 0 R /H /I >> endobj 880 0 obj << /Type /Annot /Subtype /Link /Rect [ 336.879 342.489 361.31 352.389 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 250 0 R /H /I >> endobj 881 0 obj << /Type /Annot /Subtype /Link /Rect [ 369.01 342.489 404.452 352.389 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 882 0 obj << /Type /Annot /Subtype /Link /Rect [ 412.15198 342.489 457.98898 352.389 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 182 0 R /H /I >> endobj 883 0 obj << /Type /Annot /Subtype /Link /Rect [ 465.689 342.489 507.236 352.389 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 864 0 R /H /I >> endobj 884 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 259.274 259.384 269.174 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 885 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 224.874 242.279 234.774 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 525 0 R /H /I >> endobj 886 0 obj << /Type /Annot /Subtype /Link /Rect [ 249.979 224.874 272.58398 234.774 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 527 0 R /H /I >> endobj 887 0 obj << /Type /Annot /Subtype /Link /Rect [ 280.284 224.874 308.4 234.774 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 529 0 R /H /I >> endobj 888 0 obj << /Type /Annot /Subtype /Link /Rect [ 316.1 224.874 359.484 234.774 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 617 0 R /H /I >> endobj 889 0 obj << /Type /Annot /Subtype /Link /Rect [ 367.18402 224.874 385.521 234.774 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 602 0 R /H /I >> endobj 890 0 obj << /Type /Annot /Subtype /Link /Rect [ 393.221 224.874 440.268 234.774 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 313 0 R /H /I >> endobj 891 0 obj << /Type /Annot /Subtype /Link /Rect [ 447.96802 224.874 461.41 234.774 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 317 0 R /H /I >> endobj 892 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.11 224.874 517.994 234.774 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 98 0 R /H /I >> endobj 893 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 211.674 270.373 221.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 122 0 R /H /I >> endobj 894 0 obj << /Type /Annot /Subtype /Link /Rect [ 278.073 211.674 297.015 221.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 622 0 R /H /I >> endobj 895 0 obj << /Type /Annot /Subtype /Link /Rect [ 304.715 211.674 334.65698 221.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 627 0 R /H /I >> endobj 896 0 obj << /Type /Annot /Subtype /Link /Rect [ 342.357 211.674 368.009 221.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 247 0 R /H /I >> endobj 897 0 obj << /Type /Annot /Subtype /Link /Rect [ 375.70898 211.674 434.361 221.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 319 0 R /H /I >> endobj 898 0 obj << /Type /Annot /Subtype /Link /Rect [ 442.061 211.674 454.282 221.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 220 0 R /H /I >> endobj 899 0 obj << /Type /Annot /Subtype /Link /Rect [ 461.982 211.674 486.413 221.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 250 0 R /H /I >> endobj 900 0 obj << /Type /Annot /Subtype /Link /Rect [ 494.113 211.674 532.602 221.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 233 0 R /H /I >> endobj 901 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.95 198.474 267.392 208.37401 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 133 0 R /H /I >> endobj 902 0 obj << /Type /Annot /Subtype /Link /Rect [ 275.092 198.474 325.802 208.37401 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 188 0 R /H /I >> endobj 903 0 obj << /Type /Annot /Subtype /Link /Rect [ 333.502 198.474 392.154 208.37401 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 904 0 obj << /Type /Annot /Subtype /Link /Rect [ 399.854 198.474 426.738 208.37401 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 325 0 R /H /I >> endobj 905 0 obj << /Type /Annot /Subtype /Link /Rect [ 434.438 198.474 480.88 208.37401 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 441 0 R /H /I >> endobj 906 0 obj << /Type /Annot /Subtype /Link /Rect [ 488.58 198.474 510.58 208.37401 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 417 0 R /H /I >> endobj 907 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 185.274 300.931 195.174 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 419 0 R /H /I >> endobj 908 0 obj << /Type /Annot /Subtype /Link /Rect [ 308.63098 185.274 326.352 195.174 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 421 0 R /H /I >> endobj 909 0 obj << /Type /Annot /Subtype /Link /Rect [ 334.052 185.274 403.704 195.174 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 423 0 R /H /I >> endobj 910 0 obj << /Type /Annot /Subtype /Link /Rect [ 411.404 185.274 465.194 195.174 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 425 0 R /H /I >> endobj 911 0 obj << /Type /Annot /Subtype /Link /Rect [ 472.89398 185.274 505.89398 195.174 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 427 0 R /H /I >> endobj 912 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 172.074 255.70999 181.974 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 363 0 R /H /I >> endobj 913 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.41 172.074 303.12 181.974 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 497 0 R /H /I >> endobj 914 0 obj << /Type /Annot /Subtype /Link /Rect [ 310.82 172.074 334.646 181.974 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 479 0 R /H /I >> endobj 915 0 obj << /Type /Annot /Subtype /Link /Rect [ 342.346 172.074 383.288 181.974 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 531 0 R /H /I >> endobj 916 0 obj << /Type /Annot /Subtype /Link /Rect [ 390.988 172.074 434.977 181.974 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 607 0 R /H /I >> endobj 917 0 obj << /Type /Annot /Subtype /Link /Rect [ 442.677 172.074 473.23502 181.974 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 609 0 R /H /I >> endobj 918 0 obj << /Type /Annot /Subtype /Link /Rect [ 480.935 172.074 511.493 181.974 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 675 0 R /H /I >> endobj 919 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 158.874 260.594 168.774 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 828 0 R /H /I >> endobj 920 0 obj << /Type /Annot /Subtype /Link /Rect [ 268.294 158.874 300.051 168.774 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 830 0 R /H /I >> endobj 921 0 obj << /Type /Annot /Subtype /Link /Rect [ 307.751 158.874 345.624 168.774 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 767 0 R /H /I >> endobj 922 0 obj << /Type /Annot /Subtype /Link /Rect [ 353.324 158.874 394.244 168.774 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 757 0 R /H /I >> endobj 923 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.944 158.874 435.56 168.774 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 843 0 R /H /I >> endobj 924 0 obj << /Type /Annot /Subtype /Link /Rect [ 443.26 158.874 484.807 168.774 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 864 0 R /H /I >> endobj 925 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 75.659 254.489 85.559 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 112 0 R /H /I >> endobj 926 0 obj << /Type /Annot /Subtype /Link /Rect [ 264.873 75.659 288.699 85.559 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 114 0 R /H /I >> endobj 928 0 obj << /Type /Annot /Subtype /Link /Rect [ 299.083 75.659 324.13 85.559 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 927 0 R /H /I >> endobj 929 0 obj << /Type /Annot /Subtype /Link /Rect [ 334.514 75.659 367.503 85.559 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 344 0 R /H /I >> endobj 930 0 obj << /Type /Annot /Subtype /Link /Rect [ 377.887 75.659 396.82898 85.559 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 436 0 R /H /I >> endobj 932 0 obj << /Type /Annot /Subtype /Link /Rect [ 407.213 75.659 436.539 85.559 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 931 0 R /H /I >> endobj 934 0 obj << /Type /Annot /Subtype /Link /Rect [ 446.923 75.659 475.028 85.559 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 933 0 R /H /I >> endobj 935 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.412 75.659 504.35397 85.559 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 936 0 obj << /Length 937 0 R /Filter /FlateDecode >> stream xZ_ܶO! (plEE8;SVF+m$;j%JvE7n7̐ofI" ~ ow(S_^ "Bm? BG(ADݾjo}GYͫY#A410&gqou xIﲞ{kROȰhUQyt1E\KbF zt"':`CBHRh/`)9xpqf~#< U[t4gq mƣov[SqȏC阹Sa-Yj䌼uBœ3xjp۪;-XPP0Zge+8E]9>qiot>xܥf=ݦȥ>o\nA,g.g pDq0CD7}zY%>Z虧&ߕõ!aEܣpn(kXWaÍz<&Ѝof9l.Cnк8P?tC仼՞.v}xfҪ66we1KC˼=}y6 קIԃN1'cs C ssaKg;I4|A1\80xoU Pmx?Y䍃qd1@&<6QfKs Z$4(6W9?<[@m]Hsža"0Ee~z_veҾ_^e zI:E m0y+fc0IXh0q-&o߽y}p*.LRqpan.LMQ,C/:Z6d7OUqġlq2?\MČ/\\ y1ʶ̕v Rb,Rgb179m.z߀IƁ cX%OV6< #G]5Ea䎼pkDE6iVz{]jnl ̄@ 28\f̋t0jT@0 SF;*H34㱪N8&ԧj%$?v\0 yΖ}>V&BxO"g 1X\ El*=yݯK\;KٚM FUIO Bٌ .6vɒ86Q)XI2͌w7mUM21 DE6M.]s7f*+\D9S&!̜HQs9k  b@6_`ڶ .Xx,jES/"Hql0k,\*EWYtoh#Pw CƱ7!z/P(xf@`cuyYP|/e=;_)vn<yAW.Tz |xcy+* LZ&rgf-%IMOw>bCiiRLJ$A eV|)BAFU3׼ع*Vz endstream endobj 871 0 obj [ 870 0 R 872 0 R 873 0 R 874 0 R 875 0 R 876 0 R 877 0 R 878 0 R 879 0 R 880 0 R 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R 905 0 R 906 0 R 907 0 R 908 0 R 909 0 R 910 0 R 911 0 R 912 0 R 913 0 R 914 0 R 915 0 R 916 0 R 917 0 R 918 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R 928 0 R 929 0 R 930 0 R 932 0 R 934 0 R 935 0 R ] endobj 93 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 871 0 R /Contents 936 0 R >> endobj 937 0 obj 2616 endobj 938 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 706.45 269.152 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 718 0 R /H /I >> endobj 940 0 obj << /Type /Annot /Subtype /Link /Rect [ 279.536 706.45 330.246 716.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 720 0 R /H /I >> endobj 941 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 620.45 253.27899 630.35 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 673 0 R /H /I >> endobj 943 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 539.356 271.605 549.256 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 942 0 R /H /I >> endobj 944 0 obj << /Type /Annot /Subtype /Link /Rect [ 281.989 539.356 305.815 549.256 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 114 0 R /H /I >> endobj 946 0 obj << /Type /Annot /Subtype /Link /Rect [ 316.199 539.356 348.583 549.256 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 945 0 R /H /I >> endobj 947 0 obj << /Type /Annot /Subtype /Link /Rect [ 358.96698 539.356 377.909 549.256 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 948 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 522.156 257.558 532.056 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 675 0 R /H /I >> endobj 949 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.258 522.156 298.852 532.056 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 828 0 R /H /I >> endobj 950 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 441.062 268.547 450.962 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 864 0 R /H /I >> endobj 951 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 423.862 257.558 433.762 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 675 0 R /H /I >> endobj 952 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 342.768 254.489 352.668 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 112 0 R /H /I >> endobj 953 0 obj << /Type /Annot /Subtype /Link /Rect [ 264.873 342.768 292.373 352.668 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 432 0 R /H /I >> endobj 954 0 obj << /Type /Annot /Subtype /Link /Rect [ 302.75702 342.768 326.583 352.668 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 434 0 R /H /I >> endobj 955 0 obj << /Type /Annot /Subtype /Link /Rect [ 336.967 342.768 377.282 352.668 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 465 0 R /H /I >> endobj 956 0 obj << /Type /Annot /Subtype /Link /Rect [ 387.66602 342.768 406.608 352.668 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 957 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 325.568 260.594 335.468 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 828 0 R /H /I >> endobj 958 0 obj << /Type /Annot /Subtype /Link /Rect [ 268.294 325.568 300.051 335.468 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 830 0 R /H /I >> endobj 960 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.663 244.474 260.0 254.374 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 959 0 R /H /I >> endobj 961 0 obj << /Type /Annot /Subtype /Link /Rect [ 271.704 244.474 290.646 254.374 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 118 0 R /H /I >> endobj 962 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 227.274 260.594 237.174 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 828 0 R /H /I >> endobj 963 0 obj << /Type /Annot /Subtype /Link /Rect [ 268.294 227.274 300.051 237.174 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 830 0 R /H /I >> endobj 964 0 obj << /Type /Annot /Subtype /Link /Rect [ 307.751 227.274 349.298 237.174 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 864 0 R /H /I >> endobj 965 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 146.18 259.384 156.08 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 101 0 R /H /I >> endobj 966 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.0 128.98 264.873 138.88 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 767 0 R /H /I >> endobj 967 0 obj << /Length 968 0 R /Filter /FlateDecode >> stream xXnF}W( ب}(8i OMhXJRi ;HJܢ qD̙Yß(CoDFLڏxVDDU[!#dbrqWWe%s4Ϯ_SHP1(EL2!.>w }:i,.BeC}CR*䤊#>m'(ieC/;j 'ȩJ6_&/!~l@ җf8jǁ2a-h\ք<}.T4S۪*ҧ}چmd5DeXdnɰzݛ;oG|.X/T̺t/VڇO?/WdA_(W̪hB&6Y.9sԔrM+l\zv.e3ҬLqYo6z^4;2UI=B@?J2, \g i\vf9|‡H U1 &E:1&xr; pԋu{Ӌj)Gː2 :@|hyJ;eGnzǶgi!ءT˥VNgC N R~kѽy:GZvǛ_pأaxv~ٟme%y=}.@O=ůwo#d_LM "4pfqZ3LrXT <>ux7P endstream endobj 939 0 obj [ 938 0 R 940 0 R 941 0 R 943 0 R 944 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 960 0 R 961 0 R 962 0 R 963 0 R 964 0 R 965 0 R 966 0 R ] endobj 746 0 obj << /Resources 3 0 R /Type /Page /MediaBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 1 0 R /Annots 939 0 R /Contents 967 0 R >> endobj 968 0 obj 1251 endobj 971 0 obj << /Title (PhotoML: Photo Description Markup Language) /Parent 970 0 R /Next 973 0 R /A 969 0 R >> endobj 973 0 obj << /Title (Purpose) /Parent 970 0 R /Prev 971 0 R /Next 979 0 R /First 975 0 R /Last 977 0 R /Count -2 /A 972 0 R >> endobj 975 0 obj << /Title (Alternative Formats) /Parent 973 0 R /Next 977 0 R /A 974 0 R >> endobj 977 0 obj << /Title (Further Development) /Parent 973 0 R /Prev 975 0 R /A 976 0 R >> endobj 979 0 obj << /Title (The Distribution) /Parent 970 0 R /Prev 973 0 R /Next 1003 0 R /First 981 0 R /Last 989 0 R /Count -11 /A 978 0 R >> endobj 981 0 obj << /Title (License) /Parent 979 0 R /Next 983 0 R /A 980 0 R >> endobj 983 0 obj << /Title (Platforms) /Parent 979 0 R /Prev 981 0 R /Next 985 0 R /A 982 0 R >> endobj 985 0 obj << /Title (Prerequisites) /Parent 979 0 R /Prev 983 0 R /Next 987 0 R /A 984 0 R >> endobj 987 0 obj << /Title (Installation) /Parent 979 0 R /Prev 985 0 R /Next 989 0 R /A 986 0 R >> endobj 989 0 obj << /Title (Distribution Content) /Parent 979 0 R /Prev 987 0 R /First 991 0 R /Last 1001 0 R /Count -6 /A 988 0 R >> endobj 991 0 obj << /Title (DTD) /Parent 989 0 R /Next 993 0 R /A 990 0 R >> endobj 993 0 obj << /Title (XSL) /Parent 989 0 R /Prev 991 0 R /Next 995 0 R /A 992 0 R >> endobj 995 0 obj << /Title (XML) /Parent 989 0 R /Prev 993 0 R /Next 997 0 R /A 994 0 R >> endobj 997 0 obj << /Title (Tools) /Parent 989 0 R /Prev 995 0 R /Next 999 0 R /A 996 0 R >> endobj 999 0 obj << /Title (Documentation) /Parent 989 0 R /Prev 997 0 R /Next 1001 0 R /A 998 0 R >> endobj 1001 0 obj << /Title (XSD) /Parent 989 0 R /Prev 999 0 R /A 1000 0 R >> endobj 1003 0 obj << /Title (Using PhotoML) /Parent 970 0 R /Prev 979 0 R /Next 1031 0 R /First 1005 0 R /Last 1029 0 R /Count -13 /A 1002 0 R >> endobj 1005 0 obj << /Title (The PhotoML DTD) /Parent 1003 0 R /Next 1021 0 R /First 1007 0 R /Last 1019 0 R /Count -7 /A 1004 0 R >> endobj 1007 0 obj << /Title (Collections) /Parent 1005 0 R /Next 1009 0 R /A 1006 0 R >> endobj 1009 0 obj << /Title (The frame id and fn attributes) /Parent 1005 0 R /Prev 1007 0 R /Next 1011 0 R /A 1008 0 R >> endobj 1011 0 obj << /Title (The xml:lang attribute) /Parent 1005 0 R /Prev 1009 0 R /Next 1013 0 R /A 1010 0 R >> endobj 1013 0 obj << /Title (The date element) /Parent 1005 0 R /Prev 1011 0 R /Next 1015 0 R /A 1012 0 R >> endobj 1015 0 obj << /Title (The time element) /Parent 1005 0 R /Prev 1013 0 R /Next 1017 0 R /A 1014 0 R >> endobj 1017 0 obj << /Title (The digimage element) /Parent 1005 0 R /Prev 1015 0 R /Next 1019 0 R /A 1016 0 R >> endobj 1019 0 obj << /Title (The defaults element) /Parent 1005 0 R /Prev 1017 0 R /A 1018 0 R >> endobj 1021 0 obj << /Title (Recommended Frame Numbering System) /Parent 1003 0 R /Prev 1005 0 R /Next 1029 0 R /First 1023 0 R /Last 1027 0 R /Count -3 /A 1020 0 R >> endobj 1023 0 obj << /Title (Roll Film) /Parent 1021 0 R /Next 1025 0 R /A 1022 0 R >> endobj 1025 0 obj << /Title (Digital Camera Images) /Parent 1021 0 R /Prev 1023 0 R /Next 1027 0 R /A 1024 0 R >> endobj 1027 0 obj << /Title (Sheet Film) /Parent 1021 0 R /Prev 1025 0 R /A 1026 0 R >> endobj 1029 0 obj << /Title (Image Identifiers) /Parent 1003 0 R /Prev 1021 0 R /A 1028 0 R >> endobj 1031 0 obj << /Title (Acknowledgments) /Parent 970 0 R /Prev 1003 0 R /Next 1032 0 R /A 1030 0 R >> endobj 1032 0 obj << /Title /Parent 970 0 R /Prev 1031 0 R /Next 1035 0 R /First 1034 0 R /Last 1034 0 R /Count -1 /A 72 0 R >> endobj 1034 0 obj << /Title (Emacs/XEmacs) /Parent 1032 0 R /A 1033 0 R >> endobj 1035 0 obj << /Title /Parent 970 0 R /Prev 1032 0 R /First 1037 0 R /Last 1077 0 R /Count -157 /A 76 0 R >> endobj 1037 0 obj << /Title (Parameter Entities) /Parent 1035 0 R /Next 1077 0 R /First 1039 0 R /Last 1075 0 R /Count -19 /A 1036 0 R >> endobj 1039 0 obj << /Title (xml-lang-attribute) /Parent 1037 0 R /Next 1041 0 R /A 1038 0 R >> endobj 1041 0 obj << /Title (Text) /Parent 1037 0 R /Prev 1039 0 R /Next 1043 0 R /A 1040 0 R >> endobj 1043 0 obj << /Title (Integer) /Parent 1037 0 R /Prev 1041 0 R /Next 1045 0 R /A 1042 0 R >> endobj 1045 0 obj << /Title (PositiveInteger) /Parent 1037 0 R /Prev 1043 0 R /Next 1047 0 R /A 1044 0 R >> endobj 1047 0 obj << /Title (Real) /Parent 1037 0 R /Prev 1045 0 R /Next 1049 0 R /A 1046 0 R >> endobj 1049 0 obj << /Title (Rational) /Parent 1037 0 R /Prev 1047 0 R /Next 1051 0 R /A 1048 0 R >> endobj 1051 0 obj << /Title (Fraction) /Parent 1037 0 R /Prev 1049 0 R /Next 1053 0 R /A 1050 0 R >> endobj 1053 0 obj << /Title (HexString) /Parent 1037 0 R /Prev 1051 0 R /Next 1055 0 R /A 1052 0 R >> endobj 1055 0 obj << /Title (YearMonth) /Parent 1037 0 R /Prev 1053 0 R /Next 1057 0 R /A 1054 0 R >> endobj 1057 0 obj << /Title (Date) /Parent 1037 0 R /Prev 1055 0 R /Next 1059 0 R /A 1056 0 R >> endobj 1059 0 obj << /Title (Time) /Parent 1037 0 R /Prev 1057 0 R /Next 1061 0 R /A 1058 0 R >> endobj 1061 0 obj << /Title (DateTime) /Parent 1037 0 R /Prev 1059 0 R /Next 1063 0 R /A 1060 0 R >> endobj 1063 0 obj << /Title (TimeInterval) /Parent 1037 0 R /Prev 1061 0 R /Next 1065 0 R /A 1062 0 R >> endobj 1065 0 obj << /Title (EmailAddress) /Parent 1037 0 R /Prev 1063 0 R /Next 1067 0 R /A 1064 0 R >> endobj 1067 0 obj << /Title (PhoneNumber) /Parent 1037 0 R /Prev 1065 0 R /Next 1069 0 R /A 1066 0 R >> endobj 1069 0 obj << /Title (CompassDirection) /Parent 1037 0 R /Prev 1067 0 R /Next 1071 0 R /A 1068 0 R >> endobj 1071 0 obj << /Title (ElevationAngle) /Parent 1037 0 R /Prev 1069 0 R /Next 1073 0 R /A 1070 0 R >> endobj 1073 0 obj << /Title (Latitude) /Parent 1037 0 R /Prev 1071 0 R /Next 1075 0 R /A 1072 0 R >> endobj 1075 0 obj << /Title (Longitude) /Parent 1037 0 R /Prev 1073 0 R /A 1074 0 R >> endobj 1077 0 obj << /Title (Elements) /Parent 1035 0 R /Prev 1037 0 R /First 1079 0 R /Last 1349 0 R /Count -136 /A 1076 0 R >> endobj 1079 0 obj << /Title (photo) /Parent 1077 0 R /Next 1081 0 R /A 1078 0 R >> endobj 1081 0 obj << /Title (defaults) /Parent 1077 0 R /Prev 1079 0 R /Next 1083 0 R /A 1080 0 R >> endobj 1083 0 obj << /Title (roll) /Parent 1077 0 R /Prev 1081 0 R /Next 1085 0 R /A 1082 0 R >> endobj 1085 0 obj << /Title (sheet) /Parent 1077 0 R /Prev 1083 0 R /Next 1087 0 R /A 1084 0 R >> endobj 1087 0 obj << /Title (digital) /Parent 1077 0 R /Prev 1085 0 R /Next 1089 0 R /A 1086 0 R >> endobj 1089 0 obj << /Title (collection) /Parent 1077 0 R /Prev 1087 0 R /Next 1091 0 R /A 1088 0 R >> endobj 1091 0 obj << /Title (description) /Parent 1077 0 R /Prev 1089 0 R /Next 1093 0 R /A 1090 0 R >> endobj 1093 0 obj << /Title (note) /Parent 1077 0 R /Prev 1091 0 R /Next 1095 0 R /A 1092 0 R >> endobj 1095 0 obj << /Title (film) /Parent 1077 0 R /Prev 1093 0 R /Next 1097 0 R /A 1094 0 R >> endobj 1097 0 obj << /Title (make) /Parent 1077 0 R /Prev 1095 0 R /Next 1099 0 R /A 1096 0 R >> endobj 1099 0 obj << /Title (name) /Parent 1077 0 R /Prev 1097 0 R /Next 1101 0 R /A 1098 0 R >> endobj 1101 0 obj << /Title (speed) /Parent 1077 0 R /Prev 1099 0 R /Next 1103 0 R /A 1100 0 R >> endobj 1103 0 obj << /Title (process) /Parent 1077 0 R /Prev 1101 0 R /Next 1105 0 R /A 1102 0 R >> endobj 1105 0 obj << /Title (type) /Parent 1077 0 R /Prev 1103 0 R /Next 1107 0 R /A 1104 0 R >> endobj 1107 0 obj << /Title (format) /Parent 1077 0 R /Prev 1105 0 R /Next 1109 0 R /A 1106 0 R >> endobj 1109 0 obj << /Title (expiry) /Parent 1077 0 R /Prev 1107 0 R /Next 1111 0 R /A 1108 0 R >> endobj 1111 0 obj << /Title (processing) /Parent 1077 0 R /Prev 1109 0 R /Next 1113 0 R /A 1110 0 R >> endobj 1113 0 obj << /Title (tag) /Parent 1077 0 R /Prev 1111 0 R /Next 1115 0 R /A 1112 0 R >> endobj 1115 0 obj << /Title (date) /Parent 1077 0 R /Prev 1113 0 R /Next 1117 0 R /A 1114 0 R >> endobj 1117 0 obj << /Title (time) /Parent 1077 0 R /Prev 1115 0 R /Next 1119 0 R /A 1116 0 R >> endobj 1119 0 obj << /Title (lab) /Parent 1077 0 R /Prev 1117 0 R /Next 1121 0 R /A 1118 0 R >> endobj 1121 0 obj << /Title (address) /Parent 1077 0 R /Prev 1119 0 R /Next 1123 0 R /A 1120 0 R >> endobj 1123 0 obj << /Title (phone) /Parent 1077 0 R /Prev 1121 0 R /Next 1125 0 R /A 1122 0 R >> endobj 1125 0 obj << /Title (fax) /Parent 1077 0 R /Prev 1123 0 R /Next 1127 0 R /A 1124 0 R >> endobj 1127 0 obj << /Title (email) /Parent 1077 0 R /Prev 1125 0 R /Next 1129 0 R /A 1126 0 R >> endobj 1129 0 obj << /Title (developing) /Parent 1077 0 R /Prev 1127 0 R /Next 1131 0 R /A 1128 0 R >> endobj 1131 0 obj << /Title (shift) /Parent 1077 0 R /Prev 1129 0 R /Next 1133 0 R /A 1130 0 R >> endobj 1133 0 obj << /Title (method) /Parent 1077 0 R /Prev 1131 0 R /Next 1135 0 R /A 1132 0 R >> endobj 1135 0 obj << /Title (agitation) /Parent 1077 0 R /Prev 1133 0 R /Next 1137 0 R /A 1134 0 R >> endobj 1137 0 obj << /Title (temperature) /Parent 1077 0 R /Prev 1135 0 R /Next 1139 0 R /A 1136 0 R >> endobj 1139 0 obj << /Title (duration) /Parent 1077 0 R /Prev 1137 0 R /Next 1141 0 R /A 1138 0 R >> endobj 1141 0 obj << /Title (developer) /Parent 1077 0 R /Prev 1139 0 R /Next 1143 0 R /A 1140 0 R >> endobj 1143 0 obj << /Title (dilution) /Parent 1077 0 R /Prev 1141 0 R /Next 1145 0 R /A 1142 0 R >> endobj 1145 0 obj << /Title (load) /Parent 1077 0 R /Prev 1143 0 R /Next 1147 0 R /A 1144 0 R >> endobj 1147 0 obj << /Title (unload) /Parent 1077 0 R /Prev 1145 0 R /Next 1149 0 R /A 1146 0 R >> endobj 1149 0 obj << /Title (frame-set) /Parent 1077 0 R /Prev 1147 0 R /Next 1151 0 R /A 1148 0 R >> endobj 1151 0 obj << /Title (frame) /Parent 1077 0 R /Prev 1149 0 R /Next 1153 0 R /A 1150 0 R >> endobj 1153 0 obj << /Title (size) /Parent 1077 0 R /Prev 1151 0 R /Next 1155 0 R /A 1152 0 R >> endobj 1155 0 obj << /Title (condition) /Parent 1077 0 R /Prev 1153 0 R /Next 1157 0 R /A 1154 0 R >> endobj 1157 0 obj << /Title (index-image) /Parent 1077 0 R /Prev 1155 0 R /Next 1159 0 R /A 1156 0 R >> endobj 1159 0 obj << /Title (photographer) /Parent 1077 0 R /Prev 1157 0 R /Next 1161 0 R /A 1158 0 R >> endobj 1161 0 obj << /Title (ipr) /Parent 1077 0 R /Prev 1159 0 R /Next 1163 0 R /A 1160 0 R >> endobj 1163 0 obj << /Title (copyright) /Parent 1077 0 R /Prev 1161 0 R /Next 1165 0 R /A 1162 0 R >> endobj 1165 0 obj << /Title (owner) /Parent 1077 0 R /Prev 1163 0 R /Next 1167 0 R /A 1164 0 R >> endobj 1167 0 obj << /Title (scene) /Parent 1077 0 R /Prev 1165 0 R /Next 1169 0 R /A 1166 0 R >> endobj 1169 0 obj << /Title (caption) /Parent 1077 0 R /Prev 1167 0 R /Next 1171 0 R /A 1168 0 R >> endobj 1171 0 obj << /Title (genre) /Parent 1077 0 R /Prev 1169 0 R /Next 1173 0 R /A 1170 0 R >> endobj 1173 0 obj << /Title (keywords) /Parent 1077 0 R /Prev 1171 0 R /Next 1175 0 R /A 1172 0 R >> endobj 1175 0 obj << /Title (occasion) /Parent 1077 0 R /Prev 1173 0 R /Next 1177 0 R /A 1174 0 R >> endobj 1177 0 obj << /Title (event) /Parent 1077 0 R /Prev 1175 0 R /Next 1179 0 R /A 1176 0 R >> endobj 1179 0 obj << /Title (location) /Parent 1077 0 R /Prev 1177 0 R /Next 1181 0 R /A 1178 0 R >> endobj 1181 0 obj << /Title (ocean) /Parent 1077 0 R /Prev 1179 0 R /Next 1183 0 R /A 1180 0 R >> endobj 1183 0 obj << /Title (sea) /Parent 1077 0 R /Prev 1181 0 R /Next 1185 0 R /A 1182 0 R >> endobj 1185 0 obj << /Title (island) /Parent 1077 0 R /Prev 1183 0 R /Next 1187 0 R /A 1184 0 R >> endobj 1187 0 obj << /Title (continent) /Parent 1077 0 R /Prev 1185 0 R /Next 1189 0 R /A 1186 0 R >> endobj 1189 0 obj << /Title (country) /Parent 1077 0 R /Prev 1187 0 R /Next 1191 0 R /A 1188 0 R >> endobj 1191 0 obj << /Title (region) /Parent 1077 0 R /Prev 1189 0 R /Next 1193 0 R /A 1190 0 R >> endobj 1193 0 obj << /Title (subregion) /Parent 1077 0 R /Prev 1191 0 R /Next 1195 0 R /A 1192 0 R >> endobj 1195 0 obj << /Title (district) /Parent 1077 0 R /Prev 1193 0 R /Next 1197 0 R /A 1194 0 R >> endobj 1197 0 obj << /Title (city) /Parent 1077 0 R /Prev 1195 0 R /Next 1199 0 R /A 1196 0 R >> endobj 1199 0 obj << /Title (subcity) /Parent 1077 0 R /Prev 1197 0 R /Next 1201 0 R /A 1198 0 R >> endobj 1201 0 obj << /Title (subsubcity) /Parent 1077 0 R /Prev 1199 0 R /Next 1203 0 R /A 1200 0 R >> endobj 1203 0 obj << /Title (area) /Parent 1077 0 R /Prev 1201 0 R /Next 1205 0 R /A 1202 0 R >> endobj 1205 0 obj << /Title (subarea) /Parent 1077 0 R /Prev 1203 0 R /Next 1207 0 R /A 1204 0 R >> endobj 1207 0 obj << /Title (road) /Parent 1077 0 R /Prev 1205 0 R /Next 1209 0 R /A 1206 0 R >> endobj 1209 0 obj << /Title (place) /Parent 1077 0 R /Prev 1207 0 R /Next 1211 0 R /A 1208 0 R >> endobj 1211 0 obj << /Title (point) /Parent 1077 0 R /Prev 1209 0 R /Next 1213 0 R /A 1210 0 R >> endobj 1213 0 obj << /Title (coordinates) /Parent 1077 0 R /Prev 1211 0 R /Next 1215 0 R /A 1212 0 R >> endobj 1215 0 obj << /Title (latitude) /Parent 1077 0 R /Prev 1213 0 R /Next 1217 0 R /A 1214 0 R >> endobj 1217 0 obj << /Title (longitude) /Parent 1077 0 R /Prev 1215 0 R /Next 1219 0 R /A 1216 0 R >> endobj 1219 0 obj << /Title (altitude) /Parent 1077 0 R /Prev 1217 0 R /Next 1221 0 R /A 1218 0 R >> endobj 1221 0 obj << /Title (measurement) /Parent 1077 0 R /Prev 1219 0 R /Next 1223 0 R /A 1220 0 R >> endobj 1223 0 obj << /Title (hdop) /Parent 1077 0 R /Prev 1221 0 R /Next 1225 0 R /A 1222 0 R >> endobj 1225 0 obj << /Title (vdop) /Parent 1077 0 R /Prev 1223 0 R /Next 1227 0 R /A 1224 0 R >> endobj 1227 0 obj << /Title (pdop) /Parent 1077 0 R /Prev 1225 0 R /Next 1229 0 R /A 1226 0 R >> endobj 1229 0 obj << /Title (estimation) /Parent 1077 0 R /Prev 1227 0 R /Next 1231 0 R /A 1228 0 R >> endobj 1231 0 obj << /Title (source-frame) /Parent 1077 0 R /Prev 1229 0 R /Next 1233 0 R /A 1230 0 R >> endobj 1233 0 obj << /Title (source-ref) /Parent 1077 0 R /Prev 1231 0 R /Next 1235 0 R /A 1232 0 R >> endobj 1235 0 obj << /Title (direction) /Parent 1077 0 R /Prev 1233 0 R /Next 1237 0 R /A 1234 0 R >> endobj 1237 0 obj << /Title (azimuth) /Parent 1077 0 R /Prev 1235 0 R /Next 1239 0 R /A 1236 0 R >> endobj 1239 0 obj << /Title (elevation) /Parent 1077 0 R /Prev 1237 0 R /Next 1241 0 R /A 1238 0 R >> endobj 1241 0 obj << /Title (content) /Parent 1077 0 R /Prev 1239 0 R /Next 1243 0 R /A 1240 0 R >> endobj 1243 0 obj << /Title (person) /Parent 1077 0 R /Prev 1241 0 R /Next 1245 0 R /A 1242 0 R >> endobj 1245 0 obj << /Title (object) /Parent 1077 0 R /Prev 1243 0 R /Next 1247 0 R /A 1244 0 R >> endobj 1247 0 obj << /Title (segment) /Parent 1077 0 R /Prev 1245 0 R /Next 1249 0 R /A 1246 0 R >> endobj 1249 0 obj << /Title (equipment) /Parent 1077 0 R /Prev 1247 0 R /Next 1251 0 R /A 1248 0 R >> endobj 1251 0 obj << /Title (body) /Parent 1077 0 R /Prev 1249 0 R /Next 1253 0 R /A 1250 0 R >> endobj 1253 0 obj << /Title (body-attachment) /Parent 1077 0 R /Prev 1251 0 R /Next 1255 0 R /A 1252 0 R >> endobj 1255 0 obj << /Title (lens) /Parent 1077 0 R /Prev 1253 0 R /Next 1257 0 R /A 1254 0 R >> endobj 1257 0 obj << /Title (lens-attachment) /Parent 1077 0 R /Prev 1255 0 R /Next 1259 0 R /A 1256 0 R >> endobj 1259 0 obj << /Title (illumination) /Parent 1077 0 R /Prev 1257 0 R /Next 1261 0 R /A 1258 0 R >> endobj 1261 0 obj << /Title (support) /Parent 1077 0 R /Prev 1259 0 R /Next 1263 0 R /A 1260 0 R >> endobj 1263 0 obj << /Title (device) /Parent 1077 0 R /Prev 1261 0 R /Next 1265 0 R /A 1262 0 R >> endobj 1265 0 obj << /Title (model) /Parent 1077 0 R /Prev 1263 0 R /Next 1267 0 R /A 1264 0 R >> endobj 1267 0 obj << /Title (serial) /Parent 1077 0 R /Prev 1265 0 R /Next 1269 0 R /A 1266 0 R >> endobj 1269 0 obj << /Title (firmware) /Parent 1077 0 R /Prev 1267 0 R /Next 1271 0 R /A 1268 0 R >> endobj 1271 0 obj << /Title (exposure) /Parent 1077 0 R /Prev 1269 0 R /Next 1273 0 R /A 1270 0 R >> endobj 1273 0 obj << /Title (aperture) /Parent 1077 0 R /Prev 1271 0 R /Next 1275 0 R /A 1272 0 R >> endobj 1275 0 obj << /Title (shutter) /Parent 1077 0 R /Prev 1273 0 R /Next 1277 0 R /A 1274 0 R >> endobj 1277 0 obj << /Title (exp-comp) /Parent 1077 0 R /Prev 1275 0 R /Next 1279 0 R /A 1276 0 R >> endobj 1279 0 obj << /Title (flash) /Parent 1077 0 R /Prev 1277 0 R /Next 1281 0 R /A 1278 0 R >> endobj 1281 0 obj << /Title (flash-comp) /Parent 1077 0 R /Prev 1279 0 R /Next 1283 0 R /A 1280 0 R >> endobj 1283 0 obj << /Title (rated-speed) /Parent 1077 0 R /Prev 1281 0 R /Next 1285 0 R /A 1282 0 R >> endobj 1285 0 obj << /Title (mode) /Parent 1077 0 R /Prev 1283 0 R /Next 1287 0 R /A 1284 0 R >> endobj 1287 0 obj << /Title (metering) /Parent 1077 0 R /Prev 1285 0 R /Next 1289 0 R /A 1286 0 R >> endobj 1289 0 obj << /Title (focus) /Parent 1077 0 R /Prev 1287 0 R /Next 1291 0 R /A 1288 0 R >> endobj 1291 0 obj << /Title (focal-length) /Parent 1077 0 R /Prev 1289 0 R /Next 1293 0 R /A 1290 0 R >> endobj 1293 0 obj << /Title (focal-distance) /Parent 1077 0 R /Prev 1291 0 R /Next 1295 0 R /A 1292 0 R >> endobj 1295 0 obj << /Title (evaluation) /Parent 1077 0 R /Prev 1293 0 R /Next 1297 0 R /A 1294 0 R >> endobj 1297 0 obj << /Title (artistic) /Parent 1077 0 R /Prev 1295 0 R /Next 1299 0 R /A 1296 0 R >> endobj 1299 0 obj << /Title (technical) /Parent 1077 0 R /Prev 1297 0 R /Next 1301 0 R /A 1298 0 R >> endobj 1301 0 obj << /Title (digimage) /Parent 1077 0 R /Prev 1299 0 R /Next 1303 0 R /A 1300 0 R >> endobj 1303 0 obj << /Title (digimage-set) /Parent 1077 0 R /Prev 1301 0 R /Next 1305 0 R /A 1302 0 R >> endobj 1305 0 obj << /Title (properties) /Parent 1077 0 R /Prev 1303 0 R /Next 1307 0 R /A 1304 0 R >> endobj 1307 0 obj << /Title (width) /Parent 1077 0 R /Prev 1305 0 R /Next 1309 0 R /A 1306 0 R >> endobj 1309 0 obj << /Title (height) /Parent 1077 0 R /Prev 1307 0 R /Next 1311 0 R /A 1308 0 R >> endobj 1311 0 obj << /Title (bit-depth) /Parent 1077 0 R /Prev 1309 0 R /Next 1313 0 R /A 1310 0 R >> endobj 1313 0 obj << /Title (file-format) /Parent 1077 0 R /Prev 1311 0 R /Next 1315 0 R /A 1312 0 R >> endobj 1315 0 obj << /Title (icc-profile) /Parent 1077 0 R /Prev 1313 0 R /Next 1317 0 R /A 1314 0 R >> endobj 1317 0 obj << /Title (file-hash) /Parent 1077 0 R /Prev 1315 0 R /Next 1319 0 R /A 1316 0 R >> endobj 1319 0 obj << /Title (image-hash) /Parent 1077 0 R /Prev 1317 0 R /Next 1321 0 R /A 1318 0 R >> endobj 1321 0 obj << /Title (history) /Parent 1077 0 R /Prev 1319 0 R /Next 1323 0 R /A 1320 0 R >> endobj 1323 0 obj << /Title (origin) /Parent 1077 0 R /Prev 1321 0 R /Next 1325 0 R /A 1322 0 R >> endobj 1325 0 obj << /Title (editing) /Parent 1077 0 R /Prev 1323 0 R /Next 1327 0 R /A 1324 0 R >> endobj 1327 0 obj << /Title (scanner) /Parent 1077 0 R /Prev 1325 0 R /Next 1329 0 R /A 1326 0 R >> endobj 1329 0 obj << /Title (camera) /Parent 1077 0 R /Prev 1327 0 R /Next 1331 0 R /A 1328 0 R >> endobj 1331 0 obj << /Title (source-image) /Parent 1077 0 R /Prev 1329 0 R /Next 1333 0 R /A 1330 0 R >> endobj 1333 0 obj << /Title (software) /Parent 1077 0 R /Prev 1331 0 R /Next 1335 0 R /A 1332 0 R >> endobj 1335 0 obj << /Title (operations) /Parent 1077 0 R /Prev 1333 0 R /Next 1337 0 R /A 1334 0 R >> endobj 1337 0 obj << /Title (hardware) /Parent 1077 0 R /Prev 1335 0 R /Next 1339 0 R /A 1336 0 R >> endobj 1339 0 obj << /Title (settings) /Parent 1077 0 R /Prev 1337 0 R /Next 1341 0 R /A 1338 0 R >> endobj 1341 0 obj << /Title (publisher) /Parent 1077 0 R /Prev 1339 0 R /Next 1343 0 R /A 1340 0 R >> endobj 1343 0 obj << /Title (version) /Parent 1077 0 R /Prev 1341 0 R /Next 1345 0 R /A 1342 0 R >> endobj 1345 0 obj << /Title (operation) /Parent 1077 0 R /Prev 1343 0 R /Next 1347 0 R /A 1344 0 R >> endobj 1347 0 obj << /Title (command) /Parent 1077 0 R /Prev 1345 0 R /Next 1349 0 R /A 1346 0 R >> endobj 1349 0 obj << /Title (setting) /Parent 1077 0 R /Prev 1347 0 R /A 1348 0 R >> endobj 1350 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier-Bold /Encoding /WinAnsiEncoding >> endobj 1351 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 1352 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier-Oblique /Encoding /WinAnsiEncoding >> endobj 1353 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Roman /Encoding /WinAnsiEncoding >> endobj 1354 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding >> endobj 1355 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj 1356 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier /Encoding /WinAnsiEncoding >> endobj 1357 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Italic /Encoding /WinAnsiEncoding >> endobj 1358 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Bold /Encoding /WinAnsiEncoding >> endobj 1 0 obj << /Type /Pages /Count 38 /Kids [8 0 R 18 0 R 35 0 R 43 0 R 44 0 R 45 0 R 48 0 R 51 0 R 54 0 R 85 0 R 88 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 144 0 R 157 0 R 171 0 R 172 0 R 200 0 R 312 0 R 362 0 R 393 0 R 475 0 R 476 0 R 521 0 R 600 0 R 601 0 R 746 0 R 853 0 R ] >> endobj 2 0 obj << /Type /Catalog /Pages 1 0 R /Metadata 7 0 R /Lang (en) /PageLabels 9 0 R /Outlines 970 0 R /PageMode /UseOutlines >> endobj 3 0 obj << /Font << /F1 1351 0 R /F11 1350 0 R /F10 1352 0 R /F5 1353 0 R /F4 1354 0 R /F3 1355 0 R /F9 1356 0 R /F6 1357 0 R /F7 1358 0 R >> /ProcSet [ /PDF /ImageB /ImageC /Text ] /ColorSpace << /DefaultRGB 6 0 R >> >> endobj 9 0 obj << /Nums [0 << /P (1) >> 1 << /P (2) >> 2 << /P (3) >> 3 << /P (4) >> 4 << /P (5) >> 5 << /P (6) >> 6 << /P (7) >> 7 << /P (8) >> 8 << /P (9) >> 9 << /P (10) >> 10 << /P (11) >> 11 << /P (12) >> 12 << /P (13) >> 13 << /P (14) >> 14 << /P (15) >> 15 << /P (16) >> 16 << /P (17) >> 17 << /P (18) >> 18 << /P (19) >> 19 << /P (20) >> 20 << /P (21) >> 21 << /P (22) >> 22 << /P (23) >> 23 << /P (24) >> 24 << /P (25) >> 25 << /P (26) >> 26 << /P (27) >> 27 << /P (28) >> 28 << /P (29) >> 29 << /P (30) >> 30 << /P (31) >> 31 << /P (32) >> 32 << /P (33) >> 33 << /P (34) >> 34 << /P (35) >> 35 << /P (36) >> 36 << /P (37) >> 37 << /P (38) >> ] >> endobj 72 0 obj << /Type /Action /S /GoTo /D [54 0 R /XYZ 72.0 592.602 null] >> endobj 76 0 obj << /Type /Action /S /GoTo /D [54 0 R /XYZ 72.0 196.16998 null] >> endobj 101 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 72.0 360.42 null] >> endobj 106 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 72.0 117.54303 null] >> endobj 109 0 obj << /Type /Action /S /GoTo /D [88 0 R /XYZ 72.0 143.85797 null] >> endobj 116 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 133.59799 163.75 null] >> endobj 122 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 151.229 263.814 null] >> endobj 173 0 obj << /Type /Action /S /GoTo /D [171 0 R /XYZ 132.727 521.562 null] >> endobj 188 0 obj << /Type /Action /S /GoTo /D [157 0 R /XYZ 166.181 131.30603 null] >> endobj 176 0 obj << /Type /Action /S /GoTo /D [171 0 R /XYZ 147.68 420.664 null] >> endobj 178 0 obj << /Type /Action /S /GoTo /D [171 0 R /XYZ 132.727 319.766 null] >> endobj 180 0 obj << /Type /Action /S /GoTo /D [171 0 R /XYZ 179.39099 171.268 null] >> endobj 206 0 obj << /Type /Action /S /GoTo /D [200 0 R /XYZ 136.244 340.262 null] >> endobj 213 0 obj << /Type /Action /S /GoTo /D [200 0 R /XYZ 143.29199 464.824 null] >> endobj 208 0 obj << /Type /Action /S /GoTo /D [200 0 R /XYZ 145.067 228.9 null] >> endobj 244 0 obj << /Type /Action /S /GoTo /D [200 0 R /XYZ 133.599 117.538025 null] >> endobj 238 0 obj << /Type /Action /S /GoTo /D [128 0 R /XYZ 132.728 449.22 null] >> endobj 250 0 obj << /Type /Action /S /GoTo /D [128 0 R /XYZ 121.309 561.422 null] >> endobj 240 0 obj << /Type /Action /S /GoTo /D [128 0 R /XYZ 119.534 333.018 null] >> endobj 242 0 obj << /Type /Action /S /GoTo /D [128 0 R /XYZ 149.47101 234.01599 null] >> endobj 233 0 obj << /Type /Action /S /GoTo /D [128 0 R /XYZ 145.068 117.814026 null] >> endobj 263 0 obj << /Type /Action /S /GoTo /D [129 0 R /XYZ 117.776 676.992 null] >> endobj 133 0 obj << /Type /Action /S /GoTo /D [129 0 R /XYZ 137.131 558.894 null] >> endobj 273 0 obj << /Type /Action /S /GoTo /D [130 0 R /XYZ 122.179 722.822 null] >> endobj 275 0 obj << /Type /Action /S /GoTo /D [130 0 R /XYZ 147.68 597.407 null] >> endobj 277 0 obj << /Type /Action /S /GoTo /D [130 0 R /XYZ 134.486 471.992 null] >> endobj 279 0 obj << /Type /Action /S /GoTo /D [130 0 R /XYZ 124.808 359.777 null] >> endobj 281 0 obj << /Type /Action /S /GoTo /D [130 0 R /XYZ 152.97101 177.56201 null] >> endobj 283 0 obj << /Type /Action /S /GoTo /D [144 0 R /XYZ 129.20999 695.21 null] >> endobj 285 0 obj << /Type /Action /S /GoTo /D [144 0 R /XYZ 103.694 549.766 null] >> endobj 287 0 obj << /Type /Action /S /GoTo /D [144 0 R /XYZ 131.857 434.722 null] >> endobj 289 0 obj << /Type /Action /S /GoTo /D [144 0 R /XYZ 160.01999 289.278 null] >> endobj 291 0 obj << /Type /Action /S /GoTo /D [144 0 R /XYZ 108.985 143.83398 null] >> endobj 293 0 obj << /Type /Action /S /GoTo /D [157 0 R /XYZ 137.14801 642.954 null] >> endobj 295 0 obj << /Type /Action /S /GoTo /D [157 0 R /XYZ 110.727005 495.542 null] >> endobj 297 0 obj << /Type /Action /S /GoTo /D [157 0 R /XYZ 116.905 378.53 null] >> endobj 299 0 obj << /Type /Action /S /GoTo /D [157 0 R /XYZ 115.114 248.318 null] >> endobj 269 0 obj << /Type /Action /S /GoTo /D [129 0 R /XYZ 122.18 299.596 null] >> endobj 271 0 obj << /Type /Action /S /GoTo /D [129 0 R /XYZ 102.824 181.49799 null] >> endobj 224 0 obj << /Type /Action /S /GoTo /D [96 0 R /XYZ 137.14801 677.27 null] >> endobj 321 0 obj << /Type /Action /S /GoTo /D [128 0 R /XYZ 123.05 677.624 null] >> endobj 226 0 obj << /Type /Action /S /GoTo /D [96 0 R /XYZ 123.922 577.206 null] >> endobj 228 0 obj << /Type /Action /S /GoTo /D [96 0 R /XYZ 99.291 477.142 null] >> endobj 230 0 obj << /Type /Action /S /GoTo /D [96 0 R /XYZ 116.904 377.078 null] >> endobj 98 0 obj << /Type /Action /S /GoTo /D [96 0 R /XYZ 160.01999 277.014 null] >> endobj 349 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 133.599 694.47 null] >> endobj 351 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 142.405 594.406 null] >> endobj 353 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 167.938 494.34198 null] >> endobj 355 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 139.76001 377.078 null] >> endobj 346 0 obj << /Type /Action /S /GoTo /D [96 0 R /XYZ 109.839005 163.75 null] >> endobj 371 0 obj << /Type /Action /S /GoTo /D [172 0 R /XYZ 115.115005 607.762 null] >> endobj 373 0 obj << /Type /Action /S /GoTo /D [172 0 R /XYZ 114.244 505.364 null] >> endobj 375 0 obj << /Type /Action /S /GoTo /D [172 0 R /XYZ 115.115005 402.966 null] >> endobj 182 0 obj << /Type /Action /S /GoTo /D [172 0 R /XYZ 155.61499 300.568 null] >> endobj 387 0 obj << /Type /Action /S /GoTo /D [200 0 R /XYZ 153.857 606.586 null] >> endobj 385 0 obj << /Type /Action /S /GoTo /D [172 0 R /XYZ 176.745 132.16998 null] >> endobj 323 0 obj << /Type /Action /S /GoTo /D [312 0 R /XYZ 129.212 676.678 null] >> endobj 325 0 obj << /Type /Action /S /GoTo /D [312 0 R /XYZ 123.05 557.638 null] >> endobj 397 0 obj << /Type /Action /S /GoTo /D [312 0 R /XYZ 141.535 408.198 null] >> endobj 417 0 obj << /Type /Action /S /GoTo /D [312 0 R /XYZ 114.244 160.91803 null] >> endobj 441 0 obj << /Type /Action /S /GoTo /D [312 0 R /XYZ 156.487 275.958 null] >> endobj 419 0 obj << /Type /Action /S /GoTo /D [362 0 R /XYZ 204.005 695.202 null] >> endobj 421 0 obj << /Type /Action /S /GoTo /D [362 0 R /XYZ 108.098 597.334 null] >> endobj 423 0 obj << /Type /Action /S /GoTo /D [362 0 R /XYZ 197.85901 499.466 null] >> endobj 425 0 obj << /Type /Action /S /GoTo /D [362 0 R /XYZ 165.29199 401.598 null] >> endobj 427 0 obj << /Type /Action /S /GoTo /D [362 0 R /XYZ 135.357 303.73 null] >> endobj 363 0 obj << /Type /Action /S /GoTo /D [362 0 R /XYZ 125.712006 205.862 null] >> endobj 483 0 obj << /Type /Action /S /GoTo /D [476 0 R /XYZ 128.339 322.316 null] >> endobj 489 0 obj << /Type /Action /S /GoTo /D [476 0 R /XYZ 154.745 477.818 null] >> endobj 485 0 obj << /Type /Action /S /GoTo /D [476 0 R /XYZ 145.067 193.21399 null] >> endobj 503 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 72.0 198.50201 null] >> endobj 479 0 obj << /Type /Action /S /GoTo /D [475 0 R /XYZ 118.647 163.75 null] >> endobj 511 0 obj << /Type /Action /S /GoTo /D [476 0 R /XYZ 166.164 722.822 null] >> endobj 513 0 obj << /Type /Action /S /GoTo /D [476 0 R /XYZ 182.907 593.72 null] >> endobj 515 0 obj << /Type /Action /S /GoTo /D [475 0 R /XYZ 118.647 363.878 null] >> endobj 338 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 72.0 722.822 null] >> endobj 327 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 72.0 641.623 null] >> endobj 211 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 72.0 560.424 null] >> endobj 215 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 72.0 479.225 null] >> endobj 186 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 72.0 398.026 null] >> endobj 191 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 72.0 316.827 null] >> endobj 550 0 obj << /Type /Action /S /GoTo /D [126 0 R /XYZ 147.695 523.444 null] >> endobj 247 0 obj << /Type /Action /S /GoTo /D [126 0 R /XYZ 119.533005 410.555 null] >> endobj 562 0 obj << /Type /Action /S /GoTo /D [126 0 R /XYZ 106.34 184.06598 null] >> endobj 565 0 obj << /Type /Action /S /GoTo /D [127 0 R /XYZ 147.68 660.35803 null] >> endobj 568 0 obj << /Type /Action /S /GoTo /D [127 0 R /XYZ 168.82599 543.958 null] >> endobj 319 0 obj << /Type /Action /S /GoTo /D [127 0 R /XYZ 179.35901 374.758 null] >> endobj 220 0 obj << /Type /Action /S /GoTo /D [127 0 R /XYZ 96.645004 245.15799 null] >> endobj 592 0 obj << /Type /Action /S /GoTo /D [127 0 R /XYZ 148.567 145.95801 null] >> endobj 522 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 137.131 695.291 null] >> endobj 611 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 120.389 202.22198 null] >> endobj 525 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 101.048004 540.89 null] >> endobj 622 0 obj << /Type /Action /S /GoTo /D [126 0 R /XYZ 108.969 722.822 null] >> endobj 627 0 obj << /Type /Action /S /GoTo /D [126 0 R /XYZ 128.325 623.133 null] >> endobj 527 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 117.776 346.889 null] >> endobj 529 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 123.048996 205.68799 null] >> endobj 651 0 obj << /Type /Action /S /GoTo /D [88 0 R /XYZ 72.0 459.258 null] >> endobj 313 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 160.907 566.934 null] >> endobj 655 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 100.162 469.06598 null] >> endobj 258 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 108.969 371.198 null] >> endobj 666 0 obj << /Type /Action /S /GoTo /D [88 0 R /XYZ 72.0 380.408 null] >> endobj 261 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 108.968 273.33 null] >> endobj 677 0 obj << /Type /Action /S /GoTo /D [88 0 R /XYZ 72.0 301.558 null] >> endobj 317 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 99.291 145.06201 null] >> endobj 531 0 obj << /Type /Action /S /GoTo /D [521 0 R /XYZ 145.938 722.822 null] >> endobj 533 0 obj << /Type /Action /S /GoTo /D [521 0 R /XYZ 174.1 488.465 null] >> endobj 607 0 obj << /Type /Action /S /GoTo /D [521 0 R /XYZ 153.857 375.708 null] >> endobj 708 0 obj << /Type /Action /S /GoTo /D [521 0 R /XYZ 117.759 262.951 null] >> endobj 710 0 obj << /Type /Action /S /GoTo /D [521 0 R /XYZ 123.921005 163.39398 null] >> endobj 712 0 obj << /Type /Action /S /GoTo /D [600 0 R /XYZ 144.147 722.822 null] >> endobj 714 0 obj << /Type /Action /S /GoTo /D [600 0 R /XYZ 153.83899 621.552 null] >> endobj 716 0 obj << /Type /Action /S /GoTo /D [600 0 R /XYZ 152.09799 450.282 null] >> endobj 718 0 obj << /Type /Action /S /GoTo /D [600 0 R /XYZ 141.534 318.612 null] >> endobj 738 0 obj << /Type /Action /S /GoTo /D [88 0 R /XYZ 72.0 538.10803 null] >> endobj 720 0 obj << /Type /Action /S /GoTo /D [600 0 R /XYZ 164.423 160.54199 null] >> endobj 112 0 obj << /Type /Action /S /GoTo /D [94 0 R /XYZ 116.905 695.436 null] >> endobj 114 0 obj << /Type /Action /S /GoTo /D [94 0 R /XYZ 117.776 598.27 null] >> endobj 344 0 obj << /Type /Action /S /GoTo /D [94 0 R /XYZ 137.14801 403.938 null] >> endobj 436 0 obj << /Type /Action /S /GoTo /D [94 0 R /XYZ 108.969 253.97198 null] >> endobj 432 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 123.05 722.822 null] >> endobj 434 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 117.791 624.16797 null] >> endobj 465 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 142.42 525.51404 null] >> endobj 497 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 146.82599 426.86 null] >> endobj 800 0 obj << /Type /Action /S /GoTo /D [475 0 R /XYZ 113.372 677.27 null] >> endobj 802 0 obj << /Type /Action /S /GoTo /D [475 0 R /XYZ 160.89 577.206 null] >> endobj 804 0 obj << /Type /Action /S /GoTo /D [475 0 R /XYZ 166.181 477.142 null] >> endobj 807 0 obj << /Type /Action /S /GoTo /D [475 0 R /XYZ 143.29199 263.814 null] >> endobj 794 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 139.776 315.006 null] >> endobj 796 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 130.082 216.35199 null] >> endobj 813 0 obj << /Type /Action /S /GoTo /D [88 0 R /XYZ 72.0 616.958 null] >> endobj 798 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 151.213 117.698 null] >> endobj 609 0 obj << /Type /Action /S /GoTo /D [601 0 R /XYZ 129.211 677.695 null] >> endobj 673 0 obj << /Type /Action /S /GoTo /D [601 0 R /XYZ 120.404 565.706 null] >> endobj 675 0 obj << /Type /Action /S /GoTo /D [601 0 R /XYZ 128.324 440.517 null] >> endobj 828 0 obj << /Type /Action /S /GoTo /D [601 0 R /XYZ 137.14801 341.728 null] >> endobj 830 0 obj << /Type /Action /S /GoTo /D [601 0 R /XYZ 131.873 242.939 null] >> endobj 741 0 obj << /Type /Action /S /GoTo /D [601 0 R /XYZ 179.39099 144.15002 null] >> endobj 858 0 obj << /Type /Action /S /GoTo /D [853 0 R /XYZ 151.213 551.414 null] >> endobj 864 0 obj << /Type /Action /S /GoTo /D [853 0 R /XYZ 148.567 677.422 null] >> endobj 617 0 obj << /Type /Action /S /GoTo /D [93 0 R /XYZ 150.341 722.822 null] >> endobj 236 0 obj << /Type /Action /S /GoTo /D [93 0 R /XYZ 161.77701 487.607 null] >> endobj 118 0 obj << /Type /Action /S /GoTo /D [93 0 R /XYZ 109.84 330.392 null] >> endobj 602 0 obj << /Type /Action /S /GoTo /D [93 0 R /XYZ 104.563995 146.77698 null] >> endobj 927 0 obj << /Type /Action /S /GoTo /D [94 0 R /XYZ 122.18 501.104 null] >> endobj 931 0 obj << /Type /Action /S /GoTo /D [94 0 R /XYZ 125.678 130.406 null] >> endobj 933 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 123.066 678.002 null] >> endobj 767 0 obj << /Type /Action /S /GoTo /D [746 0 R /XYZ 141.534 609.06 null] >> endobj 837 0 obj << /Type /Action /S /GoTo /D [746 0 R /XYZ 157.374 510.766 null] >> endobj 757 0 obj << /Type /Action /S /GoTo /D [746 0 R /XYZ 146.825 412.472 null] >> endobj 843 0 obj << /Type /Action /S /GoTo /D [746 0 R /XYZ 137.131 314.178 null] >> endobj 959 0 obj << /Type /Action /S /GoTo /D [853 0 R /XYZ 128.324 451.806 null] >> endobj 942 0 obj << /Type /Action /S /GoTo /D [746 0 R /XYZ 147.696 215.884 null] >> endobj 945 0 obj << /Type /Action /S /GoTo /D [746 0 R /XYZ 132.744 117.59003 null] >> endobj 969 0 obj << /Type /Action /S /GoTo /D [8 0 R /XYZ 72.0 720.0 null] >> endobj 970 0 obj << /First 971 0 R /Last 1035 0 R >> endobj 972 0 obj << /Type /Action /S /GoTo /D [8 0 R /XYZ 72.0 537.902 null] >> endobj 974 0 obj << /Type /Action /S /GoTo /D [8 0 R /XYZ 72.0 379.562 null] >> endobj 976 0 obj << /Type /Action /S /GoTo /D [8 0 R /XYZ 72.0 212.58301 null] >> endobj 978 0 obj << /Type /Action /S /GoTo /D [18 0 R /XYZ 72.0 720.0 null] >> endobj 980 0 obj << /Type /Action /S /GoTo /D [18 0 R /XYZ 72.0 616.214 null] >> endobj 982 0 obj << /Type /Action /S /GoTo /D [18 0 R /XYZ 72.0 519.773 null] >> endobj 984 0 obj << /Type /Action /S /GoTo /D [18 0 R /XYZ 72.0 383.732 null] >> endobj 986 0 obj << /Type /Action /S /GoTo /D [18 0 R /XYZ 72.0 174.55298 null] >> endobj 988 0 obj << /Type /Action /S /GoTo /D [35 0 R /XYZ 72.0 562.902 null] >> endobj 990 0 obj << /Type /Action /S /GoTo /D [35 0 R /XYZ 72.0 507.79498 null] >> endobj 992 0 obj << /Type /Action /S /GoTo /D [35 0 R /XYZ 72.0 390.489 null] >> endobj 994 0 obj << /Type /Action /S /GoTo /D [35 0 R /XYZ 72.0 299.583 null] >> endobj 996 0 obj << /Type /Action /S /GoTo /D [35 0 R /XYZ 72.0 221.87701 null] >> endobj 998 0 obj << /Type /Action /S /GoTo /D [43 0 R /XYZ 72.0 553.91797 null] >> endobj 1000 0 obj << /Type /Action /S /GoTo /D [43 0 R /XYZ 72.0 488.346 null] >> endobj 1002 0 obj << /Type /Action /S /GoTo /D [43 0 R /XYZ 72.0 396.374 null] >> endobj 1004 0 obj << /Type /Action /S /GoTo /D [43 0 R /XYZ 72.0 154.56201 null] >> endobj 1006 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 72.0 680.4 null] >> endobj 1008 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 72.0 562.484 null] >> endobj 1010 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 72.0 444.568 null] >> endobj 1012 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 72.0 366.252 null] >> endobj 1014 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 72.0 314.336 null] >> endobj 1016 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 72.0 163.51202 null] >> endobj 1018 0 obj << /Type /Action /S /GoTo /D [45 0 R /XYZ 72.0 680.4 null] >> endobj 1020 0 obj << /Type /Action /S /GoTo /D [48 0 R /XYZ 72.0 209.979 null] >> endobj 1022 0 obj << /Type /Action /S /GoTo /D [51 0 R /XYZ 72.0 693.6 null] >> endobj 1024 0 obj << /Type /Action /S /GoTo /D [51 0 R /XYZ 72.0 539.77 null] >> endobj 1026 0 obj << /Type /Action /S /GoTo /D [51 0 R /XYZ 72.0 316.049 null] >> endobj 1028 0 obj << /Type /Action /S /GoTo /D [51 0 R /XYZ 72.0 162.219 null] >> endobj 1030 0 obj << /Type /Action /S /GoTo /D [54 0 R /XYZ 72.0 680.4 null] >> endobj 1033 0 obj << /Type /Action /S /GoTo /D [54 0 R /XYZ 72.0 506.825 null] >> endobj 1036 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 72.0 482.4 null] >> endobj 1038 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 72.0 449.074 null] >> endobj 1040 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 72.0 368.115 null] >> endobj 1042 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 72.0 287.156 null] >> endobj 1044 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 72.0 206.19702 null] >> endobj 1046 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 72.0 125.237976 null] >> endobj 1048 0 obj << /Type /Action /S /GoTo /D [88 0 R /XYZ 72.0 702.8 null] >> endobj 1050 0 obj << /Type /Action /S /GoTo /D [88 0 R /XYZ 72.0 623.95 null] >> endobj 1052 0 obj << /Type /Action /S /GoTo /D [88 0 R /XYZ 72.0 545.1 null] >> endobj 1054 0 obj << /Type /Action /S /GoTo /D [88 0 R /XYZ 72.0 466.25 null] >> endobj 1056 0 obj << /Type /Action /S /GoTo /D [88 0 R /XYZ 72.0 387.4 null] >> endobj 1058 0 obj << /Type /Action /S /GoTo /D [88 0 R /XYZ 72.0 308.55 null] >> endobj 1060 0 obj << /Type /Action /S /GoTo /D [88 0 R /XYZ 72.0 229.70001 null] >> endobj 1062 0 obj << /Type /Action /S /GoTo /D [88 0 R /XYZ 72.0 150.84998 null] >> endobj 1064 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 72.0 720.0 null] >> endobj 1066 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 72.0 649.398 null] >> endobj 1068 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 72.0 568.199 null] >> endobj 1070 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 72.0 487.0 null] >> endobj 1072 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 72.0 405.801 null] >> endobj 1074 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 72.0 324.602 null] >> endobj 1076 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 72.0 243.40302 null] >> endobj 1078 0 obj << /Type /Action /S /GoTo /D [91 0 R /XYZ 72.0 209.99701 null] >> endobj 1080 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 72.0 702.8 null] >> endobj 1082 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 72.0 548.399 null] >> endobj 1084 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 72.0 354.398 null] >> endobj 1086 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 72.0 213.19699 null] >> endobj 1088 0 obj << /Type /Action /S /GoTo /D [93 0 R /XYZ 72.0 720.0 null] >> endobj 1090 0 obj << /Type /Action /S /GoTo /D [93 0 R /XYZ 72.0 496.05402 null] >> endobj 1092 0 obj << /Type /Action /S /GoTo /D [93 0 R /XYZ 72.0 338.839 null] >> endobj 1094 0 obj << /Type /Action /S /GoTo /D [93 0 R /XYZ 72.0 155.224 null] >> endobj 1096 0 obj << /Type /Action /S /GoTo /D [94 0 R /XYZ 72.0 702.8 null] >> endobj 1098 0 obj << /Type /Action /S /GoTo /D [94 0 R /XYZ 72.0 605.63403 null] >> endobj 1100 0 obj << /Type /Action /S /GoTo /D [94 0 R /XYZ 72.0 508.46802 null] >> endobj 1102 0 obj << /Type /Action /S /GoTo /D [94 0 R /XYZ 72.0 411.302 null] >> endobj 1104 0 obj << /Type /Action /S /GoTo /D [94 0 R /XYZ 72.0 261.336 null] >> endobj 1106 0 obj << /Type /Action /S /GoTo /D [94 0 R /XYZ 72.0 137.77002 null] >> endobj 1108 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 72.0 685.6 null] >> endobj 1110 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 72.0 574.532 null] >> endobj 1112 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 72.0 476.664 null] >> endobj 1114 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 72.0 378.796 null] >> endobj 1116 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 72.0 280.928 null] >> endobj 1118 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 72.0 152.65997 null] >> endobj 1120 0 obj << /Type /Action /S /GoTo /D [96 0 R /XYZ 72.0 685.6 null] >> endobj 1122 0 obj << /Type /Action /S /GoTo /D [96 0 R /XYZ 72.0 585.536 null] >> endobj 1124 0 obj << /Type /Action /S /GoTo /D [96 0 R /XYZ 72.0 485.472 null] >> endobj 1126 0 obj << /Type /Action /S /GoTo /D [96 0 R /XYZ 72.0 385.408 null] >> endobj 1128 0 obj << /Type /Action /S /GoTo /D [96 0 R /XYZ 72.0 285.344 null] >> endobj 1130 0 obj << /Type /Action /S /GoTo /D [96 0 R /XYZ 72.0 172.08002 null] >> endobj 1132 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 72.0 702.8 null] >> endobj 1134 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 72.0 602.736 null] >> endobj 1136 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 72.0 502.672 null] >> endobj 1138 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 72.0 385.408 null] >> endobj 1140 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 72.0 272.144 null] >> endobj 1142 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 72.0 172.08002 null] >> endobj 1144 0 obj << /Type /Action /S /GoTo /D [126 0 R /XYZ 72.0 720.0 null] >> endobj 1146 0 obj << /Type /Action /S /GoTo /D [126 0 R /XYZ 72.0 631.338 null] >> endobj 1148 0 obj << /Type /Action /S /GoTo /D [126 0 R /XYZ 72.0 531.649 null] >> endobj 1150 0 obj << /Type /Action /S /GoTo /D [126 0 R /XYZ 72.0 418.76 null] >> endobj 1152 0 obj << /Type /Action /S /GoTo /D [126 0 R /XYZ 72.0 192.271 null] >> endobj 1154 0 obj << /Type /Action /S /GoTo /D [127 0 R /XYZ 72.0 668.4 null] >> endobj 1156 0 obj << /Type /Action /S /GoTo /D [127 0 R /XYZ 72.0 552.0 null] >> endobj 1158 0 obj << /Type /Action /S /GoTo /D [127 0 R /XYZ 72.0 382.8 null] >> endobj 1160 0 obj << /Type /Action /S /GoTo /D [127 0 R /XYZ 72.0 253.20001 null] >> endobj 1162 0 obj << /Type /Action /S /GoTo /D [127 0 R /XYZ 72.0 154.0 null] >> endobj 1164 0 obj << /Type /Action /S /GoTo /D [128 0 R /XYZ 72.0 685.6 null] >> endobj 1166 0 obj << /Type /Action /S /GoTo /D [128 0 R /XYZ 72.0 569.398 null] >> endobj 1168 0 obj << /Type /Action /S /GoTo /D [128 0 R /XYZ 72.0 457.196 null] >> endobj 1170 0 obj << /Type /Action /S /GoTo /D [128 0 R /XYZ 72.0 340.994 null] >> endobj 1172 0 obj << /Type /Action /S /GoTo /D [128 0 R /XYZ 72.0 241.992 null] >> endobj 1174 0 obj << /Type /Action /S /GoTo /D [128 0 R /XYZ 72.0 125.78998 null] >> endobj 1176 0 obj << /Type /Action /S /GoTo /D [129 0 R /XYZ 72.0 685.6 null] >> endobj 1178 0 obj << /Type /Action /S /GoTo /D [129 0 R /XYZ 72.0 567.502 null] >> endobj 1180 0 obj << /Type /Action /S /GoTo /D [129 0 R /XYZ 72.0 308.204 null] >> endobj 1182 0 obj << /Type /Action /S /GoTo /D [129 0 R /XYZ 72.0 190.10602 null] >> endobj 1184 0 obj << /Type /Action /S /GoTo /D [130 0 R /XYZ 72.0 720.0 null] >> endobj 1186 0 obj << /Type /Action /S /GoTo /D [130 0 R /XYZ 72.0 604.054 null] >> endobj 1188 0 obj << /Type /Action /S /GoTo /D [130 0 R /XYZ 72.0 478.639 null] >> endobj 1190 0 obj << /Type /Action /S /GoTo /D [130 0 R /XYZ 72.0 366.424 null] >> endobj 1192 0 obj << /Type /Action /S /GoTo /D [130 0 R /XYZ 72.0 184.20898 null] >> endobj 1194 0 obj << /Type /Action /S /GoTo /D [144 0 R /XYZ 72.0 702.8 null] >> endobj 1196 0 obj << /Type /Action /S /GoTo /D [144 0 R /XYZ 72.0 557.356 null] >> endobj 1198 0 obj << /Type /Action /S /GoTo /D [144 0 R /XYZ 72.0 442.312 null] >> endobj 1200 0 obj << /Type /Action /S /GoTo /D [144 0 R /XYZ 72.0 296.868 null] >> endobj 1202 0 obj << /Type /Action /S /GoTo /D [144 0 R /XYZ 72.0 151.42401 null] >> endobj 1204 0 obj << /Type /Action /S /GoTo /D [157 0 R /XYZ 72.0 651.2 null] >> endobj 1206 0 obj << /Type /Action /S /GoTo /D [157 0 R /XYZ 72.0 503.788 null] >> endobj 1208 0 obj << /Type /Action /S /GoTo /D [157 0 R /XYZ 72.0 386.776 null] >> endobj 1210 0 obj << /Type /Action /S /GoTo /D [157 0 R /XYZ 72.0 256.564 null] >> endobj 1212 0 obj << /Type /Action /S /GoTo /D [157 0 R /XYZ 72.0 139.552 null] >> endobj 1214 0 obj << /Type /Action /S /GoTo /D [171 0 R /XYZ 72.0 530.17 null] >> endobj 1216 0 obj << /Type /Action /S /GoTo /D [171 0 R /XYZ 72.0 429.272 null] >> endobj 1218 0 obj << /Type /Action /S /GoTo /D [171 0 R /XYZ 72.0 328.374 null] >> endobj 1220 0 obj << /Type /Action /S /GoTo /D [171 0 R /XYZ 72.0 179.87598 null] >> endobj 1222 0 obj << /Type /Action /S /GoTo /D [172 0 R /XYZ 72.0 616.87 null] >> endobj 1224 0 obj << /Type /Action /S /GoTo /D [172 0 R /XYZ 72.0 514.472 null] >> endobj 1226 0 obj << /Type /Action /S /GoTo /D [172 0 R /XYZ 72.0 412.074 null] >> endobj 1228 0 obj << /Type /Action /S /GoTo /D [172 0 R /XYZ 72.0 309.676 null] >> endobj 1230 0 obj << /Type /Action /S /GoTo /D [172 0 R /XYZ 72.0 141.27802 null] >> endobj 1232 0 obj << /Type /Action /S /GoTo /D [200 0 R /XYZ 72.0 614.282 null] >> endobj 1234 0 obj << /Type /Action /S /GoTo /D [200 0 R /XYZ 72.0 472.52002 null] >> endobj 1236 0 obj << /Type /Action /S /GoTo /D [200 0 R /XYZ 72.0 347.958 null] >> endobj 1238 0 obj << /Type /Action /S /GoTo /D [200 0 R /XYZ 72.0 236.59601 null] >> endobj 1240 0 obj << /Type /Action /S /GoTo /D [200 0 R /XYZ 72.0 125.23401 null] >> endobj 1242 0 obj << /Type /Action /S /GoTo /D [312 0 R /XYZ 72.0 685.6 null] >> endobj 1244 0 obj << /Type /Action /S /GoTo /D [312 0 R /XYZ 72.0 566.56 null] >> endobj 1246 0 obj << /Type /Action /S /GoTo /D [312 0 R /XYZ 72.0 417.12 null] >> endobj 1248 0 obj << /Type /Action /S /GoTo /D [312 0 R /XYZ 72.0 284.88 null] >> endobj 1250 0 obj << /Type /Action /S /GoTo /D [312 0 R /XYZ 72.0 169.84003 null] >> endobj 1252 0 obj << /Type /Action /S /GoTo /D [362 0 R /XYZ 72.0 702.8 null] >> endobj 1254 0 obj << /Type /Action /S /GoTo /D [362 0 R /XYZ 72.0 604.932 null] >> endobj 1256 0 obj << /Type /Action /S /GoTo /D [362 0 R /XYZ 72.0 507.064 null] >> endobj 1258 0 obj << /Type /Action /S /GoTo /D [362 0 R /XYZ 72.0 409.196 null] >> endobj 1260 0 obj << /Type /Action /S /GoTo /D [362 0 R /XYZ 72.0 311.328 null] >> endobj 1262 0 obj << /Type /Action /S /GoTo /D [362 0 R /XYZ 72.0 213.45999 null] >> endobj 1264 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 72.0 720.0 null] >> endobj 1266 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 72.0 632.028 null] >> endobj 1268 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 72.0 533.374 null] >> endobj 1270 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 72.0 434.72 null] >> endobj 1272 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 72.0 322.866 null] >> endobj 1274 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 72.0 224.212 null] >> endobj 1276 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 72.0 125.55798 null] >> endobj 1278 0 obj << /Type /Action /S /GoTo /D [475 0 R /XYZ 72.0 685.6 null] >> endobj 1280 0 obj << /Type /Action /S /GoTo /D [475 0 R /XYZ 72.0 585.536 null] >> endobj 1282 0 obj << /Type /Action /S /GoTo /D [475 0 R /XYZ 72.0 485.472 null] >> endobj 1284 0 obj << /Type /Action /S /GoTo /D [475 0 R /XYZ 72.0 372.208 null] >> endobj 1286 0 obj << /Type /Action /S /GoTo /D [475 0 R /XYZ 72.0 272.144 null] >> endobj 1288 0 obj << /Type /Action /S /GoTo /D [475 0 R /XYZ 72.0 172.08002 null] >> endobj 1290 0 obj << /Type /Action /S /GoTo /D [476 0 R /XYZ 72.0 720.0 null] >> endobj 1292 0 obj << /Type /Action /S /GoTo /D [476 0 R /XYZ 72.0 601.596 null] >> endobj 1294 0 obj << /Type /Action /S /GoTo /D [476 0 R /XYZ 72.0 485.694 null] >> endobj 1296 0 obj << /Type /Action /S /GoTo /D [476 0 R /XYZ 72.0 330.192 null] >> endobj 1298 0 obj << /Type /Action /S /GoTo /D [476 0 R /XYZ 72.0 201.09003 null] >> endobj 1300 0 obj << /Type /Action /S /GoTo /D [521 0 R /XYZ 72.0 720.0 null] >> endobj 1302 0 obj << /Type /Action /S /GoTo /D [521 0 R /XYZ 72.0 496.626 null] >> endobj 1304 0 obj << /Type /Action /S /GoTo /D [521 0 R /XYZ 72.0 383.869 null] >> endobj 1306 0 obj << /Type /Action /S /GoTo /D [521 0 R /XYZ 72.0 271.112 null] >> endobj 1308 0 obj << /Type /Action /S /GoTo /D [521 0 R /XYZ 72.0 171.555 null] >> endobj 1310 0 obj << /Type /Action /S /GoTo /D [600 0 R /XYZ 72.0 720.0 null] >> endobj 1312 0 obj << /Type /Action /S /GoTo /D [600 0 R /XYZ 72.0 630.284 null] >> endobj 1314 0 obj << /Type /Action /S /GoTo /D [600 0 R /XYZ 72.0 459.014 null] >> endobj 1316 0 obj << /Type /Action /S /GoTo /D [600 0 R /XYZ 72.0 327.344 null] >> endobj 1318 0 obj << /Type /Action /S /GoTo /D [600 0 R /XYZ 72.0 169.27399 null] >> endobj 1320 0 obj << /Type /Action /S /GoTo /D [601 0 R /XYZ 72.0 685.6 null] >> endobj 1322 0 obj << /Type /Action /S /GoTo /D [601 0 R /XYZ 72.0 573.61096 null] >> endobj 1324 0 obj << /Type /Action /S /GoTo /D [601 0 R /XYZ 72.0 448.422 null] >> endobj 1326 0 obj << /Type /Action /S /GoTo /D [601 0 R /XYZ 72.0 349.633 null] >> endobj 1328 0 obj << /Type /Action /S /GoTo /D [601 0 R /XYZ 72.0 250.844 null] >> endobj 1330 0 obj << /Type /Action /S /GoTo /D [601 0 R /XYZ 72.0 152.055 null] >> endobj 1332 0 obj << /Type /Action /S /GoTo /D [746 0 R /XYZ 72.0 616.8 null] >> endobj 1334 0 obj << /Type /Action /S /GoTo /D [746 0 R /XYZ 72.0 518.506 null] >> endobj 1336 0 obj << /Type /Action /S /GoTo /D [746 0 R /XYZ 72.0 420.212 null] >> endobj 1338 0 obj << /Type /Action /S /GoTo /D [746 0 R /XYZ 72.0 321.918 null] >> endobj 1340 0 obj << /Type /Action /S /GoTo /D [746 0 R /XYZ 72.0 223.624 null] >> endobj 1342 0 obj << /Type /Action /S /GoTo /D [746 0 R /XYZ 72.0 125.33002 null] >> endobj 1344 0 obj << /Type /Action /S /GoTo /D [853 0 R /XYZ 72.0 685.6 null] >> endobj 1346 0 obj << /Type /Action /S /GoTo /D [853 0 R /XYZ 72.0 559.592 null] >> endobj 1348 0 obj << /Type /Action /S /GoTo /D [853 0 R /XYZ 72.0 459.984 null] >> endobj xref 0 1359 0000000000 65535 f 0000202485 00000 n 0000202823 00000 n 0000202973 00000 n 0000000015 00000 n 0000000241 00000 n 0000002923 00000 n 0000002956 00000 n 0000007199 00000 n 0000203221 00000 n 0000003998 00000 n 0000007158 00000 n 0000004184 00000 n 0000004386 00000 n 0000004573 00000 n 0000007383 00000 n 0000007404 00000 n 0000007424 00000 n 0000012610 00000 n 0000007445 00000 n 0000012499 00000 n 0000007622 00000 n 0000007805 00000 n 0000007995 00000 n 0000008177 00000 n 0000008366 00000 n 0000008541 00000 n 0000008718 00000 n 0000008897 00000 n 0000009082 00000 n 0000009272 00000 n 0000009483 00000 n 0000009688 00000 n 0000009901 00000 n 0000012795 00000 n 0000016260 00000 n 0000012816 00000 n 0000016212 00000 n 0000012993 00000 n 0000013173 00000 n 0000013352 00000 n 0000013560 00000 n 0000016445 00000 n 0000031255 00000 n 0000036117 00000 n 0000019285 00000 n 0000016466 00000 n 0000019453 00000 n 0000021643 00000 n 0000019474 00000 n 0000021811 00000 n 0000023478 00000 n 0000021832 00000 n 0000023646 00000 n 0000027395 00000 n 0000023667 00000 n 0000027319 00000 n 0000023861 00000 n 0000024060 00000 n 0000024237 00000 n 0000024441 00000 n 0000024627 00000 n 0000024817 00000 n 0000025024 00000 n 0000025209 00000 n 0000027580 00000 n 0000027601 00000 n 0000031193 00000 n 0000027776 00000 n 0000027959 00000 n 0000028135 00000 n 0000028340 00000 n 0000203916 00000 n 0000028517 00000 n 0000028653 00000 n 0000031440 00000 n 0000203996 00000 n 0000031461 00000 n 0000036062 00000 n 0000031599 00000 n 0000031797 00000 n 0000031987 00000 n 0000032200 00000 n 0000032403 00000 n 0000036302 00000 n 0000037638 00000 n 0000036323 00000 n 0000037806 00000 n 0000038594 00000 n 0000037827 00000 n 0000038762 00000 n 0000105540 00000 n 0000125708 00000 n 0000175616 00000 n 0000148682 00000 n 0000133049 00000 n 0000077826 00000 n 0000042259 00000 n 0000207658 00000 n 0000038782 00000 n 0000042111 00000 n 0000204078 00000 n 0000038918 00000 n 0000039058 00000 n 0000039197 00000 n 0000039337 00000 n 0000204158 00000 n 0000039476 00000 n 0000039616 00000 n 0000204241 00000 n 0000039755 00000 n 0000039895 00000 n 0000213695 00000 n 0000040034 00000 n 0000213779 00000 n 0000040174 00000 n 0000204324 00000 n 0000040314 00000 n 0000215911 00000 n 0000040454 00000 n 0000040594 00000 n 0000040731 00000 n 0000204409 00000 n 0000040870 00000 n 0000041008 00000 n 0000042446 00000 n 0000113281 00000 n 0000117751 00000 n 0000064334 00000 n 0000071589 00000 n 0000045311 00000 n 0000042468 00000 n 0000045218 00000 n 0000205780 00000 n 0000042608 00000 n 0000042750 00000 n 0000042890 00000 n 0000043032 00000 n 0000043172 00000 n 0000043314 00000 n 0000043454 00000 n 0000043596 00000 n 0000043736 00000 n 0000045499 00000 n 0000048389 00000 n 0000045521 00000 n 0000048296 00000 n 0000045661 00000 n 0000045801 00000 n 0000045943 00000 n 0000046083 00000 n 0000046225 00000 n 0000046365 00000 n 0000046507 00000 n 0000046647 00000 n 0000046789 00000 n 0000048577 00000 n 0000051480 00000 n 0000048599 00000 n 0000051379 00000 n 0000048737 00000 n 0000048877 00000 n 0000049017 00000 n 0000049159 00000 n 0000049299 00000 n 0000049441 00000 n 0000049581 00000 n 0000049723 00000 n 0000049863 00000 n 0000050005 00000 n 0000051668 00000 n 0000056058 00000 n 0000082992 00000 n 0000204493 00000 n 0000051690 00000 n 0000055909 00000 n 0000204665 00000 n 0000051830 00000 n 0000204749 00000 n 0000051970 00000 n 0000204834 00000 n 0000052110 00000 n 0000208429 00000 n 0000052250 00000 n 0000052390 00000 n 0000052529 00000 n 0000210632 00000 n 0000052669 00000 n 0000204578 00000 n 0000052809 00000 n 0000052948 00000 n 0000210713 00000 n 0000053089 00000 n 0000053231 00000 n 0000053370 00000 n 0000053511 00000 n 0000053651 00000 n 0000053790 00000 n 0000053931 00000 n 0000056246 00000 n 0000059503 00000 n 0000056268 00000 n 0000059394 00000 n 0000056408 00000 n 0000056548 00000 n 0000056686 00000 n 0000204921 00000 n 0000056824 00000 n 0000205093 00000 n 0000056966 00000 n 0000057108 00000 n 0000210470 00000 n 0000057250 00000 n 0000205006 00000 n 0000057390 00000 n 0000210551 00000 n 0000057530 00000 n 0000057670 00000 n 0000057810 00000 n 0000059691 00000 n 0000211313 00000 n 0000059713 00000 n 0000064137 00000 n 0000059851 00000 n 0000207238 00000 n 0000059993 00000 n 0000207407 00000 n 0000060135 00000 n 0000207491 00000 n 0000060277 00000 n 0000207574 00000 n 0000060418 00000 n 0000060560 00000 n 0000205607 00000 n 0000060700 00000 n 0000060842 00000 n 0000215825 00000 n 0000060984 00000 n 0000205264 00000 n 0000061126 00000 n 0000205433 00000 n 0000061267 00000 n 0000205518 00000 n 0000061411 00000 n 0000205176 00000 n 0000061553 00000 n 0000061693 00000 n 0000210879 00000 n 0000061834 00000 n 0000061976 00000 n 0000205348 00000 n 0000062116 00000 n 0000062256 00000 n 0000062396 00000 n 0000062536 00000 n 0000062674 00000 n 0000062812 00000 n 0000064522 00000 n 0000212339 00000 n 0000064544 00000 n 0000071312 00000 n 0000212504 00000 n 0000064684 00000 n 0000205695 00000 n 0000064824 00000 n 0000064964 00000 n 0000065104 00000 n 0000065242 00000 n 0000065382 00000 n 0000207067 00000 n 0000065522 00000 n 0000207151 00000 n 0000065664 00000 n 0000205865 00000 n 0000065806 00000 n 0000205950 00000 n 0000065948 00000 n 0000206034 00000 n 0000066090 00000 n 0000206119 00000 n 0000066232 00000 n 0000206204 00000 n 0000066374 00000 n 0000206293 00000 n 0000066516 00000 n 0000206379 00000 n 0000066656 00000 n 0000206464 00000 n 0000066802 00000 n 0000206549 00000 n 0000066946 00000 n 0000206636 00000 n 0000067088 00000 n 0000206723 00000 n 0000067230 00000 n 0000206810 00000 n 0000067371 00000 n 0000206898 00000 n 0000067513 00000 n 0000206982 00000 n 0000067655 00000 n 0000067797 00000 n 0000067939 00000 n 0000068083 00000 n 0000068227 00000 n 0000068371 00000 n 0000068511 00000 n 0000068651 00000 n 0000068793 00000 n 0000068933 00000 n 0000069073 00000 n 0000071777 00000 n 0000089966 00000 n 0000212169 00000 n 0000071799 00000 n 0000077549 00000 n 0000071937 00000 n 0000212668 00000 n 0000072077 00000 n 0000211226 00000 n 0000072217 00000 n 0000207323 00000 n 0000072359 00000 n 0000208688 00000 n 0000072503 00000 n 0000208773 00000 n 0000072647 00000 n 0000210389 00000 n 0000072791 00000 n 0000072931 00000 n 0000073071 00000 n 0000073213 00000 n 0000073357 00000 n 0000073501 00000 n 0000073641 00000 n 0000073781 00000 n 0000073923 00000 n 0000074067 00000 n 0000210308 00000 n 0000074211 00000 n 0000074351 00000 n 0000074491 00000 n 0000074633 00000 n 0000074777 00000 n 0000213862 00000 n 0000074921 00000 n 0000208082 00000 n 0000075061 00000 n 0000075201 00000 n 0000207743 00000 n 0000075341 00000 n 0000207826 00000 n 0000075481 00000 n 0000207910 00000 n 0000075625 00000 n 0000207996 00000 n 0000075765 00000 n 0000075903 00000 n 0000076043 00000 n 0000076181 00000 n 0000076320 00000 n 0000078013 00000 n 0000095854 00000 n 0000209542 00000 n 0000078035 00000 n 0000082803 00000 n 0000078175 00000 n 0000078315 00000 n 0000078455 00000 n 0000078595 00000 n 0000078735 00000 n 0000208168 00000 n 0000078875 00000 n 0000208256 00000 n 0000079019 00000 n 0000208341 00000 n 0000079159 00000 n 0000079295 00000 n 0000079435 00000 n 0000079572 00000 n 0000079712 00000 n 0000079852 00000 n 0000079992 00000 n 0000080132 00000 n 0000080272 00000 n 0000208601 00000 n 0000080412 00000 n 0000208516 00000 n 0000080554 00000 n 0000080696 00000 n 0000080838 00000 n 0000080977 00000 n 0000083180 00000 n 0000154141 00000 n 0000083202 00000 n 0000089673 00000 n 0000083342 00000 n 0000208857 00000 n 0000083482 00000 n 0000083622 00000 n 0000083760 00000 n 0000083900 00000 n 0000084040 00000 n 0000084180 00000 n 0000084319 00000 n 0000084459 00000 n 0000084597 00000 n 0000084739 00000 n 0000084879 00000 n 0000085019 00000 n 0000085159 00000 n 0000085297 00000 n 0000085439 00000 n 0000085579 00000 n 0000085719 00000 n 0000085859 00000 n 0000085997 00000 n 0000208942 00000 n 0000086139 00000 n 0000209114 00000 n 0000086279 00000 n 0000209199 00000 n 0000086419 00000 n 0000209284 00000 n 0000086559 00000 n 0000209371 00000 n 0000086701 00000 n 0000209458 00000 n 0000086841 00000 n 0000086977 00000 n 0000087117 00000 n 0000087257 00000 n 0000214034 00000 n 0000087395 00000 n 0000214118 00000 n 0000087533 00000 n 0000213948 00000 n 0000087673 00000 n 0000087811 00000 n 0000087949 00000 n 0000090154 00000 n 0000209029 00000 n 0000090176 00000 n 0000095601 00000 n 0000090316 00000 n 0000090458 00000 n 0000090600 00000 n 0000090742 00000 n 0000090884 00000 n 0000091026 00000 n 0000091170 00000 n 0000091312 00000 n 0000091454 00000 n 0000091596 00000 n 0000091738 00000 n 0000091880 00000 n 0000092022 00000 n 0000092164 00000 n 0000092306 00000 n 0000092448 00000 n 0000092588 00000 n 0000092728 00000 n 0000092868 00000 n 0000093010 00000 n 0000093152 00000 n 0000214205 00000 n 0000093296 00000 n 0000093438 00000 n 0000093582 00000 n 0000093720 00000 n 0000093860 00000 n 0000094000 00000 n 0000094142 00000 n 0000094278 00000 n 0000096042 00000 n 0000103245 00000 n 0000099202 00000 n 0000096064 00000 n 0000099093 00000 n 0000209970 00000 n 0000096204 00000 n 0000096344 00000 n 0000096484 00000 n 0000209630 00000 n 0000096624 00000 n 0000209800 00000 n 0000096766 00000 n 0000096908 00000 n 0000097050 00000 n 0000209715 00000 n 0000097188 00000 n 0000097326 00000 n 0000097466 00000 n 0000097604 00000 n 0000099390 00000 n 0000099412 00000 n 0000103080 00000 n 0000214291 00000 n 0000099550 00000 n 0000099687 00000 n 0000099827 00000 n 0000099966 00000 n 0000100106 00000 n 0000209887 00000 n 0000100245 00000 n 0000100385 00000 n 0000100524 00000 n 0000100664 00000 n 0000100803 00000 n 0000100944 00000 n 0000101082 00000 n 0000210054 00000 n 0000101219 00000 n 0000210139 00000 n 0000101360 00000 n 0000210223 00000 n 0000101501 00000 n 0000101644 00000 n 0000101784 00000 n 0000101924 00000 n 0000103433 00000 n 0000139120 00000 n 0000211489 00000 n 0000103455 00000 n 0000105471 00000 n 0000211659 00000 n 0000103596 00000 n 0000211915 00000 n 0000103737 00000 n 0000211999 00000 n 0000103877 00000 n 0000212753 00000 n 0000104017 00000 n 0000212838 00000 n 0000104158 00000 n 0000104299 00000 n 0000105727 00000 n 0000105749 00000 n 0000112988 00000 n 0000105891 00000 n 0000106033 00000 n 0000106175 00000 n 0000106315 00000 n 0000106459 00000 n 0000106601 00000 n 0000106743 00000 n 0000106885 00000 n 0000107025 00000 n 0000107169 00000 n 0000107309 00000 n 0000210794 00000 n 0000107449 00000 n 0000107589 00000 n 0000107730 00000 n 0000107868 00000 n 0000108008 00000 n 0000108150 00000 n 0000108292 00000 n 0000108436 00000 n 0000108580 00000 n 0000108724 00000 n 0000108866 00000 n 0000210967 00000 n 0000109008 00000 n 0000109150 00000 n 0000211053 00000 n 0000109290 00000 n 0000109431 00000 n 0000211139 00000 n 0000109573 00000 n 0000109717 00000 n 0000109859 00000 n 0000109999 00000 n 0000110141 00000 n 0000110282 00000 n 0000110423 00000 n 0000110567 00000 n 0000113469 00000 n 0000113491 00000 n 0000117586 00000 n 0000113629 00000 n 0000113769 00000 n 0000113907 00000 n 0000114047 00000 n 0000114187 00000 n 0000114327 00000 n 0000114467 00000 n 0000114607 00000 n 0000114747 00000 n 0000114886 00000 n 0000115026 00000 n 0000115168 00000 n 0000211402 00000 n 0000115308 00000 n 0000115448 00000 n 0000115587 00000 n 0000115727 00000 n 0000115867 00000 n 0000116003 00000 n 0000117939 00000 n 0000142497 00000 n 0000160347 00000 n 0000215994 00000 n 0000117961 00000 n 0000125399 00000 n 0000118101 00000 n 0000118243 00000 n 0000212921 00000 n 0000118385 00000 n 0000215055 00000 n 0000118526 00000 n 0000211573 00000 n 0000118668 00000 n 0000118808 00000 n 0000118950 00000 n 0000119092 00000 n 0000119234 00000 n 0000215741 00000 n 0000119376 00000 n 0000119518 00000 n 0000119660 00000 n 0000119802 00000 n 0000211745 00000 n 0000119944 00000 n 0000120085 00000 n 0000120229 00000 n 0000120371 00000 n 0000211830 00000 n 0000120513 00000 n 0000120655 00000 n 0000120797 00000 n 0000120937 00000 n 0000121079 00000 n 0000121221 00000 n 0000121363 00000 n 0000121505 00000 n 0000121647 00000 n 0000121789 00000 n 0000121931 00000 n 0000122071 00000 n 0000122213 00000 n 0000122355 00000 n 0000122497 00000 n 0000122639 00000 n 0000122781 00000 n 0000122923 00000 n 0000123061 00000 n 0000125895 00000 n 0000125917 00000 n 0000132732 00000 n 0000126055 00000 n 0000212088 00000 n 0000126193 00000 n 0000126333 00000 n 0000126473 00000 n 0000212253 00000 n 0000126615 00000 n 0000126757 00000 n 0000126899 00000 n 0000127041 00000 n 0000127182 00000 n 0000127324 00000 n 0000127464 00000 n 0000127606 00000 n 0000127747 00000 n 0000127887 00000 n 0000212423 00000 n 0000128027 00000 n 0000128167 00000 n 0000128307 00000 n 0000128449 00000 n 0000128591 00000 n 0000128732 00000 n 0000215140 00000 n 0000128873 00000 n 0000215225 00000 n 0000129017 00000 n 0000212587 00000 n 0000129159 00000 n 0000129299 00000 n 0000129437 00000 n 0000129577 00000 n 0000129717 00000 n 0000129856 00000 n 0000129995 00000 n 0000130137 00000 n 0000130277 00000 n 0000130417 00000 n 0000130557 00000 n 0000130697 00000 n 0000130836 00000 n 0000130976 00000 n 0000131118 00000 n 0000133236 00000 n 0000133258 00000 n 0000138883 00000 n 0000133400 00000 n 0000133542 00000 n 0000133686 00000 n 0000133828 00000 n 0000133968 00000 n 0000134109 00000 n 0000134250 00000 n 0000134392 00000 n 0000134534 00000 n 0000134676 00000 n 0000134817 00000 n 0000134957 00000 n 0000213006 00000 n 0000135101 00000 n 0000213091 00000 n 0000135243 00000 n 0000213181 00000 n 0000135385 00000 n 0000213266 00000 n 0000135527 00000 n 0000213353 00000 n 0000135669 00000 n 0000213440 00000 n 0000135813 00000 n 0000213608 00000 n 0000135954 00000 n 0000136093 00000 n 0000136235 00000 n 0000136375 00000 n 0000136519 00000 n 0000136659 00000 n 0000136799 00000 n 0000136938 00000 n 0000137076 00000 n 0000139308 00000 n 0000139330 00000 n 0000142396 00000 n 0000139470 00000 n 0000139610 00000 n 0000139750 00000 n 0000139890 00000 n 0000140030 00000 n 0000213525 00000 n 0000140170 00000 n 0000140312 00000 n 0000215482 00000 n 0000140452 00000 n 0000140596 00000 n 0000140736 00000 n 0000142685 00000 n 0000180905 00000 n 0000142707 00000 n 0000148437 00000 n 0000142845 00000 n 0000142985 00000 n 0000143124 00000 n 0000143264 00000 n 0000143404 00000 n 0000143545 00000 n 0000143685 00000 n 0000143826 00000 n 0000216503 00000 n 0000143970 00000 n 0000144112 00000 n 0000144252 00000 n 0000144392 00000 n 0000144534 00000 n 0000144678 00000 n 0000144820 00000 n 0000144964 00000 n 0000145106 00000 n 0000216334 00000 n 0000145248 00000 n 0000145390 00000 n 0000145530 00000 n 0000145670 00000 n 0000145810 00000 n 0000145950 00000 n 0000146091 00000 n 0000146229 00000 n 0000146367 00000 n 0000146507 00000 n 0000146647 00000 n 0000148869 00000 n 0000148891 00000 n 0000153904 00000 n 0000149031 00000 n 0000149169 00000 n 0000149309 00000 n 0000149451 00000 n 0000149593 00000 n 0000149733 00000 n 0000149871 00000 n 0000150011 00000 n 0000150153 00000 n 0000150295 00000 n 0000150433 00000 n 0000150573 00000 n 0000214717 00000 n 0000150711 00000 n 0000214802 00000 n 0000150853 00000 n 0000214970 00000 n 0000150995 00000 n 0000214377 00000 n 0000151137 00000 n 0000214461 00000 n 0000151281 00000 n 0000214545 00000 n 0000151422 00000 n 0000151564 00000 n 0000214630 00000 n 0000151704 00000 n 0000151846 00000 n 0000151988 00000 n 0000152130 00000 n 0000152270 00000 n 0000214889 00000 n 0000152409 00000 n 0000152549 00000 n 0000152690 00000 n 0000154329 00000 n 0000154351 00000 n 0000160102 00000 n 0000154489 00000 n 0000154631 00000 n 0000154773 00000 n 0000154915 00000 n 0000155057 00000 n 0000155197 00000 n 0000155341 00000 n 0000155485 00000 n 0000215310 00000 n 0000155627 00000 n 0000215397 00000 n 0000155769 00000 n 0000155911 00000 n 0000156053 00000 n 0000156193 00000 n 0000156335 00000 n 0000156477 00000 n 0000216418 00000 n 0000156619 00000 n 0000156761 00000 n 0000156905 00000 n 0000157045 00000 n 0000157187 00000 n 0000216588 00000 n 0000157328 00000 n 0000157469 00000 n 0000157611 00000 n 0000157753 00000 n 0000157895 00000 n 0000158037 00000 n 0000158179 00000 n 0000158321 00000 n 0000160535 00000 n 0000163402 00000 n 0000160557 00000 n 0000163293 00000 n 0000160695 00000 n 0000160833 00000 n 0000215571 00000 n 0000160975 00000 n 0000161117 00000 n 0000161259 00000 n 0000161401 00000 n 0000161541 00000 n 0000215656 00000 n 0000161681 00000 n 0000161821 00000 n 0000161961 00000 n 0000162101 00000 n 0000163590 00000 n 0000163612 00000 n 0000175099 00000 n 0000163754 00000 n 0000163896 00000 n 0000164036 00000 n 0000164180 00000 n 0000164320 00000 n 0000164460 00000 n 0000164600 00000 n 0000164742 00000 n 0000164886 00000 n 0000165027 00000 n 0000165168 00000 n 0000165314 00000 n 0000165456 00000 n 0000165596 00000 n 0000165736 00000 n 0000165880 00000 n 0000166020 00000 n 0000166160 00000 n 0000166304 00000 n 0000166446 00000 n 0000166589 00000 n 0000166729 00000 n 0000166869 00000 n 0000167011 00000 n 0000167155 00000 n 0000167297 00000 n 0000167441 00000 n 0000167583 00000 n 0000167725 00000 n 0000167867 00000 n 0000168010 00000 n 0000168154 00000 n 0000168298 00000 n 0000168442 00000 n 0000168585 00000 n 0000168727 00000 n 0000168867 00000 n 0000169011 00000 n 0000169153 00000 n 0000169295 00000 n 0000169441 00000 n 0000169583 00000 n 0000169723 00000 n 0000169864 00000 n 0000170006 00000 n 0000170148 00000 n 0000170292 00000 n 0000170434 00000 n 0000170574 00000 n 0000170716 00000 n 0000170858 00000 n 0000171000 00000 n 0000171141 00000 n 0000171282 00000 n 0000171422 00000 n 0000216083 00000 n 0000171562 00000 n 0000171701 00000 n 0000171841 00000 n 0000216166 00000 n 0000171983 00000 n 0000216250 00000 n 0000172123 00000 n 0000172263 00000 n 0000172405 00000 n 0000175803 00000 n 0000175825 00000 n 0000180684 00000 n 0000175965 00000 n 0000176105 00000 n 0000216758 00000 n 0000176245 00000 n 0000176387 00000 n 0000216843 00000 n 0000176529 00000 n 0000176671 00000 n 0000176815 00000 n 0000176955 00000 n 0000177097 00000 n 0000177237 00000 n 0000177377 00000 n 0000177519 00000 n 0000177661 00000 n 0000177805 00000 n 0000177947 00000 n 0000178091 00000 n 0000178231 00000 n 0000216673 00000 n 0000178373 00000 n 0000178513 00000 n 0000178655 00000 n 0000178795 00000 n 0000178937 00000 n 0000179079 00000 n 0000179217 00000 n 0000179355 00000 n 0000181093 00000 n 0000216930 00000 n 0000217008 00000 n 0000181115 00000 n 0000217062 00000 n 0000181234 00000 n 0000217142 00000 n 0000181375 00000 n 0000217222 00000 n 0000181471 00000 n 0000217304 00000 n 0000181567 00000 n 0000217383 00000 n 0000181719 00000 n 0000217464 00000 n 0000181803 00000 n 0000217545 00000 n 0000181904 00000 n 0000217626 00000 n 0000182009 00000 n 0000217709 00000 n 0000182113 00000 n 0000217790 00000 n 0000182253 00000 n 0000217873 00000 n 0000182333 00000 n 0000217954 00000 n 0000182428 00000 n 0000218035 00000 n 0000182523 00000 n 0000218118 00000 n 0000182620 00000 n 0000218201 00000 n 0000182726 00000 n 0000218283 00000 n 0000182808 00000 n 0000218365 00000 n 0000182961 00000 n 0000218449 00000 n 0000183101 00000 n 0000218529 00000 n 0000183193 00000 n 0000218611 00000 n 0000183320 00000 n 0000218693 00000 n 0000183439 00000 n 0000218775 00000 n 0000183552 00000 n 0000218857 00000 n 0000183665 00000 n 0000218941 00000 n 0000183782 00000 n 0000219021 00000 n 0000183883 00000 n 0000219103 00000 n 0000184058 00000 n 0000219183 00000 n 0000184148 00000 n 0000219264 00000 n 0000184266 00000 n 0000219346 00000 n 0000184357 00000 n 0000219428 00000 n 0000184455 00000 n 0000184566 00000 n 0000219508 00000 n 0000184788 00000 n 0000184865 00000 n 0000219590 00000 n 0000185049 00000 n 0000219670 00000 n 0000185193 00000 n 0000219752 00000 n 0000185292 00000 n 0000219834 00000 n 0000185393 00000 n 0000219916 00000 n 0000185497 00000 n 0000220000 00000 n 0000185609 00000 n 0000220085 00000 n 0000185710 00000 n 0000220165 00000 n 0000185815 00000 n 0000220246 00000 n 0000185920 00000 n 0000220326 00000 n 0000186026 00000 n 0000220407 00000 n 0000186132 00000 n 0000220487 00000 n 0000186233 00000 n 0000220568 00000 n 0000186334 00000 n 0000220652 00000 n 0000186439 00000 n 0000220736 00000 n 0000186548 00000 n 0000220816 00000 n 0000186657 00000 n 0000220898 00000 n 0000186765 00000 n 0000220980 00000 n 0000186878 00000 n 0000221060 00000 n 0000186989 00000 n 0000221142 00000 n 0000187094 00000 n 0000221224 00000 n 0000187184 00000 n 0000221308 00000 n 0000187319 00000 n 0000221392 00000 n 0000187405 00000 n 0000221472 00000 n 0000187510 00000 n 0000221554 00000 n 0000187611 00000 n 0000221636 00000 n 0000187713 00000 n 0000221720 00000 n 0000187817 00000 n 0000221800 00000 n 0000187924 00000 n 0000221884 00000 n 0000188032 00000 n 0000221966 00000 n 0000188133 00000 n 0000222048 00000 n 0000188234 00000 n 0000222128 00000 n 0000188335 00000 n 0000222212 00000 n 0000188436 00000 n 0000222296 00000 n 0000188538 00000 n 0000222378 00000 n 0000188642 00000 n 0000222460 00000 n 0000188743 00000 n 0000222544 00000 n 0000188846 00000 n 0000222624 00000 n 0000188949 00000 n 0000222706 00000 n 0000189056 00000 n 0000222788 00000 n 0000189156 00000 n 0000222870 00000 n 0000189257 00000 n 0000222952 00000 n 0000189358 00000 n 0000223036 00000 n 0000189458 00000 n 0000223116 00000 n 0000189562 00000 n 0000223198 00000 n 0000189664 00000 n 0000223280 00000 n 0000189764 00000 n 0000223362 00000 n 0000189866 00000 n 0000223444 00000 n 0000189973 00000 n 0000223528 00000 n 0000190075 00000 n 0000223608 00000 n 0000190178 00000 n 0000223690 00000 n 0000190284 00000 n 0000223772 00000 n 0000190392 00000 n 0000223854 00000 n 0000190497 00000 n 0000223936 00000 n 0000190603 00000 n 0000224020 00000 n 0000190708 00000 n 0000224101 00000 n 0000190809 00000 n 0000224184 00000 n 0000190912 00000 n 0000224267 00000 n 0000191018 00000 n 0000224349 00000 n 0000191120 00000 n 0000224432 00000 n 0000191221 00000 n 0000224513 00000 n 0000191327 00000 n 0000224594 00000 n 0000191435 00000 n 0000224675 00000 n 0000191544 00000 n 0000224760 00000 n 0000191644 00000 n 0000224841 00000 n 0000191750 00000 n 0000224922 00000 n 0000191852 00000 n 0000225005 00000 n 0000191954 00000 n 0000225088 00000 n 0000192058 00000 n 0000225171 00000 n 0000192160 00000 n 0000225254 00000 n 0000192265 00000 n 0000225339 00000 n 0000192370 00000 n 0000225420 00000 n 0000192472 00000 n 0000225503 00000 n 0000192577 00000 n 0000225586 00000 n 0000192679 00000 n 0000225671 00000 n 0000192779 00000 n 0000225752 00000 n 0000192882 00000 n 0000225835 00000 n 0000192988 00000 n 0000225918 00000 n 0000193092 00000 n 0000226001 00000 n 0000193195 00000 n 0000226086 00000 n 0000193301 00000 n 0000226167 00000 n 0000193406 00000 n 0000226250 00000 n 0000193507 00000 n 0000226333 00000 n 0000193611 00000 n 0000226416 00000 n 0000193718 00000 n 0000226501 00000 n 0000193819 00000 n 0000226582 00000 n 0000193923 00000 n 0000226665 00000 n 0000194024 00000 n 0000226748 00000 n 0000194126 00000 n 0000226831 00000 n 0000194228 00000 n 0000226914 00000 n 0000194336 00000 n 0000226996 00000 n 0000194441 00000 n 0000227079 00000 n 0000194547 00000 n 0000227162 00000 n 0000194652 00000 n 0000227247 00000 n 0000194760 00000 n 0000227329 00000 n 0000194861 00000 n 0000227412 00000 n 0000194962 00000 n 0000227495 00000 n 0000195063 00000 n 0000227578 00000 n 0000195170 00000 n 0000227663 00000 n 0000195279 00000 n 0000227746 00000 n 0000195386 00000 n 0000227831 00000 n 0000195492 00000 n 0000227914 00000 n 0000195596 00000 n 0000227999 00000 n 0000195702 00000 n 0000228084 00000 n 0000195806 00000 n 0000228165 00000 n 0000195909 00000 n 0000228247 00000 n 0000196012 00000 n 0000228329 00000 n 0000196116 00000 n 0000228411 00000 n 0000196222 00000 n 0000228496 00000 n 0000196323 00000 n 0000228577 00000 n 0000196435 00000 n 0000228660 00000 n 0000196536 00000 n 0000228743 00000 n 0000196648 00000 n 0000228826 00000 n 0000196757 00000 n 0000228909 00000 n 0000196861 00000 n 0000228994 00000 n 0000196964 00000 n 0000229075 00000 n 0000197066 00000 n 0000229158 00000 n 0000197169 00000 n 0000229241 00000 n 0000197274 00000 n 0000229323 00000 n 0000197379 00000 n 0000229406 00000 n 0000197484 00000 n 0000229489 00000 n 0000197588 00000 n 0000229574 00000 n 0000197693 00000 n 0000229655 00000 n 0000197795 00000 n 0000229738 00000 n 0000197902 00000 n 0000229821 00000 n 0000198010 00000 n 0000229904 00000 n 0000198111 00000 n 0000229987 00000 n 0000198216 00000 n 0000230072 00000 n 0000198318 00000 n 0000230153 00000 n 0000198427 00000 n 0000230236 00000 n 0000198538 00000 n 0000230319 00000 n 0000198645 00000 n 0000230402 00000 n 0000198750 00000 n 0000230487 00000 n 0000198856 00000 n 0000230568 00000 n 0000198961 00000 n 0000230651 00000 n 0000199070 00000 n 0000230734 00000 n 0000199177 00000 n 0000230817 00000 n 0000199279 00000 n 0000230900 00000 n 0000199382 00000 n 0000230981 00000 n 0000199488 00000 n 0000231064 00000 n 0000199596 00000 n 0000231147 00000 n 0000199704 00000 n 0000231230 00000 n 0000199810 00000 n 0000231315 00000 n 0000199917 00000 n 0000231396 00000 n 0000200021 00000 n 0000231481 00000 n 0000200124 00000 n 0000231564 00000 n 0000200228 00000 n 0000231647 00000 n 0000200332 00000 n 0000231730 00000 n 0000200435 00000 n 0000231813 00000 n 0000200544 00000 n 0000231894 00000 n 0000200649 00000 n 0000231977 00000 n 0000200756 00000 n 0000232060 00000 n 0000200861 00000 n 0000232143 00000 n 0000200966 00000 n 0000232226 00000 n 0000201072 00000 n 0000232311 00000 n 0000201176 00000 n 0000232392 00000 n 0000201282 00000 n 0000232475 00000 n 0000201386 00000 n 0000201474 00000 n 0000201586 00000 n 0000201695 00000 n 0000201810 00000 n 0000201921 00000 n 0000202042 00000 n 0000202156 00000 n 0000202263 00000 n 0000202375 00000 n trailer << /Size 1359 /Root 2 0 R /Info 4 0 R /ID [<182FD93DF37511483D5FDE0FE115AC2D> <182FD93DF37511483D5FDE0FE115AC2D>] >> startxref 232558 %%EOF ./photoml-0.28/install-sh0000644000175000017500000001273611361730560014614 0ustar brendtbrendt#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 ./photoml-0.28/dtd/0000755000175000017500000000000011530542507013355 5ustar brendtbrendt./photoml-0.28/dtd/photo.dtd0000644000175000017500000013636111471534314015216 0ustar brendtbrendt ./photoml-0.28/dtd/catalog.xml.in0000644000175000017500000000105511361730647016125 0ustar brendtbrendt ./photoml-0.28/dtd/Makefile.in0000644000175000017500000000221711361730647015432 0ustar brendtbrendt# Makefile for PhotoML DTD # Most recent modification: 17 December 2007 prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@/photoml dtddir = ${datadir}/dtd bindir = @bindir@ INSTALL = @INSTALL@ SHELL = @SH@ RM = @RM@ DTDVERSION = @DTDVERSION@ .PHONY: main all test clean install uninstall main: @echo "Makefile targets: install, uninstall" all: test: clean: @${RM} -f catalog.xml install: @echo "Installing DTD in ${DESTDIR}${datadir}" @if [ ! -d ${DESTDIR}${datadir} ]; then \ ${INSTALL} -d ${DESTDIR}${datadir}; \ fi; \ if [ ! -d ${DESTDIR}${dtddir} ]; then \ ${INSTALL} -d ${DESTDIR}${dtddir}; \ fi; \ cat catalog.xml.in | sed -e 's|\@abs_srcdir\@|${dtddir}|g' \ -e 's|\@DTDVERSION\@|${DTDVERSION}|g' > catalog.tmp @${INSTALL} -m 644 catalog.tmp ${DESTDIR}${dtddir}/catalog.xml @${RM} catalog.tmp @${INSTALL} -m 644 *.dtd ${DESTDIR}${dtddir} uninstall: @echo "Uninstalling DTD in ${DESTDIR}${datadir}" @${RM} -f ${DESTDIR}${dtddir}/catalog.xml ${DESTDIR}${dtddir}/*.dtd\ ${DESTDIR}${dtddir}/*.pen @-rmdir ${DESTDIR}${dtddir} 2>/dev/null @-rmdir ${DESTDIR}${datadir} 2>/dev/null ./photoml-0.28/index.html0000644000175000017500000000174211361730556014610 0ustar brendtbrendt PhotoML: Photo Description Markup Language

PhotoML: Photo Description Markup Language

Documentation may be find in the docs directory. The main document is pmldoc, available in text format (pmldoc.txt), HTML format (pmldoc.html), and PDF format (pmldoc.pdf).

./photoml-0.28/README0000644000175000017500000000126511361730561013467 0ustar brendtbrendt PhotoML: Photo Description Markup Language Documentation may be find in the "docs" subdirectory of the unpacked source distribution, or in "$prefix/share/doc/photoml" (where $prefix is usually "/usr/local" or "/usr") after installation. The main document is "pmldoc", available in text format ("pmldoc.txt"), HTML format ("pmldoc.html"), and PDF format ("pmldoc.pdf"). Files in this distribution are copyright of Brendt Wohlberg, except for xsl/html/detailed.xsl, which is copyright of Oskar Ojala. The entire distribution is released under the GNU General Public License (version 2), the terms of which are described in the LICENCE file included in this distribution. ./photoml-0.28/INSTALL0000644000175000017500000001753211361730653013646 0ustar brendtbrendtInstallation ============ The simplest installation procedure is: ./configure make make install [as root] The generic configure-based installation instructions below provide further details. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. ./photoml-0.28/xsl/0000755000175000017500000000000011530542510013402 5ustar brendtbrendt./photoml-0.28/xsl/upgrade/0000755000175000017500000000000011530542510015031 5ustar brendtbrendt./photoml-0.28/xsl/upgrade/photo-0.10-0.11.xsl0000644000175000017500000001134411471546035017660 0ustar brendtbrendt Upgrade warning: region could not be converted to new content model equivalent <region type=" " > </region> Warning: manual editing of output required (position commented) A region element could not be represented within the new location element content model Upgrade warning: The 'select' combine mode has been removed. Defaults need to be manually edited to obtain the same effect using the 'merge' mode, which is now the default. Warning: manual editing of output may be required (position commented) New combine attribute default value for defaults element Warning: manual editing of output may be required (position not commented) New defaults element combine mode policy (see documentation) Upgrade warning: The id attribute is now required. Warning: manual editing of output required (position commented) Elements roll, sheet, and digital now require the id attribute ./photoml-0.28/xsl/upgrade/photo-0.12-0.13.xsl0000644000175000017500000000443611471554716017675 0ustar brendtbrendt ./photoml-0.28/xsl/upgrade/photo-0.08-0.09.xsl0000644000175000017500000000442011361730556017674 0ustar brendtbrendt replace Upgrade warning: The "graft" combine mode has been removed. Defaults need to be manually edited to make uses of new modes "replace", "merge", or "select". Warning: manual editing of output required ./photoml-0.28/xsl/upgrade/digim-0.01-0.02.xsl0000644000175000017500000000325011361730556017616 0ustar brendtbrendt ./photoml-0.28/xsl/upgrade/photo-0.11-0.12.xsl0000644000175000017500000004167411471546023017670 0ustar brendtbrendt Ilford DD-X Kodak HC-110 Ilfotec DD-X Agfa Rodinal Upgrade warning: editing might be required to correctly represent the previous type element across the new make and name elements. Warning: manual editing of output may be required (position commented) Element developer/type replaced by developer/{make,name} Upgrade warning: editing might be required to conform with the new format of the frame/size element. Warning: manual editing of output may be required (position commented) Format of frame/size has changed Upgrade warning: frame/viewpoint has been removed - content should be manually transferred to frame/scene/location. <viewpoint> </viewpoint> Warning: manual editing of output required (position commented) Element frame/viewpoint has been removed Upgrade warning: location/annotation has been removed - content should be manually transferred to siblings. <annotation> </annotation> Warning: manual editing of output required (position commented) Element location/annotation has been removed Warning: manual editing of output may be required Element location content model has changed place description road description road place Upgrade warning: defaults expansion involving text content elements with attributes may give different results under the new version - please confirm that the merge:reject processing instruction inserted here gives the desired result. Warning: manual editing of output may be required (position commented) Handling of attributes in defaults expansion of text content elements has changed > ./photoml-0.28/xsl/upgrade/digim-0.02-0.03.xsl0000644000175000017500000000405211361730556017621 0ustar brendtbrendt ./photoml-0.28/xsl/upgrade/photo-0.09-0.10.xsl0000644000175000017500000000425111471546064017670 0ustar brendtbrendt Upgrade warning: address is no longer a valid child of location. The location element may require editing. Warning: manual editing of output may be required Upgrade warning: handling of empty descendants of defaults elements has changed. The defaults element may require editing. Warning: manual editing of output may be required ./photoml-0.28/xsl/misc/0000755000175000017500000000000011530542510014335 5ustar brendtbrendt./photoml-0.28/xsl/misc/create.xsl0000644000175000017500000001320011364576517016347 0ustar brendtbrendt
./photoml-0.28/xsl/misc/digital.xsl0000644000175000017500000007014511471546413016523 0ustar brendtbrendt - - - ./photoml-0.28/xsl/misc/xmp.xsl0000644000175000017500000004021311530505753015701 0ustar brendtbrendt %gf%f T begin='' id='W5M0MpCehiHzreSzNTczkc9d' , < > < > , 0 1 WGS-84 end='w' N S E W ./photoml-0.28/xsl/misc/valid.xsl0000644000175000017500000004230011460353722016172 0ustar brendtbrendt roll: sheet: collection: digital: digimage: href: file-hash: image-hash: error: "parent-frame-not-digital-descendant" error: "parent-frame-and-explicit-id" collection: error: "collection-fstfid-out-of-range" error: "collection-lstfid-out-of-range" error: "frame-without-id" error: "defaults-frame-with-id" error: "defaults-frame-with-fn" error: "frame-nonunique-id" error: "frame-nonunique-fn" error: "invalid-pos-int" error: "invalid-real" error: "invalid-fraction" error: "invalid-hex-string" error: "invalid-date" error: "invalid-time" error: "invalid-time-zone" error: "invalid-latitude" error: "invalid-longitude" ./photoml-0.28/xsl/html/0000755000175000017500000000000011530542510014346 5ustar brendtbrendt./photoml-0.28/xsl/html/index.xsl0000644000175000017500000002470611530525477016233 0ustar brendtbrendt 11 Photo Metadata Index
Sheet Index
ID Date Film Camera
Roll Index
ID Start End Film Camera
(ISO )
Digital Index
ID Start End Camera
Digimage Index
ID Frames
[ , ]
./photoml-0.28/xsl/html/preindex.xsl0000644000175000017500000000611711471546617016741 0ustar brendtbrendt ./photoml-0.28/xsl/html/summary.xsl0000644000175000017500000006461411530524404016610 0ustar brendtbrendt 11 0 0 Photo Metadata initialize()
Film Roll Description:

Digital Image Description:

Sheet Film Description:

- [ - ]

Film Laboratory Process Date Tag Number Load Date Unload Date Photographer Camera Body
,
Frame Date Location Description Exposure
( )
(ISO ) f/ s () 1 1 0 , ,

Digital Image Details
GrpFrmVer. OriginDateFormat WidthHeightBits
Source: Version # Scanner: Camera: ./photoml-0.28/xsl/html/cssinc.xsl0000644000175000017500000000662211530525534016375 0ustar brendtbrendt 11 ./photoml-0.28/xsl/html/detailed.xsl0000644000175000017500000003127511361730557016675 0ustar brendtbrendt 11 Photo description

Photography Data

Roll id: cid:

Description:

NOTE:

Sheet id: cid:

Description:

NOTE:

Digital id: cid:

Description:

NOTE:

Collection id: cgid: fstfid: lstfid:

Description:

NOTE:

Loaded:

Unloaded:

Defaults

combine mode:

Film

Make Name Speed Process Type Format Notes

Processing

Lab Tag Date Developing Notes
Phone:
Fax:
:
C
mm:ss

Frame (fn: )

Photographer Intellectual Property Rights Scene Equipment Exposure Focus Condition Image Notes


Aperture: f/
Shutter:
Exp-comp:
Flash:
Flash-comp:
Rated-speed:
Exp-mode:
Metering:
Note:
./photoml-0.28/xsl/defaults/0000755000175000017500000000000011530542507015217 5ustar brendtbrendt./photoml-0.28/xsl/defaults/debug.xsl0000644000175000017500000001626011361730556017047 0ustar brendtbrendt [Node set contains node nodes , including element elements ] [ = ] [text: ] [comment: ] [pi: ] ./photoml-0.28/xsl/defaults/expand.xsl0000644000175000017500000000501211367415610017226 0ustar brendtbrendt ./photoml-0.28/xsl/defaults/merge.xsl0000644000175000017500000012277411364607525017072 0ustar brendtbrendt 0 ---merge-> Called merge:merge-subtrees: <--merge-- Warning: function merge-subtrees called with a node set (parameters must be subtrees). Warning: function merge-subtrees called with subtree with a null root name. ---merge-> Called merge:merge-subtrees-recursive: <--merge-- ---merge-- ### Entered branch AA ---merge-- ### Entered branch AB ---merge-- ### Entered branch AC ---merge-- ### Entered branch AD ---merge-- ### Entered branch AE ---merge-- ### Entered branch B ---merge-- ### Doing test for branch CA ---merge-- ### Entered branch CA ---merge-- ### Entered branch CBA ---merge-- ### Entered branch CBBA ---merge-- ### Entered branch CBBB ---merge-> Called merge:append-children: <--merge-- ---merge-> Called merge:append-to-children: <--merge-- ---merge-> Called merge:prune-first-child: <--merge-- ---merge-> Called merge:prune-trailing-children: <--merge-- ---merge-> Called merge:append-attributes: <--merge-- ---merge-> Called merge:prune-attributes: <--merge-- ---merge-> Called merge:prune-non-attributes: <--merge-- ---merge-> Called merge:prune-merge-reject-pi: <--merge-- ---merge-> Called merge:apply-merge-rejection: <--merge-- ---merge-> Called merge:insertion-valid: <--merge-- ./photoml-0.28/xsl/defaults/dflts-test/0000755000175000017500000000000011530542507017310 5ustar brendtbrendt./photoml-0.28/xsl/defaults/dflts-test/007.t0000644000175000017500000000122611361730557020012 0ustar brendtbrendtTest defaults merge into digimage elements XML for defaults expansion follows: ===def Nikon ===def Expanded reference XML follows: ===ref Nikon ===ref ./photoml-0.28/xsl/defaults/dflts-test/111.t0000644000175000017500000000363711361730557020016 0ustar brendtbrendtDetermine whether defaults scope is handled correctly XML for defaults expansion follows: ===def 2001-01-01 the-region the-city the-place 2001-01-02 another-city the-camera-body another-place yet-another-place ===def Expanded reference XML follows: ===ref 2001-01-01 the-region the-city the-place 2001-01-02 another-city another-place the-camera-body 2001-01-01 the-region the-city yet-another-place ===ref ./photoml-0.28/xsl/defaults/dflts-test/014.t0000644000175000017500000000144411361730557020012 0ustar brendtbrendtTest defaults and explicit merge with location content model XML for defaults expansion follows: ===def the-city the-street the-city the-description ===def Expanded reference XML follows: ===ref the-city the-street the-description ===ref ./photoml-0.28/xsl/defaults/dflts-test/013.t0000644000175000017500000000212511361730557020006 0ustar brendtbrendtTest combination of defaults in "replace" mode XML for defaults expansion follows: ===def the-country the-city the-place 2001-01-01 ===def Expanded reference XML follows: ===ref the-country the-city 2001-01-01 the-place ===ref ./photoml-0.28/xsl/defaults/dflts-test/012.t0000644000175000017500000000145111361730557020006 0ustar brendtbrendtTest whether defaults are expanded into elements with a comment preceding the insertion point XML for defaults expansion follows: ===def 2001-01-01 a description ===def Expanded reference XML follows: ===ref 2001-01-01 a description ===ref ./photoml-0.28/xsl/defaults/dflts-test/016.t0000644000175000017500000000240711361730557020014 0ustar brendtbrendtDetermine whether defaults scope is correctly handled when expanding into frame elements within a frame-set element. XML for defaults expansion follows: ===def the-city another-city ===def Expanded reference XML follows: ===ref another-city another-city the-city ===ref ./photoml-0.28/xsl/defaults/dflts-test/106.t0000644000175000017500000000261711361730557020017 0ustar brendtbrendtDetermine whether defaults are correctly combined in merge mode XML for defaults expansion follows: ===def the-country the-street 2001-01-02 location-description 2001-01-02 ===def Expanded reference XML follows: ===ref 2001-01-02 the-country the-street 2001-01-02 the-country the-street location-description ===ref ./photoml-0.28/xsl/defaults/dflts-test/104.t0000644000175000017500000000276611361730557020022 0ustar brendtbrendtTest merge mode defaults expansion XML for defaults expansion follows: ===def the-photographer 2001-01-01 the-region the-city the-place another-city another-place ===def Expanded reference XML follows: ===ref the-photographer 2001-01-01 the-region the-city the-place the-photographer 2001-01-01 the-region another-city another-place ===ref ./photoml-0.28/xsl/defaults/dflts-test/110.t0000644000175000017500000000301611361730557020004 0ustar brendtbrendtTest combination of defaults in "replace" mode XML for defaults expansion follows: ===def 2001-01-01 the-region the-city the-place 2001-01-02 another-city the-camera-body another-place ===def Expanded reference XML follows: ===ref 2001-01-01 the-region the-city the-place 2001-01-02 another-city another-place the-camera-body ===ref ./photoml-0.28/xsl/defaults/dflts-test/004.t0000644000175000017500000000136411361730557020012 0ustar brendtbrendtTest defaults expansion with explicit override of a defaults element XML for defaults expansion follows: ===def 2001-01-01 2001-01-05 the-city ===def Expanded reference XML follows: ===ref 2001-01-05 the-city ===ref ./photoml-0.28/xsl/defaults/dflts-test/019.t0000644000175000017500000000215711361730557020021 0ustar brendtbrendtTest defaults combination for digimage elements XML for defaults expansion follows: ===def Nikon Canon ===def Expanded reference XML follows: ===ref Nikon Canon ===ref ./photoml-0.28/xsl/defaults/dflts-test/107.t0000644000175000017500000000157211371067076020017 0ustar brendtbrendtTest defaults merge into digimage elements XML for defaults expansion follows: ===def Nikon 3880 2599 ===def Expanded reference XML follows: ===ref 3880 2599 ===ref ./photoml-0.28/xsl/defaults/dflts-test/018.t0000644000175000017500000000330511361730557020014 0ustar brendtbrendtDetermine whether defaults scope is correctly handled when expanding into digimage elements within a digimage-set element. XML for defaults expansion follows: ===def Nikon Canon ===def Expanded reference XML follows: ===ref Canon Canon Nikon ===ref ./photoml-0.28/xsl/defaults/dflts-test/017.t0000644000175000017500000000223411361730557020013 0ustar brendtbrendtDetermine whether defaults are expanded into digimage elements within a digimage-set element. XML for defaults expansion follows: ===def Nikon ===def Expanded reference XML follows: ===ref Nikon Nikon ===ref ./photoml-0.28/xsl/defaults/dflts-test/003.t0000644000175000017500000000116211361730557020005 0ustar brendtbrendtTest whether defaults are expanded into elements with attributes but no text or element content XML for defaults expansion follows: ===def 2001-01-01 ===def Expanded reference XML follows: ===ref 2001-01-01 ===ref ./photoml-0.28/xsl/defaults/dflts-test/109.t0000644000175000017500000000217311361730557020017 0ustar brendtbrendtTest combination of defaults in "replace" mode XML for defaults expansion follows: ===def 2001-01-01 the-place 2001-01-02 another-place ===def Expanded reference XML follows: ===ref 2001-01-01 the-place 2001-01-02 another-place ===ref ./photoml-0.28/xsl/defaults/dflts-test/011.t0000644000175000017500000000124511361730557020006 0ustar brendtbrendtTest interaction of defaults within and external to a roll element XML for defaults expansion follows: ===def film make description ===def Expanded reference XML follows: ===ref film make description ===ref ./photoml-0.28/xsl/defaults/dflts-test/108.t0000644000175000017500000000336511371066665020025 0ustar brendtbrendtDetermine whether defaults elements merge correctly with empty tags XML for defaults expansion follows: ===def 2001-01-01 the-region the-city the-place another-place another-city ===def Expanded reference XML follows: ===ref 2001-01-01 the-region the-city the-place the-city another-place the-region another-city ===ref ./photoml-0.28/xsl/defaults/dflts-test/009.t0000644000175000017500000000127011371066643020012 0ustar brendtbrendtTest empty tag removal policy XML for defaults expansion follows: ===def 2001-01-01 the-place ===def Expanded reference XML follows: ===ref the-place ===ref ./photoml-0.28/xsl/defaults/dflts-test/015.t0000644000175000017500000000162111361730557020010 0ustar brendtbrendtDetermine whether defaults are expanded into frame elements within a frame-set element. XML for defaults expansion follows: ===def 2001-01-01 ===def Expanded reference XML follows: ===ref 2001-01-01 2001-01-01 ===ref ./photoml-0.28/xsl/defaults/dflts-test/103.t0000644000175000017500000000321111361730557020003 0ustar brendtbrendtTest merge mode defaults expansion XML for defaults expansion follows: ===def the-photographer 2001-01-01 the-country the-region the-city the-place another-region another-city another-place ===def Expanded reference XML follows: ===ref the-photographer 2001-01-01 the-country the-region the-city the-place the-photographer 2001-01-01 the-country another-region another-city another-place ===ref ./photoml-0.28/xsl/defaults/dflts-test/105.t0000644000175000017500000000220311361730557020005 0ustar brendtbrendtTest defaults expansion with explicit override of a defaults element XML for defaults expansion follows: ===def the-country the-city another-country 2001-01-01 ===def Expanded reference XML follows. ===ref the-country the-city 2001-01-01 another-country the-city ===ref ./photoml-0.28/xsl/defaults/dflts-test/002.t0000644000175000017500000000123011361730557020000 0ustar brendtbrendtTest defaults expansion with explicit override of a defaults element XML for defaults expansion follows: ===def 2001-01-01 2001-01-10 ===def Expanded reference XML follows: ===ref 2001-01-10 ===ref ./photoml-0.28/xsl/defaults/dflts-test/020.t0000644000175000017500000000161211361730557020004 0ustar brendtbrendtTest combination of defaults in "merge" mode XML for defaults expansion follows: ===def the-country another-country ===def Expanded reference XML follows: ===ref the-country another-country ===ref ./photoml-0.28/xsl/defaults/dflts-test/021.t0000644000175000017500000000176611361730557020017 0ustar brendtbrendtTest sequential combination of defaults (activated a bug in content model validation in which initial defaults merge violated content model) XML for defaults expansion follows: ===def the-country scene-description the-date ===def Expanded reference XML follows: ===ref the-date the-country scene-description ===ref ./photoml-0.28/xsl/defaults/dflts-test/001.t0000644000175000017500000000130711361730557020004 0ustar brendtbrendtTest defaults expansion with no explicit override of a defaults element XML for defaults expansion follows: ===def 2001-01-01 the-city ===def Expanded reference XML follows: ===ref 2001-01-01 the-city ===ref ./photoml-0.28/xsl/defaults/dflts-test/101.t0000644000175000017500000000211311361730557020001 0ustar brendtbrendtDetermine whether defaults are correctly expanded into subsequent frames, but don't overwrite corresponding frame children XML for defaults expansion follows: ===def 2001-01-01 the-country the-region 2001-01-05 the-city the-place ===def Expanded reference XML follows: ===ref 2001-01-05 the-country the-region the-city the-place ===ref ./photoml-0.28/xsl/defaults/dflts-test/005.t0000644000175000017500000000134011361730557020005 0ustar brendtbrendtTest defaults merge into digimage elements XML for defaults expansion follows: ===def Nikon 2001-08-30 ===def Expanded reference XML follows: ===ref 2001-08-30 Nikon ===ref ./photoml-0.28/xsl/defaults/dflts-test/100.t0000644000175000017500000000163111361730557020004 0ustar brendtbrendtTest defaults expansion with no explicit override of a defaults element XML for defaults expansion follows: ===def 2001-01-01 the-country the-region the-city the-place ===def Expanded reference XML follows: ===ref 2001-01-01 the-country the-region the-city the-place ===ref ./photoml-0.28/xsl/defaults/dflts-test/010.t0000644000175000017500000000130511361730557020002 0ustar brendtbrendtDetermine whether defaults are correctly expanded when the defaults sub-element is not present in the context into which it should expanded. XML for defaults expansion follows: ===def 35mm the-city ===def Expanded reference XML follows: ===ref 35mm the-city ===ref ./photoml-0.28/xsl/defaults/dflts-test/008.t0000644000175000017500000000172611361730557020020 0ustar brendtbrendtTest defaults merge into digimage elements XML for defaults expansion follows: ===def 8x Positive ===def Expanded reference XML follows: ===ref 8x Positive ===ref ./photoml-0.28/xsl/defaults/dflts-test/102.t0000644000175000017500000000303711361730557020010 0ustar brendtbrendtTest merge mode defaults expansion XML for defaults expansion follows: ===def 2001-01-01 the-region the-city the-place 2001-01-02 another-city the-camera-body another-place ===def Expanded reference XML follows: ===ref 2001-01-01 the-region the-city the-place 2001-01-02 the-region another-city another-place the-camera-body ===ref ./photoml-0.28/xsl/defaults/dflts-test/runtests0000755000175000017500000000541211361730557021135 0ustar brendtbrendt#! /bin/sh # This script verifies that the XSL defaults expansion mechanism is # correct by expanding defaults in the set of example files and # comparing the results with an expanded reference. # Copyright © 2005-2008 Brendt Wohlberg # Please see the PhotoML distribution README file for license information # Most recent modification: 14 January 2008 catalog="../../../dtd/catalog.xml" XML_CATALOG_FILES=$catalog export XML_CATALOG_FILES photoxsl="../expand.xsl" doctypub=`grep -o 'doctype-public=\"[^\"]\+\"' $photoxsl | sed 's/doctype-public=//'` # Do a specified test file dfltstest() { # Test file t=$1 # Result handling flag r=$2 # Status message echo "$t ---------------------------------------------" # Files to clean up on exit clean="tmpdef.xml tmpref.xml tmpexp.xml" # Enable ^C signal handling trap "rm -f $clean; exit 1" 2 # Extract test file components def=`cat $t | sed -n '/===def/,/===def/ {/===def/b;p}'` ref=`cat $t | sed -n '/===ref/,/===ref/ {/===ref/b;p}'` # Write temporary file with defaults cat < tmpdef.xml $def EOF # Write temporary expanded reference file cat < tmpref.xml $ref EOF # Initialise failure flag fail=0 # Validate temporary file with defaults if ! xmllint --valid --noout tmpdef.xml; then fail=1 echo "Error validating XML with defaults" fi # Validate temporary expanded reference file if ! xmllint --valid --noout tmpref.xml; then fail=1 echo "Error validating expanded reference XML" fi if [ $fail -eq 0 ]; then # Expand defaults if [ $r -eq 0 ]; then xsltproc --novalid $photoxsl tmpdef.xml > tmpexp.xml 2>/dev/null else xsltproc --novalid $photoxsl tmpdef.xml > tmpexp.xml fi # Check required output handling if [ $r -eq 0 ]; then # Compare output with test reference if ! diff -bB tmpexp.xml tmpref.xml; then fail=1 fi else # Write result to stdout echo "Expand result:" echo cat tmpexp.xml echo fi fi # Clean up rm -f $clean # Disable ^C signal handling trap 'exit 1' 2 return $fail } # If no command line arguments, run all tests # otherwise run specified test fn=0 tn=0 if [ $# -eq 0 ]; then if [ "`echo *.t | grep -o '*'`" = '*' ]; then echo "No *.t test files found" exit 2 fi echo XSL defaults tests for t in *.t; do if ! dfltstest $t 0; then fn=`expr $fn + 1` fi tn=`expr $tn + 1` done echo "Failed $fn out of $tn tests" else if [ -r "$1" ]; then dfltstest $1 1 else echo "Could not open file $1" fi fi if [ "$fn" -gt 0 ]; then exit 1 else exit 0 fi ./photoml-0.28/xsl/defaults/dflts-test/006.t0000644000175000017500000000145711371067137020015 0ustar brendtbrendtTest defaults merge into digimage elements XML for defaults expansion follows: ===def Nikon 2605 3200 ===def Expanded reference XML follows: ===ref 2605 3200 Nikon ===ref ./photoml-0.28/xsl/defaults/defaults.xsl0000644000175000017500000007402711365042111017560 0ustar brendtbrendt 0 ---dflts-> Called dflts:expand-defaults: <--dflts-- ---dflts-> Called dflts:defaults-scope-recursion: dposn: <--dflts-- ---dflts-- ### Entered branch A ---dflts-- ### Entered branch B ---dflts-- ### Entered branch C ---dflts-- ### Entered branch D ---dflts-- ### Entered branch E ---dflts-> Called dflts:replace-defaults: <--dflts-- A defaults element was removed from here during expansion ---dflts-> Called dflts:update-defaults: <--dflts-- ---dflts-> Result of dflts:update-defaults: <--dflts-- ---dflts-> Called dflts:combine-defaults: <--dflts-- ---dflts-> Result of dflts:combine-defaults: <--dflts-- ---dflts-> Called dflts:insert-defaults: <--dflts-- ---dflts-> Variables in dflts:insert-defaults: <--dflts-- ---dflts-> Result of dflts:insert-defaults: <--dflts-- ---dflts-> Called dflts:trailing-elements: <--dflts-- ---dflts-> Result of dflts:trailing-elements: <--dflts-- ---dflts-> Called dflts:construct-subtree: <--dflts-- < > </ > =" " <COMMENT> </COMMENT> <? ?> ./photoml-0.28/xsl/defaults/merge-test/0000755000175000017500000000000011530542510017265 5ustar brendtbrendt./photoml-0.28/xsl/defaults/merge-test/007.t0000644000175000017500000000075211361730557020000 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x fa fc ===x Then, subtree y ===y fb fd ===y Finally, the expected result ===z fa fb fc fd ===z ./photoml-0.28/xsl/defaults/merge-test/014.t0000644000175000017500000000052511361730557017774 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x c1 ===x Then, subtree y ===y d2 e2 c2 ===y Finally, the expected result ===z d2 e2 c1 ===z ./photoml-0.28/xsl/defaults/merge-test/023.t0000644000175000017500000000066011361730557017774 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x b1 e1 ===x Then, subtree y ===y ca2 cb2 d2 ===y Finally, the expected result ===z b1 ca2 cb2 d2 e1 ===z ./photoml-0.28/xsl/defaults/merge-test/013.t0000644000175000017500000000053411361730556017772 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x d1 e1 c1 ===x Then, subtree y ===y c2 ===y Finally, the expected result ===z d1 e1 c1 ===z ./photoml-0.28/xsl/defaults/merge-test/012.t0000644000175000017500000000057611361730557020000 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x d1 e1 c1 ===x Then, subtree y ===y d2 e2 c2 ===y Finally, the expected result ===z d1 e1 c1 ===z ./photoml-0.28/xsl/defaults/merge-test/016.t0000644000175000017500000000043111361730556017771 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x b2 c1 ===x Then, subtree y ===y b1 c2 ===y Finally, the expected result ===z b2 c1 ===z ./photoml-0.28/xsl/defaults/merge-test/022.t0000644000175000017500000000062711361730556017775 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x b1 e1 ===x Then, subtree y ===y ca2 cb2 d2 ===y Finally, the expected result ===z b1 ca2 cb2 d2 e1 ===z ./photoml-0.28/xsl/defaults/merge-test/004.t0000644000175000017500000000054111361730556017770 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x xf ===x Then, subtree y ===y yf ===y Finally, the expected result ===z xf ===z ./photoml-0.28/xsl/defaults/merge-test/019.t0000644000175000017500000000044411361730556020000 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x e1 ===x Then, subtree y ===y b2 c2 d2 ===y Finally, the expected result ===z b2 d2 e1 ===z ./photoml-0.28/xsl/defaults/merge-test/mtest.xsl0000644000175000017500000000077011361730557021171 0ustar brendtbrendt ./photoml-0.28/xsl/defaults/merge-test/018.t0000644000175000017500000000045311364613414017773 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x e1 ===x Then, subtree y ===y b2 c2 d2 ===y Finally, the expected result ===z b2 d2 e1 ===z ./photoml-0.28/xsl/defaults/merge-test/029.t0000644000175000017500000000157311361730556020005 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x xf ===x Then, subtree y ===y yf ===y Finally, the expected result ===z xf ===z ./photoml-0.28/xsl/defaults/merge-test/017.t0000644000175000017500000000041511361730556017774 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x b2 c1 ===x Then, subtree y ===y c2 ===y Finally, the expected result ===z b2 c1 ===z ./photoml-0.28/xsl/defaults/merge-test/003.t0000644000175000017500000000050511361730556017767 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x xf ===x Then, subtree y ===y yf ===y Finally, the expected result ===z xf ===z ./photoml-0.28/xsl/defaults/merge-test/011.t0000644000175000017500000000043511361730556017770 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x ===x Then, subtree y ===y ===y Finally, the expected result ===z ===z ./photoml-0.28/xsl/defaults/merge-test/031.t0000644000175000017500000000077711364615111017773 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x 1 2 3 4 ===x Then, subtree y ===y 5 6 ===y Finally, the expected result ===z 5 6 1 2 3 4 ===z ./photoml-0.28/xsl/defaults/merge-test/009.t0000644000175000017500000000035311361730556017776 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x B ===x Then, subtree y ===y ===y Finally, the expected result ===z B ===z ./photoml-0.28/xsl/defaults/merge-test/015.t0000644000175000017500000000042211361730556017770 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x b2 c1 ===x Then, subtree y ===y b1 c2 ===y Finally, the expected result ===z b2 c1 ===z ./photoml-0.28/xsl/defaults/merge-test/030.t0000644000175000017500000000153011364613500017756 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x ===x Then, subtree y ===y yf ===y Finally, the expected result ===z ===z ./photoml-0.28/xsl/defaults/merge-test/028.t0000644000175000017500000000052311361730557017777 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x x1 b1 c1 ===x Then, subtree y ===y x2 b2 c2 ===y Finally, the expected result ===z x1 b1 c1 ===z ./photoml-0.28/xsl/defaults/merge-test/025.t0000644000175000017500000000052211364613447017774 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x ===x Then, subtree y ===y ===y Finally, the expected result ===z ===z ./photoml-0.28/xsl/defaults/merge-test/002.t0000644000175000017500000000042611361730556017770 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x ===x Then, subtree y ===y ===y Finally, the expected result ===z ===z ./photoml-0.28/xsl/defaults/merge-test/020.t0000644000175000017500000000055011364613431017761 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x b1 e1 ===x Then, subtree y ===y ca2 cb2 d2 ===y Finally, the expected result ===z b1 d2 e1 ===z ./photoml-0.28/xsl/defaults/merge-test/021.t0000644000175000017500000000061111361730557017766 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x b1 e1 ===x Then, subtree y ===y ca2 cb2 d2 ===y Finally, the expected result ===z b1 ca2 cb2 d2 e1 ===z ./photoml-0.28/xsl/defaults/merge-test/001.t0000644000175000017500000000037211361730556017767 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x ===x Then, subtree y ===y ===y Finally, the expected result ===z ===z ./photoml-0.28/xsl/defaults/merge-test/026.t0000644000175000017500000000053311364613462017774 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x ===x Then, subtree y ===y yf ===y Finally, the expected result ===z ===z ./photoml-0.28/xsl/defaults/merge-test/005.t0000644000175000017500000000055511361730556017776 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x xf ===x Then, subtree y ===y yf ===y Finally, the expected result ===z yf xf ===z ./photoml-0.28/xsl/defaults/merge-test/010.t0000644000175000017500000000047211361730556017770 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x E ===x Then, subtree y ===y C D ===y Finally, the expected result ===z C E ===z ./photoml-0.28/xsl/defaults/merge-test/008.t0000644000175000017500000000104211361730557017772 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x fa fc ===x Then, subtree y ===y fb fd ===y Finally, the expected result ===z fa fb fc fd ===z ./photoml-0.28/xsl/defaults/merge-test/027.t0000644000175000017500000000035611361730556020001 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x b2 ===x Then, subtree y ===y b1 ===y Finally, the expected result ===z b2 ===z ./photoml-0.28/xsl/defaults/merge-test/runtests0000755000175000017500000000471411361730557021124 0ustar brendtbrendt#! /bin/sh # This script verifies that the XSL merge function/template is # correct by merging subtrees the set of example files and # comparing the results with reference subtrees. # Copyright © 2005-2008 Brendt Wohlberg # Please see the PhotoML distribution LICENCE file for licence information # Most recent modification: 14 January 2008 # Do a specified test file mergetest() { # Test file t=$1 # Result handling flag r=$2 # Status message echo "$t ---------------------------------------------" # Files to clean up on exit clean="tmp.dtd tmp0.xml tmp1.xml tmp2.xml valid.xsl" # Enable ^C signal handling trap "rm -f $clean; exit 1" 2 # Extract test file components dtd=`cat $t | sed -n '/===dtd/,/===dtd/ {/===dtd/b;p}'` x=`cat $t | sed -n '/===x/,/===x/ {/===x/b;p}'` y=`cat $t | sed -n '/===y/,/===y/ {/===y/b;p}'` z=`cat $t | sed -n '/===z/,/===z/ {/===z/b;p}'` # Extract content model from DTD component elt=`echo "$dtd" | grep -o -E ' tmp.dtd # Build XSLT content model validation template dtdto --valid tmp.dtd > valid.xsl # Write subtrees to be merged to a temporary file cat < tmp0.xml $x $y EOF # Write merge reference subtree to a temporary file cat < tmp1.xml $z EOF # Do merge if [ $r -eq 0 ]; then xsltproc mtest.xsl tmp0.xml > tmp2.xml 2>/dev/null else xsltproc mtest.xsl tmp0.xml > tmp2.xml fi # Initialise failure flag fail=0 # Check required output handling if [ $r -eq 0 ]; then # Compare output with test reference if ! diff -bB tmp1.xml tmp2.xml; then fail=1 fi else # Write result to stdout echo "Merge result:" echo cat tmp2.xml echo fi # Clean up rm -f $clean # Disable ^C signal handling trap 'exit 1' 2 return $fail } # If no command line arguments, run all tests # otherwise run specified test fn=0 tn=0 if [ $# -eq 0 ]; then if [ "`echo *.t | grep -o '*'`" = '*' ]; then echo "No *.t test files found" exit 2 fi echo XSL merge tests for t in *.t; do if ! mergetest $t 0; then fn=`expr $fn + 1` fi tn=`expr $tn + 1` done echo "Failed $fn out of $tn tests" else if [ -r "$1" ]; then mergetest $1 1 else echo "Could not open file $1" fi fi if [ "$fn" -gt 0 ]; then exit 1 else exit 0 fi ./photoml-0.28/xsl/defaults/merge-test/024.t0000644000175000017500000000074311361730556017776 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x b1 ca1 cb1 e1 ===x Then, subtree y ===y ca2 cb2 ===y Finally, the expected result ===z b1 ca2 cb2 ca1 cb1 e1 ===z ./photoml-0.28/xsl/defaults/merge-test/006.t0000644000175000017500000000053611364613376020001 0ustar brendtbrendtFirst, the test DTD ===dtd ===dtd Then, subtree x ===x ===x Then, subtree y ===y yf ===y Finally, the expected result ===z ===z ./photoml-0.28/xsl/defaults/valid.xsl0000644000175000017500000026647311471535444017076 0ustar brendtbrendt valid 1 ./photoml-0.28/xsl/Makefile.in0000644000175000017500000000415611361730556015470 0ustar brendtbrendt# Makefile for PhotoML XSL # Most recent modification: 7 October 2007 prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@/photoml xsldir = ${datadir}/xsl bindir = @bindir@ INSTALL = @INSTALL@ SHELL = @SH@ RM = @RM@ DTDTO = @DTDTO@ DTDVERSION = @DTDVERSION@ SUBDIRS = /defaults /html /upgrade /misc DTDVRSB = misc/create.xsl misc/digital.xsl defaults/expand.xsl .PHONY: all test check clean install uninstall dtdver validxsl all: dtdver validxsl check: test test: dtdver .test.stamp .test.stamp: defaults/*.xsl defaults/valid.xsl @if [ -x "${DTDTO}" ]; then \ (cd defaults/merge-test && ./runtests && echo); \ else \ echo "Cannot run XML merge tests without dtdto"; \ fi @(cd defaults/dflts-test && ./runtests && echo) @touch .test.stamp clean: @if [ -x "${DTDTO}" ]; then \ ${RM} -f defaults/valid.xsl; \ else \ echo "Not cleaning defaults/valid.xsl - no dtdto for rebuild";\ fi @${RM} -f .test.stamp install: @echo "Installing XSL in ${DESTDIR}${datadir}"; \ if [ ! -d ${DESTDIR}${datadir} ]; then \ ${INSTALL} -d ${DESTDIR}${datadir}; \ fi; \ if [ ! -d ${DESTDIR}${xsldir} ]; then \ ${INSTALL} -d ${DESTDIR}${xsldir}; \ fi; \ for d in ${SUBDIRS}; do \ ${INSTALL} -d ${DESTDIR}${xsldir}$$d; \ ${INSTALL} -m 644 .$$d/*.xsl ${DESTDIR}${xsldir}$$d; \ done uninstall: @echo "Uninstalling XSL in ${DESTDIR}${datadir}"; \ for d in ${SUBDIRS}; do \ ${RM} -f ${DESTDIR}${xsldir}$$d/*.xsl; \ rmdir ${DESTDIR}${xsldir}$$d 2>/dev/null; \ done @${RM} -f ${DESTDIR}${xsldir}/*.xsl @-rmdir ${DESTDIR}${xsldir} 2>/dev/null @-rmdir ${DESTDIR}${datadir} 2>/dev/null dtdver: @for f in ${DTDVRSB}; do\ v=`grep -o 'doctype-public=.*' $$f | grep -o '\([\.0-9]\)\+\/\/' | sed 's/\/\///'`;\ if [ "$$v" != "${DTDVERSION}" ]; then\ echo Output DTD $$v of $$f differs from current DTD ${DTDVERSION};\ fi;\ done validxsl: defaults/valid.xsl defaults/valid.xsl: ../dtd/photo.dtd @if [ -x "${DTDTO}" ]; then \ ${DTDTO} --valid ../dtd/photo.dtd > defaults/valid.xsl; \ else \ echo "Cannot build DTD validation XSLT using dtdto"; \ false; \ fi ./photoml-0.28/Makefile.in0000644000175000017500000001447111467604060014660 0ustar brendtbrendt# Makefile for PhotoML # Most recent modification: 14 January 2008 prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@/photoml bindir = @bindir@ mandir = @mandir@ SHELL = @SH@ RM = @RM@ INSTALL = @INSTALL@ RPM = @RPM@ RPMBUILD = @RPMBUILD@ RPMLINT = @RPMLINT@ DEBUILD = @DEBUILD@ DEBSIGN = @DEBSIGN@ DEBSIGS = @DEBSIGS@ TEXTFILES = INSTALL README LICENCE ChangeLog NEWS docs/pmldoc.txt DISTSRC = configure.ac configure Makefile.in install-sh\ README index.html INSTALL LICENCE ChangeLog NEWS version\ dtd/*.dtd dtd/*.in xml/*.xml xml/*.mod xml/*.in\ xml/mkindex xsd/*.in xsd/README\ xsl/*.in xsl/defaults/*.xsl xsl/defaults/merge-test/mtest.xsl\ xsl/defaults/dflts-test/*.t xsl/defaults/dflts-test/runtests\ xsl/defaults/merge-test/*.t xsl/defaults/merge-test/runtests\ xsl/html/*.xsl xsl/misc/*.xsl xsl/upgrade/*.xsl\ tools/*.in tools/*.1 tools/pmlexpand tools/pmlgrep\ tools/pmlindex tools/pmltrans tools/pmltoxmp tools/pmlupgrade\ tools/pmlvalid tools/pmldigital tools/pmlcreate \ tools/test/runtests tools/test/*.sh tools/test/*.jpg\ tools/test/*.bz2 docs/*.in docs/*.xsl docs/*.css docs/*.xml\ docs/sections/*.in docs/sections/*.xml DISTGEN = date xsd/*.xsd docs/pmldoc.html docs/pmldoc.html docs/pmldoc.pdf\ docs/pmldoc.txt DISTFILES = ${DISTSRC} ${DISTGEN} SUBDIRS = dtd xsl tools xml docs xsd SUBDIRSALL = $(SUBDIRS:=.all) SUBDIRSTST = $(SUBDIRS:=.tst) SUBDIRSCLN = $(SUBDIRS:=.cln) SUBDIRSINS = $(SUBDIRS:=.ins) SUBDIRSUNI = $(SUBDIRS:=.uni) PKGNAME = photoml VERSION = @PKGVERSION@ DISTDIR = ${PKGNAME}-${VERSION} DISTTGZ = dist/${DISTDIR}.tar.gz DISTZIP = dist/${DISTDIR}.zip RPMVER = @RPMVER@ RPMBASE = ${PKGNAME}-${RPMVER} RPMARCH = noarch DISTRPM = dist/${RPMBASE}.src.rpm dist/${RPMBASE}.${RPMARCH}.rpm DEBVER = @DEBVER@ DEBBASE = ${PKGNAME}_${DEBVER} DEBARCH = all DISTDEB = dist/${PKGNAME}_${VERSION}.orig.tar.gz dist/${DEBBASE}.diff.gz \ dist/${DEBBASE}.dsc dist/${DEBBASE}_${DEBARCH}.deb .PHONY: all test check install uninstall clean distclean listing \ dist dist-zip dist-rpm dist-rpm-sign dist-deb dist-deb-sign \ ${SUBDIRSALL} ${SUBDIRSTST} ${SUBDIRSCLN} ${SUBDIRSINS} ${SUBDIRSUNI} all: ${SUBDIRSALL} ${SUBDIRSALL}: @${MAKE} -C $(@:%.all=%) all check: test test: all ${SUBDIRSTST} ${SUBDIRSTST}: @${MAKE} -C $(@:%.tst=%) test clean: ${SUBDIRSCLN} ${SUBDIRSCLN}: @${MAKE} -C $(@:%.cln=%) clean distclean: clean @${RM} -f date config.*; ${RM} -rf dist @find . -name "Makefile.in" | sed -e 's/\.in$$//' | xargs ${RM} install: ${SUBDIRSINS} all ${SUBDIRSINS}: @if [ ! -d ${DESTDIR}${datadir} ]; then \ ${INSTALL} -d ${DESTDIR}${datadir}; \ fi @${INSTALL} -m 644 version ${DESTDIR}${datadir}; \ if [ -f 'date' ]; \ then ${INSTALL} -m 644 date ${DESTDIR}${datadir}; \ fi @${MAKE} -C $(@:%.ins=%) install uninstall: ${SUBDIRSUNI} ${SUBDIRSUNI}: @${RM} -f ${DESTDIR}${datadir}/version ${DESTDIR}${datadir}/date @${MAKE} -C $(@:%.uni=%) uninstall; \ listing: @-enscript -E --word-wrap --header='$$N|$$D{%F}|Page $$% of $$=' \ -jU2 -o listing.ps configure.ac Makefile.in README NEWS \ tools/Makefile.in tools/pmlcreate tools/pmldigital \ tools/pmlexpand tools/pmlgrep tools/pmlindex tools/pmltrans \ tools/pmlupgrade tools/pmlvalid tools/test/*.sh \ tools/test/runtests xsl/Makefile.in \ xsl/defaults/debug.xsl xsl/defaults/defaults.xsl \ xsl/defaults/expand.xsl xsl/defaults/merge.xsl \ xsl/html/*.xsl xsl/misc/*.xsl xsl/upgrade/*.xsl \ docs/Makefile.in dtd/*.in dtd/*.dtd xsd/Makefile.in dist: test ${DISTTGZ} ${DISTTGZ}: ${DISTSRC} @date +"%F %H:%M" > date;\ ${RM} -rf ${DISTTGZ} dist/${DISTDIR};\ mkdir -p dist/${DISTDIR};\ (tar cf - ${DISTFILES}) | (cd dist/${DISTDIR} && tar xfp -);\ (cd dist; tar -cf ${DISTDIR}.tar ./${DISTDIR};\ gzip -9 ${DISTDIR}.tar);\ ${RM} -rf dist/${DISTDIR} dist-zip: ${DISTZIP} ${DISTZIP}: ${DISTTGZ} @(cd dist && tar -zxf ${DISTDIR}.tar.gz);\ find dist/${DISTDIR} -regex ".*\.\(xml\|html\|css\|dtd\|xsd\|xsl\)" \ -exec unix2dos -o {} 2>/dev/null \; ;\ for txtfile in ${TEXTFILES}; do\ mv dist/${DISTDIR}/$$txtfile dist/${DISTDIR}/$$txtfile.txt;\ unix2dos -o dist/${DISTDIR}/$$txtfile.txt 2>/dev/null;\ done;\ (cd dist && zip -q -l -r ${DISTDIR}.zip ${DISTDIR});\ ${RM} -rf dist/${DISTDIR} dist-rpm: ${DISTRPM} %${RPMVER}.src.rpm %${RPMVER}.${RPMARCH}.rpm: %${VERSION}.tar.gz @if [ "${RPMBUILD}" != '' -a -d redhat ]; then\ cp redhat/rpm* redhat/${PKGNAME}.spec dist;\ mkdir -p dist/rpmbuild/BUILD dist/rpmbuild/tmp \ dist/rpmbuild/SRPMS dist/rpmbuild/RPMS;\ cp ${DISTTGZ} dist/rpmbuild;\ cd dist;\ if ${RPMBUILD} -ba --rcfile rpmrc ${PKGNAME}.spec; then\ cp rpmbuild/RPMS/*.rpm rpmbuild/SRPMS/*.rpm .;\ else\ echo "RPM build failed";\ exit 1;\ fi;\ ${RM} -rf rpmbuild rpmmacros rpmrc ${PKGNAME}.spec;\ if [ "${RPMLINT}" != '' ]; then\ ${RPMLINT} -v *.rpm;\ fi;\ else\ echo "Cannot build RPM packages";\ exit 1;\ fi dist-rpm-sign: dist-rpm @if [ "${RPM}" != '' ]; then\ cp redhat/rpm* dist;\ cd dist;\ ${RPM} --rcfile rpmrc --addsign `echo ${DISTRPM} | \ sed 's+dist/++g'`;\ ${RM} -rf rpmbuild;\ ${RM} -f rpm*;\ else\ echo "Cannot sign RPM packages: required tool rpm is not available";\ exit 1;\ fi dist-deb: ${DISTDEB} %_${VERSION}.orig.tar.gz %_${DEBVER}.diff.gz %_${DEBVER}.dsc \ %_${DEBVER}_${DEBARCH}.deb: %-${VERSION}.tar.gz @if [ "${DEBUILD}" != '' -a -d debian ]; then\ cp ${DISTTGZ} dist/${PKGNAME}_${VERSION}.orig.tar.gz;\ zcat ${DISTTGZ} | (cd dist && tar -xf -);\ mkdir -p dist/${DISTDIR}/debian;\ (cd debian && tar cf - --exclude=CVS . \ | (cd ../dist/${DISTDIR}/debian && tar xBf -));\ (cd dist/${DISTDIR} && \ ${DEBUILD} -i -us -uc -sa -S && \ ${DEBUILD} -i -us -uc -b);\ ${RM} -rf dist/${DISTDIR};\ else\ echo "Cannot build .deb packages";\ exit 1;\ fi dist-deb-sign: dist-deb @if [ "${DEBSIGN}" != '' -a "${DEBSIGS}" != '' ]; then\ ${DEBSIGN} -k4EB5E2C9 dist/${DEBBASE}_source.changes;\ ${DEBSIGN} -k4EB5E2C9 dist/${DEBBASE}_${DEBARCH}.changes;\ ${DEBSIGS} --sign=gpg --default-key=osspkg@gmail.com\ dist/${DEBBASE}_${DEBARCH}.deb;\ else\ echo "Cannot sign .deb packages: required tools debsign and debsigs are not available";\ exit 1;\ fi ./photoml-0.28/xsd/0000755000175000017500000000000011530542510013372 5ustar brendtbrendt./photoml-0.28/xsd/photo.xsd0000644000175000017500000021610511471535475015270 0ustar brendtbrendt ./photoml-0.28/xsd/README0000644000175000017500000000066611371067376014301 0ustar brendtbrendtThis directory contains an XML Schema automatically generated from the Photo Description Markup Language DTD. Note that the DTD is the reference definition; this XSD is currently not supported, and is provided for the convenience of those not familiar with DTD syntax. XSD files: photo.xsd PhotoML XSD generated by trang (see http://www.thaiopensource.com/relaxng/trang.html) xml.xsd Subsidiary XSD generated by trang ./photoml-0.28/xsd/xml.xsd0000644000175000017500000000043411471535474014732 0ustar brendtbrendt ./photoml-0.28/xsd/Makefile.in0000644000175000017500000000216111371066416015450 0ustar brendtbrendt# Makefile for PhotoML XSD demonstration # Most recent modification: 7 May 2010 SHELL = @SH@ RM = @RM@ ECHO = @ECHO@ TRANG = @TRANG@ DTDVERSION = @DTDVERSION@ XSDHDR1 = "\n" .PHONY: all test clean install uninstall all: photo.xsd photo.xsd: ../dtd/photo.dtd @if [ -x "${TRANG}" ]; then\ ${TRANG} -I dtd -O xsd ../dtd/photo.dtd photo.xsd;\ verstr=${DTDVERSION};\ xmldecl=`cat photo.xsd | grep "^ photo.xsd;\ ${ECHO} -e ${XSDHDR1} "(version $$verstr)\n" ${XSDHDR2}>>photo.xsd;\ cat tmp.xsd | sed -e 's/^//' >> photo.xsd;\ ${RM} -f tmp.xsd;\ else\ echo Cannot generate XSD from DTD using trang;\ fi test: clean: @if [ -x "${TRANG}" ]; then\ ${RM} -f photo.xsd xml.xsd;\ else\ echo "Not cleaning photo.xsd - can't find tool for rebuild";\ fi install: uninstall: ./photoml-0.28/version0000644000175000017500000000000511530531405014200 0ustar brendtbrendt0.28 ./photoml-0.28/tools/0000755000175000017500000000000011530542510013734 5ustar brendtbrendt./photoml-0.28/tools/pmldigital.10000644000175000017500000000466411471543721016167 0ustar brendtbrendt.TH pmldigital 1 "17 October 2009" .SH NAME pmldigital \(hy construct PhotoML files from EXIF data in digital images from a digital camera, or from data embedded in the output of a film scanner (only Nikon Coolscan scanners are currently supported) .SH SYNOPSIS .B pmldigital [\fB\-h\fR] [\fB\-b\fR] [\fB\-i\fR] [\fB\-f\fR] [\fB\-d\fR] [\fB\-r\fR] [\fB\-x\fR] ([\fB\-s\fR] | [\fB\-g\fR group\(hyid]) [\fB\-t\fR date\(hytime\(hyoffset] \fIimagefile\fR [\fIimagefile\fR] ... .SH DESCRIPTION \fIpmldigital\fP constructs PhotoML files from EXIF data in digital images from a digital camera, or from the private tags in TIFF files written by the Nikon Scan film scanner software. .SH OPTIONS \fIpmldigital\fP accepts the following options: .TP 8 .B \-h Display usage information. .TP 8 .B \-b Include file basename only in output. .TP 8 .B \-i Output intermediate XML representation of EXIF data. .TP 8 .B \-f Fast output excluding computation of image and file md5 hashes. .TP 8 .B \-d Construct digimage descriptions of scanned images instead of digital descriptions of digital camera images. .TP 8 .B \-r Skip JPEG images with same basename as a RAW image .TP 8 .B \-x For each specified image file, look for an XMP file with the same path and filename, but with a .xmp extension. If found, tags from this file override those in the main image file. .TP 8 .B \-s Set group and frame (and image) ids from standard filenames. .TP 8 .B \-g group\(hyid Specify group id for the set of image files. .TP 8 .B \-t date\(hytime\(hyoffset Apply an offset to date/time values in EXIF data. The offset string is in the format accepted by the ParseDateDelta function of the Date::Manip Perl module, for example "+1y +2m +3d \-2h +4mn +6s" for an offset adding 1 year, 2 months, and 3 days, subtracting 2 hours, and adding 4 minutes and 6 seconds. .SH AUTHOR Brendt Wohlberg .SH COPYRIGHT Copyright \(co 2005\(hy2009 Brendt Wohlberg This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .SH "SEE ALSO" .BR Image::ExifTool (3), .BR Date::Manip (3), .BR md5sum (1), .BR xsltproc (1) ./photoml-0.28/tools/pmlcreate0000755000175000017500000003242411460360670015652 0ustar brendtbrendt#! /usr/bin/perl # This script creates initial PhotoML descriptions of film rolls using # data recorded in a simple text format # Copyright © 2005-2010 Brendt Wohlberg # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License at # http://www.gnu.org/licenses/gpl-2.0.txt. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # Most recent modification: 22 October 2010 use strict; use File::Basename; use Getopt::Std; use Date::Manip; # Set up path variables my $pmlpath = dirname($0) . "/.."; my $xsl = "$pmlpath/xsl/misc/create.xsl"; # Ensure xsltproc is available die "pmlcreate: error executing xstlproc\n" if (`which xsltproc 2>/dev/null` eq ''); # Parse command line switches my $ustr = <{'e'}) { print input_example(); exit 0; } die "$ustr" if (defined $options->{'h'} or @ARGV == 0); my $xout = defined ($options->{'x'}); # Read input file lines my $input = @ARGV[0]; open(FH, "$input") or die "pmlcreate: failed to open $input\n"; my $data = {}; my ($line, $section, $subsection); while ($line = ) { next if ($line =~ /(^#)|(^\s*$)/); if ($line =~ /^\+([^\+]+)\+$/) { $section = $1; $data->{$section} = {}; $subsection = undef; next; } if ($line =~ /^\+{2}([^\+]+)\+{2}$/) { $subsection = $1; $data->{$section}->{$subsection} = {}; next; } if ($line =~ /^\s*(\S+)\s+(.*)\s*$/) { if (defined $subsection) { $data->{$section}->{$subsection}->{$1} = $2; } else { $data->{$section}->{$1} = $2; } } } close(FH); # Set up hashes for group id and collection data my $initnum = $data->{'Config'}->{'initnum'}; my $collect = $data->{'Config'}->{'collect'}; # Parse camera descriptions my $cameras = {}; my ($c, $l); foreach $c ( keys %{$data->{'Camera'}} ) { $l = $data->{'Camera'}->{$c}; if ($l =~ /([^\s\"]+|\"[^\"]+\")\s+([^\s\"]+|\"[^\"]+\")/) { $cameras->{$c}->{'make'} = $1; $cameras->{$c}->{'model'} = $2; if ($cameras->{$c}->{'model'} =~ /\"([^\"]+)\"/) { $cameras->{$c}->{'model'} = $1; } } } # Parse film descriptions my $films = {}; my $f; foreach $f ( keys %{$data->{'Film'}} ) { $l = $data->{'Film'}->{$f}; if ($l =~ /([^\s\"]+|\"[^\"]+\")\s+(\"[^\"]+\"|\S+)\s+(\S+)/) { $films->{$f}->{'make'} = $1; $films->{$f}->{'name'} = $2; $films->{$f}->{'speed'} = $3; if ($films->{$f}->{'name'} =~ /\"([^\"]+)\"/) { $films->{$f}->{'name'} = $1; } } } # Parse roll descriptions my $rolls = {}; my $r; foreach $r ( keys %{$data->{'Load'}} ) { $l = $data->{'Load'}->{$r}; if ($l =~ /(\S+)\s+(\S+)\s+(\d{4}-\d{2}-\d{2})\s+(\d{4}-\d{2}-\d{2})\s+(\d+)(?:\s+(\d{4}-\d{2}))?/) { $rolls->{$r}->{'camera'} = $1; $rolls->{$r}->{'film'} = $2; $rolls->{$r}->{'load'} = $3; $rolls->{$r}->{'unload'} = $4; $rolls->{$r}->{'nframes'} = $5; $rolls->{$r}->{'expire'} = $6; $rolls->{$r}->{'defc'} = {}; } } # Parse day-end-frame-count section my $d; foreach $d ( keys %{$data->{'DEFC'}} ) { $l = $data->{'DEFC'}->{$d}; while ($l =~ /(\S+:)?(\d+),(\d*)\s*/) { $rolls->{$2}->{'defc'}->{$d} = $3; $l = $'; } } # Parse laboratory section my $lab = {}; foreach $c ( keys %{$data->{'Lab'}} ) { $l = $data->{'Lab'}->{$c}; if ($l =~ /([^\s\"]+|\"[^\"]+\")\s+([^\s\"]+|\"[^\"]+\")/) { $lab->{$c}->{'name'} = $1; $lab->{$c}->{'address'} = $2; if ($lab->{$c}->{'name'} =~ /\"([^\"]+)\"/) { $lab->{$c}->{'name'} = $1; } if ($lab->{$c}->{'address'} =~ /\"([^\"]+)\"/) { $lab->{$c}->{'address'} = $1; } } } # Parse processing section my $proc = {}; my $p; foreach $p ( keys %{$data->{'Processing'}} ) { $l = $data->{'Processing'}->{$p}; if ($l =~ /(\S+)\s+(\S+)\s+(\d{4}-\d{2}-\d{2})/) { $proc->{$p}->{'lab'} = $1; $proc->{$p}->{'tag'} = $2; $proc->{$p}->{'date'} = $3; } } # Parse exposure section my $exp = {}; foreach $r ( keys %{$data->{'Exposure'}} ) { next if (ref($data->{'Exposure'}->{$r}) ne "HASH"); foreach $f ( keys %{$data->{'Exposure'}->{$r}} ) { $exp->{$r} = {} if (!defined $exp->{$r}); $l = $data->{'Exposure'}->{$r}->{$f}; if ($l =~ /([\d\.]+\"?)\s+f([\d\.]+)(?:\s+(\-?\+?[\d\.]+))?/) { $exp->{$r}->{$f}->{'shutter'} = $1; $exp->{$r}->{$f}->{'aperture'} = $2; $exp->{$r}->{$f}->{'expcomp'} = $3; if ($exp->{$r}->{$f}->{'shutter'} =~ /(\d+)\"/) { $exp->{$r}->{$f}->{'shutter'} = $1; } else { $exp->{$r}->{$f}->{'shutter'} = "1/$1"; } } } } # Create a description file for each roll my ($gid, $pml, $pipe, $cattr, $f0, $f1, $f2, $y, $nd); foreach $r ( sort {$a <=> $b} keys %$rolls ) { # If gid defined, get next gid, otherwise initialise it $gid = nextgid($rolls->{$r}->{'load'}, $gid, 'r', $initnum); # Open file after ensuring it doesn't already exist $pml = "$gid.xml"; die "pmlcreate: file $pml exists\n" if (-f $pml); $pipe = ($xout)?"> $pml":"| xsltproc $xsl - > $pml"; open(FH, "$pipe") or die "pmlcreate: failed to open pipe or file for writing\n"; $cattr = (defined $collect)?" collect=\'$collect\'":''; print FH "\n"; # Emit roll gid and load and unload dates print FH " {$r}->{'load'}\' ". "unload=\'$rolls->{$r}->{'unload'}\'>\n"; # Emit camera body information $c = $rolls->{$r}->{'camera'}; print FH " {$c}->{'make'}\" ". "model=\"$cameras->{$c}->{'model'}\"/>\n"; # Emit film information $f = $rolls->{$r}->{'film'}; print FH " {$f}->{'make'}\" ". "name=\"$films->{$f}->{'name'}\" ". "speed=\"$films->{$f}->{'speed'}\" ". "expire=\"$rolls->{$r}->{'expire'}\"/>\n"; # Emit film processing information $p = $proc->{$r}; $a = $lab->{$p->{'lab'}}; print FH " {'name'}\" ". "address=\"$a->{'address'}\" tag=\"$p->{'tag'}\" ". "date=\"$p->{'date'}\"/>\n"; print FH " ".$data->{'FN'}->{$r}."\n"; # Emit exposure information for each frame foreach $f ( sort {$a <=> $b} keys %{$exp->{$r}} ) { print FH " {$r}->{$f}->{'aperture'}\" ". "shutter=\"$exp->{$r}->{$f}->{'shutter'}\" ". "exp-comp=\"$exp->{$r}->{$f}->{'expcomp'}\"/>\n"; } # Compute and emit frame date information $nd = $rolls->{$r}->{'load'}; $f0 = 1; foreach $d ( sort keys %{$rolls->{$r}->{'defc'}} ) { $f1 = $rolls->{$r}->{'defc'}->{$d}; if ($f1 > $f0) { $f2 = $f1 - 1; print FH " \n"; $f0 = $f1; } elsif ($f1 == '') { $f2 = $rolls->{$r}->{'nframes'}; print FH " \n"; $f0 = $f2 + 1; # Increment by one to avoid this frame being written # again in last frame handling section below } $nd = nextday($d); } # Handle last frames on roll (after last specified DEFC for that roll) if ($f0 <= $rolls->{$r}->{'nframes'}) { $f2 = $rolls->{$r}->{'nframes'}; print FH " \n"; } print FH " \n"; print FH "\n"; close(FH); } exit 0; # Compute the date of the following day for a date in format YYYY-MM-DD sub nextday { my $date = shift; return UnixDate(DateCalc(ParseDate($date),"+ 1 day"), "%Y-%m-%d"); } # Determine the gid for the next roll sub nextgid { my $load = shift; my $gid0 = shift; my $c0 = shift; my $n0 = shift; my $gid = undef; if ($load =~ /^(\d{4})-/) { my $ly = $1; my ($y, $c, $n); if ($gid0 =~ /^(\d{4})(.)(\d+)$/) { $y = $1; $c = $2; $n = $3 + 1; if ($ly > $y) { $y = $ly; $n = 1; } } else { $y = $ly; $c = (defined $c0)?$c0:'r'; $n = (defined $n0)?$n0:1; } $gid = sprintf("%04d%s%02d",$y, $c, $n); } return $gid; } # Construct an example input file sub input_example { my $ex = <+, and the end of which is indicated by # the start of the next section. An optional subsection is indicated # by ++++, the end being indicated by the start of # the next subsection or section. Within each section (and # subsection), each significant line consists of a number of # whitespace separated fields, the first playing the role of a lookup # index for the remainder of the line. Any line beginning with a '#' # character is a comment. # # # The 'Config' section specifies global options. An initial roll # number is specified by 'initnum', and a collection name is specified # by 'collect'. +Config+ initnum 07 collect Mexico-2004 # Each line in the 'Camera' section defines a camera body label # followed by the manufacturer and model names. Any of these fields # containing whitespace should be delimited by double quote # characters '"'. +Camera+ NikonF80 Nikon F80 YashicaD Yashica D # Each line in the 'Film' section defines a film label followed by the # manufacturer, name, and speed. Any of these fields containing # whitespace should be delimited by double quote characters '"'. +Film+ Provia100F Fuji "Provia 100F" 100 Provia400F Fuji "Provia 400F" 400 IlfordFP4 Ilford FP4+ 125 # Each line of the 'Load' section defines a roll number, followed by # the corresponding camera body label and film label, load and unload # date, number of frames on that roll, and (optional) film expiry date. +Load+ 1 NikonF80 Provia100F 2004-12-27 2004-12-30 37 2005-10 2 YashicaD Provia100F 2004-12-27 2004-12-31 12 2006-01 3 NikonF80 Provia400F 2004-12-30 2005-01-02 37 4 YashicaD IlfordFP4 2004-12-31 2005-01-04 12 2006-04 5 NikonF80 Provia100F 2005-01-03 2005-01-05 37 # Each line of the 'DEFC' (Day End Frame Count) section specifies a # date followed by a list of roll and frame count specifications for # each camera body. Each specification has the form # ",", or optionally # ":,", where # is the last frame counter index on the specified date. A camera body # with a completed but loaded roll is indicated by # ":," or ",". +DEFC+ 2004-12-27 NikonF80:1,5 YashicaD:2,4 # An equivalent specification for the above line would be # 2004-12-27 1,5 2,4 2004-12-28 NikonF80:1,12 YashicaD:2,7 2004-12-29 NikonF80:1,25 YashicaD:2,8 2004-12-30 NikonF80:3,8 YashicaD:2,11 2004-12-31 NikonF80:3,21 YashicaD:4,5 2005-01-01 NikonF80:3,37 YashicaD:4,8 2005-01-02 YashicaD:4,10 2005-01-03 NikonF80:5,5 YashicaD:4, # ^^^^^^^^^^^ # Indicates that the roll was completed but still loaded at the end of # the day 2005-01-04 NikonF80:5,19 # Each line in the 'Lab' section defines a processing laboratory label # followed by the laboratory name and address. Any of these fields # containing whitespace should be delimited by double quote # characters '"'. +Lab+ Carl "Carl's Darkroom" "Albuquerque, NM" Desert "Desert Photo" "Albuquerque, NM" # Each line of the 'Processing' section specifies a roll number # followed by a processing laboratory label, double check tag number, # and processing date. +Processing+ 1 Carl 2701 2005-01-10 2 Carl 2702 2005-01-10 3 Carl 2703 2005-01-10 4 Desert 7285 2005-01-11 5 Carl 2704 2005-01-10 # Each line of the 'FN' (Frame Numbers) section specifies a roll # number followed by a consecutive list of frame labels (present on # the film itself). +FN+ 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 E 2 1 3 5 6 8 9 11 12 14 15 17 19 3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 E 4 1 2 3 4 5 6 7 8 9 10 11 12 5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 E # Each subsection of the 'Exposure' section specifies a roll # number. Each line of one of these subsections specifies a frame # number followed by the shutter speed (either a number x representing # 1/x seconds, or x" representing x seconds), aperture (the character # 'f' followed by the relevant numerical value), and exposure # compensation. +Exposure+ ++1++ 2 90 f8 0.0 8 250 f11 0.0 14 20 f16 0.0 20 8 f22 0.0 26 45 f11 0.0 32 30 f13 0.0 ++3++ 2 90 f8 0.0 8 180 f8 0.0 14 350 f5.6 0.0 20 60 f8 0.0 26 3" f16 -1.0 32 60 f8 0.0 ++5++ 2 350 f8 0.0 8 8 f5.6 0.0 14 15 f8 0.0 20 180 f5.6 0.0 26 60 f5.6 0.0 32 30 f19 0.0 EOF return $ex; } ./photoml-0.28/tools/pmlupgrade.10000644000175000017500000000210411471543756016174 0ustar brendtbrendt.TH pmlupgrade 1 "14 January 2008" .SH NAME pmlupgrade \(hy upgrade PhotoML XML files to latest DTD version .SH SYNOPSIS .B pmlupgrade [\fB\-h\fR] [\fB\-n\fR] \fIxmlfile\fR [\fIxmlfile\fR] ... .SH DESCRIPTION \fIpmlupgrade\fP is a shell script that upgrades PhotoML XML files to the latest DTD version. .SH OPTIONS \fIpmlupgrade\fP accepts the following options: .TP 8 .B \-h Display usage information. .TP 8 .B \-n Preserve numeric character references instead of converting them into the referenced character. .SH AUTHOR Brendt Wohlberg .SH COPYRIGHT Copyright \(co 2003\(hy2007 Brendt Wohlberg This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .SH "SEE ALSO" .BR pmlvalid (1) ./photoml-0.28/tools/pmlexpand0000755000175000017500000000405611362604605015666 0ustar brendtbrendt#! /bin/sh # This script expands defaults elements in PhotoML files # Copyright © 2003-2010 Brendt Wohlberg # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License at # http://www.gnu.org/licenses/gpl-2.0.txt. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # Most recent modification: 18 April 2010 pmlpath="`echo $0 | sed -e 's|/pmlexpand||'`/.." if [ ! "`which xsltproc 2>/dev/null`" ]; then echo "pmlexpand: error executing xstlproc" >&2 exit 1 fi usage() { cat <&2 usage: pmlexpand [-h] [-a | -b] infile [outfile] -h Display usage information -a Replace defaults elements with a comment indicating the position from which they were removed. -b Comment out the defaults elements. EOF } xslparam='' while [ $# -ge 1 ]; do case $1 in -a) xslparam='--stringparam replacement-policy indicate' ;; -b) xslparam='--stringparam replacement-policy comment' ;; -*) usage; exit 1 ;; *) infile=$1; outfile=$2; break ;; esac shift done if [ "$infile" = '' ]; then usage; exit 1 fi if [ ! -f "$infile" -o ! -r "$infile" ]; then echo "pmlexpand: could not open file $infile" >&2 exit 1 fi dtdpub=`grep DOCTYPE $infile | grep -o -e '-\/\/.*EN'`; dtdtyp=`echo $dtdpub | grep -o -e '//DTD[^/]*//' | cut -d ' ' -f 2` if [ "$dtdtyp" != 'PhotoML' ]; then echo "pmlexpand: input document type not recognised" >&2 exit 1 fi xsl=$pmlpath/xsl/defaults/expand.xsl if [ -r /etc/xml/catalog -a "$XML_CATALOG_FILES" = '' ]; then XML_CATALOG_FILES=/etc/xml/catalog fi XML_CATALOG_FILES="$pmlpath/dtd/catalog.xml $XML_CATALOG_FILES" export XML_CATALOG_FILES unset SGML_CATALOG_FILES if [ "$outfile" = '' ]; then xsltproc $xslparam $xsl $infile else xsltproc -o $outfile $xslparam $xsl $infile fi exit $? ./photoml-0.28/tools/pmlvalid0000755000175000017500000002466211361730562015514 0ustar brendtbrendt#! /usr/bin/perl # This script validates collections of PhotoML files # Copyright © 2005-2007 Brendt Wohlberg # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License at # http://www.gnu.org/licenses/gpl-2.0.txt. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # Most recent modification: 14 January 2008 use strict; use File::Basename; use Getopt::Std; # Set up path variables my $pmlpath = dirname($0) . "/.."; my $xsl = "$pmlpath/xsl/misc/valid.xsl"; my $dtd = "$pmlpath/dtd/photo.dtd"; if (-r '/etc/xml/catalog' and $ENV{'XML_CATALOG_FILES'} eq '') { $ENV{'XML_CATALOG_FILES'} = "/etc/xml/catalog"; } $ENV{'XML_CATALOG_FILES'} = "$pmlpath/dtd/catalog.xml " . $ENV{'XML_CATALOG_FILES'}; undef $ENV{'SGML_CATALOG_FILES'}; # Ensure xmllint and xmllint are available die "pmlvalid: error executing xmllint\n" if (`which xmllint 2>/dev/null` eq ''); die "pmlvalid: error executing xstlproc\n" if (`which xsltproc 2>/dev/null` eq ''); # Set up DTD version verification my $dtdver = getdtdver($dtd); my $pubid = "-//BW//DTD PhotoML $dtdver//EN"; # Handle command line options my $usagetext = <{'h'}) {print STDERR $usagetext; exit(0)}; if (@ARGV == 0) {print STDERR $usagetext; exit(1)}; my $ibpath = (defined $opts->{'b'})?"$opts->{'b'}/":''; # Stage 1: validate each file with respect to the PhotoML DTD my $nerr1 = 0; my ($f, $lintcmd); foreach $f ( @ARGV ) { die "pmlvalid: could not read file $f\n" if (!-f $f or !-r $f); $lintcmd = ['xmllint', '--valid', '--noout', $f]; system(@$lintcmd) == 0 or $nerr1++; } # Exit if there are any stage 1 errors exit(1) if ($nerr1 > 0); # Stage 2: verify correct PhotoML DTD version my $nerr2 = 0; foreach $f ( @ARGV ) { if ($pubid ne getdoctype($f)) { print "$f: DTD version mismatch with installed PhotoML version\n"; $nerr2++; } } # Exit if there are any stage 2 errors exit(2) if ($nerr2 > 0); # Stage 3: impose additional constraints my $nerr3 = 0; my ($l, $t, $i, $p); my $id = {}; my $ih = {}; my $fh = {}; my $hr = {}; my $co = {}; foreach $f ( @ARGV ) { # Open pipe from xsltproc open(IPH, "xsltproc $xsl $f |") or die "pmlvalid: pipe open failed\n"; # Parse xsltproc output while ($l = ) { # Get a line from the pipe chomp($l); if ($l =~ /^([\w-]+):\s+/) { # New roll, sheet, digital, or digimage element $t = $1; $id->{$t} = {} if (!defined $id->{$t}); $i = join(' ',split(/\s+/, $')); if (defined $id->{$t}->{$i}) { # Duplicate id error report_id_occur_error($f, $t, $i, $id->{$t}->{$i}); $nerr3++; } else { # Record file $f in which element $t with id $i encountered $id->{$t}->{$i} = $f; } } elsif ($l =~ /^\s+([\w-]+):\s+/) { # Data associated with the current roll, sheet, digital, # or digimage element $p = parse_quoted_list($'); if ($1 eq 'error') { # An error not associated with non-uniqueness of id, image-hash etc. report_error($f, $t, $i, $p); $nerr3++; } elsif ($1 eq 'href') { # An href to an image file if (defined $hr->{$p->[0]}) { # Duplicate image href error report_href_occur_error($f, $t, $i, $hr->{$p->[0]}); $nerr3++; } else { # Record element id $id in which href $p->[0] was encountered $hr->{$p->[0]} = $i; } } elsif ($1 eq 'image-hash') { # An image-hash of an image file if (defined $ih->{$p->[0]}) { # Duplicate image hash error report_ihash_occur_error($f, $t, $i, $p->[0], $ih->{$p->[0]}, $id->{$t}->{$ih->{$p->[0]}}); $nerr3++; } else { # Record element id $i in which image hash $p->[0] was encountered $ih->{$p->[0]} = $i; } } elsif ($1 eq 'file-hash') { # A file-hash of an image file if (defined $fh->{$p->[0]}) { # Duplicate file hash error report_fhash_occur_error($f, $t, $i, $ih->{$p->[0]}); $nerr3++; } else { # Record element id $i in which file hash $p->[0] was encountered $fh->{$p->[0]} = $i; } } elsif ($1 eq 'collection') { # A collection associated with a roll, sheet, or digital element $co->{$p->[0]} = {} if (!defined $co->{$p->[0]}); if (defined $co->{$p->[0]}->{$p->[1]}) { # Duplicate collection cgid error report_collect_occur_error($f, $t, $i, $p->[0], $p->[1], $co->{$p->[0]}->{$p->[1]}, $id->{$t}->{$co->{$p->[0]}->{$p->[1]}}); $nerr3++; } else { # Record element $t and id $i in which collection with # id $p->[0] and cgid $p->[1] encountered $co->{$p->[0]}->{$p->[1]} = [$t, $i]; } } else { # Unrecognised field from xsltproc pipe print "pmlvalid warning: discarded valid.xsl output:\n $l\n"; } } else { # Invalid line read from xsltproc pipe $! = 3; die "pmlvalid: internal error while parsing valid.xsl output\n $l\n"; } } close(IPH); } exit(($nerr3>0)?3:0); # Print general error reports sub report_error { my $f = shift; my $t = shift; my $i = shift; my $e = shift; my $l = { 'invalid-pos-int' => "invalid positive integer \"$e->[2]\" in element $e->[1]", 'invalid-real' => "invalid real number \"$e->[2]\" in element $e->[1]", 'invalid-fraction' => "invalid fraction \"$e->[2]\" in element $e->[1]", 'invalid-hex-string' => "invalid hex string \"$e->[2]\" in element $e->[1]", 'invalid-date' => "invalid date \"$e->[2]\" in element $e->[1]", 'invalid-time' => "invalid time \"$e->[2]\" in element $e->[1]", 'invalid-time-zone' => "invalid time zone \"$e->[2]\" in element $e->[1]", 'invalid-latitude' => "invalid latitude value \"$e->[2]\" in element $e->[1]", 'invalid-longitude' => "invalid longitude value \"$e->[2]\" in element $e->[1]", 'frame-without-id' => "frame without id is not a defaults child", 'defaults-frame-with-id' => "defaults child frame has id (id=\"$e->[1]\")", 'defaults-frame-with-fn' => "defaults child frame has fn (fn=\"$e->[1]\")", 'frame-nonunique-id' => "more than one frame with id=\"$e->[1]\"", 'frame-nonunique-fn' => "more than one frame with fn=\"$e->[1]\"", 'parent-frame-not-digital-descendant' => 'is a child of frame which is not a child of digital', 'parent-frame-and-explicit-id' => 'is a child of frame and has explicit group-id or frame-id attribute', 'collection-fstfid-out-of-range' =>, "in collection with id=\"$e->[1]\" and cgid=\"$e->[2]\"; ". "parent element\n has no frame with id matching fstfid=\"$e->[3]\"", 'collection-lstfid-out-of-range' =>, "in collection with id=\"$e->[1]\" and cgid=\"$e->[2]\"; ". "parent element\n has no frame with id matching lstfid=\"$e->[3]\"" }; my $r = (defined $l->{$e->[0]})?$l->{$e->[0]}: "unrecognized error: $e->[0]"; my $j = id_description($t, $i); print "$f: $t $j\n $r\n"; } # Print non-unique id (for roll, sheet, digital, and digimage) errors sub report_id_occur_error { my $f = shift; my $t = shift; my $i = shift; my $d = shift; my $j = id_description($t, $i); print "$f: $t $j\n the id is not unique; ". "there is another occurrence in file $d\n"; } # Print non-unique image hash errors sub report_ihash_occur_error { my $f = shift; my $t = shift; my $i = shift; my $h = shift; my $d = shift; my $e = shift; my $j = id_description($t, $i); print "$f: $t $j\n image hash $h is not unique;\n ". "there is another occurrence in file $e in\n $t ". id_description($t, $d) . "\n"; } # Print non-unique file hash errors sub report_fhash_occur_error { my $f = shift; my $t = shift; my $i = shift; my $h = shift; my $d = shift; my $e = shift; my $j = id_description($t, $i); print "$f: $t $j\n file hash $h is not unique;\n ". "there is another occurrence in $t id $d in file $e\n"; } # Print non-unique href errors sub report_href_occur_error { my $f = shift; my $t = shift; my $i = shift; my $h = shift; my $d = shift; my $j = id_description($t, $i); print "$f: $t $j\n href $h is not unique;\n ". "there is another occurrence in file $d\n"; } # Print non-unique collection cgid errors sub report_collect_occur_error { my $f = shift; my $t = shift; my $i = shift; my $c = shift; my $d = shift; my $e = shift; my $g = shift; my $j = id_description($t, $i); print "$f: $t $j\n collection id=\"$c\" cgid=\"$d\" is not unique;\n ". "there is another occurrence in $e->[0] id=$e->[1] file $g\n"; } # Construct an id description string sub id_description { my $t = shift; my $i = shift; my $a = parse_quoted_list($i); my $l = {'roll' => "id=\"$a->[0]\"", 'digital' => "id=\"$a->[0]\"", 'sheet' => "id=\"$a->[0]\"", 'digimage' => "group-id=\"$a->[0]\" frame-id=\"$a->[1]\" ". "image-id=\"$a->[2]\""}; return (defined $l->{$t})?$l->{$t}:"id $i"; } # Parse a space-separated list of quoted strings and return as an array sub parse_quoted_list { my $s = shift; my $a = []; while ($s =~ /^\s*\"([^\"]*)\"/) { push @$a, $1; $s = $'; } return $a; } # Extract the public doctype from an PhotoML XML file sub getdoctype { my $xfn = shift; my $public = undef; open(FH, "<$xfn") or return $public; my $line; while ($line = ) { last if ($line =~ /]+>/ and $l = ) { $line .= $l; } if ($line =~ /]+>/) { $public = $1; } close(FH); return $public; } # Get DTD version number sub getdtdver { my $dfn = shift; my $ver = undef; open(FH, "<$dfn") or return $ver; my $line; while ($line = ) { if ($line =~ /Version:\s+(\d+\.\d+)\s+/) { $ver = $1; last; } } close(FH); return $ver; } ./photoml-0.28/tools/pmlexpand.10000644000175000017500000000235111471543674016027 0ustar brendtbrendt.TH pmlexpand 1 "14 Janaury 2008" .SH NAME pmlexpand \(hy expand and remove defaults in a PhotoML XML file .SH SYNOPSIS .B pmlexpand [\fB\-h\fR] [\fB\-a\fR | \fB\-b\fR] [[\fIinfile\fR] \fIoutfile\fR] .SH DESCRIPTION \fIpmlexpand\fP expands defaults into the relevant elements and removes the defaults elements. Input is written to stdout if no output file is specified, and read from stdin if no input file is specified. .SH OPTIONS \fIpmlexpand\fP accepts the following options: .TP 8 .B \-h Display usage information. .TP 8 .B \-a Replace defaults elements with a comment indicating the position from which they were removed. .TP 8 .B \-b Comment out the defaults elements. .SH AUTHOR Brendt Wohlberg .SH COPYRIGHT Copyright \(co 2003\(hy2007 Brendt Wohlberg This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .SH "SEE ALSO" .BR pmlvalid (1) ./photoml-0.28/tools/pmlindex0000755000175000017500000001124111525305126015505 0ustar brendtbrendt#! /bin/sh # This script constructs an HTML index of PhotoML files # Copyright © 2003-2011 Brendt Wohlberg # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License at # http://www.gnu.org/licenses/gpl-2.0.txt. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # Most recent modification: 11 February 2011 # Set up paths to pmltrans and pmlexpand utilities pmlpath="`echo $0 | sed -e 's|/pmlindex||'`/.." pmltransx="$pmlpath/tools/pmltrans" pmlexpandx="$pmlpath/tools/pmlexpand" # Ensure that xsltproc, pmltrans, and pmlexpand are available if [ ! "`which xsltproc 2>/dev/null`" ]; then echo "pmlindex: error executing xstlproc" >&2 exit 1 fi if [ ! -x "$pmltransx" ]; then echo "pmlindex: error executing pmltrans" >&2 exit 1 fi if [ ! -x "$pmlexpandx" ]; then echo "pmlindex: error executing pmlexpand" >&2 exit 1 fi # Function for displaying usage information usage() { cat <&2 usage: pmlindex [-h] [-y] [-s size] (([-e] [-m]) | [-d]) [-p dst-path] infile [infile] ... -h Display usage information -y Group table entries by year -s size Specify primary font size in points -e Include exposure detail column when appropriate -m Include location map when coordinates specified -d Use detailed rather than summary output -p dst-path Path to directory into which output should be written EOF } # Parse command line arguments yflag='' ygp='' sflag='' fsp='' eflag='' mflag='' dflag='' dstpath='.'; while [ $# -ge 1 ]; do case $1 in -y) yflag='-y'; ygp="--stringparam year-group 1" ;; -s) shift; sflag="-s $1"; fsp="--stringparam font-size $1" ;; -e) eflag='-e' ;; -m) mflag='-m' ;; -d) dflag='-d' ;; -p) shift; dstpath=$1 ;; -*) usage; exit 1 ;; *) break ;; esac shift done # Display usage information if appropriate if [ "$1" = '' ]; then usage; exit 1 fi # Make destination directory if necessary mkdir -p $dstpath # Set up paths to support XSL xsl0="$pmlpath/xsl/html/preindex.xsl" xsl1="$pmlpath/xsl/html/index.xsl" # Set up temporary file paths tmpidx="/tmp/pmlindex.idx.$$" tmpexp="/tmp/pmlindex.exp.$$" # Open root element of XML index source file echo "" > $tmpidx # Iterate over all files to be indexed for src in $@; do # Generate error if a file could not be read if [ ! -r "$src" -o ! -f "$src" ]; then echo "pmlindex: could not read file $src" 1>&2 exit 2 fi # Set up path variables srcbase=`basename $src .xml` dst="$dstpath/$srcbase.html" # Apply pmltrans (with defaults expansion) if the HTML # representation of the current PhotoML file does not exist, # or is out of date with respect to its source if [ ! -e "$dst" -o "$src" -nt "$dst" ]; then $pmltransx -x $eflag $mflag $dflag $sflag $src > $dst if [ ! $? -eq 0 ]; then echo "pmlindex: error running pmltrans" 1>&2 rm -f $tmpidx $tmpexp exit 3 fi fi if grep -q '.*//' -e 's/\\-/-/g' -e 's/\>/>/g' -e 's/\</$indexdata"\ >> $tmpidx else # If index data not cached as a comment in the current HTML file, # expand the defaults in the current PhotoML file and determine # them. Insert details of the current PhotoML file in the index # source file, and append the index cache as a comment to the # current HTML file. $pmlexpandx $src $tmpexp if [ ! $? -eq 0 ]; then echo "pmlindex: error running pmlexpand" 1>&2 rm -f $tmpidx $tmpexp exit 4 fi idxsrc=`xsltproc --novalid $xsl0 $tmpexp 2>/dev/null` rm -f $tmpexp echo "$idxsrc" >> $tmpidx indexdata=`echo $idxsrc | tr -d '\n' | sed -e 's/>[ \t]*/\>/g' -e 's/-/\\-/g'` echo "" >> $dst fi done # Close root element of XML index source file echo "" >> $tmpidx # Process XML index source file to generate HTML index xsltproc $ygp $fsp $ecp $xsl1 $tmpidx > "$dstpath/index.html" # Clean up rm -f $tmpidx exit 0 ./photoml-0.28/tools/pmltoxmp.10000644000175000017500000000446211520646327015716 0ustar brendtbrendt.TH pmltrans 1 "28 January" .SH NAME pmltoxmp \(hy convert a PhotoML file to XMP format .SH SYNOPSIS .B pmltoxmp [\fB\-h\fR] [\fB\-n\fR] (([\fB\-o\fR path] [\fB\-s\fR fstr]) | ([\fB\-g\fR fid] [\fB\-f\fR gid])) [\fIxmlfile\fR] .SH DESCRIPTION \fIpmltoxmp\fP is a shell script that calls \fIxsltproc\fP to transform a subset of data in a PhotoML XML file into XMP format. If a single frame is specified for output, it is written to stdout, otherwise a separate output file is written for each frame in the PhotoML file. The primary purpose of conversion to XMP format is to allow a subset of PhotoML data to be included in the metadata of a digital image by using the \fIexiftool\fP utility, which can use XMP data as input. For example, assuming that PhotoML data for roll 2001r12 is in file photoml.xml, and file 2001r22f01n01.jpg is a scan of frame 01 on that roll, the following commands would copy a subset of the PhotoML data into the EXIF metadata of the digital image: .RS .br pmltoxmp -g 2001r12 -f 01 photoml.xml > tmp.xmp .br exiftool -TagsFromFile tmp.xmp 2001r22f01n01.jpg .br .RE .SH OPTIONS \fIpmltoxmp\fP accepts the following options: .TP 8 .B \-h Display usage information. .TP 8 .B \-n Omit the validity test prior to applying the XSL. .TP 8 .B \-o \fIpath\fR Specify the output path. The default value is ".". .TP 8 .B \-s \fIfstr\fR Specify image id format string. This format is used to construct both the EXIF DocumentName value and the output filename (when relevant). Occurrences of "%g" and "%f" in this string are substituted with the group and frame ids respectively. The default value is "%gf%f". .TP 8 .B \-g \fIgid\fR Specify id of group containing frame to convert. .TP 8 .B \-f \fIfid\fR Specify id of frame to convert. .SH AUTHOR Brendt Wohlberg .SH COPYRIGHT Copyright \(co 2010,2011 Brendt Wohlberg This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .SH "SEE ALSO" .BR xsltproc (1) .BR exiftool (1) ./photoml-0.28/tools/pmltrans.10000644000175000017500000000314211471543746015676 0ustar brendtbrendt.TH pmltrans 1 "13 November 2010" .SH NAME pmltrans \(hy transform a PhotoML XML file into an HTML description .SH SYNOPSIS .B pmltrans [\fB\-h\fR] [\fB\-f\fR] [\fB\-s\fR size] (([\fB\-e\fR] [\fB\-m\fR]) | [\fB\-d\fR [\fB\-x\fR]]) [\fIxmlfile\fR] .SH DESCRIPTION \fIpmltrans\fP is a shell script that calls \fIxsltproc\fP to transform a PhotoML XML file into an HTML representation. The HTML output is written to stdout. .SH OPTIONS \fIpmltrans\fP accepts the following options: .TP 8 .B \-h Display usage information. .TP 8 .B \-f Omit the validity test prior to applying the XSL. .TP 8 .B \-s size Set the primary font size in points. .TP 8 .B \-e Include a column providing exposure details when these are present in the PhotoML data. .TP 8 .B \-m Include location map when coordinates are specified in the PhotoML data. .TP 8 .B \-d Generate detailed output rather than the default summary output. .TP 8 .B \-x Expand defaults before applying the XSL. If the summary output is used, defaults are expanded even when this option is not selected. .SH AUTHOR Brendt Wohlberg .SH COPYRIGHT Copyright \(co 2003\(hy2010 Brendt Wohlberg This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .SH "SEE ALSO" .BR xsltproc (1) ./photoml-0.28/tools/pmlcreate.10000644000175000017500000000243611471543614016011 0ustar brendtbrendt.TH pmlcreate 1 "14 January 2008" .SH NAME pmlcreate \(hy construct PhotoML files from a single input file in a simple text format .SH SYNOPSIS .B pmlcreate [\fB\-h\fR] [\fB\-e\fR] [\fB\-x\fR] \fIinputfile\fR .SH DESCRIPTION \fIpmlcreate\fP constructs PhotoML files from a single input file in a simple text format. The input file summarises basic information such as camera body, film, processing, image creation date, and exposure details. The output represents an initial version suitable for further editing. .SH OPTIONS \fIpmlcreate\fP accepts the following options: .TP 8 .B \-h Display usage information. .TP 8 .B \-e Display an example input file. .TP 8 .B \-x Output intermediate XML representation of input file data. .SH AUTHOR Brendt Wohlberg .SH COPYRIGHT Copyright \(co 2005\(hy2007 Brendt Wohlberg This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .SH "SEE ALSO" .BR xsltproc (1) ./photoml-0.28/tools/pmlgrep.10000644000175000017500000000234611471543710015500 0ustar brendtbrendt.TH pmlgrep 1 "14 January 2008" .SH NAME pmlgrep \(hy provides a grep\(hylike utility for PhotoML files .SH SYNOPSIS .B pmlgrep [\fB\-h\fR] [\fB\-e\fR] [\fB\-p\fR] [\fB\-x\fR xpath] [\fB\-s\fR regex] ... [\fB\-s\fR regex] \fIxmlfile\fR [\fIxmlfile\fR] ... .SH DESCRIPTION \fIpmlgrep\fP is a shell script that supports the use of xgrep on PhotoML files. .SH OPTIONS \fIpmlgrep\fP accepts the following options: .TP 8 .B \-h Display usage information. .TP 8 .B \-e Expand defaults before searching. .TP 8 .B \-p Use perl regular expressions. .TP 8 .B \-x xpath Find nodes matching xpath. .TP 8 .B \-s regex Find nodes matching custom syntax used by xgrep. .SH AUTHOR Brendt Wohlberg .SH COPYRIGHT Copyright \(co 2003\(hy2007 Brendt Wohlberg This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .SH "SEE ALSO" .BR pmlexpand (1), .BR xgrep (1) ./photoml-0.28/tools/pmlupgrade0000755000175000017500000002770211460345610016036 0ustar brendtbrendt#! /usr/bin/perl # This script upgrades PhotoML files to the most recent DTD versions # Copyright © 2003-2010 Brendt Wohlberg # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License at # http://www.gnu.org/licenses/gpl-2.0.txt. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # Most recent modification: 22 October 2010 use strict; use File::Basename; use File::Copy; use Getopt::Std; # Set up path variables my $pmlpath = dirname($0) . "/.."; my $xsl = "$pmlpath/xsl/upgrade"; my $tmp = '/tmp'; if (-r '/etc/xml/catalog' and $ENV{'XML_CATALOG_FILES'} eq '') { $ENV{'XML_CATALOG_FILES'} = "/etc/xml/catalog"; } $ENV{'XML_CATALOG_FILES'} = "$pmlpath/dtd/catalog.xml " . $ENV{'XML_CATALOG_FILES'}; undef $ENV{'SGML_CATALOG_FILES'}; # Ensure xsltproc and xmllint are available die "pmlupgrade: error executing xstlproc\n" if (`which xsltproc 2>/dev/null` eq ''); die "pmlupgrade: error executing xmllint\n" if (`which xmllint 2>/dev/null` eq ''); my $ustr = <{'h'}) { print STDERR "$ustr"; exit(0); } die "$ustr" if (@ARGV == 0); # Declare variables used within main loop my $nerr = 0; my ($x, $tmp0, $tmp1, $tflag, $trans, $cmd, $dtd, $root, $path, $sra); my ($dtdcl, $dtpub, $dttyp, $dtver, $dtint); # Work through each file specified on the command line foreach $x ( @ARGV ) { # Ensure current file is readable if (! -r $x) { warn "pmlupgrade: could not read file $x\n"; $nerr++; next; } # Determine document type information $dtdcl = getdoctyp($x); $dtpub = getdtpub($dtdcl); ($dttyp,$dtver) = getpubtypver($dtpub); $dtint = getdtint($dtdcl); # Determine the relevant DTD and skip to next file if not recognised if ($dttyp eq "PhotoML") { $dtd = 'photo'; $root = 'photo'; } elsif ($dttyp eq "DigImageML") { $dtd = 'digim'; $root = 'digimage'; } else { warn "pmlupgrade: unrecognised document type for file $x\n"; $nerr++; $dtd = ''; next; } warn "Upgrading $x\n"; $path = dirname($x); # Flag indicating whether current file has been transformed $tflag = 0; # Find the relevant XSL upgrade transform $trans = `find $xsl -name "$dtd-$dtver-*.xsl"`; chomp($trans); # Temporary file names $tmp0 = "$tmp/upgrade.$$.0.xml"; $tmp1 = "$tmp/upgrade.$$.1.xml"; # If DTD is one of the versions with ISOlat1 and ISOlat2 character # entity references, convert them to the corresponding numeric # character references if ($dtver <= "0.11") { substncr($x, $tmp0); } else { copy($x,$tmp0); } $sra = ($opts->{'n'})?"'s/\&/\&/g'":"'s/\\&\\([^#]\\)/\\&\\1/g'"; # Increment version numbers while transforms available while ($trans ne '') { # Preprocessing to prevent namespace errors (since the DTD, in # which the namespace prefixes are defined, is not loaded), and to # prevent parsing and replacement of entity definitions. $cmd = "sed -e 's|<$root>|<$root xmlns:xlink=\"http://www.w3.org". "/1999/xlink\">|g' -e $sra $tmp0 > $tmp1"; system($cmd); move($tmp1,$tmp0); # Remove invalid namespace prefix from merge reject PI when upgrading # from DTD version 0.12 if ($dtver == "0.12") { $cmd = "sed -e 's|<\?merge:reject|<\?merge-reject|g' $tmp0 > $tmp1"; system($cmd); move($tmp1,$tmp0); } # Apply the XSL transform $cmd = "xsltproc --path $path --novalid -o $tmp1 $trans $tmp0"; system($cmd); move($tmp1,$tmp0); # In applying the last upgrade for digim files, the root element # is changed to photo $root = 'photo' if ($dtd eq 'digim' && $dtver eq '0.02'); # Undo preprocessing changes $cmd = "sed -e 's|<$root xmlns:xlink=\"http://www.w3.org/1999/". "xlink\">|<$root>|g' -e 's/\&/\\&/g' $tmp0 > $tmp1"; system($cmd); move($tmp1,$tmp0); # Find the next relevant XSL transform if ($trans =~ /-([\d\.]+)\.xsl$/) { $dtver = $1; } else { die "pmlupgrade: error in accessing upgrade XSL transforms\n"; } $trans = `find $xsl -name "$dtd-$dtver-*.xsl"`; chomp($trans); $tflag = 1; } # If an upgrade transform has been applied, insert the internal # subset removed by XSL processing, and validate the result if ($tflag == 1) { setdtint($dtint, $tmp0, "$x.tmp"); $cmd = "xmllint --valid --noout $x.tmp 2>/dev/null"; if (!system($cmd)) { move($x, "$x.bak"); move("$x.tmp",$x); } else { move("$x.tmp","$x.fail"); warn "pmlupgrade: validity error in upgrading file $x\n"; $nerr++; } } # Remove temporary files unlink($tmp0); unlink($tmp1); } exit ($nerr > 0)?1:0; # Parse strings delimited by (possibly nested) angle brackets sub abmatch { my $fh = shift; my $lt = shift; my $mt = ''; my $line; my $n = 1; while ($n > 0) { while (($lt !~ /<|>/) and ($line = <$fh>)) { $lt .= $line; } if ($lt =~ /<|>/) { $mt .= $` . $&; $lt = $'; $n = ($& eq ">")?($n-1):($n+1); } else { return undef; } } return $mt; } # Extract the document type declaration from an XML file sub getdoctyp { my $fn = shift; my $line; open(FH, "< $fn"); my $fh = *FH; while ($line = <$fh>) { last if ($line =~ /; close(FH); $ft =~ s/(]+)>/$1 \[$iss\]>/; open(FH, ">$fn1") or return undef; print FH $ft; close(FH); return 1; } # Replace ISOlat1 and ISOlat2 character entity references with the # corresponding numeric character references sub substncr { my $fn0 = shift; my $fn1 = shift; open(IFH, "<$fn0") or return undef; open(OFH, ">$fn1") or return undef; my $line; while ($line = ) { $line =~ s/\&([^\;]+)\;/@{[getncr($1)]}/g; print OFH $line; } close(OFH); close(IFH); return 1; } # Convert ISOlat1 and ISOlat2 character entity references to numeric # character references, returning other entity references unchanged sub getncr { my $cer = shift; my $ncr = {"Agrave" => "À", "Aacute" => "Á", "Acirc" => "Â", "Atilde" => "Ã" , "Auml" => "Ä" , "Aring" => "Å" , "AElig" => "Æ" , "Ccedil" => "Ç" , "Egrave" => "È" , "Eacute" => "É" , "Ecirc" => "Ê" , "Euml" => "Ë" , "Igrave" => "Ì" , "Iacute" => "Í" , "Icirc" => "Î" , "Iuml" => "Ï" , "ETH" => "Ð" , "Ntilde" => "Ñ" , "Ograve" => "Ò" , "Oacute" => "Ó" , "Ocirc" => "Ô" , "Otilde" => "Õ" , "Ouml" => "Ö" , "Oslash" => "Ø" , "Ugrave" => "Ù" , "Uacute" => "Ú" , "Ucirc" => "Û" , "Uuml" => "Ü" , "Yacute" => "Ý" , "THORN" => "Þ" , "szlig" => "ß" , "agrave" => "à" , "aacute" => "á" , "acirc" => "â" , "atilde" => "ã" , "auml" => "ä" , "aring" => "å" , "aelig" => "æ" , "ccedil" => "ç" , "egrave" => "è" , "eacute" => "é" , "ecirc" => "ê" , "euml" => "ë" , "igrave" => "ì" , "iacute" => "í" , "icirc" => "î" , "iuml" => "ï" , "eth" => "ð" , "ntilde" => "ñ" , "ograve" => "ò" , "oacute" => "ó" , "ocirc" => "ô" , "otilde" => "õ" , "ouml" => "ö" , "oslash" => "ø" , "ugrave" => "ù" , "uacute" => "ú" , "ucirc" => "û" , "uuml" => "ü" , "yacute" => "ý" , "thorn" => "þ" , "yuml" => "ÿ" , "Amacr" => "Ā", "amacr" => "ā", "Abreve" => "Ă", "abreve" => "ă", "Aogon" => "Ą", "aogon" => "ą", "Cacute" => "Ć", "cacute" => "ć", "Ccirc" => "Ĉ", "ccirc" => "ĉ", "Cdot" => "Ċ", "cdot" => "ċ", "Ccaron" => "Č", "ccaron" => "č", "Dcaron" => "Ď", "dcaron" => "ď", "Dstrok" => "Đ", "dstrok" => "đ", "Emacr" => "Ē", "emacr" => "ē", "Edot" => "Ė", "edot" => "ė", "Eogon" => "Ę", "eogon" => "ę", "Ecaron" => "Ě", "ecaron" => "ě", "Gcirc" => "Ĝ", "gcirc" => "ĝ", "Gbreve" => "Ğ", "gbreve" => "ğ", "Gdot" => "Ġ", "gdot" => "ġ", "Gcedil" => "Ģ", "Hcirc" => "Ĥ", "hcirc" => "ĥ", "Hstrok" => "Ħ", "hstrok" => "ħ", "Itilde" => "Ĩ", "itilde" => "ĩ", "Imacr" => "Ī", "imacr" => "ī", "Iogon" => "Į", "iogon" => "į", "Idot" => "İ", "inodot" => "ı", "IJlig" => "IJ", "ijlig" => "ij", "Jcirc" => "Ĵ", "jcirc" => "ĵ", "Kcedil" => "Ķ", "kcedil" => "ķ", "kgreen" => "ĸ", "Lacute" => "Ĺ", "Lmidot" => "Ĺ", "lacute" => "ĺ", "Lcedil" => "Ļ", "lcedil" => "ļ", "Lcaron" => "Ľ", "lcaron" => "ľ", "lmidot" => "ŀ", "Lstrok" => "Ł", "lstrok" => "ł", "Nacute" => "Ń", "nacute" => "ń", "Ncedil" => "Ņ", "ncedil" => "ņ", "Ncaron" => "Ň", "ncaron" => "ň", "napos" => "ʼn", "ENG" => "Ŋ", "eng" => "ŋ", "Omacr" => "Ō", "omacr" => "ō", "Odblac" => "Ő", "odblac" => "ő", "OElig" => "Œ", "oelig" => "œ", "Racute" => "Ŕ", "racute" => "ŕ", "Rcedil" => "Ŗ", "rcedil" => "ŗ", "Rcaron" => "Ř", "rcaron" => "ř", "Sacute" => "Ś", "sacute" => "ś", "scirc" => "Ŝ", "Scirc" => "ŝ", "Scedil" => "Ş", "scedil" => "ş", "Scaron" => "Š", "scaron" => "š", "tcedil" => "Ţ", "Tcedil" => "ţ", "Tcaron" => "Ť", "tcaron" => "ť", "Tstrok" => "Ŧ", "tstrok" => "ŧ", "Utilde" => "Ũ", "utilde" => "ũ", "Umacr" => "Ū", "umacr" => "ū", "Ubreve" => "Ŭ", "ubreve" => "ŭ", "Uring" => "Ů", "uring" => "ů", "Udblac" => "Ű", "udblac" => "ű", "Uogon" => "Ų", "uogon" => "ų", "Wcirc" => "Ŵ", "wcirc" => "ŵ", "Ycirc" => "Ŷ", "ycirc" => "ŷ", "Yuml" => "Ÿ", "Zacute" => "Ź", "zacute" => "ź", "Zdot" => "Ż", "zdot" => "ż", "Zcaron" => "Ž", "zcaron" => "ž", "gacute" => "ǵ"}; my $val = $ncr->{$cer}; return (defined $val)?$val:"&$cer;"; } ./photoml-0.28/tools/pmlindex.10000644000175000017500000000322211525305206015640 0ustar brendtbrendt.TH pmlindex 1 "11 February 2011" .SH NAME pmlindex \(hy constructs an HTML index of PhotoML files .SH SYNOPSIS .B pmlindex [\fB\-h\fR] [\fB\-y\fR] [\fB\-s\fR size] (([\fB\-e\fR] [\fB\-m\fR]) | [\fB\-d\fR]) [\fB\-p\fR dst\(hypath] \fIxmlfile\fR [\fIxmlfile\fR] ... .SH DESCRIPTION \fIpmlindex\fP is a shell script that builds an indexed set of HTML descriptions of the PhotoML files provided as command line arguments. If an HTML descriptions exists, it is only reconstructed if it has an older time stamp than the corresponding PhotoML file. .SH OPTIONS \fIpmlindex\fP accepts the following options: .TP 8 .B \-h Display usage information. .TP 8 .B \-y Group table entries by year. .TP 8 .B \-s size Set the primary font size in points. .TP 8 .B \-e Include a column providing exposure details when these are present in the PhotoML data. .TP 8 .B \-m Include location map when coordinates are specified in the PhotoML data. .TP 8 .B \-d Generate detailed output rather than the default summary output. .TP 8 .B \-p dst\(hypath Specify the destination path for the HTML files. .SH AUTHOR Brendt Wohlberg .SH COPYRIGHT Copyright \(co 2003\(hy2011 Brendt Wohlberg This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .SH "SEE ALSO" .BR pmlexpand (1), .BR pmltrans (1) ./photoml-0.28/tools/pmldigital0000755000175000017500000002140611413377211016017 0ustar brendtbrendt#! /usr/bin/perl # This script constructs PhotoML descriptions from the EXIF data in # JPEG images from digital cameras # Copyright © 2005-2010 Brendt Wohlberg # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License at # http://www.gnu.org/licenses/gpl-2.0.txt. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # Most recent modification: 18 April 2010 use strict; use File::Basename; use File::Temp qw(tmpnam); use Getopt::Std; use Date::Manip; use Image::ExifTool; # Set up path variables my $pmlpath = dirname($0) . "/.."; my $xsl = "$pmlpath/xsl/misc/digital.xsl"; my $tmp = '/tmp'; if (-r '/etc/xml/catalog' and $ENV{'XML_CATALOG_FILES'} eq '') { $ENV{'XML_CATALOG_FILES'} = "/etc/xml/catalog"; } $ENV{'XML_CATALOG_FILES'} = "$pmlpath/dtd/catalog.xml " . $ENV{'XML_CATALOG_FILES'}; undef $ENV{'SGML_CATALOG_FILES'}; # Define list of extracted EXIF tags my $exftgs0 = [ 'ApertureValue', 'BitsPerSample', 'BitDepth', 'City', 'ColorGain', 'ColorSpace', 'Country', 'CreateDate', 'DateTimeOriginal', 'DigitalGEM', 'DigitalICE', 'DigitalROC', 'ExposureCompensation', 'ExposureMode', 'ExposureTime', 'FileSource', 'FilmType', 'Flash', 'FlashExposureComp', 'FNumber', 'FocalLength', 'FocalLengthIn35mmFormat', 'FocusDistance', 'GPSAltitude', 'GPSAltitudeRef', 'GPSLatitude', 'GPSLatitudeRef', 'GPSLongitude', 'GPSLongitudeRef', 'GPSMapDatum', 'ImageDepth', 'ImageHeight', 'ImageWidth', 'InteropIndex', 'ISO', 'LensID', 'Location', 'Make', 'MasterGain', 'MeteringMode', 'Model', 'ModifyDate', 'MultiSample', 'OwnerName', 'ShutterSpeedValue', 'Software', 'State', 'SubjectDistance' ]; my $exftgs1 = [ @$exftgs0 ]; # Add tags exluded from list used for XMP processing push @$exftgs1, ('FileType', 'MimeType'); # Ensure imageinfo, md5sum, dcraw, and xsltproc are available die "pmldigital: error executing imageinfo\n" if (`which imageinfo 2>/dev/null` eq ''); die "pmldigital: error executing md5sum\n" if (`which md5sum 2>/dev/null` eq ''); die "pmldigital: error executing dcraw\n" if (`which dcraw 2>/dev/null` eq ''); die "pmldigital: error executing xstlproc\n" if (`which xsltproc 2>/dev/null` eq ''); # Parse command line switches my $ustr = <{'h'} or @ARGV == 0 or (defined $options->{'s'} and defined $options->{'g'})); my $flags = {'base' => defined $options->{'b'}, 'hash' => !defined $options->{'f'}, 'scan' => defined $options->{'d'}, 'rskp' => defined $options->{'r'}, 'xmps' => defined $options->{'x'}, 'stid' => defined $options->{'s'}}; my $gattr = ''; $gattr = " group-id=\"" . $options->{'g'} . "\"" if defined ($options->{'g'}); my $exifout = defined ($options->{'i'}); my $dtdl; if (defined $options->{'t'}) { Date_Init("DateFormat=non-US"); $dtdl = ParseDateDelta($options->{'t'}); die "pmldigital: invalid date/time offset " . $options->{'t'} . "\n" if ($dtdl eq ''); } my $rbase = {}; my ($file,$base,$path,$sffx); foreach $file ( @ARGV ) { die "pmldigital: file $file does not exist\n" if (! -f $file); die "pmldigital: file $file is not readable\n" if (! -r $file); ($base,$path,$sffx) = fileparse($file, qr/\.[^.]*/); $sffx = lc($sffx); $rbase->{$base} = 1 if ($sffx eq '.nef' or $sffx eq '.crw'); } # Set output to stdout or pipe to xsltproc depending on command line flags my $of; if ($exifout) { $of = \*STDOUT; } else { open(OPH, "| xsltproc $xsl -") or die "pmldigital: pipe open failed\n"; $of = \*OPH; } print $of "\n\n"; my ($exif, $tgls, $info, $tag, $grp, $elt, $gid, $fid, $iid, $satr, $hatr, $fhsh, $ihsh, $inam, $dupl); foreach $file ( @ARGV ) { # Parse filename into components ($base,$path,$sffx) = fileparse($file, qr/\.[^.]*/); # Check for skip of JPEG with same basename as a raw file next if ($flags->{'rskp'} and lc($sffx) eq '.jpg' and defined $rbase->{$base}); # Check for skip of XMP files next if ($flags->{'xmps'} and lc($sffx) eq '.xmp'); # Set tag duplication flag for NEF files $dupl = (lc($sffx) eq '.nef')?0:1; # Set group/frame/image id attribute strings $gid = ''; $fid = ''; $iid = ''; if ($flags->{'stid'}) { if ($flags->{'scan'} and basename($file) =~ /^(\d{4}[rs]\d+)f(\d+)v(\d+)\./) { $gid = " group-id=\"$1\""; $fid = " frame-id=\"$2\""; $iid = " image-id=\"$3\""; } elsif (basename($file) =~ /^(\d{4}d\d+)f(\d+)v\d+\./) { $gid = " group-id=\"$1\""; $fid = " frame-id=\"$2\""; } } # Set scan identifier attribute my $satr = ($flags->{'scan'})?' scan="yes"':''; my $inam = ($flags->{'base'})?basename($file):$file; # Initialise tags hash my $tgs = {}; # Check for and process XMP files if ($flags->{'xmps'}) { my $xmpf = $path . $base . ".xmp"; if (-f $xmpf) { $exif = new Image::ExifTool; @$tgls = @$exftgs0; $info = $exif->ImageInfo($xmpf, $tgls, {PrintConv => 1, CoordFormat => "%.8f", Group1 => '-IFD1'}); gettags($info,$dtdl,$tgs); } } # Construct ExifTool object for image file $exif = new Image::ExifTool; $path = $file; if ($path =~ /\.bz2$/) { $path = qq{bzip2 -dc "$path" |}; } # Pass in a copy because the tag list is modified @$tgls = @$exftgs1; $info = $exif->ImageInfo($path, $tgls, {PrintConv => 1, DateFormat => "%Y-%m-%d %H:%M:%S", CoordFormat => "%.8f", Group1 => '-IFD1', Duplicates => $dupl}); # Close pipe and exit with error if non-image file encountered if (scalar keys %$info == 0) { print $of "\n"; close(OPH) if (!$exifout); die "pmldigital: $file is not an image file\n"; } # Extract EXIF tags from image file gettags($info,$dtdl,$tgs); # Set hash attribute strings if ($flags->{'hash'}) { ($fhsh, $ihsh) = gethash($file,$info->{'MIMEType'}); $hatr = " file-hash=\"$fhsh\" image-hash=\"$ihsh\""; } else { $hatr = ""; } # Output collected tags in XML format print $of " \n"; my $val; foreach $elt (sort keys %$tgs) { $val = $tgs->{$elt}; print $of " <$elt>$val\n"; } print $of " \n"; } print $of "\n"; # Close output if it is a pipe (rather than stdout) close(OPH) if (!$exifout); exit 0; # Extract and process EXIF tags in ExifTool ImageInfo output format sub gettags { my $info = shift; my $dtdl = shift; my $tags = shift; my ($tag,$grp,$elt,$val,$date); foreach $tag (sort keys %$info) { $grp = $exif->GetGroup($tag); $elt = "$grp.".Image::ExifTool::GetTagName($tag); # Check for necessity of applying date offset if (defined $dtdl and $elt =~ /Date/) { $date = $info->{$tag}; if ($date =~ /(\d{4}):(\d{2}):(\d{2})\s+(.*)/) { $date = "$1-$2-$3 $4"; } $val = UnixDate(DateCalc($date, $dtdl),'%Y:%m:%d %H:%M:%S'); print $of " \n"; } else { $val = $info->{$tag}; } # Apply necessary changes to tag value $val =~ s/\s+$//; # Remove trailing spaces $val =~ s/\&/&/g; # Convert & to & # Insert tag into tag hash data structure $tags->{$elt} = $val if (!defined $tags->{$elt}); } } # Get md5 hash data from specified file by using dcraw or imageinfo, # and md5sum sub gethash { my $path = shift; my $mtyp = shift; my $fhash = `md5sum $path | awk '{printf("%s",\$1)}'`; my $ipth; if ($mtyp eq 'image/x-raw') { $ipth = tmpnam(); my $cmd = "dcraw -d -c $path > $ipth"; system($cmd); # Should be more careful here } else { $ipth = $path; } my $ihash = `imageinfo --md5hash $ipth 2>/dev/null`; unlink $ipth if ($mtyp eq 'image/x-raw'); return ($fhash, $ihash); } ./photoml-0.28/tools/Makefile.in0000644000175000017500000000403511471637477016030 0ustar brendtbrendt# Makefile for PhotoML command line tools # Most recent modification: 19 November 2010 prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@/photoml dtddir = ${datadir}/dtd bindir = @bindir@ mandir = @mandir@ INSTALL = @INSTALL@ SHELL = @SH@ PERL = @PERL@ RM = @RM@ PHOTOMLCATALOG = \"${datadir}/catalog.xml\" SCRIPTS = pmlvalid pmlexpand pmltrans pmlupgrade pmlindex pmlgrep \ pmldigital pmlcreate pmltoxmp MANSRC = pmlvalid.1 pmlexpand.1 pmltrans.1 pmlupgrade.1 pmlindex.1 pmlgrep.1\ pmldigital.1 pmlcreate.1 pmltoxmp.1 TESTDEPEND = pmlcreate ../xsl/misc/create.xsl\ pmlvalid ../xsl/misc/valid.xsl ../dtd/photo.dtd .PHONY: all check test clean install uninstall .SUFFIXES: .1 .html all: check: test test: .test.stamp .test.stamp: ${TESTDEPEND} @(cd test && ./runtests) @touch .test.stamp clean: @${RM} -f .test.stamp install: @echo "Installing executables in ${DESTDIR}${bindir}" @if [ ! -d ${DESTDIR}${bindir} ]; \ then ${INSTALL} -d ${DESTDIR}${bindir}; \ fi; \ for s in ${SCRIPTS}; do \ sed -e 's+pmlpath *=[^;]*+pmlpath=\"${datadir}\"+' \ -e 's+pmlvalidx *=[^;]*+pmlvalidx=\"${bindir}/pmlvalid\"+' \ -e 's+pmltransx *=[^;]*+pmltransx=\"${bindir}/pmltrans\"+' \ -e 's+pmlexpandx *=[^;]*+pmlexpandx=\"${bindir}/pmlexpand\"+' \ -e 's|/usr/bin/perl|${PERL}|' $$s > script.tmp; \ ${INSTALL} -m 755 script.tmp ${DESTDIR}${bindir}/$$s; \ ${RM} script.tmp; \ done @echo "Installing man pages in ${DESTDIR}${mandir}" @if [ ! -d ${DESTDIR}${mandir} ]; then \ ${INSTALL} -d ${DESTDIR}${mandir}; \ fi; \ if [ ! -d ${DESTDIR}${mandir}/man1 ]; \ then ${INSTALL} -d ${DESTDIR}${mandir}/man1; \ fi; \ ${INSTALL} -m 644 ${MANSRC} ${DESTDIR}${mandir}/man1 uninstall: @echo "Uninstalling executables in ${DESTDIR}${bindir}" @for exe in ${SCRIPTS}; do\ ${RM} -f ${DESTDIR}${bindir}/$$exe;\ done;\ ${RM} -f ${DESTDIR}${bindir}/pmltrans;\ echo "Uninstalling man pages in ${mandir}" @for man in ${MANSRC}; do\ ${RM} -f ${DESTDIR}${mandir}/man1/$$man;\ done ./photoml-0.28/tools/pmltrans0000755000175000017500000000545511362604631015541 0ustar brendtbrendt#! /bin/sh # This script constructs HTML views of PhotoML files # Copyright © 2003-2010 Brendt Wohlberg # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License at # http://www.gnu.org/licenses/gpl-2.0.txt. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # Most recent modification: 18 April 2010 pmlpath="`echo $0 | sed -e 's|/pmltrans||'`/.." pmlvalidx="$pmlpath/tools/pmlvalid" if [ ! "`which xsltproc 2>/dev/null`" ]; then echo "pmltrans: error executing xstlproc" >&2 exit 1 fi usage() { cat <&2 usage: pmltrans [-h] [-f] [-s size] (([-e] [-m]) | [-d [-x]]) infile -h Display usage information -f Omit validity test -s size Specify primary font size in points -e Include exposure detail column when appropriate -m Include location map when coordinates specified -d Use detailed rather than summary output -x Expand defaults before applying the XSL EOF } fsparam='' ecparam='' lmparam='' novalid=0 summary=1 expand=0 while [ $# -ge 1 ]; do case $1 in -s) shift; fsparam="--stringparam font-size $1" ;; -f) novalid=1 ;; -e) ecparam="--stringparam disp-exposure 1" ;; -m) lmparam="--stringparam disp-map 1" ;; -d) summary=0 ;; -x) expand=1 ;; -*) usage; exit 1 ;; *) infile=$1; break ;; esac shift done if [ "$infile" = '' ]; then usage; exit 1 fi if [ ! -f "$infile" -o ! -r "$infile" ]; then echo pmltrans: could not open file $infile >&2 exit 1 fi if [ $novalid -eq 0 ]; then if ! $pmlvalidx "$infile" 2>/dev/null; then echo pmltrans: validity error in file $infile >&2 exit 2 fi fi dtdpub=`grep DOCTYPE $infile | grep -o -e '-\/\/.*EN'`; dtdtyp=`echo $dtdpub | grep -o -e '//DTD[^/]*//' | cut -d ' ' -f 2` if [ "$dtdtyp" != 'PhotoML' ]; then echo "pmltrans: input document type $dtdtyp not recognised" >&2 exit 3 fi edxsl=$pmlpath/xsl/defaults/expand.xsl if [ $summary -eq 0 ]; then xsl=$pmlpath/xsl/html/detailed.xsl else expand=1 xsl=$pmlpath/xsl/html/summary.xsl fi if [ -r /etc/xml/catalog -a "$XML_CATALOG_FILES" = '' ]; then XML_CATALOG_FILES=/etc/xml/catalog fi XML_CATALOG_FILES="$pmlpath/dtd/catalog.xml $XML_CATALOG_FILES" export XML_CATALOG_FILES unset SGML_CATALOG_FILES tmpfile="/tmp/pmltrans.$$" if [ $expand -eq 1 ]; then xsltproc $fsparam $ecparam $lmparam -o $tmpfile $edxsl $infile infile=$tmpfile fi xsltproc $fsparam $ecparam $lmparam $xsl $infile status=$? if [ -f "$tmpfile" ]; then rm -f $tmpfile fi exit $status ./photoml-0.28/tools/test/0000755000175000017500000000000011530542510014713 5ustar brendtbrendt./photoml-0.28/tools/test/2004d05f001.jpg0000644000175000017500000002024311361730562016713 0ustar brendtbrendtJFIFExifII* z(2ijCanonCanon PowerShot A802004:08:27 12:40:080220>Rn v~  I |nf01004$,2004:08:27 12:40:082004:08:27 12:40:08 k < _ .t"$08p xAB  4 "\@ a Dk/p0 &fff)))IMG:PowerShot A80 JPEGFirmware Version 1.00Digicam OwnerD D  XII*"@R980100( * @B$`  @b!    !#"! $)4,$'1'-=-167:::"*?D>8B3796    OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOx! }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?B/o<2LnpPIzTLUٷu >a{.%Oizԓ[xI.N !Z஝o&e94FʧT5<:lT#"X؅3e_V j5 'psHjǎ+O>h/+-*³~IQK]c͵~=1a1r\Ke$㌨nzҙe%1ɢH6gRܰG)B67'ҪoܝXZԬo3sqS=?Msj0Ρe(ᶺ^ikϰTjM+u:R]:\߇6t,8q~dT.H=9 hqQKd0#ߨo,%sZ 6 mp^k;=KC612-&=z˧hBA z/ː]rϷRՌ;ɇ Q#Bg}Z/ocF)*#sDaPMDz_{2 (bIcM8-Qw1;sZ&4>[I/q7v427erN:;ZDzUqОoNbM-~Me[yͪ8SbOr5 "IlPpkʯKI|VdPƥs*2ⴤsW#FO~U@5sMwS1ܱnlu>#m44#$6T+ _P_Ru. ppL+㝤qڻr Xcnrޤ|8UY[9*.& F^G=  i:u?ȧװ}ڏ2̲J7Cۏ–vn+ec_ڮ~!BU_0`XP῞*T/ϣ%1p鵣Tgjrsg9J4zN9`%ipF2áTս7C"4$AW(?NL*iy-58,OvhMIqUAOJNKSYJ˪3\WcAyپ9Ȗk kՂ^sui1CAI\SXNRlyp[n= ]3.LwDM@ݓ7A?(#|VX*ӣo)YUp%2VS2"b]"ltOO;ta\r&SF;D' <^Jϯ/_ЖP%.'ƔDB *2{SwIw:tpSƅH.'lL#=zjZpeg@#Ͻpݧn=~Bm|ϿzM4 AV]n,0[ v~]DO2MuO[GbrFy'Ӑ#yzbVMj?.zƀ,[CI200pP7YUWRrG5hYaq+?)oΓ%W{X$NHc)bFg&48MrO|}+EY_,R0v 0.4 G <\+򲾹SڶqfӒ?ո9ff )<lS&X5 e_18!HVn=Ʊq{m+JsJmw敼j򔬻D Տ=~{淟Z63^b$ٷcxL8? M|\^vBfA轳^.ӂeC06= Pe6(.Wcʼ]o Xye%1fAin9{~u4*JITc 0DiK?ZTx찰 bm1}b8#ϥX';;đpSPΪNKӭU|zհJjjh],;s5**,c,nQaF"e34 vʺ{V1QC%Br w5gч_OCof9 pLf['izrѡ:hcQF<)V$azuס s@<0f cxwyhhhO@@gjZs4x(m9+YPSu$"ѭ5ť]JN?ȯXbd) }kFv|i~gne: #i fK{ Y.$h1ݰ@ILSStިƓ'tia0.kd8s'Bd?gfڭBB@U(@IO?!NNڦcx5 ~$wIR/?;_ 0Ԋ XQޟB@8$c=iHN2BFx~ #iE_ܡ`0?*?PƢFR;$ԎP G?+92/~N[rUq֢JlRB5ytzS.FRA{VB++;S*9$uZ/moxnb9ۃ~5jSוl.*J5c$Oy ?iFm=֪eH+@Lo/?9f?-@f0lAV<oݪܠvv3I0'Y%;1oƠ3n 1\?] e5v uJp>v%;sA\4fpۂ?ΏSwx R@T} G2Xy|ڒ3UFÉ35/q pXbH)ghDk4#oihEqj7'j*z5%ٯ{1S^Jkq$Ϯ< W9Lv lrcCQYSnQӛd5NEkXnF~ׂxF-o%1'z.ޝ3FO˜֭NIcPp:C$HlCsҰngvlnc*d}j{~(V31g[ ǣ0FU=}zqC)_U~p~ vF*O(?‚϶DX1S(S`l??USJ>P i$[v(gfK[of,ju_z @MOeCWߘ^GaKg ڗSq޽Om;Q=ޏbIs" ;TPK1SW%5۫Δ~($|C++[K <{PZFi_̐c6pI$#OE$JVgH@ YXnV<>I@GՐ7p9ԯ #ʬzzZz?.TJRNAf\|nT4DTK%%raC]:ww2q7xZZ_4HCi(܉br=a&ױD?[*10A@1\ϩ[* ʵe(?![E+[Hޱ敤sTyCNށnIㅗkLO'>W`JR1:ONo_?1m8M'5y1NAs 2KgLRvЯ,V|N}s֙"6H-1Qdݯ5~K YF")_$F{U{ٗLp{acmEij{na\I-KpnjwFC(!& 6w'l@AJC$tY sOb# ~j?_b0BWiw .IE>]Z%X)$cJ( (^ XG%Sӽ>Q`w[;$KvhkI0szg;AE !LqaSQF[LRVGnnw{T"㿿IFܼ/dev/null else ../pmlindex -p $tmpdir $srcxml fi es=$? rm -rf $tmpdir exit $es ./photoml-0.28/tools/test/expand01.sh0000755000175000017500000000063211361730562016703 0ustar brendtbrendt#! /bin/sh # Test pmlexpand with one of the example files in the xml directory srcxml='../../xml/photoml01.xml' tmpxml='tmp.xml' if [ "$1" = 's' ]; then ../pmlexpand $srcxml > $tmpxml 2>/dev/null else ../pmlexpand $srcxml > $tmpxml fi if [ ! $? -eq 0 ]; then rm $tmpxml exit 1 fi if [ "$1" = 's' ]; then ../pmlvalid $tmpxml 1>/dev/null else ../pmlvalid $tmpxml 1>&2 fi es=$? rm $tmpxml exit $es ./photoml-0.28/tools/test/digital03.sh0000755000175000017500000000234111361730562017042 0ustar brendtbrendt#! /bin/sh # Test pmldigital date/time offset option tmpxml='tmp.xml' ../pmldigital -f 2004d05f001.jpg > $tmpxml date0=`grep date $tmpxml | sed -e 's/ *<[^>]*>//g'` time0=`grep time $tmpxml | sed -e 's/ *<[^>]*>//g'` ../pmldigital -f -t '+1d' 2004d05f001.jpg > $tmpxml date1=`grep date $tmpxml | sed -e 's/ *<[^>]*>//g'` if [ "$date1" != "" ]; then diff1=`expr \( substr $date1 9 2 \) - \( substr $date0 9 2 \)` fi ../pmldigital -f -t '-2M' 2004d05f001.jpg > $tmpxml date2=`grep date $tmpxml | sed -e 's/ *<[^>]*>//g'` if [ "$date2" != "" ]; then diff2=`expr \( substr $date0 6 2 \) - \( substr $date2 6 2 \)` fi ../pmldigital -f -t '-08s' 2004d05f001.jpg > $tmpxml time1=`grep time $tmpxml | sed -e 's/ *<[^>]*>//g'` if [ "$time1" != "" ]; then diff3=`expr \( substr $time0 7 2 \) - \( substr $time1 7 2 \)` fi ../pmldigital -f -t '+3h' 2004d05f001.jpg > $tmpxml time2=`grep time $tmpxml | sed -e 's/ *<[^>]*>//g'` if [ "$time2" != "" ]; then diff4=`expr \( substr $time2 1 2 \) - \( substr $time0 1 2 \)` fi rm $tmpxml es=0 if [ "$diff1" != "1" ]; then es=`expr $es + 1` fi if [ "$diff2" != "2" ]; then es=`expr $es + 1` fi if [ "$diff3" != 8 ]; then es=`expr $es + 1` fi if [ "$diff4" != 3 ]; then es=`expr $es + 1` fi exit $es ./photoml-0.28/tools/test/2004r21f04v00.tif.bz20000644000175000017500000000067511361730562017705 0ustar brendtbrendtBZh91AY&SYV.WDQ~/%TD@@ I)jhhC 7Hhډ4zi ~m2^{ !q$XVEjtd[$`#Yjc'8\D$5YL!" P؎4 0C.xH5n¥EiIbEщ@8Hh؈S h@9AT*86"!.ϣm cB2D ~// lH[RA>=(A0 mH"szI]ْ,$TNu?j-0!2 ըTq=tBLi !BZ?H J./photoml-0.28/tools/test/digital02.sh0000755000175000017500000000037311361730562017044 0ustar brendtbrendt#! /bin/sh # Test pmldigital applied to images from a film scanner tmpxml='tmp.xml' ../pmldigital -s -f -d 200*.tif.bz2 > $tmpxml if [ "$1" = 's' ]; then ../pmlvalid $tmpxml 1>/dev/null else ../pmlvalid $tmpxml 1>&2 fi es=$? rm $tmpxml exit $es ./photoml-0.28/tools/test/digital01.sh0000755000175000017500000000036311361730562017042 0ustar brendtbrendt#! /bin/sh # Test pmldigital applied to images from a digital camera tmpxml='tmp.xml' ../pmldigital -f 200*.jpg > $tmpxml if [ "$1" = 's' ]; then ../pmlvalid $tmpxml 1>/dev/null else ../pmlvalid $tmpxml 1>&2 fi es=$? rm $tmpxml exit $es ./photoml-0.28/tools/test/2004d05f002.jpg0000644000175000017500000001533511361730562016722 0ustar brendtbrendtJFIFExifII* z(2ijCanonCanon PowerShot A802004:08:27 12:40:220220>Rn v~   |nf01004$,2004:08:27 12:40:222004:08:27 12:40:22 k _ .t"$08p xBB  4 "\@ aDk'p &fff)))IMG:PowerShot A80 JPEGFirmware Version 1.00Digicam OwnerD D 2, X II*"@R980100(    !#"! $)4,$'1'-=-167:::"*?D>8B3796    OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOx! }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?ҺB. cM]M--"Y]FAU>Akh3Iy1WUA ^,GL٬ |F-Ŝ@sۭb=DIRonsþT2Ñ:x|PrŃr}Lϒ8ym4G$asОx\un~Wf LaϦxs~ȱ@# pF,H qR1Xgj*/15´#+[=I9(ʹuS=)+w뚝w٭ud&@U_qFu7HȡF8pI,.+W[ .ΎRį'~}k;/CgxsPoJUcX g8+tɒX%8诎@8j'oiiC"`z$kWKvڋF$8N鰧n_AdSPiŏu=j=/~f Gg==+4gp9xLx9;W'=x% J6aW?ʷʬ9 ||d@zvPSq׽/bmxB9}KzNo6"f*QVvdl7aѵ*X~[ ObkKL2KT.J?'tJ݌f3(q"mXsZ iSEpCN+n<sU'ĞR#hÐ<潍rH^IQf [0p}U%xnZfg+4Vrva:r$ rxGj#;NT0( e=wΝUd!@d|@{  KfyH#DIcNI{rh ٣]x*r zv?yC! 9ڛ3=2C6Ax+NsZ֮&"I,0q^+IKMHtwQ;m>hr?8隚)Kܣ7AӰ4Z.pof;݇95B0=JN#t50˱`'#֥`@ힸD-!`s@0JI Je#vsZU;٤#!'Dv&<c@ 01_L]o3u4Xdhe%rOAPpfGWd\H skpaO3t)]v13j/ cH|I]\ qUǵ!Y5"pR?J" Dcqݖ'Aq9nG`s@<;I t3T1Wާ6B08(!?7j7!l:WkK{mrQiMкi_^c @/}jU/*A]tW6w:k%i"p6)9"umŽ~͉rJҒ=ߩ']ՕپF2T-S!QpPgV*BF~w˟ qZ6 z=h0 q2qQMϘ`)= R`CԞpHT2RorDOmITĒS[ӊj 햵֦Ԃ>`F97>g8;s~3Ԗ=<//9޸$rcwvZ$ F:|M ޹;D@Irn_Z_64'G{R߀ $. ՈP۰OˁH]1)pR@ka/(EOgP1L| ɠ (_?N9)`rj^Km{-a}vVk~VysMiI;hMΔu?T7PEF(Nĸ댚:,qκm%K,X[O7v37HҸv+fh`$DjʼRKVUEf#oxjMQDczgr;}+;eWíAu1H N݄xrj@sqҭHYK)n.y<@ x^QFͳq^2i~eHHT ߸'\Pd Ѩ(?VA2:6:gXeQBvԺsp,wd0 7@ 3T8۵댐}\dVї2Ջ@ 98ݷT,Jv׊&9eQM2BCy.΄Rט<9$O1}zE=F*R2MP.59Q_ w#`yA<1X׺$ H6p_w4(rΧha"2g@$n5swij!H_U܎_v66v1KfF1؎ƬƗNƦg$O]J?:}ݏ@=_;vOjFCcWM _DD ۽*bYvB VUFO@^rzHEfD}0YQ嚟~cIwxhV1Ucm/ B7(RԡTc#GpbFzH\E!P }va)y a}SiW4#sQ2|.pv~i"Q c s0Q9{KoStGvjиy?,-_P?I^j8.Hd Uv3@\`[E\빺X Av(*e 1 ?/&9H~u\3L2dO[s*))~}K8-i:e(_p2ȁ 2viBY#Xwqc@FC@U;tVl&@z q:BHPXAq]g z @pJ!b41@T6\#JI<8RCeo- ND f9;~4]3꿺 p昄?s2?bE)t $ʉh!}(/8h>lšv]C|)Hxp[Gp%y18)o-:S bE&QG& qnA}*XTR^awU34ci_p1OoD $.ҟ4<&<ҕkLhr 4"E&1:dm*0mɪ9@@&iulX; Vp'Jy87֩J{Q,2Aj{I=(efPȨ@Ji7R;'> j/`z:f.rf1Dx딥8ICzSLZ=Ac[K+ӒhI M9$ K]BA#./photoml-0.28/tools/test/create01.sh0000755000175000017500000000056711460354054016674 0ustar brendtbrendt#! /bin/sh # Test pmlcreate with the standard example input file tstdir=`pwd` tmpdir="/tmp/pmltest-$$" tmpinp='tmp.txt' mkdir -p $tmpdir cd $tmpdir $tstdir/../pmlcreate -e > $tmpinp $tstdir/../pmlcreate $tmpinp if [ "$1" = 's' ]; then $tstdir/../pmlvalid *.xml 1>/dev/null else $tstdir/../pmlvalid *.xml 1>&2 fi es=$? rm $tmpinp *.xml cd $tstdir rmdir $tmpdir exit $es ./photoml-0.28/tools/test/runtests0000755000175000017500000000107711361730562016545 0ustar brendtbrendt#! /bin/sh # This script runs each of the tools test scripts and reports the results # Copyright © 2005-2008 Brendt Wohlberg # Please see the PhotoML distribution LICENCE file for licence information # Most recent modification: 4 June 2008 tn=0 fn=0 echo Tool tests for t in *.sh; do tb=`basename $t .sh` printf "Test $tb \t" if ! sh $t s; then printf "\t failed\n" fn=`expr $fn + 1` else printf "\t passed\n" fi tn=`expr $tn + 1` done echo "Failed $fn out of $tn tests" if [ "$fn" -gt 0 ]; then exit 1 else exit 0 fi ./photoml-0.28/tools/pmlgrep0000755000175000017500000000421611361730562015343 0ustar brendtbrendt#! /bin/sh # This script provides a grep-like utility for PhotoML files # Copyright © 2003-2007 Brendt Wohlberg # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License at # http://www.gnu.org/licenses/gpl-2.0.txt. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # Most recent modification: 14 January 2008 pmlpath="`echo $0 | sed -e 's|/pmlgrep||'`/.." if [ ! "`which xsltproc 2>/dev/null`" ]; then echo "pmlgrep: error executing xstlproc" >&2 exit 1 fi if [ ! "`which xgrep 2>/dev/null`" ]; then echo "pmlgrep: error executing xgrep" >&2 exit 1 fi usage() { cat <&2 usage: pmlgrep [-h] [-e] [-p] [-x xpath] [-s regex] ... [-s regex] infile [infile] ... -h Display usage information -e Expand defaults before searching -p Use perl regular expressions -x xpath Find nodes matching xpath -s regex Find nodes matching custom syntax used by xgrep EOF } xflags='' expand=0 while [ $# -ge 1 ]; do case $1 in -e) expand=1 ;; -p) xflags="$xflags -p" ;; -x) shift; xflags="$xflags -x $1" ;; -s) shift; xflags="$xflags -s $1" ;; -*) usage; exit 1 ;; *) break ;; esac shift done if [ "$1" = '' ]; then usage; exit 1 fi xsl=$pmlpath/xsl/defaults/expand.xsl if [ -r /etc/xml/catalog -a "$XML_CATALOG_FILES" = '' ]; then XML_CATALOG_FILES=/etc/xml/catalog fi XML_CATALOG_FILES="$pmlpath/dtd/catalog.xml $XML_CATALOG_FILES" export XML_CATALOG_FILES unset SGML_CATALOG_FILES if [ $expand -eq 1 ]; then tmpfile="/tmp/pmlgrep.$$" for src in $@; do if [ ! -f "$src" -o ! -r "$src" ]; then echo "pmlgrep: could not open file $src" >&2 exit 1 fi xsltproc -o $tmpfile $xsl $src xgrep -c "$pmlpath/dtd/catalog.xml" $xflags $tmpfile done rm -f $tmpfile else xgrep -c "$pmlpath/dtd/catalog.xml" $xflags $@ fi exit 0 ./photoml-0.28/tools/pmlvalid.10000644000175000017500000000212711471544000015630 0ustar brendtbrendt.TH pmlvalid 1 "14 January 2008" .SH NAME pmlvalid \(hy validate PhotoML XML files .SH SYNOPSIS .B pmlvalid [\fB\-h\fR] \fIxmlfile\fR [\fIxmlfile\fR] ... .SH DESCRIPTION \fIpmlvalid\fP performs a two\(hystage check on PhotoML XML files. The first stage consists of a call to \fIxmllint\fP for validation against the DTD, and the second stage checks a number of additional data\(hytype and id uniqueness requirements. .SH OPTIONS \fIpmlvalid\fP accepts the following options: .TP 8 .B \-h Display usage information. .SH AUTHOR Brendt Wohlberg .SH COPYRIGHT Copyright \(co 2005\(hy2007 Brendt Wohlberg This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. .SH "SEE ALSO" .BR xmllint (1), .BR xsltproc (1) ./photoml-0.28/tools/pmltoxmp0000755000175000017500000000666011520646043015557 0ustar brendtbrendt#! /bin/sh # This script converts PhotoML files to XMP format # Copyright © 2010,2011 Brendt Wohlberg # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License at # http://www.gnu.org/licenses/gpl-2.0.txt. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # Most recent modification: 28 January 2011 pmlpath="`echo $0 | sed -e 's|/pmltoxmp||'`/.." pmlvalidx="$pmlpath/tools/pmlvalid" if [ ! "`which xsltproc 2>/dev/null`" ]; then echo "pmltoxmp: error executing xstlproc" >&2 exit 1 fi usage() { cat <&2 usage: pmltoxmp [-h] [-n] ([-o path] [-s fstr] | [-f fid] [-g gid]) infile -h Display usage information -n Omit validity test -o path Specify output path -s istr Specify image id string format -f fid Specify id of frame to convert -g gid Specify id of group containing frame to convert EOF } op='' ff='' fp='' gp='' novalid=0 while [ $# -ge 1 ]; do case $1 in -n) novalid=1 ;; -o) shift; op="$1" ;; -s) shift; ff="$1" ;; -f) shift; fp="$1" ;; -g) shift; gp="$1" ;; -*) usage; exit 1 ;; *) infile=$1; break ;; esac shift done if [ \( "$op" != '' -o "$ff" != '' \) -a \( "$fp" != '' -o "$gp" != '' \) ]; then usage; exit 1 fi if [ "$infile" = '' ]; then usage; exit 1 fi if [ ! -f "$infile" -o ! -r "$infile" ]; then echo pmltoxmp: could not open file $infile >&2 exit 2 fi dtdpub=`grep DOCTYPE $infile | grep -o -e '-\/\/.*EN'`; dtdtyp=`echo $dtdpub | grep -o -e '//DTD[^/]*//' | cut -d ' ' -f 2` if [ "$dtdtyp" != 'PhotoML' ]; then echo "pmltoxmp: input document type $dtdtyp not recognised" >&2 exit 3 fi if [ $novalid -eq 0 ]; then if ! $pmlvalidx "$infile" 2>/dev/null; then echo pmltoxmp: validity error in file $infile >&2 exit 4 fi fi if [ "$ff" != '' ]; then # Ensure that image id format string does not contain a path component ff=`echo $ff | sed -e 's|^.*/||'`".xmp" ffparam="--stringparam idstring-format $ff" fi fpparam='' if [ "$fp" != '' ]; then fpparam="--stringparam fid-param $fp" fi gpparam='' if [ "$gp" != '' ]; then gpparam="--stringparam gid-param $gp" fi if [ -r /etc/xml/catalog -a "$XML_CATALOG_FILES" = '' ]; then XML_CATALOG_FILES=/etc/xml/catalog fi XML_CATALOG_FILES="$pmlpath/dtd/catalog.xml $XML_CATALOG_FILES" export XML_CATALOG_FILES unset SGML_CATALOG_FILES edxsl=$pmlpath/xsl/defaults/expand.xsl txxsl=$pmlpath/xsl/misc/xmp.xsl tmpin="/tmp/pmltoxmp.in.$$" xsltproc $fsparam $ecparam $lmparam -o $tmpin $edxsl $infile if [ "$fp" = '' -a "$gp" = '' ]; then tmpout="/tmp/pmltoxmp.out.$$" mkdir -p $tmpout opparam="--stringparam output-path $tmpout/" xsltproc $opparam $ffparam $txxsl $tmpin if [ "$op" = '' ]; then op='.' else op=`echo $op | sed -e 's|/$||'` fi nf=`ls $tmpout/*.xmp 2>/dev/null | wc -l` if [ $nf -gt 0 ]; then for f in $tmpout/*.xmp; do b=`basename $f` if [ -f "$b" ]; then echo Warning: skipping output "$op/$b" - file exists else mv "$f" "$op" fi done fi else xsltproc $fpparam $gpparam $txxsl $tmpin fi status=$? rm -f $tmpin if [ -d "$tmpout" ]; then rm -rf $tmpout fi exit $status ./photoml-0.28/date0000644000175000017500000000002111530542507013433 0ustar brendtbrendt2011-02-21 13:04