summaryrefslogtreecommitdiff
path: root/macros/latex/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r--macros/latex/contrib/diffcoeff/README.txt15
-rw-r--r--macros/latex/contrib/diffcoeff/diffcoeff.pdf5187
-rw-r--r--macros/latex/contrib/diffcoeff/diffcoeff.sty32
-rw-r--r--macros/latex/contrib/diffcoeff/diffcoeff.tex85
-rw-r--r--macros/latex/contrib/fixdif/fixdif-zh-cn.pdfbin163034 -> 163948 bytes
-rw-r--r--macros/latex/contrib/fixdif/fixdif-zh-cn.tex9
-rw-r--r--macros/latex/contrib/fixdif/fixdif.dtx26
-rw-r--r--macros/latex/contrib/fixdif/fixdif.pdfbin97443 -> 97475 bytes
-rw-r--r--macros/latex/contrib/frenchmath/frenchmath.dtx88
-rw-r--r--macros/latex/contrib/frenchmath/frenchmath.pdfbin261083 -> 261467 bytes
-rw-r--r--macros/latex/contrib/hypdoc/README.md4
-rw-r--r--macros/latex/contrib/hypdoc/hypdoc.dtx21
-rw-r--r--macros/latex/contrib/hypdoc/hypdoc.pdfbin335414 -> 335616 bytes
-rw-r--r--macros/latex/contrib/pagelayout/LICENSE416
-rw-r--r--macros/latex/contrib/pagelayout/README.md90
-rw-r--r--macros/latex/contrib/pagelayout/doc/1x1.pdfbin0 -> 1028 bytes
-rw-r--r--macros/latex/contrib/pagelayout/doc/2x1.pdfbin0 -> 1064 bytes
-rw-r--r--macros/latex/contrib/pagelayout/doc/3x2.pdfbin0 -> 1067 bytes
-rw-r--r--macros/latex/contrib/pagelayout/doc/banner.pdfbin0 -> 8993 bytes
-rw-r--r--macros/latex/contrib/pagelayout/doc/banner.svg1
-rw-r--r--macros/latex/contrib/pagelayout/doc/banner.tex58
-rw-r--r--macros/latex/contrib/pagelayout/doc/example-book.pdfbin0 -> 137910 bytes
-rw-r--r--macros/latex/contrib/pagelayout/doc/example-book.tex107
-rw-r--r--macros/latex/contrib/pagelayout/doc/example-borders-and-shadows.pdfbin0 -> 133420 bytes
-rw-r--r--macros/latex/contrib/pagelayout/doc/example-borders-and-shadows.tex52
-rw-r--r--macros/latex/contrib/pagelayout/doc/example-graphic.pdfbin0 -> 37253 bytes
-rw-r--r--macros/latex/contrib/pagelayout/doc/example-graphic.tex35
-rw-r--r--macros/latex/contrib/pagelayout/doc/example-grid.pdfbin0 -> 12036 bytes
-rw-r--r--macros/latex/contrib/pagelayout/doc/example-grid.tex150
-rw-r--r--macros/latex/contrib/pagelayout/doc/example-template.pdfbin0 -> 6305 bytes
-rw-r--r--macros/latex/contrib/pagelayout/doc/example-template.tex46
-rw-r--r--macros/latex/contrib/pagelayout/doc/example-text.pdfbin0 -> 11123 bytes
-rw-r--r--macros/latex/contrib/pagelayout/doc/example-text.tex53
-rw-r--r--macros/latex/contrib/pagelayout/doc/kopi.jpgbin0 -> 1419852 bytes
-rw-r--r--macros/latex/contrib/pagelayout/doc/pagelayout-manual-layout-guides.pdfbin0 -> 6493 bytes
-rw-r--r--macros/latex/contrib/pagelayout/doc/pagelayout-manual-layout-guides.tex41
-rw-r--r--macros/latex/contrib/pagelayout/doc/pagelayout-manual.pdfbin0 -> 74868 bytes
-rw-r--r--macros/latex/contrib/pagelayout/doc/pagelayout-manual.tex473
-rw-r--r--macros/latex/contrib/pagelayout/doc/quickstart-1.svg1
-rw-r--r--macros/latex/contrib/pagelayout/doc/quickstart-2.svg1
-rw-r--r--macros/latex/contrib/pagelayout/doc/quickstart-3.svg1
-rw-r--r--macros/latex/contrib/pagelayout/doc/quickstart.pdfbin0 -> 121601 bytes
-rw-r--r--macros/latex/contrib/pagelayout/doc/quickstart.tex62
-rwxr-xr-xmacros/latex/contrib/pagelayout/scripts/pagelayoutapi371
-rw-r--r--macros/latex/contrib/pagelayout/scripts/pagelayoutapi.1125
-rw-r--r--macros/latex/contrib/pagelayout/scripts/pagelayoutapi.1.md87
-rwxr-xr-xmacros/latex/contrib/pagelayout/scripts/textestvis506
-rw-r--r--macros/latex/contrib/pagelayout/scripts/textestvis.173
-rw-r--r--macros/latex/contrib/pagelayout/scripts/textestvis.1.md55
-rw-r--r--macros/latex/contrib/pagelayout/tex/pagelayout.cls3747
-rw-r--r--macros/latex/contrib/semantex/semantex.pdfbin397760 -> 398307 bytes
-rw-r--r--macros/latex/contrib/semantex/semantex.sty15
-rw-r--r--macros/latex/contrib/semantex/semantex.tex8
-rw-r--r--macros/latex/contrib/semantex/stripsemantex.lua620
-rw-r--r--macros/latex/contrib/semantex/stripsemantex.sty2
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/README.md10
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex36
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex22
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex17
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-marking.tex140
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex13
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-others.tex5
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex12
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex7
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdfbin1109639 -> 1115481 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-angles.tex)88
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-circles.tex)15
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-compass.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-lines.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-points.tex)9
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-polygons.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-protractor.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-sectors.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-show.tex)19
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-marks.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-shape.tex)10
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles.tex223
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-by.tex522
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-spc.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-spc.tex)117
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-with.tex269
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points.tex169
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-axesmin.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles-by.tex)11
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles.tex)18
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-grids.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-lines.tex)12
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-by.tex)40
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-rnd.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-with.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-polygons.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-triangles.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg10
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty82
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-angles.tex102
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-base.tex89
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-intersections.tex525
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-math.tex417
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-BB.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-angles.tex)49
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-base.tex)10
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-colors.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-intersections.tex)74
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-math.tex)43
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-modules.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-text.tex)8
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex (renamed from macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-utilities.tex)68
110 files changed, 12577 insertions, 3481 deletions
diff --git a/macros/latex/contrib/diffcoeff/README.txt b/macros/latex/contrib/diffcoeff/README.txt
index 249a3236a8..b1d625a402 100644
--- a/macros/latex/contrib/diffcoeff/README.txt
+++ b/macros/latex/contrib/diffcoeff/README.txt
@@ -10,12 +10,15 @@ version. The latest version of this license is in
http://www.latex-project.org/lppl.txt
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-Version 5.1 of diffcoeff adds a version-conflict message if the
-now redundant ISO package option of earlier versions is used,
-and tweaks documentation. Version 5.0 of diffcoeff introduced
-many interface incompatibilities with version 4, which is still
-available through the trailing optional argument in the
-\usepackage statement, e.g., \usepackage{diffcoeff}[=v4]
+Version 5.2 of diffcoeff initializes two variables that other-
+wise can conflict with other packages and improves handling
+of an empty differentiation variable argument. There are some
+small additions to the documentation.
+
+Version 5.0 of diffcoeff introduced many interface incompat-
+ibilities with version 4, which is still available through
+the trailing optional argument in the \usepackage statement,
+e.g., \usepackage{diffcoeff}[=v4]
Version 5 requires xtemplate from the l3packages bundle and
the mleftright package.
diff --git a/macros/latex/contrib/diffcoeff/diffcoeff.pdf b/macros/latex/contrib/diffcoeff/diffcoeff.pdf
index fc523120ca..637bca8163 100644
--- a/macros/latex/contrib/diffcoeff/diffcoeff.pdf
+++ b/macros/latex/contrib/diffcoeff/diffcoeff.pdf
@@ -447,9 +447,8 @@ endobj
/Filter /FlateDecode
>>
stream
-xuRMO@WqIoI5i<x zh 4{whG7i #w ϼ)B4QIR6kFDZa )kLi7MRBTg@.> %^*ţ hD: &ZiĂqT—3~O)Uݵ>Ӑw(tz R}a즮ofhҬ5ϸS#2W#D
-*_"Qi10TlN?fR?Ozx>BRs}}=CȍM7ԧFz
-O 0HsPӕkXH-}v T6L<œf厥|3EB}8".ⱡ
+xuRMO@WqIoI5i<x z Bnzzdy3o0rb̛|uy+A$yMV`TFE֐"ϴj]]'/+OE,p&I2QQ$`GKxxP\G$$AXnzo)F8e5}/GJ:ӆT)И8S5QqV %)I imD]4|FXꆱWϕr߇/[
+bw2oø _O
endstream
endobj
294 0 obj
@@ -891,13 +890,13 @@ endobj
endobj
403 0 obj
<<
-/Length 1459
+/Length 1454
/Filter /FlateDecode
>>
stream
-xMsFQU4|C\䲛D._ͧ bemr;` 2>Y+./ӳOr3(9\"B1_L(£1ƌӥ9t)οq(wK\yE& FZ*o27h-k0/q}Vyl̤r 3$
-}M`os uz0Vnsv9Bwh:ex(iwYf
-Y!O"܃!e1)^Ll=jý"y?eS6Wy^%]i^f# 4)5 Z֙i%Dr0$YsE?^Wm~Icg?͔Nwi[*J+1YEI( Lf'h`‘MHa"EqH)K[QnA&@l'1mĸNlg!s|UIkD *a5̓f΂{h.!Ն4tlo#m;.35Dr  :-aػY`#B΂efuВM{aJ3v4͎$?hO|j2Ei#ћ?BF^L1s0Xv)DZYz $҂pĖkֵmzB1kx6і䆐uuXk\"ygp}x /Sw[p÷m H{[YJU{VU6,{y99qQlnW  ׭h4}?E)^کI^5ԝA[=pYf7K6 P{(۬OiiVA /B,Ə 9BM޾-d;It!zo׼qaRL3C~JʚQnۤU$LyT:~ O{ u`r^}ŶH4S-BMwшuᤓg⁹qq{'IM%Z^]$yI>Vxѓ.M#ÜA-걄6TK T'5f:9}ϛx澴`SdI6Г(f0jS*7}>{s((* 6FQ$)=!Ss6"͚,lljW>a:= rJ"]¨짗~)6VX])?Ɯ!<--$i Wbz 8
+xMsFQU4|C\䲛 `ίSFbemrF;` 2>Y+-/ӳOr3(=\"B1_L(£1ƌӥ9t)8A;hwE_-ʂ컪4M4s s]k<lfRV;݆nC`"o3(!p1SJKJJűh#qu{ Pl[C*xvWz9zDl3?Z`yg'Js_/rB 2I/V-FRTMoH1.U[
+f,`>Zܥ: RX';A]QTWҏ4
+
endstream
endobj
402 0 obj
@@ -1704,20 +1703,21 @@ endobj
endobj
477 0 obj
<<
-/Length 2272
+/Length 2450
/Filter /FlateDecode
>>
stream
-xڽXMs6W5 T٪ulhXHl߷ J k<S\$CģW4,FzD3c#&躈n[tQYoKMewcU}]#^w׿E3+E$y$+ʛf7,LvMc^菟ԂeZd%ɮ7bCY<](Z5Uێ{,%Ky XS`T%#.˺ϼ{o ަM_ԋjqm[3m7У''&tcRAgR5G
-I|H~#'Xj֬;{y+UX{W`~t㬸?NcQZ|&b>,2H0
-iu;?jfce
-4`]?f|<wѻjc#$,v3$G T~UR<۠o,e<7혔Y㕯p
-=P gqJX-}$ǰZ{ ,#yF4g >`…x6>># ؄&
-b<aNUvl,^%v(G.gL谡)f-{ڠگ f!ݤᶖuV<P2D铸p\{r=%|ly&v C s3G7prOVpe bdY*h$XXl&SSN!߁%/ὸrKW˗$-OUhֱ^_yRfSy$[֚izxd^<|p{?~0{eb@hQ☲YnA[A{ݛs3,ze f3)G^>q;rw]5%msptԗU6ۓܤA+{W>;3)=ز tƴI' /z*҂OǍ!0HbBi>¦O6BMfGd U`8gްCH\@ 쩔vET"7;M
-f)@_)R
-=3>.'|(PZ
-G92g"פF-2b#}BYoNȸ{:(2^Fi{IzN9!]Q2|{$5<Ӄ=饿bqf5}n{0jTacSN}\3-S8CR2&s* @|_,
-Ag+~~>,j+}WqV/(7m}m6kxHQobuqP-1-43[ R]BPkOcZp هdƳ, 4G8&}d; G2b
+xڽYKsWе )[Kr}PBh
+ '#n䑐nqHj{:1}k63䪿[?^A&3Iqڟi`wo++h l7Di
+=XMO(!)e LUN5|k.Kb y4ϩ\)A}1v=z (*hf㡯mu44zŖGb3Y xh؎<|vCҴ#״~IHCrށ6>TOY> y@޻1O"͓xP]=H~/?j#T4d&dbIYIсi .bDe
+Y+n[58<}1#Ke'JH|AwpٱOJ725Z
+
+mNP"ÆU̘ғ@8p=dLp@xE@<II?^d tWb\Lx|߀ڍ,X[{郳
+EH\tzkl
+>ɟAAC&"\7" #Ǻr#B9u zb!^:&Cm/g{AgGί49Zp*w0{]vlE yE^(4NϚKM:WFKK%w߲RHꖏĠgY(vy= =D|4E KTQ 'ڡ(:ͣω!
+E>x[U2qX
+p
+aGg\_}fU+pm`#Ίly/W%:plQY7)y))ZhTWFXJ喭Q'm}¶v+Dp7ythls}Y3 .LUAg&ߡd/\[Bl侓~%ZXK"p'V/ gIh 5/]4Y^ lu>EDTd7EZFHS
endstream
endobj
476 0 obj
@@ -1727,7 +1727,7 @@ endobj
/Resources 475 0 R
/MediaBox [0 0 612 792]
/Parent 433 0 R
-/Annots [ 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R ]
+/Annots [ 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R ]
>>
endobj
467 0 obj
@@ -1735,7 +1735,7 @@ endobj
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [393.093 566.764 400.067 578.719]
+/Rect [393.093 568.791 400.067 580.746]
/A << /S /GoTo /D (chapter.3) >>
>>
endobj
@@ -1744,7 +1744,7 @@ endobj
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [190.728 555.362 205.451 566.155]
+/Rect [190.728 557.389 205.451 568.182]
/A << /S /GoTo /D (section.3.3) >>
>>
endobj
@@ -1753,7 +1753,7 @@ endobj
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [400.416 499.19 422.887 511.145]
+/Rect [400.416 501.723 422.887 513.678]
/A << /S /GoTo /D (subsection.2.2.3) >>
>>
endobj
@@ -1762,7 +1762,7 @@ endobj
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [342.271 444.124 372.491 454.917]
+/Rect [342.271 447.164 372.491 457.957]
/A << /S /GoTo /D (subsubsection.2.2.3.1) >>
>>
endobj
@@ -1771,7 +1771,7 @@ endobj
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [259.194 400.46 281.666 411.253]
+/Rect [259.194 404.007 281.666 414.799]
/A << /S /GoTo /D (subsection.2.2.2) >>
>>
endobj
@@ -1780,7 +1780,7 @@ endobj
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [307.187 400.46 329.659 411.253]
+/Rect [307.187 404.007 329.659 414.799]
/A << /S /GoTo /D (subsection.2.2.5) >>
>>
endobj
@@ -1789,10 +1789,19 @@ endobj
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [178.607 305.334 201.078 316.127]
+/Rect [178.607 310.4 201.078 321.193]
/A << /S /GoTo /D (subsection.2.2.4) >>
>>
endobj
+474 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [389.953 255.413 420.173 267.368]
+/A << /S /GoTo /D (subsubsection.3.3.2.6) >>
+>>
+endobj
478 0 obj
<<
/D [476 0 R /XYZ 132.768 705.06 null]
@@ -1800,365 +1809,384 @@ endobj
endobj
22 0 obj
<<
-/D [476 0 R /XYZ 133.768 291.391 null]
+/D [476 0 R /XYZ 133.768 241.688 null]
>>
endobj
475 0 obj
<<
-/Font << /F75 308 0 R /F33 309 0 R /F101 439 0 R /F100 410 0 R /F92 360 0 R /F76 311 0 R /F78 312 0 R /F38 313 0 R /F41 314 0 R /F44 431 0 R >>
+/Font << /F75 308 0 R /F33 309 0 R /F101 439 0 R /F100 410 0 R /F92 360 0 R /F76 311 0 R /F78 312 0 R /F38 313 0 R /F41 314 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-482 0 obj
+483 0 obj
<<
-/Length 3326
+/Length 3227
/Filter /FlateDecode
>>
stream
-xZK6ϯa"R( ^rƖVGW,i3%>Td"A|*^={k T>JGAM$킟7R7?cI2HF&fd:|Y؜HD{9aSE]mZ982wn|milMcZ{}q[,nDX<F&Ʋ$mWDjo9[Pb!nteσ*RBKk'_uF%y mTE[WeK{"<?a}6}7ĬC]_vE~?y<v{r_9Im/n*QauPuÂ|,Y,UOPS~}%aӒtbghX1dzG]J~k=͌*3ɠЖ-bŁ'8X;lmy=\ve[iXxJ=w'9"i!6|OO>VIA֊z*4HԮws }塨01)f~ųN
-ң=yKwW$D*WJ<O|~Hdņ4Wh,3“23x#u'5 \
-ݍ: Qۆ[-aN/Rr[$Q.ofJ%o. Ar$lJ!O?cH ,x3@~xoN&h@##Y:-,
-%6!s.~H>=v86`7ua>e e$qDi,9^,<
-8g"sU'gn=!6v?ʁ 1\B5z-
--yutMO`?z'Iٺ컲B &-CssEmU!.rJH:lܓ#}|k1A(G+p =OІLy0r8 ~8䄌q(a#/8LSM%-2_d٤מ hʏ;FQTxp!]<ڤ"`/ V0}Oöh8{:{S`) c;ˋh1#Okv itHc3lg aCfr}FȵR@=E`_Ml.ye_ /iTO{]K<sH+NcDhPqa:NB*j;~
-ڏ}TcUWj5g)"pO'GO<e|瘲1gijn_b[s}xDc;褍مos~N,ӳ;pj~e N9v{jԆv/UCۜ܀ݖ8;,(ښ֭|(ޘYo<EnHwa{MzC Z q;:Up<vjK<+@%@ wB,#D&8"jVu˶b.BȣT^ՅEDu*w؄ʚ[摡,`ʮ/y`}Oy) ndJ"χD&U ;9E(D';eWɣD
-ZH'd#)<c0tflNM'op+}J԰:@QJG'Ơ4~Id;X@-K-%_IG`ɽD)H :z"#ċT_<#z
-E_JܝdHLLh&<U_Q"SG5_^qTXKHPK-4ʠ!c^%eDd !FTN<N:V6~iw~iB,`e'٫#6 "W~3u=EquK+
-?NR`mu0A3)wK
-]I&Ckp)|iIe0DԿ;#w[-<}N@W0~TkoP8c }cLWPJhܟb6G: X 8y'.`nF?$&Jɠ@8 _H^_
+xڭZKo6WaȀb
+@0ꧫfS3.Vc.dQz~A_
+>]3}`l_)5Y2?@:ɞe5'<`8=~64kR M736y3Â:UϳZdeI3r%K{:G͑~A>:6NWk9PhZ`DW^kAώM_nYm]-YtVwAn0Ms5:}_X/ih#~7e8 ֓]mIStViW!js:VF,z :WYӢp8P'PDW49цoA:jvǞZa"޷完iۯwm iXe[}66+zJpzT4 2č6#~Q|8P{G#A
+'7LX3`4:Hp}&Zx`{܉NM ;p뫺Ʀ`߃|HktB#6*@X|`Cq$N_7_i]| b͵?Cj'5|;3ivya 6);XLrEp9v`h&kɴU3[YɢAI-NH]WQDL@&vM]78@/6[Eߗ:E]nc> yw9 TC^D@p,t*ڞh@,SV%G$9X_WbJ8Zէ+~ ,0'GgCtoZ
+5YM b|DivG{?v.#@Sz?Ly"pV;liKrXkl- 8m1bH8(
+d#%U0Ĥum0Eu+ż߯VBZr+!_ ƭK9|f%~ڡu"=0=dMcEʧG<G2x`>jlH4^J/rUjlg=5\)"?B/\kVuu8ñ[Kn3.%Ty|
+L
+Rxxs:JV8\W{,}90TP(\J0-8T]{|@#Mnw\w#7.
+9C
+#Ajln')!k4]OLI*,<nq/B&(\KYD *O +k/Gu=v}Ic=#LK DOUݪK`NfƷ%٣t^=yB<r
+=3 96q +b'("
+BL7P(\J&scV}rD[:ƿ9%,#!sJ00O%s^x.-qa'\z(cϸ :T!x#~ii4Xs_f),E+1"ՌnlU&=ŌWr.Bg  @QRbCuw$1f+>/NT.sqf{:V
+r30| p'b6ץ
+&S![>N ?wN!J(
+Hc?.';XC c 5uAKGM:s4qi>~,}Txc.K:RZt<C-
+y\{bwZ0#T\BRr_r Mq D$-~Mƛ$Ú9̞m_\L
+<Ç@qGXG*
endstream
endobj
-481 0 obj
+482 0 obj
<<
/Type /Page
-/Contents 482 0 R
-/Resources 480 0 R
+/Contents 483 0 R
+/Resources 481 0 R
/MediaBox [0 0 612 792]
/Parent 433 0 R
-/Annots [ 474 0 R ]
+/Annots [ 479 0 R ]
>>
endobj
-474 0 obj
+479 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [353.711 654.302 368.434 665.095]
+/Rect [353.711 606.374 368.434 617.167]
/A << /S /GoTo /D (section.3.4) >>
>>
endobj
-483 0 obj
+484 0 obj
<<
-/D [481 0 R /XYZ 132.768 705.06 null]
+/D [482 0 R /XYZ 132.768 705.06 null]
>>
endobj
26 0 obj
<<
-/D [481 0 R /XYZ 133.768 422.384 null]
+/D [482 0 R /XYZ 133.768 379.399 null]
>>
endobj
-480 0 obj
+481 0 obj
<<
-/Font << /F101 439 0 R /F33 309 0 R /F38 313 0 R /F75 308 0 R /F41 314 0 R /F100 410 0 R /F78 312 0 R /F92 360 0 R /F80 461 0 R /F76 311 0 R >>
+/Font << /F75 308 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F101 439 0 R /F33 309 0 R /F100 410 0 R /F78 312 0 R /F92 360 0 R /F80 461 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-494 0 obj
+495 0 obj
<<
-/Length 3393
+/Length 3451
/Filter /FlateDecode
>>
stream
-xZY~_
-M*o]◫_)XUFMą|2JD O4"Q DOWoQY%x=Nm6_֊đJ$yN"mz/U,5@XɊ$"b T&5@\vHZD-DY:st^nJEZf"bt,lϿh?FR<h)2(ODgVDD(ㇷ%#r,0-ӎky rD$NyeW^l
- U`-wU7G遫U㊦!jq)N~[-/QyL5pUbe5.exm;[\t (AJ>|=C}izZSI9y%Ek:hP}*TtgU`%17{dj{IZJ.,qX$P[&.["cGC++q8T hppw֍z'8.7xƷ5_o=_Oq3ȾjF$|*bh;`|{ϝ{<ϡ8ÂRrj E(3j(Evs:H&1<wpRcSq]GCW;8rT)*z1]r#o.[<~&elf"KqXJsI-;NU{"DdWlS0D
- PY糖դ2ЇmcA_@A&
--~nob/A<}rxOh.bm=~` 4 JYUEV٢)_]J7}G$eD,$&1`fl
-
-wS
-X#oCꈫSPeև|E"0 b3/ZXv7n`Fb$WE2<H3 ߄^h3QW$$љ}(֗¦%Rfֈ˰eF8(q`:JNr_C#
-'5{s/KJ`D
-> t!uRR=
-˯*?]Lv gvDsjQП f?p#^v1`hhVxwƌDKrY산!\ ~S#)0kD@_riA w:Nw
-I%OS 8>X>V$a\
-SV7Ŀf g6FdID\ngq6wgXJg˔wxJn轆|6 y쨦?K;שK aGk~`AQ&6튪'@2"iߟKn/`ɵ1qI3BbNdZp8%Ke!SM]xW1 8&rNϲoOQ`gYZM> )B#b42 UXm
+xZY~_
+x{"l̶;eU勷پԒ5p߁~r81pkkcȊTj?oR$jn
+e动L&)Щd)zC1TB-wݖ
+narMIVC?չ㒚w:<EJөX+FH
+eP${2j6,l£$d8c0p݌h?=GhkTe]PѲA;ilEqX
+trMDF *D:9!~9e(8lF5v&Rȅߣp3$*ٕ. x(OMO9."4M41̃@ YWV]d"Raﴉ 1O4ɻv1 \蔜Y-pLw
+t;S
+su2\(P,@.!Z."Mo8pRz;0y9fd^c< 9MOS̄a&q4ٲA]lIBWbv_O2p!Ax}6p4aG=
+iR9IGPRVQCI 3d'B3?A(9KV=PjB',d~b)yz㥵H[j8x7>jMRrrDdVbOy<#R;0 ̨- Oh_^`F/Cd/@ BF*eE!WUQo"I?U?pJlu?f qgplRM+&Ê\Tѧªې
+R$}2zB`a*zajA,BX9w-1H-}Sk<c女ѓZ.{Ŀ j0&&kppwXg _R@0nߜN(1fÝ8O-O:ڲgQlxclAX9)_Vӛ%ulxpj.?HC'*Ll&w`"N-Ft={7Sac-Nl ķR
+X+#oCꈫSPeև|E"q0 b Z}rM3#iqWYEZH2 o^3wQWeAb}I HKF\U5dtPd_ePNE^f}"
+/{s/KJՈ
+;kBɓjE f˒$0 S5,he*]IMAI)b7d@~Wn -rgQh=QCJ
+sn! a֔97},;Xˋ#>,Rs*uɞ V~?8sjbyzn1ng9' ݱ8[`88i:94U9r|V qR!hD+q4[w[^ǙE.ؐ#UHL'oDDWR8ڮK /wruP$2'c1~̈ߣ
+^=>k+!={]h3Nˆ3XiE/ٴgߎn鿟.Q)ZDwV}N]4!ǔ$J:c^*RŖrEr?^[\wWkwϭ1 蘥]_}@XcHk&*(ڋN"Hct
+
+C;gq [JO1ŹVVjڥS̈́b06$7^b=$qrA: )owzڅl$o  `Ch܈Y; 6ik?OvI6Dg[<Of2f0֒ܦy[,anFX\ ~R֭Fܢ =oT9ĚOE?OF@tOykE Oi;bP)𧠷 W9TI>}VmU[mA4@R6m#3.&l'sl<@hDkQ|8#8 s升tUύ9*?9[|3>>ֿ@nC_rʭ9Y =xRsW |=G*ſWd1}
endstream
endobj
-493 0 obj
+494 0 obj
<<
/Type /Page
-/Contents 494 0 R
-/Resources 492 0 R
+/Contents 495 0 R
+/Resources 493 0 R
/MediaBox [0 0 612 792]
-/Parent 499 0 R
-/Annots [ 479 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R ]
+/Parent 500 0 R
+/Annots [ 480 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R ]
>>
endobj
-479 0 obj
+480 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [207.049 654.302 213.511 666.239]
+/Rect [207.049 630.392 213.511 642.328]
/A << /S /GoTo /D (Hfootnote.3) >>
>>
endobj
-484 0 obj
+485 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [327.469 568.122 333.931 580.335]
+/Rect [327.469 543.851 333.931 556.065]
/A << /S /GoTo /D (Hfootnote.4) >>
>>
endobj
-485 0 obj
+486 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [383.035 544.489 397.758 555.281]
+/Rect [383.035 520.218 397.758 531.011]
/A << /S /GoTo /D (section.3.3) >>
>>
endobj
-486 0 obj
+487 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [423.28 544.489 438.002 555.281]
+/Rect [423.28 520.218 438.002 531.011]
/A << /S /GoTo /D (section.3.4) >>
>>
endobj
-487 0 obj
+488 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [285.981 373.852 316.201 384.644]
+/Rect [285.981 348.861 316.201 359.653]
/A << /S /GoTo /D (subsubsection.2.2.1.1) >>
>>
endobj
-488 0 obj
+489 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [303.033 318.541 317.756 329.334]
+/Rect [303.033 293.07 317.756 303.862]
/A << /S /GoTo /D (section.3.3) >>
>>
endobj
-489 0 obj
+490 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [342.597 318.541 357.319 329.334]
+/Rect [342.597 293.07 357.319 303.862]
/A << /S /GoTo /D (section.3.4) >>
>>
endobj
-490 0 obj
+491 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [350.019 205.928 364.742 216.721]
+/Rect [350.019 179.496 364.742 190.288]
/A << /S /GoTo /D (section.3.3) >>
>>
endobj
-491 0 obj
+492 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [390.264 205.928 404.986 216.721]
+/Rect [390.264 179.496 404.986 190.288]
/A << /S /GoTo /D (section.3.4) >>
>>
endobj
-495 0 obj
+496 0 obj
<<
-/D [493 0 R /XYZ 132.768 705.06 null]
+/D [494 0 R /XYZ 132.768 705.06 null]
>>
endobj
-496 0 obj
+497 0 obj
<<
-/D [493 0 R /XYZ 149.011 147.646 null]
+/D [494 0 R /XYZ 149.011 151.921 null]
>>
endobj
-498 0 obj
+499 0 obj
<<
-/D [493 0 R /XYZ 149.011 128.717 null]
+/D [494 0 R /XYZ 149.011 132.992 null]
>>
endobj
-492 0 obj
+493 0 obj
<<
-/Font << /F33 309 0 R /F90 310 0 R /F41 314 0 R /F80 461 0 R /F38 313 0 R /F100 410 0 R /F75 308 0 R /F101 439 0 R /F44 431 0 R /F78 312 0 R /F96 413 0 R /F95 415 0 R /F109 497 0 R /F107 464 0 R >>
+/Font << /F33 309 0 R /F76 311 0 R /F78 312 0 R /F41 314 0 R /F38 313 0 R /F90 310 0 R /F80 461 0 R /F100 410 0 R /F75 308 0 R /F101 439 0 R /F44 431 0 R /F96 413 0 R /F95 415 0 R /F109 498 0 R /F107 464 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-504 0 obj
+505 0 obj
<<
-/Length 2407
+/Length 2370
/Filter /FlateDecode
>>
stream
-xڽYKoFWpO|`M8;^6!ge(Uw"嶬saG<o.\+,Odݬ#K,JLʤ2*We[$qWqy)].t&ͥ}wP:~s7שq;-Xmݯ 6-FsZ t*@+A].4v~jFbaE+o_Hp-n E|C`}UTUӕm_傔޵~[)ݾU+UeC﫢Y4+ ]?]}OHW0!FW_hb\ۮwrKVk';_f,ə]]ǪS}+L5Q -n ({_N@\fSehRƳԕ]Wa}p\dkЍRaYThEE3>pϪ Fծ#FBLrrGpZ_OWίv'WէO^lbG1z<5|p
-{].DƟT iHʜ-d,Ihģ8Sy=ڭHANYG\ǡ1BDLaed-Y& Bonki R+sJ^Sje,OAXGZH<fM!qSŽƳ)
-8L}jˌz[7
-i&C._*=6hJf:|X8wwEHܹG`bL$81j[0%R2q V 3*wS:mg'VI$Cb2 7N&y<,ZYмw3qiD:xkv罞~I6n<- vgBξss<1GyRSZ kId{I&`з Tm
-_ƭ̃ƿݖOcCCcB<DJaiuc@^Q?&L8T\qC]-});+{HھZ"TIT@P0cv8gFY
-<T􏻯%<[6`[?P$]DEQ%b+rYԵxSXT1h7w?*j[eۅR~SrmB}ms|֍祛B]Cgg[>ZHo6,<n Q~|f*EhsX; R@ b(Ujٕh}?xAԣ[6X#KKH4}86Ȉ e9}k\ҵq}dv#=uHs9E^FCM$epAݮ+r%Q伞Ɋ\h' ;3;<֖\;\j븿B1_\POcIt g^=\((QP!s)o_R2(-s+LZQy+ubQSq*yYu`X,CZP糴VOxlࡡ}H <{s+?}~ַͷ{^ Sy[t%I
-EafAksHHHH!⁖ ŌF:t&$ei|0ڻ@zCt髉&Fz0>Ν5xnsk<96N !SiTD\җ_G (n]
+xڽYKFϯ`NQb1 dx{ #R>0߷Iyv2ӏb}lE.o"WwR)KcۀKL6LHC}ZKmPeOKUѻvö񦭁tpmWt/5LLptȪ49tJ$2/F&m]>
+0֜T;Q?1FMqȺl(ۆZHν3z;Y$p\,Ɯꑊɀ
+#!
+:"e7
+%j( 䠓H$s(މ!N`w <Xbb<*HJ?i`8"ߡPHP]w0.Nz!(Ĉ Iv{2NWw7G/Y`$R wIgGP|F)HJG0t!;ϗ9īTXFAGsz 𳟛ե7oo<"eK+4 6Q&&&$xu C
+~ޅ`BI&84`mBɚ
+zK.H =H |*A*QJq{
+M9\wg% 7Ӊ\͎ΐ:~G۔iǹ<n\ `gNj-_PZ_?c5w5$z&ֲEcG3QeL$O?0Hhq$1聴Of`a0)MTVK$z
+Cͱ|4FfSn}Eb1F}9Z)Ӝ?<B%̞0gؗbd^h9ǩsJm;oU 
+cTc^<~ch#\B#?mwrmj)jW<tT,kaO2 sXm*om6ae wEZ썦uyZc[Zk8gkpĂF
endstream
endobj
-503 0 obj
+504 0 obj
<<
/Type /Page
-/Contents 504 0 R
-/Resources 502 0 R
+/Contents 505 0 R
+/Resources 503 0 R
/MediaBox [0 0 612 792]
-/Parent 499 0 R
-/Annots [ 500 0 R 501 0 R ]
+/Parent 500 0 R
+/Annots [ 501 0 R 502 0 R ]
>>
endobj
-500 0 obj
+501 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [448.801 247.69 463.523 258.815]
+/Rect [448.801 214.529 463.523 225.654]
/A << /S /GoTo /D (section.1.1) >>
>>
endobj
-501 0 obj
+502 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [369.502 235.735 399.722 246.804]
+/Rect [369.502 202.574 399.722 213.643]
/A << /S /GoTo /D (subsubsection.2.2.4.3) >>
>>
endobj
-505 0 obj
+506 0 obj
<<
-/D [503 0 R /XYZ 132.768 705.06 null]
+/D [504 0 R /XYZ 132.768 705.06 null]
>>
endobj
30 0 obj
<<
-/D [503 0 R /XYZ 133.768 423.229 null]
+/D [504 0 R /XYZ 133.768 393.317 null]
>>
endobj
34 0 obj
<<
-/D [503 0 R /XYZ 133.768 222.99 null]
+/D [504 0 R /XYZ 133.768 189.629 null]
>>
endobj
-502 0 obj
+503 0 obj
<<
-/Font << /F33 309 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F78 312 0 R /F74 307 0 R /F90 310 0 R /F110 506 0 R /F92 360 0 R /F76 311 0 R >>
+/Font << /F33 309 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F78 312 0 R /F74 307 0 R /F90 310 0 R /F110 507 0 R /F92 360 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-510 0 obj
+511 0 obj
<<
-/Length 2351
+/Length 2369
/Filter /FlateDecode
>>
stream
-xZo~_{ߤvQ[9zh/oPl%6VsIP Iɢؾ@b#r83Qh õYNruv1!6.Tvn'L|.)ݪòb^yQ dDQ/e:O2֬W]mԽ}õdDGrx\91G=0˼&֘ a4ٌ1`vU;^b`ꦛuK0RLnԷ)ۿr3⻶[ӛA٠?*<mv<P8LbuG( |V|܋#2Se/TNu9k
-oٮp>F"*Wٌrz~W;&b//WoOb$Q_2?.cphBm QRmJ܀ Hi
-è,:&
-4YB.|3j2oYїya .כ>z磰aF$ݗHc]{ȗ,6($82z|`~ _Eրq
-Wh~q+i%FKd}ޔIcHٛ\F+$E>笏ә a./FvG%Yw:/2d0<|rzN벪V9dcZ),$جxɺUxOh
-E ^}
-K4myz /
-OxzKk
-wl"."YR;E2/᯾yt =zk}"i:>b1$ B,L-6dۯʭWpȕPSPy޵% EyVY_(//s<ÿ_hӂwh{S+E1Ѿ
-#*qw[J= ؙ߶ǴB/_KOaA2&Ne u2 1X,DId6j.Qg/
-0WxwIAbz\v-4 @rռؕS]5jUL>:
-cAɁyb"rd=C
+xZo6_>ؗ5ߤ8{@hzkޒ=@XZNfHJ6eFR=Y"pf~%>O\]`T\s]e, 3:.TvȮ'7LLqkqCPl/Аǫ_~6:O+pN'DjmCpCKl3cil)-<SuHn`P*Zh.Ñd;INǫ x˸ *iQ"o.?ldft1Mu췋yG{qA$gȾl$mƉ5)5
+!W}R 4126$9oU| 1JUCGVc䭺}~
+@3A<z\, 5n`~Ou ,Vmd"sFz6
+i6
+W
+|6I|J-G|ߥ-Y\1% hlI$,D}<hxn<BiTr G*<;g1sS^PRzL$e/אn$j_˜˞p'u̞prj6/2$xlTV%lVOT&0ǯ! >rvvRE3)1ŀ2.? 4,eO&}!y!|b--
+4"bPl.|JjTFp mSBkn6+Hr]%ntQP~uoW~mOS~Э%;>f[L ƭ[C(|o}qN,
+RƵE}Y5~ph\ \w ~axմkPN I In .iwvu/A
+^zO}mО%p^.|Od^=q]F_œ;顑 H]nv|}NGan7HzB$[U{/牶hI>F!ŲW9ĂIx|m / x8!puXv y
+ї~}A=%H #6O;"q]u<cD e%<$<H,Vtk Ӥ&zBnCU]o)Vamei`
endstream
endobj
-509 0 obj
+510 0 obj
<<
/Type /Page
-/Contents 510 0 R
-/Resources 508 0 R
+/Contents 511 0 R
+/Resources 509 0 R
/MediaBox [0 0 612 792]
-/Parent 499 0 R
-/Annots [ 507 0 R ]
+/Parent 500 0 R
+/Annots [ 508 0 R ]
>>
endobj
-507 0 obj
+508 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [211.623 321.674 234.094 332.467]
+/Rect [211.623 281.422 234.094 292.215]
/A << /S /GoTo /D (subsection.2.2.5) >>
>>
endobj
-511 0 obj
+512 0 obj
<<
-/D [509 0 R /XYZ 132.768 705.06 null]
+/D [510 0 R /XYZ 132.768 705.06 null]
>>
endobj
38 0 obj
<<
-/D [509 0 R /XYZ 133.768 308.729 null]
+/D [510 0 R /XYZ 133.768 268.658 null]
>>
endobj
-508 0 obj
+509 0 obj
<<
-/Font << /F33 309 0 R /F41 314 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F76 311 0 R /F78 312 0 R /F100 410 0 R /F92 360 0 R >>
+/Font << /F75 308 0 R /F38 313 0 R /F44 431 0 R /F76 311 0 R /F41 314 0 R /F78 312 0 R /F33 309 0 R /F100 410 0 R /F92 360 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-514 0 obj
+515 0 obj
<<
-/Length 2183
+/Length 2287
/Filter /FlateDecode
>>
stream
-xڭYK6ϯm){HU٭ZomNl#Q#V$qLRQ߷
-MX"ܘD F b{MKBp6y[ПHmn~ .hP0*6W:}P1\‰5itFԴ{i6gڤ\Կ \ R4?F.+RN쎊\J~)fX*b.>&@ؔqq66w0Ѭ#%ğyfYKQ-eęU[?N#tAT/&c9ciO0r.e>h?F4"eves #NӢ +>_=Cmw)H]WM{iB|7ytH`Y}̼?#zij3Ig6J4h2NK/aanQzT2S*xFuxzo;5y0#*]i],rY{KSqZܤ#7Nƣw*x0Qwk+jNcr1s W޼0xێo9QFDѿ
-Qޖ嗐TFi5d7_G':A*Ϲ kI]N :YaH
-kPXFB
-Bp8y^vu|YۏZ= 2t$~714pN}ZVZn ew3(Qp(l+N
-!=QAX
-'8Xduj:2dŮl
-ڶ;R
-Jk.VXf /uxx߱T7~Ued-)f?WE^Uy_B
-G`3hS ǫ.(ar;z6@!~BsE¡52nQ).eQ:j|2{$ΰG /P&tZ6vHFǩ5Gz:A9P4
+xڭYK۸ϯ-=$rU8$HԈzI#{@)Q#
+y8toOľ5_Ӿ -L(4TsAOB鏓wbL_YbCo#_(?DRq8=DI¸u 4C3ܰ$uXf
+ i.\MdX"E?nH#1a2MG Lh7o>~9&q L9;zkϴ!V_onaOqYŦ&ԣv#ޑRINf T$@v?f6ih~\/p*9g(&M<MZ'EYrY-خ*6ڪc~#]dK9 wA(87yCK=]IN$x[9DtC9XGj
+ /r[u\ؾ<zPf[H>.0C م::<}Q!C򲎀Q6+-o ;ۮyn˼ڭyB3u߆&6JL9iQgbroKLT9f[o;|q\_[+@]& ?qiB/@%]$~'ӡD<G#3<,Í wK.kP:Kuч3o^?/Pc3@>n0 n!f:P=ik #ɆW
+Ji{4#[k[+;ynN(ahߵULJʮ[^߳'Dj< :URu{0a$|~z剚ޠv
+`~)
+NnHC[o o~hLH1,+E)xVF fx_!k)
+8YfiK9z_韹g]NN)18oA 26}"3sp
+:pƏSHJ'qmz^)3ݱJ 8<'@<;ӧNw!lGlU#}X6eDtxApuHmα'a”S ["FOU3J  mbdb3mRl{>AL P|`O¤,y=EӖƐ6
+yEdyVO)RڝDm؟ą>f"uV%R
+
+fK0EQ}/*t6@{0Q^{0S?# <(`G'%m=eq-yNB|ح!</#
+wD%!QFխ
+Jkېw0_lW+2Qe"uGKz U,:f,+in'KP6) M$p[C9+R31{~]}wrlI76sOC,|oAj22%>N<HYp=ٳӛ7g
+<N4<9^\"RT$ iyAIzl|A@u>PJI
+BlGV!8=w
+2݃_lr ٖCU})닼ˮi{Ob f;üHE~ =<Oq}#C4@r)
+Ie n-GDVg'@
endstream
endobj
-513 0 obj
+514 0 obj
<<
/Type /Page
-/Contents 514 0 R
-/Resources 512 0 R
+/Contents 515 0 R
+/Resources 513 0 R
/MediaBox [0 0 612 792]
-/Parent 499 0 R
+/Parent 500 0 R
>>
endobj
-515 0 obj
+516 0 obj
<<
-/D [513 0 R /XYZ 132.768 705.06 null]
+/D [514 0 R /XYZ 132.768 705.06 null]
>>
endobj
42 0 obj
<<
-/D [513 0 R /XYZ 133.768 339.138 null]
+/D [514 0 R /XYZ 133.768 325.828 null]
>>
endobj
-512 0 obj
+513 0 obj
<<
-/Font << /F75 308 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F76 311 0 R /F33 309 0 R /F78 312 0 R /F100 410 0 R /F74 307 0 R /F45 432 0 R >>
+/Font << /F33 309 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F76 311 0 R /F78 312 0 R /F100 410 0 R /F74 307 0 R /F45 432 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-522 0 obj
+523 0 obj
<<
/Length 2325
/Filter /FlateDecode
@@ -2176,17 +2204,17 @@ qЎmbvḾ.?ŏZ!9Ypc!Qk]) BYd+vu#|pفArZ
~GOsN˧9jrQJ'8<{5fVW[ѫ1gi
endstream
endobj
-521 0 obj
+522 0 obj
<<
/Type /Page
-/Contents 522 0 R
-/Resources 520 0 R
+/Contents 523 0 R
+/Resources 521 0 R
/MediaBox [0 0 612 792]
-/Parent 499 0 R
-/Annots [ 516 0 R 517 0 R 518 0 R 519 0 R ]
+/Parent 500 0 R
+/Annots [ 517 0 R 518 0 R 519 0 R 520 0 R ]
>>
endobj
-516 0 obj
+517 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2195,7 +2223,7 @@ endobj
/A << /S /GoTo /D (section.3.3) >>
>>
endobj
-517 0 obj
+518 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2204,7 +2232,7 @@ endobj
/A << /S /GoTo /D (section.3.4) >>
>>
endobj
-518 0 obj
+519 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2213,7 +2241,7 @@ endobj
/A << /S /GoTo /D (subsubsection.3.3.2.3) >>
>>
endobj
-519 0 obj
+520 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2222,28 +2250,28 @@ endobj
/A << /S /GoTo /D (section.3.4) >>
>>
endobj
-523 0 obj
+524 0 obj
<<
-/D [521 0 R /XYZ 132.768 705.06 null]
+/D [522 0 R /XYZ 132.768 705.06 null]
>>
endobj
46 0 obj
<<
-/D [521 0 R /XYZ 133.768 574.541 null]
+/D [522 0 R /XYZ 133.768 574.541 null]
>>
endobj
50 0 obj
<<
-/D [521 0 R /XYZ 133.768 419.097 null]
+/D [522 0 R /XYZ 133.768 419.097 null]
>>
endobj
-520 0 obj
+521 0 obj
<<
/Font << /F33 309 0 R /F100 410 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F78 312 0 R /F74 307 0 R /F76 311 0 R /F92 360 0 R /F45 432 0 R /F90 310 0 R /F101 439 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-528 0 obj
+529 0 obj
<<
/Length 2577
/Filter /FlateDecode
@@ -2267,17 +2295,17 @@ IB Db wu΁xEa|Lqb Tퟷ}A `c([dJOn:I<
B+c_>v7v1,V[(%iz5r/m}3>)󝝇QB7ݐ'CO$C좆#g[Zll d"юJmAW 7'h@.973
endstream
endobj
-527 0 obj
+528 0 obj
<<
/Type /Page
-/Contents 528 0 R
-/Resources 526 0 R
+/Contents 529 0 R
+/Resources 527 0 R
/MediaBox [0 0 612 792]
-/Parent 499 0 R
-/Annots [ 524 0 R ]
+/Parent 500 0 R
+/Annots [ 525 0 R ]
>>
endobj
-524 0 obj
+525 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2286,28 +2314,28 @@ endobj
/A << /S /GoTo /D (section.3.3) >>
>>
endobj
-529 0 obj
+530 0 obj
<<
-/D [527 0 R /XYZ 132.768 705.06 null]
+/D [528 0 R /XYZ 132.768 705.06 null]
>>
endobj
54 0 obj
<<
-/D [527 0 R /XYZ 133.768 401.645 null]
+/D [528 0 R /XYZ 133.768 401.645 null]
>>
endobj
58 0 obj
<<
-/D [527 0 R /XYZ 133.768 239.856 null]
+/D [528 0 R /XYZ 133.768 239.856 null]
>>
endobj
-526 0 obj
+527 0 obj
<<
/Font << /F33 309 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F78 312 0 R /F76 311 0 R /F45 432 0 R /F74 307 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-534 0 obj
+535 0 obj
<<
/Length 2478
/Filter /FlateDecode
@@ -2323,17 +2351,17 @@ C} |ܱ^PćE{A\{AST/HzAPW}-w{3U"^\b|668
zņAAb- 4}!(}<DB׶y~g股v]ԡ\ŏ'uZS^L; ׏1(2-_
endstream
endobj
-533 0 obj
+534 0 obj
<<
/Type /Page
-/Contents 534 0 R
-/Resources 532 0 R
+/Contents 535 0 R
+/Resources 533 0 R
/MediaBox [0 0 612 792]
-/Parent 536 0 R
-/Annots [ 525 0 R 530 0 R 531 0 R ]
+/Parent 537 0 R
+/Annots [ 526 0 R 531 0 R 532 0 R ]
>>
endobj
-525 0 obj
+526 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2342,7 +2370,7 @@ endobj
/A << /S /GoTo /D (subsubsection.2.2.3.1) >>
>>
endobj
-530 0 obj
+531 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2351,7 +2379,7 @@ endobj
/A << /S /GoTo /D (section.1.1) >>
>>
endobj
-531 0 obj
+532 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2360,23 +2388,23 @@ endobj
/A << /S /GoTo /D (section.3.3) >>
>>
endobj
-535 0 obj
+536 0 obj
<<
-/D [533 0 R /XYZ 132.768 705.06 null]
+/D [534 0 R /XYZ 132.768 705.06 null]
>>
endobj
62 0 obj
<<
-/D [533 0 R /XYZ 133.768 548.705 null]
+/D [534 0 R /XYZ 133.768 548.705 null]
>>
endobj
-532 0 obj
+533 0 obj
<<
-/Font << /F75 308 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F78 312 0 R /F45 432 0 R /F33 309 0 R /F76 311 0 R /F74 307 0 R /F110 506 0 R >>
+/Font << /F75 308 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F78 312 0 R /F45 432 0 R /F33 309 0 R /F76 311 0 R /F74 307 0 R /F110 507 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-539 0 obj
+540 0 obj
<<
/Length 2560
/Filter /FlateDecode
@@ -2395,32 +2423,32 @@ tGKpٲ/`tjOi F.`0zU..H{ly JJnS:7
2X'e9W(m@DVfK<27܆$oHf2-<N4`-2DMZ I?!h_cu
endstream
endobj
-538 0 obj
+539 0 obj
<<
/Type /Page
-/Contents 539 0 R
-/Resources 537 0 R
+/Contents 540 0 R
+/Resources 538 0 R
/MediaBox [0 0 612 792]
-/Parent 536 0 R
+/Parent 537 0 R
>>
endobj
-540 0 obj
+541 0 obj
<<
-/D [538 0 R /XYZ 132.768 705.06 null]
+/D [539 0 R /XYZ 132.768 705.06 null]
>>
endobj
66 0 obj
<<
-/D [538 0 R /XYZ 133.768 667.198 null]
+/D [539 0 R /XYZ 133.768 667.198 null]
>>
endobj
-537 0 obj
+538 0 obj
<<
/Font << /F92 360 0 R /F33 309 0 R /F100 410 0 R /F41 314 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F76 311 0 R /F78 312 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-543 0 obj
+544 0 obj
<<
/Length 2360
/Filter /FlateDecode
@@ -2435,37 +2463,37 @@ k-FuTu[ЂLQ
6zZ>->O4+  k$iL1n!}@}QОR#<)x1
endstream
endobj
-542 0 obj
+543 0 obj
<<
/Type /Page
-/Contents 543 0 R
-/Resources 541 0 R
+/Contents 544 0 R
+/Resources 542 0 R
/MediaBox [0 0 612 792]
-/Parent 536 0 R
+/Parent 537 0 R
>>
endobj
-544 0 obj
+545 0 obj
<<
-/D [542 0 R /XYZ 132.768 705.06 null]
+/D [543 0 R /XYZ 132.768 705.06 null]
>>
endobj
70 0 obj
<<
-/D [542 0 R /XYZ 133.768 583.519 null]
+/D [543 0 R /XYZ 133.768 583.519 null]
>>
endobj
74 0 obj
<<
-/D [542 0 R /XYZ 133.768 390.69 null]
+/D [543 0 R /XYZ 133.768 390.69 null]
>>
endobj
-541 0 obj
+542 0 obj
<<
-/Font << /F100 410 0 R /F33 309 0 R /F75 308 0 R /F74 307 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F76 311 0 R /F78 312 0 R /F80 461 0 R /F110 506 0 R >>
+/Font << /F100 410 0 R /F33 309 0 R /F75 308 0 R /F74 307 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F76 311 0 R /F78 312 0 R /F80 461 0 R /F110 507 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-547 0 obj
+548 0 obj
<<
/Length 2553
/Filter /FlateDecode
@@ -2484,32 +2512,32 @@ HD%5qOBrI]#!?!Tհh%Chl\,i6{TyMly-+
VhkV5)ܼ_2;a;Q3% ~RMj0Q|=`ː2̇=61XeG#*b{jzπ5=zݾomT_ `F䵷07J !%3-z+[d>{ݘ%Va
endstream
endobj
-546 0 obj
+547 0 obj
<<
/Type /Page
-/Contents 547 0 R
-/Resources 545 0 R
+/Contents 548 0 R
+/Resources 546 0 R
/MediaBox [0 0 612 792]
-/Parent 536 0 R
+/Parent 537 0 R
>>
endobj
-548 0 obj
+549 0 obj
<<
-/D [546 0 R /XYZ 132.768 705.06 null]
+/D [547 0 R /XYZ 132.768 705.06 null]
>>
endobj
78 0 obj
<<
-/D [546 0 R /XYZ 133.768 406.239 null]
+/D [547 0 R /XYZ 133.768 406.239 null]
>>
endobj
-545 0 obj
+546 0 obj
<<
/Font << /F33 309 0 R /F75 308 0 R /F100 410 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F78 312 0 R /F76 311 0 R /F74 307 0 R /F80 461 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-551 0 obj
+552 0 obj
<<
/Length 2051
/Filter /FlateDecode
@@ -2530,32 +2558,32 @@ xn]_</ X ?$<`G"cBrV,jrHm #L_źΞ(OW

endstream
endobj
-550 0 obj
+551 0 obj
<<
/Type /Page
-/Contents 551 0 R
-/Resources 549 0 R
+/Contents 552 0 R
+/Resources 550 0 R
/MediaBox [0 0 612 792]
-/Parent 536 0 R
+/Parent 537 0 R
>>
endobj
-552 0 obj
+553 0 obj
<<
-/D [550 0 R /XYZ 132.768 705.06 null]
+/D [551 0 R /XYZ 132.768 705.06 null]
>>
endobj
82 0 obj
<<
-/D [550 0 R /XYZ 133.768 428.083 null]
+/D [551 0 R /XYZ 133.768 428.083 null]
>>
endobj
-549 0 obj
+550 0 obj
<<
/Font << /F33 309 0 R /F75 308 0 R /F100 410 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F78 312 0 R /F76 311 0 R /F80 461 0 R /F74 307 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-556 0 obj
+557 0 obj
<<
/Length 2703
/Filter /FlateDecode
@@ -2568,17 +2596,17 @@ P\*º <}' (Q/b8>9)>QZ+o&̴SwpCVv '`DX(I
H7O]מlfl`/AtR4z3oaRP%-P*(q$_IK )}$@Rx+)RX((ˊgQaiQᒎ|^Ym$͟ƭŎ B7L=n B!3=rJFŻ1Xs='̰)9['S9dK@,*3#0!΋' d{ H. ˵G81i|0A58g1O1o0O#,jKZ0FNEKQoAf6Dqj8E%^g;jC|LOj䫽yH/Z(Ufjqc<7MUmz7渎®-gljOJn$Ϩ:0U D Kpmr{@A.kV.Ua X ƁuWEɂ)1~I yv.ƿ~r/n ߖ $kPc!%pf!e+Ylf\oXpުpt^\=W<&vڕuiThת*# Ě\e@gOGJD^[H]v?؉9 fjkn})-RM+bЧaT
endstream
endobj
-555 0 obj
+556 0 obj
<<
/Type /Page
-/Contents 556 0 R
-/Resources 554 0 R
+/Contents 557 0 R
+/Resources 555 0 R
/MediaBox [0 0 612 792]
-/Parent 536 0 R
-/Annots [ 553 0 R ]
+/Parent 537 0 R
+/Annots [ 554 0 R ]
>>
endobj
-553 0 obj
+554 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2587,28 +2615,28 @@ endobj
/A << /S /GoTo /D (equation.1.2.1) >>
>>
endobj
-557 0 obj
+558 0 obj
<<
-/D [555 0 R /XYZ 132.768 705.06 null]
+/D [556 0 R /XYZ 132.768 705.06 null]
>>
endobj
86 0 obj
<<
-/D [555 0 R /XYZ 133.768 553.434 null]
+/D [556 0 R /XYZ 133.768 553.434 null]
>>
endobj
90 0 obj
<<
-/D [555 0 R /XYZ 133.768 180.464 null]
+/D [556 0 R /XYZ 133.768 180.464 null]
>>
endobj
-554 0 obj
+555 0 obj
<<
-/Font << /F38 313 0 R /F44 431 0 R /F41 314 0 R /F76 311 0 R /F79 558 0 R /F77 443 0 R /F80 461 0 R /F33 309 0 R /F75 308 0 R /F100 410 0 R /F74 307 0 R /F78 312 0 R /F81 454 0 R >>
+/Font << /F38 313 0 R /F44 431 0 R /F41 314 0 R /F76 311 0 R /F79 559 0 R /F77 443 0 R /F80 461 0 R /F33 309 0 R /F75 308 0 R /F100 410 0 R /F74 307 0 R /F78 312 0 R /F81 454 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-563 0 obj
+564 0 obj
<<
/Length 2513
/Filter /FlateDecode
@@ -2625,17 +2653,17 @@ L)ό,u)
ܑr.[|Xij&bBfU1ie^>T۲hn.0_9N0bbtF<Rd2E$.TF#WQdr8`#&mlڳqΥ !Yu+ROMr.fԾ#LJo_8Ftq?U
endstream
endobj
-562 0 obj
+563 0 obj
<<
/Type /Page
-/Contents 563 0 R
-/Resources 561 0 R
+/Contents 564 0 R
+/Resources 562 0 R
/MediaBox [0 0 612 792]
-/Parent 565 0 R
-/Annots [ 559 0 R 560 0 R ]
+/Parent 566 0 R
+/Annots [ 560 0 R 561 0 R ]
>>
endobj
-559 0 obj
+560 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2644,7 +2672,7 @@ endobj
/A << /S /GoTo /D (chapter.3) >>
>>
endobj
-560 0 obj
+561 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2653,23 +2681,23 @@ endobj
/A << /S /GoTo /D (subsubsection.2.2.1.1) >>
>>
endobj
-564 0 obj
+565 0 obj
<<
-/D [562 0 R /XYZ 132.768 705.06 null]
+/D [563 0 R /XYZ 132.768 705.06 null]
>>
endobj
94 0 obj
<<
-/D [562 0 R /XYZ 133.768 307.585 null]
+/D [563 0 R /XYZ 133.768 307.585 null]
>>
endobj
-561 0 obj
+562 0 obj
<<
/Font << /F33 309 0 R /F41 314 0 R /F76 311 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F78 312 0 R /F92 360 0 R /F100 410 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-571 0 obj
+572 0 obj
<<
/Length 2965
/Filter /FlateDecode
@@ -2686,17 +2714,17 @@ C뀟l`=:hP=06\o** :u<D hx",%I.٭$Pck>4
d_β)bd#m>A\`Ƞd3͙A*
endstream
endobj
-570 0 obj
+571 0 obj
<<
/Type /Page
-/Contents 571 0 R
-/Resources 569 0 R
+/Contents 572 0 R
+/Resources 570 0 R
/MediaBox [0 0 612 792]
-/Parent 565 0 R
-/Annots [ 566 0 R 567 0 R 568 0 R ]
+/Parent 566 0 R
+/Annots [ 567 0 R 568 0 R 569 0 R ]
>>
endobj
-566 0 obj
+567 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2705,7 +2733,7 @@ endobj
/A << /S /GoTo /D (section.3.4) >>
>>
endobj
-567 0 obj
+568 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2714,7 +2742,7 @@ endobj
/A << /S /GoTo /D (equation.1.2.2) >>
>>
endobj
-568 0 obj
+569 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2723,18 +2751,18 @@ endobj
/A << /S /GoTo /D (section.3.4) >>
>>
endobj
-572 0 obj
+573 0 obj
<<
-/D [570 0 R /XYZ 132.768 705.06 null]
+/D [571 0 R /XYZ 132.768 705.06 null]
>>
endobj
-569 0 obj
+570 0 obj
<<
/Font << /F33 309 0 R /F75 308 0 R /F38 313 0 R /F41 314 0 R /F76 311 0 R /F100 410 0 R /F44 431 0 R /F45 432 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-579 0 obj
+580 0 obj
<<
/Length 2448
/Filter /FlateDecode
@@ -2754,17 +2782,17 @@ UxvAh䏮w%}Sq,] 80?ntG'SFTzWt}ӤLHm
fM\VGIl2+~{ఈ{CIw胖\
endstream
endobj
-578 0 obj
+579 0 obj
<<
/Type /Page
-/Contents 579 0 R
-/Resources 577 0 R
+/Contents 580 0 R
+/Resources 578 0 R
/MediaBox [0 0 612 792]
-/Parent 565 0 R
-/Annots [ 573 0 R 574 0 R 576 0 R 575 0 R ]
+/Parent 566 0 R
+/Annots [ 574 0 R 575 0 R 577 0 R 576 0 R ]
>>
endobj
-573 0 obj
+574 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2773,7 +2801,7 @@ endobj
/A << /S /GoTo /D (Hfootnote.5) >>
>>
endobj
-574 0 obj
+575 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2782,7 +2810,7 @@ endobj
/A << /S /GoTo /D (Hfootnote.6) >>
>>
endobj
-576 0 obj
+577 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2791,7 +2819,7 @@ endobj
/A << /S /GoTo /D (section.3.3) >>
>>
endobj
-575 0 obj
+576 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2800,38 +2828,38 @@ endobj
/A << /S /GoTo /D (chapter.4) >>
>>
endobj
-580 0 obj
+581 0 obj
<<
-/D [578 0 R /XYZ 132.768 705.06 null]
+/D [579 0 R /XYZ 132.768 705.06 null]
>>
endobj
98 0 obj
<<
-/D [578 0 R /XYZ 133.768 667.198 null]
+/D [579 0 R /XYZ 133.768 667.198 null]
>>
endobj
102 0 obj
<<
-/D [578 0 R /XYZ 133.768 290.32 null]
+/D [579 0 R /XYZ 133.768 290.32 null]
>>
endobj
-581 0 obj
+582 0 obj
<<
-/D [578 0 R /XYZ 149.011 149.075 null]
+/D [579 0 R /XYZ 149.011 149.075 null]
>>
endobj
-582 0 obj
+583 0 obj
<<
-/D [578 0 R /XYZ 149.011 130.146 null]
+/D [579 0 R /XYZ 149.011 130.146 null]
>>
endobj
-577 0 obj
+578 0 obj
<<
/Font << /F92 360 0 R /F75 308 0 R /F33 309 0 R /F90 310 0 R /F100 410 0 R /F96 413 0 R /F95 415 0 R /F97 416 0 R /F107 464 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-588 0 obj
+589 0 obj
<<
/Length 2651
/Filter /FlateDecode
@@ -2854,17 +2882,17 @@ l-zyqB>
J^txa
endstream
endobj
-587 0 obj
+588 0 obj
<<
/Type /Page
-/Contents 588 0 R
-/Resources 586 0 R
+/Contents 589 0 R
+/Resources 587 0 R
/MediaBox [0 0 612 792]
-/Parent 565 0 R
-/Annots [ 583 0 R 584 0 R 585 0 R ]
+/Parent 566 0 R
+/Annots [ 584 0 R 585 0 R 586 0 R ]
>>
endobj
-583 0 obj
+584 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2873,7 +2901,7 @@ endobj
/A << /S /GoTo /D (section.1.2) >>
>>
endobj
-584 0 obj
+585 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2882,7 +2910,7 @@ endobj
/A << /S /GoTo /D (table.caption.6) >>
>>
endobj
-585 0 obj
+586 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2891,43 +2919,43 @@ endobj
/A << /S /GoTo /D (table.caption.6) >>
>>
endobj
-589 0 obj
+590 0 obj
<<
-/D [587 0 R /XYZ 132.768 705.06 null]
+/D [588 0 R /XYZ 132.768 705.06 null]
>>
endobj
-590 0 obj
+591 0 obj
<<
-/D [587 0 R /XYZ 133.768 673.176 null]
+/D [588 0 R /XYZ 133.768 673.176 null]
>>
endobj
106 0 obj
<<
-/D [587 0 R /XYZ 133.768 263.51 null]
+/D [588 0 R /XYZ 133.768 263.51 null]
>>
endobj
-592 0 obj
+593 0 obj
<<
-/D [587 0 R /XYZ 133.768 172.73 null]
+/D [588 0 R /XYZ 133.768 172.73 null]
>>
endobj
-593 0 obj
+594 0 obj
<<
-/D [587 0 R /XYZ 133.768 152.955 null]
+/D [588 0 R /XYZ 133.768 152.955 null]
>>
endobj
-594 0 obj
+595 0 obj
<<
-/D [587 0 R /XYZ 133.768 133.181 null]
+/D [588 0 R /XYZ 133.768 133.181 null]
>>
endobj
-586 0 obj
+587 0 obj
<<
-/Font << /F33 309 0 R /F75 308 0 R /F44 431 0 R /F54 591 0 R /F100 410 0 R /F92 360 0 R /F110 506 0 R >>
+/Font << /F33 309 0 R /F75 308 0 R /F44 431 0 R /F54 592 0 R /F100 410 0 R /F92 360 0 R /F110 507 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-601 0 obj
+602 0 obj
<<
/Length 2651
/Filter /FlateDecode
@@ -2944,17 +2972,17 @@ W_Z̘(1 _uae P4,UV i83JRLhͿ^L\%,1¬
3U5k^L;5~.zyCc>cli"mFl,1缧i4|G'<>#o-u뒆儔Qg$B-74ɿgV*
endstream
endobj
-600 0 obj
+601 0 obj
<<
/Type /Page
-/Contents 601 0 R
-/Resources 599 0 R
+/Contents 602 0 R
+/Resources 600 0 R
/MediaBox [0 0 612 792]
-/Parent 565 0 R
-/Annots [ 596 0 R 597 0 R 598 0 R ]
+/Parent 566 0 R
+/Annots [ 597 0 R 598 0 R 599 0 R ]
>>
endobj
-596 0 obj
+597 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2963,7 +2991,7 @@ endobj
/A << /S /GoTo /D (table.caption.6) >>
>>
endobj
-597 0 obj
+598 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2972,7 +3000,7 @@ endobj
/A << /S /GoTo /D (table.caption.6) >>
>>
endobj
-598 0 obj
+599 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -2981,18 +3009,18 @@ endobj
/A << /S /GoTo /D (section.3.4) >>
>>
endobj
-602 0 obj
+603 0 obj
<<
-/D [600 0 R /XYZ 132.768 705.06 null]
+/D [601 0 R /XYZ 132.768 705.06 null]
>>
endobj
-599 0 obj
+600 0 obj
<<
/Font << /F33 309 0 R /F75 308 0 R /F100 410 0 R /F74 307 0 R /F101 439 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-605 0 obj
+606 0 obj
<<
/Length 945
/Filter /FlateDecode
@@ -3005,32 +3033,32 @@ xŘKs:|
>56W) VIT닗t
endstream
endobj
-604 0 obj
+605 0 obj
<<
/Type /Page
-/Contents 605 0 R
-/Resources 603 0 R
+/Contents 606 0 R
+/Resources 604 0 R
/MediaBox [0 0 612 792]
-/Parent 565 0 R
+/Parent 566 0 R
>>
endobj
-606 0 obj
+607 0 obj
<<
-/D [604 0 R /XYZ 132.768 705.06 null]
+/D [605 0 R /XYZ 132.768 705.06 null]
>>
endobj
-595 0 obj
+596 0 obj
<<
-/D [604 0 R /XYZ 133.768 599.024 null]
+/D [605 0 R /XYZ 133.768 599.024 null]
>>
endobj
-603 0 obj
+604 0 obj
<<
-/Font << /F33 309 0 R /F115 607 0 R /F73 302 0 R >>
+/Font << /F33 309 0 R /F115 608 0 R /F73 302 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-611 0 obj
+612 0 obj
<<
/Length 2937
/Filter /FlateDecode
@@ -3051,17 +3079,17 @@ ytUiH829֧Z|WO5BC%TN
e^d>`Rنh;.H.9QՌ) bD:m,7qDݿT\3@ 5[uxLo7sJm1r{9XE-?c]PHIvɊJ*rzކ؏|BbKS3kX>uOVמ gaf>R/ev_fBR9/[In'I}\(SKTkBó;e^P;6xJXG63eC&kG`)4=W0+A]gz`q^ r1(*AJSwe.H-K} m ^dN&5W`0 T4|ןQw{%+qqa9^h^guפHZ@$Ht +XR0}/ H
endstream
endobj
-610 0 obj
+611 0 obj
<<
/Type /Page
-/Contents 611 0 R
-/Resources 609 0 R
+/Contents 612 0 R
+/Resources 610 0 R
/MediaBox [0 0 612 792]
-/Parent 613 0 R
-/Annots [ 608 0 R ]
+/Parent 614 0 R
+/Annots [ 609 0 R ]
>>
endobj
-608 0 obj
+609 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3070,18 +3098,18 @@ endobj
/A << /S /GoTo /D (subsection.3.3.3) >>
>>
endobj
-612 0 obj
+613 0 obj
<<
-/D [610 0 R /XYZ 132.768 705.06 null]
+/D [611 0 R /XYZ 132.768 705.06 null]
>>
endobj
-609 0 obj
+610 0 obj
<<
-/Font << /F74 307 0 R /F75 308 0 R /F33 309 0 R /F101 439 0 R /F38 313 0 R /F78 312 0 R /F41 314 0 R /F76 311 0 R /F100 410 0 R /F80 461 0 R /F79 558 0 R >>
+/Font << /F74 307 0 R /F75 308 0 R /F33 309 0 R /F101 439 0 R /F38 313 0 R /F78 312 0 R /F41 314 0 R /F76 311 0 R /F100 410 0 R /F80 461 0 R /F79 559 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-616 0 obj
+617 0 obj
<<
/Length 2500
/Filter /FlateDecode
@@ -3101,27 +3129,27 @@ xY[o~ϯ[m *8(P-Z(=XJll EEInpx77' OtCǻo
cPhCLIcxDB[](sG(p^#`-i?El}&*.X {<pb4}Z 4X~y\OףQrz>O@(vE!JLi/}fL̷+吕x9_b~i) z7:b{,wwUt
endstream
endobj
-615 0 obj
+616 0 obj
<<
/Type /Page
-/Contents 616 0 R
-/Resources 614 0 R
+/Contents 617 0 R
+/Resources 615 0 R
/MediaBox [0 0 612 792]
-/Parent 613 0 R
+/Parent 614 0 R
>>
endobj
-617 0 obj
+618 0 obj
<<
-/D [615 0 R /XYZ 132.768 705.06 null]
+/D [616 0 R /XYZ 132.768 705.06 null]
>>
endobj
-614 0 obj
+615 0 obj
<<
-/Font << /F41 314 0 R /F76 311 0 R /F33 309 0 R /F74 307 0 R /F75 308 0 R /F110 506 0 R /F38 313 0 R /F78 312 0 R >>
+/Font << /F41 314 0 R /F76 311 0 R /F33 309 0 R /F74 307 0 R /F75 308 0 R /F110 507 0 R /F38 313 0 R /F78 312 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-622 0 obj
+623 0 obj
<<
/Length 2641
/Filter /FlateDecode
@@ -3142,32 +3170,32 @@ S ~KmFEY * s8"a;!p2(
;p;BFDRL X۶ȭAZl~El!T #m]?%bfqY $`*du?>/ޜ
endstream
endobj
-621 0 obj
+622 0 obj
<<
/Type /Page
-/Contents 622 0 R
-/Resources 620 0 R
+/Contents 623 0 R
+/Resources 621 0 R
/MediaBox [0 0 612 792]
-/Parent 613 0 R
+/Parent 614 0 R
>>
endobj
-623 0 obj
+624 0 obj
<<
-/D [621 0 R /XYZ 132.768 705.06 null]
+/D [622 0 R /XYZ 132.768 705.06 null]
>>
endobj
110 0 obj
<<
-/D [621 0 R /XYZ 133.768 183.076 null]
+/D [622 0 R /XYZ 133.768 183.076 null]
>>
endobj
-620 0 obj
+621 0 obj
<<
-/Font << /F74 307 0 R /F33 309 0 R /F75 308 0 R /F38 313 0 R /F41 314 0 R /F92 360 0 R /F110 506 0 R >>
+/Font << /F74 307 0 R /F33 309 0 R /F75 308 0 R /F38 313 0 R /F41 314 0 R /F92 360 0 R /F110 507 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-634 0 obj
+635 0 obj
<<
/Length 1956
/Filter /FlateDecode
@@ -3185,17 +3213,17 @@ xK6+t\T [nд@=dFkk򣒜9,ٲ.rЋEIC΃3IF\#ןn^^
K #uC@)p\}>Au史ExVcgw xg|F8 ꎵc#o%-GQ[V=պhkaRiH*!I*EiGVAZq05քP[jۚ@Z!
endstream
endobj
-633 0 obj
+634 0 obj
<<
/Type /Page
-/Contents 634 0 R
-/Resources 632 0 R
+/Contents 635 0 R
+/Resources 633 0 R
/MediaBox [0 0 612 792]
-/Parent 613 0 R
-/Annots [ 618 0 R 619 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R ]
+/Parent 614 0 R
+/Annots [ 619 0 R 620 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 630 0 R ]
>>
endobj
-618 0 obj
+619 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3204,7 +3232,7 @@ endobj
/A << /S /GoTo /D (table.caption.6) >>
>>
endobj
-619 0 obj
+620 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3213,7 +3241,7 @@ endobj
/A << /S /GoTo /D (subsection.5.2.2) >>
>>
endobj
-624 0 obj
+625 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3222,7 +3250,7 @@ endobj
/A << /S /GoTo /D (table.caption.6) >>
>>
endobj
-625 0 obj
+626 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3231,7 +3259,7 @@ endobj
/A << /S /GoTo /D (subtable.3.3.1) >>
>>
endobj
-626 0 obj
+627 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3240,7 +3268,7 @@ endobj
/A << /S /GoTo /D (subsection.5.2.3) >>
>>
endobj
-627 0 obj
+628 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3249,7 +3277,7 @@ endobj
/A << /S /GoTo /D (table.caption.6) >>
>>
endobj
-628 0 obj
+629 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3258,7 +3286,7 @@ endobj
/A << /S /GoTo /D (subtable.3.3.2) >>
>>
endobj
-629 0 obj
+630 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3267,53 +3295,53 @@ endobj
/A << /S /GoTo /D (subsection.5.2.4) >>
>>
endobj
-635 0 obj
-<<
-/D [633 0 R /XYZ 132.768 705.06 null]
->>
-endobj
636 0 obj
<<
-/D [633 0 R /XYZ 133.768 673.176 null]
+/D [634 0 R /XYZ 132.768 705.06 null]
>>
endobj
637 0 obj
<<
-/D [633 0 R /XYZ 133.768 645.28 null]
+/D [634 0 R /XYZ 133.768 673.176 null]
>>
endobj
638 0 obj
<<
-/D [633 0 R /XYZ 302.427 643.786 null]
+/D [634 0 R /XYZ 133.768 645.28 null]
>>
endobj
639 0 obj
<<
-/D [633 0 R /XYZ 133.768 515.127 null]
+/D [634 0 R /XYZ 302.427 643.786 null]
>>
endobj
640 0 obj
<<
-/D [633 0 R /XYZ 322.147 512.636 null]
+/D [634 0 R /XYZ 133.768 515.127 null]
+>>
+endobj
+641 0 obj
+<<
+/D [634 0 R /XYZ 322.147 512.636 null]
>>
endobj
114 0 obj
<<
-/D [633 0 R /XYZ 133.768 340.149 null]
+/D [634 0 R /XYZ 133.768 340.149 null]
>>
endobj
118 0 obj
<<
-/D [633 0 R /XYZ 133.768 246.05 null]
+/D [634 0 R /XYZ 133.768 246.05 null]
>>
endobj
-632 0 obj
+633 0 obj
<<
-/Font << /F33 309 0 R /F95 415 0 R /F107 464 0 R /F73 302 0 R /F115 607 0 R /F75 308 0 R /F100 410 0 R /F92 360 0 R /F110 506 0 R >>
+/Font << /F33 309 0 R /F95 415 0 R /F107 464 0 R /F73 302 0 R /F115 608 0 R /F75 308 0 R /F100 410 0 R /F92 360 0 R /F110 507 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-646 0 obj
+647 0 obj
<<
/Length 2621
/Filter /FlateDecode
@@ -3332,17 +3360,17 @@ ADzk( L{OEEi:-]t]`(@iKDbDGHj.|HӒ, 7
dn. Qe(;[כ6dvt'+ @I3껦rj*R;q4a&A FxvHBv>]vfSeAR/KٱPX۽s?w;S~3BPI &GrW,
endstream
endobj
-645 0 obj
+646 0 obj
<<
/Type /Page
-/Contents 646 0 R
-/Resources 644 0 R
+/Contents 647 0 R
+/Resources 645 0 R
/MediaBox [0 0 612 792]
-/Parent 613 0 R
-/Annots [ 630 0 R 631 0 R 641 0 R 642 0 R 643 0 R ]
+/Parent 614 0 R
+/Annots [ 631 0 R 632 0 R 642 0 R 643 0 R 644 0 R ]
>>
endobj
-630 0 obj
+631 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3351,7 +3379,7 @@ endobj
/A << /S /GoTo /D (subtable.3.3.3) >>
>>
endobj
-631 0 obj
+632 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3360,7 +3388,7 @@ endobj
/A << /S /GoTo /D (subtable.3.3.4) >>
>>
endobj
-641 0 obj
+642 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3369,7 +3397,7 @@ endobj
/A << /S /GoTo /D (section.3.4) >>
>>
endobj
-642 0 obj
+643 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3378,7 +3406,7 @@ endobj
/A << /S /GoTo /D (section.1.2) >>
>>
endobj
-643 0 obj
+644 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3387,43 +3415,43 @@ endobj
/A << /S /GoTo /D (chapter.4) >>
>>
endobj
-647 0 obj
+648 0 obj
<<
-/D [645 0 R /XYZ 132.768 705.06 null]
+/D [646 0 R /XYZ 132.768 705.06 null]
>>
endobj
122 0 obj
<<
-/D [645 0 R /XYZ 133.768 667.198 null]
+/D [646 0 R /XYZ 133.768 667.198 null]
>>
endobj
126 0 obj
<<
-/D [645 0 R /XYZ 133.768 586.03 null]
+/D [646 0 R /XYZ 133.768 586.03 null]
>>
endobj
-648 0 obj
+649 0 obj
<<
-/D [645 0 R /XYZ 133.768 347.024 null]
+/D [646 0 R /XYZ 133.768 347.024 null]
>>
endobj
-649 0 obj
+650 0 obj
<<
-/D [645 0 R /XYZ 133.768 302.635 null]
+/D [646 0 R /XYZ 133.768 302.635 null]
>>
endobj
-650 0 obj
+651 0 obj
<<
-/D [645 0 R /XYZ 133.768 247.398 null]
+/D [646 0 R /XYZ 133.768 247.398 null]
>>
endobj
-644 0 obj
+645 0 obj
<<
-/Font << /F92 360 0 R /F110 506 0 R /F33 309 0 R /F100 410 0 R /F75 308 0 R >>
+/Font << /F92 360 0 R /F110 507 0 R /F33 309 0 R /F100 410 0 R /F75 308 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-655 0 obj
+656 0 obj
<<
/Length 2931
/Filter /FlateDecode
@@ -3440,17 +3468,17 @@ xڝYK۸ϯ-T`Rv׵{H6/D0H-Iy<O?
`cDcRc3Al̘oKAe.Ok(Rsv(ҧB+WTĩi,$XӾ܇3'fƵ*Gl?IGE g+Nfy17}O ;ji: :[}3vf ta/FDZʷ11Bd,
endstream
endobj
-654 0 obj
+655 0 obj
<<
/Type /Page
-/Contents 655 0 R
-/Resources 653 0 R
+/Contents 656 0 R
+/Resources 654 0 R
/MediaBox [0 0 612 792]
-/Parent 613 0 R
-/Annots [ 651 0 R 652 0 R ]
+/Parent 614 0 R
+/Annots [ 652 0 R 653 0 R ]
>>
endobj
-651 0 obj
+652 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3459,7 +3487,7 @@ endobj
/A << /S /GoTo /D (section.5.4) >>
>>
endobj
-652 0 obj
+653 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -3468,84 +3496,84 @@ endobj
/A << /S /GoTo /D (section.5.3) >>
>>
endobj
-656 0 obj
+657 0 obj
<<
-/D [654 0 R /XYZ 132.768 705.06 null]
+/D [655 0 R /XYZ 132.768 705.06 null]
>>
endobj
130 0 obj
<<
-/D [654 0 R /XYZ 133.768 271.773 null]
+/D [655 0 R /XYZ 133.768 271.773 null]
>>
endobj
-653 0 obj
+654 0 obj
<<
-/Font << /F33 309 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F45 432 0 R /F41 314 0 R /F78 312 0 R /F100 410 0 R /F92 360 0 R /F110 506 0 R >>
+/Font << /F33 309 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F45 432 0 R /F41 314 0 R /F78 312 0 R /F100 410 0 R /F92 360 0 R /F110 507 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-659 0 obj
+660 0 obj
<<
-/Length 2943
+/Length 2931
/Filter /FlateDecode
>>
stream
-xYYoX~ϯq͋"  BH 8ĊOm:iٗ:U_}Uw7|1,bn;eL.vIݖwa0qT-Azyå}$x{nS.v3a<jumCc~=/zړ|1݋7
-LzynG ohAc̉
-`|w*Ͱq^6K7ЇqpOM@Qps-Ox٦*8uy ǶۺV.46CH[O(xtwqخD*BH
-
-iQpGw ״1nH;疢KnȜRsǵ[LhL ;}:0Ey^YpL>p4LLbgX{E.ѣHmz[ʹw
-[ 2
-e,LvWxD6 %Rhh|l=W%  BxӤ MY*W" #i{h8aqB#kl{K[ўjfShu%T~KDE 6JŒ'M '2~nŒ,ΰvU_@
-AIPEjWnւtp&o|+ bW){Pm[ZY#쩥j I3|
-?w~h~U\}j0=ab nV=E[C*_uP`LEzZc-!d24EJW tnf.w˻*uG8]TRko{@o8RFÝy k4L5ā+<I8Jۍbm9$8&RlAW|ǕZ46X˹;ŪA ,6H㆞ ĸi
-?sa4,auW$CT0Fv9IqtiI9W ok/[uEȝS4 $tj2a
-H
-Q= >~OOXC
-_J}{P:\0厓1؂뼮y?bLY5aJ_"OP2|ֺOo>ۏʨbFcPM"LQj5p
+xYYoH~ϯqEb !$i:3s6o4k:u,9vhۛHonod. XǻN&q]jvyLe?4=7O>oVO{/UsÃ_J)U@ȳVhlCdlycמv/rZeF{L#nGn hqAc 
+H0;fؠd͒`Qq>p:n h0
+N#ynP$@6P}40^Gsd罋Zn.Zx$*$ p[
+AIPEjWnpւrp&o|+ b8W)f{RQm[mF?$C&xK/j.\ 6'cSFc/737[PgΫlNPZ4/hܾ#R`,yM_XtM4YK5O\)sZ@]~
+{6fD
+[ yok
+qք+4޷,T2T~/%g6[qEVxigC\ܩ9MF*4MDnCW*zA"0զL5ZȂ"]0pO\7<U68Xw
+ L5酳fFkPA!)cgA
+EȐiQ8IlgW|zFjN#fvUb"*qvJ9g!ti0oj)X"m`Zx;nJ| f,:s<wSfDɦ,&78´}Nq]$MA;Dtfy 9[@SzŒ&bB !!@;`Iz> $?_Ǹt(l@Fi 2Z
+ FNQ_"*y3h
+*w,*Z'T'5 Da^DZ'dް0oܱ)BcՕY01R
+֘Rcٷ[P&boUXxH,jy.M@_{gVA1։Åp7"!&L0+PV|"
+
endstream
endobj
-658 0 obj
+659 0 obj
<<
/Type /Page
-/Contents 659 0 R
-/Resources 657 0 R
+/Contents 660 0 R
+/Resources 658 0 R
/MediaBox [0 0 612 792]
-/Parent 664 0 R
+/Parent 665 0 R
>>
endobj
-660 0 obj
+661 0 obj
<<
-/D [658 0 R /XYZ 132.768 705.06 null]
+/D [659 0 R /XYZ 132.768 705.06 null]
>>
endobj
-661 0 obj
+662 0 obj
<<
-/D [658 0 R /XYZ 133.768 576.766 null]
+/D [659 0 R /XYZ 133.768 576.766 null]
>>
endobj
-663 0 obj
+664 0 obj
<<
-/D [658 0 R /XYZ 133.768 365.793 null]
+/D [659 0 R /XYZ 133.768 365.793 null]
>>
endobj
134 0 obj
<<
-/D [658 0 R /XYZ 133.768 239.01 null]
+/D [659 0 R /XYZ 133.768 239.01 null]
>>
endobj
138 0 obj
<<
-/D [658 0 R /XYZ 133.768 173.563 null]
+/D [659 0 R /XYZ 133.768 173.563 null]
>>
endobj
-657 0 obj
+658 0 obj
<<
-/Font << /F33 309 0 R /F75 308 0 R /F100 410 0 R /F74 307 0 R /F110 506 0 R /F117 662 0 R /F92 360 0 R >>
+/Font << /F33 309 0 R /F75 308 0 R /F100 410 0 R /F74 307 0 R /F110 507 0 R /F117 663 0 R /F92 360 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-667 0 obj
+668 0 obj
<<
/Length 2049
/Filter /FlateDecode
@@ -3560,42 +3588,42 @@ y˿|A"vgp+
8ԽK3, xϜ
endstream
endobj
-666 0 obj
+667 0 obj
<<
/Type /Page
-/Contents 667 0 R
-/Resources 665 0 R
+/Contents 668 0 R
+/Resources 666 0 R
/MediaBox [0 0 612 792]
-/Parent 664 0 R
->>
-endobj
-668 0 obj
-<<
-/D [666 0 R /XYZ 132.768 705.06 null]
+/Parent 665 0 R
>>
endobj
669 0 obj
<<
-/D [666 0 R /XYZ 133.768 669.191 null]
+/D [667 0 R /XYZ 132.768 705.06 null]
>>
endobj
670 0 obj
<<
-/D [666 0 R /XYZ 133.768 456.287 null]
+/D [667 0 R /XYZ 133.768 669.191 null]
>>
endobj
671 0 obj
<<
-/D [666 0 R /XYZ 133.768 261.312 null]
+/D [667 0 R /XYZ 133.768 456.287 null]
>>
endobj
-665 0 obj
+672 0 obj
+<<
+/D [667 0 R /XYZ 133.768 261.312 null]
+>>
+endobj
+666 0 obj
<<
/Font << /F74 307 0 R /F33 309 0 R /F44 431 0 R /F41 314 0 R /F78 312 0 R /F38 313 0 R /F75 308 0 R /F45 432 0 R /F76 311 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-674 0 obj
+675 0 obj
<<
/Length 2111
/Filter /FlateDecode
@@ -3612,42 +3640,42 @@ xڽkoe 'whuJr 6=3 xױ߯a`fn/,]TW`3]}

endstream
endobj
-673 0 obj
+674 0 obj
<<
/Type /Page
-/Contents 674 0 R
-/Resources 672 0 R
+/Contents 675 0 R
+/Resources 673 0 R
/MediaBox [0 0 612 792]
-/Parent 664 0 R
+/Parent 665 0 R
>>
endobj
-675 0 obj
+676 0 obj
<<
-/D [673 0 R /XYZ 132.768 705.06 null]
+/D [674 0 R /XYZ 132.768 705.06 null]
>>
endobj
142 0 obj
<<
-/D [673 0 R /XYZ 133.768 560.383 null]
+/D [674 0 R /XYZ 133.768 560.383 null]
>>
endobj
-676 0 obj
+677 0 obj
<<
-/D [673 0 R /XYZ 133.768 530.058 null]
+/D [674 0 R /XYZ 133.768 530.058 null]
>>
endobj
146 0 obj
<<
-/D [673 0 R /XYZ 133.768 306.57 null]
+/D [674 0 R /XYZ 133.768 306.57 null]
>>
endobj
-672 0 obj
+673 0 obj
<<
-/Font << /F33 309 0 R /F75 308 0 R /F41 314 0 R /F78 312 0 R /F44 431 0 R /F38 313 0 R /F45 432 0 R /F74 307 0 R /F110 506 0 R /F100 410 0 R >>
+/Font << /F33 309 0 R /F75 308 0 R /F41 314 0 R /F78 312 0 R /F44 431 0 R /F38 313 0 R /F45 432 0 R /F74 307 0 R /F110 507 0 R /F100 410 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-679 0 obj
+680 0 obj
<<
/Length 2126
/Filter /FlateDecode
@@ -3664,32 +3692,32 @@ bvyUb Y(<PKQ [(P28RMB5E GZp(tG)
xȯa.9*
endstream
endobj
-678 0 obj
+679 0 obj
<<
/Type /Page
-/Contents 679 0 R
-/Resources 677 0 R
+/Contents 680 0 R
+/Resources 678 0 R
/MediaBox [0 0 612 792]
-/Parent 664 0 R
+/Parent 665 0 R
>>
endobj
-680 0 obj
+681 0 obj
<<
-/D [678 0 R /XYZ 132.768 705.06 null]
+/D [679 0 R /XYZ 132.768 705.06 null]
>>
endobj
150 0 obj
<<
-/D [678 0 R /XYZ 133.768 500.234 null]
+/D [679 0 R /XYZ 133.768 500.234 null]
>>
endobj
-677 0 obj
+678 0 obj
<<
/Font << /F38 313 0 R /F44 431 0 R /F41 314 0 R /F76 311 0 R /F78 312 0 R /F33 309 0 R /F75 308 0 R /F74 307 0 R /F45 432 0 R /F100 410 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-683 0 obj
+684 0 obj
<<
/Length 2186
/Filter /FlateDecode
@@ -3702,32 +3730,32 @@ xڭn_
9C{=t!\MG^CorZh%JPUB#ʓ:oN95\ǧm@YIݐ\w0 HbH cl$'Te柟RTbҒY1OpKO ¯<)NesO WFR#s WqHa
endstream
endobj
-682 0 obj
+683 0 obj
<<
/Type /Page
-/Contents 683 0 R
-/Resources 681 0 R
+/Contents 684 0 R
+/Resources 682 0 R
/MediaBox [0 0 612 792]
-/Parent 664 0 R
+/Parent 665 0 R
>>
endobj
-684 0 obj
+685 0 obj
<<
-/D [682 0 R /XYZ 132.768 705.06 null]
+/D [683 0 R /XYZ 132.768 705.06 null]
>>
endobj
154 0 obj
<<
-/D [682 0 R /XYZ 133.768 502.7 null]
+/D [683 0 R /XYZ 133.768 502.7 null]
>>
endobj
-681 0 obj
+682 0 obj
<<
/Font << /F75 308 0 R /F33 309 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F78 312 0 R /F76 311 0 R /F74 307 0 R /F45 432 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-687 0 obj
+688 0 obj
<<
/Length 1782
/Filter /FlateDecode
@@ -3741,279 +3769,304 @@ F9VT:3^\ 'eB0M?_
}߫:4WأqG3-ho|xD@rHtzL<'۸6Q%[}90܀R|C &0 JقiB}JxO׋Ҟӟf.̈8  կW,i"1=pDma,>(!YfyWaKyHiE@Mb@iI4T99)XB,["'P9GR&;Ϲpx{:9M
endstream
endobj
-686 0 obj
+687 0 obj
<<
/Type /Page
-/Contents 687 0 R
-/Resources 685 0 R
+/Contents 688 0 R
+/Resources 686 0 R
/MediaBox [0 0 612 792]
-/Parent 664 0 R
+/Parent 665 0 R
>>
endobj
-688 0 obj
+689 0 obj
<<
-/D [686 0 R /XYZ 132.768 705.06 null]
+/D [687 0 R /XYZ 132.768 705.06 null]
>>
endobj
158 0 obj
<<
-/D [686 0 R /XYZ 133.768 593.195 null]
+/D [687 0 R /XYZ 133.768 593.195 null]
>>
endobj
-685 0 obj
+686 0 obj
<<
/Font << /F33 309 0 R /F75 308 0 R /F74 307 0 R /F38 313 0 R /F41 314 0 R /F44 431 0 R /F45 432 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-691 0 obj
+693 0 obj
<<
-/Length 2491
+/Length 2877
/Filter /FlateDecode
>>
stream
-xZMoW@(e#
-Q*]fRk,P./~Dur汮V]]UU<6I7K\F~w(<Vy?߭q8UYt9u𫃦rMMɫ|XR,(77 }fGTZXLXb\X+r (ЙdsJmmc}ZGwGjy᡿qӃG0V%Lu>7VJ2U
-yl>Jm )Llr{~|W-Cȥ }"ƌDR @ĭZwI6%~,"GcfiFdf4oHQ/.
-gVƋi`R+2M@K"üʄ @_/8#x%393*ipUP؜}̖xg_'iֳI GU% X#z=l ,@ Sd$PJaLEB7"T?%Sj!T}R4J%U(DnOJ` 0b8P}5<S+L^ϩXOj{BvI(Sb6oB۠)m<·+|O3kpK
->Uh]_yJ"dl< c_s+A/NkxA}|1*Еoܻ쨠J%3\'z/4*ҁǁ˱&;_zp4mfH~մ$␻Hd`]__*bXLՁ-L~6/xMKʈbxc_n_z=Ж]8j썚0կ5Hgx<gxtfPbCH"lMgXj+RSP^5T $0brifW.
-ϫ6;NcoǍ3]=Kz`)HGMKb^L!LI9!P(z%HޅZܝfiN JF?h$rH@I9X
-&[ 4Tq3<m'q:/ȀRL6<Hԫ,B:5ϱ~ q*Sk2 w}בjVੁC6'c妾uܸv1J؇g+7g7e{^!C{L>p%d'L՘g_3Yw]r|Ah~G.heQ+߁pB دimoKz7^ן}$GTԆ4҈
+xYMoWap
+ @_/>LͬNE+<19[%,C"ݸRKXޞ@; u8#6 6pU*p
+7"<%5S!TJT&"D%E왧OdMWez BIm1T(A~7<Sh&ϩXJ9s\>)Um%]M%y(& Bmr>v#CR~-$!E*H3/E[s%x F
+hˮw$5P՛,Sgxtf%P!SDV)O6&YL"R[cya<HJdf+{n{[A9חtXRuKK#\ {&RN43 ~>kwc|xy
+JXŒҘ$Z1YZi*rS;rؐU"xqK!^+ $3.DĦVl8+Yٲ&*v.ӫfbHDwe̬ې@ey>$hOڪr6Zૉ&sJ}a`(<-v̹[9n)CՓ$ܑ4|4ƒY>j#3T/[J
+fYe
+Z{n;n&`:Qǂ鼐KW!‘2h.EeQc!h䁮
+F6HRXЫJI^tQ5ž 'sG a~b|[mMMɧcnKrSߺscd 8> 0*Ju4/`ܴզl?z/ɵicg :XK~m姼&sVujxsY&.aӫ-8/
endstream
endobj
-690 0 obj
+692 0 obj
<<
/Type /Page
-/Contents 691 0 R
-/Resources 689 0 R
+/Contents 693 0 R
+/Resources 691 0 R
/MediaBox [0 0 612 792]
-/Parent 693 0 R
+/Parent 695 0 R
+/Annots [ 690 0 R ]
>>
endobj
-692 0 obj
+690 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [367.673 230.436 382.395 242.391]
+/A << /S /GoTo /D (section.4.1) >>
+>>
+endobj
+694 0 obj
<<
-/D [690 0 R /XYZ 132.768 705.06 null]
+/D [692 0 R /XYZ 132.768 705.06 null]
>>
endobj
162 0 obj
<<
-/D [690 0 R /XYZ 133.768 523.582 null]
+/D [692 0 R /XYZ 133.768 522.798 null]
>>
endobj
166 0 obj
<<
-/D [690 0 R /XYZ 133.768 298.738 null]
+/D [692 0 R /XYZ 133.768 205.537 null]
>>
endobj
-689 0 obj
+691 0 obj
<<
/Font << /F33 309 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F45 432 0 R /F41 314 0 R /F76 311 0 R /F78 312 0 R /F100 410 0 R /F74 307 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-696 0 obj
+698 0 obj
<<
-/Length 2419
+/Length 2350
/Filter /FlateDecode
>>
stream
-xڵYo@8s)涸m/
-k0<ͷ ٥h~p&#N$6_RNV(Pc/@ 6uAb>a
-W1IuUDU1?bΨI}ÚC%&*dCM0 'ҭU?$<Rc $E_ї:ٹ
-Ε׽ 0$yn"<.&T vf-&O8s{ݔ]LJY&gu6˝GՂK£wcwMPHE>]{!'7N[pZ/6]⟈8Z<q b<㋫ mع;Est 9W,ь*^3V$7II˹9_s6Gi>U bj\󺆤r_)T&qȂ0
-E(pQ촬ɢ838
-Ա]1l 4sH$@{gK5y+M"f59;rV8k$0#s~ gmǤ<By*\ :Tғsϭ]p#ʾtV-ʵ3 j
-|08@^5rB#{
-D+vA` {յn}`O)tڡ y&`?oc[w:-0۽7gf*wv@\̵L'nTY jLn@0+s^puU}P p41a$xH٠tFPBτ1| R㶸)f:٠W.GWedd Ci ^{lp=up|ywlЅ BS5Eh RuD6
-5ΠjhD"$5jfC%u An3ɾ>(=a
--)>`Ѧ\!o`WN&_;Dc['v؀O*)]uyvvx-yQJ/%
- nZ֌P$W$]_>^A'e~7T#láayJJLW0\(6ET52wֽ[5 4Ka)IM .2/^C
+xڵY[oܸ~+#C)0P,)RXtKfF4{p'€Iz;m=^hzNE^BɤwHx2RȻϼǐd:X?fsc4/m6~R"daHȞjև=V4WeO \qw7qwqiJ]S=߽(}k]WmYNHe!6@L7`g|f~r;gvBcViDwygsng;l:[9|\4mg_fʯ@_v{~k< A<~b5ޞN˟M.E-^秙l3r|2c?Yų1#"7ߚBVHBdX5<p&@to'XD" <ƯWŢl9l.N9aDN5㔄(S: \LҍS$9q\cޜ)Iv=ۂm`\X5S [)|X(hC3];dvys<z쯳{>]b#~|rH3AXMP;ExLRBAzCmșf9S/IDpZ`⭫x?I=ꕕ2i?M&_dE1a2:U1Kk
+DsCB]Wf"I"װII%{_pɦs(f̼1Bp&r4i6nPuhD BGz]Y~WwiiƲ)\i!7N8a|KUBhᄨ/2KqVźeXBFQaduG>O'yy3p nŔ?#/e8
+D
+(QpZla٢
+a2ާ Fu6ſUoo.hq `
+.h>L LqC4v]j{0vA1</J{p '3H OE1f25]ouXfcH,Y2 !mbݗ)'@Rm-vg|Ѩ@T``:qWoҾP!5m]f =XզZ܆:#
+ sh:jQ[L&B!P)ޘBQѷQ]mڲ?;@vW,UbbH^p6tϥaE28A_ƅޤt&w Yr .ՏE{(Q^(ţ<m]d:Gq Ps~58$T5 UUT@: N(r.+*g
+8UO| KQhP3 C>8Kx^0C~B96i!H18^AtJB3]JTP\GńFN
+$rK?0Z^ XUŅk).Ġow,) g3
+r`9s8b/9&g, 0&lueTcG9lDr$nzt|fϰ^((_LX,
+cHv(;N]@\H|%ǹciЈG鶶dɖnT2rec%~k,}2r1;6 2E^xPI
+AA<cޛfQX DZ}QM]~6sCՀSc<f+$%lԸ *6bs]C
endstream
endobj
-695 0 obj
+697 0 obj
<<
/Type /Page
-/Contents 696 0 R
-/Resources 694 0 R
+/Contents 698 0 R
+/Resources 696 0 R
/MediaBox [0 0 612 792]
-/Parent 693 0 R
+/Parent 695 0 R
>>
endobj
-697 0 obj
+699 0 obj
<<
-/D [695 0 R /XYZ 132.768 705.06 null]
+/D [697 0 R /XYZ 132.768 705.06 null]
>>
endobj
170 0 obj
<<
-/D [695 0 R /XYZ 133.768 475.863 null]
+/D [697 0 R /XYZ 133.768 361.117 null]
>>
endobj
-694 0 obj
+696 0 obj
<<
/Font << /F75 308 0 R /F33 309 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F102 452 0 R /F76 311 0 R /F78 312 0 R /F92 360 0 R /F100 410 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-703 0 obj
+705 0 obj
<<
-/Length 2642
+/Length 1982
/Filter /FlateDecode
>>
stream
-xڵYK۸ϯQarՖƩ=$f}ԈkTH){ >$x=N*'@4(~7ZGDwHj-$
-mtWFuWU?z^ ^^X4߾{ڹJ<_6}5bvDj/zKk40w@YCcߣq[yMmi-ܯ7V>i_ⳬwӽzڧ<}w'"33IDeMb+Yf^9< Ͳڰɦ$M:J& 'xATr6ViMb]2xY7đT8#8|<oQ 0 tCϛ/fuŰE?%+v4)"MD6F2&Vg2dB'K#\ ǰ1?S}۬7*VOǷ܅u (s726vGH8_{SEx_<V
-
-FjÔX-DXirUݣBTgI]i^4<AW;2K4'{ 5a񃔍u?x9j ī9C
-!G;O 1~ƹ!dhw^;ŸB)ߵ7;s{QMU¼UK"mf hԾm͸25 ֯3s챤q=#
-5N!`#>Ru]o H'o
-3a<A~M&Caܙ
+xڵXK |fҋ
+)ǧ?6Nޟ[4+Ž0rOӷwȰ͋m۪6xnۜ5=aooOZOS\ŶzscE@,·,@QBU
+nb^ȶ#۪&]]"R<tZ>l^ã|z}UoO勋: H IQ'<f" SQ^bO+.h3 (5:)@YjB3%ZΦWr x( Rl `#"g
+$ZxT&:ȣ#ݣ*EEa3/\;I{RPɀ.,t$Y'gudi.:Ӭ
+>@S$%<<,MKӪq7fI WD ۅmK~k1P6 :,iݰ뻹 7ϨN1{čڵix A
+ʍEcB8թD-
+ r
+V=}wP)W N@`6E~ :g//p61Qq퍓fpe$AقOCJkR*>SʖCAn,\ M&GdfŘƓq~]C?,GtM3p5ĭRiF~Hsze?zNcp5x)ETu[S2 Mѯ W~B!@gIN(skwv{bCgQqЅ"^Iб 64mYզ=<ԄLrݚ1{XJ<,14~E
+2JF5x
+I<k49Xg\rAW]JqBE>D X'EO3Z[qB SCj;
+A&jP]o_cԀY uk -.|.n3_Μ߾Շ~u?(4csO>o?_ 5^
endstream
endobj
-702 0 obj
+704 0 obj
<<
/Type /Page
-/Contents 703 0 R
-/Resources 701 0 R
+/Contents 705 0 R
+/Resources 703 0 R
/MediaBox [0 0 612 792]
-/Parent 693 0 R
-/Annots [ 698 0 R 699 0 R 700 0 R ]
+/Parent 695 0 R
+/Annots [ 700 0 R 701 0 R ]
>>
endobj
-698 0 obj
+700 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [210.524 419.959 240.744 430.751]
+/Rect [210.524 283.993 240.744 294.786]
/A << /S /GoTo /D (subsubsection.3.3.2.3) >>
>>
endobj
-699 0 obj
+701 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [137.594 287.087 160.065 299.042]
+/Rect [137.594 148.376 160.065 160.331]
/A << /S /GoTo /D (subsection.3.3.1) >>
>>
endobj
-700 0 obj
-<<
-/Type /Annot
-/Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [137.594 176.095 160.065 186.888]
-/A << /S /GoTo /D (subsection.3.4.1) >>
->>
-endobj
-704 0 obj
+706 0 obj
<<
-/D [702 0 R /XYZ 132.768 705.06 null]
+/D [704 0 R /XYZ 132.768 705.06 null]
>>
endobj
174 0 obj
<<
-/D [702 0 R /XYZ 133.768 543.841 null]
+/D [704 0 R /XYZ 133.768 407.876 null]
>>
endobj
-701 0 obj
+703 0 obj
<<
-/Font << /F33 309 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F45 432 0 R /F41 314 0 R /F76 311 0 R /F92 360 0 R /F100 410 0 R >>
+/Font << /F75 308 0 R /F33 309 0 R /F38 313 0 R /F44 431 0 R /F45 432 0 R /F41 314 0 R /F76 311 0 R /F92 360 0 R /F100 410 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-709 0 obj
+711 0 obj
<<
-/Length 2436
+/Length 2526
/Filter /FlateDecode
>>
stream
-xڝYK6W-`(uKv
-aҲLJ(6;NtAJʆ/2 ʤȖ_GB>SMNXkGeYE{3~yޗ ÁUkM<_DUs-r!4 kx&W[6|bJQUfu7IinD3$U鏗"$ >mڸo.ȓEy8$VlKyf
-HMg6 @,izc;buµ:7"-+?vY9:DD.zcK<d#U:;
-EiR0-I(Wq3CAJ a9jd% 7 t8-g ێXʺkk1:n\# G>Mzr !BȽZu7G םTǩJuMM8u/<py`
-=C-k EѩQDt@&s r!8BĎ.3BP
-$9#v)
- Qy^䘀c
+xڭYK`D$88H0lHv<p|hى؏ꪯ7OxÇR,ʬF(%6XDRCex#Nt[}~fd]4 pp<ӻmJ̻5H9;s\}{ٙVNL(.=iq'6`)QQf <!opn̝7l|#4m>з_1|p=w+8Vx Є<ۧzI`Y^XXif'|dH!+]G>0᫕A{$Oy[mS0_ Nj=ndeR78y7TŹλp@M;
+C{Щz>KI
+To&NKČ@0-n쩛uXR%8o 7~̪HG"Рjz)='m3w-\8ނ:v$UH,H'x
+Cp~u:uN|꼺Lƍh21Pi㒺"Iwd3w]7C;Gt8 nw
+ {$+ Ļ9OkGھGQ\ni{C
+̈m$^E@1DP-0h)"`) I*8KRjQJ:+d<1b&sqp,KvMP""!%v.NF
+Kje11Ꮋ`8idst$Dl-=8DAxz$BH=0Vf]9PhUL0IȣUמa;qkaz4>"98n'`HW.ugΟ-{-O腢>\Ӯ9> Uɟ۵{x]se?dzW}YQ9RZJPcA8#8\R$ a
+bw 0(,`{ e|>4֦(*bW R"VőN/"Σq˲O
+M6+-xϟLP+EB,ƷaQ>
+CTJ[;4OţY, ^FvC<yXuJ!>o #t<xޓ)*Lti9ZS-ւ:ao?~䀂o?@Aא p73xuH伲揓W+ӻ'Lo9(9BG7"Zmqul&ӟNT6ѝRrQP Tݙmt\hmIq>\}&bj|Ʉa1;.cէQ.Sj p6 tuu/lqEo+<02L7{~xwQ0HQ`Z/Vx/
endstream
endobj
-708 0 obj
+710 0 obj
<<
/Type /Page
-/Contents 709 0 R
-/Resources 707 0 R
+/Contents 711 0 R
+/Resources 709 0 R
/MediaBox [0 0 612 792]
-/Parent 693 0 R
-/Annots [ 705 0 R 706 0 R ]
+/Parent 695 0 R
+/Annots [ 702 0 R 707 0 R ]
>>
endobj
-705 0 obj
+702 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [390.371 518.257 405.094 530.212]
-/A << /S /GoTo /D (section.4.1) >>
+/Rect [137.594 594.526 160.065 605.319]
+/A << /S /GoTo /D (subsection.3.4.1) >>
>>
endobj
-706 0 obj
+707 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [227.056 205.326 249.527 216.326]
-/A << /S /GoTo /D (subsection.3.3.1) >>
+/Rect [390.371 386.75 405.094 398.705]
+/A << /S /GoTo /D (section.4.1) >>
>>
endobj
-710 0 obj
+712 0 obj
<<
-/D [708 0 R /XYZ 132.768 705.06 null]
+/D [710 0 R /XYZ 132.768 705.06 null]
>>
endobj
178 0 obj
<<
-/D [708 0 R /XYZ 133.768 481.955 null]
+/D [710 0 R /XYZ 133.768 350.449 null]
>>
endobj
-707 0 obj
+709 0 obj
<<
-/Font << /F33 309 0 R /F100 410 0 R /F75 308 0 R /F92 360 0 R /F110 506 0 R >>
+/Font << /F33 309 0 R /F75 308 0 R /F100 410 0 R /F92 360 0 R /F110 507 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-713 0 obj
+715 0 obj
<<
-/Length 968
+/Length 1647
/Filter /FlateDecode
>>
stream
-xڝVK6QV(zȥh7آ-Ɂ(EH;kѼ盡`C.Y&2eYd2g>HITE,xqJ>|9& Mn>7hkma!2^8L@ZwD Oz[GF7lXo0ͻ5nt5n:[T$feroijMH{U"(
-T'>,98li*S>yjU
-F hv*b \]mK%rYqgLǕ,eaͳ-UEKaImyБJ$V&i8iI!Qư2h"N!?w]BuMhOjc^v*Ϥ~7jO
+xڝWM6֌H"I!ClDBdɥli{g8myٶ'ϙyf,vd& 훻W\D.Lg"S wj-UlZ˪tMIP>i`-bYؖUy+8-V_~["aYkxob
+t!DfpٌåUٝ_E&Hbxgy1!PAmAAAԍ5# -<_֚raC0x{K-]/ңcwe{N 3 oL|?liē`I*O OT2>|j
+hO7-qՅBw2y~@KƮ5CǶ0PEU?,("жHL9ĤLyԿ?æ(2ydjApxOG΢X͡ՃM#{
+H!+D14L当4
+ q7ASn#@~'@Dxn[D+KґS$h?zCfY}Sd@]5R,SX&O93sQCI5 6x<Eh_0] )|5k&
+ȧb4cŞq!HP $BBLaA"ϙ
+(˅>^5t)l 3W9f_=0چpi~8 X*I}!iFKBN娃yYiͩ 5׵gYqN7t'Qj\]e<}>;Ikr+D>tt 5\V%eOgDH"wlZsBǰnkl4<&9ye<w(xgL%疇<G
+zb>X9KUHvcG%ء8)RP9j𼊄kWS>3P&W 5Β"_&t
endstream
endobj
-712 0 obj
+714 0 obj
<<
/Type /Page
-/Contents 713 0 R
-/Resources 711 0 R
+/Contents 715 0 R
+/Resources 713 0 R
/MediaBox [0 0 612 792]
-/Parent 693 0 R
+/Parent 695 0 R
+/Annots [ 708 0 R ]
>>
endobj
-714 0 obj
+708 0 obj
<<
-/D [712 0 R /XYZ 132.768 705.06 null]
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [227.056 630.184 249.527 641.184]
+/A << /S /GoTo /D (subsection.3.3.1) >>
>>
endobj
-711 0 obj
+716 0 obj
<<
-/Font << /F75 308 0 R /F33 309 0 R /F100 410 0 R >>
+/D [714 0 R /XYZ 132.768 705.06 null]
+>>
+endobj
+713 0 obj
+<<
+/Font << /F33 309 0 R /F75 308 0 R /F100 410 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-717 0 obj
+719 0 obj
<<
/Length 1805
/Filter /FlateDecode
@@ -4025,66 +4078,66 @@ aһ]XCgFH⇫`&U }D$?6f*>w $Ԡ:ߔe:y0vCV8 YXd
Kr>/?BŇQ8I~84t nm4/!g!Rү!<i ]T<:x?#3"QTюw}{s\PΖ&l0?aiWbџʅ\zy165ޞ\/-m;Dٯ>0s}[w}GRkMPGT93V>yENJyHƲL8>tI>(Clv>b4'-e"M-cgz[[ Mc0~VDr乴 8M+qq҉Vǫ]| S? ?B?hUw4\eS~AѬr74yyHTW/hy&$)JS)3ۂquM
endstream
endobj
-716 0 obj
+718 0 obj
<<
/Type /Page
-/Contents 717 0 R
-/Resources 715 0 R
+/Contents 719 0 R
+/Resources 717 0 R
/MediaBox [0 0 612 792]
-/Parent 693 0 R
+/Parent 695 0 R
>>
endobj
-718 0 obj
+720 0 obj
<<
-/D [716 0 R /XYZ 132.768 705.06 null]
+/D [718 0 R /XYZ 132.768 705.06 null]
>>
endobj
182 0 obj
<<
-/D [716 0 R /XYZ 133.768 667.198 null]
+/D [718 0 R /XYZ 133.768 667.198 null]
>>
endobj
186 0 obj
<<
-/D [716 0 R /XYZ 133.768 417.236 null]
+/D [718 0 R /XYZ 133.768 417.236 null]
>>
endobj
-715 0 obj
+717 0 obj
<<
-/Font << /F92 360 0 R /F33 309 0 R /F75 308 0 R /F38 313 0 R /F41 314 0 R /F57 719 0 R /F80 461 0 R /F76 311 0 R /F44 431 0 R >>
+/Font << /F92 360 0 R /F33 309 0 R /F75 308 0 R /F38 313 0 R /F41 314 0 R /F57 721 0 R /F80 461 0 R /F76 311 0 R /F44 431 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-727 0 obj
+730 0 obj
<<
-/Length 2461
+/Length 2497
/Filter /FlateDecode
>>
stream
-xYKa2SvC,&Xn-u[YYHt{ߞ*,JŔbX)]ԏ OVW7+&щY%J.*_FD:Ep>hvYuMT4'ܰ[˸o~v/̮5ƍy
-Q@ K2˦wRDC? op1*/40N<c*G]٦~E&ZCDts`̌c:V\Ey×bp%>>d.7H^}{VrBasv#$!ԘU,I"O{.BI@4:͂%<LbFGb)i-ZMmK*G958e5
-l-EB-|W{`Ç퓌
-CwneD憼㼨l7aAfmc!?l,Ep;d)u#
-kIG>gնAQWsg?kqMƁ^!\SL}C) `B_߽e晗 ^ShjNb䐇 ǀ%KMˍع[dPTtX1?]]|
-cFQ4uttHҡS}t8W꤃|>VeFqTn/iȓTnw)r*1<h}ƿ,q_$=Y#ZJ _{
-Y*0Tlp[ $(P$Þ񙁹xB>=u[]S⑘m̅<S
-3wf3yR 93TRۖf똗uZ`[@I}IfNl'աTZj0!v PYJoj_駎 5ONNX|~[Lo!XũfB9e-K)u[)o[>7[2y7P/eiz*Pr~t3ms;:eF t
-_l$C5 \{@2dqL7n
-!mBC_7* dn\lH!LΔ{-
-&Nc&ֳk;Y޽*;OGG} Rp NFg3
+xYKa2_$` }䶲 &=U,Jdc6bRtX,~."R)Kc7ۀKɒN:ɃȰY+l'
+7~9ޮ„ŶiYF~Ǫ/}:2V<t-y.he֗M} )$Æ֜T;qW)UX6E#N51?N:dʔN
+d \*~W=Q:_nqgmʘe#őӄNw<Gl x<Ҭ zg]9i6Ch g9CQl6s~-KppK&s
+\ 0]:_`doV)D>CCḤ!31Z}ٺ8R&
+D,<ѢJbЂ?8&  n~wz3/"<޾ %i[=xIrvzOJYDZ٧I@Bc
+|]¬scb"=I8 %~aٍɓbl`JļN*9 
+H07irX8*Lv,5 Xn{l˞j_'Om7qntSMIJ~0:B a&(p_ZGaDҵ|[2u1PPM_Zh'
+,pXYZ6+8H%zsu"C
+O$iPW/k+ٲy]-4%PRsWx#Æ>*R9 d68`Ah\W?rt!~ s*i L1ݕ(Tj,,٥k>0zS6p |}*e\h|T֎zn&f}grЬ s˪섶9 Ե6)m;kL2ܶ͞ C9X\\}jD: %I\-Q(
+0 |}gn t2z/ʮf3ynGSڢC`D#p16$؄p;#G@.z`t 7*;5{GUXwL15
+PTLE0ֈsa]vr>h"s.-d&g 7~n6ω資YOXH]gmZPl; _>|.M]_~<ӹhDg6{ԕw5^A_k>K)tɌ2
endstream
endobj
-726 0 obj
+729 0 obj
<<
/Type /Page
-/Contents 727 0 R
-/Resources 725 0 R
+/Contents 730 0 R
+/Resources 728 0 R
/MediaBox [0 0 612 792]
-/Parent 731 0 R
-/Annots [ 720 0 R 721 0 R 722 0 R 723 0 R ]
+/Parent 733 0 R
+/Annots [ 722 0 R 723 0 R 724 0 R 725 0 R ]
>>
endobj
-720 0 obj
+722 0 obj
<<
/Type /Annot
/Subtype /Link
@@ -4093,387 +4146,434 @@ endobj
/A << /S /GoTo /D (subsubsection.4.1.3.1) >>
>>
endobj
-721 0 obj
+723 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [247.508 404.787 262.231 415.579]
-/A << /S /GoTo /D (table.caption.14) >>
+/Rect [153.7 466.451 183.92 478.406]
+/A << /S /GoTo /D (subsubsection.3.3.2.6) >>
>>
endobj
-722 0 obj
+724 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [355.693 237.414 378.164 248.207]
-/A << /S /GoTo /D (subsection.5.2.6) >>
+/Rect [247.508 372.906 262.231 383.699]
+/A << /S /GoTo /D (table.caption.14) >>
>>
endobj
-723 0 obj
+725 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [303.471 118.852 325.943 130.807]
-/A << /S /GoTo /D (subsection.4.1.3) >>
+/Rect [355.693 205.534 378.164 216.326]
+/A << /S /GoTo /D (subsection.5.2.6) >>
>>
endobj
-728 0 obj
+731 0 obj
<<
-/D [726 0 R /XYZ 132.768 705.06 null]
+/D [729 0 R /XYZ 132.768 705.06 null]
>>
endobj
190 0 obj
<<
-/D [726 0 R /XYZ 133.768 485.664 null]
+/D [729 0 R /XYZ 133.768 453.506 null]
>>
endobj
-729 0 obj
+732 0 obj
<<
-/D [726 0 R /XYZ 305.624 455.568 null]
+/D [729 0 R /XYZ 305.624 423.688 null]
>>
endobj
194 0 obj
<<
-/D [726 0 R /XYZ 133.768 224.47 null]
->>
-endobj
-730 0 obj
-<<
-/D [726 0 R /XYZ 133.768 148.297 null]
+/D [729 0 R /XYZ 133.768 192.589 null]
>>
endobj
-725 0 obj
+728 0 obj
<<
-/Font << /F33 309 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F102 452 0 R /F100 410 0 R /F76 311 0 R /F92 360 0 R /F110 506 0 R /F73 302 0 R /F115 607 0 R >>
+/Font << /F33 309 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F102 452 0 R /F100 410 0 R /F76 311 0 R /F92 360 0 R /F110 507 0 R /F73 302 0 R /F115 608 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-735 0 obj
+737 0 obj
<<
-/Length 2644
+/Length 2500
/Filter /FlateDecode
>>
stream
-xY[~_
-IH:8kZRɝ6:|ms/
-IbWڛ7%
-`p
-g]?
-^$"{bNB ˀLr뛙r[mI#lx^AD(3h\8 g#h!!?hc 3!i%?$Yoj X@r3 9ʥ6['ٳ#ď|<w2CQh8 .*985@m2CWo4SĢ97 a&< $HOq|H)pj  ˇ1Sj4gCIpj ]* lb]E<:?ICU.LtWq,տ7q]!_8TUG③ydn|v[Q8iz%_Q !!]hpKڮХ$KvX0Q-GQ %%NFX7(;ru8gꦾ>%W ت(C0Efô]h^iO
-T6'+SB
-| _,$UG"ul~4eK#23͟a8X
+xڵYKܸW7M!J &: b/zZԐԞ5ߞ*p<C.͇E_Un7?7޾r,氉fқD&Q̶m\% ,iJ$^8Dy&ow2QS5}LǡꇪT&ri(謁
+ v'7mnvP8fvW-C~qv;
+ȥ,rGM$,QHcåP_?]\t.Du~)v8.
+w^qjڮ(].2RK)Sv4VGtwuՃ .,jnXhpaSYbρ$辪9 qALsO/4 d)-?>,6 1lZgd1˫trWT{8qIU0eʢ,@EEUSeDw ݣP"/jfxQۙΰEג
+? ǼS;=" ]dۺ\R9aK_OU߃C
+1m}Ӣp
+OpJ|wd8
+EDL0B
+'%ޢSi%`i:Sv#"IGC%4 b4xnEupNa 2~;<Ms]!g - L,c
+৅B`K O&/ai*>c~%$dJ^)V<<KI( A2,f\PW`J+ELOɂZJuMyNE [xuA$*^,<7ֲZl1׷P|DnUj!g#X}`/c7']v:͋
+dn;0[_\n uºP+h
+/VK0t$)KEK@V@;ڶ׃8}IRaZ :٧޻B m>NJj֭!r!GJ.-NiHF,<`NXDgR]
+I}ҚVܑʔԸb'ڐѪduiGמwuLf҉R; q3{q.RvG'^C+z}4#դPoʍaߖf(W1 RoW BcC^O,jvf4~9Kx]:>_q 6`k1,D+ + cCk; &\_9ؗ\N;eA`4eYGg+w-Rq+Ol2zLrFo]58/ْarNcd^?/`49RfZB"X%TXG 2d>?ϞUX/ˢh/u{CTc W68$.P'NJlfl3IvSSFN$+A[L)]iSs^oqfhV
+-}KmKL^h&|oO
+_H};99_o."0a
+t1DLH&Wn \eÝ v!3OI8ɪt7o#
endstream
endobj
-734 0 obj
+736 0 obj
<<
/Type /Page
-/Contents 735 0 R
-/Resources 733 0 R
+/Contents 737 0 R
+/Resources 735 0 R
/MediaBox [0 0 612 792]
-/Parent 731 0 R
-/Annots [ 724 0 R 732 0 R ]
+/Parent 733 0 R
+/Annots [ 726 0 R 727 0 R 734 0 R ]
>>
endobj
-724 0 obj
+726 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [276.629 606.481 299.1 617.274]
+/Rect [303.471 641.793 325.943 653.748]
+/A << /S /GoTo /D (subsection.4.1.3) >>
+>>
+endobj
+727 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [276.629 574.601 299.1 585.394]
/A << /S /GoTo /D (subsection.2.2.5) >>
>>
endobj
-732 0 obj
+734 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [299.377 519.357 329.597 530.427]
+/Rect [299.377 486.653 329.597 497.722]
/A << /S /GoTo /D (subsubsection.4.1.3.1) >>
>>
endobj
-736 0 obj
+738 0 obj
<<
-/D [734 0 R /XYZ 132.768 705.06 null]
+/D [736 0 R /XYZ 132.768 705.06 null]
>>
endobj
-737 0 obj
+739 0 obj
<<
-/D [734 0 R /XYZ 133.768 667.198 null]
+/D [736 0 R /XYZ 133.768 667.198 null]
>>
endobj
-738 0 obj
+740 0 obj
<<
-/D [734 0 R /XYZ 133.768 603.699 null]
+/D [736 0 R /XYZ 133.768 638.804 null]
>>
endobj
-739 0 obj
+741 0 obj
<<
-/D [734 0 R /XYZ 133.768 548.32 null]
+/D [736 0 R /XYZ 133.768 571.612 null]
+>>
+endobj
+742 0 obj
+<<
+/D [736 0 R /XYZ 133.768 515.821 null]
>>
endobj
198 0 obj
<<
-/D [734 0 R /XYZ 133.768 487.766 null]
+/D [736 0 R /XYZ 133.768 454.06 null]
>>
endobj
-733 0 obj
+735 0 obj
<<
/Font << /F33 309 0 R /F75 308 0 R /F38 313 0 R /F41 314 0 R /F92 360 0 R /F100 410 0 R /F44 431 0 R /F76 311 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-742 0 obj
+745 0 obj
<<
-/Length 2478
+/Length 2348
/Filter /FlateDecode
>>
stream
-xYݏyl◤yH^Z/ZZ$o%9{P_6w{@[A4I 3_ݯoo_}&ѫeFn)Nzu[~R宰:Hw/?bL&V8fæ;wO[z :m4h~Fʙ3J`1 xܗF< eYK8:~KT%K Ib8 '^`w;P?& 1ng7xÎ؝nDRП?ݞ&~UmFDxM*Fp
-X6a?*lv<>`n;lCN?Nx(n,h-Q萢2R'楒$X-1.JiA}W1>h5"܄U"@C?q)6Qޖ9qI-VLq=?[Q;:v~;.&)V-eѫ_M.x_?Ǽ8[~}Zn)Ko4SF2}K[m1q(K#Ўʹ|I
-ʀ,h
-ć!h31
-2 T*$CuhDJ?Z @ZrqNbɱCJw oY܌֬yAp-d۫@_Qt_ د@~T/n
+xڽYYoF~_<>xe Y"X F^2 @Qo(QKRc+FVuuRۖ`a_pW{ww^UTKɲ4_IƄLVwCwJDG͉&@NklfO~gxַ8SN]OJGq۴4؛G]X)kT5o4*{{9bf~ٴ旻֜"qB;P AӀ݊o"|BIp
+RʨAHiT rd,\n7nC7,^wċ{u&9oxԑ4eT,Xg6q[#,
+<~5xjx{ݹWN|*}
+5ĘNp@)&rңg|ƿeeLf4 o q੸bS٧:/O¡b`>߀1'q.ҵރKH|
+φWXx>kc(KEi.IJ 
+Xy]B,YzEvY٨>*VErZJ+f'AQV\EҗD<TƸcv
+΁GKG\e'9ߟ-%{X=Li'9lSezr":hY<AyIt)/#z^1KE16j)l9ţFۚJ:\ch
+k_qM~h'o #I ݃PאnB|A*S{시f -
endstream
endobj
-741 0 obj
+744 0 obj
<<
/Type /Page
-/Contents 742 0 R
-/Resources 740 0 R
+/Contents 745 0 R
+/Resources 743 0 R
/MediaBox [0 0 612 792]
-/Parent 731 0 R
+/Parent 733 0 R
>>
endobj
-743 0 obj
+746 0 obj
<<
-/D [741 0 R /XYZ 132.768 705.06 null]
+/D [744 0 R /XYZ 132.768 705.06 null]
>>
endobj
202 0 obj
<<
-/D [741 0 R /XYZ 133.768 564.656 null]
->>
-endobj
-206 0 obj
-<<
-/D [741 0 R /XYZ 133.768 204.587 null]
+/D [744 0 R /XYZ 133.768 507.581 null]
>>
endobj
-740 0 obj
+743 0 obj
<<
-/Font << /F75 308 0 R /F33 309 0 R /F38 313 0 R /F44 431 0 R /F102 452 0 R /F41 314 0 R /F74 307 0 R /F100 410 0 R /F76 311 0 R /F92 360 0 R >>
+/Font << /F33 309 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F102 452 0 R /F41 314 0 R /F74 307 0 R /F100 410 0 R /F76 311 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-746 0 obj
+749 0 obj
<<
-/Length 2549
+/Length 2351
/Filter /FlateDecode
>>
stream
-xڭYY۸~_G2IlIvl?PC1ǺӍA8>}~ &&ߟn~x#&ei,qådI7q0!a.Țv'cM4a=x@_ ͟" ڱ~7I+a:#Zp$mgl&&
-Z8wEV{֝>҆!snw0Ǻhpc`fc`YY=E\N$pGdcӍ!^tPiI٧%X*'v(G_ne3sMNYQx_=qg[RHb0TTmSr@fRYAg0A3dR&DGףJxI*b̔lڡ]嚏
-[!R#y䂓G]hc\LGoJ_p ɇ+f E5Y]xhn$i
-*J(! $puT$,N0v[B>pԏ~YZ*ibQJ!b uy*H񄱁h!Hd2
-q
->PxpެhQJtgV
-o%ÔeK/ p y1,X
-
-Y.:ĜK͛êAPۗCu4"J}e<xEC_|v8^*<#PRar ƍ)R9Yj_3pɔ1@gr:PiXTN)V ̵a:ӴsVс\>@E\FuO/hq}("Eayg]OV|>YE7۳whVbj"'/)lZƏ;9Ej2VhSS1)DB$Vɭ ۥ,SYAT@f<mq5LQ` a<P'|^_AM,RgV|tRN7vm./e>%X .aH>&mu(g*څ<e cXY{S1pP
-}HnqO>\01 !+K &fo2/K@2s})llM!ʭGK\E,1K#K$YvwTRaQ[!k܋85hN^"\##&E
-);b6;O1k%)\_ҟ#{A|hX\QorNǍi8Tb Ź-q:^z£&~.&RZ:__vcV1_S&+ӸnS,tQ/b=dA)CԷڴB({qhMO6ɟ<_۸mߗ|L]ks>&(DzHU2T%U۫!p0CTi(
-!psPU
+xڝYKܸ WQ]qsŗ$R&Nyk[a{j=
+|CG,걚%2|%"]3qw_QCh yO3mֱ:02auo;Uf zƌ#b\aSF/̨\@^wM9>13,Fݳb cH! =1i
+=s²+NW)ٸnEHkc{q&O~-Ar< Z*=k@4y+X^=$ Ns@jU7~R@9#3) Jz
+q.|syp21 |AXT].^bN!1jA=pZUg! w)oX dX(sZ`!+v# |[ /
endstream
endobj
-745 0 obj
+748 0 obj
<<
/Type /Page
-/Contents 746 0 R
-/Resources 744 0 R
+/Contents 749 0 R
+/Resources 747 0 R
/MediaBox [0 0 612 792]
-/Parent 731 0 R
+/Parent 733 0 R
>>
endobj
-747 0 obj
+750 0 obj
+<<
+/D [748 0 R /XYZ 132.768 705.06 null]
+>>
+endobj
+206 0 obj
<<
-/D [745 0 R /XYZ 132.768 705.06 null]
+/D [748 0 R /XYZ 133.768 667.198 null]
>>
endobj
210 0 obj
<<
-/D [745 0 R /XYZ 133.768 535.767 null]
+/D [748 0 R /XYZ 133.768 435.671 null]
>>
endobj
-748 0 obj
+751 0 obj
<<
-/D [745 0 R /XYZ 133.768 465.608 null]
+/D [748 0 R /XYZ 133.768 363.483 null]
>>
endobj
-749 0 obj
+752 0 obj
<<
-/D [745 0 R /XYZ 133.768 447.035 null]
+/D [748 0 R /XYZ 133.768 343.558 null]
>>
endobj
-750 0 obj
+753 0 obj
<<
-/D [745 0 R /XYZ 133.768 415.953 null]
+/D [748 0 R /XYZ 133.768 311.124 null]
>>
endobj
-751 0 obj
+754 0 obj
<<
-/D [745 0 R /XYZ 133.768 362.068 null]
+/D [748 0 R /XYZ 133.768 255.887 null]
>>
endobj
214 0 obj
<<
-/D [745 0 R /XYZ 133.768 308.463 null]
+/D [748 0 R /XYZ 133.768 201.023 null]
>>
endobj
-744 0 obj
+747 0 obj
<<
-/Font << /F33 309 0 R /F75 308 0 R /F100 410 0 R /F92 360 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R >>
+/Font << /F92 360 0 R /F33 309 0 R /F100 410 0 R /F75 308 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-757 0 obj
+760 0 obj
<<
-/Length 2409
+/Length 2323
/Filter /FlateDecode
>>
stream
-xڭˎ8_@[S2L0XfزDz$9'*%K
-3K,K~YX $OE"*JI6zR]nn_Oo_^nngw_BIr}GBQj&,wLs'8knc<)'>L 5& qN?֠j-u(&*]2z󯻛n8YA4,e6ǛYKdEgzK Ģ*d"AB%Ox/b\'2O3܂2Ċ38ofgDr#c%JGL2z$ϙd⃿|P%Y*NZ'$% Rv nRBJdq}H-hkiMS#Z_|=??8.nSW%I@f0R8䕻Ux_پrΦ%A%kC\¤Z
-`F?[es*%Oe)C ` q m
-4hνU$&Ҙ< o5s(fR|LeIH3yN<}Z<.Ҍa"Q*[2&a|FTq4rDn>OS5oPfmۗ#>kS__EU]b7}X *剒c|LEʯ$}5VLZ)
-4;&qӢsBd/'`4ǣHV<: cEۖݦ)v[33m0v
-R2Mq_~v5:€v):Ci: yli}fceg"/P;rT8C|&7")CAQCR#2U(骬tklGhSǂ2+6uȲd8 rdf"QH pQp@qD%s< H3\m ԝn|Q&YbV'0;@.3m@G&>L1E.dwuX1)}D7?DodY>.vE.dB. iWO- (soGDԋ ´4w6ìAG%b9]#,;笸ٖ$ҋaH@H}:cӌ5lu mYwE v/&2umY
-AjWnfBas0pZjK +z‡[&*S1/ ޏNTmQ: !o*J<B{1"x-f:pQ6ZW`]*<in3Ch*W
-%<`w`zrm|f^fKHϫ,=ѱѐY"i -ɟՏ(`vlH|D*9X?Pm18P;@ݛ {a/.HZIkWBR  )HݣB?|ES3&HQ]'<ye<Spk,j9203'qmޥ6}rq˦[ۦ_YŖT.kNp\!1CeAkHݐ_AF\A7Χھi/^dH94nBt|t|06l'7n]͕ϡ &񳬪$F>_5C
-,VN]ϩMA<̀]_?b@{7b w&]0q*aTwIȸI=|zi[v GuY3}s tE ɓ,KVC>ϩL_<EV]㻒~_t{uwEs9! S.{@"(yrӎf(9̷ eJddwcC
+xڵYKFϯm~NmewkשR]gnm5DŽfh4)Ryq.f7 c:J/QQjqn\H+pm&~˄|Z+4?.o/>xyի^l”<Ozv')'$:Il x*h؄fe@e5vJ?~O%pb.0If@s~fķбg&K#L%\H hMu]mU&"Ϣ;OZE2M0,_/GI3 Hs4{\e @1|ǒ2ɴo!aKGk&) ^p"4Ueq)V,;zzW<{[ 8$C߯׵tJض}_-һ6v.nIf˼|K/[dbR?<Tg1y'ॵad v AsLH"/r0xD y}>p/rCx$$5d<
+
+#oݏN0brVb* l~eBGFQ2O J T(4`IԠAHT;
+qCgB[zxVrH'2k+&cc@CN&$OVe!eWY "gDCA=u&>D$r47X0)ɗZ r͍mٯ,7޵럷,*T[.J_lA[gtI
+ 9څ=\-ߢEtMVצ ζ8TpH
+Q3u.o~b%ϫy=+@b?m\ܮ3X:Mtnѐ) *T?IJ&߷noCF@al =#mB]E{L!`> J>/v}XPg
+z34xaV6e٠w
endstream
endobj
-756 0 obj
+759 0 obj
<<
/Type /Page
-/Contents 757 0 R
-/Resources 755 0 R
+/Contents 760 0 R
+/Resources 758 0 R
/MediaBox [0 0 612 792]
-/Parent 731 0 R
-/Annots [ 752 0 R 753 0 R 754 0 R ]
+/Parent 733 0 R
+/Annots [ 755 0 R 756 0 R 757 0 R ]
>>
endobj
-752 0 obj
+755 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [222.325 485.056 237.048 493.912]
+/Rect [222.325 347.994 237.048 356.85]
/A << /S /GoTo /D (table.caption.15) >>
>>
endobj
-753 0 obj
+756 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [280.489 423.343 295.212 434.136]
+/Rect [280.489 286.281 295.212 297.074]
/A << /S /GoTo /D (table.caption.15) >>
>>
endobj
-754 0 obj
+757 0 obj
<<
/Type /Annot
/Subtype /Link
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [153.7 387.478 176.172 398.27]
+/Rect [153.7 250.416 176.172 261.209]
/A << /S /GoTo /D (subsection.5.2.5) >>
>>
endobj
-758 0 obj
+761 0 obj
<<
-/D [756 0 R /XYZ 132.768 705.06 null]
+/D [759 0 R /XYZ 132.768 705.06 null]
>>
endobj
218 0 obj
<<
-/D [756 0 R /XYZ 133.768 588.183 null]
+/D [759 0 R /XYZ 133.768 451.122 null]
>>
endobj
-759 0 obj
+762 0 obj
<<
-/D [756 0 R /XYZ 322.811 557.811 null]
+/D [759 0 R /XYZ 322.811 420.749 null]
>>
endobj
222 0 obj
<<
-/D [756 0 R /XYZ 133.768 374.72 null]
+/D [759 0 R /XYZ 133.768 237.694 null]
>>
endobj
-760 0 obj
+763 0 obj
<<
-/D [756 0 R /XYZ 133.768 300.93 null]
+/D [759 0 R /XYZ 133.768 164.362 null]
>>
endobj
-761 0 obj
+764 0 obj
<<
-/D [756 0 R /XYZ 133.768 280.885 null]
+/D [759 0 R /XYZ 133.768 144.399 null]
>>
endobj
-762 0 obj
+758 0 obj
<<
-/D [756 0 R /XYZ 133.768 249.991 null]
+/Font << /F75 308 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F33 309 0 R /F100 410 0 R /F92 360 0 R /F110 507 0 R /F73 302 0 R /F115 608 0 R >>
+/ProcSet [ /PDF /Text ]
>>
endobj
-755 0 obj
+767 0 obj
<<
-/Font << /F75 308 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F33 309 0 R /F92 360 0 R /F110 506 0 R /F73 302 0 R /F115 607 0 R /F100 410 0 R >>
-/ProcSet [ /PDF /Text ]
+/Length 1851
+/Filter /FlateDecode
+>>
+stream
+xXK6!u_"Tmf5[nzi[Y[HrwJܜ'M >YM7n eR"yrIҬP:ɵaBnܧ>mFO?HXkW7侐+
+3=p}tv(u7 &v)<Lj(ilhViVuiCUoi9zM%^2:%L*WcU,*Vdx$"!"]m㾧9#E UGa~|jVtЖjKȒ3s 3chJ.SU]匫9X¦EttB 8vWp:47˶9:m:j"=8zdmG788CZ􄲚#M^pRH)o$V&KYOVe_vNE1p@k#Z-@Dr~~޺ڬ&< C[18
+8vn \DڇL}L-znVl4orU~ޟ
+ 烳 +oiDX
+0b~&
+h̒7çb$v<џ"ifpqvL
+:{L"n<GX^<Z0D(81yƬP_/AT_c*fsyoI
+X5ǎQV!fbPrvkA_{⼹SN.(u7pIx04 +(9kQԍ0#Mf2w\e6Y}u_(ʕ{!Y+z/w7?'
+e"-;ps%kX&/( P
+}ϛS:F$`*%䀺]gP=x!4> F0=`2697P a\wB@/ ^=lp^z0  vOO=@bVc{+>hK[>-\}{B0
+endstream
+endobj
+766 0 obj
+<<
+/Type /Page
+/Contents 767 0 R
+/Resources 765 0 R
+/MediaBox [0 0 612 792]
+/Parent 733 0 R
+>>
+endobj
+768 0 obj
+<<
+/D [766 0 R /XYZ 132.768 705.06 null]
+>>
+endobj
+769 0 obj
+<<
+/D [766 0 R /XYZ 133.768 667.198 null]
>>
endobj
765 0 obj
<<
-/Length 1925
+/Font << /F33 309 0 R /F75 308 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+772 0 obj
+<<
+/Length 906
/Filter /FlateDecode
>>
stream
-xXKs6W]e!ċ
-T ӶeGQ`K3ؒ3<:EIo}haCW]Uij^dy2愘zmVrE~703bi,jsc]Tx epؕ4T_t4ӇZC˪]4eo?m?-3YX
-Nzc[d硬A;scCY^"X@x./p0 $V*S ?gS_q ݶ\u^zRή֛ސ#]Pə;PM4d2__R3mCY[WO~ TB=SZ+]ɇX
-gKc/sp+H
-'{&P{~>A2#
-;l.k
+xڅVK8 hyLi+98$loW!`[ϟ%yq{^sD"RRfA(*dlTPF|:P60*!-̩ۇ{)Mu*RĂgTf}lL6>?Ѣ؍Aa9P+ғ9LRby[ATriV I3= ~Wa@QnéN҄BaF:Rgn2ޅ
+;ȜOpp1i龭kh䑉fDQ̑Ϥ45+qҔ2͐kMU0f1aǒ܏a-%#egԞ.3^:΂Ivs'0 u 7p C1uom,Y;2~'T9F
+BsX.c˱^Ʀ|L \)Ob
+5Z $c>c1yn5PTV9L {wE;hnMW:봩b_tDB3uld<G)0ʵA?u y;~fc;w\J~acM1nla9o./l7e&g*57ۂ9;"=(l}Mv7bgko%bY_OhH
+r209 8
endstream
endobj
-764 0 obj
+771 0 obj
<<
/Type /Page
-/Contents 765 0 R
-/Resources 763 0 R
+/Contents 772 0 R
+/Resources 770 0 R
/MediaBox [0 0 612 792]
-/Parent 731 0 R
+/Parent 774 0 R
>>
endobj
-766 0 obj
+773 0 obj
<<
-/D [764 0 R /XYZ 132.768 705.06 null]
+/D [771 0 R /XYZ 132.768 705.06 null]
>>
endobj
226 0 obj
<<
-/D [764 0 R /XYZ 133.768 303.412 null]
+/D [771 0 R /XYZ 133.768 667.198 null]
>>
endobj
-763 0 obj
+770 0 obj
<<
-/Font << /F75 308 0 R /F38 313 0 R /F44 431 0 R /F41 314 0 R /F33 309 0 R /F92 360 0 R /F100 410 0 R >>
+/Font << /F92 360 0 R /F33 309 0 R /F100 410 0 R /F75 308 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-769 0 obj
+777 0 obj
<<
/Length 1367
/Filter /FlateDecode
@@ -4481,167 +4581,167 @@ endobj
stream
xڭWKF WpdRMxķTrLNW100ko#u X&9jI$>J^՛DʲL讉,ϊHiEwu!~w.qD:ևOwcEX%dW1tGdJVf"#QY PȸGݢ}wypEl: <6'h0MG^\uM x`7MsMتrr|j4K[U쩮8FUQ"`Q9+5a Ԩc*lg3ܚRhnK0L_xnF<>^ϦC#*)X(:
 ,8]S"TnUVkAgq5jWl
-=ր+aS<+lKb_yOLsqJ^Ʊ8gkQB&Y%} i_y
+=ր+aS<+lKb_yOLsqJ^Ʊ8gkQB&Y%} i_y
endstream
endobj
-768 0 obj
+776 0 obj
<<
/Type /Page
-/Contents 769 0 R
-/Resources 767 0 R
+/Contents 777 0 R
+/Resources 775 0 R
/MediaBox [0 0 612 792]
-/Parent 779 0 R
+/Parent 774 0 R
>>
endobj
-770 0 obj
+778 0 obj
<<
-/D [768 0 R /XYZ 132.768 705.06 null]
+/D [776 0 R /XYZ 132.768 705.06 null]
>>
endobj
230 0 obj
<<
-/D [768 0 R /XYZ 133.768 667.198 null]
+/D [776 0 R /XYZ 133.768 667.198 null]
>>
endobj
234 0 obj
<<
-/D [768 0 R /XYZ 133.768 451.991 null]
+/D [776 0 R /XYZ 133.768 451.991 null]
>>
endobj
-771 0 obj
+779 0 obj
<<
-/D [768 0 R /XYZ 133.768 371.834 null]
+/D [776 0 R /XYZ 133.768 371.834 null]
>>
endobj
-772 0 obj
+780 0 obj
<<
-/D [768 0 R /XYZ 133.768 352.462 null]
+/D [776 0 R /XYZ 133.768 352.462 null]
>>
endobj
-773 0 obj
+781 0 obj
<<
-/D [768 0 R /XYZ 133.768 332.537 null]
+/D [776 0 R /XYZ 133.768 332.537 null]
>>
endobj
-774 0 obj
+782 0 obj
<<
-/D [768 0 R /XYZ 133.768 300.656 null]
+/D [776 0 R /XYZ 133.768 300.656 null]
>>
endobj
-775 0 obj
+783 0 obj
<<
-/D [768 0 R /XYZ 133.768 268.222 null]
+/D [776 0 R /XYZ 133.768 268.222 null]
>>
endobj
-776 0 obj
+784 0 obj
<<
-/D [768 0 R /XYZ 133.768 248.297 null]
+/D [776 0 R /XYZ 133.768 248.297 null]
>>
endobj
-777 0 obj
+785 0 obj
<<
-/D [768 0 R /XYZ 133.768 216.97 null]
+/D [776 0 R /XYZ 133.768 216.97 null]
>>
endobj
-778 0 obj
+786 0 obj
<<
-/D [768 0 R /XYZ 133.768 161.179 null]
+/D [776 0 R /XYZ 133.768 161.179 null]
>>
endobj
-767 0 obj
+775 0 obj
<<
-/Font << /F92 360 0 R /F33 309 0 R /F75 308 0 R /F110 506 0 R >>
+/Font << /F92 360 0 R /F33 309 0 R /F75 308 0 R /F110 507 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-782 0 obj
+789 0 obj
<<
-/Length 1779
+/Length 1780
/Filter /FlateDecode
>>
stream
xYێ6}W(
@[mMMJeɐA3J˚F9Ù3#.mf|+>՛+!,aI(u:J(ga1z~~#hVo:yRL)K>k42氳B)=7ŚmV͖R3G+X""z`4QpCHu`Xav5b, xo09giTn@! LjwjzӀb)
|ɔ8fv/,\d&'&."K $RO8TKs}YmkD/
-*UKO~
+*UKO~
endstream
endobj
-781 0 obj
+788 0 obj
<<
/Type /Page
-/Contents 782 0 R
-/Resources 780 0 R
+/Contents 789 0 R
+/Resources 787 0 R
/MediaBox [0 0 612 792]
-/Parent 779 0 R
+/Parent 774 0 R
>>
endobj
-783 0 obj
+790 0 obj
<<
-/D [781 0 R /XYZ 132.768 705.06 null]
+/D [788 0 R /XYZ 132.768 705.06 null]
>>
endobj
-784 0 obj
+791 0 obj
<<
-/D [781 0 R /XYZ 133.768 649.1 null]
+/D [788 0 R /XYZ 133.768 649.1 null]
>>
endobj
-785 0 obj
+792 0 obj
<<
-/D [781 0 R /XYZ 133.768 628.842 null]
+/D [788 0 R /XYZ 133.768 628.842 null]
>>
endobj
-786 0 obj
+793 0 obj
<<
-/D [781 0 R /XYZ 133.768 608.917 null]
+/D [788 0 R /XYZ 133.768 608.917 null]
>>
endobj
-787 0 obj
+794 0 obj
<<
-/D [781 0 R /XYZ 133.768 565.634 null]
+/D [788 0 R /XYZ 133.768 565.634 null]
>>
endobj
-788 0 obj
+795 0 obj
<<
-/D [781 0 R /XYZ 133.768 549.141 null]
+/D [788 0 R /XYZ 133.768 549.141 null]
>>
endobj
-789 0 obj
+796 0 obj
<<
-/D [781 0 R /XYZ 133.768 521.799 null]
+/D [788 0 R /XYZ 133.768 521.799 null]
>>
endobj
-790 0 obj
+797 0 obj
<<
-/D [781 0 R /XYZ 133.768 505.305 null]
+/D [788 0 R /XYZ 133.768 505.305 null]
>>
endobj
-791 0 obj
+798 0 obj
<<
-/D [781 0 R /XYZ 133.768 453.499 null]
+/D [788 0 R /XYZ 133.768 453.499 null]
>>
endobj
-792 0 obj
+799 0 obj
<<
-/D [781 0 R /XYZ 133.768 402.247 null]
+/D [788 0 R /XYZ 133.768 402.247 null]
>>
endobj
-793 0 obj
+800 0 obj
<<
-/D [781 0 R /XYZ 133.768 362.397 null]
+/D [788 0 R /XYZ 133.768 362.397 null]
>>
endobj
238 0 obj
<<
-/D [781 0 R /XYZ 133.768 253.735 null]
+/D [788 0 R /XYZ 133.768 253.735 null]
>>
endobj
-780 0 obj
+787 0 obj
<<
-/Font << /F110 506 0 R /F33 309 0 R /F75 308 0 R /F100 410 0 R /F44 431 0 R /F38 313 0 R /F92 360 0 R >>
+/Font << /F110 507 0 R /F33 309 0 R /F75 308 0 R /F100 410 0 R /F44 431 0 R /F38 313 0 R /F92 360 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-796 0 obj
+803 0 obj
<<
/Length 750
/Filter /FlateDecode
@@ -4652,40 +4752,40 @@ xVMs0WpL%#pӺӏǓKdF| g<J"ĹdI]=z[/iu6[$C
QF]\UE9
!]C^
-)ve>/:!]c_kStRٽ\ 7em?(WTr%l
+)ve>/:!]c_kStRٽ\ 7em?(WTr%l
endstream
endobj
-795 0 obj
+802 0 obj
<<
/Type /Page
-/Contents 796 0 R
-/Resources 794 0 R
+/Contents 803 0 R
+/Resources 801 0 R
/MediaBox [0 0 612 792]
-/Parent 779 0 R
+/Parent 774 0 R
>>
endobj
-797 0 obj
+804 0 obj
<<
-/D [795 0 R /XYZ 132.768 705.06 null]
+/D [802 0 R /XYZ 132.768 705.06 null]
>>
endobj
242 0 obj
<<
-/D [795 0 R /XYZ 133.768 667.198 null]
+/D [802 0 R /XYZ 133.768 667.198 null]
>>
endobj
246 0 obj
<<
-/D [795 0 R /XYZ 133.768 300.063 null]
+/D [802 0 R /XYZ 133.768 300.063 null]
>>
endobj
-794 0 obj
+801 0 obj
<<
-/Font << /F92 360 0 R /F110 506 0 R /F75 308 0 R /F33 309 0 R >>
+/Font << /F92 360 0 R /F110 507 0 R /F75 308 0 R /F33 309 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-800 0 obj
+807 0 obj
<<
/Length 859
/Filter /FlateDecode
@@ -4695,90 +4795,90 @@ xڭVn0+tRIQ
4MPF/itDj %MZJ)FQXpgΧ@q?P6$%ND>Yέ[[
)ʞ~Ҽeͳ2C|2^pά7̞Oiݛ9m_aH?AHXljE|$>PCC'0?|WbsEBllCۜ7صPV:xh21;X_K-y+;q:
(jN;nZY9̢U'T 4NyBG*+KkO`3WJ"=xԼz>tA`[d7jnN;}6#5k4\ضL9}Ymw' w>94Vy+3 B{8b46\scǚT6$FtgL :r*9sct
-hPa =SBv(y =9^feɌ0Y4Y6ň,.G̏bmzΎ#K_\O DDcqū @>.
+hPa =SBv(y =9^feɌ0Y4Y6ň,.G̏bmzΎ#K_\O DDcqū`1|\]=
endstream
endobj
-799 0 obj
+806 0 obj
<<
/Type /Page
-/Contents 800 0 R
-/Resources 798 0 R
+/Contents 807 0 R
+/Resources 805 0 R
/MediaBox [0 0 612 792]
-/Parent 779 0 R
+/Parent 774 0 R
>>
endobj
-801 0 obj
+808 0 obj
<<
-/D [799 0 R /XYZ 132.768 705.06 null]
+/D [806 0 R /XYZ 132.768 705.06 null]
>>
endobj
250 0 obj
<<
-/D [799 0 R /XYZ 133.768 569.35 null]
+/D [806 0 R /XYZ 133.768 569.35 null]
>>
endobj
254 0 obj
<<
-/D [799 0 R /XYZ 133.768 481.229 null]
+/D [806 0 R /XYZ 133.768 481.229 null]
>>
endobj
-798 0 obj
+805 0 obj
<<
-/Font << /F75 308 0 R /F74 307 0 R /F110 506 0 R /F33 309 0 R /F92 360 0 R >>
+/Font << /F75 308 0 R /F74 307 0 R /F110 507 0 R /F33 309 0 R /F92 360 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-804 0 obj
+811 0 obj
<<
/Length 806
/Filter /FlateDecode
>>
stream
xUAo0Wpjv LZiSN΄L@fa~{,pe81fd B`"bBI|w)Đ@\]"ck˯_YH{V5($wƖ- H9*=@qyN=#7ϝCWT-?e9|:ݺl@z%8?
-wQÁo{
+wQ룁o
endstream
endobj
-803 0 obj
+810 0 obj
<<
/Type /Page
-/Contents 804 0 R
-/Resources 802 0 R
+/Contents 811 0 R
+/Resources 809 0 R
/MediaBox [0 0 612 792]
-/Parent 779 0 R
+/Parent 774 0 R
>>
endobj
-805 0 obj
+812 0 obj
<<
-/D [803 0 R /XYZ 132.768 705.06 null]
+/D [810 0 R /XYZ 132.768 705.06 null]
>>
endobj
258 0 obj
<<
-/D [803 0 R /XYZ 133.768 667.198 null]
+/D [810 0 R /XYZ 133.768 667.198 null]
>>
endobj
262 0 obj
<<
-/D [803 0 R /XYZ 133.768 590.811 null]
+/D [810 0 R /XYZ 133.768 590.811 null]
>>
endobj
266 0 obj
<<
-/D [803 0 R /XYZ 133.768 393.101 null]
+/D [810 0 R /XYZ 133.768 393.101 null]
>>
endobj
270 0 obj
<<
-/D [803 0 R /XYZ 133.768 316.936 null]
+/D [810 0 R /XYZ 133.768 316.936 null]
>>
endobj
-802 0 obj
+809 0 obj
<<
-/Font << /F74 307 0 R /F110 506 0 R /F75 308 0 R /F33 309 0 R /F92 360 0 R >>
+/Font << /F74 307 0 R /F110 507 0 R /F75 308 0 R /F33 309 0 R /F92 360 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-808 0 obj
+815 0 obj
<<
/Length 831
/Filter /FlateDecode
@@ -4786,101 +4886,100 @@ endobj
stream
xڵV[o0~߯ "A%v2M}cHxB8&U`rEJa y)3 ,XdאAymc461D)7d[NjlJJRȒtB e
Q*YFb4Ha ` OX
-je޹|Q=>1JXo>@:Tk>yi^ em)ڕŮĐƜD4C l@XQS &e*ϗs3tILeyf}ΕvY>}4dU:UMTvEK1#|e[;"VW_7B( &+^ #$MzPQѩ}/Glo+Q'p>l|)uM6
+je޹|Q=>1JXo>@:Tk>yi^ em)ڕŮĐƜD4C l@XQS &e*ϗs3tILeyf}ΕvY>}4dU:UMTvEK1#|e[;"VW_7B( &+^ #$MzPQѩ}/Glo+Q'p>l|)uM6
endstream
endobj
-807 0 obj
+814 0 obj
<<
/Type /Page
-/Contents 808 0 R
-/Resources 806 0 R
+/Contents 815 0 R
+/Resources 813 0 R
/MediaBox [0 0 612 792]
-/Parent 779 0 R
+/Parent 817 0 R
>>
endobj
-809 0 obj
+816 0 obj
<<
-/D [807 0 R /XYZ 132.768 705.06 null]
+/D [814 0 R /XYZ 132.768 705.06 null]
>>
endobj
274 0 obj
<<
-/D [807 0 R /XYZ 133.768 667.198 null]
+/D [814 0 R /XYZ 133.768 667.198 null]
>>
endobj
278 0 obj
<<
-/D [807 0 R /XYZ 133.768 484.356 null]
+/D [814 0 R /XYZ 133.768 484.356 null]
>>
endobj
-806 0 obj
+813 0 obj
<<
-/Font << /F92 360 0 R /F110 506 0 R /F33 309 0 R /F75 308 0 R >>
+/Font << /F92 360 0 R /F110 507 0 R /F33 309 0 R /F75 308 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-812 0 obj
+820 0 obj
<<
/Length 649
/Filter /FlateDecode
>>
stream
-xڥVM0WpD1P)=ԭT-́,uGqV`M ! ذK{gl""|CKv t,f
-KɝoF %o(;+M4opwXA|Xm!_N`wX0!'`t.8A‚p>C鿷SzMl'Ǒ.⸎l\V5>?
+xڥVM0WpD1RzX[i[Y 늏V5`M ! ȰKksٞ \[Zm`
endstream
endobj
-811 0 obj
+819 0 obj
<<
/Type /Page
-/Contents 812 0 R
-/Resources 810 0 R
+/Contents 820 0 R
+/Resources 818 0 R
/MediaBox [0 0 612 792]
-/Parent 814 0 R
+/Parent 817 0 R
>>
endobj
-813 0 obj
+821 0 obj
<<
-/D [811 0 R /XYZ 132.768 705.06 null]
+/D [819 0 R /XYZ 132.768 705.06 null]
>>
endobj
-810 0 obj
+818 0 obj
<<
/Font << /F75 308 0 R /F33 309 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-817 0 obj
+824 0 obj
<<
/Length 547
/Filter /FlateDecode
>>
stream
-xڽV0+Th^'TJRCUq!&dlpk٠cyoތ rR9_HOa9>K q7w7syI#f<ˇs<XfRk0.W!X j|20cM]wʻ 44B[(֔C=8Kb'nI-llΘ>o^#`
-orh"X{8s7xB8
-CQ.TgIԳ<;TkT{j,
+xڽVAo0Wp֨!8aR/UIĭ!&4x3ipgc[e[aY> 7ط7YAl=^eESC9՝4O,Wp|AS2e!pm74r GOw $z
+G,O+  %1U7$7jP6vM5/w4XEsfMGi=Uћ
+s]ԈsE(TVD Yz=;^wԩרX`RFgAW!K뤈*hT\hG)E&&tvHur.zN7ӭ/jCr31cS0S^*:~W &^efPAUF:5Ij~a>gӚaȫr+{!3D2lkt aojϊ:6p\#`Jsh^V~?՜\p,]Ol[o\1G5`N&#k03
endstream
endobj
-816 0 obj
+823 0 obj
<<
/Type /Page
-/Contents 817 0 R
-/Resources 815 0 R
+/Contents 824 0 R
+/Resources 822 0 R
/MediaBox [0 0 612 792]
-/Parent 814 0 R
+/Parent 817 0 R
>>
endobj
-818 0 obj
+825 0 obj
<<
-/D [816 0 R /XYZ 132.768 705.06 null]
+/D [823 0 R /XYZ 132.768 705.06 null]
>>
endobj
-815 0 obj
+822 0 obj
<<
/Font << /F75 308 0 R /F33 309 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-821 0 obj
+828 0 obj
<<
/Length 696
/Filter /FlateDecode
@@ -4889,35 +4988,35 @@ stream
xUn0+t "Rh
-ЃoIHٴ%Q(/iI233o gY.ofYRo^x02/MfoN[;`)
t
-fmOtcxQU4ל"Y' nn-ٗ$nΗ5ƉAWLp`m~ˇ0
+fmOtcxQU4ל"Y' nn-ٗ$nΗ5ƉAWLh`m~܇1
endstream
endobj
-820 0 obj
+827 0 obj
<<
/Type /Page
-/Contents 821 0 R
-/Resources 819 0 R
+/Contents 828 0 R
+/Resources 826 0 R
/MediaBox [0 0 612 792]
-/Parent 814 0 R
+/Parent 817 0 R
>>
endobj
-822 0 obj
+829 0 obj
<<
-/D [820 0 R /XYZ 132.768 705.06 null]
+/D [827 0 R /XYZ 132.768 705.06 null]
>>
endobj
282 0 obj
<<
-/D [820 0 R /XYZ 133.768 460.681 null]
+/D [827 0 R /XYZ 133.768 460.681 null]
>>
endobj
-819 0 obj
+826 0 obj
<<
/Font << /F75 308 0 R /F92 360 0 R /F33 309 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-825 0 obj
+832 0 obj
<<
/Length 1240
/Filter /FlateDecode
@@ -4928,35 +5027,35 @@ xڭWKs6Wh)1C<MNzr<S$D$Ȃ]Ń)Cnb<ۥ,v`֯|
W:c̨@(u|{.## P%ٖ]}xiQR7y N-//7c}`RQ+4ISBo euWLtm靼Ea>[vUgZ9ǧoYM !%./IڍQlbL NޯY^ zefUSҎ߷~
Jf
Lb*\ Y/Õw@Wz(jx\PD]m{wWH0HᆵyŅIlо240FI͋KF;=YHpaɗa)qDBfk̄萭KLJ3cT/ʃMH!EA<ǔqP7zqC^b3ԇ0/K
-s Zʃ~ 3qVk_]W*E?"$J=kP ":h~Ԝ7=N63IC9Z֩ʶ1SE׭B%LTW9E[] o4'!+X+AXVh75)r*4To ]8taH2UY.FH984"dP.ڎ|s.HNr nGXݦ% gV (}`&ad?q v `yO.
+s Zʃ~ 3qVk_]W*E?"$J=kP ":h~Ԝ7=N63IC9Z֩ʶ1SE׭B%LTW9E[] o4'!+X+AXVh75)r*4To ]8taH2UY.FH984"dP.ڎ|s.HNr nGXݦ% gV (}`&ad?q v `yO.
endstream
endobj
-824 0 obj
+831 0 obj
<<
/Type /Page
-/Contents 825 0 R
-/Resources 823 0 R
+/Contents 832 0 R
+/Resources 830 0 R
/MediaBox [0 0 612 792]
-/Parent 814 0 R
+/Parent 817 0 R
>>
endobj
-826 0 obj
+833 0 obj
<<
-/D [824 0 R /XYZ 132.768 705.06 null]
+/D [831 0 R /XYZ 132.768 705.06 null]
>>
endobj
286 0 obj
<<
-/D [824 0 R /XYZ 133.768 234.917 null]
+/D [831 0 R /XYZ 133.768 234.917 null]
>>
endobj
-823 0 obj
+830 0 obj
<<
-/Font << /F75 308 0 R /F92 360 0 R /F110 506 0 R /F33 309 0 R /F100 410 0 R >>
+/Font << /F75 308 0 R /F92 360 0 R /F110 507 0 R /F33 309 0 R /F100 410 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-829 0 obj
+836 0 obj
<<
/Length 2372
/Filter /FlateDecode
@@ -4966,221 +5065,240 @@ xڵYݏ ͗>rC{=$*K]dɕlKgdI!CrI9on
hc +=MlYE/ iNG9M7]!R4T" :,q?ns~_.2ǏLNo*DRfRij8*
T'Q>YtG,%9Lh %zNpVegzj'ϙ^U"zX۴#IbEafUyp}7wLEHcQbuȗZh|DOqԂœlD[&R&iKZvC|ENQ;xY]w{@\m2'LXI Y <\5q-He לVA 8Rl0²ER[;49u?,y8÷Qw)~gݖX^}`IqQ3;IŴ:a<ΧG><'
1DB!<#zxoWw2;.oqQUK4x5|,\6:OiV z\:*:j$V!@_LZnj. ~ÊE¢0Xay]XT,Jj_\fTOwI;}cw `șZ?"aGp4ExUeCD.}@\(:fN25ҕE% kY$y,^eUX8֭nRSGϻָIOc"EeOm!5I,Щ$;^e,1֟^(y%Aq!ull[eM@
-ovcQ!ϊkih?KW2ix*)f>k'G! ?9\[GW=BD$ήsa.?n kWKoҺ g铛3}SSfu*f*eI>4$Pn+$`ŸSHJXfTv8<BS 8h3<Sl/ Jz`+\P}2j{
+ovcQ!ϊkih?KW2ix*)f>k'G! ?9\[GW=BD$ήsa.?n kWKoҺ g铛3}SSfu*f*eI>4$Pn+$`ŸSHJXfTv8<BS 8h3<Sl/ Jz`+ZP}2{{
endstream
endobj
-828 0 obj
+835 0 obj
<<
/Type /Page
-/Contents 829 0 R
-/Resources 827 0 R
+/Contents 836 0 R
+/Resources 834 0 R
/MediaBox [0 0 612 792]
-/Parent 814 0 R
+/Parent 817 0 R
>>
endobj
-830 0 obj
+837 0 obj
<<
-/D [828 0 R /XYZ 132.768 705.06 null]
+/D [835 0 R /XYZ 132.768 705.06 null]
>>
endobj
290 0 obj
<<
-/D [828 0 R /XYZ 133.768 409.152 null]
+/D [835 0 R /XYZ 133.768 409.152 null]
>>
endobj
-831 0 obj
+838 0 obj
<<
-/D [828 0 R /XYZ 133.768 343.44 null]
+/D [835 0 R /XYZ 133.768 343.44 null]
>>
endobj
-832 0 obj
+839 0 obj
<<
-/D [828 0 R /XYZ 133.768 319.032 null]
+/D [835 0 R /XYZ 133.768 319.032 null]
>>
endobj
-833 0 obj
+840 0 obj
<<
-/D [828 0 R /XYZ 133.768 267.78 null]
+/D [835 0 R /XYZ 133.768 267.78 null]
>>
endobj
-834 0 obj
+841 0 obj
<<
-/D [828 0 R /XYZ 133.768 227.375 null]
+/D [835 0 R /XYZ 133.768 227.375 null]
>>
endobj
-835 0 obj
+842 0 obj
<<
-/D [828 0 R /XYZ 133.768 199.48 null]
+/D [835 0 R /XYZ 133.768 199.48 null]
>>
endobj
-836 0 obj
+843 0 obj
<<
-/D [828 0 R /XYZ 133.768 148.228 null]
+/D [835 0 R /XYZ 133.768 148.228 null]
>>
endobj
-827 0 obj
+834 0 obj
<<
/Font << /F33 309 0 R /F75 308 0 R /F100 410 0 R /F92 360 0 R /F38 313 0 R /F41 314 0 R /F76 311 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-839 0 obj
+846 0 obj
<<
-/Length 509
+/Length 734
/Filter /FlateDecode
>>
stream
-xuS0+!@7P\sىSNh.[{ m鞞ihP4|*DLs什iIV B w.y~/[( {w y8VLmk[5i-ֿ&U1"=r.w
-ATϙ." @E< OK79kߩ7ۃt/%f&(ɫi@B>ng8<bSX!Wϐ8L5~?x).Fo0 Q&"EZ _GT0"CEV9" =M&B3yZ\@<.{vj-4I/fɯmRBiv9%{g<KFKΏC,cȁ*F0eƂTxqZC8p}#tlݖ>c\cKͿn15x VBUK7VFT)P3v?.)"&<<wI_k%
+xڭU=0WP:} ']frIq4w)dm9sYI`c7sݷi&||x|b,Y"Y"23#xsi-2~ʐ9ƩUG[ҴݪhYiķԵl*KTNPV1:*1b<nu9A4fFW^j^lHjj>[B<h{kseXG4*ݾu׹1M2oeM!_ߣN&V.^+F9tݑ@@ I- 'd)G$RLH9`L0ܞמ*?*H-4U_uM[b!'x2!x1dP(.=d8ˤQ.(8FI A sa*,pS]YLnr()UDֻCQ1 Wj9wWvN[;<}D<*bZc|?dY1 {T4
endstream
endobj
-838 0 obj
+845 0 obj
<<
/Type /Page
-/Contents 839 0 R
-/Resources 837 0 R
+/Contents 846 0 R
+/Resources 844 0 R
/MediaBox [0 0 612 792]
-/Parent 814 0 R
+/Parent 858 0 R
>>
endobj
-840 0 obj
+847 0 obj
<<
-/D [838 0 R /XYZ 132.768 705.06 null]
+/D [845 0 R /XYZ 132.768 705.06 null]
>>
endobj
-841 0 obj
+848 0 obj
<<
-/D [838 0 R /XYZ 133.768 667.198 null]
+/D [845 0 R /XYZ 133.768 667.198 null]
>>
endobj
-842 0 obj
+849 0 obj
<<
-/D [838 0 R /XYZ 133.768 652.752 null]
+/D [845 0 R /XYZ 133.768 652.752 null]
>>
endobj
-843 0 obj
+850 0 obj
<<
-/D [838 0 R /XYZ 133.768 636.812 null]
+/D [845 0 R /XYZ 133.768 636.812 null]
>>
endobj
-844 0 obj
+851 0 obj
<<
-/D [838 0 R /XYZ 133.768 618.879 null]
+/D [845 0 R /XYZ 133.768 618.879 null]
>>
endobj
-845 0 obj
+852 0 obj
<<
-/D [838 0 R /XYZ 133.768 596.961 null]
+/D [845 0 R /XYZ 133.768 596.961 null]
>>
endobj
-846 0 obj
+853 0 obj
<<
-/D [838 0 R /XYZ 133.768 569.619 null]
+/D [845 0 R /XYZ 133.768 569.619 null]
>>
endobj
-837 0 obj
+854 0 obj
+<<
+/D [845 0 R /XYZ 133.768 539.178 null]
+>>
+endobj
+855 0 obj
+<<
+/D [845 0 R /XYZ 133.768 517.26 null]
+>>
+endobj
+856 0 obj
+<<
+/D [845 0 R /XYZ 133.768 489.918 null]
+>>
+endobj
+857 0 obj
+<<
+/D [845 0 R /XYZ 133.768 462.023 null]
+>>
+endobj
+844 0 obj
<<
/Font << /F33 309 0 R /F75 308 0 R >>
/ProcSet [ /PDF /Text ]
>>
endobj
-847 0 obj
+859 0 obj
[472.2 555.6 805.6 916.7 1138.9 1277.8]
endobj
-849 0 obj
+861 0 obj
[777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 777.8 777.8 472.2 666.7 666.7 666.7 638.9 722.2 597.2 569.5 666.7 708.3 277.8 472.2 694.5 541.7 875 708.3 736.1 638.9 736.1 645.8 555.6 680.6 687.5 666.7 944.4 666.7 666.7 611.1 288.9 500 288.9 555.6 666.7 277.8 480.6 516.7 444.5 516.7 444.5 305.6 500 516.7 238.9 266.7 488.9 238.9 794.5 516.7 500 516.7 516.7 341.7 383.3 361.1]
endobj
-850 0 obj
+862 0 obj
[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
endobj
-851 0 obj
+863 0 obj
[611.1 611.1]
endobj
-853 0 obj
+865 0 obj
[533.6 588.2 758.1 480.3 1228 880.8]
endobj
-854 0 obj
+866 0 obj
[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
endobj
-855 0 obj
+867 0 obj
[813.9 405.6 566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 813.9 813.9 669.5 319.4 500 319.4 555.5 813.9 319.4 613.3 580 591.1 624.5 557.8 535.5 641.1 613.3 302.2 424.4 635.5 513.3 746.7 613.3 635.5 557.8 635.5 602.2 457.8 591.1 613.3 613.3 835.6 613.3 613.3 502.2 500 277.8 500 555.5 188.9 813.9 813.9 786.1 786.1 829.2 741.7 741.7 851.4 683.3 683.3 683.3 813.9 813.9 813.9 844.4 800 800 611.1 611.1 611.1 786.1 786.1 813.9 813.9 813.9 669.5 669.5 669.5 931.7 405.6 624.5 537.5 613.3 613.3 591.1 591.1 624.5 557.8 557.8 641.1 513.3 513.3 513.3 613.3 613.3 613.3 635.5 602.2 602.2 457.8 457.8 457.8 591.1 591.1 613.3 613.3 613.3 502.2 502.2 502.2 696.4 319.4 523.6 813.9 813.9 813.9 813.9 813.9 813.9 813.9 975 786.1 741.7 741.7 741.7 741.7 405.6 405.6 405.6 405.6 829.2 813.9 844.4 844.4 844.4 844.4 844.4 1091.7 844.4 813.9 813.9 813.9 813.9 813.9 683.3 1222.2 613.3 613.3 613.3 613.3 613.3 613.3 735.5 591.1 557.8 557.8 557.8 557.8 302.2 302.2 302.2 302.2 624.5 613.3 635.5 635.5 635.5 635.5 635.5 824.4 635.5 613.3 613.3 613.3 613.3]
endobj
-856 0 obj
+868 0 obj
[531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531 531.3 531.3 531 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3]
endobj
-858 0 obj
+870 0 obj
[892.9 339.3 892.9 585.3 892.9 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 585.3 585.3 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 1138.9 892.9 892.9 1138.9 1138.9 585.3 585.3 1138.9 1138.9 1138.9 892.9 1138.9 1138.9 708.3 708.3 1138.9 1138.9 1138.9 892.9 329.4 1138.9 769.8 769.8 1015.9 1015.9 0 0 646.8 646.8 769.8 585.3 831.4 831.4 892.9 892.9 708.3 917.6 753.4 620.2 889.5 616.1 818.4 688.5 978.7 646.5 782.2 871.7 791.7 1342.7 935.6 905.8 809.2 935.9 981 702.2 647.8 717.8 719.9 1135.1 818.9 764.4 823.1 769.8 769.8 769.8 769.8 769.8 708.3 708.3 523.8 523.8 523.8 523.8 585.3 585.3 462.3 462.3 339.3 585.3 585.3 708.3 585.3 339.3 938.5 859.1 954.4]
endobj
-859 0 obj
+871 0 obj
[736.1 1083.3 736.1 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1361.1 736.1 736.1 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1083.3 1361.1 1361.1 1083.3 1083.3 1361.1 1361.1 736.1 736.1 1361.1 1361.1 1361.1 1083.3 1361.1 1361.1 875 875 1361.1 1361.1 1361.1 1083.3 441]
endobj
-861 0 obj
+873 0 obj
[881.9 755.6 723.6 904.2 900 436.1 594.5 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.5 570.8 319.5 575 319.5 319.5 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.5 351.4 607 319.5 958.3 638.9 575 638.9 607 473.6 453.6 447.2 638.9 607 830.6 607 607 511.1]
endobj
-862 0 obj
+874 0 obj
[1027.8 402.8 472.2 402.8 680.6 680.6 680.6]
endobj
-864 0 obj
+876 0 obj
[777.8]
endobj
-866 0 obj
+878 0 obj
[458.3 458.3 416.7 416.7 472.2 472.2 472.2 472.2 583.3 583.3 472.2 472.2 333.3 555.6 577.8 577.8 597.2 597.2 736.1 736.1 527.8 527.8 583.3 583.3 583.3 583.3 750 750 750 750 1044.4 1044.4 791.7 791.7 583.3 583.3 638.9 638.9 638.9 638.9 805.6 805.6 805.6 805.6 1277.8 1277.8 811.1 811.1 875 875 666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 888.9 888.9 888.9 888.9 666.7 875 875 875 875 611.1 611.1 833.3 1111.1 472.2 555.6 1111.1 1511.1 1111.1 1511.1 1111.1 1511.1 1055.6 944.5 472.2 833.3 833.3 833.3 833.3 833.3 1444.5 1277.8 555.6 1111.1 1111.1 1111.1 1111.1 1111.1 944.5 1277.8 555.6 1000 1444.5 555.6 1000 1444.5 472.2 472.2 527.8 527.8 527.8 527.8 666.7 666.7 1000]
endobj
-867 0 obj
+879 0 obj
[777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3 750 833.3]
endobj
-868 0 obj
+880 0 obj
[493.7 329.2 493.7 548.6 329.2 329.2 493.7 274.3 877.8 603.5 548.6 548.6 493.7 452.6 438.9 356.6 576 493.7 713.2]
endobj
-869 0 obj
+881 0 obj
[531.3 1062.5 0 414.9 295.1 324.7 619.8 590.3 590.3 885.4 885.4 531.3 295.1 403.1 885.4 531.3 885.4 826.4 295.1 413.2 413.2 531.3 826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 826.4 826.4 826.4 501.8 826.4 795.9 752.1 767.4 811.1 722.6 693.1 833.5 795.9 382.6 545.5 825.4 663.5 972.9 795.9 826.4 722.6 826.4 781.6 590.3 767.4 795.9 795.9 1091 795.9 795.9 649.3 295.1 531.3 295.1 555.6 795.9 295.1 531.3 590.3 472.2 590.3 472.2 324.7 531.3 590.3 295.1 324.7 560.7 295.1 885.4 590.3 531.3 590.3 560.7 414.1 419.1 413.2 590.3 560.7 767.4 560.7 560.7]
endobj
-870 0 obj
+882 0 obj
[611.1 611.1 611.1]
endobj
-871 0 obj
+883 0 obj
[511.1 1022.2 0 408.5 306.7 306.7 613.3 562.2 587.8 881.7 894.4 511.1 306.7 400.7 817.8 500 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 777.8 766.7 777.8 511.1 766.7 743.4 703.9 715.6 755 678.4 652.8 773.6 743.4 385.5 525 768.9 627.2 896.7 743.4 766.7 678.4 766.7 729.5 562.2 715.6 743.4 743.4 998.9 743.4 743.4 613.3 306.7 500 306.7 555.6 743.4 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.5 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.5 463.9 485.6]
endobj
-872 0 obj
+884 0 obj
[656.2 625 625 937.5 937.5 562.5 342.6 462.5 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 894.4 875 894.4 531.2 875 849.5 799.7 812.5 862.2 738.4 707.2 884.2 879.6 419 581 880.7 675.9 1067.2 879.6 844.9 768.5 844.9 839.2 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 575 312.5 555.6 849.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.7 437.5 625 593.7 812.5 593.7 593.7 500]
endobj
-873 0 obj
+885 0 obj
[444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.6 494 437.5 570 517 571.4 437.2 540.3 595.8 625.7 651.4 622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 827.9 738.2 643.1 786.3 831.3 439.6 554.5 849.3 680.6 970.1 803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1 572.5 484.7 715.9 571.5 490.3 465.1 322.5 384 636.5 500]
endobj
-874 0 obj
+886 0 obj
[625 833.3 777.8 694.5 666.7 750 722.2 777.8 722.2 777.8 722.2 583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.5 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 472 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 472 277.8 500 277.8 277.8 500 555.6 444.5 555.6 444.5 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.5 388.9 555.6 527.8 722.2 527.8 527.8 444.5 500 1000 500 500 500]
endobj
-875 0 obj
+887 0 obj
[742.7 647.8 600.1 519.3 476.1 519.8 588.6 544.1 422.8 668.8 677.6 694.6 572.8 519.8 668 592.7 662 526.8 632.9 686.9 713.8 756 719.7 539.7 689.9 950 592.7 439.2 751.4 1138.9 1138.9 1138.9 1138.9 339.3 339.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 339.3 339.3 892.9 585.3 892.9 585.3 610.1 859.1 863.2 819.4 934.1 838.7 724.5 889.4 935.6 506.3 632 959.9 783.7 1089.4 904.9 868.9 727.3 899.7 860.6 701.5 674.8 778.2 674.6 1074.4 936.9 671.5 778.4 462.3 462.3 462.3 1138.9 1138.9 478.2 619.7 502.4 510.5 594.7 542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2 563.9 588.9 523.6 530.4 539.2 431.6 675.4 571.4 826.4 647.8 579.4 545.8]
endobj
-876 0 obj
+888 0 obj
[877 781.7 754 843.3 815.5 877 815.5 877 815.5 677.6 646.9 646.9 970.3 970.3 323.4 354.2 569.4 569.4 569.4 569.4 569.4 843.3 507.9 569.4 815.5 877 569.4 1013.9 1136.9 877 323.4 323.4 538.4 938.5 569.4 938.5 877 323.4 446.4 446.4 569.4 877 323.4 384.9 323.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 323.4 323.4 323.4 877 538.7 538.7 877 843.3 798.6 815.5 860.1 767.9 737.1 883.9 843.3 412.7 583.3 874 706.4 1027.8 843.3 877 767.9 877 829.4 631 815.5 843.3 843.3 1150.8 843.3 843.3 692.4 323.4 538.4 323.4 569.4 323.4 323.4 569.4 631 507.9 631]
endobj
-877 0 obj
+889 0 obj
[569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 569.4 323.4 323.4 892.9 877 892.9 538.7 877 843.3]
endobj
-878 0 obj
+890 0 obj
[500 1000 0 391.7 277.8 305.6 583.3 555.6 555.6 833.3 833.3 500 277.8 373.8 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 777.8 777.8 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 555.6 750 277.8 500 555.6 444.5 555.6 444.5 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.5 388.9 555.6 527.8 722.2 527.8 527.8 444.5 500 277.8 500 555.6 166.7 750 750 722.2 722.2 763.9 680.6 680.6 784.7 625 625 625 750 750 750 777.8 736.1 736.1 555.6 555.6 555.6 722.2 722.2 750 750 750 611.1 611.1 611.1 838.9 361.1 555.6 484]
endobj
-879 0 obj
+891 0 obj
[525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525]
endobj
-880 0 obj
+892 0 obj
[575 1150 0 449.7 319.5 351.4 670.8 638.9 638.9 958.3 958.3 575 350 481.5 958.3 575 958.3 894.4 319.5 447.2 447.2 575 894.4 319.5 383.3 319.5 575 575 575 575 575 575 575 575 575 575 575 319.5 319.5 894.4 894.4 894.4 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.5 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.5 575 319.5 555.6 869.4 319.5 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.5 351.4 607 319.5 958.3 638.9 575 638.9 607 473.6 453.6 447.2 638.9 607 830.6 607 607 511.1]
endobj
-881 0 obj
+893 0 obj
[399.7 399.7 513.9 799.4 285.5 342.6 285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5 799.4 799.4 799.4 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1 799.2 642.3 942 770.7 799.4 699.4 799.4 756.4 571 742.3 770.7 770.7 1056.1 770.7 770.7 628.1 285.5 513.9 285.5 555.6 770.7 285.5 513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.4 571 513.9 571 542.4 402 405.4 399.7 571 542.4 742.3 542.4 542.4]
endobj
-882 0 obj
+894 0 obj
[272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 761.6 761.6 761.6 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.2 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 500 272 555.6 734 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8]
endobj
-883 0 obj
+895 0 obj
[525.4 499.3 499.3 749 749 458.6 249.7 321.6 772.1 458.6 772.1 719.9 249.7 354.1 354.1 458.6 719.9 249.7 301.9 249.7 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 249.7 249.7 761.6 719.9 761.6 432.5 719.9 693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.9 628.2 719.9 680.4 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.7 500 249.7 555.6 693.3 249.7 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.7 275.8 484.7 249.7 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1 510.9 484.7 667.6]
endobj
-884 0 obj
+896 0 obj
[514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6]
endobj
-885 0 obj
+897 0 obj
<<
/Length1 1169
/Length2 6544
@@ -5225,7 +5343,7 @@ f?xʲDF(w!U:J4OlJUoPQ4ħ
Zs$x(
endstream
endobj
-886 0 obj
+898 0 obj
<<
/Type /FontDescriptor
/FontName /OIUXCD+esint10
@@ -5238,10 +5356,10 @@ endobj
/StemV 40
/XHeight 431
/CharSet (/acute/ring)
-/FontFile 885 0 R
+/FontFile 897 0 R
>>
endobj
-887 0 obj
+899 0 obj
<<
/Length1 2563
/Length2 29376
@@ -5373,7 +5491,7 @@ Jq/zEf΂-xBNN{
JĄ ҧwk@,^=`:ѨyZ+i ~XJF$| 7ߙ@gkw_ PMEDe);Ĵn*dQdWg H *hW%A\MZQ1tzpf-̑<7{~^vKJBXfZWs:1A4nJir[O}oVDb!@7FkAw҉M+Qvg=[7Y!
endstream
endobj
-888 0 obj
+900 0 obj
<<
/Type /FontDescriptor
/FontName /KKYZJG+LMRoman10-Bold
@@ -5386,10 +5504,10 @@ endobj
/StemV 114
/XHeight 444
/CharSet (/A/B/C/D/E/F/I/L/N/O/P/R/S/T/U/a/ampersand/asterisk/b/backslash/c/colon/comma/d/e/eight/endash/f/ff/fi/five/four/g/h/hyphen/i/j/k/l/m/n/o/one/p/period/q/question/quoteright/r/s/seven/six/t/three/two/u/v/w/x/y/z)
-/FontFile 887 0 R
+/FontFile 899 0 R
>>
endobj
-889 0 obj
+901 0 obj
<<
/Length1 2513
/Length2 27928
@@ -5511,7 +5629,7 @@ Sg
3$L?_}N&3 ňTVDG
endstream
endobj
-890 0 obj
+902 0 obj
<<
/Type /FontDescriptor
/FontName /LQAAZY+LMRoman12-Bold
@@ -5524,10 +5642,10 @@ endobj
/StemV 109
/XHeight 444
/CharSet (/A/C/D/E/G/H/I/J/M/O/P/R/S/T/V/a/ampersand/b/c/colon/comma/d/e/f/ff/fi/five/four/g/h/hyphen/i/j/k/l/m/n/o/one/p/parenleft/parenright/period/quoteright/r/s/semicolon/six/slash/t/three/two/u/v/w/x/y/z)
-/FontFile 889 0 R
+/FontFile 901 0 R
>>
endobj
-891 0 obj
+903 0 obj
<<
/Length1 1820
/Length2 20306
@@ -5637,7 +5755,7 @@ V0b.& Q~f
*#ԐY=`ԙS–^5!8Z޴7y $h9Ĕ$7 ,R{ip1GE
endstream
endobj
-892 0 obj
+904 0 obj
<<
/Type /FontDescriptor
/FontName /UZPDGI+LMRomanCaps10-Regular
@@ -5650,10 +5768,10 @@ endobj
/StemV 89
/XHeight 431
/CharSet (/H/S/a/c/e/h/i/l/n/s/udieresis)
-/FontFile 891 0 R
+/FontFile 903 0 R
>>
endobj
-893 0 obj
+905 0 obj
<<
/Length1 2102
/Length2 3356
@@ -5682,7 +5800,7 @@ xڵUy<׎[(ۍl1,C3ǎXK!JHdO*"=(iI
x~ 3gl*gϘ8׺#w<'-/a3laNF6(E ?l%?$p/۪5 麲LˁneMNY}]졄oe S߮aB߈3ɔёjGcDo 2NZiqky6&GvOGWT}ܔHܢ˥۸jR/AA~ޏ@{$+K){ ݖd"sT@˚ȿoŤUuTN(߁
endstream
endobj
-894 0 obj
+906 0 obj
<<
/Type /FontDescriptor
/FontName /DLABCR+LMMathExtension10-Regular
@@ -5695,10 +5813,10 @@ endobj
/StemV 69
/XHeight 431
/CharSet (/angbracketleftbigg/angbracketrightbigg/bracketleftbig/bracketleftbigg/bracketrightbig/bracketrightbigg/parenleftBigg/parenleftbig/parenleftbigg/parenrightBigg/parenrightbig/parenrightbigg/radicalbig/slashbig/slashbigg/vextendsingle)
-/FontFile 893 0 R
+/FontFile 905 0 R
>>
endobj
-895 0 obj
+907 0 obj
<<
/Length1 2355
/Length2 10626
@@ -5759,7 +5877,7 @@ xnu7Y{Z?ַӼ |Jt1th%ݙ7ߒՌg4՗M[,a!G8;m*6Riz
tϓlͷm&2+CZQ'2=
endstream
endobj
-896 0 obj
+908 0 obj
<<
/Type /FontDescriptor
/FontName /LJFRVQ+LMMathItalic10-Regular
@@ -5772,10 +5890,10 @@ endobj
/StemV 60
/XHeight 431
/CharSet (/A/B/D/E/F/L/N/P/S/T/U/V/X/Y/a/b/c/comma/d/delta/epsilon/eta/f/k/m/n/partialdiff/period/phi/psi/q/r/rho/s/slash/t/theta/u/v/vector/w/x/y/z)
-/FontFile 895 0 R
+/FontFile 907 0 R
>>
endobj
-897 0 obj
+909 0 obj
<<
/Length1 1685
/Length2 2275
@@ -5795,7 +5913,7 @@ SPˤ-%uRr
C$$,<y,\
endstream
endobj
-898 0 obj
+910 0 obj
<<
/Type /FontDescriptor
/FontName /ZBFYGJ+LMMathItalic5-Regular
@@ -5808,10 +5926,10 @@ endobj
/StemV 84
/XHeight 431
/CharSet (/i/n)
-/FontFile 897 0 R
+/FontFile 909 0 R
>>
endobj
-899 0 obj
+911 0 obj
<<
/Length1 2151
/Length2 8381
@@ -5860,7 +5978,7 @@ a&)48qVdr|@~ZwGsx`^l:g )mx2@P-P=}
]JW>~>S+ٶ*cI7S(;]:@FV]6˗ ]h\e.]q*R &!VV!Dyd>$f 5yu;JVToQBq.ұ %2'Z;]M`9RtwqyuA 6 \nN=YpRrNDéb]h)ħ]%RSVLS>@MWB
endstream
endobj
-900 0 obj
+912 0 obj
<<
/Type /FontDescriptor
/FontName /HVAXQD+LMMathItalic7-Regular
@@ -5873,10 +5991,10 @@ endobj
/StemV 72
/XHeight 431
/CharSet (/F/K/N/S/T/U/V/alpha/b/beta/comma/delta/epsilon/f/h/i/j/k/l/m/n/partialdiff/pi/psi/r/slash/t/v/x/y/z)
-/FontFile 899 0 R
+/FontFile 911 0 R
>>
endobj
-901 0 obj
+913 0 obj
<<
/Length1 3009
/Length2 35332
@@ -6027,7 +6145,7 @@ e-5#\iB:Ky$DgWd+3r"%\|Tvl"S8qUSBlbGQx:H
^32x#ܵT3'OK& wE:7љQDvV0Rr]1-}Idqqpc6)|.7'm"{e h֩'l/T1K U]8\/UY@<Ӟyԯ$uqZpї(lR
endstream
endobj
-902 0 obj
+914 0 obj
<<
/Type /FontDescriptor
/FontName /UFAMEL+LMRoman10-Regular
@@ -6040,101 +6158,120 @@ endobj
/StemV 69
/XHeight 431
/CharSet (/A/B/C/D/Delta/E/F/G/Gamma/H/I/J/K/L/M/N/O/P/Phi/R/S/T/Theta/U/V/W/X/Y/a/asterisk/b/backslash/bracketleft/bracketright/bullet/c/colon/comma/d/dieresis/dotaccent/e/eight/endash/equal/exclam/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/plus/q/question/quoteleft/quoteright/r/s/section/semicolon/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
-/FontFile 901 0 R
+/FontFile 913 0 R
>>
endobj
-903 0 obj
+915 0 obj
<<
-/Length1 1934
-/Length2 21687
+/Length1 1919
+/Length2 21020
/Length3 0
-/Length 22891
+/Length 22160
/Filter /FlateDecode
>>
stream
-xڴ{eP\]vp kݝ5!@-w;3kOjRBeZA;#3-#@FVЖV hbm`c``%%v:[ي:
-quZ*G9́gW
-naq7YCgG wmaM?=-$dEe"F揣?|q5O 
-j¯6MPB CD&tLՍ?-P<1+FBs5ʳْd@s:6l&.Bkv`[ v 6 Lz*qSPӗ-y=ʩ7=ԟw;ZL l|s8gQJ.\s%AwQs1PWg G|Fb
-;46F# ;7ٝϚQ%Im
-G1
-)MN `D=G,5 [BXW+ԑҳh.8-XK~uu{r% ɋovy'q?ecHCfΦ'Lޥ<KHA l
-G./jLf-x#=͵՘n=L>$gSA6:FxYX:4zFR5g3I4: LOŠw\Bt$4N:k"lDS9.Qz,^DM$'< &5!@B @m4a$9Eod%Q'L<WH-fS8_M]!E
-T6!+G‹>0f  qQtP&g}#KW2^_
-/S_/ِ2$BϖGp3Q*F~X+4$5^i1~ڢYK_˅dG*iv hM"(<kfG̥6v
-ܬCf7yc 9#Ă@We8͡}E([<=*%RO|P8)._<-+C!?Wa([)捜r9ܘO'o'p/O
-F' 蕨|PK c:.K⯱\I
-3x-yת'$Û}e;̛DL&|G/Į65o~sUDaifߞޓ`؛ gT$XPV`y$bԼvLC:)z'L -$
-;8[ӽ
-uCaY"ğ?R>T!wO=(i] %!vW](1eROa[B gK@˷glN 4񫛉hcgPăh'T [x*)T0F,/56.m0
-Nӷ)It[߁ "ҽ5.(ټ/SS ŻDFz2#
-+' -)חvX^xy\:5ФݸA42dc'
-j?v>^ 4)n;2%XP#^ߥRR}cfT_R/h9כz^7_ݻFj@*-ecR!ha|&!\V*TrfT\&}0 D/LuK
-
-gV>q}Xޤ@.MB^g$? 1q6|UNg[y ǕJ<A 3TOѤ0PUz-zB|"
-3G=mƣrޢr\VF_D >D,[KW37ƭ/09 JO3&bz%߸E3kHr!$Ӗ,_Wӊy;uXnA|&FUMdҦ<e8 ?LK*R4d 8̥ b,' $ڷQ\~w}:, Vm^,O *bQ><(-@gLx16DkB|f"N
-G7ŖM?6n<%ѽ}vW8{ GK%]WZjtk!(&|yj8lDiE:0BO(mE&ԫ|8ٷՌ`ߞ`vGYFZ499Z \yMxdρh1SA#͒ݧIڅtւF_{'u ^
-{crٚ[AkwD۬V$<0ZrgF,w9Eos͞HkIOug924&:w#?ÇV!u0FIlkr-z-VmxCQUEMJ;ЋA|a Zw33hqsYǝ(dxn
-Cw>]*bY;-AfJE^4\5Ug"7X v"! nHcSgjk$Rx a*~}hMFo\RԎuXIJ
- !-맣X@{kۖ-oZהHo:)  $F`Wc߭k @*}FD(t>}!3KKwMƛp鬷)xig Q:uN#4f9-ɍ5HOhpD0(\RR4[%vIש|^Ƽ#(&]`pns5y?\Q–uy/OX#fֈhhso {r:hJ& b׻ =:,pf5ChqODf 7:Na(\V&<;g)x~GJx:_ pe{wJoԥh$TƞQ<2?rR6 +ΰTŽ@ͷ}$σZ&_Tnվ~@i(N~|_-i@iw?4~uzszAKs~eYvd2jKCHc"i%dKl 8; yϢG$)}hńLP&ƆiRɾw%z~ jƘ:uu"7$["*4ܘ m!$q=Zw(d},BO<%NzjŤ4J12~Cdp˲VseBQE@V<E>nخ곇fTg {Aj]N$Z1] 5hʑeqD;=|yyvY`@~D2MtPJa7q\['^B" :km?[(SMg$i|`o*"yHBF+85w.-߱',u^cdͻlj Y_`ܵ9`ɳxl5!Udpkƾa[hfކNgӑl+V(BM19 oXK+D<Aw(*Y1폶gc^*R2K:I+ =,a+iq7$q@XygYs Qѽ5nQ0t`~|V=L E:U+Wcmާ.z8AdRIf`{e
-MM%qelƗݬ&Ⱥi_%bޖƱ?l2rc6rx7uϤ xKx⚄ǾLj\~J62^,XC$
-l"{G}rNYmP<$MVMAQ6^
-zV>QY Gqt~lY=hjm~sS:Z1tn AuD{b˜
- *FtͲ~qSܐy2IK
-Igj_Y51:cV
-pϾBnf''3zcf)m <Q, p„#f1nkZdQ9eu~RۯdcǗkcQ|VBzxiSRrHD
-Dg!,kt9HAނ짖v ̎]"36C`A!PњM SI{#+EeR3eeK$r9C.p[*- ަo4TsOlr۩UͫKϋOE\Nk-
-߿/%.ƚWR~t//l2b<M9P &:Wc&sc11
-.ySN{cX<tEYi/H²J!܀||rd,ip7C6>SPAQj";::2@91~suEQ d2}QZzy1ė@sY/bhn{Qv5ӭJ]ɹ*Y夽懒d ]ڕiDƏWan1D;X6h=.P
-36C]|}SYEϳ|)u$>y-i&Jrtȏqyf)
-њV~;<2y=C=xl|R%Gjya.;27O_ @哪)O.ΐ ;C}K4}G/7W YUVdom.6Y9V#0_߭tn'ˊ]MEIEg<]&3
-ށ$
-}{+z/^k<&PrO;ø?~VN/ID%o燃aqg}¿;/c a9 &)ҜT*:O,Yfcso$ æ4SA.ѩ VD~ʦHDG3ᙆ,
-1o2ћc{- B% FH
-l@t\R iAIx?K^͚7kgI\mXcf{vFoIT=_I7,Xk)&㦙W)+GVszXTiZ
- Fmoe?*њ<xh8k]%e~f4K )[U Mq醴RKpgWCN$&$6@$?v|0qM N5u ^9&A͈+hqbOr ՙ^~ӇmiN9%,vxoeGȡlqTSӺؑ3Diia=KuF;l5
-N̦nڟ-M96itt$N)jFMHiU$y'u+lg[-.>Jlɻ1hD4iS并Ur~ǽ!-_(v^Ku#Ik Ⱦ"&k]cIH)l]\#9z'k{Nf&^7uU|LNv CsҬN֮N1Z
-{lEn>X-=GenFEI?B-U]L\$6d}z/:)=j=$}()
-@@J]he`|e[}gLSsͷd\=CXtb IJ1mtQb\qHB1/$|%rv{*}-krTIn2 dM]i:²$bqt@Jb.V[>}fBh,&[OSkEr#8, kT0_B7hXL/<˅@bpuJt
-*N^DZ;!JvhM|dOMQ3q#E^&q`$%)OiJw`b% "ĆPtVuk,ggօl؏e'8["D+,7in}(ѓ.q5TV6j22,K8QǬA5w0c܎[eZ+%$[Kz]ð t"6st)<si'eV䳞H<D
-(}پ3b&>%E%L\6_ՉMx=-?`}䤸O x=d sdže,9aĉjL_<ݻRd<Zw._eS"SP[b`AJWh`uW,BPѯXEqE=U8|}ռR;mKJ{&AÙr
-ĺ@[Dwed-2trH{o7z8A7ݛE+EGЮe
-EM<9|zU• oj(2pBrPb"HkC K-YDVؼh$٤
- cn4zTT{0|HuDޞp+ ׶YuE(jKΑf(Aɡ@K[pίn
-?-T."U9Mny^ȣk^a#Q>]սmܩ~d}F* NSDH)hFR<J4%ꚾL)r}coؽ-K=C6f+dvF$!Jl,R=7q.ONBj`4IP:Dži&Ccjər bvU] DȮuDXZ'.o? P킆H>g~-3TTRMd2L#oPKD:55tnz௻y2״L^8Ca&/-Pc484Fib<첌!݂tX6vR jS_
-\JL`gUԂyyCCt`.cTmMww
-߳NxW'BKd8:ߩpC?>NwSAp=} 4ݡquni{[_ېR2{mf]Eh(Bu
-#ɛZàϭ`}Q_%
-O2 ^j@~'J@ 3&9¤3Gx^o!jɥ߈l^(9<=5W c xεA9v.K<*dNYXaNdˍ&hDu/b9Jn*[F/w1++^R_rL.Nۆ׸m#i#}W,,^D!yɩwcK ޺l9j{G3)d(F\R[p& P˶ AҸ
- aD6SP+37kF&/7Byυ%ʿT}mo*0juL<l0>_8Zs ߠ'wQOڮ@`K׫^c鸅F:Xe^Ly?|lYVg1!$kVVE,vPnwv?Fc@ LA㒍( -G'3l\Kv
-RAI7LphbZy27<2f+R/wc ];♊$Pjؘc׆{GS` {c4(hߘkw[őn ' JČmFW 2{Mn4vVZOK{ΗQK,{P̑ܘSpepb_l2^Ԅ!K!/^2^ji)Cɡ$PٟC˼B'<krhSy"µhAQb ~@V }jMi
-ybsk͵k۵x{ZՅ"quh Rͥn[%\Hğe9o{\~7|KC[a0Tz9\N ĽދC(|V[$Dx&SGZtȀHy=llvɎyIJL7
-g~<T rqF'+A%#.!4`o<-,&H%L@_4 yoLTѓ f1ƧM_H=h[IXGZN:5X] #Q:4bhDvzwi#<YPj"vQWvyyܘY3E\hH:l1GX'gxoaYtd6P¦0/(a{ˌNqj
-x_kUxagCXguI^"{H90u( (G 8
-K Iw>)yil+ cdS̓PyBpژh)L/>YuKl"$E
-c$)CvhZ\
-ƜEmޞ CHcpK((ڗ~wC7rwxyb]Num"RQtX `wsv Tn;k+hE+5Oë$,1]HPq[@ӊB'{HJ7Bk98[s*\X<K9q<[(/쥱j1uY3j/pA_}xiy \fyB1g؜ :U!Ql**vUba?X>+ܑ=Dg$ViŒ*X7P]Wl_߽}.,=#[Iu>Q2̧C!/G/al 2eqq~szRv{)y?TGoxcT-߾*5<oD[&X
-WKZ!n:o$p6n;%
-M# :,1ƑPsQU)7*uf] 4N|DD>0n`-cCf
-^4C՗h/̜'jdRa>@%pEA/|.2\j7yk9)朱$%uw'|'+ :2&wI] +n2zsK5ۂ
-d9r [ ŋ)=3Xg&gci-Ahn~V~҅]}vP ]nL{a_￝>R9R. О.y3GkCB]
-&0Z
-m:1jM0TM%qd=V%^ޡ2Eg8c8R6y}<b/͕T:Vŭ<N@eǷV'4cx(u8zRgpII@VgG a~u &~7z90MPTQ',E1TeP \n`p86ndTpOhM:",VU秚
-$•W!-ֽy 9厗cYʋJQ7M{Yl8Aa2g{&y1!bnK;\ۑ8;f\,C0҉ꝼ唙flrM!&s[S1SUVWw5
-U
-})`լ:pY e9f.Nq*n/{f_8>B785n`޲<o /c4w;T%j57dm(.H|p{,E`$$cbyk hqrӘJ
-~[^/'u ϹB
-AM8-"cgAFH|t]\DBBgs;eiz>XТ'PVg
-PڃĠ1 G1KE?0;ƃЙ)J<EcR%>2;
-$uGNPnayUhdm?SDՑԺ_W.֓S[ lb$s?oDw]I%.>k
-`m+--Aڑчd])4Z4jCC篆+
+xڴeT 6
+஍[pw85Np'x=hp səwf7]mVQ3;@`&6fV> I hjg `gfeDw@&` lP6پi"R ` PM4<l
+2
+obRtxK?Q >Vn
+/柑{ݷcg}xK֖f /--X4uu߶KOd`n sqLM<Yz @ r
+hS`۽|6W1S#Db R\
+$)WS9՚J;mﺏe|EJ%ׯh]+q/gkrXB# \cǘ.:ta|1yF}ԉee0\1ȃA`q>E;<:ˍE\'x>w8xL^=Z yy,<2^D5tHGl ǵOBr )5rH4CT55 i
+_\X5Kk.Z옾7Q+H&-?QFg- ΫņrHg)r. rѧ
+j9|>yPb#[ʆ8s3/zYnewUukSL ϲK*ƭ .jXh þ=[MK;K9jJJ19sqh=S@/bw2QxB04N1{ы{ڲk(}Ged] fOM?)1 Oqņ5[$_4~j%4d6c U{%> %xyYlpA+?Jj_\UM8W"&A8ĉ Tf?N7y
+WQARٗ]^47
+t2iOaP/f=҄I-
+Zlf<N߽Deĭn:w򴸚wKӊg. PkQo{"L>pMr|8/ KL~~dAS'WfE@W0ƏD J[/UU 4wf2ۚhF>*R\_POqrF |ۏ=qL!Qo J$XQm6wqa~ߤ,7#Ke}K,93.p\ J
+-' P>méHTE7ERװRt4Ia=H<>+ӑty
+ŗ.:/ 퇗%|%-  dH_*b}L#zo>?|(/b';{#Ӡ+q 1~C'dq8wF1(5hJKk/5Bp|N?B𗡇@?r{%UwYr<"{r4
+!PjlKM<cXYYd'R=a].AWl]+J%UD
+AhpиcC(l ]KJFǓΨY\:gj L=8c sY-d'^uވ#n0rW=ُvrl#;v_wJTX' $@9<<Fy@Oyg %F߈fCM1]xCĐų[MW*ճEd*1?!8ZM+pӮࢬc6؍Ni61[˵AKU€FO5Tӑg?3CePk{-zO!+@8D~ZyWsO+W8Mw\YV s!\E"yF^&MV\Q2af4]p1; ZJװ/"G&_`!4hA֧%H_a|-qc>JCkYѺi$ЧWˌ<?0`V~1[ /ֆZ@.GK344JA>(6\@8_qZwuBV5c~X4;?ά2#&!{#ׯLT%^$<!gr^2J(`\⨙e*_oEܞm0k靏B5ԏK=+ѷ1z66۾&):8G[xr!5{dZ,
+*˛gRZi rޚ'>yl<,
+3/'/2?G%[M] /ڣ' M}~!fp[B{mJ;&\A7\4ں+l|ƀ:ɔ&sLRm h ?9ު
+OȾ }R@4
+V8{mTkP:J &H<m+1^ C
+g@w3{&-c*k!5Jm8qY>JP1u M%
+{w1uY%ΰ{Hl_;Èe*?f_ }*mo7aU_!O¢ <ɕ[*O
+Dλ-P6'RHvw] ${Vc/ؓeВ ᶁGMe$z37$bwo(ewKSypIg;IKzGy tv! d%׀;NL'H1[2e ~3ۖ`$C|yUz,]y}pjÓ&/}hB:O>*!@vX@V_mݨS5^#(qޓ4` $X!wl(=xb8e{Ngc3&LgS8$(>J|$zG>is**´ lB [Uö8)ܷөw'.Z*~sl^.VZzg Ddq~ Īgy`Ŵ H *w 5x]M ܐBBg}&quoj)U~*<an`BdkI5)8nSyG{'HU\HtΣwz;s젂Vk|;5XmcD^Q'.R(t_$nljW;u4`J÷zBxS 8):f"#]0ؐZ/ y{{V
+!ӰhJ}>`w#}ȵot,==8lt"x8.M+u(W^aqvK
+KRŸԜI7}&WOՎZ{Rӭ9ޟtCz _
+ ڝO2Ty
+%'0
+yP} Ƥb}c~'߫4~P9f.D/^HלF㍄#&Ćvh֊Fv7q! TH&w
+%]$
+J4g+J@y;yvWT6K͗X.<!B#'IA[8";š$QudME͈[N g6#Q@nvaE1߀\ ߎ`IȦҀ52E~e0WEwnevHv!qJp\%ߣ)N/>*Kmh*_tqܲ܈ѫ{gd.5eqL?Ne
+;025) &x.$9 Dրv6oA(2 -vGVv$=SFj ~8Z%.
+p:}JsGÉT^ڤ瀰i=EVuΗeŰp H{a<6T0sPNc҅ *8ҫwULAFqax4첻b|<s7xx^UtT;1D/-AO\rf)kzkhq?>u+ CJRd%=MoI֩mf
+TYT(6SDv}?ƕ[Șc,H`ꙤU|#
+BR02
+Uz㷂:uߨg/]#<R6~/>k8xB]͖n|Qi>SՉzA ;=
+Mm^&滛]_7Um+N^CB|PxUT:* wQʱR«h$;DkWb|m-ь6MlNϪi3N>F92=Ix
+;0u]ӽF:#hYy3K!o
+S_FȚJ#;RWx»JX8$=-9#tCc.lR6uPGɗNoh&X^BHsdG0F.A=5 WR ~v|
+
+֟u1ُl`L z!SD$7L.>WH+Hx\
+TIY%$7JC[2M%5?;DDS1B,_>d0=}I(Ĝc#ɍHfl3p!oB. O#do TJ=(v89䮍dLg@̥X) -77}4Ia/B|y'ItY^zR:vUnw@RB)>|Xhձlf$ξu)/:weBB3s䖗i[@*o>%xQ>Z-@BӮbd\@xϟHu>x|nc +4e,akXz Brb9{bg=Um#bqN/Pm %T˿ղ3&TIkb50K&|t)7o,aXiH1$Ci Q#hwouf-î<!Ѩ}\m }lMAxq}}L.ҝ1;NP)1B=ZW'SxJjR8vᝄ* C <ʱ3`ݲZGETf*25>'$s/Y?t–^;QjikvvHbyQAVͳE^!p; J7/7l1r/U^N"QňC:)IJ[@z)+[;c_TFx/)d{>0+w9Qt%kH0U:4n
+Em;
+huudu==V*3Q ~֌A7&@e?Ӕښ1mYF8"!]fC{&eُcj4Z_%IOÓؗ"~ ١6&]\)KG?opɾsw'YdٷV-7# lI7$}??>1"ʢQ#s۬2~Kߜ><zI݊v%r"!TzYj W6 x0 dχ<C7lb1wl[58\ÆJm׭"c%w;Ϲ).l2-c>".a^:QlJĄo<AWXU
+Iz7K.lHqw(#ow|xQ}5.$ZK<C<U-1$3W5zĈ>  O?-5Ę&$'7Æ]U8iґT)|_Y7
+{چF'T7N.ƧIev>D5 X
+b Ac08%F"Ok;yB::ȋCz%?ٯ/2-'wni[[J}SlOy(Zb@kkma$9\R(9xҍ| IHylA)E@iObo^Di_LgI9O=QޭU ]Gԅ #dM)8D,uJM@&Y
+_gUY!s504k7ZG ڏ3U`,(k*ΝJEiy[*VXSyyhsM1;<NKoTόy-%<>: #Q]wUK-%G l oqFTM%wƮ3+ QYu̷UKH}9;_ȵ tIrW~X< 9Va*@fb|`lg@` ۪
+Tz@_wg^~-;e6aD}>P~;_ߍ#v* R݅[PnbyMg
+rZ,y@
+zlt=1տv, )雒XMӒ;KZiR+|B {`-ktVdH$dwg ;{>p,>3.)敖Q.ă,lTF,Vai34\ R_ZB\?G4FJETL|x +
+V}8gn򞷃'x-j,);xP mԇhSJ3Ȱ8QU=Lym0 {Z\)D# TP뻾\֦A{pѪk@x׮+dUK .+W<nEmB> 9F|8
+87h:
+ǹFZzd+nwh47=5T?I|=3ux h$Ou)(7r=Y8|S,4t*V_4duh<~yҠ_ i8{!ެj*(B\CcuƄRPTu惵X7
+s"Ls9񦺋2ˈτ#;sp:ZrK e:w(ĵ
+Atޥ W>ÿwٖ 4}eV[?O|C
+Tރwhss4OQ Nr\C`9V[9`'P~zzj2Uԉ$uXH^U_+\Z2*!H[%԰ȉkmEmU{J<o] z͠
+s\)^h/=1to pRtB3vXD&4ڎuT|\)] N kk=LnQ^=)tuHRȩRH%g9PF+(Q*yɇV={w{ #Z-*"r8~,Y+r|c Q+N@0`GFc0ʺ%;@FԯZŞ6G #¥׍}* KӗI]-n=EhkaxE*
+PY^^#
+(<Teyц*<qk9Yk#$iz^*oFXxw-
+*o7|lGZpkĢÒVLB}ү gncԼ(3sdܹ<HFMppC&Q;_A0Yj45P3>4no3lzb#@Rk8bjffE'}98)nOS &CmN o^>9/yrѽ'G08 EZUڂY )|L^6߁Ο
+ߞ?0Sw"dB>~ \<X-F2BH!
+^C&w~P">M{PqB}+B?f4kfK7̖EG(š*f^
+yY_@L2 6Jn0xi416JvbP'cixt̡i[~=Bi]j ͟?:/4ـ<7['o}DF$4AS>,WݑtQ't%H nijX-ܢQNg6x%V^HC2| _PH?<X7j3ڂ;ћ~-ō=]kԸ kUjGT3Kimq)4uR HsnŎ@2ͯ'渙J3:.>pS8j(߉U\1XQݺ#'-yjR! b8/eWO>h)6Ҁf b$xRӽ
+)/}a(VGDVӬM,M9ҙۉA^AX+i[9Fm?jot@#79#x$syn<rc)v
+o!F "<%<NRJOV@9_2`8KD/,_Z*lSSzx֪owzKW8uJ
+JCso f]|4Đ1*/S6)`pzWEZ9(??nf0ٷ zEwY4%CkF٪G+7ebiѦG|J3d3^ɹX͆ fF0'̵T͇pbY}}/q+&]񪳭}ֹz$vM*H{
+%(Jʊvs3t<j mzqx
+0E(vMGZs(  |0O{dU # iVl' JlVK*m8VfD? CZx'!; F\ns $ x'*G$Lc~Fl8Pʹ) l[U"Vq
+XnƳrp
+_pm\;b'5 FNg Ϥ  O<_~JPDhR \yG$)E2M@>W&_n0@s~*T+l`yL~ĖV,1u:D|
+y 6G*<yڛbemO ǹv@{1|[A hF8k(-y&bfk94 u/xmU [&˄u)v_MAj5}V"Uw4Sr ,wHU̟»0&B;"JNT[/
+SF(UACuQdXu~]G-P"
+8' .XW˙QJ"w^ t톽+TWnF@[Q4k?Jkg
+c[ƘHצ#u8hS4[7JgޤdmmXC;^Ysgj LjVQ?C2@p6~f
+N l`-{5+DHu)̷rg)23Qwgca,TǏZ$Բ)zk,Zn^$ fos(7LaD Z.sg\y n?Ow 2Be/p/$1J:սtC1zmյ.׵Zm??IZ)W{Lmda}g4-ԝ+(
+u5i[f+89W!Cv,#h;[
+!;Bh4 [ |6
+<t jSLk,N;3U *h91H]"+Ђbh@*p*㤐&ލmLؽaF8n&^q*X©-Rw/O-ʫSHːٸ^7Z'!:|lj6O<<;z}.tE%DtE?SFyL7LE0ZϧxIyBiːR^ yho
+h
+x%]ZyZӠً )ti̡f{ӆ r@&]vHAmqxae9": +] Ng5ؖ G+\ "eXFN .Ea zNt51^A4Ԉε
+߸ fUZ/zDa" !Rg};vd{:c&
+
+[8ۣʸ[,aYߎ!Ȳf uNN᮵bpsG!QQin&MQT;}-*=BxIo !/]hz@3$\}4|uøY)B]OV_:# xiquu:0b^4h3q 1e*_j8f(⑅3QwBU}~5K1'[b4-k l%Q#Rr:=b:FrGbݱ~r ̼7_V $fpЃ%B_cm(+d'I:*&ܱrygIù{<-k6TRVW, K7}k ܂ alZ1Y<@tܷpjs[+glyiTOmA)07@m _ߛ>P:;ǜx-TuOeDR6^”/XIٰ1ofMdE̔\4F{ieDz|ZGvaˋ^\YŎE
+]]ӏ$@~j8 Ulp?UOІQ4pd6ӱZu+)r?~aU魦sPHNǢ x$"
+&hi)| 'qܨHܢZthVڹ;5c`" %sML' o"m_ͥ
+TH'F_smRQWo
+֡ "5^z*8ABM.zX~^.@D=\cpN53|T^t Ȓe_#3RyxoQNR+5
+8Hb;>1d7ػ'kSi V^j+w{wcw߭wAxBv2sݯ:۝Yy<&)},7K..&WaݑR4KO(r~xdCr[覿*
+#z
+(E,s?cc[TVJ$'P0p1#ݷz<i8hB5 ܝ*-LZ)Z57jK[.:V#+vY k.֓r wj xR񢛺/Ur=sl%lBx呵
+ae-|cC bdv47 %)I$w= 3ďh=NDJÕ!^Zd^0 IUQnE<^NZJꨤ$M 3u1oN>ExQurxtcMs+6 RהѢn$
+>; .w[Vs8dY_`5Q&zcdǺ%diDLE6
+R:xQ7 œ;'sF~?/ ,+1m 4P}w-߰y \=u2Di;Fdo)Sna&DZſv?a }\
+I\_Ŵ/'eJ ':8m]$TaDw'|<(/>cڹ]oZIӨzcQ{=Pfc^?#1bWI>UJr)yUn:ѸN*9a#ۤAc90j0L^K:5ݣ
+LѹƟm^/ғg
+ u
endstream
endobj
-904 0 obj
+916 0 obj
<<
/Type /FontDescriptor
-/FontName /RFYSDO+LMRoman12-Regular
+/FontName /LJUZZO+LMRoman12-Regular
/Flags 4
/FontBBox [-422 -280 1394 1127]
/Ascent 689
@@ -6143,118 +6280,125 @@ endobj
/ItalicAngle 0
/StemV 65
/XHeight 431
-/CharSet (/A/J/P/a/comma/d/e/l/n/o/one/r/s/six/three/two/u/w/y/zero)
-/FontFile 903 0 R
+/CharSet (/A/J/P/a/comma/d/e/four/l/n/o/r/s/three/two/u/w/y/zero)
+/FontFile 915 0 R
>>
endobj
-905 0 obj
+917 0 obj
<<
/Length1 2002
-/Length2 24707
+/Length2 24750
/Length3 0
-/Length 25884
+/Length 25969
/Filter /FlateDecode
>>
stream
-xڴeT\۶5JpwC]
-][@p]Kp.}9}Zժ>1Ɯ*r%Uza3 PdBW3sҫ
-jrgO/z=_
-s+{3?7su`TrtJ2
-2
-|J 'I^rr4NiGܴ&VIɀ\Q H%u`2QDti :yшۏM;V]lyV 8R] V21 0B|f/;+ɷs%P^Tat!u6,
-kroo?j_Cӊg7J
-ϥx z XtvYoJqC.)
-6lJC:*kX"^A;s$Qf|Rƈw!^ȫMX5ݫ#؊LmN6bmQ5~d
-dz)t$PpBT2\g:̞͈
-}\iOsom{ a)sfQwKF5CP1Xw\IkdʯW\u)")>YTԥyN/;;6E9=.K^eQM<^JEfwMaИKPx#CdPr`wΨ
- 8d X 嚚!BĮA汊i*녻.^ S]:ZgܟyM.Vqmb;tCY2>X3vgX5吜^;esk'Rj41Fpk,Lc8
-*B{.;۷M`Tqc
-QQL<TCr[eӠѹ)\#Na m Ror~zlgU,"@kD34^\Ulw9@^ŕ%疄"YIB 1 Oֶ
-e^`0y8S@hwз,!^N}){ѯQ-y t&eۀ#ҵl뽙3utUiXf(>zGY"IV'
-DfWY}j|̈`w^L["v% C?VK'Y׃a7Lfm
-oRRhζݙZ G>˙Ǧ[Ų[}iǡ- 딮OhA3̱:IϯSl|kBzLU~]"i:\gJY}?sWbm
-x1%Y#NK]ΕԆ]9p:]`<2p˳Lqcɍ!Ķ:`IےOMdgv$TIr#q?noIu̪LsIHi6i㐇[i٢ձ-i^שzF0Vz|ɾA6LUa y }MC7-r}@Im(KD#
-Y(xwscWeT(F]2T}!#glSd^ZLtFMP8q?6o6#VbP~[f⳯L[W0] -
-J}۰sεIket͏9լX.q#%K*(iG<zchVݗWvl E*&!H=U${Hr2#>X<tޟ(R!('8t3Wk 3:@ˑY_sIq޷"I%һS{.!Ej+¯3_W?eek' Y</4-emru |D0ˁFFD8C:rl=\ mqŻt&(5 /X}88i[j<m[><olOe ScZ'&۽|
-DrNaxWM+ߏOÄE-!woW"ųLA!/d¦{6)#!-.>5^OAEA*aۆ؁,wj&*X)2<?+m:if:MđFopl}h9!ΏbƲpȓB¢JjoT Z( A?K lSf9E[ӭ 1t+KV~rZ(bgqQL0cuS7(vUb=1S_YAʘn;HO q|9峴
-O=ivF (
-J.Jk\2FO[W0AQfW#e5~$lp!z1e_sSk;- `88x>t 3H2>|
-Qyݫn;G%e=x$ a<89< SWNbБ$ lY->`dH1j8K3$TNV9dwZܾ.֤QڻGq
-3[%:Eⶔ rv9ůs¯2 0)IY[|0CiA{}锖WT4{ =}D _usY~MQ/oZyV:J=Pf$KPD&X$v@F6l-%p&WxuB3֗U r)r3zI(H}ecGW-jf檡#Ƴ0&9Ƴ"׹1}oԷ
-S\r'Oc;3N R(Z3~5g0p1ÓQj 0U=* 22~}Q
-8pq f<ܾ5!SroAZI|%Q~ 㤄^sEMiYM!P%w&
-T$
-=JE6]T̮̂ǁuƱYD%.yzKwڀ{h¹zT;]Îʭz
-/[|SP vpMD$$•
-;Pq;&}/ڥ`.cߡ4++|
-y&Ke _G4,2v jϙO
-n.iȡ^tȢtCDSŤݮ[bBz670 ݝ /g'wTEIaQ*ROkgC?3[M'+>94T-,n|NY`P3nYsS
-]뵺IoɚBdʁd̛|_ [ϐyjSīy.ws !$pP涡eLJѤ,Mx
-mLbsqTh3CEÈd͍,žogB%hlŬ
-l
-nv6o# }N9{dћ p.,NV j+MR'P5Eb%zX5Uybh/x~#lf"s}!I4
-)VUhׯ#zRxE^<Dypmx'-)ca1gԗJ8]kDUǑFQCUhꌞǖVA}f];Q\nq&ˬ77 )`2ۜӋ0ߐU u :I4bp Qj34ݻoݔfْlJ?HrQGT;Äex^5W)K8 BV_z%*z!zP<X&ݓZ-gv lZ{IsPC<PJNuhMf*& cNp~ E
-E'#x1uMCwx`q|%Ug=-2N@h^<lD
-ix9!!a;/ACZk{@EeoA*;..+>QZ{%-~a\,TOΏWO5x,WU3"`6G{$t/&<J3ɧT `2NPff~G:b~yY~V(1v1-EJAM!)* EB0/-p7
-6%$ NGn[5ʮQP^/]=ҥ<7TXtfk糡n7NR.$R5%r$Nk%X{Ě.ԧ~ lC8[6 S$:ke@|~筏t H^vhIdVE 'lߵxd0ʭ
-Od=_1W.}l Y.Ccfa"6g<l8Ϩv}( J+6>a]0S<V+ÐN
-$Lbڽҳsk\y2*.5E<L;Wi_)vIqu7h}5|ûfT6MajH2Ve$WW`MX-0;k| ~;3{Aєڎh6@avhƴ)b1 
-NnV Nc(` F9yn!#ߵ!!εk{~:OWs%59fBAe2Cf1ԼFBBk#,X ]a^U}ͲN 
-ӯA$%
-5#&Sʑ`՚CԕI[zգP$*hNc%
-&g OTe>z!5]Ԓ ˨ 3Vڔx_[oS ?YU!odp'G 1a֟sV5Z1$. O$>40hecQ3<c\=,ZazKjv:c@g<J3 m0S
-rq9 R~ rczZO_TPsv-Ҵ2~BL&fipn2W>-`DRJqҰ.ev([kHMXȉ(bydK'2 z9CڹB>g=11skjkOI+uW *_U`Ry/Aۖx\xF2|#Y:gfA&D;r >l5R^XĂQ0bb]cYOYBD=% G Oi0PVJK<V|>f+ާ.pff"?'8$In'z
-1@COJlbߙ ;tga*$i<jEgHETOl<6ēM?l'h전O汛:ڳ$InCGBNB  "ѱGB_"ְqo_YsɺmZ)ܕ.HI4;CܦsmGW>g$̥jmO4XuU]~;d>`ELAI趻s؏ӊn%4<mOFC0AmriqCGAH-Xϧam[oiuWm9h?>KpJ~w86WկQـl/v)JcQ/Bɂ=NJc[g]3cߺŒ 9=$7g^r_2>\\eQZG\"9PF
-du':7ڛfT!p)XN
-2Lgχv GVu-@
-oC t)?$dr(N*ieW
-n$/\Uviv9sn۹ §>gb
-x7`j4:Ec<kYs80? _=I1 ߝ;~riQ$wGB#?̚UU=Vhn&zc =Ƈ4D6V^'KG ۫#ZC8$RgܴPv;7'ؗU=U'UC/.JY)SN<AzsSJݓRLGi@VdEZC4tAs@ǑlHXbgK!AypŠ^\U\ipW e3Ajc6eBIW=Ql{tKo.8׵9uTck gzH4Ǐ(>] kxp۶ ۺ[l j : HkX] ԡ@r?Ó[BdoWl$B@%fskHg N_60)yODWF*1e<gv
-X;q@~Mwiw/E=%8Z$=Cڼ.#{"7}ƒRS 1Y
-Y, EX73K dez/]2Tngdvȧq
-#'ڑ
-:"C)hC̑K1Li/>`+2uw/P@8 nvq Zҍ/7Qx۫9T$l3fhx̰w )SqqVR8L][U B@ t0]hZ1tKS$_xLL(aXE?.m?}8a +ΝվmOPYΏ=Lm̚_قI%^d!9[S/Z/?p7Onq,e15ʆ=,Ƕu>;eC祔UR6F<\X~]CC4J4`x{nSTၻTSx2&EK!m=}<7VuQ 13nG1-LMܔ'\TtHMdyZ l✓I=EBmKl2\Ķ5ĩ19Mn %g*?d"zݶ<FRQFs@'q@KJ2 ZLExN"%r 5gتn0FBNm:Fs71
-Nmٶ]m۶5ٮ6v6&Ovv}c
-0stp'~s Ђki="̧ tq0-7B/DA͆9~*l,PD2M)V(I٘(HqvmU)9;}(|Z
-zZ~JMGIr4.8 >H6-BɫB 5~\h6OpjqA5-њ(Qց`mra_Ք:(AKh</.&uĜ )r!:-e ?"9D1B˳Iwt)u;tCݙ ]9Z]53K<є4g*PD KI"{odsnptO
-A7zπ֎
-tת TJFJue7<8ZrFy QH~&jƊSH;cPR:&ջ߼ Dv
-lf%t>e6A&ZۗP 2IO ~a!zȺj3R0}`"Ȭl."9` ZF+QYg-jLAkuy?=u}1]qq`dr+hRK`9#5͋g^=,i҅Y4ίRfNکB5|O>y1<Sgr[  S7ohAq;D݇ToH"k,]:UwO1K/bCj She&
-~,
-\
-ڼjYthA\`ѱB@5N' r\75mXHXwē>u/g6q v{
-1NϽ72+( T,0_J'%WnƿD`ܲZ+!gYneIy/(Gx=&|yYx/C[\Ia'[NxhSB+r1GeU& {8x ѩ Nέ_|$m[mqMI8F*i4uEcu+5K6$լX  
-x% kN`8)Lyo%0̶19dG 5#夺VQL*O
-C@6nG~
-%%9Qѭ4={7gfڟk r_S˜,-$
-tj H:-Q@Vs%Yo"d(#Vc< 1.9ux0rƐ>mȍ7 ib +vp#IttXn
-RV0s
-9*K.n'fxYS
-GP DW8Z,)k>kTK% C*-h#d%U ֺz|iφyizԧ?Ŀz
-EY nyZ' |]ǀ-] M}9$DO NɲGbZG-i߿4*6ucv/lUn|S\E6Xz3O8pGZb̗?T lu'hOP#cdUqhaȩ Ç]PP;QO*[ :çb gԿ kk|<wϞ)6{5%5S# SAlG+6jl{:ܤ:(并U\IV߼ʼn)AĦG{#&O) q€2vç
-SŮD2 a6KG#\<&CB#f'`7J|Z᫅BhgD 텳'X3"H&4ߺ=o6A;2&U4=jqsGVb7~<6>1#oΛ KU9-s5DdC
-
-gB=K%Iuǂ!!)NYo{I6P \1qC, `)u1+opu4O!ͮ,1f þ-QTAg έEV'gQOh@J_(0 ijP/YG)#~=شgUe5lf'*tzDRP5UGWƓPKQf}ߕ|0NɾZ0?8ca^$K
-0r9[op
-SZ-4 -9$ZfMs>E,uCtN^rҟե[HCfh̅V`
-4H^:ZՕ=bN[oJ=~C (HT, t7̠qPVTDZG #x|Uܠ2Sv}>Jo:WL%Uϥ0 T~Ch-;43&a, g% b bcKm#h&*=
-E
-.AEjI , Q)
- GS cg, @'~A2')0TBMHsIwp9oNUȌ$Ĥ]XCk֨=k)!^_w3,0r#TƹJ=\c]Ƨc*v!j Im縨^2yλ(-rOH)!:8zE_N1 Mu1f# Ch7>$}UɄi0h ]`~gQ >R Z/bHy2U ~߾ 
-qj'OVUǟiʑhaʡNќ\%9] {+^Z/mSz=3$v/o5Zz'Tچj'j pC6FkD7Oa4`ٿVp.Pڒ(&rTޟ\
-T5\`{u&4d4Tc k}mtD¹[k6M.)'pk-Fs&4rw\kQ 5"+@g}~9B/ ,5Fw||ˍ7&;(ɋ!2rjR ׿4&vVd$ ̾0ꢶ26{Z ]&R69/,TfN6)zBx28P1Sd53Q{/xρOQJIBDX|74m뛀F+5feMŵ`#:-W6ί?'r׾anHVGI2+DzxcY!hM pSjv1<EVwuMbyLJm>d v]]/t<OFvzOP],^j9 S÷<9oM,pX#O#m%fF\3$ݳ)dn"TvNae}鐡iw>XM8'{hJTrqJ~t Gd6d*jWKȸ$O2Aqۿ C(H%%|8)zj򗵊"FsFօ+vٳd^^zׇ&`x%C0Cls0g
-I;|?-Y*@jV@o4X\.ZEy%/,-c|nvCf$=o_7l!i?q<i(˅)l` 6r~G? 'ld-Ƶr7,qs^DSsVNȑos# -{!e >Ꜿ5șju T=i 쌙0MU jݕ5iE}l8p>L6}T>"kM($ur&~!/Xk?$G"CcrL]H|hbDIwsљ{2[P&|uA{ިXA<λz@P&qdp\]0nrj2Ze`s;IC#^B]XQ%%#T+dT[Dzqn<ۈGWqӃX(A`"̎R@:ࢃHʭ_!-{:ajO8lPbEG48RbMO1ާS̓amqgQwT. o "_s|ND3e`. >%ɒU KՔI>; '`'RZܷ{ 3gA'n5rdE ]ė4S3b3Bݽ^ZB9Ɲ7;1.W:a_2f9
-vvX%K YAkS|sU<i1 ".\ѻj`j060V$ܷ*eip^:5h]DГ6k@ˮ W25=S~U:SS/\4 [v̾c89?TbƵW|XKtCئkY{Xc<َ~闱ɇ<{&4RFU*;^O_Z;f*/^Ic9|{vG.gX=#xtαTGsY;|"wn7#;1]|CŴkx`_6)y :@B Xو˦-009OwWbN(:y%ZoTQd#Ū: 9k6,#āVzhy:xy)Ϭ@G
-<T<`S(d2|Jׇ٢1It>tOiVChaKVtsz"\ń;HC"e
-V1^
-ta8 y,Eta?%̪G߆_?$ND`ѝs ^,ޕ-?v<FkTL{o!s')%v~wKT^]g-eaD ZTM63.2Μv:y5.<z; vZrT6q?uvGv @ʀ| ~"B=
-HT ّ8鳥v+RLC\c5 'wXx":R]du8㓟h.chm'5W]9zg[ ?Вgj'>٣gsX
+xڴuT۶>Lqw+E;www {Bq/ZܽCqwwy>kιVƛ+ ;gzf&2Ȏ^hbc`a`bb''q9[D<
+bg^Ng t kisq}/ӻ_ '
+tkX
+Zx6) BV ߺPVEz_Z^bm%x 05- <u?v֩rVFtw@4|7U/}u݇
+G%wv-I}~ªOe~LS&w׹+|VH֔k?wNUzyQ3+?'}bUcǜfh{MrvVwеyZ
+u>+;ζ̚Ӗ:HsWR
+D" ^mX^__g3t:AMVߐİcyX. s+ 4XtDi p=b6l9t{J9
+(ntوK"B+` X[p̜MHzpkJaǡ#:_Mo6&n連lTDpM*D Vh?*وOb{4JS fAlƆ)f=*{SI2 $"-z\ ٚwhK=D >4:EObAg8'.n!X[UiXZ=(G=E^1Lp6-FC ȢJ`i*Fm/5 LJݧحvg,(*pt6gV,(*ގ}1|4 cAsPlhV$Y:? o+OSD7)!GZx פt4gÝq-Qkx%%5n2[^bbKF
+ %im2FU?hM/l#;Y';ܮD% ;r1S<!ipx$֏psrm kĒ
+V@)eD3.H<mg* vg
+jЭG粸# -Y`e,~&A6<2zQwRt# 85U+n kE,^1?hkkdBq#Xs}ӚIdW}̔7,l EI_R>? >cP˯&dnFTV;
+;<8L^gͅU FP`?Ps$ܲ(^jr$ M%?+͠v,͡v|i]mP3-&⋢yai]c(4&v1
+oDJZ.vS*6ws6V x \Γ"vw62`ve*SOw4G" Qb~nv 25}$=W"yj^3_§8"%S}8!!%
+7㫲fڗR2(z@U?P`;u _{aҴ}5Jk^+Pp6אDfc얙L|SlvulriBUs4S_8Rs;(~W>(4Z *'B#
+L`?wSQnF5ʿR;{nƷ$FGQ &ayeH 1?/u)imB2v RŽ Ng/"`J[r͒3=qhv2Ä`^S*],/Rk0gƽw?ю tU~v
+T1IsV9}4_ ڔyFv${K49RJO\H6b I eE;abj̙;j3ZT2Yig.{|GgJmh hdF+f/R~"/(UL,iPY] yM
+p}/LyGA]F0?Hq&E*!g>.w=l4w0+DɌѲ=-AwPvy`B3RT.@6V5B|\6 4%
+U˖W_QG=Ul^k$K 7fV F6w0
+hbM.+d돜ޯozX*ŏ~N&Am 3ZuoXuM^: +b,1Kq@ꡬLgwO'j)Xtr1LjhCǟ aS!e1r/ZAFKf=8K59]mH݅}jy4FuC5*2t3l9VV4GG$U6'Vf8|gr;GLcR(cW5 ׀$3
+t > <lH11
+
+nceWq'8ږDKg6 N~Etžq9p{=P[ǷcLs&-acP9F&IUژ7Lؙcݘg\҂ޱ
+nw)F<WTԱ7>?ggJ@C{/P{S<*ߌTA}7gqs|X-Я[VOa07|c5-*A \d:|\iz9Z;#u3Â@Ak(/O/Bpcr4L bZ$->;{)p1P/VE&NA,ZYHhZ>wg<<l˳ Hre &ĴcJڐee+'xUJp#r~t{0۔lQ?t̯;"вE_ӼQ1?tc.w{~\<Y-yz0&IF ܤA 7-'0xdcW5P4_^NpV{p]TUGIJY$fWC20 5pC@ҴpXAIl}yJ|udpHt HN MX
+51^0SCV4 8]kWo
+QOvoƸr?-QE!L"q"1Cxt4")YZ;`BA I ['] SrwEJt F X v7$fnr*IbK(jj4HsZQCXɰJ}ap E}_rA&KE\_s.ApC
+M"_pXf&";}Fv9";0cgt(Ov
+l&3v)3hD SؔzOI8 R~٭j=G!a$Otx}qξ=-Q
+M1N36vy`,S{R}C`)ŭnl{?,Qk"F2Zڰ p|ZIOˉ7Oƥm
+0h)w"uD6*p9@f$6^R2m
+TŌw/T9XP3txz
+b .'IrȆWjh
+Kz茭V/9ӁW'ywQ.X79&7\}n5燞.'wt2 r6OmO1>Iht|KQE^~U)_(^+ÞH " h w~(ȷag.I*ͥ3 j9,jѼFdċxcוW>m~6 4V*wхz&^?1H<_ |cO>$lY(N7=m^y QMz+̥]%KpS^,ԉ:dƜC¯_D8!yʽR6\@3ޘb̓C-F2z^<&xcN;
+Ѩ%Lw|s |:fj{`so&7{+^0=*])yjl^w\ vHȿq=?F&\^5UL
+[%jE+/CqQ
+]{.2
+rv'W{H#;BH6H΋z4[Io@M 2Lu0Lk#N]9vS݅$LtIysh78s!ɐAdJ"v%=%<<UݟMʱIS;6_{PAuAܫGՓUH0= \l[OXa O}չj.. ] NT5?3#6@"K ah_Car?K϶W
+q<p<6lPhYc0~XYlЭKt>X | Fpǹ^RĨh٧ΕM:&nb9jH3H=pZo|c(2GVEq ˩<yot u^Nf\nSW
+~,>/{?$ 1|cE'x'x>*㭎"aT㰏݇1"RC3KWLeuGm$877 6]Pq' Zfhg Y־*8]joMuT}D/@nܿ\q6CWCX{f) >^ Qoh7l M1 4Дe, Y[f{b, [q[OkYH4o!1J?si&#c/[Rfm{['#/ôېّv
+z=:ưGv]rr*P97XJ23T+Zv~V}KcԢ@wno(M ;o-T㳵 ~3cRqKN2FLR,j/l ͂U-.d@Vn;r$H '. `<ݜWoi5E6Kyw?;-.(Z F;U'TO_o}
+Cj^7~W(*
+<7E>^scbvQf(AaP['3!{I$|M+FV9f^}1z
+$ӢL فۏF?t]_K}Wmnsb{S|/$IѠo,9Q \PI\Z##h`^4=}3Yn#ۆZ^z_"Yr.͍sӺw#/vv& qVIJLjVu$*dᅈVISmt~[^V2Ʉ5i[
+[6IjkS=!tOpvTbZ;
+ϱÁ;|6j<߀&Z24*IM7
+3wE 3~w_pQ]ge CФ-yl lcθ8@ʴ!"YS!!_R"79UZYy_QX[ugf-ޡg]ntIYk /}
+I(ϖe"Izȏ_xy>Y1[PF;5b*0+rVO%HRruSR bjuo8[aq{yYUk |L$OL'G;ߏlcV7̼zCV"OR%3lW# 1>յ_.}PQcUqq--,xGm@YrgLh6#A=J|wL!7=DR啅/$*V:<<9cKTpӷ߾ Ol5#fE':A&Wl ͢XYe>VB=C\1fIQd QD;p9=nuj~u (:BiGEiv[sݳe,]t^<dXlU`PXmfs p
+*iZNÖ[
+698N
+#5ӆ8n<D{sx.!V
+Ux=3 Đkw)N12Q[|
+4 wk
+oD?
+%6; mXOk4J/e?]Ϯ^n1QS0` M)pzB@fz=o+h{+/vZn\=_"5!X }KPT7MTCŴ
+nz)8"ed΋)V74WP괖ɚ0kio@іܜ/3X~I5ZF*1 /0b~/P""#e]Ei qg)PV
+ <<^&KNgpffB~G8Dq.'Z2.}D>~t-fy3X԰tq<  %jBSB'=6kƟ64yPBs8m7 {!BÒT B8sfS!/D8ooYQj̒dXӹ$i02F4lp풳ΊK މeǃQT:Gɉ*x.vЇ)AGq@F<XW-u\lѢlJ6D`kuCIwYTPEb\CjjgZ#|Y"
+\Z1<0/Ɋ,)P7ug
+LDG
+Vnk>}V
+.d/mP;F*
+|K+*:0M{ t*`qVMJhjՃ]i4lAxR/>io8N-n4UhU a,4a<B=(jfGr*Q$yY'S+ %Qȱ*;
+!L
+Gy̿TJi9igPn&#] ldRw4)L`ծ?5jHlOzF2B#ڶK
+mnQYyx[]!hz[]
+:p߶f_y
+rzg9#$~Zݙf*Aj  ܍":;2=i,Lb:piU*@@USvc 9{ݙ[m~d]uQ#ACZAR9!,߈ʢY]l !fxL G%TO֖@9Dmo'νct1B¡t-&cY`(M)~%\dw߸EOݦ<- a4j<|U$ZQ@nzNT5
+Qwhռy7j_q:v SM;!kCboҤ> Չy=oqA4f
+]f.%]D х|
+3t>%(NRJmu#haNF/eL@H%,lKFh矽M0veigM]C o7@^pv㛴+MRFMsNk`b.~%;fƕU(ܾɒ+Eu!
+ u~.og&YKGs]93}x֖ S;:M&_1Pn>
+-LjFf7h
+g=ŝY/DO–+:JK'~;XAg꬚X 4Z܇˦3D ̵ُeQջ۾la-$7nj|6j+t6R3BJjqŋCk*w ?%"3p#(YZk 8<en0FvDK`.3M\K<(ʉ!*q}!7Z"Wβ3rGf t0PV˖[YrvRa@v~W7&8 V㾇9\K^N􀘊}_b]kyFPDbRf勛d`B
+zA+%]B~]"5{9h̡Fg bU-=+ 4GWT^>6aHr2KBfI885_H/cLŚfط<SY|ppG=`C{NՂ\bhd*pYB?wt@oGb/HR>^0D(X8sCIGr0e{Чr\R94L,qhВC+fl'_Fj_Krv<Gjɒ!αsP`תMF9񡢏Bq'#O#ݟ;YQW,w(;Y9¦ )}
+%/@ c G*kcU@Yj:$EF֐N4Xu֩V[af2Y(!L*ˆ /peo1x2
+M`v<ϙ0hCzA U{*뭁jf2
+z7oFJ :z
+?DtnZ(o֒2ҷ`Vi'5\;
+2qRE;^S˞ _xcJt+LMc lhݒPOjan3PVy@E_a6Ӏc*tҕ
+ |fxX}$\Cwf[:jZjMHԇ=Q=k9,n`ioeyi<PSV)r[S@}x`"v7M))û'VJ>M{G6'-?<x~ی'Re`cDI2짚.ࡣmwX/R` ,iiV=\@TbۘDŽ5(Z$hڼjoiԆS.CuR
+GЎaܜg;:|m#PU,W)1uQΆvedH gS,e-aΏL 2o @׫eO<$鼖t5:!3`|,`ӫGɭ4ZN
+c|uRSijU "Lѐ0 eA#V<]n/ܯ.X)+B7UD'bA3vQOl UǺ2jI\(^0~Y&T4&p
+W>F5 2|6`ROX_6#T
+/݉@恊9fBD ;٩
+v2HK'W&MaSdf44XXL7MJza8X,Mzd
+~u%Yl|U G'͙}t)Ui V!^R-2w8(_c⶜弜{yP 0FX7RC&_`Y˔IuX2.3DR塆2W=2:҂EV*Zܝ8?)6/ k5Ń^(+H
+(&ӮR)}{-{7QNwϴ(`P@tc.8IC`~iYiY' J(Ѥ0!fNW8^x.۩~D~0_=4Q[{~ \ \&;?ıs D"߳'. f<…g&uQׁYg.nW3H(wIjY,1촦`H+blb3)#B*Kx1+aK}~)&*%A:/o
+g1-}
+#tb~+PVbbV{VF.5=Sb4[#;-}M=c'5Qt_3r>:%x6>x >kC #Åb^pd?wJ&U, ͸
+۫+|GnHUp]tu a$g1Ӡ>N9^'FpƕF;d7w+ ;]L
+N,V+MI;yzYjbwcctγ{cCD X8W.HpLBrیM
+/lm1Q?J~ ЇY?xNA^5KW`l:AzP}
+HI5cE/FyYUcyg;ΩH+4ɀXQ`2X7d{T>VhӤ
+m;q@*=
+_!%*xxfJ'߃!eOJ`Xc}):Jͻ
+2dWMJQcߎD!$winD-QPCNǑ+"͗u(\fOAT{OJk5}vNlKԩjn [n%+܎:0rMo0J+iAaA]oo@٦ $re }qj3܉zWm5׮^7֣I6c
+:_T+ƺqskiw]łXbRvyHcWmx А?@MlIHxݨ>=}`Ebqݘ%=C9l ^_Җ,oꐴݎ=L=Fq5#{7Ya%:_b3IGj!QNE,?**G|u +![ۈηF?j؋i7fAp;&vY1"~q訨j^p?i~ @0~DxB@ UD?L kйQ\U(6ǖ1L\
+n" ST.,=9,'yð
+j
+}LjNt[I`9ܬmz3 ggR>RC.]l&UR%GU"UՒ/L.
+讬j ZjFQwIp1,jUA-w܌sjYjE^ovQ4j^ְ5Cd^{=gy2|0P(NxN䄹oqV5rl'I P[ZJJXso؎12A $q[gB$ "Ynt.\L]ys2]Qi;V&Z+Lqp"F7":"T^SZ re'-+f "8)T zQ0-@7yR14
+K ?Ek8*$3`_ 8 W|DFvSGP;妫/PG4Jީo2o->w$GѡwLNqW!oܶΆ}dBP MqS+D,(Iul]x0vz%3 f ė0a6otq㵹1ySd{5nҞlu 4\JsIt)JX/dgUSpPŗZ7j_?땍}r9 '9OF2^b ZPʼnfG4'O!/<?5/Qw3{ҘW-AGiqGaNR"+ɴD2_;!Baw?c:i,kȏR'+*$;O:eNp'ݡÊN&u
endstream
endobj
-906 0 obj
+918 0 obj
<<
/Type /FontDescriptor
-/FontName /RKOWBS+LMRoman17-Regular
+/FontName /VTXDDS+LMRoman17-Regular
/Flags 4
/FontBBox [-400 -286 1338 1125]
/Ascent 683
@@ -6263,11 +6407,11 @@ endobj
/ItalicAngle 0
/StemV 18
/XHeight 430
-/CharSet (/E/L/T/V/X/a/c/d/e/f/ff/ffi/five/g/h/i/k/l/n/o/one/p/period/r/s/t/w)
-/FontFile 905 0 R
+/CharSet (/E/L/T/V/X/a/c/d/e/f/ff/ffi/five/g/h/i/k/l/n/o/p/period/r/s/t/two/w)
+/FontFile 917 0 R
>>
endobj
-907 0 obj
+919 0 obj
<<
/Length1 1670
/Length2 13459
@@ -6337,7 +6481,7 @@ w$X<<Y6{ti<ʮC~¬9be}dQx HDFdk Exǯ^o|
ֳ%O8"{qa4d<3v-d,& `\ӍaqB{W
endstream
endobj
-908 0 obj
+920 0 obj
<<
/Type /FontDescriptor
/FontName /TXCQKG+LMRoman5-Regular
@@ -6350,10 +6494,10 @@ endobj
/StemV 106
/XHeight 431
/CharSet (/one/plus/zero)
-/FontFile 907 0 R
+/FontFile 919 0 R
>>
endobj
-909 0 obj
+921 0 obj
<<
/Length1 1670
/Length2 15301
@@ -6426,7 +6570,7 @@ t]-7vJtr~b5: eNǁf܁%iĒ3
zFZ+ʸuѺT;kll),Ư9-&E#PhйÄ5&cV,/7^W.\ܾiצBq ?8D(9E{jC 
endstream
endobj
-910 0 obj
+922 0 obj
<<
/Type /FontDescriptor
/FontName /FPXUEH+LMRoman6-Regular
@@ -6439,10 +6583,10 @@ endobj
/StemV 83
/XHeight 431
/CharSet (/one/three/two)
-/FontFile 909 0 R
+/FontFile 921 0 R
>>
endobj
-911 0 obj
+923 0 obj
<<
/Length1 1865
/Length2 21565
@@ -6546,7 +6690,7 @@ XΨ,mԛ~v5XsIqd;+A?-%:d:9} ꧭbU0' DBpJl40
s۟nʎ9pCE%u*SGSg5p=ֲɘO29"qۉEl= [y4?өp3\i&I7CVR F٪TGy+ke>FTѓw t?j.&DiubFi'FC
endstream
endobj
-912 0 obj
+924 0 obj
<<
/Type /FontDescriptor
/FontName /TJMOAY+LMRoman7-Regular
@@ -6559,10 +6703,10 @@ endobj
/StemV 79
/XHeight 431
/CharSet (/A/Theta/d/equal/five/four/one/parenleft/parenright/plus/seven/six/three/two/zero)
-/FontFile 911 0 R
+/FontFile 923 0 R
>>
endobj
-913 0 obj
+925 0 obj
<<
/Length1 2316
/Length2 27612
@@ -6676,7 +6820,7 @@ N|ԗ+n(dݵFֲRr+y)|lHϓfZOYb,eRv;&QEߎC"5*
gE%6g|y{7݊@> U{{خie-4Q}WaDSw.tF.g {Uy)ؼ \$,'aB'Rځs_IE#Xu_U'AnvACzDBGV T6npֽhw~4X37\ oCw.eu!,n;ag⣄ީ@dFUv{/v]k)BF!xa=ީ+<
endstream
endobj
-914 0 obj
+926 0 obj
<<
/Type /FontDescriptor
/FontName /VWFHRW+LMRoman8-Regular
@@ -6689,10 +6833,10 @@ endobj
/StemV 76
/XHeight 431
/CharSet (/A/C/E/I/O/S/T/X/a/b/c/colon/comma/d/e/endash/f/ff/fi/five/four/g/h/hyphen/i/j/k/l/m/n/o/p/parenleft/parenright/period/q/r/s/semicolon/t/u/v/w/x/y)
-/FontFile 913 0 R
+/FontFile 925 0 R
>>
endobj
-915 0 obj
+927 0 obj
<<
/Length1 2113
/Length2 24823
@@ -6802,7 +6946,7 @@ V߭:9WOOpyyݗ.?TLJVr/dSO()
hyp*gI\Qlڴ9۝NA#jg9VsoZUR![MOl
endstream
endobj
-916 0 obj
+928 0 obj
<<
/Type /FontDescriptor
/FontName /MAPAAO+LMRoman9-Regular
@@ -6815,10 +6959,10 @@ endobj
/StemV 90
/XHeight 431
/CharSet (/L/R/a/asterisk/at/b/c/comma/d/e/f/g/hyphen/i/j/k/l/m/n/o/p/parenleft/parenright/period/r/s/t/u/v/w/y)
-/FontFile 915 0 R
+/FontFile 927 0 R
>>
endobj
-917 0 obj
+929 0 obj
<<
/Length1 2190
/Length2 18652
@@ -6904,7 +7048,7 @@ z٘ϔK.zبUA挭^M~F8 Z6n<\<?Ao.tx
e6=r )w/l \:;@G㤛 DsH)/ĵ>SZ?zbUZix(5X6}>Woy1W{;xC+
endstream
endobj
-918 0 obj
+930 0 obj
<<
/Type /FontDescriptor
/FontName /GJLBWR+LMRoman10-Italic
@@ -6917,10 +7061,10 @@ endobj
/StemV 56
/XHeight 431
/CharSet (/A/C/E/N/P/S/T/X/a/b/c/d/e/endash/equal/f/ff/ffi/fi/g/h/hyphen/i/k/l/m/n/o/p/period/q/r/s/t/u/v/w/x/y)
-/FontFile 917 0 R
+/FontFile 929 0 R
>>
endobj
-919 0 obj
+931 0 obj
<<
/Length1 1743
/Length2 10877
@@ -6979,7 +7123,7 @@ C]mu!&2Tr'->n#{(wAT}_2Xk1NcB_#5)Hg y3r _c?
MaV`oҖAR6IP+c4D&}7׌HIacVi`L
endstream
endobj
-920 0 obj
+932 0 obj
<<
/Type /FontDescriptor
/FontName /QYMDQO+LMRoman8-Italic
@@ -6992,10 +7136,10 @@ endobj
/StemV 66
/XHeight 431
/CharSet (/e/h/i/o/r/t/u/w)
-/FontFile 919 0 R
+/FontFile 931 0 R
>>
endobj
-921 0 obj
+933 0 obj
<<
/Length1 1843
/Length2 16027
@@ -7065,7 +7209,7 @@ O1>;r$\ I 44ڒ#
碢*]P:Xc<)(5UITI㎅[mdJU!0&(`5XO K4Cm.`xt6 ,ySM/P77 }
endstream
endobj
-922 0 obj
+934 0 obj
<<
/Type /FontDescriptor
/FontName /PWWUQZ+LMSans10-Regular
@@ -7078,10 +7222,10 @@ endobj
/StemV 78
/XHeight 444
/CharSet (/D/S/T/a/c/e/g/i/k/n/o/plus/r/s/t)
-/FontFile 921 0 R
+/FontFile 933 0 R
>>
endobj
-923 0 obj
+935 0 obj
<<
/Length1 1945
/Length2 3427
@@ -7106,7 +7250,7 @@ c.hV=ʙ&rpºr dw (6ͽ'rM%7UDoZ$C
wGjOGbJWƠϲ>776_L!?.Ւ8#X(5P&=IJ<to,&9"v(w([]ۈ?[G{?Y!։/*7p~Yq$
endstream
endobj
-924 0 obj
+936 0 obj
<<
/Type /FontDescriptor
/FontName /GEOOUZ+LMMathSymbols10-Regular
@@ -7119,10 +7263,10 @@ endobj
/StemV 40
/XHeight 431
/CharSet (/L/arrowdblright/arrowdown/arrowsoutheast/arrowsouthwest/bar/bardbl/circlemultiply/minus/nabla/periodcentered/plusminus)
-/FontFile 923 0 R
+/FontFile 935 0 R
>>
endobj
-925 0 obj
+937 0 obj
<<
/Length1 1706
/Length2 1447
@@ -7148,7 +7292,7 @@ sʨE l+O
Y =P{koQ)k=spBVSO8mz* L35(C>L a;;;ε7u'ϴpaMa)naoy{KSx$9e䧖-jk.::4^E s_k|s0L3~.߻'ymх.Wb|Srx/ol:;Z.ܔdύE(Z;%p:tOz9`GȤIg8yxS8gos:5"(LdV4ZRWǙ]/W󪪜$&h+z`U@ń2 mЮNʱ- R`顩mKȯd{d}@_`VQuNlIhjk}]nBcI7%9υ>n\}'I<Z2֎n{[6s{YԹ&:d]s`O|] ?}tOh}'xt:) `ҹv{C%O>siI@?pa/2}:^쥲ix^ܝ#fycHؼ@RW&ٳláq VWxT{,C'~!GcA3#%{+F6!'ǧ9l~ .uY]dJW˚IqD979y#٥Tz
endstream
endobj
-926 0 obj
+938 0 obj
<<
/Type /FontDescriptor
/FontName /KAPBZZ+LMMathSymbols5-Regular
@@ -7161,10 +7305,10 @@ endobj
/StemV 56
/XHeight 431
/CharSet (/asteriskmath/prime)
-/FontFile 925 0 R
+/FontFile 937 0 R
>>
endobj
-927 0 obj
+939 0 obj
<<
/Length1 1744
/Length2 1898
@@ -7189,7 +7333,7 @@ n<x#8U8BI[cxz3+o?=cD;oseWnsˈ$MJU[
Pn6QjuU]#)' W=Z ],Uowȳj#-:zL}YQº5/ ƇHud^ǒ3K({fP7&)Mh 2;,fX3
endstream
endobj
-928 0 obj
+940 0 obj
<<
/Type /FontDescriptor
/FontName /PVOJED+LMMathSymbols7-Regular
@@ -7202,10 +7346,10 @@ endobj
/StemV 49
/XHeight 431
/CharSet (/infinity/minus/nabla/prime)
-/FontFile 927 0 R
+/FontFile 939 0 R
>>
endobj
-929 0 obj
+941 0 obj
<<
/Length1 2196
/Length2 25927
@@ -7329,7 +7473,7 @@ p͛J,7&0ZO  QUGU R>!"XHhU9aSd&҇o
8*iX?
endstream
endobj
-930 0 obj
+942 0 obj
<<
/Type /FontDescriptor
/FontName /BCROGY+LMMonoLt10-Bold
@@ -7342,10 +7486,10 @@ endobj
/StemV 83
/XHeight 431
/CharSet (/C/D/F/I/J/L/P/S/T/a/b/backslash/braceleft/braceright/c/d/e/f/five/g/h/i/j/l/m/n/o/p/parenleft/parenright/period/r/t/u/v/w/x)
-/FontFile 929 0 R
+/FontFile 941 0 R
>>
endobj
-931 0 obj
+943 0 obj
<<
/Length1 2992
/Length2 30344
@@ -7491,7 +7635,7 @@ oK\Z
BJJu<2~<`E%al0h&p4 ~Ι([, 45|F&9&x4&Fgs(
endstream
endobj
-932 0 obj
+944 0 obj
<<
/Type /FontDescriptor
/FontName /KLYDAK+LMMono10-Regular
@@ -7504,10 +7648,10 @@ endobj
/StemV 69
/XHeight 431
/CharSet (/A/B/C/D/E/F/G/I/J/K/L/M/N/O/P/R/S/T/U/V/X/Y/a/asciicircum/asterisk/at/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/dollar/e/equal/exclam/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/quoteleft/quoteright/r/s/semicolon/slash/t/three/two/u/underscore/v/w/x/y/z/zero)
-/FontFile 931 0 R
+/FontFile 943 0 R
>>
endobj
-933 0 obj
+945 0 obj
<<
/Length1 1708
/Length2 16455
@@ -7584,7 +7728,7 @@ daw!IJ4[!S-'zTv꧁P12*+岫i>BI)$ѥpF6f߆Lz띊G
X߂ŋnjJ>j*\;暰I}{F^!*(|>#[L%.o#~hg?:Jo<bh=|(i6yT~9#ADџ5 25/k`~6+0Bv|Cz(JkJ?MS߂VW5~sLAIk9smԺ90wi_cCh0bcK`l K_6 ;tO;-Y#--I<e1uqϼC vVNHBm%V^ʀp
endstream
endobj
-934 0 obj
+946 0 obj
<<
/Type /FontDescriptor
/FontName /BYUMNM+LMMono12-Regular
@@ -7597,10 +7741,10 @@ endobj
/StemV 65
/XHeight 431
/CharSet (/c/d/e/f/i/o)
-/FontFile 933 0 R
+/FontFile 945 0 R
>>
endobj
-935 0 obj
+947 0 obj
<<
/Length1 2309
/Length2 24403
@@ -7689,7 +7833,7 @@ U7;\ woC֎6rڀRi9u'9OzcJ|jߘo_v<{
$4CI.0<
endstream
endobj
-936 0 obj
+948 0 obj
<<
/Type /FontDescriptor
/FontName /XBGYSK+LMMono8-Regular
@@ -7702,10 +7846,10 @@ endobj
/StemV 76
/XHeight 431
/CharSet (/C/D/F/I/P/S/a/b/backslash/c/colon/comma/d/e/eight/f/five/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/period/q/r/s/six/slash/t/three/two/u/v/w/x)
-/FontFile 935 0 R
+/FontFile 947 0 R
>>
endobj
-937 0 obj
+949 0 obj
<<
/Length1 2277
/Length2 22098
@@ -7807,7 +7951,7 @@ u|<=/lAPeKXsKԇKˁ!/mLթ 8ĒX=T,2[3eK܌C
@xv-GnZ}R) ]VEߑI )?*Mڹ9i(+e 4)?rzXj.=s9IN +3AHL.IA` ^#F+֘dIUa%@
endstream
endobj
-938 0 obj
+950 0 obj
<<
/Type /FontDescriptor
/FontName /EIIEGG+LMMono9-Regular
@@ -7820,10 +7964,10 @@ endobj
/StemV 74
/XHeight 431
/CharSet (/D/F/I/a/b/backslash/braceleft/braceright/bracketleft/bracketright/c/comma/d/e/f/five/g/h/hyphen/i/l/m/n/o/one/p/parenleft/parenright/r/s/slash/t/three/two/u/underscore/v/y/zero)
-/FontFile 937 0 R
+/FontFile 949 0 R
>>
endobj
-939 0 obj
+951 0 obj
<<
/Length1 875
/Length2 1458
@@ -7840,7 +7984,7 @@ PpJG`Mͅa8</Ӓ:jrv)ݧPeHXV_&5o8VOI#Zq)}
Z:w:ʂT˫z/\|6kySkGQw0gP89aQ=ǚCFt3MHʋ<ڰ<83FpAdQ$=iQJ%0#xgOQ{:W,YeHzdn;'1
endstream
endobj
-940 0 obj
+952 0 obj
<<
/Type /FontDescriptor
/FontName /BJKGRW+stmary10
@@ -7853,46 +7997,46 @@ endobj
/StemV 25
/XHeight 431
/CharSet (/curlywedgeuparrow/ssearrow)
-/FontFile 939 0 R
+/FontFile 951 0 R
>>
endobj
-848 0 obj
+860 0 obj
<<
/Type /Encoding
/Differences [21/endash 27/ff/fi/fl/ffi 33/exclam 35/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P 82/R/S/T/U/V/W/X/Y 91/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright 159/section 252/udieresis]
>>
endobj
-865 0 obj
+877 0 obj
<<
/Type /Encoding
/Differences [0/parenleftbig/parenrightbig/bracketleftbig/bracketrightbig 12/vextendsingle 14/slashbig 18/parenleftbigg/parenrightbigg/bracketleftbigg/bracketrightbigg 28/angbracketleftbigg/angbracketrightbigg/slashbigg 32/parenleftBigg/parenrightBigg 112/radicalbig]
>>
endobj
-852 0 obj
+864 0 obj
<<
/Type /Encoding
/Differences [11/alpha/beta 14/delta 17/eta/theta 25/pi/rho 30/phi 32/psi 34/epsilon 58/period/comma 61/slash 64/partialdiff/A/B 68/D/E/F 75/K/L 78/N 80/P 83/S/T/U/V 88/X/Y 97/a/b/c/d 102/f 104/h/i/j/k/l/m/n 113/q/r/s/t/u/v/w/x/y/z 126/vector]
>>
endobj
-857 0 obj
+869 0 obj
<<
/Type /Encoding
/Differences [0/minus/periodcentered 3/asteriskmath 6/plusminus 10/circlemultiply 35/arrowdown 38/arrowsoutheast 41/arrowdblright 46/arrowsouthwest 48/prime/infinity 76/L 106/bar/bardbl 114/nabla]
>>
endobj
-860 0 obj
+872 0 obj
<<
/Type /Encoding
/Differences [0/Gamma/Delta/Theta 8/Phi 40/parenleft/parenright 43/plus 48/zero/one/two/three/four/five/six/seven 61/equal 68/D 91/bracketleft 93/bracketright 95/dotaccent 99/c/d 105/i 108/l 110/n/o 113/q 115/s 117/u 120/x/y/z 127/dieresis]
>>
endobj
-863 0 obj
+875 0 obj
<<
/Type /Encoding
/Differences [136/bullet]
>>
endobj
-941 0 obj
+953 0 obj
<<
/Length 844
/Filter /FlateDecode
@@ -7911,15 +8055,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /KKYZJG+LMRoman10-Bold
-/FontDescriptor 888 0 R
+/FontDescriptor 900 0 R
/FirstChar 21
/LastChar 122
-/Widths 880 0 R
-/Encoding 848 0 R
-/ToUnicode 941 0 R
+/Widths 892 0 R
+/Encoding 860 0 R
+/ToUnicode 953 0 R
>>
endobj
-942 0 obj
+954 0 obj
<<
/Length 844
/Filter /FlateDecode
@@ -7935,15 +8079,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /LQAAZY+LMRoman12-Bold
-/FontDescriptor 890 0 R
+/FontDescriptor 902 0 R
/FirstChar 27
/LastChar 122
-/Widths 872 0 R
-/Encoding 848 0 R
-/ToUnicode 942 0 R
+/Widths 884 0 R
+/Encoding 860 0 R
+/ToUnicode 954 0 R
>>
endobj
-943 0 obj
+955 0 obj
<<
/Length 845
/Filter /FlateDecode
@@ -7953,20 +8097,20 @@ xuUMo@+H.ȲrhQի ۇ6jo73o{q3fѭVO4\
8alSM3?r>x\i"EܰpJMkl4\?ǚc:7^EHOupQF^odž1BЖEQ?[0^׆ƨАԗ0 9+ãbLi~jЙ}s~zrCOe fYJ|֟uМ8gΈrYφ}ŊϘъ1LҊkgigϘ݊og3f3|3ߊY[3 =L3f/gxg ,; f)Rx jb&'W *.lMr0߫j١hGF}o.
endstream
endobj
-497 0 obj
+498 0 obj
<<
/Type /Font
/Subtype /Type1
/BaseFont /UZPDGI+LMRomanCaps10-Regular
-/FontDescriptor 892 0 R
+/FontDescriptor 904 0 R
/FirstChar 72
/LastChar 252
-/Widths 855 0 R
-/Encoding 848 0 R
-/ToUnicode 943 0 R
+/Widths 867 0 R
+/Encoding 860 0 R
+/ToUnicode 955 0 R
>>
endobj
-944 0 obj
+956 0 obj
<<
/Length 841
/Filter /FlateDecode
@@ -7981,15 +8125,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /UFAMEL+LMRoman10-Regular
-/FontDescriptor 902 0 R
+/FontDescriptor 914 0 R
/FirstChar 21
/LastChar 159
-/Widths 878 0 R
-/Encoding 848 0 R
-/ToUnicode 944 0 R
+/Widths 890 0 R
+/Encoding 860 0 R
+/ToUnicode 956 0 R
>>
endobj
-945 0 obj
+957 0 obj
<<
/Length 841
/Filter /FlateDecode
@@ -8005,16 +8149,16 @@ endobj
<<
/Type /Font
/Subtype /Type1
-/BaseFont /RFYSDO+LMRoman12-Regular
-/FontDescriptor 904 0 R
+/BaseFont /LJUZZO+LMRoman12-Regular
+/FontDescriptor 916 0 R
/FirstChar 44
/LastChar 121
-/Widths 882 0 R
-/Encoding 848 0 R
-/ToUnicode 945 0 R
+/Widths 894 0 R
+/Encoding 860 0 R
+/ToUnicode 957 0 R
>>
endobj
-946 0 obj
+958 0 obj
<<
/Length 841
/Filter /FlateDecode
@@ -8030,16 +8174,16 @@ endobj
<<
/Type /Font
/Subtype /Type1
-/BaseFont /RKOWBS+LMRoman17-Regular
-/FontDescriptor 906 0 R
+/BaseFont /VTXDDS+LMRoman17-Regular
+/FontDescriptor 918 0 R
/FirstChar 27
/LastChar 119
-/Widths 883 0 R
-/Encoding 848 0 R
-/ToUnicode 946 0 R
+/Widths 895 0 R
+/Encoding 860 0 R
+/ToUnicode 958 0 R
>>
endobj
-947 0 obj
+959 0 obj
<<
/Length 841
/Filter /FlateDecode
@@ -8057,15 +8201,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /FPXUEH+LMRoman6-Regular
-/FontDescriptor 910 0 R
+/FontDescriptor 922 0 R
/FirstChar 49
/LastChar 51
-/Widths 870 0 R
-/Encoding 848 0 R
-/ToUnicode 947 0 R
+/Widths 882 0 R
+/Encoding 860 0 R
+/ToUnicode 959 0 R
>>
endobj
-948 0 obj
+960 0 obj
<<
/Length 841
/Filter /FlateDecode
@@ -8083,15 +8227,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /TJMOAY+LMRoman7-Regular
-/FontDescriptor 912 0 R
+/FontDescriptor 924 0 R
/FirstChar 49
/LastChar 65
-/Widths 877 0 R
-/Encoding 848 0 R
-/ToUnicode 948 0 R
+/Widths 889 0 R
+/Encoding 860 0 R
+/ToUnicode 960 0 R
>>
endobj
-949 0 obj
+961 0 obj
<<
/Length 841
/Filter /FlateDecode
@@ -8107,15 +8251,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /VWFHRW+LMRoman8-Regular
-/FontDescriptor 914 0 R
+/FontDescriptor 926 0 R
/FirstChar 21
/LastChar 121
-/Widths 869 0 R
-/Encoding 848 0 R
-/ToUnicode 949 0 R
+/Widths 881 0 R
+/Encoding 860 0 R
+/ToUnicode 961 0 R
>>
endobj
-950 0 obj
+962 0 obj
<<
/Length 841
/Filter /FlateDecode
@@ -8133,15 +8277,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /MAPAAO+LMRoman9-Regular
-/FontDescriptor 916 0 R
+/FontDescriptor 928 0 R
/FirstChar 40
/LastChar 121
-/Widths 881 0 R
-/Encoding 848 0 R
-/ToUnicode 950 0 R
+/Widths 893 0 R
+/Encoding 860 0 R
+/ToUnicode 962 0 R
>>
endobj
-951 0 obj
+963 0 obj
<<
/Length 843
/Filter /FlateDecode
@@ -8157,15 +8301,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /GJLBWR+LMRoman10-Italic
-/FontDescriptor 918 0 R
+/FontDescriptor 930 0 R
/FirstChar 21
/LastChar 121
-/Widths 871 0 R
-/Encoding 848 0 R
-/ToUnicode 951 0 R
+/Widths 883 0 R
+/Encoding 860 0 R
+/ToUnicode 963 0 R
>>
endobj
-952 0 obj
+964 0 obj
<<
/Length 841
/Filter /FlateDecode
@@ -8180,15 +8324,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /QYMDQO+LMRoman8-Italic
-/FontDescriptor 920 0 R
+/FontDescriptor 932 0 R
/FirstChar 101
/LastChar 119
-/Widths 868 0 R
-/Encoding 848 0 R
-/ToUnicode 952 0 R
+/Widths 880 0 R
+/Encoding 860 0 R
+/ToUnicode 964 0 R
>>
endobj
-953 0 obj
+965 0 obj
<<
/Length 843
/Filter /FlateDecode
@@ -8199,20 +8343,20 @@ N7R$ݪ70W?g_,ɍehܬ=WWU\;;׺v7MO
?BXIAup*Çq G潪N$p|eO_:q;:'dE_kCvW
endstream
endobj
-662 0 obj
+663 0 obj
<<
/Type /Font
/Subtype /Type1
/BaseFont /PWWUQZ+LMSans10-Regular
-/FontDescriptor 922 0 R
+/FontDescriptor 934 0 R
/FirstChar 43
/LastChar 116
-/Widths 849 0 R
-/Encoding 848 0 R
-/ToUnicode 953 0 R
+/Widths 861 0 R
+/Encoding 860 0 R
+/ToUnicode 965 0 R
>>
endobj
-954 0 obj
+966 0 obj
<<
/Length 844
/Filter /FlateDecode
@@ -8224,20 +8368,20 @@ xmUMo@+H.Ȳ|h%Qի ۇ6웙7X=<l;Ytգ; q
a!SM~W,:?8C8…I^U E'b|82 8ϻ޽YtїkZbu_G4
endstream
endobj
-506 0 obj
+507 0 obj
<<
/Type /Font
/Subtype /Type1
/BaseFont /BCROGY+LMMonoLt10-Bold
-/FontDescriptor 930 0 R
+/FontDescriptor 942 0 R
/FirstChar 40
/LastChar 125
-/Widths 854 0 R
-/Encoding 848 0 R
-/ToUnicode 954 0 R
+/Widths 866 0 R
+/Encoding 860 0 R
+/ToUnicode 966 0 R
>>
endobj
-955 0 obj
+967 0 obj
<<
/Length 843
/Filter /FlateDecode
@@ -8254,15 +8398,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /KLYDAK+LMMono10-Regular
-/FontDescriptor 932 0 R
+/FontDescriptor 944 0 R
/FirstChar 33
/LastChar 125
-/Widths 879 0 R
-/Encoding 848 0 R
-/ToUnicode 955 0 R
+/Widths 891 0 R
+/Encoding 860 0 R
+/ToUnicode 967 0 R
>>
endobj
-956 0 obj
+968 0 obj
<<
/Length 843
/Filter /FlateDecode
@@ -8281,15 +8425,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /BYUMNM+LMMono12-Regular
-/FontDescriptor 934 0 R
+/FontDescriptor 946 0 R
/FirstChar 99
/LastChar 111
-/Widths 884 0 R
-/Encoding 848 0 R
-/ToUnicode 956 0 R
+/Widths 896 0 R
+/Encoding 860 0 R
+/ToUnicode 968 0 R
>>
endobj
-957 0 obj
+969 0 obj
<<
/Length 842
/Filter /FlateDecode
@@ -8305,15 +8449,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /XBGYSK+LMMono8-Regular
-/FontDescriptor 936 0 R
+/FontDescriptor 948 0 R
/FirstChar 35
/LastChar 120
-/Widths 856 0 R
-/Encoding 848 0 R
-/ToUnicode 957 0 R
+/Widths 868 0 R
+/Encoding 860 0 R
+/ToUnicode 969 0 R
>>
endobj
-958 0 obj
+970 0 obj
<<
/Length 842
/Filter /FlateDecode
@@ -8324,20 +8468,20 @@ N7R!̛3njehܬ=WWU\k];7nTtƓ
a!SMV,鸞:?8C8…I^U E'b6>2  8י
endstream
endobj
-607 0 obj
+608 0 obj
<<
/Type /Font
/Subtype /Type1
/BaseFont /EIIEGG+LMMono9-Regular
-/FontDescriptor 938 0 R
+/FontDescriptor 950 0 R
/FirstChar 40
/LastChar 125
-/Widths 850 0 R
-/Encoding 848 0 R
-/ToUnicode 958 0 R
+/Widths 862 0 R
+/Encoding 860 0 R
+/ToUnicode 970 0 R
>>
endobj
-959 0 obj
+971 0 obj
<<
/Length 846
/Filter /FlateDecode
@@ -8348,19 +8492,19 @@ xmUn@Cz ,ei#&JW6)R Ƈ}͌6v̛,W_~|ޟEc
,>G|F/'>t3:~:83fw3;:ٝ ߜLgw3t33 ~)>CO)>SK3- ,YJa)SM>o:?85JC4I^ E'b8<M 8Ytџ궉r2]
endstream
endobj
-719 0 obj
+721 0 obj
<<
/Type /Font
/Subtype /Type1
/BaseFont /OIUXCD+esint10
-/FontDescriptor 886 0 R
+/FontDescriptor 898 0 R
/FirstChar 1
/LastChar 6
-/Widths 847 0 R
-/ToUnicode 959 0 R
+/Widths 859 0 R
+/ToUnicode 971 0 R
>>
endobj
-960 0 obj
+972 0 obj
<<
/Length 430
/Filter /FlateDecode
@@ -8377,15 +8521,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /DLABCR+LMMathExtension10-Regular
-/FontDescriptor 894 0 R
+/FontDescriptor 906 0 R
/FirstChar 0
/LastChar 112
-/Widths 866 0 R
-/Encoding 865 0 R
-/ToUnicode 960 0 R
+/Widths 878 0 R
+/Encoding 877 0 R
+/ToUnicode 972 0 R
>>
endobj
-961 0 obj
+973 0 obj
<<
/Length 600
/Filter /FlateDecode
@@ -8401,15 +8545,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /LJFRVQ+LMMathItalic10-Regular
-/FontDescriptor 896 0 R
+/FontDescriptor 908 0 R
/FirstChar 14
/LastChar 126
-/Widths 873 0 R
-/Encoding 852 0 R
-/ToUnicode 961 0 R
+/Widths 885 0 R
+/Encoding 864 0 R
+/ToUnicode 973 0 R
>>
endobj
-962 0 obj
+974 0 obj
<<
/Length 598
/Filter /FlateDecode
@@ -8420,20 +8564,20 @@ xmTM@+z&?DƉ1LF+BG
Ч }g?i{4 Z76C 0b S.0Y0XjGiʙ`2$C5%^s=j# \7c C1 ݏ7< &dL8f>0Ozʣ)LPקZFw?a ~NTKx6Ĭ# ᯋUEvi[1؀mQ]/8}&?K^
endstream
endobj
-558 0 obj
+559 0 obj
<<
/Type /Font
/Subtype /Type1
/BaseFont /ZBFYGJ+LMMathItalic5-Regular
-/FontDescriptor 898 0 R
+/FontDescriptor 910 0 R
/FirstChar 105
/LastChar 110
-/Widths 853 0 R
-/Encoding 852 0 R
-/ToUnicode 962 0 R
+/Widths 865 0 R
+/Encoding 864 0 R
+/ToUnicode 974 0 R
>>
endobj
-963 0 obj
+975 0 obj
<<
/Length 598
/Filter /FlateDecode
@@ -8449,15 +8593,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /HVAXQD+LMMathItalic7-Regular
-/FontDescriptor 900 0 R
+/FontDescriptor 912 0 R
/FirstChar 11
/LastChar 122
-/Widths 875 0 R
-/Encoding 852 0 R
-/ToUnicode 963 0 R
+/Widths 887 0 R
+/Encoding 864 0 R
+/ToUnicode 975 0 R
>>
endobj
-964 0 obj
+976 0 obj
<<
/Length 790
/Filter /FlateDecode
@@ -8474,15 +8618,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /GEOOUZ+LMMathSymbols10-Regular
-/FontDescriptor 924 0 R
+/FontDescriptor 936 0 R
/FirstChar 0
/LastChar 114
-/Widths 867 0 R
-/Encoding 857 0 R
-/ToUnicode 964 0 R
+/Widths 879 0 R
+/Encoding 869 0 R
+/ToUnicode 976 0 R
>>
endobj
-965 0 obj
+977 0 obj
<<
/Length 789
/Filter /FlateDecode
@@ -8501,15 +8645,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /KAPBZZ+LMMathSymbols5-Regular
-/FontDescriptor 926 0 R
+/FontDescriptor 938 0 R
/FirstChar 3
/LastChar 48
-/Widths 859 0 R
-/Encoding 857 0 R
-/ToUnicode 965 0 R
+/Widths 871 0 R
+/Encoding 869 0 R
+/ToUnicode 977 0 R
>>
endobj
-966 0 obj
+978 0 obj
<<
/Length 788
/Filter /FlateDecode
@@ -8529,15 +8673,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /PVOJED+LMMathSymbols7-Regular
-/FontDescriptor 928 0 R
+/FontDescriptor 940 0 R
/FirstChar 0
/LastChar 114
-/Widths 858 0 R
-/Encoding 857 0 R
-/ToUnicode 966 0 R
+/Widths 870 0 R
+/Encoding 869 0 R
+/ToUnicode 978 0 R
>>
endobj
-967 0 obj
+979 0 obj
<<
/Length 963
/Filter /FlateDecode
@@ -8553,15 +8697,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /KKYZJG+LMRoman10-Bold
-/FontDescriptor 888 0 R
+/FontDescriptor 900 0 R
/FirstChar 68
/LastChar 122
-/Widths 861 0 R
-/Encoding 860 0 R
-/ToUnicode 967 0 R
+/Widths 873 0 R
+/Encoding 872 0 R
+/ToUnicode 979 0 R
>>
endobj
-968 0 obj
+980 0 obj
<<
/Length 962
/Filter /FlateDecode
@@ -8578,15 +8722,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /UFAMEL+LMRoman10-Regular
-/FontDescriptor 902 0 R
+/FontDescriptor 914 0 R
/FirstChar 0
/LastChar 127
-/Widths 874 0 R
-/Encoding 860 0 R
-/ToUnicode 968 0 R
+/Widths 886 0 R
+/Encoding 872 0 R
+/ToUnicode 980 0 R
>>
endobj
-969 0 obj
+981 0 obj
<<
/Length 962
/Filter /FlateDecode
@@ -8600,15 +8744,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /TXCQKG+LMRoman5-Regular
-/FontDescriptor 908 0 R
+/FontDescriptor 920 0 R
/FirstChar 43
/LastChar 49
-/Widths 862 0 R
-/Encoding 860 0 R
-/ToUnicode 969 0 R
+/Widths 874 0 R
+/Encoding 872 0 R
+/ToUnicode 981 0 R
>>
endobj
-970 0 obj
+982 0 obj
<<
/Length 962
/Filter /FlateDecode
@@ -8622,15 +8766,15 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /TJMOAY+LMRoman7-Regular
-/FontDescriptor 912 0 R
+/FontDescriptor 924 0 R
/FirstChar 2
/LastChar 100
-/Widths 876 0 R
-/Encoding 860 0 R
-/ToUnicode 970 0 R
+/Widths 888 0 R
+/Encoding 872 0 R
+/ToUnicode 982 0 R
>>
endobj
-971 0 obj
+983 0 obj
<<
/Length 328
/Filter /FlateDecode
@@ -8640,19 +8784,19 @@ xu1o0w)&"&$
Q#6mf
endstream
endobj
-591 0 obj
+592 0 obj
<<
/Type /Font
/Subtype /Type1
/BaseFont /BJKGRW+stmary10
-/FontDescriptor 940 0 R
+/FontDescriptor 952 0 R
/FirstChar 36
/LastChar 37
-/Widths 851 0 R
-/ToUnicode 971 0 R
+/Widths 863 0 R
+/ToUnicode 983 0 R
>>
endobj
-972 0 obj
+984 0 obj
<<
/Length 700
/Filter /FlateDecode
@@ -8668,19 +8812,19 @@ endobj
/Type /Font
/Subtype /Type1
/BaseFont /UFAMEL+LMRoman10-Regular
-/FontDescriptor 902 0 R
+/FontDescriptor 914 0 R
/FirstChar 136
/LastChar 136
-/Widths 864 0 R
-/Encoding 863 0 R
-/ToUnicode 972 0 R
+/Widths 876 0 R
+/Encoding 875 0 R
+/ToUnicode 984 0 R
>>
endobj
303 0 obj
<<
/Type /Pages
/Count 6
-/Parent 973 0 R
+/Parent 985 0 R
/Kids [294 0 R 305 0 R 318 0 R 356 0 R 402 0 R 407 0 R]
>>
endobj
@@ -8688,106 +8832,114 @@ endobj
<<
/Type /Pages
/Count 6
-/Parent 973 0 R
-/Kids [423 0 R 436 0 R 446 0 R 458 0 R 476 0 R 481 0 R]
+/Parent 985 0 R
+/Kids [423 0 R 436 0 R 446 0 R 458 0 R 476 0 R 482 0 R]
>>
endobj
-499 0 obj
+500 0 obj
<<
/Type /Pages
/Count 6
-/Parent 973 0 R
-/Kids [493 0 R 503 0 R 509 0 R 513 0 R 521 0 R 527 0 R]
+/Parent 985 0 R
+/Kids [494 0 R 504 0 R 510 0 R 514 0 R 522 0 R 528 0 R]
>>
endobj
-536 0 obj
+537 0 obj
<<
/Type /Pages
/Count 6
-/Parent 973 0 R
-/Kids [533 0 R 538 0 R 542 0 R 546 0 R 550 0 R 555 0 R]
+/Parent 985 0 R
+/Kids [534 0 R 539 0 R 543 0 R 547 0 R 551 0 R 556 0 R]
>>
endobj
-565 0 obj
+566 0 obj
<<
/Type /Pages
/Count 6
-/Parent 973 0 R
-/Kids [562 0 R 570 0 R 578 0 R 587 0 R 600 0 R 604 0 R]
+/Parent 985 0 R
+/Kids [563 0 R 571 0 R 579 0 R 588 0 R 601 0 R 605 0 R]
>>
endobj
-613 0 obj
+614 0 obj
<<
/Type /Pages
/Count 6
-/Parent 973 0 R
-/Kids [610 0 R 615 0 R 621 0 R 633 0 R 645 0 R 654 0 R]
+/Parent 985 0 R
+/Kids [611 0 R 616 0 R 622 0 R 634 0 R 646 0 R 655 0 R]
>>
endobj
-664 0 obj
+665 0 obj
<<
/Type /Pages
/Count 6
-/Parent 974 0 R
-/Kids [658 0 R 666 0 R 673 0 R 678 0 R 682 0 R 686 0 R]
+/Parent 986 0 R
+/Kids [659 0 R 667 0 R 674 0 R 679 0 R 683 0 R 687 0 R]
>>
endobj
-693 0 obj
+695 0 obj
<<
/Type /Pages
/Count 6
-/Parent 974 0 R
-/Kids [690 0 R 695 0 R 702 0 R 708 0 R 712 0 R 716 0 R]
+/Parent 986 0 R
+/Kids [692 0 R 697 0 R 704 0 R 710 0 R 714 0 R 718 0 R]
>>
endobj
-731 0 obj
+733 0 obj
<<
/Type /Pages
/Count 6
-/Parent 974 0 R
-/Kids [726 0 R 734 0 R 741 0 R 745 0 R 756 0 R 764 0 R]
+/Parent 986 0 R
+/Kids [729 0 R 736 0 R 744 0 R 748 0 R 759 0 R 766 0 R]
>>
endobj
-779 0 obj
+774 0 obj
<<
/Type /Pages
/Count 6
-/Parent 974 0 R
-/Kids [768 0 R 781 0 R 795 0 R 799 0 R 803 0 R 807 0 R]
+/Parent 986 0 R
+/Kids [771 0 R 776 0 R 788 0 R 802 0 R 806 0 R 810 0 R]
>>
endobj
-814 0 obj
+817 0 obj
<<
/Type /Pages
/Count 6
-/Parent 974 0 R
-/Kids [811 0 R 816 0 R 820 0 R 824 0 R 828 0 R 838 0 R]
+/Parent 986 0 R
+/Kids [814 0 R 819 0 R 823 0 R 827 0 R 831 0 R 835 0 R]
>>
endobj
-973 0 obj
+858 0 obj
+<<
+/Type /Pages
+/Count 1
+/Parent 986 0 R
+/Kids [845 0 R]
+>>
+endobj
+985 0 obj
<<
/Type /Pages
/Count 36
-/Parent 975 0 R
-/Kids [303 0 R 433 0 R 499 0 R 536 0 R 565 0 R 613 0 R]
+/Parent 987 0 R
+/Kids [303 0 R 433 0 R 500 0 R 537 0 R 566 0 R 614 0 R]
>>
endobj
-974 0 obj
+986 0 obj
<<
/Type /Pages
-/Count 30
-/Parent 975 0 R
-/Kids [664 0 R 693 0 R 731 0 R 779 0 R 814 0 R]
+/Count 31
+/Parent 987 0 R
+/Kids [665 0 R 695 0 R 733 0 R 774 0 R 817 0 R 858 0 R]
>>
endobj
-975 0 obj
+987 0 obj
<<
/Type /Pages
-/Count 66
-/Kids [973 0 R 974 0 R]
+/Count 67
+/Kids [985 0 R 986 0 R]
>>
endobj
-976 0 obj
+988 0 obj
<<
/Type /Outlines
/First 3 0 R
@@ -8936,7 +9088,7 @@ endobj
<<
/Title 232 0 R
/A 229 0 R
-/Parent 976 0 R
+/Parent 988 0 R
/Prev 183 0 R
/First 235 0 R
/Last 291 0 R
@@ -9047,7 +9199,7 @@ endobj
<<
/Title 184 0 R
/A 181 0 R
-/Parent 976 0 R
+/Parent 988 0 R
/Prev 99 0 R
/Next 231 0 R
/First 187 0 R
@@ -9242,7 +9394,7 @@ endobj
<<
/Title 100 0 R
/A 97 0 R
-/Parent 976 0 R
+/Parent 988 0 R
/Prev 15 0 R
/Next 183 0 R
/First 103 0 R
@@ -9437,7 +9589,7 @@ endobj
<<
/Title 16 0 R
/A 13 0 R
-/Parent 976 0 R
+/Parent 988 0 R
/Prev 3 0 R
/Next 99 0 R
/First 19 0 R
@@ -9465,620 +9617,626 @@ endobj
<<
/Title 4 0 R
/A 1 0 R
-/Parent 976 0 R
+/Parent 988 0 R
/Next 15 0 R
/First 7 0 R
/Last 11 0 R
/Count 2
>>
endobj
-977 0 obj
+989 0 obj
<<
-/Names [(Doc-Start) 298 0 R (Hfootnote.1) 414 0 R (Hfootnote.2) 463 0 R (Hfootnote.3) 496 0 R (Hfootnote.4) 498 0 R (Hfootnote.5) 581 0 R]
+/Names [(Doc-Start) 298 0 R (Hfootnote.1) 414 0 R (Hfootnote.2) 463 0 R (Hfootnote.3) 497 0 R (Hfootnote.4) 499 0 R (Hfootnote.5) 582 0 R]
/Limits [(Doc-Start) (Hfootnote.5)]
>>
endobj
-978 0 obj
+990 0 obj
<<
-/Names [(Hfootnote.6) 582 0 R (Item.1) 411 0 R (Item.10) 594 0 R (Item.11) 648 0 R (Item.12) 649 0 R (Item.13) 650 0 R]
+/Names [(Hfootnote.6) 583 0 R (Item.1) 411 0 R (Item.10) 595 0 R (Item.11) 649 0 R (Item.12) 650 0 R (Item.13) 651 0 R]
/Limits [(Hfootnote.6) (Item.13)]
>>
endobj
-979 0 obj
+991 0 obj
<<
-/Names [(Item.14) 730 0 R (Item.15) 737 0 R (Item.16) 738 0 R (Item.17) 739 0 R (Item.18) 748 0 R (Item.19) 749 0 R]
+/Names [(Item.14) 739 0 R (Item.15) 740 0 R (Item.16) 741 0 R (Item.17) 742 0 R (Item.18) 751 0 R (Item.19) 752 0 R]
/Limits [(Item.14) (Item.19)]
>>
endobj
-980 0 obj
+992 0 obj
<<
-/Names [(Item.2) 412 0 R (Item.20) 750 0 R (Item.21) 751 0 R (Item.22) 760 0 R (Item.23) 761 0 R (Item.24) 762 0 R]
+/Names [(Item.2) 412 0 R (Item.20) 753 0 R (Item.21) 754 0 R (Item.22) 763 0 R (Item.23) 764 0 R (Item.24) 769 0 R]
/Limits [(Item.2) (Item.24)]
>>
endobj
-981 0 obj
+993 0 obj
<<
-/Names [(Item.25) 771 0 R (Item.26) 772 0 R (Item.27) 773 0 R (Item.28) 774 0 R (Item.29) 775 0 R (Item.3) 426 0 R]
+/Names [(Item.25) 779 0 R (Item.26) 780 0 R (Item.27) 781 0 R (Item.28) 782 0 R (Item.29) 783 0 R (Item.3) 426 0 R]
/Limits [(Item.25) (Item.3)]
>>
endobj
-982 0 obj
+994 0 obj
<<
-/Names [(Item.30) 776 0 R (Item.31) 777 0 R (Item.32) 778 0 R (Item.33) 784 0 R (Item.34) 785 0 R (Item.35) 786 0 R]
+/Names [(Item.30) 784 0 R (Item.31) 785 0 R (Item.32) 786 0 R (Item.33) 791 0 R (Item.34) 792 0 R (Item.35) 793 0 R]
/Limits [(Item.30) (Item.35)]
>>
endobj
-983 0 obj
+995 0 obj
<<
-/Names [(Item.36) 787 0 R (Item.37) 788 0 R (Item.38) 789 0 R (Item.39) 790 0 R (Item.4) 427 0 R (Item.40) 791 0 R]
+/Names [(Item.36) 794 0 R (Item.37) 795 0 R (Item.38) 796 0 R (Item.39) 797 0 R (Item.4) 427 0 R (Item.40) 798 0 R]
/Limits [(Item.36) (Item.40)]
>>
endobj
-984 0 obj
+996 0 obj
<<
-/Names [(Item.41) 792 0 R (Item.42) 793 0 R (Item.43) 831 0 R (Item.44) 832 0 R (Item.45) 833 0 R (Item.46) 834 0 R]
+/Names [(Item.41) 799 0 R (Item.42) 800 0 R (Item.43) 838 0 R (Item.44) 839 0 R (Item.45) 840 0 R (Item.46) 841 0 R]
/Limits [(Item.41) (Item.46)]
>>
endobj
-985 0 obj
+997 0 obj
<<
-/Names [(Item.47) 835 0 R (Item.48) 836 0 R (Item.49) 841 0 R (Item.5) 428 0 R (Item.50) 842 0 R (Item.51) 843 0 R]
+/Names [(Item.47) 842 0 R (Item.48) 843 0 R (Item.49) 848 0 R (Item.5) 428 0 R (Item.50) 849 0 R (Item.51) 850 0 R]
/Limits [(Item.47) (Item.51)]
>>
endobj
-986 0 obj
-<<
-/Names [(Item.52) 844 0 R (Item.53) 845 0 R (Item.54) 846 0 R (Item.6) 429 0 R (Item.7) 430 0 R (Item.8) 592 0 R]
-/Limits [(Item.52) (Item.8)]
->>
-endobj
-987 0 obj
+998 0 obj
<<
-/Names [(Item.9) 593 0 R (chapter*.3) 359 0 R (chapter.1) 2 0 R (chapter.2) 14 0 R (chapter.3) 98 0 R (chapter.4) 182 0 R]
-/Limits [(Item.9) (chapter.4)]
+/Names [(Item.52) 851 0 R (Item.53) 852 0 R (Item.54) 853 0 R (Item.55) 854 0 R (Item.56) 855 0 R (Item.57) 856 0 R]
+/Limits [(Item.52) (Item.57)]
>>
endobj
-988 0 obj
+999 0 obj
<<
-/Names [(chapter.5) 230 0 R (equation.1.2.1) 440 0 R (equation.1.2.2) 441 0 R (equation.1.2.3) 442 0 R (equation.1.2.4) 449 0 R (equation.1.2.5) 450 0 R]
-/Limits [(chapter.5) (equation.1.2.5)]
+/Names [(Item.58) 857 0 R (Item.6) 429 0 R (Item.7) 430 0 R (Item.8) 593 0 R (Item.9) 594 0 R (chapter*.3) 359 0 R]
+/Limits [(Item.58) (chapter*.3)]
>>
endobj
-989 0 obj
+1000 0 obj
<<
-/Names [(equation.1.2.6) 451 0 R (equation.1.2.7) 453 0 R (page.1) 297 0 R (page.10) 483 0 R (page.11) 495 0 R (page.12) 505 0 R]
-/Limits [(equation.1.2.6) (page.12)]
+/Names [(chapter.1) 2 0 R (chapter.2) 14 0 R (chapter.3) 98 0 R (chapter.4) 182 0 R (chapter.5) 230 0 R (equation.1.2.1) 440 0 R]
+/Limits [(chapter.1) (equation.1.2.1)]
>>
endobj
-990 0 obj
+1001 0 obj
<<
-/Names [(page.13) 511 0 R (page.14) 515 0 R (page.15) 523 0 R (page.16) 529 0 R (page.17) 535 0 R (page.18) 540 0 R]
-/Limits [(page.13) (page.18)]
+/Names [(equation.1.2.2) 441 0 R (equation.1.2.3) 442 0 R (equation.1.2.4) 449 0 R (equation.1.2.5) 450 0 R (equation.1.2.6) 451 0 R (equation.1.2.7) 453 0 R]
+/Limits [(equation.1.2.2) (equation.1.2.7)]
>>
endobj
-991 0 obj
+1002 0 obj
<<
-/Names [(page.19) 544 0 R (page.2) 358 0 R (page.20) 548 0 R (page.21) 552 0 R (page.22) 557 0 R (page.23) 564 0 R]
-/Limits [(page.19) (page.23)]
+/Names [(page.1) 297 0 R (page.10) 484 0 R (page.11) 496 0 R (page.12) 506 0 R (page.13) 512 0 R (page.14) 516 0 R]
+/Limits [(page.1) (page.14)]
>>
endobj
-992 0 obj
+1003 0 obj
<<
-/Names [(page.24) 572 0 R (page.25) 580 0 R (page.26) 589 0 R (page.27) 602 0 R (page.28) 606 0 R (page.29) 612 0 R]
-/Limits [(page.24) (page.29)]
+/Names [(page.15) 524 0 R (page.16) 530 0 R (page.17) 536 0 R (page.18) 541 0 R (page.19) 545 0 R (page.2) 358 0 R]
+/Limits [(page.15) (page.2)]
>>
endobj
-993 0 obj
+1004 0 obj
<<
-/Names [(page.3) 404 0 R (page.30) 617 0 R (page.31) 623 0 R (page.32) 635 0 R (page.33) 647 0 R (page.34) 656 0 R]
-/Limits [(page.3) (page.34)]
+/Names [(page.20) 549 0 R (page.21) 553 0 R (page.22) 558 0 R (page.23) 565 0 R (page.24) 573 0 R (page.25) 581 0 R]
+/Limits [(page.20) (page.25)]
>>
endobj
-994 0 obj
+1005 0 obj
<<
-/Names [(page.35) 660 0 R (page.36) 668 0 R (page.37) 675 0 R (page.38) 680 0 R (page.39) 684 0 R (page.4) 409 0 R]
-/Limits [(page.35) (page.4)]
+/Names [(page.26) 590 0 R (page.27) 603 0 R (page.28) 607 0 R (page.29) 613 0 R (page.3) 404 0 R (page.30) 618 0 R]
+/Limits [(page.26) (page.30)]
>>
endobj
-995 0 obj
+1006 0 obj
<<
-/Names [(page.40) 688 0 R (page.41) 692 0 R (page.42) 697 0 R (page.43) 704 0 R (page.44) 710 0 R (page.45) 714 0 R]
-/Limits [(page.40) (page.45)]
+/Names [(page.31) 624 0 R (page.32) 636 0 R (page.33) 648 0 R (page.34) 657 0 R (page.35) 661 0 R (page.36) 669 0 R]
+/Limits [(page.31) (page.36)]
>>
endobj
-996 0 obj
+1007 0 obj
<<
-/Names [(page.46) 718 0 R (page.47) 728 0 R (page.48) 736 0 R (page.49) 743 0 R (page.5) 425 0 R (page.50) 747 0 R]
-/Limits [(page.46) (page.50)]
+/Names [(page.37) 676 0 R (page.38) 681 0 R (page.39) 685 0 R (page.4) 409 0 R (page.40) 689 0 R (page.41) 694 0 R]
+/Limits [(page.37) (page.41)]
>>
endobj
-997 0 obj
+1008 0 obj
<<
-/Names [(page.51) 758 0 R (page.52) 766 0 R (page.53) 770 0 R (page.54) 783 0 R (page.55) 797 0 R (page.56) 801 0 R]
-/Limits [(page.51) (page.56)]
+/Names [(page.42) 699 0 R (page.43) 706 0 R (page.44) 712 0 R (page.45) 716 0 R (page.46) 720 0 R (page.47) 731 0 R]
+/Limits [(page.42) (page.47)]
>>
endobj
-998 0 obj
+1009 0 obj
<<
-/Names [(page.57) 805 0 R (page.58) 809 0 R (page.59) 813 0 R (page.6) 438 0 R (page.60) 818 0 R (page.61) 822 0 R]
-/Limits [(page.57) (page.61)]
+/Names [(page.48) 738 0 R (page.49) 746 0 R (page.5) 425 0 R (page.50) 750 0 R (page.51) 761 0 R (page.52) 768 0 R]
+/Limits [(page.48) (page.52)]
>>
endobj
-999 0 obj
+1010 0 obj
<<
-/Names [(page.62) 826 0 R (page.63) 830 0 R (page.64) 840 0 R (page.7) 448 0 R (page.8) 460 0 R (page.9) 478 0 R]
-/Limits [(page.62) (page.9)]
+/Names [(page.53) 773 0 R (page.54) 778 0 R (page.55) 790 0 R (page.56) 804 0 R (page.57) 808 0 R (page.58) 812 0 R]
+/Limits [(page.53) (page.58)]
>>
endobj
-1000 0 obj
+1011 0 obj
<<
-/Names [(section*.1) 320 0 R (section*.10) 669 0 R (section*.11) 670 0 R (section*.12) 671 0 R (section*.13) 676 0 R (section*.2) 321 0 R]
-/Limits [(section*.1) (section*.2)]
+/Names [(page.59) 816 0 R (page.6) 438 0 R (page.60) 821 0 R (page.61) 825 0 R (page.62) 829 0 R (page.63) 833 0 R]
+/Limits [(page.59) (page.63)]
>>
endobj
-1001 0 obj
+1012 0 obj
<<
-/Names [(section*.4) 462 0 R (section*.8) 661 0 R (section*.9) 663 0 R (section.1.1) 6 0 R (section.1.2) 10 0 R (section.2.1) 18 0 R]
-/Limits [(section*.4) (section.2.1)]
+/Names [(page.64) 837 0 R (page.65) 847 0 R (page.7) 448 0 R (page.8) 460 0 R (page.9) 478 0 R (section*.1) 320 0 R]
+/Limits [(page.64) (section*.1)]
>>
endobj
-1002 0 obj
+1013 0 obj
<<
-/Names [(section.2.2) 22 0 R (section.3.1) 102 0 R (section.3.2) 106 0 R (section.3.3) 126 0 R (section.3.4) 174 0 R (section.4.1) 186 0 R]
-/Limits [(section.2.2) (section.4.1)]
+/Names [(section*.10) 670 0 R (section*.11) 671 0 R (section*.12) 672 0 R (section*.13) 677 0 R (section*.2) 321 0 R (section*.4) 462 0 R]
+/Limits [(section*.10) (section*.4)]
>>
endobj
-1003 0 obj
+1014 0 obj
<<
-/Names [(section.4.2) 214 0 R (section.5.1) 234 0 R (section.5.2) 238 0 R (section.5.3) 278 0 R (section.5.4) 282 0 R (section.5.5) 286 0 R]
-/Limits [(section.4.2) (section.5.5)]
+/Names [(section*.8) 662 0 R (section*.9) 664 0 R (section.1.1) 6 0 R (section.1.2) 10 0 R (section.2.1) 18 0 R (section.2.2) 22 0 R]
+/Limits [(section*.8) (section.2.2)]
>>
endobj
-1004 0 obj
+1015 0 obj
<<
-/Names [(section.5.6) 290 0 R (subsection.2.2.1) 26 0 R (subsection.2.2.2) 34 0 R (subsection.2.2.3) 38 0 R (subsection.2.2.4) 50 0 R (subsection.2.2.5) 66 0 R]
-/Limits [(section.5.6) (subsection.2.2.5)]
+/Names [(section.3.1) 102 0 R (section.3.2) 106 0 R (section.3.3) 126 0 R (section.3.4) 174 0 R (section.4.1) 186 0 R (section.4.2) 214 0 R]
+/Limits [(section.3.1) (section.4.2)]
>>
endobj
-1005 0 obj
+1016 0 obj
<<
-/Names [(subsection.2.2.6) 94 0 R (subsection.3.2.1) 110 0 R (subsection.3.2.2) 114 0 R (subsection.3.2.3) 118 0 R (subsection.3.2.4) 122 0 R (subsection.3.3.1) 130 0 R]
-/Limits [(subsection.2.2.6) (subsection.3.3.1)]
+/Names [(section.5.1) 234 0 R (section.5.2) 238 0 R (section.5.3) 278 0 R (section.5.4) 282 0 R (section.5.5) 286 0 R (section.5.6) 290 0 R]
+/Limits [(section.5.1) (section.5.6)]
>>
endobj
-1006 0 obj
+1017 0 obj
<<
-/Names [(subsection.3.3.2) 138 0 R (subsection.3.3.3) 170 0 R (subsection.3.4.1) 178 0 R (subsection.4.1.1) 190 0 R (subsection.4.1.2) 194 0 R (subsection.4.1.3) 198 0 R]
-/Limits [(subsection.3.3.2) (subsection.4.1.3)]
+/Names [(subsection.2.2.1) 26 0 R (subsection.2.2.2) 34 0 R (subsection.2.2.3) 38 0 R (subsection.2.2.4) 50 0 R (subsection.2.2.5) 66 0 R (subsection.2.2.6) 94 0 R]
+/Limits [(subsection.2.2.1) (subsection.2.2.6)]
>>
endobj
-1007 0 obj
+1018 0 obj
<<
-/Names [(subsection.4.1.4) 206 0 R (subsection.4.1.5) 210 0 R (subsection.4.2.1) 218 0 R (subsection.4.2.2) 222 0 R (subsection.4.2.3) 226 0 R (subsection.5.2.1) 242 0 R]
-/Limits [(subsection.4.1.4) (subsection.5.2.1)]
+/Names [(subsection.3.2.1) 110 0 R (subsection.3.2.2) 114 0 R (subsection.3.2.3) 118 0 R (subsection.3.2.4) 122 0 R (subsection.3.3.1) 130 0 R (subsection.3.3.2) 138 0 R]
+/Limits [(subsection.3.2.1) (subsection.3.3.2)]
>>
endobj
-1008 0 obj
+1019 0 obj
<<
-/Names [(subsection.5.2.2) 246 0 R (subsection.5.2.3) 254 0 R (subsection.5.2.4) 262 0 R (subsection.5.2.5) 270 0 R (subsection.5.2.6) 274 0 R (subsubsection.2.2.1.1) 30 0 R]
-/Limits [(subsection.5.2.2) (subsubsection.2.2.1.1)]
+/Names [(subsection.3.3.3) 170 0 R (subsection.3.4.1) 178 0 R (subsection.4.1.1) 190 0 R (subsection.4.1.2) 194 0 R (subsection.4.1.3) 198 0 R (subsection.4.1.4) 206 0 R]
+/Limits [(subsection.3.3.3) (subsection.4.1.4)]
>>
endobj
-1009 0 obj
+1020 0 obj
<<
-/Names [(subsubsection.2.2.3.1) 42 0 R (subsubsection.2.2.3.2) 46 0 R (subsubsection.2.2.4.1) 54 0 R (subsubsection.2.2.4.2) 58 0 R (subsubsection.2.2.4.3) 62 0 R (subsubsection.2.2.5.1) 70 0 R]
-/Limits [(subsubsection.2.2.3.1) (subsubsection.2.2.5.1)]
+/Names [(subsection.4.1.5) 210 0 R (subsection.4.2.1) 218 0 R (subsection.4.2.2) 222 0 R (subsection.4.2.3) 226 0 R (subsection.5.2.1) 242 0 R (subsection.5.2.2) 246 0 R]
+/Limits [(subsection.4.1.5) (subsection.5.2.2)]
>>
endobj
-1010 0 obj
+1021 0 obj
<<
-/Names [(subsubsection.2.2.5.2) 74 0 R (subsubsection.2.2.5.3) 78 0 R (subsubsection.2.2.5.4) 82 0 R (subsubsection.2.2.5.5) 86 0 R (subsubsection.2.2.5.6) 90 0 R (subsubsection.3.3.1.1) 134 0 R]
-/Limits [(subsubsection.2.2.5.2) (subsubsection.3.3.1.1)]
+/Names [(subsection.5.2.3) 254 0 R (subsection.5.2.4) 262 0 R (subsection.5.2.5) 270 0 R (subsection.5.2.6) 274 0 R (subsubsection.2.2.1.1) 30 0 R (subsubsection.2.2.3.1) 42 0 R]
+/Limits [(subsection.5.2.3) (subsubsection.2.2.3.1)]
>>
endobj
-1011 0 obj
+1022 0 obj
<<
-/Names [(subsubsection.3.3.2.1) 142 0 R (subsubsection.3.3.2.2) 146 0 R (subsubsection.3.3.2.3) 150 0 R (subsubsection.3.3.2.4) 154 0 R (subsubsection.3.3.2.5) 158 0 R (subsubsection.3.3.2.6) 162 0 R]
-/Limits [(subsubsection.3.3.2.1) (subsubsection.3.3.2.6)]
+/Names [(subsubsection.2.2.3.2) 46 0 R (subsubsection.2.2.4.1) 54 0 R (subsubsection.2.2.4.2) 58 0 R (subsubsection.2.2.4.3) 62 0 R (subsubsection.2.2.5.1) 70 0 R (subsubsection.2.2.5.2) 74 0 R]
+/Limits [(subsubsection.2.2.3.2) (subsubsection.2.2.5.2)]
>>
endobj
-1012 0 obj
+1023 0 obj
<<
-/Names [(subsubsection.3.3.2.7) 166 0 R (subsubsection.4.1.3.1) 202 0 R (subsubsection.5.2.2.1) 250 0 R (subsubsection.5.2.3.1) 258 0 R (subsubsection.5.2.4.1) 266 0 R (subtable.3.3.1) 637 0 R]
-/Limits [(subsubsection.3.3.2.7) (subtable.3.3.1)]
+/Names [(subsubsection.2.2.5.3) 78 0 R (subsubsection.2.2.5.4) 82 0 R (subsubsection.2.2.5.5) 86 0 R (subsubsection.2.2.5.6) 90 0 R (subsubsection.3.3.1.1) 134 0 R (subsubsection.3.3.2.1) 142 0 R]
+/Limits [(subsubsection.2.2.5.3) (subsubsection.3.3.2.1)]
>>
endobj
-1013 0 obj
+1024 0 obj
<<
-/Names [(subtable.3.3.2) 638 0 R (subtable.3.3.3) 639 0 R (subtable.3.3.4) 640 0 R (table.caption.14) 729 0 R (table.caption.15) 759 0 R (table.caption.5) 590 0 R]
-/Limits [(subtable.3.3.2) (table.caption.5)]
+/Names [(subsubsection.3.3.2.2) 146 0 R (subsubsection.3.3.2.3) 150 0 R (subsubsection.3.3.2.4) 154 0 R (subsubsection.3.3.2.5) 158 0 R (subsubsection.3.3.2.6) 162 0 R (subsubsection.3.3.2.7) 166 0 R]
+/Limits [(subsubsection.3.3.2.2) (subsubsection.3.3.2.7)]
>>
endobj
-1014 0 obj
+1025 0 obj
<<
-/Names [(table.caption.6) 595 0 R (table.caption.7) 636 0 R]
-/Limits [(table.caption.6) (table.caption.7)]
+/Names [(subsubsection.4.1.3.1) 202 0 R (subsubsection.5.2.2.1) 250 0 R (subsubsection.5.2.3.1) 258 0 R (subsubsection.5.2.4.1) 266 0 R (subtable.3.3.1) 638 0 R (subtable.3.3.2) 639 0 R]
+/Limits [(subsubsection.4.1.3.1) (subtable.3.3.2)]
>>
endobj
-1015 0 obj
+1026 0 obj
<<
-/Kids [977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R]
-/Limits [(Doc-Start) (Item.35)]
+/Names [(subtable.3.3.3) 640 0 R (subtable.3.3.4) 641 0 R (table.caption.14) 732 0 R (table.caption.15) 762 0 R (table.caption.5) 591 0 R (table.caption.6) 596 0 R]
+/Limits [(subtable.3.3.3) (table.caption.6)]
>>
endobj
-1016 0 obj
+1027 0 obj
<<
-/Kids [983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R]
-/Limits [(Item.36) (equation.1.2.5)]
+/Names [(table.caption.7) 637 0 R]
+/Limits [(table.caption.7) (table.caption.7)]
>>
endobj
-1017 0 obj
+1028 0 obj
<<
/Kids [989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R]
-/Limits [(equation.1.2.6) (page.4)]
+/Limits [(Doc-Start) (Item.35)]
>>
endobj
-1018 0 obj
+1029 0 obj
<<
/Kids [995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R]
-/Limits [(page.40) (section*.2)]
+/Limits [(Item.36) (equation.1.2.1)]
>>
endobj
-1019 0 obj
+1030 0 obj
<<
/Kids [1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R]
-/Limits [(section*.4) (subsection.4.1.3)]
+/Limits [(equation.1.2.2) (page.36)]
>>
endobj
-1020 0 obj
+1031 0 obj
<<
/Kids [1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R 1012 0 R]
-/Limits [(subsection.4.1.4) (subtable.3.3.1)]
+/Limits [(page.37) (section*.1)]
>>
endobj
-1021 0 obj
+1032 0 obj
<<
-/Kids [1013 0 R 1014 0 R]
-/Limits [(subtable.3.3.2) (table.caption.7)]
+/Kids [1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R]
+/Limits [(section*.10) (subsection.3.3.2)]
>>
endobj
-1022 0 obj
+1033 0 obj
<<
-/Kids [1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R]
-/Limits [(Doc-Start) (subtable.3.3.1)]
+/Kids [1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R]
+/Limits [(subsection.3.3.3) (subsubsection.3.3.2.7)]
>>
endobj
-1023 0 obj
+1034 0 obj
<<
-/Kids [1021 0 R]
-/Limits [(subtable.3.3.2) (table.caption.7)]
+/Kids [1025 0 R 1026 0 R 1027 0 R]
+/Limits [(subsubsection.4.1.3.1) (table.caption.7)]
>>
endobj
-1024 0 obj
+1035 0 obj
+<<
+/Kids [1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R]
+/Limits [(Doc-Start) (subsubsection.3.3.2.7)]
+>>
+endobj
+1036 0 obj
<<
-/Kids [1022 0 R 1023 0 R]
+/Kids [1034 0 R]
+/Limits [(subsubsection.4.1.3.1) (table.caption.7)]
+>>
+endobj
+1037 0 obj
+<<
+/Kids [1035 0 R 1036 0 R]
/Limits [(Doc-Start) (table.caption.7)]
>>
endobj
-1025 0 obj
+1038 0 obj
<<
-/Dests 1024 0 R
+/Dests 1037 0 R
>>
endobj
-1026 0 obj
+1039 0 obj
<<
/Type /Catalog
-/Pages 975 0 R
-/Outlines 976 0 R
-/Names 1025 0 R
+/Pages 987 0 R
+/Outlines 988 0 R
+/Names 1038 0 R
/PageMode/FullScreen/PageLabels<</Nums[0<</S/D>>1<</S/D>>2<</S/D>>]>>
/OpenAction 293 0 R
>>
endobj
-1027 0 obj
+1040 0 obj
<<
/Producer (MiKTeX pdfTeX-1.40.24)
-/Author(\376\377\000A\000n\000d\000r\000e\000w\000\040\000P\000a\000r\000s\000l\000o\000e\000,\000\040\000\050\000a\000j\000p\000a\000r\000s\000l\000o\000e\000@\000g\000m\000a\000i\000l\000.\000c\000o\000m\000\051)/Title(\376\377\000d\000i\000f\000f\000c\000o\000e\000f\000f\000\040\000\040\000a\000\040\000L\000a\000T\000e\000X\000\040\000p\000a\000c\000k\000a\000g\000e\000\040\000t\000o\000\040\000e\000a\000s\000e\000\040\000t\000h\000e\000\040\000\040\000w\000r\000i\000t\000i\000n\000g\000\040\000o\000f\000\040\000d\000i\000f\000f\000e\000r\000e\000n\000t\000i\000a\000l\000\040\000c\000o\000e\000f\000f\000i\000c\000i\000e\000n\000t\000s\000\040\000\040\000V\000e\000r\000s\000i\000o\000n\000\040\0005\000.\0001)/Subject()/Creator(LaTeX with hyperref)/Keywords()
-/CreationDate (D:20230116212246+13'00')
-/ModDate (D:20230116212246+13'00')
+/Author(\376\377\000A\000n\000d\000r\000e\000w\000\040\000P\000a\000r\000s\000l\000o\000e\000,\000\040\000\050\000a\000j\000p\000a\000r\000s\000l\000o\000e\000@\000g\000m\000a\000i\000l\000.\000c\000o\000m\000\051)/Title(\376\377\000d\000i\000f\000f\000c\000o\000e\000f\000f\000\040\000\040\000a\000\040\000L\000a\000T\000e\000X\000\040\000p\000a\000c\000k\000a\000g\000e\000\040\000t\000o\000\040\000e\000a\000s\000e\000\040\000t\000h\000e\000\040\000\040\000w\000r\000i\000t\000i\000n\000g\000\040\000o\000f\000\040\000d\000i\000f\000f\000e\000r\000e\000n\000t\000i\000a\000l\000\040\000c\000o\000e\000f\000f\000i\000c\000i\000e\000n\000t\000s\000\040\000\040\000V\000e\000r\000s\000i\000o\000n\000\040\0005\000.\0002)/Subject()/Creator(LaTeX with hyperref)/Keywords()
+/CreationDate (D:20230124081259+13'00')
+/ModDate (D:20230124081259+13'00')
/Trapped /False
/PTEX.Fullbanner (This is MiKTeX-pdfTeX 4.13.0 (1.40.24))
>>
endobj
xref
-0 1028
+0 1041
0000000000 65535 f
0000000015 00000 n
-0000040773 00000 n
-0000790941 00000 n
+0000040768 00000 n
+0000792595 00000 n
0000000060 00000 n
0000000159 00000 n
-0000040833 00000 n
-0000790871 00000 n
+0000040828 00000 n
+0000792525 00000 n
0000000206 00000 n
0000000333 00000 n
-0000048502 00000 n
-0000790800 00000 n
+0000048497 00000 n
+0000792454 00000 n
0000000380 00000 n
0000000602 00000 n
-0000057083 00000 n
-0000790677 00000 n
+0000057078 00000 n
+0000792331 00000 n
0000000648 00000 n
0000000764 00000 n
-0000057206 00000 n
-0000790603 00000 n
+0000057201 00000 n
+0000792257 00000 n
0000000812 00000 n
0000000892 00000 n
-0000061269 00000 n
-0000790493 00000 n
+0000061615 00000 n
+0000792147 00000 n
0000000940 00000 n
0000001048 00000 n
-0000065275 00000 n
-0000790382 00000 n
+0000065509 00000 n
+0000792036 00000 n
0000001101 00000 n
0000001330 00000 n
-0000074028 00000 n
-0000790321 00000 n
+0000074295 00000 n
+0000791975 00000 n
0000001388 00000 n
0000001541 00000 n
-0000074089 00000 n
-0000790234 00000 n
+0000074356 00000 n
+0000791888 00000 n
0000001594 00000 n
0000001780 00000 n
-0000077136 00000 n
-0000790110 00000 n
+0000077409 00000 n
+0000791764 00000 n
0000001833 00000 n
0000002034 00000 n
-0000079811 00000 n
-0000790036 00000 n
+0000080188 00000 n
+0000791690 00000 n
0000002092 00000 n
0000002321 00000 n
-0000083309 00000 n
-0000789962 00000 n
+0000083686 00000 n
+0000791616 00000 n
0000002379 00000 n
0000002567 00000 n
-0000083370 00000 n
-0000789838 00000 n
+0000083747 00000 n
+0000791492 00000 n
0000002620 00000 n
0000002907 00000 n
-0000086666 00000 n
-0000789764 00000 n
+0000087043 00000 n
+0000791418 00000 n
0000002965 00000 n
0000003095 00000 n
-0000086727 00000 n
-0000789677 00000 n
+0000087104 00000 n
+0000791331 00000 n
0000003153 00000 n
0000003344 00000 n
-0000090203 00000 n
-0000789603 00000 n
+0000090580 00000 n
+0000791257 00000 n
0000003402 00000 n
0000003629 00000 n
-0000093268 00000 n
-0000789479 00000 n
+0000093645 00000 n
+0000791133 00000 n
0000003682 00000 n
0000003873 00000 n
-0000096120 00000 n
-0000789405 00000 n
+0000096497 00000 n
+0000791059 00000 n
0000003931 00000 n
0000004185 00000 n
-0000096181 00000 n
-0000789318 00000 n
+0000096558 00000 n
+0000790972 00000 n
0000004243 00000 n
0000004502 00000 n
-0000099252 00000 n
-0000789231 00000 n
+0000099629 00000 n
+0000790885 00000 n
0000004560 00000 n
0000004685 00000 n
-0000101808 00000 n
-0000789144 00000 n
+0000102185 00000 n
+0000790798 00000 n
0000004743 00000 n
0000004886 00000 n
-0000105193 00000 n
-0000789057 00000 n
+0000105570 00000 n
+0000790711 00000 n
0000004944 00000 n
0000005239 00000 n
-0000105254 00000 n
-0000788983 00000 n
+0000105631 00000 n
+0000790637 00000 n
0000005297 00000 n
0000005506 00000 n
-0000108652 00000 n
-0000788909 00000 n
+0000109029 00000 n
+0000790563 00000 n
0000005559 00000 n
0000005810 00000 n
-0000116130 00000 n
-0000788780 00000 n
+0000116507 00000 n
+0000790434 00000 n
0000005856 00000 n
0000006059 00000 n
-0000116191 00000 n
-0000788702 00000 n
+0000116568 00000 n
+0000790356 00000 n
0000006108 00000 n
0000006252 00000 n
-0000120024 00000 n
-0000788572 00000 n
+0000120401 00000 n
+0000790226 00000 n
0000006301 00000 n
0000006519 00000 n
-0000134703 00000 n
-0000788493 00000 n
+0000135080 00000 n
+0000790147 00000 n
0000006573 00000 n
0000006906 00000 n
-0000138774 00000 n
-0000788400 00000 n
+0000139151 00000 n
+0000790054 00000 n
0000006960 00000 n
0000007283 00000 n
-0000138836 00000 n
-0000788307 00000 n
+0000139213 00000 n
+0000789961 00000 n
0000007337 00000 n
0000007650 00000 n
-0000142776 00000 n
-0000788228 00000 n
+0000143153 00000 n
+0000789882 00000 n
0000007704 00000 n
0000008030 00000 n
-0000142838 00000 n
-0000788098 00000 n
+0000143215 00000 n
+0000789752 00000 n
0000008079 00000 n
0000008315 00000 n
-0000146731 00000 n
-0000787980 00000 n
+0000147108 00000 n
+0000789634 00000 n
0000008369 00000 n
0000008501 00000 n
-0000150305 00000 n
-0000787915 00000 n
+0000150670 00000 n
+0000789569 00000 n
0000008560 00000 n
0000008717 00000 n
-0000150366 00000 n
-0000787783 00000 n
+0000150731 00000 n
+0000789437 00000 n
0000008771 00000 n
0000008938 00000 n
-0000155611 00000 n
-0000787704 00000 n
+0000155976 00000 n
+0000789358 00000 n
0000008997 00000 n
0000009179 00000 n
-0000155735 00000 n
-0000787611 00000 n
+0000156100 00000 n
+0000789265 00000 n
0000009238 00000 n
0000009495 00000 n
-0000158367 00000 n
-0000787518 00000 n
+0000158732 00000 n
+0000789172 00000 n
0000009554 00000 n
0000009726 00000 n
-0000161059 00000 n
-0000787425 00000 n
+0000161424 00000 n
+0000789079 00000 n
0000009785 00000 n
0000010012 00000 n
-0000163331 00000 n
-0000787332 00000 n
+0000163696 00000 n
+0000788986 00000 n
0000010071 00000 n
0000010250 00000 n
-0000166288 00000 n
-0000787239 00000 n
+0000167213 00000 n
+0000788893 00000 n
0000010309 00000 n
0000010506 00000 n
-0000166350 00000 n
-0000787160 00000 n
+0000167275 00000 n
+0000788814 00000 n
0000010565 00000 n
0000010796 00000 n
-0000169275 00000 n
-0000787081 00000 n
+0000170131 00000 n
+0000788735 00000 n
0000010850 00000 n
0000010989 00000 n
-0000172942 00000 n
-0000786965 00000 n
+0000172971 00000 n
+0000788619 00000 n
0000011038 00000 n
0000011228 00000 n
-0000176212 00000 n
-0000786900 00000 n
+0000176330 00000 n
+0000788554 00000 n
0000011282 00000 n
0000011472 00000 n
-0000179780 00000 n
-0000786769 00000 n
+0000180756 00000 n
+0000788423 00000 n
0000011519 00000 n
0000011701 00000 n
-0000179842 00000 n
-0000786652 00000 n
+0000180818 00000 n
+0000788306 00000 n
0000011750 00000 n
0000011866 00000 n
-0000183480 00000 n
-0000786573 00000 n
+0000184494 00000 n
+0000788227 00000 n
0000011920 00000 n
0000012049 00000 n
-0000183604 00000 n
-0000786480 00000 n
+0000184618 00000 n
+0000788134 00000 n
0000012103 00000 n
0000012260 00000 n
-0000187378 00000 n
-0000786348 00000 n
+0000188417 00000 n
+0000788002 00000 n
0000012314 00000 n
0000012529 00000 n
-0000190336 00000 n
-0000786283 00000 n
+0000191244 00000 n
+0000787937 00000 n
0000012588 00000 n
0000012727 00000 n
-0000190398 00000 n
-0000786190 00000 n
+0000194089 00000 n
+0000787844 00000 n
0000012781 00000 n
0000012930 00000 n
-0000193454 00000 n
-0000786111 00000 n
+0000194151 00000 n
+0000787765 00000 n
0000012984 00000 n
0000013090 00000 n
-0000193764 00000 n
-0000785994 00000 n
+0000194461 00000 n
+0000787648 00000 n
0000013139 00000 n
0000013235 00000 n
-0000197150 00000 n
-0000785915 00000 n
+0000197722 00000 n
+0000787569 00000 n
0000013289 00000 n
0000013418 00000 n
-0000197274 00000 n
-0000785822 00000 n
+0000197846 00000 n
+0000787476 00000 n
0000013472 00000 n
0000013662 00000 n
-0000199891 00000 n
-0000785743 00000 n
+0000201675 00000 n
+0000787397 00000 n
0000013716 00000 n
0000013865 00000 n
-0000201725 00000 n
-0000785625 00000 n
+0000203470 00000 n
+0000787279 00000 n
0000013912 00000 n
0000013998 00000 n
-0000201787 00000 n
-0000785546 00000 n
+0000203532 00000 n
+0000787200 00000 n
0000014047 00000 n
0000014138 00000 n
-0000205107 00000 n
-0000785415 00000 n
+0000206853 00000 n
+0000787069 00000 n
0000014187 00000 n
0000014283 00000 n
-0000206325 00000 n
-0000785336 00000 n
+0000208071 00000 n
+0000786990 00000 n
0000014337 00000 n
0000014497 00000 n
-0000206387 00000 n
-0000785204 00000 n
+0000208133 00000 n
+0000786858 00000 n
0000014551 00000 n
0000014794 00000 n
-0000207674 00000 n
-0000785139 00000 n
+0000209420 00000 n
+0000786793 00000 n
0000014853 00000 n
0000014949 00000 n
-0000207735 00000 n
-0000785007 00000 n
+0000209481 00000 n
+0000786661 00000 n
0000015003 00000 n
0000015236 00000 n
-0000208982 00000 n
-0000784942 00000 n
+0000210728 00000 n
+0000786596 00000 n
0000015295 00000 n
0000015391 00000 n
-0000209044 00000 n
-0000784810 00000 n
+0000210790 00000 n
+0000786464 00000 n
0000015445 00000 n
0000015643 00000 n
-0000209106 00000 n
-0000784745 00000 n
+0000210852 00000 n
+0000786399 00000 n
0000015702 00000 n
0000015798 00000 n
-0000209168 00000 n
-0000784652 00000 n
+0000210914 00000 n
+0000786306 00000 n
0000015852 00000 n
0000015997 00000 n
-0000210440 00000 n
-0000784573 00000 n
+0000212186 00000 n
+0000786227 00000 n
0000016051 00000 n
0000016216 00000 n
-0000210502 00000 n
-0000784480 00000 n
+0000212248 00000 n
+0000786134 00000 n
0000016265 00000 n
0000016437 00000 n
-0000213500 00000 n
-0000784387 00000 n
+0000215246 00000 n
+0000786041 00000 n
0000016486 00000 n
0000016640 00000 n
-0000215154 00000 n
-0000784294 00000 n
+0000216900 00000 n
+0000785948 00000 n
0000016689 00000 n
0000016848 00000 n
-0000217968 00000 n
-0000784215 00000 n
+0000219714 00000 n
+0000785869 00000 n
0000016897 00000 n
0000017026 00000 n
0000017519 00000 n
@@ -10086,22 +10244,22 @@ xref
0000017076 00000 n
0000017631 00000 n
0000017692 00000 n
-0000766032 00000 n
-0000754893 00000 n
-0000753779 00000 n
-0000759344 00000 n
-0000782554 00000 n
+0000767601 00000 n
+0000756462 00000 n
+0000755348 00000 n
+0000760913 00000 n
+0000784123 00000 n
0000019385 00000 n
0000019273 00000 n
0000017865 00000 n
-0000749318 00000 n
-0000764917 00000 n
-0000752665 00000 n
-0000757119 00000 n
-0000780817 00000 n
-0000772680 00000 n
-0000778350 00000 n
-0000770928 00000 n
+0000750887 00000 n
+0000766486 00000 n
+0000754234 00000 n
+0000758688 00000 n
+0000782386 00000 n
+0000774249 00000 n
+0000779919 00000 n
+0000772497 00000 n
0000022117 00000 n
0000022270 00000 n
0000022547 00000 n
@@ -10141,685 +10299,698 @@ xref
0000029225 00000 n
0000029379 00000 n
0000029537 00000 n
-0000031917 00000 n
+0000031912 00000 n
0000029814 00000 n
0000024239 00000 n
0000022697 00000 n
0000029691 00000 n
0000029752 00000 n
-0000750432 00000 n
-0000032075 00000 n
-0000032239 00000 n
-0000032397 00000 n
-0000032560 00000 n
-0000032724 00000 n
-0000032888 00000 n
-0000033052 00000 n
-0000033216 00000 n
-0000033380 00000 n
-0000033544 00000 n
-0000033702 00000 n
-0000033856 00000 n
-0000034013 00000 n
-0000034165 00000 n
-0000034318 00000 n
-0000034476 00000 n
-0000034634 00000 n
-0000034792 00000 n
-0000034956 00000 n
-0000035114 00000 n
-0000035272 00000 n
-0000035426 00000 n
-0000035584 00000 n
-0000035740 00000 n
-0000035898 00000 n
-0000036050 00000 n
-0000036204 00000 n
-0000036357 00000 n
-0000036515 00000 n
-0000036673 00000 n
-0000036837 00000 n
-0000036995 00000 n
-0000037159 00000 n
-0000037317 00000 n
-0000037481 00000 n
-0000037639 00000 n
-0000037797 00000 n
-0000037951 00000 n
-0000038105 00000 n
-0000038258 00000 n
-0000038472 00000 n
-0000031465 00000 n
+0000752001 00000 n
+0000032070 00000 n
+0000032234 00000 n
+0000032392 00000 n
+0000032555 00000 n
+0000032719 00000 n
+0000032883 00000 n
+0000033047 00000 n
+0000033211 00000 n
+0000033375 00000 n
+0000033539 00000 n
+0000033697 00000 n
+0000033851 00000 n
+0000034008 00000 n
+0000034160 00000 n
+0000034313 00000 n
+0000034471 00000 n
+0000034629 00000 n
+0000034787 00000 n
+0000034951 00000 n
+0000035109 00000 n
+0000035267 00000 n
+0000035421 00000 n
+0000035579 00000 n
+0000035735 00000 n
+0000035893 00000 n
+0000036045 00000 n
+0000036199 00000 n
+0000036352 00000 n
+0000036510 00000 n
+0000036668 00000 n
+0000036832 00000 n
+0000036990 00000 n
+0000037154 00000 n
+0000037312 00000 n
+0000037476 00000 n
+0000037634 00000 n
+0000037792 00000 n
+0000037946 00000 n
+0000038100 00000 n
+0000038253 00000 n
+0000038467 00000 n
+0000031460 00000 n
0000029925 00000 n
-0000038411 00000 n
-0000040558 00000 n
-0000041079 00000 n
-0000040426 00000 n
-0000038570 00000 n
-0000040712 00000 n
-0000760459 00000 n
-0000040893 00000 n
-0000040955 00000 n
-0000756007 00000 n
-0000041017 00000 n
-0000758231 00000 n
-0000761572 00000 n
-0000043729 00000 n
-0000043888 00000 n
-0000044050 00000 n
-0000044204 00000 n
-0000044363 00000 n
-0000044892 00000 n
-0000043565 00000 n
-0000041243 00000 n
-0000044521 00000 n
-0000044582 00000 n
-0000044644 00000 n
-0000044706 00000 n
-0000044768 00000 n
-0000044830 00000 n
-0000773747 00000 n
-0000770048 00000 n
-0000782671 00000 n
-0000048284 00000 n
-0000048748 00000 n
-0000048152 00000 n
-0000045056 00000 n
-0000048441 00000 n
-0000782361 00000 n
-0000048563 00000 n
-0000048624 00000 n
-0000048686 00000 n
-0000779584 00000 n
-0000052693 00000 n
-0000053156 00000 n
-0000052561 00000 n
-0000048965 00000 n
-0000052847 00000 n
-0000052908 00000 n
-0000052970 00000 n
-0000053032 00000 n
-0000777118 00000 n
-0000053094 00000 n
-0000774814 00000 n
-0000056058 00000 n
-0000056212 00000 n
-0000057329 00000 n
-0000055902 00000 n
-0000053387 00000 n
-0000057022 00000 n
-0000775878 00000 n
-0000057144 00000 n
-0000057267 00000 n
-0000767146 00000 n
-0000056482 00000 n
-0000056753 00000 n
-0000060105 00000 n
-0000060257 00000 n
-0000060411 00000 n
-0000060569 00000 n
-0000060733 00000 n
-0000060891 00000 n
-0000061049 00000 n
-0000065060 00000 n
-0000061330 00000 n
-0000059925 00000 n
-0000057572 00000 n
-0000061208 00000 n
-0000069197 00000 n
-0000065336 00000 n
-0000064928 00000 n
-0000061521 00000 n
-0000065214 00000 n
-0000069351 00000 n
-0000069505 00000 n
-0000069659 00000 n
-0000069812 00000 n
-0000069976 00000 n
-0000070130 00000 n
-0000070284 00000 n
-0000070438 00000 n
-0000070777 00000 n
-0000069001 00000 n
-0000065527 00000 n
-0000070592 00000 n
-0000070653 00000 n
-0000751547 00000 n
-0000070715 00000 n
-0000782788 00000 n
-0000073650 00000 n
-0000073803 00000 n
-0000074149 00000 n
-0000073510 00000 n
-0000071022 00000 n
-0000073967 00000 n
-0000763803 00000 n
-0000076916 00000 n
-0000077197 00000 n
-0000076784 00000 n
-0000074352 00000 n
-0000077075 00000 n
-0000079872 00000 n
-0000079638 00000 n
-0000077374 00000 n
-0000079750 00000 n
-0000082624 00000 n
-0000082778 00000 n
-0000082932 00000 n
-0000083094 00000 n
-0000083431 00000 n
-0000082468 00000 n
-0000080062 00000 n
-0000083248 00000 n
-0000086451 00000 n
-0000089671 00000 n
-0000086788 00000 n
-0000086319 00000 n
-0000083661 00000 n
-0000086605 00000 n
-0000089835 00000 n
-0000089988 00000 n
-0000090264 00000 n
-0000089523 00000 n
-0000086964 00000 n
-0000090142 00000 n
-0000782905 00000 n
-0000093329 00000 n
-0000093095 00000 n
-0000090454 00000 n
-0000093207 00000 n
-0000096241 00000 n
-0000095947 00000 n
-0000093506 00000 n
-0000096059 00000 n
-0000099313 00000 n
-0000099079 00000 n
-0000096445 00000 n
-0000099191 00000 n
-0000101869 00000 n
-0000101635 00000 n
-0000099503 00000 n
-0000101747 00000 n
-0000104975 00000 n
-0000105315 00000 n
-0000104843 00000 n
-0000102059 00000 n
-0000105132 00000 n
-0000771804 00000 n
-0000108278 00000 n
-0000108430 00000 n
-0000108713 00000 n
-0000108138 00000 n
-0000105544 00000 n
-0000108591 00000 n
-0000783022 00000 n
-0000112084 00000 n
-0000112238 00000 n
-0000112395 00000 n
-0000112609 00000 n
-0000111936 00000 n
-0000108890 00000 n
-0000112548 00000 n
-0000115458 00000 n
-0000115612 00000 n
-0000115917 00000 n
-0000115764 00000 n
-0000116376 00000 n
-0000115302 00000 n
-0000112773 00000 n
-0000116069 00000 n
-0000116252 00000 n
-0000116314 00000 n
-0000119434 00000 n
-0000119588 00000 n
-0000119745 00000 n
-0000120270 00000 n
-0000119286 00000 n
-0000116554 00000 n
-0000119901 00000 n
-0000119962 00000 n
-0000781416 00000 n
-0000120085 00000 n
-0000120146 00000 n
-0000120208 00000 n
-0000125156 00000 n
-0000123302 00000 n
-0000123459 00000 n
-0000123616 00000 n
-0000123831 00000 n
-0000123154 00000 n
-0000120422 00000 n
-0000123770 00000 n
-0000125218 00000 n
-0000124983 00000 n
-0000123957 00000 n
-0000125095 00000 n
-0000768259 00000 n
-0000128467 00000 n
-0000128686 00000 n
-0000128335 00000 n
-0000125317 00000 n
-0000128625 00000 n
-0000783139 00000 n
-0000131644 00000 n
-0000131471 00000 n
-0000128890 00000 n
-0000131583 00000 n
-0000137141 00000 n
-0000137299 00000 n
-0000134765 00000 n
-0000134530 00000 n
-0000131808 00000 n
-0000134642 00000 n
-0000137458 00000 n
-0000137615 00000 n
-0000137772 00000 n
-0000137931 00000 n
-0000138089 00000 n
-0000138245 00000 n
-0000141943 00000 n
-0000142099 00000 n
-0000138897 00000 n
-0000136953 00000 n
-0000134916 00000 n
-0000138404 00000 n
-0000138465 00000 n
-0000138527 00000 n
-0000138588 00000 n
-0000138650 00000 n
-0000138712 00000 n
-0000142256 00000 n
-0000142409 00000 n
-0000142563 00000 n
-0000143085 00000 n
-0000141779 00000 n
-0000139077 00000 n
-0000142715 00000 n
-0000142899 00000 n
-0000142961 00000 n
-0000143023 00000 n
-0000146363 00000 n
-0000146517 00000 n
-0000146793 00000 n
-0000146223 00000 n
-0000143211 00000 n
-0000146670 00000 n
-0000150428 00000 n
-0000150008 00000 n
-0000146984 00000 n
-0000150120 00000 n
-0000150181 00000 n
-0000762687 00000 n
-0000150243 00000 n
-0000783256 00000 n
-0000153070 00000 n
-0000152711 00000 n
-0000150581 00000 n
-0000152823 00000 n
-0000152884 00000 n
-0000152946 00000 n
-0000153008 00000 n
-0000155796 00000 n
-0000155438 00000 n
-0000153246 00000 n
-0000155550 00000 n
-0000155673 00000 n
-0000158429 00000 n
-0000158194 00000 n
-0000155987 00000 n
-0000158306 00000 n
-0000161119 00000 n
-0000160886 00000 n
-0000158619 00000 n
-0000160998 00000 n
-0000163393 00000 n
-0000163158 00000 n
-0000161295 00000 n
-0000163270 00000 n
-0000166412 00000 n
-0000166115 00000 n
-0000163543 00000 n
-0000166227 00000 n
-0000783373 00000 n
-0000169337 00000 n
-0000169102 00000 n
-0000166602 00000 n
-0000169214 00000 n
-0000172399 00000 n
-0000172563 00000 n
-0000172722 00000 n
-0000173004 00000 n
-0000172251 00000 n
-0000169528 00000 n
-0000172881 00000 n
-0000175838 00000 n
-0000175992 00000 n
-0000176274 00000 n
-0000175698 00000 n
-0000173181 00000 n
-0000176151 00000 n
-0000177622 00000 n
-0000177449 00000 n
-0000176400 00000 n
-0000177561 00000 n
-0000179904 00000 n
-0000179607 00000 n
-0000177721 00000 n
-0000179719 00000 n
-0000769376 00000 n
-0000182778 00000 n
-0000182942 00000 n
-0000183101 00000 n
-0000183260 00000 n
-0000186811 00000 n
-0000183727 00000 n
-0000182622 00000 n
-0000180080 00000 n
-0000183419 00000 n
-0000183542 00000 n
-0000183665 00000 n
-0000783490 00000 n
-0000186968 00000 n
-0000187440 00000 n
-0000186671 00000 n
-0000183946 00000 n
-0000187132 00000 n
-0000187193 00000 n
-0000187255 00000 n
-0000187317 00000 n
-0000190460 00000 n
-0000190163 00000 n
-0000187604 00000 n
-0000190275 00000 n
-0000193826 00000 n
-0000193281 00000 n
-0000190651 00000 n
-0000193393 00000 n
-0000193516 00000 n
-0000193578 00000 n
-0000193640 00000 n
-0000193702 00000 n
-0000196615 00000 n
-0000196774 00000 n
-0000196933 00000 n
-0000197520 00000 n
-0000196467 00000 n
-0000193977 00000 n
-0000197089 00000 n
-0000197212 00000 n
-0000197335 00000 n
-0000197396 00000 n
-0000197458 00000 n
-0000199953 00000 n
-0000199718 00000 n
-0000197712 00000 n
-0000199830 00000 n
-0000202344 00000 n
-0000201552 00000 n
-0000200104 00000 n
-0000201664 00000 n
+0000038406 00000 n
+0000040553 00000 n
+0000041074 00000 n
+0000040421 00000 n
+0000038565 00000 n
+0000040707 00000 n
+0000762028 00000 n
+0000040888 00000 n
+0000040950 00000 n
+0000757576 00000 n
+0000041012 00000 n
+0000759800 00000 n
+0000763141 00000 n
+0000043724 00000 n
+0000043883 00000 n
+0000044045 00000 n
+0000044199 00000 n
+0000044358 00000 n
+0000044887 00000 n
+0000043560 00000 n
+0000041238 00000 n
+0000044516 00000 n
+0000044577 00000 n
+0000044639 00000 n
+0000044701 00000 n
+0000044763 00000 n
+0000044825 00000 n
+0000775316 00000 n
+0000771617 00000 n
+0000784240 00000 n
+0000048279 00000 n
+0000048743 00000 n
+0000048147 00000 n
+0000045051 00000 n
+0000048436 00000 n
+0000783930 00000 n
+0000048558 00000 n
+0000048619 00000 n
+0000048681 00000 n
+0000781153 00000 n
+0000052688 00000 n
+0000053151 00000 n
+0000052556 00000 n
+0000048960 00000 n
+0000052842 00000 n
+0000052903 00000 n
+0000052965 00000 n
+0000053027 00000 n
+0000778687 00000 n
+0000053089 00000 n
+0000776383 00000 n
+0000056053 00000 n
+0000056207 00000 n
+0000057324 00000 n
+0000055897 00000 n
+0000053382 00000 n
+0000057017 00000 n
+0000777447 00000 n
+0000057139 00000 n
+0000057262 00000 n
+0000768715 00000 n
+0000056477 00000 n
+0000056748 00000 n
+0000060286 00000 n
+0000060438 00000 n
+0000060592 00000 n
+0000060751 00000 n
+0000060915 00000 n
+0000061074 00000 n
+0000061233 00000 n
+0000061390 00000 n
+0000061676 00000 n
+0000060098 00000 n
+0000057567 00000 n
+0000061554 00000 n
+0000065294 00000 n
+0000069489 00000 n
+0000065570 00000 n
+0000065162 00000 n
+0000061854 00000 n
+0000065448 00000 n
+0000069643 00000 n
+0000069797 00000 n
+0000069951 00000 n
+0000070104 00000 n
+0000070268 00000 n
+0000070421 00000 n
+0000070574 00000 n
+0000070728 00000 n
+0000071067 00000 n
+0000069293 00000 n
+0000065761 00000 n
+0000070882 00000 n
+0000070943 00000 n
+0000753116 00000 n
+0000071005 00000 n
+0000784357 00000 n
+0000073916 00000 n
+0000074070 00000 n
+0000074417 00000 n
+0000073776 00000 n
+0000071325 00000 n
+0000074234 00000 n
+0000765372 00000 n
+0000077189 00000 n
+0000077470 00000 n
+0000077057 00000 n
+0000074607 00000 n
+0000077348 00000 n
+0000080249 00000 n
+0000080015 00000 n
+0000077647 00000 n
+0000080127 00000 n
+0000083001 00000 n
+0000083155 00000 n
+0000083309 00000 n
+0000083471 00000 n
+0000083808 00000 n
+0000082845 00000 n
+0000080439 00000 n
+0000083625 00000 n
+0000086828 00000 n
+0000090048 00000 n
+0000087165 00000 n
+0000086696 00000 n
+0000084038 00000 n
+0000086982 00000 n
+0000090212 00000 n
+0000090365 00000 n
+0000090641 00000 n
+0000089900 00000 n
+0000087341 00000 n
+0000090519 00000 n
+0000784474 00000 n
+0000093706 00000 n
+0000093472 00000 n
+0000090831 00000 n
+0000093584 00000 n
+0000096618 00000 n
+0000096324 00000 n
+0000093883 00000 n
+0000096436 00000 n
+0000099690 00000 n
+0000099456 00000 n
+0000096822 00000 n
+0000099568 00000 n
+0000102246 00000 n
+0000102012 00000 n
+0000099880 00000 n
+0000102124 00000 n
+0000105352 00000 n
+0000105692 00000 n
+0000105220 00000 n
+0000102436 00000 n
+0000105509 00000 n
+0000773373 00000 n
+0000108655 00000 n
+0000108807 00000 n
+0000109090 00000 n
+0000108515 00000 n
+0000105921 00000 n
+0000108968 00000 n
+0000784591 00000 n
+0000112461 00000 n
+0000112615 00000 n
+0000112772 00000 n
+0000112986 00000 n
+0000112313 00000 n
+0000109267 00000 n
+0000112925 00000 n
+0000115835 00000 n
+0000115989 00000 n
+0000116294 00000 n
+0000116141 00000 n
+0000116753 00000 n
+0000115679 00000 n
+0000113150 00000 n
+0000116446 00000 n
+0000116629 00000 n
+0000116691 00000 n
+0000119811 00000 n
+0000119965 00000 n
+0000120122 00000 n
+0000120647 00000 n
+0000119663 00000 n
+0000116931 00000 n
+0000120278 00000 n
+0000120339 00000 n
+0000782985 00000 n
+0000120462 00000 n
+0000120523 00000 n
+0000120585 00000 n
+0000125533 00000 n
+0000123679 00000 n
+0000123836 00000 n
+0000123993 00000 n
+0000124208 00000 n
+0000123531 00000 n
+0000120799 00000 n
+0000124147 00000 n
+0000125595 00000 n
+0000125360 00000 n
+0000124334 00000 n
+0000125472 00000 n
+0000769828 00000 n
+0000128844 00000 n
+0000129063 00000 n
+0000128712 00000 n
+0000125694 00000 n
+0000129002 00000 n
+0000784708 00000 n
+0000132021 00000 n
+0000131848 00000 n
+0000129267 00000 n
+0000131960 00000 n
+0000137518 00000 n
+0000137676 00000 n
+0000135142 00000 n
+0000134907 00000 n
+0000132185 00000 n
+0000135019 00000 n
+0000137835 00000 n
+0000137992 00000 n
+0000138149 00000 n
+0000138308 00000 n
+0000138466 00000 n
+0000138622 00000 n
+0000142320 00000 n
+0000142476 00000 n
+0000139274 00000 n
+0000137330 00000 n
+0000135293 00000 n
+0000138781 00000 n
+0000138842 00000 n
+0000138904 00000 n
+0000138965 00000 n
+0000139027 00000 n
+0000139089 00000 n
+0000142633 00000 n
+0000142786 00000 n
+0000142940 00000 n
+0000143462 00000 n
+0000142156 00000 n
+0000139454 00000 n
+0000143092 00000 n
+0000143276 00000 n
+0000143338 00000 n
+0000143400 00000 n
+0000146740 00000 n
+0000146894 00000 n
+0000147170 00000 n
+0000146600 00000 n
+0000143588 00000 n
+0000147047 00000 n
+0000150793 00000 n
+0000150373 00000 n
+0000147361 00000 n
+0000150485 00000 n
+0000150546 00000 n
+0000764256 00000 n
+0000150608 00000 n
+0000784825 00000 n
+0000153435 00000 n
+0000153076 00000 n
+0000150946 00000 n
+0000153188 00000 n
+0000153249 00000 n
+0000153311 00000 n
+0000153373 00000 n
+0000156161 00000 n
+0000155803 00000 n
+0000153611 00000 n
+0000155915 00000 n
+0000156038 00000 n
+0000158794 00000 n
+0000158559 00000 n
+0000156352 00000 n
+0000158671 00000 n
+0000161484 00000 n
+0000161251 00000 n
+0000158984 00000 n
+0000161363 00000 n
+0000163758 00000 n
+0000163523 00000 n
+0000161660 00000 n
+0000163635 00000 n
+0000166998 00000 n
+0000167337 00000 n
+0000166866 00000 n
+0000163908 00000 n
+0000167152 00000 n
+0000784942 00000 n
+0000170193 00000 n
+0000169958 00000 n
+0000167527 00000 n
+0000170070 00000 n
+0000172587 00000 n
+0000172751 00000 n
+0000175957 00000 n
+0000173033 00000 n
+0000172447 00000 n
+0000170384 00000 n
+0000172910 00000 n
+0000176116 00000 n
+0000178378 00000 n
+0000176392 00000 n
+0000175817 00000 n
+0000173210 00000 n
+0000176269 00000 n
+0000178598 00000 n
+0000178246 00000 n
+0000176518 00000 n
+0000178537 00000 n
+0000180880 00000 n
+0000180583 00000 n
+0000178697 00000 n
+0000180695 00000 n
+0000770945 00000 n
+0000183790 00000 n
+0000183954 00000 n
+0000184115 00000 n
+0000184274 00000 n
+0000187628 00000 n
+0000187787 00000 n
+0000184680 00000 n
+0000183634 00000 n
+0000181056 00000 n
+0000184433 00000 n
+0000184556 00000 n
+0000785059 00000 n
+0000187944 00000 n
+0000188478 00000 n
+0000187480 00000 n
+0000184899 00000 n
+0000188108 00000 n
+0000188169 00000 n
+0000188231 00000 n
+0000188293 00000 n
+0000188355 00000 n
+0000191306 00000 n
+0000191071 00000 n
+0000188642 00000 n
+0000191183 00000 n
+0000194523 00000 n
+0000193916 00000 n
+0000191484 00000 n
+0000194028 00000 n
+0000194213 00000 n
+0000194275 00000 n
+0000194337 00000 n
+0000194399 00000 n
+0000197187 00000 n
+0000197345 00000 n
+0000197504 00000 n
+0000198032 00000 n
+0000197039 00000 n
+0000194635 00000 n
+0000197661 00000 n
+0000197784 00000 n
+0000197908 00000 n
+0000197970 00000 n
+0000200391 00000 n
+0000200156 00000 n
+0000198224 00000 n
+0000200268 00000 n
+0000200329 00000 n
+0000201737 00000 n
+0000201502 00000 n
+0000200515 00000 n
+0000201614 00000 n
+0000785176 00000 n
+0000204089 00000 n
+0000203297 00000 n
0000201849 00000 n
-0000201911 00000 n
-0000201973 00000 n
-0000202035 00000 n
-0000202097 00000 n
-0000202159 00000 n
-0000202221 00000 n
-0000202282 00000 n
-0000783607 00000 n
-0000205169 00000 n
-0000204316 00000 n
-0000202456 00000 n
-0000204428 00000 n
-0000204489 00000 n
-0000204549 00000 n
-0000204611 00000 n
-0000204673 00000 n
-0000204735 00000 n
-0000204797 00000 n
-0000204859 00000 n
-0000204921 00000 n
-0000204983 00000 n
-0000205045 00000 n
-0000206449 00000 n
-0000206152 00000 n
-0000205321 00000 n
-0000206264 00000 n
-0000207797 00000 n
-0000207501 00000 n
-0000206561 00000 n
-0000207613 00000 n
-0000209230 00000 n
-0000208809 00000 n
-0000207922 00000 n
-0000208921 00000 n
-0000210564 00000 n
-0000210267 00000 n
-0000209355 00000 n
-0000210379 00000 n
-0000211579 00000 n
-0000211406 00000 n
-0000210676 00000 n
-0000211518 00000 n
-0000783724 00000 n
-0000212465 00000 n
-0000212292 00000 n
-0000211664 00000 n
-0000212404 00000 n
-0000213562 00000 n
-0000213327 00000 n
-0000212550 00000 n
-0000213439 00000 n
-0000215216 00000 n
-0000214981 00000 n
-0000213660 00000 n
-0000215093 00000 n
-0000218399 00000 n
-0000217795 00000 n
-0000215342 00000 n
-0000217907 00000 n
-0000218030 00000 n
-0000218091 00000 n
-0000218153 00000 n
-0000218214 00000 n
-0000218276 00000 n
-0000218337 00000 n
-0000219685 00000 n
-0000219140 00000 n
-0000218550 00000 n
-0000219252 00000 n
-0000219313 00000 n
-0000219375 00000 n
-0000219437 00000 n
-0000219499 00000 n
-0000219561 00000 n
-0000219623 00000 n
-0000219770 00000 n
-0000746699 00000 n
-0000219827 00000 n
-0000220260 00000 n
-0000220623 00000 n
-0000747529 00000 n
-0000220654 00000 n
-0000220708 00000 n
-0000221071 00000 n
-0000222161 00000 n
-0000747812 00000 n
-0000222692 00000 n
-0000223409 00000 n
-0000748048 00000 n
-0000223735 00000 n
-0000224062 00000 n
-0000748328 00000 n
-0000224124 00000 n
-0000747222 00000 n
-0000224149 00000 n
-0000224845 00000 n
-0000225503 00000 n
-0000225634 00000 n
-0000226255 00000 n
-0000226292 00000 n
-0000226892 00000 n
-0000227449 00000 n
-0000228092 00000 n
-0000228798 00000 n
-0000229486 00000 n
-0000230071 00000 n
-0000230188 00000 n
-0000230953 00000 n
-0000231344 00000 n
-0000231916 00000 n
-0000232402 00000 n
-0000232832 00000 n
-0000233399 00000 n
-0000233496 00000 n
-0000240960 00000 n
-0000241182 00000 n
-0000272184 00000 n
-0000272623 00000 n
-0000302125 00000 n
-0000302552 00000 n
-0000324111 00000 n
-0000324373 00000 n
-0000329048 00000 n
-0000329515 00000 n
-0000341672 00000 n
-0000342046 00000 n
-0000345495 00000 n
-0000345732 00000 n
-0000355551 00000 n
-0000355885 00000 n
-0000393020 00000 n
-0000393636 00000 n
-0000416648 00000 n
-0000416936 00000 n
-0000442941 00000 n
-0000443239 00000 n
-0000457886 00000 n
-0000458131 00000 n
-0000474609 00000 n
-0000474853 00000 n
-0000497680 00000 n
-0000497991 00000 n
-0000527029 00000 n
-0000527405 00000 n
-0000553618 00000 n
-0000553949 00000 n
-0000574042 00000 n
-0000574375 00000 n
-0000586487 00000 n
-0000586734 00000 n
-0000604064 00000 n
-0000604327 00000 n
-0000609070 00000 n
-0000609426 00000 n
-0000612044 00000 n
-0000612297 00000 n
-0000615398 00000 n
-0000615661 00000 n
-0000643000 00000 n
-0000643352 00000 n
-0000675438 00000 n
-0000676028 00000 n
-0000693728 00000 n
-0000693969 00000 n
-0000719892 00000 n
-0000720267 00000 n
-0000743846 00000 n
-0000744251 00000 n
-0000746449 00000 n
-0000748393 00000 n
-0000749507 00000 n
-0000750621 00000 n
-0000751743 00000 n
-0000752857 00000 n
-0000753971 00000 n
-0000755085 00000 n
-0000756197 00000 n
-0000757309 00000 n
-0000758422 00000 n
-0000759535 00000 n
-0000760650 00000 n
-0000761763 00000 n
-0000762878 00000 n
-0000763993 00000 n
-0000765108 00000 n
-0000766223 00000 n
-0000767336 00000 n
-0000768449 00000 n
-0000769537 00000 n
-0000770247 00000 n
-0000771125 00000 n
-0000772001 00000 n
-0000772876 00000 n
-0000773944 00000 n
-0000775009 00000 n
-0000776074 00000 n
-0000777307 00000 n
-0000778541 00000 n
-0000779774 00000 n
-0000781007 00000 n
-0000781580 00000 n
-0000783841 00000 n
-0000783959 00000 n
-0000784069 00000 n
-0000784139 00000 n
-0000791048 00000 n
-0000791246 00000 n
-0000791423 00000 n
-0000791593 00000 n
-0000791761 00000 n
-0000791929 00000 n
-0000792099 00000 n
-0000792268 00000 n
-0000792438 00000 n
-0000792607 00000 n
-0000792773 00000 n
-0000792950 00000 n
-0000793166 00000 n
-0000793356 00000 n
-0000793526 00000 n
-0000793695 00000 n
-0000793865 00000 n
-0000794033 00000 n
-0000794201 00000 n
-0000794371 00000 n
-0000794540 00000 n
-0000794710 00000 n
-0000794879 00000 n
-0000795045 00000 n
-0000795244 00000 n
-0000795439 00000 n
-0000795641 00000 n
-0000795844 00000 n
-0000796072 00000 n
-0000796314 00000 n
-0000796557 00000 n
-0000796800 00000 n
-0000797052 00000 n
-0000797329 00000 n
-0000797607 00000 n
-0000797890 00000 n
-0000798159 00000 n
-0000798392 00000 n
-0000798523 00000 n
-0000798635 00000 n
-0000798752 00000 n
-0000798868 00000 n
-0000798982 00000 n
-0000799110 00000 n
-0000799242 00000 n
-0000799337 00000 n
-0000799462 00000 n
-0000799548 00000 n
-0000799638 00000 n
-0000799678 00000 n
-0000799856 00000 n
+0000203409 00000 n
+0000203594 00000 n
+0000203656 00000 n
+0000203718 00000 n
+0000203780 00000 n
+0000203842 00000 n
+0000203904 00000 n
+0000203966 00000 n
+0000204027 00000 n
+0000206915 00000 n
+0000206062 00000 n
+0000204201 00000 n
+0000206174 00000 n
+0000206235 00000 n
+0000206295 00000 n
+0000206357 00000 n
+0000206419 00000 n
+0000206481 00000 n
+0000206543 00000 n
+0000206605 00000 n
+0000206667 00000 n
+0000206729 00000 n
+0000206791 00000 n
+0000208195 00000 n
+0000207898 00000 n
+0000207067 00000 n
+0000208010 00000 n
+0000209543 00000 n
+0000209247 00000 n
+0000208307 00000 n
+0000209359 00000 n
+0000210976 00000 n
+0000210555 00000 n
+0000209668 00000 n
+0000210667 00000 n
+0000212310 00000 n
+0000212013 00000 n
+0000211101 00000 n
+0000212125 00000 n
+0000785293 00000 n
+0000213325 00000 n
+0000213152 00000 n
+0000212422 00000 n
+0000213264 00000 n
+0000214211 00000 n
+0000214038 00000 n
+0000213410 00000 n
+0000214150 00000 n
+0000215308 00000 n
+0000215073 00000 n
+0000214296 00000 n
+0000215185 00000 n
+0000216962 00000 n
+0000216727 00000 n
+0000215406 00000 n
+0000216839 00000 n
+0000220145 00000 n
+0000219541 00000 n
+0000217088 00000 n
+0000219653 00000 n
+0000219776 00000 n
+0000219837 00000 n
+0000219899 00000 n
+0000219960 00000 n
+0000220022 00000 n
+0000220083 00000 n
+0000221903 00000 n
+0000221111 00000 n
+0000220296 00000 n
+0000221223 00000 n
+0000221284 00000 n
+0000221346 00000 n
+0000221408 00000 n
+0000221470 00000 n
+0000221532 00000 n
+0000221594 00000 n
+0000221656 00000 n
+0000221718 00000 n
+0000221779 00000 n
+0000221841 00000 n
+0000785410 00000 n
+0000221988 00000 n
+0000748268 00000 n
+0000222045 00000 n
+0000222478 00000 n
+0000222841 00000 n
+0000749098 00000 n
+0000222872 00000 n
+0000222926 00000 n
+0000223289 00000 n
+0000224379 00000 n
+0000749381 00000 n
+0000224910 00000 n
+0000225627 00000 n
+0000749617 00000 n
+0000225953 00000 n
+0000226280 00000 n
+0000749897 00000 n
+0000226342 00000 n
+0000748791 00000 n
+0000226367 00000 n
+0000227063 00000 n
+0000227721 00000 n
+0000227852 00000 n
+0000228473 00000 n
+0000228510 00000 n
+0000229110 00000 n
+0000229667 00000 n
+0000230310 00000 n
+0000231016 00000 n
+0000231704 00000 n
+0000232289 00000 n
+0000232406 00000 n
+0000233171 00000 n
+0000233562 00000 n
+0000234134 00000 n
+0000234620 00000 n
+0000235050 00000 n
+0000235617 00000 n
+0000235714 00000 n
+0000243178 00000 n
+0000243400 00000 n
+0000274402 00000 n
+0000274841 00000 n
+0000304343 00000 n
+0000304770 00000 n
+0000326329 00000 n
+0000326591 00000 n
+0000331266 00000 n
+0000331733 00000 n
+0000343890 00000 n
+0000344264 00000 n
+0000347713 00000 n
+0000347950 00000 n
+0000357769 00000 n
+0000358103 00000 n
+0000395238 00000 n
+0000395854 00000 n
+0000418135 00000 n
+0000418420 00000 n
+0000444510 00000 n
+0000444808 00000 n
+0000459455 00000 n
+0000459700 00000 n
+0000476178 00000 n
+0000476422 00000 n
+0000499249 00000 n
+0000499560 00000 n
+0000528598 00000 n
+0000528974 00000 n
+0000555187 00000 n
+0000555518 00000 n
+0000575611 00000 n
+0000575944 00000 n
+0000588056 00000 n
+0000588303 00000 n
+0000605633 00000 n
+0000605896 00000 n
+0000610639 00000 n
+0000610995 00000 n
+0000613613 00000 n
+0000613866 00000 n
+0000616967 00000 n
+0000617230 00000 n
+0000644569 00000 n
+0000644921 00000 n
+0000677007 00000 n
+0000677597 00000 n
+0000695297 00000 n
+0000695538 00000 n
+0000721461 00000 n
+0000721836 00000 n
+0000745415 00000 n
+0000745820 00000 n
+0000748018 00000 n
+0000749962 00000 n
+0000751076 00000 n
+0000752190 00000 n
+0000753312 00000 n
+0000754426 00000 n
+0000755540 00000 n
+0000756654 00000 n
+0000757766 00000 n
+0000758878 00000 n
+0000759991 00000 n
+0000761104 00000 n
+0000762219 00000 n
+0000763332 00000 n
+0000764447 00000 n
+0000765562 00000 n
+0000766677 00000 n
+0000767792 00000 n
+0000768905 00000 n
+0000770018 00000 n
+0000771106 00000 n
+0000771816 00000 n
+0000772694 00000 n
+0000773570 00000 n
+0000774445 00000 n
+0000775513 00000 n
+0000776578 00000 n
+0000777643 00000 n
+0000778876 00000 n
+0000780110 00000 n
+0000781343 00000 n
+0000782576 00000 n
+0000783149 00000 n
+0000785487 00000 n
+0000785605 00000 n
+0000785723 00000 n
+0000785793 00000 n
+0000792702 00000 n
+0000792900 00000 n
+0000793077 00000 n
+0000793247 00000 n
+0000793415 00000 n
+0000793583 00000 n
+0000793753 00000 n
+0000793922 00000 n
+0000794092 00000 n
+0000794261 00000 n
+0000794431 00000 n
+0000794603 00000 n
+0000794796 00000 n
+0000795023 00000 n
+0000795192 00000 n
+0000795361 00000 n
+0000795532 00000 n
+0000795702 00000 n
+0000795873 00000 n
+0000796043 00000 n
+0000796214 00000 n
+0000796384 00000 n
+0000796555 00000 n
+0000796725 00000 n
+0000796899 00000 n
+0000797099 00000 n
+0000797294 00000 n
+0000797497 00000 n
+0000797700 00000 n
+0000797937 00000 n
+0000798180 00000 n
+0000798423 00000 n
+0000798666 00000 n
+0000798922 00000 n
+0000799199 00000 n
+0000799478 00000 n
+0000799761 00000 n
+0000800023 00000 n
+0000800257 00000 n
+0000800362 00000 n
+0000800474 00000 n
+0000800592 00000 n
+0000800715 00000 n
+0000800834 00000 n
+0000800963 00000 n
+0000801102 00000 n
+0000801213 00000 n
+0000801345 00000 n
+0000801438 00000 n
+0000801528 00000 n
+0000801568 00000 n
+0000801746 00000 n
trailer
-<< /Size 1028
-/Root 1026 0 R
-/Info 1027 0 R
-/ID [<AE12E9290600F9202F4B3413AB61A917> <AE12E9290600F9202F4B3413AB61A917>] >>
+<< /Size 1041
+/Root 1039 0 R
+/Info 1040 0 R
+/ID [<C82F3974B5554FE9E9655EC20081F3DB> <C82F3974B5554FE9E9655EC20081F3DB>] >>
startxref
-800834
+802724
%%EOF
diff --git a/macros/latex/contrib/diffcoeff/diffcoeff.sty b/macros/latex/contrib/diffcoeff/diffcoeff.sty
index fc1ae05eb7..448911e829 100644
--- a/macros/latex/contrib/diffcoeff/diffcoeff.sty
+++ b/macros/latex/contrib/diffcoeff/diffcoeff.sty
@@ -8,10 +8,10 @@
% Andrew Parsloe ajparsloe@gmail.com
%
\DeclareRelease{v4}{}{diffcoeff4.sty}
-\DeclareCurrentRelease{}{2023/01/16}
+\DeclareCurrentRelease{}{2023/01/24}
\RequirePackage{xtemplate,mleftright}
-\ProvidesExplPackage {diffcoeff} {2023/01/16} {5.1}
+\ProvidesExplPackage {diffcoeff} {2023/01/24} {5.2}
{Write differential coefficients easily and consistently.}
\keys_define:nn { diffcoeff }
{
@@ -77,7 +77,6 @@
\bool_new:N \l__diffcoeff_multitok_bool
\bool_new:N \l__diffcoeff_append_bool
\bool_new:N \l__diffcoeff_op_left_bool
-\bool_new:N \l__diffcoeff_dl_bool
\bool_new:N \l__diffcoeff_exponent_bool
\tl_new:N \l__diffcoeff_override_tl
\tl_new:N \l__diffcoeff_frac_tl
@@ -206,7 +205,8 @@
\__diffcoeff_check_style:nn
{ \l__diffcoeff_group_int } { \l__diffcoeff_style_int }
\__diffcoeff_append:n { #1 }
- \exp_args:Nx \__diffcoeff_orders:nn { \clist_count:n {#4} } { #2 }
+ \exp_args:Nx \__diffcoeff_orders:nn
+ { \int_max:nn { 1 } { \clist_count:n {#4} } } { #2 }
\__diffcoeff_override:N \l__diffcoeff_override_tl
\__diffcoeff_derivand:n { #3 }
\__diffcoeff_build:nn { #4 } { #5 }
@@ -225,7 +225,7 @@
{ 4 } { \tl_set:Nn \l__diffcoeff_frac_tl { \difsafrac } }
{ 5 } { \tl_set:Nn \l__diffcoeff_frac_tl { \difsbfrac[#2] } }
{ 6 } { \tl_set:Nn \l__diffcoeff_frac_tl {} }
- { 7 } { \bool_set_true:N \l__diffcoeff_dl_bool }
+ { 7 } { \tl_set:Nn \l__diffcoeff_frac_tl {} }
{ 9 }
{
\msg_error:nnxx { diffcoeff } { unknown-style }
@@ -265,14 +265,6 @@
}
\cs_new:Npn \__diffcoeff_style_group:n #1
{ \clist_item:nn { frac, /, _, frac, dl } { #1 + 1 } }
-\cs_new:Npn \__diffcoeff_style_aux:n #1
- {
- \int_compare:nNnTF { #1 } = { 3 } { { 0 } {} }
- {
- \int_compare:nNnTF { #1 } = { 4 } { { 7 } {} }
- { { 3*#1 } {} }
- }
- }
%%%%%%%%% append? (& wrap slash diff operator?)
\cs_new_protected:Npn \__diffcoeff_append:n #1
{
@@ -288,8 +280,8 @@
%%%%%%%%%
% #1(int) no. of vars; #2(clist) orders spec
\cs_new_protected:Npn \__diffcoeff_orders:nn #1#2
- {
- \bool_if:NTF \l__diffcoeff_exponent_bool
+ {
+ \bool_if:NTF \l__diffcoeff_exponent_bool
{
\exp_args:NNx \seq_set_from_clist:Nn \l__diffcoeff_ords_seq
{ \prg_replicate:nn { #1 } { \l__diffcoeff_exponent_tl, } }
@@ -299,7 +291,7 @@
\exp_args:Nnx\__diffcoeff_adj_ords_seq:nn { #1 }
{ \seq_count:N \l__diffcoeff_ords_seq }
}
- \tl_set:Nx \l__diffcoeff_vph_tl {\seq_use:Nn\l__diffcoeff_ords_seq {} }
+ \tl_set:Nx \l__diffcoeff_vph_tl { \seq_use:Nn\l__diffcoeff_ords_seq {} }
}
\cs_new_protected:Npn \__diffcoeff_adj_ords_seq:nn #1#2
{
@@ -530,6 +522,8 @@
% #1 (propv) key=var, val=coeff; #2 <= total order
\cs_new_protected:Npn \__diffcoeff_evaluate:NN #1#2
{
+ \seq_clear:N \l_tmpa_seq
+ \seq_clear:N \l_tmpb_seq
\prop_map_inline:Nn #1 { \seq_put_left:Nn \l_tmpa_seq { ##1 } }
\seq_sort:Nn \l_tmpa_seq
{
@@ -593,7 +587,9 @@
\msg_error:nnnn { diffcoeff } { version-conflict } { / }
{ Use~\difs or~\difsp instead.~ }
}
- \seq_set_from_clist:Nn \l__diffcoeff_vars_seq { #1 }
+ \clist_if_empty:nTF { #1 }
+ { \seq_set_from_clist:Nn \l__diffcoeff_vars_seq { \prg_do_nothing: } }
+ { \seq_set_from_clist:Nn \l__diffcoeff_vars_seq { #1 } }
\seq_pop_right:NN \l__diffcoeff_vars_seq \l__diffcoeff_var_tl
\tl_put_left:Nx \l__diffcoeff_derivand_tl
{ \__diffcoeff_spaced:n { \l__diffcoeff_spaced_int } }
@@ -678,7 +674,7 @@
}
% #1 order #2 var
\cs_new:Npn \__diffcoeff_build_denom_item:nn #1#2
- {
+ {
\int_compare:nNnTF { \l__diffcoeff_style_int } = { 6 }
{ \__diffcoeff_build_denom_difc:onn \l__diffcoeff_vph_tl {#1}{#2} }
{ \__diffcoeff_build_denom_dif:nn {#1} {#2} }
diff --git a/macros/latex/contrib/diffcoeff/diffcoeff.tex b/macros/latex/contrib/diffcoeff/diffcoeff.tex
index 77521ccd0a..320960b2ed 100644
--- a/macros/latex/contrib/diffcoeff/diffcoeff.tex
+++ b/macros/latex/contrib/diffcoeff/diffcoeff.tex
@@ -1,4 +1,4 @@
-%% LyX 2.4.0-alpha3 created this file. For more info, see https://www.lyx.org/.
+%% LyX 2.4.0-beta2 created this file. For more info, see https://www.lyx.org/.
%% Do not edit unless you really know what you are doing.
\documentclass[english]{report}
\usepackage{lmodern}
@@ -22,7 +22,7 @@
\usepackage{amssymb}
\usepackage{stmaryrd}
\usepackage{esint}
-\usepackage[unicode=true,pdfusetitle,
+\usepackage[pdfusetitle,
bookmarks=true,bookmarksnumbered=true,bookmarksopen=true,bookmarksopenlevel=2,
breaklinks=true,pdfborder={0 0 1},backref=section,colorlinks=true,pdfpagemode=FullScreen]
{hyperref}
@@ -113,12 +113,12 @@
\title{\texttt{diffcoeff}~\\
a \LaTeX{} package to ease\texttt{ }the~\\
writing of differential coefficients \\
- Version 5.1}
+ Version 5.2}
\author{Andrew Parsloe\\
{\small (ajparsloe@gmail.com)}}
\maketitle
\begin{abstract}
-\noindent \verb`diffcoeff` is a \LaTeX{} package to ease the writing
+\noindent\verb`diffcoeff` is a \LaTeX{} package to ease the writing
of ordinary, partial and other derivatives of arbitrary algebraic
or numeric order. For mixed partial derivatives, the total order of
differentiation is calculated by the package. Optional arguments allow
@@ -266,7 +266,7 @@ $\Longrightarrow$ \[ \ln \mleft(\frac xy\mright),\quad\sin\mleft(x^2\mright). \]
\end{shaded}%
\end{minipage}
-\noindent %
+\noindent{}%
\noindent\begin{minipage}[t]{1\columnwidth}%
\begin{shaded}%
If you put \verb`\mleftright` in the preamble, which is what the
@@ -437,6 +437,11 @@ derivative).
derivatives, variable or variables held constant; \emph{no space}
before the left square bracket; see \ref{subsec:Point-of-evaluation}.
\end{itemize}
+Both mandatory arguments may be empty, but require empty brace pairs
+to indicate as much. (Omitting the differentiand makes sense for all
+forms of derivative, \verb`\difx`, \verb`\difxp`, but omitting the
+variable or variables of differentiation is sensible only for the
+compact forms, \verb`\difc`, \verb`\difcp` -- see \ref{subsec:Compact=002013form-derivatives}.)
\section{General use}
@@ -680,7 +685,7 @@ in which a derivative forms the differentiand of another . Thus
\noindent This result is more elegant to my eye than what results
when removing the asterisk,
\begin{centred}
-\noindent \verb`\[ \diff[2]yx = \diff{\diff yx}x \]` $\Longrightarrow$
+\noindent\verb`\[ \diff[2]yx = \diff{\diff yx}x \]` $\Longrightarrow$
\[ \diff[2]yx=\diff{\diff yx}x ,\]
\end{centred}
\noindent although whether the \emph{meaning} is clearer is moot.
@@ -797,7 +802,7 @@ no subscript. This fact can be exploited. Thus, for a particle of
mass $m$ moving along a line, distance $x$ at time $t$, the kinetic
energy is:
\begin{centred}
-\noindent \verb`$ \tfrac 12 m \difs xt[]^2 $` $\Longrightarrow$
+\noindent\verb`$ \tfrac 12 m \difs xt[]^2 $` $\Longrightarrow$
$\tfrac{1}{2}m\difs xt[]^{2}$.
\end{centred}
Or, again exploiting the parentheses resulting from an empty trailing
@@ -846,7 +851,7 @@ command:
\mleftright
\[ \diffp L{q_k}-\diff**t{ \!\diffp L{\dot{q}_k}[] } = 0 \]
\end{verbatim}
-\noindent $\Longrightarrow$ \mleftright\[\diffp L{q_k}-\diff**t{\!\diffp L{\dot{q}_k}[]} = 0. \]
+\noindent$\Longrightarrow$ \mleftright\[\diffp L{q_k}-\diff**t{\!\diffp L{\dot{q}_k}[]} = 0. \]
\noindent The problem is that in addition to the space around \verb`\left`,
\verb`\right` pairs (which is reduced by issuing the command \verb`\mleftright`),
@@ -931,7 +936,7 @@ Or again,
\subsubsection{Order-override command: \texttt{\textbackslash difoverride}}
-\noindent \label{subsec:Order-override-command}$m+k+km+1$ factorizes
+\noindent\label{subsec:Order-override-command}$m+k+km+1$ factorizes
to $(k+1)(m+1)$ and you may prefer to express the total order of
differentiation in this form. \verb`diffcoeff` is not a computer
algebra system and does not do such factorizations but the \verb`\difoverride`
@@ -1162,7 +1167,7 @@ in $x$ means forming the product
Forming the \emph{second} derivative of $\ln\sin x$ will now involve
forming, among other quantities,
\begin{centred}
-\noindent \verb`\[\diff[2]{\ln\sin x}{\sin x}\]` $\Longrightarrow$
+\noindent\verb`\[\diff[2]{\ln\sin x}{\sin x}\]` $\Longrightarrow$
\[\diff[2]{\ln\sin x}{\sin x}\]
\end{centred}
\noindent Parentheses have been inserted automatically by \verb`diffcoeff`
@@ -1211,7 +1216,7 @@ say:
\begin{centred}
\verb`\[ \diffp[2]q{\frac 1\Theta} \]` $\Longrightarrow$ \[ \diffp[2]q{\frac 1\Theta}.\]
\end{centred}
-\noindent As noted, when differentiating to first order, parenthesising
+\noindent As noted, when differentiating to first order, parenthesising
is up to the user:
\begin{centred}
\verb`\[ \diffp q{(\frac 1\Theta),V} \]` $\Longrightarrow$ \[ \diffp q{(\frac 1\Theta),V}. \]
@@ -1313,7 +1318,7 @@ environments
\item \emph{ordinary slash}-fraction derivatives in \emph{text}-style environments
\item \emph{ordinary compact}-form derivatives in \emph{text}-style environments
\end{enumerate}
-\noindent %
+\noindent{}%
\noindent\begin{minipage}[t]{1\columnwidth}%
\begin{shaded}%
\noindent Users of version 4 of \texttt{diffcoeff} will notice similarities
@@ -1717,7 +1722,7 @@ the definition of the variant with the statement,
put the status and configurability of partial derivatives on the same
footing as ordinary derivatives.
-\noindent %
+\noindent{}%
\noindent\begin{minipage}[t]{1\columnwidth}%
\begin{shaded}%
The command \verb`\difdef` in version 5 of \verb`diffcoeff` takes
@@ -1766,7 +1771,7 @@ it in the \verb`texmf` tree, preferably not the one created by your
Provided your \TeX{} distribution knows about your personal \verb`texmf`
tree and the files it contains, then a \verb`.def` file placed within
it will be accessible to all documents.
-\noindent \begin{center}
+\begin{center}
\noindent\begin{minipage}[t]{1\columnwidth}%
\begin{shaded}%
@@ -1802,12 +1807,12 @@ will apply there.\end{shaded}%
In earlier versions of \verb`diffcoeff`, if there was no explicit
\verb`def-file=<filename>` package option statement, then a file
\verb`diffcoeff.def` was searched for and if found loaded. This is
-no longer the case. Version 5 of file of \verb`diffcoeff` searches
-for a \verb`.def` \emph{only if it is explicitly named} in a package
-option statement. (This decision was made at least in part to avoid
-conflict with a \verb`diffcoeff.def` file from an earlier version
-of \verb`diffcoeff` tucked away in some non-obvious place and producing
-obscure errors in the current version 5.) \end{shaded}%
+no longer the case. Version 5 of \verb`diffcoeff` searches for a
+\verb`.def` \emph{only if it is explicitly named} in a package option
+statement. (This decision was made at least in part to avoid conflict
+with a \verb`diffcoeff.def` file from an earlier version of \verb`diffcoeff`
+tucked away in some non-obvious place and producing obscure errors
+in the current version 5.) \end{shaded}%
\end{minipage}
\par\end{center}
@@ -1889,7 +1894,7 @@ equations are rendered (just right to my eye!)
\subsubsection{Editing variant forms}
-\noindent %
+\noindent{}%
\noindent\begin{minipage}[t]{1\columnwidth}%
\begin{shaded}%
@@ -2099,14 +2104,24 @@ They provide good visual contrast with the parentheses of $F(x,y)$.
\subsubsection{Compact--form derivatives}
-Two styles are available for compact-form derivatives, derivative
-style \verb`style=_`, and differential style \verb`style=dl`. The
-first is the default style; the orders of differentiation are applied
-to the operator symbol, in this example \verb`\partial`:
+\label{subsec:Compact=002013form-derivatives}Two styles are available
+for compact-form derivatives, derivative style, \verb`style=_`, and
+differential style, \verb`style=dl`. The first is the default style;
+the orders of differentiation are applied to the operator symbol,
+in this example \verb`\partial`:
+\begin{centred}
+\verb`$ \difcp[3,2]f{x,y,z} $` $\Longrightarrow$ $ \difcp[3,2]{f}{x,y,z} $
+\end{centred}
+What happens if no differentiation variable is specified, only an
+empty brace pair?
\begin{centred}
-\verb`$ \difcp[3,2]{f}{x,y,z} $` $\Longrightarrow$ $ \difcp[3,2]{f}{x,y,z} $
+\verb`$ \difc[3]f{} $` $\Longrightarrow$ $ \difc[3]f{} $
\end{centred}
-But suppose we define a variant form (as is done in \verb`diffcoeff5.def`):
+Note that this is the behaviour from version 5.2 of \verb`diffcoeff`.
+In version 5.1, a brace pair alone would halt compilation; a \emph{nested
+}brace pair, \verb`{{}}`, was required.
+
+Suppose now we define a variant form (as is done in \verb`diffcoeff5.def`),
\begin{verbatim}
\difdef { cp } { dl } { style = dl }
\end{verbatim}
@@ -2118,7 +2133,9 @@ an empty argument in its place:
In this \verb`dl` style, the orders of differentiation are applied
to the \emph{variables}. This allows discussion of, for example, the
denominator of a mixed partial derivative -- perhaps a remark about
-minutiae of spacing.
+minutiae of spacing. (See \ref{sec:Differentials} on differentials
+which perhaps more conveniently similarly allow the writing of, for
+example, $\dl[3]x$.)
\subsubsection{D, \textbackslash delta, \textbackslash Delta derivatives}
@@ -2154,7 +2171,7 @@ $ \difs.gd.yx $, or \verb`$ \difs.gD.yx $` $\Longrightarrow$ $ \difs.gD.st$
\noindent for the total derivative of $\rho$ (perhaps in fluid dynamics),
or
\begin{centred}
-\noindent \verb`$ \difc.bD.[2]y{x\,}+2\difc.bD.y{x\,}-4=0 $` $\Longrightarrow$
+\noindent\verb`$ \difc.bD.[2]y{x\,}+2\difc.bD.y{x\,}-4=0 $` $\Longrightarrow$
$ \difc.bD.[2]y{x\,}+2\difc.bD.y{x\,}-4=0 $
\end{centred}
for an example in the study of differential equations.
@@ -2381,6 +2398,8 @@ producing a variant form of the differential (see below \ref{subsec:Line-elemen
\verb`$ c^2\dl.-.{t,x,y,z}^2 $` $\Longrightarrow$ $ c^2\dl.-.{t,x,y,z}^2 $.
\end{centred}
+(If what you want is not $\dl[2]x$ but $\difc[2]f{}$, with the superscript
+attached to the \verb`d`, see \ref{subsec:Compact=002013form-derivatives}.)
\subsection{Template \texttt{DIFL}}
@@ -3240,6 +3259,14 @@ conflict message;
\item makes some corresponding tweaks to documentation (including this version
5 history).
\end{enumerate}
+\item Version 5.2 (2023-01-24)
+\begin{enumerate}
+\item Simplifies the treatment of the empty argument of an absent differentiation
+variable;
+\item initializes (clears) two sequence variables that otherwise caused
+error when \verb`scrbook` class was used;
+\item amends documentation.
+\end{enumerate}
\end{enumerate}
\end{document}
diff --git a/macros/latex/contrib/fixdif/fixdif-zh-cn.pdf b/macros/latex/contrib/fixdif/fixdif-zh-cn.pdf
index 09902e25b1..e887bdcf39 100644
--- a/macros/latex/contrib/fixdif/fixdif-zh-cn.pdf
+++ b/macros/latex/contrib/fixdif/fixdif-zh-cn.pdf
Binary files differ
diff --git a/macros/latex/contrib/fixdif/fixdif-zh-cn.tex b/macros/latex/contrib/fixdif/fixdif-zh-cn.tex
index 075b57610e..9c2feac52b 100644
--- a/macros/latex/contrib/fixdif/fixdif-zh-cn.tex
+++ b/macros/latex/contrib/fixdif/fixdif-zh-cn.tex
@@ -1,5 +1,5 @@
\documentclass[letterpaper,11pt]{article}
-\date{2022/10/27\quad Version 1.4b%
+\date{2023/01/23\quad Version 1.5%
\thanks{源代码见~\hyperref{https://github.com/AlphaZTX/fixdif}{}{}{GitHub}
或~\hyperref{https://www.ctan.org/pkg/fixdif}{}{}{CTAN}。}
}
@@ -11,10 +11,10 @@
\newcounter{fixdifattention}
\newcommand\attention[1][1]{\setcounter{fixdifattention}{1}%
\ifnum#1=1 \def\attentiontext{\dbend}\else
- \def\attentiontext{\loop\dbend\,%
+ \def\attentiontext{\loop\dbend\kern1pt%
\addtocounter{fixdifattention}{1}%
\ifnum \value{fixdifattention}<#1 \repeat\dbend}\fi%
- \marginnote{\makebox[0pt][r]{\attentiontext}}}
+ \marginnote{\hbox to 0pt{\hss\attentiontext}}}
\usepackage{xcolor}
\definecolor{titlecolor}{RGB}{0,128,8}
@@ -382,7 +382,8 @@ $\d x$ 和 \d x
\begin{Verbatim}
\letdif{\laplacian}{Delta}
\end{Verbatim}
-如果你比较擅长使用 \pkg{xparse} 宏包的接口,你也可以采用下面的方法:
+如果你比较擅长使用 \pkg{xparse} 宏包(2020 年 10 月后已被集成进 \LaTeXe{} 内核)
+的接口,你也可以采用下面的方法:
\begin{Verbatim}
\letdif{\nabla}{nabla}
\DeclareDocumentCommand{ \laplacian }{ s }{
diff --git a/macros/latex/contrib/fixdif/fixdif.dtx b/macros/latex/contrib/fixdif/fixdif.dtx
index 7b525cc67f..0d6e945658 100644
--- a/macros/latex/contrib/fixdif/fixdif.dtx
+++ b/macros/latex/contrib/fixdif/fixdif.dtx
@@ -131,7 +131,7 @@ Copyright (C) 2022 by Zhang Tingxuan <alphaztx@163.com>.
%</internal>
%
%<*driver>
-\ProvidesFile{fixdif.dtx}[2022/10/27 (c) Copyright 2022 by Zhang Tingxuan]
+\ProvidesFile{fixdif.dtx}[2023/01/23 (c) Copyright 2022 by Zhang Tingxuan]
\documentclass{ltxdoc}
\usepackage{xcolor}
@@ -150,7 +150,7 @@ Copyright (C) 2022 by Zhang Tingxuan <alphaztx@163.com>.
\title{The \pkg{fixdif} Package}
\author{Zhang Tingxuan}
-\date{2022/10/27\quad Version 1.4b\thanks{\url{https://github.com/AlphaZTX/fixdif}}}
+\date{2023/01/23\quad Version 1.5\thanks{\url{https://github.com/AlphaZTX/fixdif}}}
\usepackage{hyperref}
\hypersetup{
@@ -473,27 +473,27 @@ Copyright (C) 2022 by Zhang Tingxuan <alphaztx@163.com>.
% Check the \TeX{} format and provides the package name.
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{fixdif}[2022/10/27 Interface for defining differential operators.]
+\ProvidesPackage{fixdif}[2023/01/23 Interface for defining differential operators.]
% \end{macrocode}
%
% \subsection{Control the skip between slashes and differential operator}
% Change the math code of slash ($/$) and backslash ($\backslash$) so that the skip
% between slashes and differential operators can be ignored.
% \begin{macrocode}
-\@ifpackageloaded{unicode-math}{
+\@ifpackageloaded{unicode-math}{\AtBeginDocument{%
% \end{macrocode}
% If the \pkg{unicode-math} package has been loaded, use the \XeTeX/\LuaTeX{} primitive
% \cs{Umathcode} to change the type of slashes. The numeral ``4'' stands for ``open''.
% \begin{macrocode}
- \Umathcode`\/="4 "0 "002F
- \Umathcode"2044="4 "0 "2044
- \Umathcode"2215="4 "0 "2215
- \Umathcode"2F98="4 "0 "2F98
- \Umathcode`\\="4 "0 "005C
- \Umathcode"2216="4 "0 "2216
- \Umathcode"29F5="4 "0 "29F5
- \Umathcode"29F9="4 "0 "29F9
-}{
+ \Umathcode`\/="4 \symoperators "002F
+ \Umathcode"2044="4 \symoperators "2044
+ \Umathcode"2215="4 \symoperators "2215
+ \Umathcode"2F98="4 \symoperators "2F98
+ \Umathcode`\\="4 \symoperators "005C
+ \Umathcode"2216="4 \symoperators "2216
+ \Umathcode"29F5="4 \symoperators "29F5
+ \Umathcode"29F9="4 \symoperators "29F9
+}}{
% \end{macrocode}
% If the \pkg{unicode-math} package has not been loaded, use the \TeX{} primitive
% \cs{mathcode} to change the type of slashes. The \cs{backslash} needs to be redefined
diff --git a/macros/latex/contrib/fixdif/fixdif.pdf b/macros/latex/contrib/fixdif/fixdif.pdf
index 55f49058db..64f8440ed8 100644
--- a/macros/latex/contrib/fixdif/fixdif.pdf
+++ b/macros/latex/contrib/fixdif/fixdif.pdf
Binary files differ
diff --git a/macros/latex/contrib/frenchmath/frenchmath.dtx b/macros/latex/contrib/frenchmath/frenchmath.dtx
index ebe9e760c2..63c577e173 100644
--- a/macros/latex/contrib/frenchmath/frenchmath.dtx
+++ b/macros/latex/contrib/frenchmath/frenchmath.dtx
@@ -20,7 +20,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{frenchmath}
- [2022/12/26 v2.3 .dtx frenchmath file]
+ [2023/01/22 v2.4 .dtx frenchmath file]
%</package>
%<*driver>
\documentclass{ltxdoc}
@@ -32,6 +32,10 @@
\usepackage[upgreek]{frenchmath}
\usepackage{textalpha}
\usepackage{metalogo} % pour les logos XeLaTeX et LuaLaTeX
+\usepackage{sectsty}
+\usepackage{xcolor}
+\definecolor{darkbrown}{rgb}{0.5,0.1,0.1}
+\allsectionsfont{\color{darkbrown}}
\DeclareSymbolFont{cmsymbols}{OMS}{cmsy}{m}{n} % symbole \emptyset de computer modern
\DeclareMathSymbol{\cmemptyset}{\mathord}{cmsymbols}{'73} % code octal dans cmsy
\DeclareTextSymbol{\textmicro}{TS1}{181} % mu de micro
@@ -56,7 +60,7 @@
%</driver>
% \fi
%
-% \CheckSum{541}
+% \CheckSum{552}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -109,7 +113,7 @@
% - remplacement de tgh par th pour la tangente hyperbolique.}
%
% \changes{v2.0}{2022/10/24}{
-% - nouvelle option permettant de définir les lettres grecques minuscules en forme droite,
+% - Nouvelle option permettant de définir les lettres grecques minuscules en forme droite,
% - correction de bug avec la commande \bslash qui n'était pas définie,
% - compatibilité avec mathdesign}
%
@@ -134,12 +138,16 @@
% - utilisation de l'extension ibrackets,
% - définition de cosec et cosech}
%
+% \changes{v2.4}{22/01/2023}{
+% - Option noibrackets car incompatibilité avec DeclarePairedDelimiter,
+% - warning si compilation avec LuaLaTeX et babel-french non chargé.}
+%
% \GetFileInfo{frenchmath.sty}
%
% \title{L'extension \textsf{frenchmath}\thanks{Ce document
-% correspond à \textsf{frenchmath}~\fileversion, dernière modification le 26/12/2022.}}
+% correspond à \textsf{frenchmath}~\fileversion, dernière modification le 22/01/2023.}}
% \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}}
-% \date{26 décembre 2022}
+% \date{22 janvier 2023}
% \maketitle
%
% \section{Introduction}
@@ -149,9 +157,7 @@
% les majuscules en romain (lettres droites) plutôt qu'en italique
% (voir~\cite{RTIN} et~\cite{IGEN})
% ainsi que des espacements corrects
-% pour les virgules
-%\footnote{Merci à Jean-François Burnol pour certaines améliorations proposées au code.}
-% et point-virgules.
+% pour les virgules, point-virgules et crochets.
% Depuis la version 2.0, des options permettent
% de composer les minuscules grecques du mode mathématique en forme droite.
%
@@ -198,8 +204,8 @@
% être composées en romain ($A, B, C, \ldots$) et non en italique
% (\cite{RTIN} p.107, voir aussi~\cite{IGEN}).
% En utilisant \XeLaTeX\ ou \LuaLaTeX\ avec des polices mathématiques OpenType,
-% cette convention est assez commode à mettre en œuvre,
-% mais, avec \LaTeX\ ou pdf\LaTeX, assez peu d'auteurs la respectent
+% cette convention est assez commode à mettre en œuvre ;
+% par contre, avec \LaTeX\ ou pdf\LaTeX, assez peu d'auteurs la respectent
% et les extensions précitées ne fonctionnent qu'avec des polices particulières.
% Par défaut \textsf{frenchmath} compose automatiquement toutes les majuscules
% mathématiques en romain,
@@ -371,16 +377,17 @@
% de l'extension \textsf{numprint}.
% Par contre \textsf{icomma} fonctionne et était utilisé
% jusqu'à la version 1.5 de \textsf{frenchmath}.
-% Depuis la version 1.6, \textsf{frenchmath} charge \textsf{ncccomma} grâce
+% Depuis la version 1.6, \textsf{frenchmath} charge \textsf{ncccomma}, grâce
% à un code proposé par Jean-François Burnol qui permet d'utiliser conjointement
-% \textsf{ncccomma} et \textsf{numprint} avec \texttt{autolanguage}
+% \textsf{ncccomma} avec l'option \texttt{autolanguage} de \textsf{numprint}
% \footnote{Mentionnons aussi l'article \emph{Intelligent commas}
% de Claudio Beccari~\cite{BECC} qui propose une solution simplifiée
% par rapport à \textsf{ncccomma} mais dont l'avantage semble discutable.}.
-%
-% Signalons que, si l'on compile avec \LuaLaTeX, il est impératif de charger
-% \textsf{frenchmath} \emph{après} \textsf{babel-french}
-% (ce qui est, somme toute, la pratique normale).
+% Signalons que, si l'on compile avec \LuaLaTeX, \textsf{ncccomma}
+% (et donc \textsf{frenchmath}) doit être chargé
+% \emph{après} \textsf{babel-french}
+% (ce qui est, somme toute, la pratique normale),
+% sinon \textsf{babel} génère une erreur.
%
% \medskip
% Lorsque l'on utilise l'extension \textsf{pstricks-add} de \textsf{PSTricks}
@@ -404,11 +411,15 @@
% les crochets $]0, +\infty[$. Mais comme cela n'est pas prévu par \LaTeX,
% les espaces seront souvent incorrectes.
% Nous avons redéfini les crochets dans l'extension \textsf{ibrackets}~\cite{BRACKETS}
-% qui est chargée par \textsf{frenchmath}
-% \footnote{L'extension \textsf{interval} fournit une autre
-% solution basée sur la macro \texttt{\string\interval} ;
-% citons aussi \textsf{mathtools} et sa commande
-% \texttt{\string\DeclarePairedDelimiter}.}.
+% qui est chargée par \textsf{frenchmath},
+% \DescribeMacro{[noibrackets]}
+% sauf si l'on active l'option \texttt{noibrackets}
+% \footnote{D'autres solutions existent,
+% par exemple avec l'extension \textsf{interval}
+% ou encore avec la macro \texttt{\string\DeclarePairedDelimiter}
+% de \textsf{mathtools}, mais utilisée avec des crochets,
+% cette dernière est incompatible avec \textsf{ibrackets},
+% d'où la possibilité de désactiver \textsf{ibrackets}.}.
% Le code
% |$x\in ]-\pi, 0[ \cup ]2\pi, 3\pi[$|
% produira
@@ -417,12 +428,6 @@
% \[ x\in \mathclose{]}-\pi, 0 \mathopen{[} \cup \mathclose{]} 2\pi, 3\pi \mathopen{[}
% \mbox{\quad sans \textsf{ibrackets}}. \]
%
-% Dans notre code, les caractères $[$ et $]$ deviennent \og actifs \fg
-% et ne sont plus définis par défaut comme des délimiteurs.
-% De ce fait, une coupure de ligne peut se produire entre les deux,
-% mais il est toujours possible de transformer alors ces crochets en délimiteurs
-% avec |\left| et |\right|.
-%
% Avec \textsf{ibrackets}, un crochet devient un caractère ordinaire,
% sauf s'il est immédiatement suivi par un signe + ou - (sans espace), auquel cas
% c'est un délimiteur ouvrant.
@@ -435,6 +440,11 @@
% par exemple, |$[a, b] + [c, d]$| produit $[a, b] + [c, d]$
% mais |$[a, b]+ [c, d]$| produit $[a, b]+ [c, d]$.
%
+% En cas de comportement problématique, par exemple si
+% une coupure de ligne se produit entre les deux crochets d'un intervalle,
+% il est toujours possible de transformer alors ces crochets en délimiteurs
+% avec |\left| et |\right|.
+%
% \subsection{Quelques macros et alias utiles}
%
% \DescribeMacro{\curs}
@@ -447,7 +457,7 @@
% ($\mathcal{A}, \mathcal{B}, \mathcal{C}, \mathcal{D}, \ldots$).
% La commande |\curs| permet aussi de composer ces lettres en mode texte,
% sans les délimiteurs du mode mathématique.*
-% \footnote{Comme précisé dans l'introduction, l'astérisque en fin d'item signale
+% \footnote{L'astérisque en fin d'item signale
% une fonctionnalité similaire dans \textsf{mafr}.}
%
% \medskip
@@ -578,6 +588,8 @@
\newboolean{Upgreek}
\DeclareOption{Upgreek}{\setboolean{Upgreek}{true}
\setboolean{upgreek}{true}}
+\newboolean{noibrackets}
+\DeclareOption{noibrackets}{\setboolean{noibrackets}{true}}
\ProcessOptions \relax
\AtBeginDocument{
@@ -599,18 +611,30 @@
\@ifpackageloaded{upgreek}{}{\RequirePackage[Euler]{upgreek}}
}{}
\RequirePackage{xspace} % utile pour les commandes \curs, \ssi, \Oij
-\RequirePackage{ibrackets} % intelligent brackets
+\ifthenelse{\boolean{noibrackets}}{}{
+ \RequirePackage{ibrackets}} % intelligent brackets
% \RequirePackage{icomma} % intelligent comma
\RequirePackage{ncccomma} % depuis frenchmath 1.6
+\@ifpackagewith{babel}{french}{}{
+ \RequirePackage{iftex}
+ \ifluatex
+ \PackageWarningNoLine{frenchmath}{With LuaTeX engine,
+ \MessageBreak
+ load babel before frenchmath}
+ \fi
+}
\AtBeginDocument{\mathcode`\,="8000\relax
\@ifpackageloaded{babel}{
\addto\extrasfrench{\mathcode`\,="8000\relax}
}{}
}
% \end{macrocode}
-% La macro ci-dessus permet d'utiliser \textsf{ncccomma} à la place de \textsf{icomma}.
-% \textsf{ncccomma} doit être chargée après \textsf{babel-french} si on utilise \LuaLaTeX.
-% Cette macro m'a été proposée par Jean-François Burnol, de même qu'une amélioration
+% La macro ci-dessus, qui m'a été proposée par Jean-François Burnol,
+% permet d'utiliser \textsf{ncccomma} à la place de \textsf{icomma}.
+% L'extension \textsf{ncccomma} doit être chargée après \textsf{babel-french}
+% si on utilise \LuaLaTeX, sinon une erreur de compilation se produit.
+%
+% Je dois également à Jean-François Burnol une amélioration
% du code ci-après, redéfinissant les majuscules mathématiques.
%
% Sauf si l'option \texttt{capsit} est activée, on redéfinit toutes les lettres majuscules
diff --git a/macros/latex/contrib/frenchmath/frenchmath.pdf b/macros/latex/contrib/frenchmath/frenchmath.pdf
index e3dfbf5785..0b65c68576 100644
--- a/macros/latex/contrib/frenchmath/frenchmath.pdf
+++ b/macros/latex/contrib/frenchmath/frenchmath.pdf
Binary files differ
diff --git a/macros/latex/contrib/hypdoc/README.md b/macros/latex/contrib/hypdoc/README.md
index b0cd77bf6e..32ac39c26a 100644
--- a/macros/latex/contrib/hypdoc/README.md
+++ b/macros/latex/contrib/hypdoc/README.md
@@ -1,6 +1,6 @@
# hypdoc
-Version: 2022-07-03 v1.17
+Version: 2023-01-23 v1.18
This package adds hyper features to the package
doc that is used in the documentation
@@ -10,7 +10,7 @@ are linked as far as possible.
## Copyright (C)
* 2002, 2006, 2007, 2009-2011 Heiko Oberdiek
-* 2016-2022 Oberdiek Package Support Group
+* 2016-2023 Oberdiek Package Support Group
## License
LATEX Project Public License, version 1.3c or later.
diff --git a/macros/latex/contrib/hypdoc/hypdoc.dtx b/macros/latex/contrib/hypdoc/hypdoc.dtx
index 8eb7e9b2e5..836fa1b368 100644
--- a/macros/latex/contrib/hypdoc/hypdoc.dtx
+++ b/macros/latex/contrib/hypdoc/hypdoc.dtx
@@ -1,12 +1,12 @@
% \iffalse meta-comment
%
% File: hypdoc.dtx
-% Version: 2022-07-03 v1.17
+% Version: 2023-01-23 v1.18
% Info: Hyper extensions for doc.sty
%
% Copyright (C)
% 2002, 2006, 2007, 2009-2011 Heiko Oberdiek
-% 2016-2022 Oberdiek Package Support Group
+% 2016-2023 Oberdiek Package Support Group
% https://github.com/ho-tex/hypdoc/issues
%
% This work may be distributed and/or modified under the
@@ -79,7 +79,7 @@
\input docstrip.tex
\Msg{************************************************************************}
\Msg{* Installation}
-\Msg{* Package: hypdoc 2022-07-03 v1.17 Hyper extensions for doc.sty (HO)}
+\Msg{* Package: hypdoc 2023-01-23 v1.18 Hyper extensions for doc.sty (HO)}
\Msg{************************************************************************}
\keepsilent
@@ -91,11 +91,11 @@
This is a generated file.
Project: hypdoc
-Version: 2022-07-03 v1.17
+Version: 2023-01-23 v1.18
Copyright (C)
2002, 2006, 2007, 2009-2011 Heiko Oberdiek
- 2016-2022 Oberdiek Package Support Group
+ 2016-2023 Oberdiek Package Support Group
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either
@@ -152,7 +152,7 @@ and the derived files
%<*driver>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{hypdoc.drv}%
- [2022-07-03 v1.17 Hyper extensions for doc.sty (HO)]%
+ [2023-01-23 v1.18 Hyper extensions for doc.sty (HO)]%
\PassOptionsToPackage{numbered}{hypdoc}
\documentclass{ltxdoc}
\usepackage{holtxdoc}[2011/11/22]
@@ -167,7 +167,7 @@ and the derived files
% \GetFileInfo{hypdoc.drv}
%
% \title{The \xpackage{hypdoc} package}
-% \date{2022-07-03 v1.17}
+% \date{2023-01-23 v1.18}
% \author{Heiko Oberdiek\thanks
% {Please report any issues at \url{https://github.com/ho-tex/hypdoc/issues}}}
%
@@ -345,7 +345,7 @@ and the derived files
%<*package>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{hypdoc}%
- [2022-07-03 v1.17 Hyper extensions for doc.sty (HO)]%
+ [2023-01-23 v1.18 Hyper extensions for doc.sty (HO)]%
% \end{macrocode}
% The package identification is done at the top of the |.dtx| file
% in order to use only one identification string.
@@ -471,7 +471,7 @@ and the derived files
% \end{macro}
% \begin{macro}{\HD@@guesstoclevel}
% \begin{macrocode}
-\def\HD@@guesstoclevel#1#2\HD@end{%
+\long\def\HD@@guesstoclevel#1#2\HD@end{%
\@ifundefined{toclevel@\expandafter\@gobble\string#1\@empty}{%
1%
}{%
@@ -1342,6 +1342,9 @@ and the derived files
% \begin{Version}{2022-07-03 v1.17}
% \item Restore defintion of active control-m (issue 3)
% \end{Version}
+% \begin{Version}{2023-01-23 v1.18}
+% \item made an internal command long for compability with natbib, issue \#6
+% \end{Version}
% \end{History}
%
% \PrintIndex
diff --git a/macros/latex/contrib/hypdoc/hypdoc.pdf b/macros/latex/contrib/hypdoc/hypdoc.pdf
index 6760c5453f..cd657eb271 100644
--- a/macros/latex/contrib/hypdoc/hypdoc.pdf
+++ b/macros/latex/contrib/hypdoc/hypdoc.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/LICENSE b/macros/latex/contrib/pagelayout/LICENSE
new file mode 100644
index 0000000000..494f58131f
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/LICENSE
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `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 Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/macros/latex/contrib/pagelayout/README.md b/macros/latex/contrib/pagelayout/README.md
new file mode 100644
index 0000000000..aa94a0fe9e
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/README.md
@@ -0,0 +1,90 @@
+![The pagelayout LaTeX class](doc/banner.svg)
+
+The pagelayout class enables you to layout pages declaratively using simple macros for pages, covers, grids, templates, text, and graphics to create graphic rich, perfectly typeset, and print ready PDFs.
+
+The integration of [Inkscape](https://inkscape.org) allows your to create box shadows. Text shadows and SVG filters are ideas for future releases.
+
+The integration of [ImageMagick](https://imagemagick.org) allows you to configure compression and sharpening for bitmap graphics to export web, print or preview versions of your document. Parallelized image optimization, caching, and a draft mode enable fast PDF creation and a responsive workflow, even for large documents with lots of photos and graphics.
+
+The pagelayout class also integrates the [TikZ](https://www.ctan.org/pkg/pgf) and [tcolorbox](https://www.ctan.org/pkg/tcolorbox) LaTeX packages.
+
+## Quick Start
+
+### Generic Templates
+
+Generic templates are the easiest way to put content on a page. The template name describes the layout. You can arrange [l]andscape, [p]ortrait, [s]quare, [w]ide, [g]olden ratio, g[o]lden upright ratio or [f]lexible placeholders in rows [-]. A valid template name for example is `sg-ff`. Notice you cannot combine flexible with fixed aspect ratio placeholders within a row.
+
+```latex
+\template{ss}{
+ \text{
+ This text fills the first placeholder.
+ }
+}
+```
+
+![Generic template](doc/quickstart-1.svg)
+
+### Custom Templates
+
+You can use the grid to layout content on a page. The grid has rows with cells. You can set width relations between cells and height relations between rows. You can give cells a explicit aspect ratio by adding a `!`.
+
+```latex
+\newtemplate{my template}{
+ \setgrid{
+ {[2]{3!}{2!}}
+ }
+ \placeholder{0 0 1 1}
+}
+
+\template{my template}{}
+```
+
+![Custom template](doc/quickstart-2.svg)
+
+You can set margin and gutter for a single grid, on document level, or on page level.
+
+### Graphics
+
+You can scale and position a graphic. And you can add borders and box shadows to graphics and text frames.
+
+```latex
+\newborder{my border}{width=2mm, color=white, radius=5mm}
+\newshadow{my shadow}{size=8}
+
+\template[margin=7mm]{s}{
+ \graphic[
+ scale=1.1,
+ hpos=0.2,
+ unsharp=3x1,
+ shadow=my shadow,
+ border=my border,
+ border radius=0mm
+ ]{kopi}
+}
+```
+
+![Photo with border and shadow](doc/quickstart-3.svg)
+
+Have a look at the [examples](doc) to learn how to create double pages, covers, and more.
+
+For a complete reference, read the [manual](doc/pagelayout-manual.pdf).
+
+## Installation
+
+In general, you should use the package manager shipped with your TeX distribution to install the pagelayout package.
+
+To install manually, copy the contents of [pagelayout.tds.zip](https://github.com/friedemannbartels/latex-pagelayout/releases/download/v1.0.3/pagelayout.tds.zip) to your local TeX directory tree and run the command `texhash`.
+
+To enable image optimization, shadow creation, and preflight, perform these installation steps:
+
+- Make sure that ImageMagick 7.0 or later and Inkscape 1.0 or later are installed.
+
+- Find your top level _texmf.cnf_ with the command `kpsewhich texmf.cnf`, and add `pagelayoutapi` to the list of `shell_escape_commands`.
+ ```
+ shell_escape_commands = pagelayoutapi
+ ```
+- When installing manually, add the directory _scripts/pagelayout_ to your `PATH`.
+
+## Development
+
+Run visual regression tests inside the _tests_ directory with the command `textestvis`.
diff --git a/macros/latex/contrib/pagelayout/doc/1x1.pdf b/macros/latex/contrib/pagelayout/doc/1x1.pdf
new file mode 100644
index 0000000000..5c1a747af1
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/1x1.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/doc/2x1.pdf b/macros/latex/contrib/pagelayout/doc/2x1.pdf
new file mode 100644
index 0000000000..ebbd75abe9
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/2x1.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/doc/3x2.pdf b/macros/latex/contrib/pagelayout/doc/3x2.pdf
new file mode 100644
index 0000000000..a68c035432
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/3x2.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/doc/banner.pdf b/macros/latex/contrib/pagelayout/doc/banner.pdf
new file mode 100644
index 0000000000..084241a0ab
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/banner.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/doc/banner.svg b/macros/latex/contrib/pagelayout/doc/banner.svg
new file mode 100644
index 0000000000..ed221c9df0
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/banner.svg
@@ -0,0 +1 @@
+<svg width="830" height="199" viewBox="0 0 622.5 149.25" version="1.2" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><defs><symbol overflow="visible" id="a"><path style="stroke:none" d="M.453-14.328h10.938v1.625H6.906V0H4.953v-12.703h-4.5zm0 0"/></symbol><symbol overflow="visible" id="b"><path style="stroke:none" d="M10.094-6.656V0H8.313v-6.656c0-.969-.172-1.676-.516-2.125-.336-.457-.867-.688-1.594-.688-.824 0-1.46.293-1.906.875-.438.586-.656 1.422-.656 2.516V0H1.875v-14.938h1.766v5.797c.312-.613.734-1.078 1.265-1.39.54-.32 1.18-.485 1.922-.485 1.094 0 1.91.368 2.453 1.094.54.719.813 1.809.813 3.266zm0 0"/></symbol><symbol overflow="visible" id="c"><path style="stroke:none" d="M10.75-6.25v.86H3.094v.046c-.055 1.469.226 2.528.844 3.172.613.637 1.476.953 2.593.953.563 0 1.149-.086 1.766-.265.613-.176 1.27-.446 1.969-.813v1.75c-.68.274-1.329.477-1.954.61A8.052 8.052 0 0 1 6.5.28c-1.668 0-2.969-.5-3.906-1.5-.938-1-1.406-2.379-1.406-4.14 0-1.72.457-3.086 1.375-4.11.914-1.031 2.144-1.547 3.687-1.547 1.363 0 2.441.47 3.234 1.407.79.93 1.211 2.046 1.266 3.359Zm-1.766-.531a3.385 3.385 0 0 0-.812-1.922c-.461-.54-1.125-.813-2-.813-.856 0-1.559.282-2.11.844-.542.563-.84 1.2-.89 1.906zm0 0"/></symbol><symbol overflow="visible" id="d"><path style="stroke:none" d="M3.594-1.36v5.454H1.828V-10.75h1.766v1.375c.3-.531.695-.938 1.187-1.219.489-.281 1.051-.422 1.688-.422 1.3 0 2.32.508 3.062 1.516.739 1 1.11 2.39 1.11 4.172 0 1.75-.375 3.125-1.125 4.125C8.773-.211 7.758.28 6.469.28c-.657 0-1.23-.14-1.719-.422a2.954 2.954 0 0 1-1.156-1.218Zm5.187-4c0-1.374-.219-2.41-.656-3.109-.43-.695-1.07-1.047-1.922-1.047-.855 0-1.508.356-1.953 1.063-.438.7-.656 1.73-.656 3.094 0 1.355.219 2.386.656 3.093.445.7 1.098 1.047 1.953 1.047.852 0 1.492-.347 1.922-1.047.438-.695.656-1.726.656-3.093zm0 0"/></symbol><symbol overflow="visible" id="e"><path style="stroke:none" d="M6.734-5.406h-.578c-1.031 0-1.808.183-2.328.547-.523.367-.781.902-.781 1.609 0 .648.191 1.152.578 1.516.395.355.938.53 1.625.53.969 0 1.727-.331 2.281-1 .563-.675.848-1.612.86-2.812v-.39Zm3.422-.735V0H8.391v-1.594c-.375.637-.852 1.11-1.422 1.422-.574.3-1.274.453-2.094.453-1.094 0-1.969-.304-2.625-.922-.648-.625-.969-1.453-.969-2.484 0-1.195.399-2.102 1.203-2.719.801-.625 1.977-.937 3.532-.937H8.39v-.282c-.012-.851-.23-1.472-.657-1.859-.43-.394-1.109-.594-2.046-.594-.606 0-1.215.09-1.829.266a7.692 7.692 0 0 0-1.796.75v-1.766c.656-.25 1.28-.437 1.874-.562a8.614 8.614 0 0 1 1.75-.188c.883 0 1.641.137 2.266.407A3.682 3.682 0 0 1 9.5-9.438c.238.325.406.72.5 1.188.102.469.156 1.172.156 2.11zm0 0"/></symbol><symbol overflow="visible" id="f"><path style="stroke:none" d="M8.234-5.469c0-1.32-.218-2.328-.656-3.015-.43-.688-1.055-1.032-1.875-1.032-.867 0-1.527.344-1.984 1.032-.45.687-.672 1.695-.672 3.015 0 1.336.226 2.352.687 3.047.457.688 1.118 1.031 1.985 1.031.812 0 1.43-.347 1.86-1.046.437-.696.655-1.708.655-3.032zM10-.687c0 1.613-.383 2.832-1.14 3.656-.762.832-1.883 1.25-3.36 1.25-.492 0-1-.047-1.531-.14a10.301 10.301 0 0 1-1.594-.391V1.952c.633.29 1.207.504 1.719.64.508.145.976.22 1.406.22.945 0 1.64-.262 2.078-.782.438-.523.656-1.344.656-2.469v-1.265C7.954-1.11 7.566-.66 7.078-.36c-.48.293-1.07.437-1.766.437-1.261 0-2.265-.5-3.015-1.5-.742-1.008-1.11-2.36-1.11-4.047 0-1.687.368-3.031 1.11-4.031.75-1.008 1.754-1.516 3.015-1.516.688 0 1.27.141 1.75.422.477.274.868.7 1.172 1.281v-1.406H10Zm0 0"/></symbol><symbol overflow="visible" id="g"><path style="stroke:none" d="M6.906-3.89c0 .792.145 1.39.438 1.796.289.406.718.61 1.281.61h2.063V0H8.453C7.398 0 6.582-.336 6-1.016c-.574-.675-.86-1.632-.86-2.875v-9.718H2.298v-1.375h4.61Zm0 0"/></symbol><symbol overflow="visible" id="h"><path style="stroke:none" d="M8.234-3.453C7.941-2.703 7.566-1.72 7.11-.5c-.636 1.688-1.062 2.719-1.28 3.094-.294.5-.665.875-1.11 1.125-.438.25-.95.375-1.532.375H1.766V2.609h1.046c.52 0 .926-.152 1.22-.453.288-.304.663-1.078 1.124-2.328L1-10.75h1.875l3.188 8.406 3.125-8.406h1.874zm0 0"/></symbol><symbol overflow="visible" id="i"><path style="stroke:none" d="M5.906-9.516c-.898 0-1.574.352-2.031 1.047-.46.7-.688 1.735-.688 3.11 0 1.355.227 2.386.688 3.093.457.7 1.133 1.047 2.031 1.047.907 0 1.586-.347 2.047-1.047.457-.707.688-1.738.688-3.093 0-1.375-.23-2.41-.688-3.11-.46-.695-1.14-1.047-2.047-1.047Zm0-1.5c1.5 0 2.64.485 3.422 1.454.79.968 1.188 2.37 1.188 4.203 0 1.836-.399 3.234-1.188 4.203C8.547-.196 7.406.28 5.906.28c-1.492 0-2.633-.476-3.422-1.437-.78-.969-1.171-2.367-1.171-4.203 0-1.832.39-3.235 1.171-4.204.79-.968 1.93-1.453 3.422-1.453zm0 0"/></symbol><symbol overflow="visible" id="j"><path style="stroke:none" d="M1.875-4.063v-6.671h1.766v6.671c0 .961.171 1.668.515 2.125.344.461.867.688 1.578.688.832 0 1.47-.29 1.907-.875.445-.594.671-1.438.671-2.531v-6.078h1.782V0H8.313v-1.61C8-.991 7.57-.522 7.03-.202 6.488.117 5.86.28 5.141.28c-1.106 0-1.93-.36-2.47-1.078-.53-.719-.796-1.805-.796-3.265Zm0 0"/></symbol><symbol overflow="visible" id="k"><path style="stroke:none" d="M5.89-13.797v3.047h4.016v1.375H5.891v5.828c0 .805.148 1.36.453 1.672.3.313.828.469 1.578.469h1.984V0H7.75C6.426 0 5.488-.266 4.937-.797c-.542-.531-.812-1.445-.812-2.75v-5.828H1.25v-1.375h2.875v-3.047zm0 0"/></symbol><symbol overflow="visible" id="l"><path style="stroke:none" d="M2.063-14.328h1.953v12.703h6.921V0H2.063zm0 0"/></symbol><symbol overflow="visible" id="n"><path style="stroke:none" d="M1.89-14.328h8.5v1.625H3.829v3.86h6.281v1.64H3.83v5.578h6.75V0H1.89zm0 0"/></symbol><symbol overflow="visible" id="o"><path style="stroke:none" d="M.828-14.328h2.078l3.156 5.406 3.204-5.406h2.078L7.047-7.594 11.657 0H9.561l-3.5-6.172L2.267 0H.172l4.797-7.594Zm0 0"/></symbol><symbol overflow="visible" id="p"><path style="stroke:none" d="M10.188-.547a6.16 6.16 0 0 1-1.47.61c-.5.144-1.015.218-1.546.218-1.656 0-2.953-.5-3.89-1.5-.938-1-1.407-2.379-1.407-4.14 0-1.77.469-3.157 1.406-4.157.938-1 2.235-1.5 3.89-1.5.52 0 1.024.07 1.516.204.5.136 1 .343 1.5.624v1.86c-.468-.414-.937-.719-1.406-.906-.469-.188-1.008-.282-1.61-.282-1.105 0-1.952.36-2.546 1.079-.594.718-.89 1.746-.89 3.078 0 1.324.296 2.343.89 3.062.602.719 1.453 1.078 2.547 1.078.613 0 1.164-.093 1.656-.281a4.082 4.082 0 0 0 1.36-.875zm0 0"/></symbol><symbol overflow="visible" id="q"><path style="stroke:none" d="M9.344-10.375v1.734a6.777 6.777 0 0 0-1.531-.671 5.717 5.717 0 0 0-1.563-.22c-.805 0-1.402.134-1.797.391-.387.262-.578.657-.578 1.188 0 .48.145.84.438 1.078.289.23 1.019.46 2.187.688l.719.125c.875.167 1.535.5 1.984 1 .457.5.688 1.152.688 1.953 0 1.062-.383 1.898-1.141 2.5C8-.016 6.953.28 5.61.28 5.077.281 4.52.223 3.936.11a16.123 16.123 0 0 1-1.89-.5v-1.828a9.414 9.414 0 0 0 1.89.766c.602.168 1.172.25 1.704.25.78 0 1.382-.156 1.812-.469.426-.32.64-.766.64-1.328 0-.82-.78-1.39-2.343-1.703l-.078-.016-.656-.14c-1.024-.196-1.766-.532-2.235-1-.469-.47-.703-1.11-.703-1.922 0-1.032.348-1.828 1.047-2.39.695-.563 1.691-.845 2.984-.845.582 0 1.141.059 1.672.172a8.64 8.64 0 0 1 1.563.469zm0 0"/></symbol><symbol overflow="visible" id="m"><path style="stroke:none" d="M4.14-8.828 2.704-3.703h2.86Zm-.827-1.203h1.656L8.03 0H6.625l-.734-2.61H2.375L1.656 0H.25Zm0 0"/></symbol></defs><path style="fill:#fff;stroke-width:1.45384" d="M4.12 0h614.253a4.111 4.111 0 0 1 4.12 4.122v140.324a4.111 4.111 0 0 1-4.12 4.12H4.12A4.111 4.111 0 0 1 0 144.444V4.12A4.111 4.111 0 0 1 4.12 0Z"/><path style="fill:#a3a3a3;fill-opacity:.2;stroke-width:1.45384" d="M0 148.569v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zm0-4.117v-.204h622.492v.204zm0-4.124v-.203h622.492v.203zm0-4.121v-.205h622.492v.203zm0-4.117v-.205h622.492v.203zm0-4.123v-.205h622.492v.203zm0-4.124v-.205h622.492v.204zm0-4.117v-.205h622.492v.204zm0-4.123v-.203h622.492v.203zm0-4.123v-.204h622.492v.204zm0-4.117v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zm0-4.118v-.203h622.492v.203zm0-4.123v-.203h622.492v.203zm0-4.123v-.203h622.492v.203zm0-4.117v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zm0-4.118v-.203h622.492v.203zm0-4.123V57.7h622.492v.203zm0-4.123v-.203h622.492v.203zm0-4.117v-.203h622.492v.203zm0-4.123v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zm0-4.117v-.204h622.492v.204zm0-4.124v-.203h622.492v.203zm0-4.123v-.203h622.492v.203zm0-4.117v-.203h622.492v.203zm0-4.123v-.203h622.492v.203zm0-4.123v-.204h622.492v.204zM0 8.45v-.204h622.492v.204zm0-4.123v-.204h622.492v.204zM0 .205V0h622.492v.204Z"/><path style="fill:#a3a3a3;fill-opacity:.2;stroke-width:1.45384" d="M0 148.563V0h.206v148.563Zm4.123 0V0h.207v148.563Zm4.117 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.124 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.121 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.207v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.207v148.563Zm4.117 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.124 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.118 0V0h.206v148.563Zm4.121 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.124 0V0h.207v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.124 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.118 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.122 0V0h.208v148.563Zm4.119 0V0h.206v148.563Zm4.121 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.124 0V0h.207v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.208v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.123 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.117 0V0h.207v148.563Zm4.124 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.122 0V0h.208v148.563Zm4.118 0V0h.207v148.563Zm4.122 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.124 0V0h.207v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.124 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.207v148.563Zm4.117 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.118 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.123 0V0h.206v148.563Zm4.117 0V0h.207v148.563Zm4.123 0V0h.207v148.563Zm4.122 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.118 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.124 0V0h.207v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.123 0V0h.208v148.563Zm4.117 0V0h.208v148.563Zm4.123 0V0h.207v148.563Zm4.124 0V0h.206v148.563Zm4.117 0V0h.206v148.563Zm4.123 0V0h.203l.003 148.563Z"/><path style="fill:#000;stroke-width:1.09038" d="M12.176.1v8.246h.58V.1Zm597.567 0v8.246h.58V.1ZM.103 12.174v.58h8.24v-.58zm614.053 0v.58h8.24v-.58zM.103 135.812v.58h8.24v-.579H.103Zm614.053 0v.58h8.24v-.579h-8.24zm-601.98 4.408v8.245h.58v-8.245zm597.567 0v8.245h.58v-8.245z"/><path style="color:#000;fill:#a3a3a3;fill-opacity:.2;stroke-width:1.45384;stroke-miterlimit:10;-inkscape-stroke:none" d="M0 136.206v-.204h622.492v.204zm0-20.609v-.205h622.492v.204zm0-20.603v-.204h622.492v.204zM0 74.39v-.204h622.492v.204zm0-20.61v-.203h622.492v.203zm0-20.603v-.204h622.492v.204zm0-20.61v-.204h622.492v.204z"/><path style="color:#000;fill:#a3a3a3;fill-opacity:.2;stroke-width:1.45384;stroke-miterlimit:10;-inkscape-stroke:none" d="M12.363 148.563V0h.207v148.563Zm20.603 0V0h.208v148.563Zm20.61 0V0h.207v148.563Zm20.603 0V0h.208v148.563Zm20.61 0V0h.206v148.563Zm20.603 0V0h.207v148.563Zm20.604 0V0h.207v148.563Zm20.608 0V0h.208v148.563Zm20.604 0V0h.208v148.563Zm20.604 0V0h.208v148.563Zm20.61 0V0h.207v148.563Zm20.603 0V0h.207v148.563Zm20.61 0V0h.206v148.563Zm20.602 0V0h.208v148.563Zm20.604 0V0h.208v148.563Zm20.61 0V0h.207v148.563Zm20.603 0V0h.208v148.563Zm20.604 0V0h.206v148.563Zm20.61 0V0h.206v148.563Zm20.603 0V0h.207v148.563Zm20.609 0V0h.207v148.563Zm20.603 0V0h.208v148.563Zm20.604 0V0h.208v148.563Zm20.61 0V0h.206v148.563Zm20.603 0V0h.207v148.563Zm20.604 0V0h.207v148.563Zm20.608 0V0h.208v148.563Zm20.604 0V0h.208v148.563Zm20.61 0V0h.208v148.563Zm20.603 0V0h.207v148.563Z"/><path style="fill:none;stroke:#ffbfbf;stroke-width:.56693;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M-.001.002v56.691h382.683V.002Zm0 0" transform="matrix(1.45384 0 0 -1.45384 33.072 115.497)"/><use xlink:href="#a" x="22.085" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#b" x="33.385" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#c" x="44.665" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#d" x="68.386" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#e" x="80.472" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#f" x="92.735" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#c" x="104.605" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#g" x="114.529" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#e" x="125.81" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#h" x="137.287" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#i" x="148.39" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#j" x="159.671" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#k" x="170.362" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#l" x="194.082" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#m" x="198.886" y="74.787" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#a" x="204.241" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#n" x="212.828" y="84.475" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#o" x="222.239" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#p" x="245.979" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#g" x="255.707" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#e" x="266.987" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#q" x="278.838" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/><use xlink:href="#q" x="289.745" y="79.101" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="matrix(1.45384 0 0 1.45384 .103 .102)"/></svg> \ No newline at end of file
diff --git a/macros/latex/contrib/pagelayout/doc/banner.tex b/macros/latex/contrib/pagelayout/doc/banner.tex
new file mode 100644
index 0000000000..4f4dece806
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/banner.tex
@@ -0,0 +1,58 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008/05/04 or later.
+%%
+
+\documentclass[graphpaper,draft]{pagelayout}
+\usepackage{microtype}
+\usepackage{fontspec}
+
+\setmainfont{Menlo}
+
+\pagewidth=14.5cm
+\pageheight=3cm
+\bleed=3mm
+\margin=5mm
+
+\begin{document}
+
+ \page{
+ \tikzgraphic{
+ \draw[line width=0.2mm,draw=pink] (0,0) rectangle (\width,\height);
+ }
+
+ \setgrid[y=\y-1.8mm]{{{}}}
+ \text[bottom]{
+ \fontsize{19.8pt}{24pt}\selectfont
+ T\kern-0.03em
+ h\kern-0.03em
+ e
+ p\kern0.01em
+ a\kern0.02em
+ g\kern0.00em
+ e\kern-0.1em
+ l\kern-0.03em
+ a\kern-0.02em
+ y\kern-0.04em
+ o\kern-0.03em
+ u\kern-0.06em
+ t\
+ \LaTeX\
+ c\kern-0.11em
+ l\kern-0.03em
+ a\kern-0.00em
+ s\kern-0.05em
+ s
+ }
+ }
+
+\end{document}
diff --git a/macros/latex/contrib/pagelayout/doc/example-book.pdf b/macros/latex/contrib/pagelayout/doc/example-book.pdf
new file mode 100644
index 0000000000..f566a238da
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/example-book.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/doc/example-book.tex b/macros/latex/contrib/pagelayout/doc/example-book.tex
new file mode 100644
index 0000000000..04e9dd4db6
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/example-book.tex
@@ -0,0 +1,107 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008/05/04 or later.
+%%
+
+\documentclass[
+ draft,
+ twoside,
+ beginright,
+ % fanfold,
+ import,
+ optimize={quality=50, density=72}
+]{pagelayout}
+
+\usepackage{lipsum}
+\usepackage{tgheros}
+\usepackage[T1]{fontenc}
+\renewcommand*\familydefault{\sfdefault}
+
+\pagewidth=200mm
+\pageheight=200mm
+\margin=20mm
+\innermargin=40mm
+\gutter=10mm
+\bleed=3mm
+\safetymargin=5mm
+\spinewidth=7mm
+
+\safezone
+
+\newbeforepage{primary}{
+ \setgrid[height=\margin, y=0mm]{{{}}}
+
+ \leftpage{
+ \text[center]{\thepage}
+ }
+
+ \rightpage{
+ \text[center]{\hspace*{\fill}\thepage}
+ }
+}
+\setbeforepage{primary}
+
+\begin{document}
+ \Large
+ \pagenumbering{roman}
+
+ \template[back cover,margin=0mm, inner margin=0mm]{f}{}
+
+ \page[front cover,color=white,page graphic=kopi, inner margin=\margin]{
+ \text[bottom]{
+ \fontsize{42mm}{46mm}\selectfont
+ \centering
+ KØPI
+ }
+
+ \ifspine{
+ \setgrid[width=\spinewidth,x=-\spinewidth]{{{1}}}
+ \place{0 0 1 1}
+ \tikzgraphic{
+ \node[rotate=90] at (0.5\width,0.5\height){
+ \fontsize{4mm}{8mm}\selectfont
+ KØPI
+ };
+ }
+ }
+ }
+
+ \page{
+ \text{
+ \strut
+ \tableofcontents
+ }
+ }
+
+ \pagenumbering{arabic}
+
+ \setcounter{page}{0}
+ \page[before page=]{}
+
+ \page{
+ \text{
+ \strut
+ \section{Introduction}
+ \lipsum[1][1-7]
+ }
+ }
+
+ \newgraphic{kopi wide}{vpos=0.43, file=kopi}
+ \page[double, page graphic=kopi wide, before page=, color=white]{
+ \rightpage{
+ \text[bottom]{
+ \lipsum[1][8-10]
+ }
+ }
+ }
+
+\end{document}
diff --git a/macros/latex/contrib/pagelayout/doc/example-borders-and-shadows.pdf b/macros/latex/contrib/pagelayout/doc/example-borders-and-shadows.pdf
new file mode 100644
index 0000000000..41096e77a3
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/example-borders-and-shadows.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/doc/example-borders-and-shadows.tex b/macros/latex/contrib/pagelayout/doc/example-borders-and-shadows.tex
new file mode 100644
index 0000000000..33c0b14e65
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/example-borders-and-shadows.tex
@@ -0,0 +1,52 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008/05/04 or later.
+%%
+
+\documentclass[draft]{pagelayout}
+\usepackage{lipsum}
+
+\pagewidth=15cm
+\pageheight=15cm
+\gutter=10mm
+
+\newborder{my border}{width=2mm, color=magenta, radius=5mm}
+\newshadow{my shadow}{size=5, color=magenta, opacity=1}
+
+\begin{document}
+
+ \template{ff-ff}{
+ \graphic[
+ border=my border,
+ border radius=10mm
+ ]{1x1}
+
+ \graphic[
+ border=my border,
+ shadow=my shadow
+ ]{1x1}
+
+ \text[
+ shadow=my shadow,
+ shadow color=black,
+ shadow opacity=0.2
+ ]{\lipsum[1][1-5]}
+
+ \graphic[
+ shadow size=5,
+ shadow opacity=0.6,
+ shadow xshift=1mm,
+ shadow yshift=1mm
+ ]{1x1}
+ }
+
+\end{document}
diff --git a/macros/latex/contrib/pagelayout/doc/example-graphic.pdf b/macros/latex/contrib/pagelayout/doc/example-graphic.pdf
new file mode 100644
index 0000000000..2d7519147c
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/example-graphic.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/doc/example-graphic.tex b/macros/latex/contrib/pagelayout/doc/example-graphic.tex
new file mode 100644
index 0000000000..5eb085bef7
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/example-graphic.tex
@@ -0,0 +1,35 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008/05/04 or later.
+%%
+
+\documentclass{pagelayout}
+
+\pagewidth=20cm
+\pageheight=20cm
+\bleed=3mm
+
+\optimize[quality=50, density=72]
+\preflight
+\safezone
+
+\newgraphic{kopi scaled}{scale=1.02, hpos=0.2, vpos=1, file=kopi}
+
+\begin{document}
+
+ \page{
+ \graphic[hpos=0, scale=1.2]{3x2}
+ }
+
+ \page[page graphic=kopi scaled]{}
+
+\end{document}
diff --git a/macros/latex/contrib/pagelayout/doc/example-grid.pdf b/macros/latex/contrib/pagelayout/doc/example-grid.pdf
new file mode 100644
index 0000000000..1263d4883f
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/example-grid.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/doc/example-grid.tex b/macros/latex/contrib/pagelayout/doc/example-grid.tex
new file mode 100644
index 0000000000..6bc3573867
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/example-grid.tex
@@ -0,0 +1,150 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008/05/04 or later.
+%%
+
+\documentclass{pagelayout}
+\usepackage{lipsum}
+
+\pagewidth=20cm
+\pageheight=20cm
+\gutter=10mm
+
+\grid
+
+\begin{document}
+
+ \page{
+ \setgrid{
+ {{1}{1}}
+ {{1}{1}}
+ }
+
+ \text{
+ A grid with two rows and two cells in each row.
+ }
+ }
+
+ \page{
+ \setgrid{
+ {{3}{2}}
+ {{2}{3}}
+ }
+
+ \text{
+ A grid with a width relation between cells.
+ }
+ }
+
+ \page{
+ \setgrid{
+ {[3]{1}{1}}
+ {[1]{1}{1}}
+ }
+
+ \text{
+ A grid with a height relation between rows.
+ }
+ }
+
+ \page{
+ \setgrid{
+ {[2]{1}{3!}}
+ {[2]{1}{2!}}
+ }
+
+ \text{
+ A grid with a fixed aspect ratio of some cells.
+ }
+
+ \graphic{3x2}
+
+ \place{1 1 2 2}
+ \graphic{1x1}
+ }
+
+ \page{
+ \setgrid{
+ {[1]{1!}{1!}{1!}}
+ {[2]{4!}{3!}}
+ }
+
+ \text{
+ A grid with a fixed aspect ratio of all cells.
+ }
+
+ \place{0 0 1 1}
+ \graphic{1x1}
+
+ \graphic{1x1}
+
+ \graphic{1x1}
+
+ \graphic{2x1}
+
+ \graphic{3x2}
+ }
+
+ \page{
+ \setgrid{
+ {[2]{2!}{2!}{2!}}
+ {[2!]{4!}{3}}
+ }
+
+ \graphic{1x1}
+
+ \graphic{1x1}
+
+ \graphic{1x1}
+
+ \graphic{2x1}
+
+ \text{
+ A grid with a fixed height relation between rows.
+ }
+ }
+
+ \page[gutter=10mm]{
+ \setgrid[
+ width=0.5\width,
+ x=\margin
+ ]{
+ {{1}}
+ }
+ \text{
+ Multiple grids on one page.
+ }
+ \setgrid[
+ width=0.5\width-\gutter,
+ x=\margin+0.5\width+\gutter
+ ]{
+ {{1}}
+ {{1}}
+ {{1}}
+ }
+ }
+
+ \page{
+ \setgrid[width=\height]{
+ {{1}{1}}
+ {{1}{1}}
+ }
+ \text{
+ A grid with free positioned content. The gutter is preserved.
+ }
+ \place{0.5 0.5 1.5 1.5}
+ \graphic{1x1}
+ \place{1.5 1.5 2 2}
+ \graphic{1x1}
+ }
+
+\end{document}
diff --git a/macros/latex/contrib/pagelayout/doc/example-template.pdf b/macros/latex/contrib/pagelayout/doc/example-template.pdf
new file mode 100644
index 0000000000..def352592f
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/example-template.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/doc/example-template.tex b/macros/latex/contrib/pagelayout/doc/example-template.tex
new file mode 100644
index 0000000000..b10e8a7486
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/example-template.tex
@@ -0,0 +1,46 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008/05/04 or later.
+%%
+
+\documentclass[draft]{pagelayout}
+\usepackage{lipsum}
+
+\pagewidth=15cm
+\pageheight=15cm
+\gutter=10mm
+
+\begin{document}
+
+ \template[gutter=5mm]{so-gs}{
+ \text{
+ This is a generic template.
+ }
+ }
+
+ \newtemplate{my template}{
+ \setgrid[height=\height-20mm]{
+ {[1]{1!}{1}}
+ {[1]{1!}{1}}
+ }
+ \placeholder{0 0 1 1}
+ \placeholder{1 0 2 1}
+ \placeholder{0 1 2 2}
+ }
+
+ \template[outer margin=10mm]{my template}{
+ \text{
+ This is a custom template.
+ }
+ }
+
+\end{document}
diff --git a/macros/latex/contrib/pagelayout/doc/example-text.pdf b/macros/latex/contrib/pagelayout/doc/example-text.pdf
new file mode 100644
index 0000000000..34212cb021
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/example-text.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/doc/example-text.tex b/macros/latex/contrib/pagelayout/doc/example-text.tex
new file mode 100644
index 0000000000..82376d1abc
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/example-text.tex
@@ -0,0 +1,53 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008/05/04 or later.
+%%
+
+\documentclass{pagelayout}
+\usepackage{lipsum}
+
+\pagewidth=15cm
+\pageheight=15cm
+\gutter=10mm
+
+\setgrid{
+ {{1}{1}}
+}
+
+\begin{document}
+
+ \page{
+ \text[breakable, name=lorem]{
+ \lipsum[2-3]
+ \par
+ \lipsum[4]
+ }
+ \usetext[lorem]
+ }
+
+ \page{
+ \usetext[lorem]
+ \tcbset{
+ boxrule=1mm,
+ boxsep=1mm,left=2mm,right=2mm,top=2mm,bottom=2mm,
+ colback=yellow,
+ colframe=red!75!black,
+ opacityframe=1,
+ opacityback=1,
+ arc=1mm
+ }
+ \text{
+ Text boxes use the package tcolorbox, so you can style these with the tcolorbox macro \texttt{tcbset}
+ }
+ }
+
+\end{document}
diff --git a/macros/latex/contrib/pagelayout/doc/kopi.jpg b/macros/latex/contrib/pagelayout/doc/kopi.jpg
new file mode 100644
index 0000000000..b2df8920c7
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/kopi.jpg
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/doc/pagelayout-manual-layout-guides.pdf b/macros/latex/contrib/pagelayout/doc/pagelayout-manual-layout-guides.pdf
new file mode 100644
index 0000000000..0ec732a859
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/pagelayout-manual-layout-guides.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/doc/pagelayout-manual-layout-guides.tex b/macros/latex/contrib/pagelayout/doc/pagelayout-manual-layout-guides.tex
new file mode 100644
index 0000000000..def8cdfda0
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/pagelayout-manual-layout-guides.tex
@@ -0,0 +1,41 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008/05/04 or later.
+%%
+
+\documentclass[
+ bleed=3mm,
+ margin=10mm,
+ gutter=5mm,
+ page width=20cm,
+ page height=20cm,
+ safety margin=2mm,
+ draft,
+ safezone,
+ grid,
+ graphpaper
+]{pagelayout}
+
+\begin{document}
+
+ \newtemplate{layoutguidesexample}{
+ \setgrid{
+ {{6}{1}}
+ }
+ \placeholder{0 1 1 2}
+ \placeholder{0 0 1 1}
+ }
+ \template{layoutguidesexample}{
+
+ }
+
+\end{document}
diff --git a/macros/latex/contrib/pagelayout/doc/pagelayout-manual.pdf b/macros/latex/contrib/pagelayout/doc/pagelayout-manual.pdf
new file mode 100644
index 0000000000..6c8c02bfe9
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/pagelayout-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/doc/pagelayout-manual.tex b/macros/latex/contrib/pagelayout/doc/pagelayout-manual.tex
new file mode 100644
index 0000000000..4c636941e3
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/pagelayout-manual.tex
@@ -0,0 +1,473 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008/05/04 or later.
+%%
+
+\documentclass[a4paper]{ltxdoc}
+\usepackage{microtype}
+\usepackage{hyperref}
+\usepackage{tikz}
+\OnlyDescription
+\hypersetup{pdfborder={0 0 0}}
+\def\pagelayoutversion{1.0.3}
+
+\begin{document}
+
+\title{
+ \Huge The \textsf{pagelayout} class\vskip3mm
+ \Large Manual for Version \pagelayoutversion\vskip3mm
+ \normalsize\url{https://github.com/friedemannbartels/latex-pagelayout}
+}
+
+\author{\href{mailto:mail@friedemannbartels.de}{Friedemann Bartels}}
+
+\maketitle
+
+\tableofcontents
+
+\newpage
+
+\section{Introduction}
+
+When Apple discontinued its photo book feature in Apple Photos, I was missing an easy-to-use photo book application.
+In 2020, I started to develop my own solution.
+What started with some SVG templates and shell scripts ended up in the pagelayout class, a declarative desktop publishing approach.
+\par
+With the pagelayout class you can create single- and double-sided documents, create pages with margins, safety margins, and bleed, use templates, align text and graphics in a grid, wrap text across multiple pages and use before pages.
+Generic templates, automatic grid layout and a simple and consistent user interface make it easier than ever to create graphics-rich documents with \LaTeX.
+Under the hood the TikZ and tcolorbox packages, ImageMagick and Inkscape are used.
+
+\section{Document}\label{sec:document}
+
+The document options described in the following can be either set as a document option (|\documentclass[twoside]{pagelayout}|) or with a macro (|\twoside|) in the preamble.
+
+\DescribeMacro {\documentclass}
+Use the class with the |\documentclass|\oarg{options}|{pagelayout}| macro.
+A single sided document is the default.
+\begin{figure}[h!]
+\begin{tikzpicture}
+ \draw[black, thin] (0,0) rectangle (1,1);
+ \draw[black, line width=1.5pt,line cap=round] (0,0) -- (0,1);
+ \draw[black, thin] (1.25,0) rectangle (2.25,1);
+ \draw[black, line width=1.5pt,line cap=round] (1.25,0) -- (1.25,1);
+ \draw[black, thin] (2.5,0) rectangle (3.5,1);
+ \draw[black, line width=1.5pt,line cap=round] (2.5,0) -- (2.5,1);
+\end{tikzpicture}
+\end{figure}
+
+\DescribeMacro {\twoside}
+Using the document option |twoside| results in a document with left and right pages.
+When you create a two-sided document, your document always has an even number of pages.
+If you create a document with an odd number of pages, an additional page is automatically inserted.
+Two-sided documents start with a right page by default.
+\begin{figure}[h!]
+\begin{tikzpicture}
+ \draw[black, thin] (0,0) rectangle (1,1);
+ \draw[black, line width=1.5pt,line cap=round] (0,0) -- (0,1);
+ \draw[black, thin] (1.25,0) rectangle (2.25,1);
+ \draw[black, line width=1.5pt,line cap=round] (2.25,0) -- (2.25,1);
+ \draw[black, thin] (2.35,0) rectangle (3.35,1);
+ \draw[black, line width=1.5pt,line cap=round] (2.35,0) -- (2.35,1);
+ \draw[black, thin] (3.6,0) rectangle (4.6,1);
+ \draw[black, line width=1.5pt,line cap=round] (4.6,0) -- (4.6,1);
+\end{tikzpicture}
+\end{figure}
+
+\DescribeMacro {\beginleft}
+Use the option |beginleft| to begin with a left page.
+\begin{figure}[h!]
+\begin{tikzpicture}
+ \draw[black, thin] (0,0) rectangle (1,1);
+ \draw[black, line width=1.5pt,line cap=round] (1,0) -- (1,1);
+ \draw[black, thin] (1.1,0) rectangle (2.1,1);
+ \draw[black, line width=1.5pt,line cap=round] (1.1,0) -- (1.1,1);
+ \draw[black, thin] (2.35,0) rectangle (3.35,1);
+ \draw[black, line width=1.5pt,line cap=round] (3.35,0) -- (3.35,1);
+ \draw[black, thin] (3.45,0) rectangle (4.45,1);
+ \draw[black, line width=1.5pt,line cap=round] (3.45,0) -- (3.45,1);
+\end{tikzpicture}
+\end{figure}
+
+By default, each page is placed on one paper.
+\DescribeMacro {\fanfold}
+With the |fanfold| option you can change this behavior so that a left and a right page are placed on one paper.
+In this case, the first page is a left one by default.
+\begin{figure}[h!]
+\begin{tikzpicture}
+ \draw[black, thin] (0,0) rectangle (1,1);
+ \draw[black, thin] (1,0) rectangle (2,1);
+ \draw[black, line width=1.5pt,line cap=round] (1,0) -- (1,1);
+ \draw[black, thin] (2.25,0) rectangle (3.25,1);
+ \draw[black, thin] (3.25,0) rectangle (4.25,1);
+ \draw[black, line width=1.5pt,line cap=round] (3.25,0) -- (3.25,1);
+\end{tikzpicture}
+\end{figure}
+
+\DescribeMacro {\cover}
+The |cover| option is similar to the |fanfold| option, but only applied to cover pages.
+Read more about cover pages in section~\ref{sec:pages}.
+\begin{figure}[h!]
+\begin{tikzpicture}
+ \draw[black, thin] (0,0) rectangle (2.3,1);
+ \draw[black, line width=1.5pt,line cap=round] (1,0) -- (1,1);
+(3.25,1);
+ \draw[black, line width=1.5pt,line cap=round] (1.3,0) -- (1.3,1);
+(3.25,1);
+\end{tikzpicture}
+\end{figure}
+
+\DescribeMacro {\beginright}
+If you want your fanfold document to start with a right hand page, you can use the option |beginright|.
+\begin{figure}[h!]
+\begin{tikzpicture}
+ \draw[black, thin] (0,0) rectangle (1,1);
+ \draw[black, thin] (0,0) -- (1,1);
+ \draw[black, thin] (0,1) -- (1,0);
+ \draw[black, thin] (1,0) rectangle (2,1);
+ \draw[black, line width=1.5pt,line cap=round] (1,0) -- (1,1);
+ \draw[black, thin] (2.25,0) rectangle (3.25,1);
+ \draw[black, thin] (3.25,0) rectangle (4.25,1);
+ \draw[black, line width=1.5pt,line cap=round] (3.25,0) -- (3.25,1);
+ \draw[black, thin] (4.5,0) rectangle (5.5,1);
+ \draw[black, thin] (5.5,0) rectangle (6.5,1);
+ \draw[black, thin] (5.5,0) -- (6.5,1);
+ \draw[black, thin] (5.5,1) -- (6.5,0);
+ \draw[black, line width=1.5pt,line cap=round] (5.5,0) -- (5.5,1);
+\end{tikzpicture}
+\end{figure}
+
+\subsection{Lengths}\label{subsec:size}
+
+The document lengths described below can be set either as a document option (|\documentclass[page width=21cm]{pagelayout}|) or by assigning the dimension directly (|\pagewidth=21cm|) in the preamble or in the document.
+
+\DescribeMacro {\pagewidth}
+\DescribeMacro {\pageheight}
+You can set the lengths |page width| and |page height|.
+The default page size is |210mm| by |297mm|.
+
+\DescribeMacro {\bleed}
+You can set the |bleed| length.
+It applies to all paper edges.
+The default bleed is |0mm|.
+You can override the bleed for each edge separately by defining the lengths |top bleed|, |inner bleed|, |bottom bleed|, |outer bleed|.
+The paper size results from the page size and the bleed.
+
+\DescribeMacro {\safetymargin}
+The |safety margin| is the only length that has no influence on the final result.
+Its only purpose is to control the safe zone during editing.
+It is |0mm| by default and can be configured for each edge by defining |top safety margin|, |inner safety margin|, |bottom safety margin| and |outer safety margin|.
+
+\DescribeMacro {\margin}
+\DescribeMacro {\gutter}
+You can set the lengths |margin| and |gutter| for the document, for a page (see section~\ref{sec:pages}) or for a grid (see section~\ref{sec:grid}).
+The default margin is |20mm|, the default gutter is |0mm|.
+Similar to bleed and safety margin, the margin can be defined for each edge individually by setting |top margin|, |outer margin|, |bottom margin| and |inner margin|.
+
+You can create documents with cover pages.
+\DescribeMacro {\coverwidth}
+\DescribeMacro {\coverheight}
+Read more about creating cover pages in section~\ref{sec:pages}.
+You can set the lengths |coverwidth| and |coverheight|.
+By default, the cover pages are the same size as the inside pages.
+If you want to create a cover with a spine, use the |fanfold| or |cover| option described in section~\ref{sec:document}.
+In this case the length |spinewidth| takes effect.
+The default spine width is |3mm|.
+\par
+You can overwrite the bleed and the safety margin for cover pages.
+To do this, prefix the respective lengths described above.
+For example, define |cover inner bleed| or |cover safety margin|.
+
+\subsection{Page Graphics and Colors}\label{subsec:colors}
+
+You can define a page graphic and a page color with the options |page graphic| and |page color|.
+Set the option |color| to define the text color.
+These options can be defined for the document or for each page (see section~\ref{sec:pages}).
+\par
+Read how to set the scale and crop of a page graphic with the |\newgraphic| macro in section~\ref{sec:content}.
+
+\subsection{Layout Guides}
+
+The layout guides described in the following can be either set as a document option (|\documentclass[grid]{pagelayout}|) or using a macro (|\grid|) in the preamble or the document.
+Layout guides can be switched on (|\safezone|) or off (|\nosafezone|).
+
+\DescribeMacro {\grid}
+The |grid| option visualizes the margin and the grid gutters with green lines.
+Read more about the grid in section~\ref{sec:grid}.
+\DescribeMacro {\safezone}
+The |safezone| layout guide shows a red border for the bleed and a thin pink line to indicate the safety margin.
+\DescribeMacro {\cuttingmarks}
+As an alternative to |safezone|, you can also use |cutting marks| to display cutting marks.
+\DescribeMacro {\graphpaper}
+Show a graph paper with the |graph paper| option.
+
+\begin{figure}[h]
+\begin{tikzpicture}
+ \node[anchor=south west,inner sep=0] (image) at (0,0) {\includegraphics[trim={15cm 16.5cm 0cm 0},clip,scale=1,page=1]{pagelayout-manual-layout-guides.pdf}};
+ \node[anchor=south west,text depth=0mm,text width=4cm] (bleed) at (65mm,33mm) {Bleed};
+ \draw (bleed) -- ++(-32mm,0);
+ \node[anchor=south west,text depth=0mm,text width=4cm] (bleed) at (65mm,27mm) {Safety margin};
+ \draw (bleed) -- ++(-35mm,0.0);
+ \node[anchor=south west,text depth=0mm,text width=4cm] (margin) at (65mm,21mm) {Margin};
+ \draw (margin) -- ++(-43mm,0.0);
+ \node[anchor=south west,text depth=0mm,text width=4cm] (gutter) at (65mm,15mm) {Gutter};
+ \draw (gutter) -- ++(-70mm,0.0);
+ \node[anchor=south west,text depth=0mm,text width=4cm] (placeholder) at (65mm,9mm) {Placeholder};
+ \draw (placeholder) -- ++(-50mm,0.0);
+ \node[anchor=south west,text depth=0mm,text width=4cm] (graphpaper) at (65mm,3mm) {Graph paper};
+ \draw (graphpaper) -- ++(-40mm,0.0);
+\end{tikzpicture}%
+\end{figure}
+
+\DescribeMacro {\placeholders}
+The |placeholders| option shows template placeholders.
+Read more about templates in section~\ref{sec:templates}.
+\DescribeMacro {\fillpages}
+If you create a document with a cover and a first right hand page, use the |fill pages| option during editing to add blank pages to get a better impression of the final result.
+
+\subsection{Draft Mode}\label{subsec:draftmode}
+
+The |draft| option is a shortcut to enable the options |placeholders|, |cutting marks| and |fill pages|.
+It also speeds up rebuilding the PDF when changing the document.
+
+\section{Pages}\label{sec:pages}
+
+\DescribeMacro {\page}
+Create a page with the macro |\page|\oarg{options}\marg{content}.
+You can overwrite the document options |margin|, |top margin|, |bottom margin|, |inner margin|, |outer margin|, |gutter|, |page color|, |page graphic| and |color| for each page.
+
+Use the option |double| to create a double page.
+When creating a double page after a left page, a right page is automatically inserted before the double page.
+The option |double| is only recognized for double sided documents.
+\par
+Use the options |front cover| or |back cover| to create a front or back cover.
+If you have a back cover and a front cover, the back cover page must be defined first.
+If no option is active, the front cover is placed as the first page and the back cover as the last page of the document.
+In this case, the only difference from normal pages is that the cover pages are not counted in the page numbering.
+\par
+If the option |fanfold| or |cover| is selected, the back and front covers are laid out on one paper so that the cover is suitable for a book with a hard or soft cover (see section~\ref{sec:document}).
+Space is reserved between the back and front covers for the spine.
+Set the |spine width| document option as described in section~\ref{subsec:size}.
+\par
+With the options |hpos| and |vpos| you can set the default grid alignment for a page.
+Read more about the grid in the next section.
+
+\DescribeMacro {\setpagecolor}Alternativly to the option you can use the macro |\setpagecolor|\marg{color} to set the page color for all following pages.
+
+\DescribeMacro {\setpagegraphic}With the macro |\setpagegraphic|\oarg{options}\marg{name} you can define a page graphic for all following pages.
+The name references a graphic version created with the |\newgraphic| macro (see section~\ref{sec:content}).
+If no graphic version with the given name exists, the macro uses the name as the file name.
+You can change the clipping by defining relative decimal values for the options |scale| (>1), |hpos| and |vpos| (0-1).
+
+\DescribeMacro {\newbeforepage}With the macro |\newbeforepage|\marg{name}\marg{content} you can create a reusable page layer, that can be set before pages.
+\DescribeMacro {\setbeforepage}
+Use the macro |\setbeforepage|\marg{name} to define a before page for all following pages or use the page option |before page| to specify a before page for a individual page.
+
+\DescribeMacro {\ifleftpage}
+\DescribeMacro {\ifrightpage}
+Use the condition |\ifleftpage|\marg{content} and |\ifrightpage|\marg{content} to check for the current page alignment.
+
+\DescribeMacro {\leftpage}
+Within a page scope you can use the |\leftpage|\marg{content} macro to place content only on a left page.
+In comparison to the |\ifleftpage|\marg{content} condition, the macro sets a grid for a single page.
+That way you can combine single with double page layouts.
+\DescribeMacro {\rightpage}
+Accordingly you can use the |\rightpage|\marg{content} macro.
+
+\section{Grid}\label{sec:grid}
+
+The grid allows you to create rows with cells.
+You can define width and height relations between rows and cells.
+All definitions are relative.
+The size and position results from these relations and the configured dimensions page width, page height, margin and gutter.
+
+\DescribeMacro{\setgrid}
+Create a grid with the macro |\setgrid|\oarg{options}\marg{config}.
+The grid configuration is a nested list of rows and cells.
+A cell is defined by a number that describes the width ratio to the other cells in the row.
+The default grid describes a row with one cell:
+
+\begin{verbatim}
+ \setgrid{
+ {{}}}
+\end{verbatim}
+
+You can define a width relation between cells by adding a integer value for each cell:
+
+\begin{verbatim}
+ \setgrid{
+ {{1}{2}}}
+\end{verbatim}
+
+With an optional integer value for each row you can set a height relation between rows:
+
+\begin{verbatim}
+ \setgrid{
+ {[2]{1}{2}}
+ {[1]{1}{2}}}
+\end{verbatim}
+
+You can set an aspect ratio for a cell by adding a |!| to the width.
+This way the aspect ratio is defined by the width of the cell and the height of the row.
+If all cells in a row have a fixed aspect ratio, the aspect ratio of the row is fixed too.
+In the following, a row with only fixed cells is named a fixed row.
+Because the height of a fixed row is determined by the aspect ratios of the cells, the height relation to the flexible rows is broken.
+In this case, you can force a height relation between flexible and fixed rows by adding a |!| to the height of the flexible row.
+In the following, a row with a forced height is named a forced row.
+
+The example defines a first fixed row with one cell and an aspect ratio of 3:2.
+The height of the second row is forced half of the height of the first row.
+The cells in the second row share the available width in the ratio one to two:
+
+\begin{verbatim}
+ \setgrid{
+ {[2]{3!}}
+ {[1!]{1}{2}}}
+\end{verbatim}
+
+If the height of fixed and forced rows exceeds the available height, the grid shrinks to fit the available space.
+The defined aspect ratios of the cells are preserved and the grid is centered horizontally.
+In this case you can define the |hpos| option to align the grid horizontally.
+A value of |0| aligns the grid to the left, a value of |1| aligns the grid to the right.
+The default is a value of |0.5|.
+
+If the height of fixed and forced rows is less than the available height, all flexible rows share the excess height.
+If there are no flexible rows, the grid is centered vertically.
+In this case you can define the |vpos| option to align the grid vertically.
+A value of |0| aligns the grid to the top, a value of |1| aligns the grid to the bottom.
+The default is a value of |0.5|.
+
+As for a document or a page you can set |margin| and |gutter| options for a specific grid.
+With the options |width|, |height|, |x| and |y| you can override the intrinsic grid size and position.
+When overriding the grid size and position, you can calculate with the intrinsic values, for example |x=\x-1cm|.
+
+\subsection{Placing Content}
+
+The grid aligns content (see section~\ref{sec:content}) automatically in the given grid cells.
+To set the position of a content box manually use the macro |\place|\marg{fromrow fromcell torow tocell}.
+\DescribeMacro{\place}
+To place content in the first row and first cell use the macro |\place{0 0 1 1}| before the content.
+The definded place applies only for the following content box.
+The next boxes are then again placed with auto layout.
+\par
+The macro accepts decimals.
+That allows you to place content everywhere within the grid.
+The |gutter| is taken into account when calculating the positions.
+
+\section{Content}\label{sec:content}
+
+\subsection{Text}
+
+\DescribeMacro{\text}
+With the macro |\text|\oarg{options}\marg{text} you can place text.
+Align the text vertically with the |center| and |bottom| options.
+\par
+The |\text| macro uses the package tcolorbox and accepts tcolorbox options, for example to set text, frame or background color and transparency.
+The tcolorbox behaves slightly diffenrent then the standalone version: spacings, rules and background are removed by default.
+You can change the behaviour with the tcolorbox macro |\tcbset|\marg{options}.
+Also the |arc| options behaves different: if you set the |arc| to |0pt| the |outer arc| is also set to |0pt|.
+\par
+Add the option |breakable| to break text over multiple boxes and pages.
+\DescribeMacro{\usetext}
+Use the macro |\usetext|\oarg{name} to place the following text boxes in the grid.
+If you want to use multiple breakable text boxes you can initialize the text with the |name| option and define a name that you then can pass to the |\usetext| option.
+\par
+The |\text| macro accepts the options |shadow|, |shadow size|, |shadow color|, |shadow opacity|, |shadow xshift|, |shadow yshift|, |border|, |border width|,\break |border color| and |border radius|.
+Read more about shadows and borders in section~\ref{subsec:borders}.
+
+\subsection{Graphics}
+
+\DescribeMacro{\newgraphic}
+Create a reusable graphic version with the |\newgraphic|\marg{name}\marg{options} macro.
+Define the options |scale| (>1), |hpos| and |vpos| (0-1) to set the clipping of the graphic.
+With the option |file| you can link a file.
+If no file is defined, the name is used as the file name.
+
+\DescribeMacro{\graphic}
+The |\graphic|\oarg{options}\marg{name} macro places a graphic.
+The name references a graphic version created with the |\newgraphic| macro.
+If no graphic version with the given name exists, the macro uses the name as the file name.
+
+The graphic is scaled to fit in the content box.
+If the aspect ratio of the graphic differs from that of the defined content box, the graphic is cropped.
+You can change the cropping by defining relative decimal values for the options |scale| (>1), |hpos| and |vpos| (0-1).
+Same as the |\text| macro, the |\graphic| macro accepts the |border| and |shadow| options described in section~\ref{subsec:borders}.
+
+\DescribeMacro{\graphicspath}
+You can use the macro |\graphicspath|\marg{dir-list} of the graphics package to specify a list of directories in which to search for graphic files.
+
+\subsection{Other}
+
+\DescribeMacro{\xput}
+The macro |\xput|\marg{code} is an easy way to place arbitrary content in the grid.
+Within the code block the dimensions |\width| and |\height| represent the size of the content area and can be used to create graphics, that fit and adapt to the available size.
+\par
+\DescribeMacro{\tikzgraphic}
+The macro |\tikzgraphic|\marg{tikz code} works like the |\xput| macro, but wraps your input in a |tikzpicture|.
+
+\subsection{Shadows and Borders}\label{subsec:borders}
+
+Text and graphic content can be placed with a border or a shadow.
+You can define a border or shadow for a specific content box by using the options |border width|, |border color|, |border radius| to add a border or |shadow size|, |shadow color|, |shadow opacity|, |shadow xshift|, |shadow yshift| to add a shadow.
+\par
+\DescribeMacro{\newborder}
+\DescribeMacro{\newshadow}
+Define a reusable border or shadow with the |\newborder|\marg{name}\marg{options} or |\newshadow|\marg{name}\marg{options} macros.
+Apply the border or shadow to |\text| or |\graphic| with the option |border| or |shadow|.
+\par
+\DescribeMacro{\setborder}
+\DescribeMacro{\setshadow}
+To set a border or shadow within a page or document scope, use the macros |\setborder|\oarg{options}\marg{name} or |\setshadow|\oarg{options}\marg{name}.
+
+\section{Templates}\label{sec:templates}
+
+\DescribeMacro{\newtemplate}
+With the macro |\newtemplate|\marg{name}\marg{layout} you can create a reusable layout.
+Creating a template works the same way as creating a page.
+In addition to graphics and text you can define placeholders.
+\DescribeMacro{\placeholder}
+Use the macro |\placeholder|\marg{fromrow fromcell torow tocell} to define a content area that can later be filled with a text or a graphic.
+
+\DescribeMacro{\template}
+To use a template use the macro |\template|\oarg{options}\marg{name}\marg{content}.
+The available options are the same as for pages.
+
+The macro |\template| comes with an easy way to generate templates by using a name pattern.
+For example the template name \textit{sp} creates a template with a square and a portrait format placeholder.
+In this case the letter |s| specifies a square (1:1) and the letter |p| a portrait (2:3) format placeholder.
+Use the letter |l| to define a landscape ratio (3:2), |g| for golden ratio (5:3), |o| for golden upright ratio (3:5), |w| for wide ratio (2:1) or |f| for a flexible ratio.
+With the character |-| you can start a new row.
+Within a row you can mix the fixed placeholders (|s|, |p|, |l|, |g|, |o|, |w|) or use only flexible placeholders~(|f|).
+
+\section{Image Optimization}\label{sec:optimization}
+
+\DescribeMacro{\optimize}
+With the macro |\optimize|\oarg{options} you can enable image optimization.
+When enabled, JPG and PNG images are croped, resized and cached.
+This results in fast rebuilds when changing the document.
+You can set the options |density|, |quality|, |unsharp| and |downsample threshold|.
+The |density| option takes a number of the pixels per inch (default |300|), the |quality| option takes numbers between 1 and 100, the |unsharp| option an ImageMagick unsharp configuration (default |2x1|) and the |downsample threshold| a decimal value greater or equal 1 (default |1.2|).
+The |unsharp| option can also be applied for individual graphics.
+\par
+If you use image optimization and change the original graphics files, you must delete the cached versions so that the cache will update.
+\DescribeMacro{\import}
+The |\import| macro helps you to streamline this process.
+When enabled, you need an import directory in which to place the modified files.
+When the document is created, the files are moved to your image directory and the corresponding cached versions are automatically regenerated.
+The import directory is either the directory \emph{import} in your working directory.
+Or you can set a system wide import directory by defining the shell variable |PAGELAYOUT_IMPORT_DIRECTORY|.
+\par
+\DescribeMacro{\preflight}
+Use the |\preflight| macro to proof the image resolution.
+If images have a final resolution less then 300 ppi you get a warning, if less then 200 ppi you get an error.
+With preflight enabled the maximum possible resolution is shown next to each graphic.
+
+\end{document}
diff --git a/macros/latex/contrib/pagelayout/doc/quickstart-1.svg b/macros/latex/contrib/pagelayout/doc/quickstart-1.svg
new file mode 100644
index 0000000000..f21a2f9710
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/quickstart-1.svg
@@ -0,0 +1 @@
+<svg width="320" height="239" viewBox="0 0 240 179.25" version="1.2" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><defs><symbol overflow="visible" id="a"><path style="stroke:none" d="M.14-4.563h3.485v.532H2.187V0h-.609v-4.031H.141zm0 0"/></symbol><symbol overflow="visible" id="b"><path style="stroke:none" d="M3.203-2.125V0h-.562v-2.125c0-.3-.059-.523-.172-.672-.106-.144-.274-.219-.5-.219-.262 0-.465.094-.61.282-.136.187-.203.453-.203.796V0H.594v-4.75h.562v1.844a1.03 1.03 0 0 1 .407-.438c.164-.101.367-.156.609-.156.344 0 .598.117.765.344.176.23.266.574.266 1.031zm0 0"/></symbol><symbol overflow="visible" id="c"><path style="stroke:none" d="M.969-3.406h1.437v2.969h1.11V0H.719v-.438h1.125v-2.53H.969zm.875-1.328h.562v.703h-.562zm0 0"/></symbol><symbol overflow="visible" id="d"><path style="stroke:none" d="M2.969-3.297v.547a1.853 1.853 0 0 0-.485-.203 1.731 1.731 0 0 0-.5-.078c-.25 0-.437.043-.562.125a.427.427 0 0 0-.188.375c0 .156.047.273.141.344.094.074.32.148.688.218l.234.047c.281.055.488.156.625.313.144.156.219.367.219.625 0 .336-.121.601-.36.796-.242.188-.574.282-1 .282-.168 0-.343-.024-.531-.063a3.437 3.437 0 0 1-.594-.156v-.578c.207.105.406.187.594.25.188.055.367.078.547.078.25 0 .441-.05.578-.156a.505.505 0 0 0 .203-.422c0-.258-.25-.442-.75-.547h-.031l-.203-.047c-.324-.062-.563-.164-.719-.312-.148-.157-.219-.36-.219-.61 0-.332.11-.586.328-.765.227-.176.547-.266.954-.266.187 0 .363.016.53.047.165.031.333.086.5.156zm0 0"/></symbol><symbol overflow="visible" id="e"><path style="stroke:none" d="M1.875-4.39v.968h1.281v.438H1.875v1.859c0 .25.047.43.14.531.094.094.258.14.5.14h.641V0H2.47c-.43 0-.73-.082-.906-.25-.168-.164-.25-.457-.25-.875v-1.86H.405v-.437h.906v-.969zm0 0"/></symbol><symbol overflow="visible" id="f"><path style="stroke:none" d="M3.422-1.984v.265H.984v.016c-.011.469.079.808.266 1.016.195.199.473.296.828.296.176 0 .363-.023.563-.078.195-.062.406-.148.625-.265v.562a3.72 3.72 0 0 1-.625.188c-.2.05-.391.078-.579.078-.53 0-.949-.157-1.25-.469C.52-.695.376-1.141.376-1.703c0-.55.145-.988.438-1.313.289-.32.68-.484 1.171-.484.438 0 .782.152 1.032.453.25.293.382.649.406 1.063zm-.563-.172a1.14 1.14 0 0 0-.265-.61c-.149-.175-.356-.265-.625-.265a.879.879 0 0 0-.672.281.943.943 0 0 0-.297.594Zm0 0"/></symbol><symbol overflow="visible" id="g"><path style="stroke:none" d="m3.406-3.422-1.219 1.64L3.532 0h-.656l-1-1.375L.875 0h-.64l1.343-1.781-1.234-1.64h.625l.906 1.233.906-1.234Zm0 0"/></symbol><symbol overflow="visible" id="h"><path style="stroke:none" d="M3.25-4.75v.469h-.64c-.212 0-.356.043-.438.125-.074.086-.11.23-.11.437v.297H3.25v.438H2.062V0H1.5v-2.984H.594v-.438H1.5v-.234c0-.375.082-.649.25-.828.176-.176.445-.266.813-.266Zm0 0"/></symbol><symbol overflow="visible" id="i"><path style="stroke:none" d="M2.188-1.234c0 .25.046.445.14.578.094.125.235.187.422.187h.656V0h-.719c-.335 0-.593-.102-.78-.313-.188-.218-.282-.523-.282-.921v-3.094h-.89v-.438h1.453Zm0 0"/></symbol><symbol overflow="visible" id="j"><path style="stroke:none" d="M3.531-2.719a1.364 1.364 0 0 0-.375-.203 1.361 1.361 0 0 0-.406-.062c-.355 0-.625.109-.813.328-.18.219-.265.539-.265.953V0h-.563v-3.422h.563v.672c.094-.238.234-.422.422-.547a1.22 1.22 0 0 1 .703-.203c.133 0 .258.023.375.063.125.03.242.085.36.156zm0 0"/></symbol><symbol overflow="visible" id="k"><path style="stroke:none" d="M1.14-.438v1.735H.579v-4.719h.563v.438a.961.961 0 0 1 .375-.375c.156-.094.336-.141.546-.141.407 0 .723.164.954.484.238.313.359.758.359 1.329 0 .554-.121.992-.36 1.312-.23.313-.546.469-.953.469-.21 0-.39-.043-.546-.125a.996.996 0 0 1-.375-.406zm1.657-1.265c0-.438-.074-.766-.219-.984a.67.67 0 0 0-.61-.344.7.7 0 0 0-.624.344c-.137.218-.203.546-.203.984 0 .43.066.758.203.984a.702.702 0 0 0 .625.328c.27 0 .472-.109.61-.328.144-.219.218-.547.218-.984zm0 0"/></symbol><symbol overflow="visible" id="l"><path style="stroke:none" d="M2.14-1.719h-.187c-.324 0-.57.059-.734.172-.168.117-.25.29-.25.516 0 .21.062.37.187.484.125.117.297.172.516.172.312 0 .555-.11.734-.328.176-.219.266-.516.266-.89v-.126zm1.094-.234V0h-.562v-.5c-.125.2-.281.352-.469.453a1.4 1.4 0 0 1-.656.14c-.344 0-.621-.097-.828-.296C.508-.398.406-.664.406-1c0-.375.125-.66.375-.86.258-.195.633-.296 1.125-.296h.766v-.094c0-.27-.074-.469-.219-.594-.137-.125-.351-.187-.64-.187-.2 0-.399.031-.594.094a2.867 2.867 0 0 0-.563.234v-.563a6.11 6.11 0 0 1 .594-.171c.188-.04.375-.063.563-.063.28 0 .519.043.718.125.196.086.36.21.485.375a.92.92 0 0 1 .171.375c.032.148.047.371.047.672zm0 0"/></symbol><symbol overflow="visible" id="m"><path style="stroke:none" d="M3.234-.172a1.732 1.732 0 0 1-.468.188c-.157.05-.32.078-.485.078-.531 0-.949-.157-1.25-.469-.293-.32-.437-.766-.437-1.328 0-.563.144-1 .437-1.313.301-.32.719-.484 1.25-.484.164 0 .328.023.485.063.156.042.312.109.468.203v.578a1.665 1.665 0 0 0-.453-.281 1.268 1.268 0 0 0-.5-.094c-.355 0-.625.117-.812.344-.188.23-.282.558-.282.984 0 .418.094.742.282.969.195.23.468.343.812.343.196 0 .375-.023.531-.078.157-.062.297-.156.422-.281Zm0 0"/></symbol><symbol overflow="visible" id="n"><path style="stroke:none" d="M.313-2.203h3.234v.515H.312Zm0 0"/></symbol><symbol overflow="visible" id="o"><path style="stroke:none" d="M1.875-3.031a.716.716 0 0 0-.64.344c-.15.218-.22.546-.22.984 0 .43.07.758.22.984.144.219.359.328.64.328.29 0 .508-.109.656-.328.145-.226.219-.554.219-.984 0-.438-.074-.766-.219-.984a.738.738 0 0 0-.656-.344Zm0-.469c.477 0 .844.156 1.094.469.25.304.375.746.375 1.328 0 .586-.125 1.031-.375 1.344-.25.304-.617.453-1.094.453-.469 0-.828-.149-1.078-.453-.25-.313-.375-.758-.375-1.344 0-.582.125-1.024.375-1.328.25-.313.61-.469 1.078-.469Zm0 0"/></symbol><symbol overflow="visible" id="p"><path style="stroke:none" d="M2.625-2.984V-4.75h.563V0h-.563v-.438a.996.996 0 0 1-.375.407c-.156.082-.34.125-.547.125-.406 0-.73-.16-.969-.485C.492-.71.375-1.156.375-1.719c0-.55.117-.984.36-1.297a1.15 1.15 0 0 1 .968-.484 1.046 1.046 0 0 1 .922.516zM.969-1.704c0 .438.066.766.203.985.133.219.336.328.61.328a.71.71 0 0 0 .624-.328c.145-.226.219-.554.219-.984 0-.438-.074-.766-.219-.984a.708.708 0 0 0-.625-.344.662.662 0 0 0-.61.344c-.136.218-.202.546-.202.984zm0 0"/></symbol><symbol overflow="visible" id="q"><path style="stroke:none" d="M1.188-1.234h1.078V0H1.187Zm0 0"/></symbol><symbol overflow="visible" id="r"><path style="stroke:none" d="M5.984-3.578h8.672V0H1.578v-3.469l2.219-2.344C6.41-8.601 8-10.316 8.562-10.953c.688-.79 1.18-1.492 1.485-2.11.3-.613.453-1.218.453-1.812 0-.914-.277-1.625-.828-2.125-.555-.5-1.34-.75-2.36-.75-.73 0-1.546.148-2.453.438-.906.28-1.851.699-2.828 1.25v-3.797a20.224 20.224 0 0 1 2.875-.813 13.977 13.977 0 0 1 2.719-.281c2.176 0 3.883.512 5.125 1.531 1.25 1.012 1.875 2.39 1.875 4.14A6.37 6.37 0 0 1 14.219-13c-.274.71-.735 1.496-1.39 2.36-.493.624-1.829 2.03-4.017 4.218a517.956 517.956 0 0 0-2.828 2.844zm0 0"/></symbol></defs><path style="fill:#fff;stroke-width:1.43381" d="M4.065.004h231.869a4.056 4.056 0 0 1 4.065 4.065v170.906a4.056 4.056 0 0 1-4.065 4.064H4.064A4.056 4.056 0 0 1 0 174.975V4.07A4.056 4.056 0 0 1 4.065.004Z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 179.037v-.203h239.999v.203zm0-4.06v-.204h239.999v.204zm0-4.066v-.204h239.999v.204zm0-4.068v-.2h239.999v.2zm0-4.058v-.205h239.999v.204zm0-4.066v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.061v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.06v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.06V126h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.069v-.2h239.999v.2zm0-4.06v-.201h239.999v.2zm0-4.067v-.2h239.999v.2zm0-4.066v-.2h239.999v.2zm0-4.058v-.205h239.999v.205zm0-4.069v-.2h239.999v.2zm0-4.066v-.2h239.999v.2zm0-4.066v-.201h239.999v.2zm0-4.058v-.204h239.999v.204zm0-4.07v-.2h239.999v.2zm0-4.063v-.2h239.999v.2zm0-4.06v-.204h239.999v.204ZM0 69.3v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.06v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.066v-.204h239.999v.204zm0-4.06v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.066v-.204h239.999v.204zm0-4.06v-.204h239.999v.203zm0-4.066v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.06v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.06v-.206h239.999v.205zm0-4.067V8.13h239.999v.205zM0 4.27v-.205h239.999v.205zM0 .21V.003h239.999V.21z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 179.035V0h.2v179.033zm4.065 0V0h.2v179.033zm4.06 0V0h.2v179.033zm4.065 0V0h.202v179.033zm4.066 0V0h.202v179.033zm4.06 0V0h.203v179.033zm4.067 0V0h.202v179.033zm4.066 0V0h.203v179.033zm4.061 0V0h.202v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.205v179.033zm4.06 0V0h.2v179.033zm4.066 0V0h.205v179.033zm4.067 0V0h.205v179.033zm4.06 0V0h.205v179.033zm4.067 0V0h.205v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.208v179.033h-.2Zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.061 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.204v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.203v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.065 0V0h.202v179.033zm4.057 0V0h.205v179.033zm4.07 0V0h.202v179.033zm4.066 0V0h.202v179.033zm4.06 0V0h.203v179.033zm4.064 0V0h.205v179.033zm4.069 0V0h.205v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.205v179.033zm4.063 0V0h.205v179.033zm4.064 0V0h.205v179.033zm4.066 0V0h.205v179.033zm4.066 0V0h.201v179.033zm4.06 0V0h.202v179.033zm4.067 0V0h.205v179.033zm4.066 0V0h.201v179.033zm4.061 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.208v179.033h-.2zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033z"/><path style="fill:#000;stroke-width:1.43381" d="M7.94.004v4.163h.57V.004zm223.546 0v4.163h.572V.004ZM0 7.946v.57h4.164v-.568H0Zm235.833 0v.57H240v-.568h-4.167zM0 170.525v.57h4.164v-.572H0Zm235.833 0v.57H240v-.572h-4.168zm-227.896 4.35v4.164h.571v-4.164zm223.546 0v4.164h.572v-4.164h-.57z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 170.91v-.203h239.999v.204zm0-20.318v-.205h239.999v.205zm0-20.326v-.205h239.999v.205zm0-20.323v-.2h239.999v.2zm0-20.325v-.201h239.999v.2zM0 69.3v-.204h239.999v.204zm0-20.32v-.204h239.999v.204zm0-20.325v-.205h239.999v.205zm0-20.32V8.13h239.999v.205z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M8.125 179.035V0h.2v179.033zm20.324 0V0h.203v179.033zm20.32 0V0h.205v179.033zm20.32 0V0h.208v179.033h-.2Zm20.326 0V0h.2v179.033zm20.32 0V0h.204v179.033zm20.326 0V0h.2v179.033zm20.318 0V0h.203v179.033zm20.32 0V0h.201v179.033zm20.326 0V0h.201v179.033zm20.32 0V0h.201v179.033zm20.32 0V0h.208v179.033h-.2z"/><use xlink:href="#a" x="19.654" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#b" x="23.431" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#c" x="27.208" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#d" x="30.984" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#e" x="38.644" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#f" x="42.421" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#g" x="46.198" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#e" x="49.981" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#h" x="57.635" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#c" x="61.412" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#i" x="65.195" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#i" x="68.971" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#d" x="72.748" y="38.799" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#e" x="19.842" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#b" x="23.619" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#f" x="27.396" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#h" x="34.018" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#c" x="37.794" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#j" x="41.571" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#d" x="45.348" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#e" x="49.131" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#k" x="55.747" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#i" x="59.524" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#l" x="63.3" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#m" x="67.083" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#f" x="70.86" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#n" x="74.637" y="47.366" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#b" x="19.842" y="55.934" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#o" x="23.619" y="55.934" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#i" x="27.396" y="55.934" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#p" x="31.172" y="55.934" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#f" x="34.956" y="55.934" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#j" x="38.732" y="55.934" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><use xlink:href="#q" x="42.509" y="55.934" width="100%" height="100%" style="fill:#000;fill-opacity:1" transform="translate(.102 .102) scale(1.43381)"/><path style="fill:#b3e6fa;fill-opacity:.3;fill-rule:nonzero;stroke:#66ccf5;stroke-width:.28346;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:.3" d="M.002.002v56.691h56.691V.002Zm0 0" transform="matrix(1.43381 0 0 -1.43381 130.162 130.156)"/><use xlink:href="#r" x="110.523" y="72.878" width="100%" height="100%" style="fill:#66ccf5;fill-opacity:.3" transform="translate(.102 .102) scale(1.43381)"/></svg> \ No newline at end of file
diff --git a/macros/latex/contrib/pagelayout/doc/quickstart-2.svg b/macros/latex/contrib/pagelayout/doc/quickstart-2.svg
new file mode 100644
index 0000000000..6f865a348a
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/quickstart-2.svg
@@ -0,0 +1 @@
+<svg width="320" height="239" viewBox="0 0 240 179.25" version="1.2" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><defs><symbol overflow="visible" id="a"><path style="stroke:none" d="M2.078-2.875h3.64v-10.688l-3.39.844v-2.937l3.406-.813h3.141v13.594h3.64V0H2.079zm0 0"/></symbol></defs><path style="fill:#fff;stroke-width:1.43381" d="M4.065.004h231.869a4.056 4.056 0 0 1 4.065 4.065v170.906a4.056 4.056 0 0 1-4.065 4.064H4.064A4.056 4.056 0 0 1 0 174.975V4.07A4.056 4.056 0 0 1 4.065.004Z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 179.037v-.203h239.999v.203zm0-4.06v-.204h239.999v.204zm0-4.066v-.204h239.999v.204zm0-4.068v-.2h239.999v.2zm0-4.058v-.205h239.999v.204zm0-4.066v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.061v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.06v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.06V126h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.069v-.2h239.999v.2zm0-4.06v-.201h239.999v.2zm0-4.067v-.2h239.999v.2zm0-4.066v-.2h239.999v.2zm0-4.058v-.205h239.999v.205zm0-4.069v-.2h239.999v.2zm0-4.066v-.2h239.999v.2zm0-4.066v-.201h239.999v.2zm0-4.058v-.204h239.999v.204zm0-4.07v-.2h239.999v.2zm0-4.063v-.2h239.999v.2zm0-4.06v-.204h239.999v.204ZM0 69.3v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.06v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.066v-.204h239.999v.204zm0-4.06v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.066v-.204h239.999v.204zm0-4.06v-.204h239.999v.203zm0-4.066v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.06v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.06v-.206h239.999v.205zm0-4.067V8.13h239.999v.205zM0 4.27v-.205h239.999v.205zM0 .21V.003h239.999V.21z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 179.035V0h.2v179.033zm4.065 0V0h.2v179.033zm4.06 0V0h.2v179.033zm4.065 0V0h.202v179.033zm4.066 0V0h.202v179.033zm4.06 0V0h.203v179.033zm4.067 0V0h.202v179.033zm4.066 0V0h.203v179.033zm4.061 0V0h.202v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.205v179.033zm4.06 0V0h.2v179.033zm4.066 0V0h.205v179.033zm4.067 0V0h.205v179.033zm4.06 0V0h.205v179.033zm4.067 0V0h.205v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.208v179.033h-.2Zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.061 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.204v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.203v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.065 0V0h.202v179.033zm4.057 0V0h.205v179.033zm4.07 0V0h.202v179.033zm4.066 0V0h.202v179.033zm4.06 0V0h.203v179.033zm4.064 0V0h.205v179.033zm4.069 0V0h.205v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.205v179.033zm4.063 0V0h.205v179.033zm4.064 0V0h.205v179.033zm4.066 0V0h.205v179.033zm4.066 0V0h.201v179.033zm4.06 0V0h.202v179.033zm4.067 0V0h.205v179.033zm4.066 0V0h.201v179.033zm4.061 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.208v179.033h-.2zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033z"/><path style="fill:#000;stroke-width:1.43381" d="M7.94.004v4.163h.57V.004zm223.546 0v4.163h.572V.004ZM0 7.946v.57h4.164v-.568H0Zm235.833 0v.57H240v-.568h-4.167zM0 170.525v.57h4.164v-.572H0Zm235.833 0v.57H240v-.572h-4.168zm-227.896 4.35v4.164h.571v-4.164zm223.546 0v4.164h.572v-4.164h-.57z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 170.91v-.203h239.999v.204zm0-20.318v-.205h239.999v.205zm0-20.326v-.205h239.999v.205zm0-20.323v-.2h239.999v.2zm0-20.325v-.201h239.999v.2zM0 69.3v-.204h239.999v.204zm0-20.32v-.204h239.999v.204zm0-20.325v-.205h239.999v.205zm0-20.32V8.13h239.999v.205z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M8.125 179.035V0h.2v179.033zm20.324 0V0h.203v179.033zm20.32 0V0h.205v179.033zm20.32 0V0h.208v179.033h-.2Zm20.326 0V0h.2v179.033zm20.32 0V0h.204v179.033zm20.326 0V0h.2v179.033zm20.318 0V0h.203v179.033zm20.32 0V0h.201v179.033zm20.326 0V0h.201v179.033zm20.32 0V0h.201v179.033zm20.32 0V0h.208v179.033h-.2z"/><path style="fill:#b3e6fa;fill-opacity:.3;fill-rule:nonzero;stroke:#66ccf5;stroke-width:.28346;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:.3" d="M.002 0v45.355h68.031V0Zm0 0" transform="matrix(1.43382 0 0 -1.43382 28.552 122.026)"/><use xlink:href="#a" x="47.032" y="70.624" width="100%" height="100%" style="fill:#66ccf5;fill-opacity:.3" transform="translate(.102 .102) scale(1.43382)"/><path style="fill:none;stroke:#00e300;stroke-width:14.1734;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:.2" d="M94.96 85.04V39.685" transform="matrix(1.43382 0 0 -1.43382 .102 178.927)"/><path style="fill:none;stroke:#00e300;stroke-width:.56693;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:.8" d="M19.844 85.04V39.685h127.558V85.04zm0 0" transform="matrix(1.43382 0 0 -1.43382 .102 178.927)"/><path style="fill:none;stroke:#00e300;stroke-width:.56693;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:2.83466,2.83466;stroke-opacity:.8" d="M19.844 85.04v19.844h127.558V85.04M19.844 39.685V19.84h127.558v19.844" transform="matrix(1.43382 0 0 -1.43382 .102 178.927)"/></svg> \ No newline at end of file
diff --git a/macros/latex/contrib/pagelayout/doc/quickstart-3.svg b/macros/latex/contrib/pagelayout/doc/quickstart-3.svg
new file mode 100644
index 0000000000..15bf2ea4b6
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/quickstart-3.svg
@@ -0,0 +1 @@
+<svg width="320" height="239" viewBox="0 0 240 179.25" version="1.2" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><defs><symbol overflow="visible" id="k"><path style="stroke:none" d="M1.328-.797H3.25V0H.344v-.766l.5-.515c.57-.625.922-1.004 1.047-1.14.156-.177.265-.333.328-.47.07-.132.11-.27.11-.406a.612.612 0 0 0-.188-.469c-.125-.113-.297-.171-.516-.171-.168 0-.352.039-.547.109-.2.062-.406.152-.625.265v-.828a4.25 4.25 0 0 1 .64-.187c.208-.04.407-.063.595-.063.476 0 .851.118 1.125.344.28.219.421.527.421.922 0 .18-.03.344-.093.5a1.891 1.891 0 0 1-.297.516c-.117.136-.414.449-.89.937l-.626.625zm0 0"/></symbol><symbol overflow="visible" id="l"><path style="stroke:none" d="M.406-4.563h2.89v.641L1.75 0H.828l1.485-3.766H.405Zm0 0"/></symbol><symbol overflow="visible" id="m"><path style="stroke:none" d="M.578-.797h1V-3.75l-.937.234v-.812l.953-.234h.86v3.765h1.015V0H.579Zm0 0"/></symbol><symbol overflow="visible" id="n"><path style="stroke:none" d="M1.344-.484v1.78h-.89v-4.718h.89v.516A.994.994 0 0 1 2.25-3.5c.395 0 .695.156.906.469.219.312.328.758.328 1.328 0 .574-.109 1.016-.328 1.328-.219.313-.531.469-.937.469a.868.868 0 0 1-.485-.14 1.386 1.386 0 0 1-.39-.438zm1.25-1.235c0-.32-.059-.578-.172-.765-.106-.188-.258-.282-.453-.282-.188 0-.34.094-.453.282-.118.187-.172.445-.172.765 0 .336.054.594.172.782.113.187.265.28.453.28.195 0 .347-.093.453-.28.113-.188.172-.446.172-.782Zm0 0"/></symbol><symbol overflow="visible" id="o"><path style="stroke:none" d="M.672-3.422h1.765v2.735h1.126V0H.437v-.688h1.11v-2.046H.672zm.875-1.656h.89v1.047h-.89Zm0 0"/></symbol><clipPath id="g"><path d="M0 0h167.238v124.719H0Zm0 0"/></clipPath><clipPath id="d"><path d="M26.762 5.477h113.742v113.742H26.762Zm0 0"/></clipPath><clipPath id="c"><path d="M0 0h168v125H0z"/></clipPath><image id="b" width="952" height="952" xlink:href="data:image/png;base64,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"/><image id="e" width="952" height="952" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7gAAAO4CAIAAAB3W80MAAAABmJLR0QA/wD/AP+gvaeTAAAKYklEQVR4nO3BgQAAAADDoPlTn+AGVQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAN4LfAAHBu5hPAAAAAElFTkSuQmCC"/><image id="j" width="614" height="614" xlink:href="data:image/jpeg;base64,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"/><mask id="i"><g filter="url(#a)"><path style="fill:#000;fill-opacity:.4;stroke:none" d="M0 0h167.24v124.72H0z"/></g></mask><mask id="f"><use xlink:href="#b" width="100%" height="100%"/></mask><filter id="a" filterUnits="objectBoundingBox" x="0" y="0" width="1" height="1"><feColorMatrix in="SourceGraphic" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><g clip-path="url(#d)" id="h"><use xlink:href="#e" mask="url(#f)" transform="translate(26.764 5.479) scale(.11947)" width="100%" height="100%"/></g></defs><path style="fill:#fff;stroke-width:1.43381" d="M4.065.004h231.869a4.056 4.056 0 0 1 4.065 4.065v170.906a4.056 4.056 0 0 1-4.065 4.064H4.064A4.056 4.056 0 0 1 0 174.975V4.07A4.056 4.056 0 0 1 4.065.004Z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 179.037v-.203h239.999v.203zm0-4.06v-.204h239.999v.204zm0-4.066v-.204h239.999v.204zm0-4.068v-.2h239.999v.2zm0-4.058v-.205h239.999v.204zm0-4.066v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.061v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.06v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.06V126h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.069v-.2h239.999v.2zm0-4.06v-.201h239.999v.2zm0-4.067v-.2h239.999v.2zm0-4.066v-.2h239.999v.2zm0-4.058v-.205h239.999v.205zm0-4.069v-.2h239.999v.2zm0-4.066v-.2h239.999v.2zm0-4.066v-.201h239.999v.2zm0-4.058v-.204h239.999v.204zm0-4.07v-.2h239.999v.2zm0-4.063v-.2h239.999v.2zm0-4.06v-.204h239.999v.204ZM0 69.3v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.06v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.066v-.204h239.999v.204zm0-4.06v-.204h239.999v.204zm0-4.067v-.203h239.999v.203zm0-4.066v-.204h239.999v.204zm0-4.06v-.204h239.999v.203zm0-4.066v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.06v-.205h239.999v.205zm0-4.067v-.205h239.999v.205zm0-4.066v-.205h239.999v.205zm0-4.06v-.206h239.999v.205zm0-4.067V8.13h239.999v.205zM0 4.27v-.205h239.999v.205zM0 .21V.003h239.999V.21z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 179.035V0h.2v179.033zm4.065 0V0h.2v179.033zm4.06 0V0h.2v179.033zm4.065 0V0h.202v179.033zm4.066 0V0h.202v179.033zm4.06 0V0h.203v179.033zm4.067 0V0h.202v179.033zm4.066 0V0h.203v179.033zm4.061 0V0h.202v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.205v179.033zm4.06 0V0h.2v179.033zm4.066 0V0h.205v179.033zm4.067 0V0h.205v179.033zm4.06 0V0h.205v179.033zm4.067 0V0h.205v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.208v179.033h-.2Zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.061 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.204v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.203v179.033zm4.066 0V0h.2v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.065 0V0h.202v179.033zm4.057 0V0h.205v179.033zm4.07 0V0h.202v179.033zm4.066 0V0h.202v179.033zm4.06 0V0h.203v179.033zm4.064 0V0h.205v179.033zm4.069 0V0h.205v179.033zm4.06 0V0h.201v179.033zm4.067 0V0h.205v179.033zm4.063 0V0h.205v179.033zm4.064 0V0h.205v179.033zm4.066 0V0h.205v179.033zm4.066 0V0h.201v179.033zm4.06 0V0h.202v179.033zm4.067 0V0h.205v179.033zm4.066 0V0h.201v179.033zm4.061 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.2v179.033zm4.066 0V0h.201v179.033zm4.067 0V0h.2v179.033zm4.06 0V0h.208v179.033h-.2zm4.067 0V0h.2v179.033zm4.066 0V0h.2v179.033z"/><path style="fill:#000;stroke-width:1.43381" d="M7.94.004v4.163h.57V.004zm223.546 0v4.163h.572V.004ZM0 7.946v.57h4.164v-.568H0Zm235.833 0v.57H240v-.568h-4.167zM0 170.525v.57h4.164v-.572H0Zm235.833 0v.57H240v-.572h-4.168zm-227.896 4.35v4.164h.571v-4.164zm223.546 0v4.164h.572v-4.164h-.57z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M0 170.91v-.203h239.999v.204zm0-20.318v-.205h239.999v.205zm0-20.326v-.205h239.999v.205zm0-20.323v-.2h239.999v.2zm0-20.325v-.201h239.999v.2zM0 69.3v-.204h239.999v.204zm0-20.32v-.204h239.999v.204zm0-20.325v-.205h239.999v.205zm0-20.32V8.13h239.999v.205z"/><path style="fill:#a6a6a6;fill-opacity:.2;stroke-width:1.43381" d="M8.125 179.035V0h.2v179.033zm20.324 0V0h.203v179.033zm20.32 0V0h.205v179.033zm20.32 0V0h.208v179.033h-.2Zm20.326 0V0h.2v179.033zm20.32 0V0h.204v179.033zm20.326 0V0h.2v179.033zm20.318 0V0h.203v179.033zm20.32 0V0h.201v179.033zm20.326 0V0h.201v179.033zm20.32 0V0h.201v179.033zm20.32 0V0h.208v179.033h-.2z"/><g transform="translate(.102 .102) scale(1.43382)"><g clip-path="url(#g)"><use xlink:href="#h" mask="url(#i)" width="100%" height="100%"/></g><path style="color:#000;fill:#fff;stroke-miterlimit:10;-inkscape-stroke:none" d="M-5.67-5.668v85.039h85.041V-5.668Z" transform="matrix(1 0 0 -1 46.772 99.209)"/><use xlink:href="#j" transform="translate(46.772 25.509) scale(.12003)" width="100%" height="100%"/><path style="fill:#fff000;fill-opacity:.9;fill-rule:nonzero;stroke:none" d="M93.617 36.102h26.856V25.508H93.617Zm0 0"/><use xlink:href="#k" x="95.707" y="32.703" width="100%" height="100%" style="fill:#000;fill-opacity:.9"/><use xlink:href="#l" x="99.484" y="32.703" width="100%" height="100%" style="fill:#000;fill-opacity:.9"/><use xlink:href="#m" x="103.261" y="32.703" width="100%" height="100%" style="fill:#000;fill-opacity:.9"/><use xlink:href="#n" x="107.037" y="32.703" width="100%" height="100%" style="fill:#000;fill-opacity:.9"/><use xlink:href="#n" x="110.82" y="32.703" width="100%" height="100%" style="fill:#000;fill-opacity:.9"/><use xlink:href="#o" x="114.597" y="32.703" width="100%" height="100%" style="fill:#000;fill-opacity:.9"/></g></svg> \ No newline at end of file
diff --git a/macros/latex/contrib/pagelayout/doc/quickstart.pdf b/macros/latex/contrib/pagelayout/doc/quickstart.pdf
new file mode 100644
index 0000000000..9fe5b29071
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/quickstart.pdf
Binary files differ
diff --git a/macros/latex/contrib/pagelayout/doc/quickstart.tex b/macros/latex/contrib/pagelayout/doc/quickstart.tex
new file mode 100644
index 0000000000..095c98d288
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/doc/quickstart.tex
@@ -0,0 +1,62 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008/05/04 or later.
+%%
+
+\documentclass[draft,graphpaper,preflight,optimize={density=600}]{pagelayout}
+\usepackage{microtype}
+\usepackage{fontspec}
+
+\setmainfont{Menlo}
+
+\pagewidth=5.5cm
+\pageheight=4cm
+\margin=5mm
+\gutter=5mm
+\bleed=2mm
+
+\begin{document}
+ \fontsize{6.3pt}{8.6pt}\selectfont
+
+ % generic template
+ \template{ss}{
+ \text{
+ This text fills the first placeholder.
+ }
+ }
+
+ % custom template
+ \grid
+ \newtemplate{my template}{
+ \setgrid{
+ {[2]{3!}{2!}}
+ }
+ \placeholder{0 0 1 1}
+ }
+ \template{my template}{}
+ \nogrid
+
+ % graphics
+ \newborder{my border}{width=2mm, color=white, radius=5mm}
+ \newshadow{my shadow}{size=8}
+ \template[margin=7mm]{s}{
+ \graphic[
+ scale=1.05,
+ hpos=0,
+ vpos=0,
+ shadow=my shadow,
+ border=my border,
+ border radius=0mm
+ ]{kopi}
+ }
+
+\end{document}
diff --git a/macros/latex/contrib/pagelayout/scripts/pagelayoutapi b/macros/latex/contrib/pagelayout/scripts/pagelayoutapi
new file mode 100755
index 0000000000..295beef2f4
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/scripts/pagelayoutapi
@@ -0,0 +1,371 @@
+#!/bin/sh
+#
+# Copyright (c) 2022-2023 by Friedemann Bartels
+#
+# This file may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either
+# version 1.3c of this license or (at your option) any later
+# version. The latest version of this license is in:
+#
+# http://www.latex-project.org/lppl.txt
+#
+# and version 1.3c or later is part of all distributions of
+# LaTeX version 2008/05/04 or later.
+#
+
+version=1.0.3
+
+_convert() {
+ turbo=$1
+ filename=$2
+ filenamecache=$3
+ fileextcache=$4
+ originalwidthsp=$5
+ originalheightsp=$6
+ originalcropleftsp=$7
+ originalcroprightsp=$8
+ originalcroptopsp=$9
+ originalcropbottomsp=${10}
+ density=${11}
+ displaywidth=${12}
+ displayheight=${13}
+ resizethreshold=${14}
+ unsharp=${15}
+ quality="${16}"
+
+ mkdir -p cache/"$filenamecache"
+ originalwidth=$( magick identify -ping -format %w "$filename" )
+ originalheight=$( magick identify -ping -format %h "$filename" )
+ width=$(( (10 * originalwidth * (originalwidthsp - originalcropleftsp - originalcroprightsp) / originalwidthsp + 5) / 10 ))
+ height=$(( (10 * originalheight * (originalheightsp - originalcroptopsp - originalcropbottomsp) / originalheightsp + 5) / 10 ))
+ cropleft=$(( (10 * originalwidth * originalcropleftsp / originalwidthsp + 5) / 10 ))
+ croptop=$(( (10 * originalheight * originalcroptopsp / originalheightsp + 5) / 10 ))
+ resizewidth=$(( (10 * displaywidth * 100 * density / 473628672 + 5) / 10 ))
+ if [ $(( resizewidth * resizethreshold / 100 )) -gt $width ]; then
+ resizewidth=$width
+ resizeheight=$height
+ else
+ resizeheight=$(( resizewidth * height / width + 1 ))
+ fi
+
+ x="x"
+ if [ $turbo = 1 ]; then
+ export MAGICK_THREAD_LIMIT=1
+ fi
+ if [ "$quality" != "" ]; then
+ quality="-quality $quality"
+ fi
+ if [ "$unsharp" != "" ]; then
+ unsharp="-unsharp $unsharp"
+ fi
+
+ magick "$filename" -crop $width$x$height+$cropleft+$croptop -resize $resizewidth$x$resizeheight $unsharp $quality "cache/$filenamecache/.g$fileextcache"
+ mv "cache/$filenamecache/.g$fileextcache" "cache/$filenamecache/g$fileextcache"
+}
+
+_startbatchprocess() {
+ success=0
+ for file in cache/*; do
+ if [ -f "$file" ]; then
+ success=1
+ name=$( basename "${file}" )
+ mv "$file" "cache/.$name" 2> /dev/null
+ if [ $? -eq 0 ]; then
+ line=$(head -n 1 "cache/.$name")
+
+ IFS="%"
+ set -- $line
+ IFS=" "
+ _convert 1 "$@"
+
+ rm "cache/.$name"
+ break
+ fi
+ fi
+ done
+
+ if [ $success -eq 1 ]; then
+ _startbatchprocess
+ fi
+}
+
+getwidth() {
+ if command -v magick >/dev/null 2>&1; then
+ filename=$1
+
+ originalwidth=$( magick identify -ping -format %w "$filename" )
+ echo $originalwidth
+ else
+ echo errormagicknotinstalled
+ fi
+}
+
+optimize() {
+ if command -v magick >/dev/null 2>&1; then
+ filenamecache=$2
+ fileextcache=$3
+
+ if [ -f cache/"$filenamecache" ]; then
+ mv cache/"$filenamecache" cache/."$filenamecache" 2> /dev/null
+ if [ $? -eq 0 ]; then
+ line=$(head -n 1 "cache/.$filenamecache")
+
+ IFS="%"
+ set -- $line
+ IFS=" "
+ _convert 1 "$@"
+
+ rm "cache/.$filenamecache"
+ else
+ while [ ! -f cache/"$filenamecache"/g"$fileextcache" ]; do
+ sleep 0.05
+ done
+ fi
+ elif [ -d cache/"$filenamecache" ]; then
+ while [ ! -f cache/"$filenamecache"/g"$fileextcache" ]; do
+ sleep 0.05
+ done
+ else
+ _convert 0 "$@"
+ fi
+
+ echo ok
+ else
+ echo errormagicknotinstalled
+ fi
+}
+
+makeshadow() {
+ if command -v magick >/dev/null 2>&1; then
+ filename=$1
+ stdDeviation=$2
+ opacity=$3
+ fill=$4
+ width=$5
+ height=$6
+ framewidth=$7
+ frameheight=$8
+ frameborder=$9
+ frameradius=${10}
+
+ [ ! -d cache ] && mkdir cache
+ mkdir -p cache/$filename
+ echo "<?xml version='1.0' encoding='UTF-8' standalone='no'?>
+ <svg
+ width='$width'
+ height='$height'
+ version='1.1'
+ xmlns='http://www.w3.org/2000/svg'
+ xmlns:svg='http://www.w3.org/2000/svg'>
+ <defs>
+ <filter
+ style='color-interpolation-filters:sRGB'
+ id='blur'
+ x='-4'
+ y='-4'
+ width='8'
+ height='8'>
+ <feGaussianBlur
+ stdDeviation='$stdDeviation' />
+ </filter>
+ </defs>
+ <rect
+ style='filter:url(#blur);opacity:$opacity;fill:$fill'
+ width='$framewidth'
+ height='$frameheight'
+ x='$frameborder'
+ y='$frameborder'
+ rx='$frameradius'
+ ry='$frameradius' />
+ </svg>
+ " > cache/$filename/s.svg
+ inkscape cache/$filename/s.svg --export-dpi=600 --export-filename cache/$filename/s.pdf
+ rm cache/$filename/s.svg
+
+ echo ok
+ else
+ echo errorinkscapenotinstalled
+ fi
+}
+
+import() {
+ if [ -d import ]; then
+ importdir=import
+ elif [ "$PAGELAYOUT_IMPORT_DIRECTORY" != "" ]; then
+ if [ -d "$PAGELAYOUT_IMPORT_DIRECTORY" ]; then
+ importdir="$PAGELAYOUT_IMPORT_DIRECTORY"
+ else
+ echo $PAGELAYOUT_IMPORT_DIRECTORY
+ exit
+ fi
+ else
+ echo errornoimportdir
+ exit
+ fi
+
+ defaultdirectory=$( echo $1 | sed -e 's/^{//g' | sed -e 's/}{.*//g' )
+ directorylist=$( echo $1 | sed -e 's/^{//g' | sed -e 's/}$//g' | sed -e 's/}{/$/g' )
+
+ for entry in "$importdir"/*.*
+ do
+ if [ -f "$entry" ]; then
+ name=$( basename "${entry}" )
+ if [ "$directorylist" != "" ]; then
+ echo "$directorylist" | tr '$' '\n' | while read directory; do
+ if [ -f "$directory$name" ]; then
+ mv "$entry" "$directory"
+ fi
+ done
+ fi
+ if [ -f "$entry" ]; then
+ if [ -d "$defaultdirectory" ]; then
+ mv "$entry" "$defaultdirectory"
+ else
+ mv "$entry" .
+ fi
+ fi
+ cachename=$( echo "$name" | sed -e 's/\.[a-zA-Z]*$//g' )
+ rm -rf cache/"$cachename"*
+ fi
+ done
+}
+
+startturbo() {
+ file="$(echo $1 | sed -e 's/\.pdflatex$//g')"
+ if [ -f $file.tex ]; then
+ tmpdir=$( mktemp -d 2>/dev/null )/pagelayoutturbo$( date "+%Y%m%d%H%M%S" )$RANDOM
+ mkdir $tmpdir
+
+ cp $file.tex $tmpdir/pagelayoutturbobatchoptimizexyz.tex
+
+ command=$(echo $(ps -p $PPID -o command ))
+ engine=$(echo $command | sed -e 's/^[A-Z ]*//g' | sed -e 's/ .*//g' | tr -d '\n')
+
+ case "$command" in
+ *-shell-escape*)
+ shellescape="--shell-escape"
+ ;;
+ esac
+
+ if [ "$engine" = "xelatex" ]; then
+ nopdf="-no-pdf"
+ fi
+
+ $engine $shellescape -interaction=batchmode $nopdf --output-directory $tmpdir $tmpdir/pagelayoutturbobatchoptimizexyz.tex > /dev/null
+
+ rm -rf $tmpdir
+ fi
+}
+
+batchoptimize() {
+ [ ! -d cache ] && mkdir cache
+
+ length=$(( $# / 15 ))
+ cores=$( nproc )
+ [ $cores -gt $length ] && cores=$length
+
+ while [ $length -gt 0 ]; do
+ filenamecache="$2"
+
+ if [ ! -e cache/"$filenamecache" ]; then
+ index=0
+ while [ $index -lt 15 ]; do
+ if [ $index -eq 0 ]; then
+ item="$1"
+ else
+ item="$item%$1"
+ fi
+
+ shift
+ index=$(( index + 1 ))
+ done
+
+ echo $item > cache/"$filenamecache"
+ else
+ shift 15
+ fi
+
+ length=$(( length - 1 ))
+ done
+
+ cores=$(( cores - 1 ))
+ while [ $cores -gt 0 ]; do
+ _startbatchprocess &
+ sleep 0.01
+ cores=$(( cores - 1 ))
+ done
+}
+
+usage() {
+ cat <<HELP_USAGE
+usage: pagelayoutapi getwidth % FILE
+ pagelayoutapi optimize % FILE % FILENAME % EXTENSION % ORIGINALWIDTH
+ % ORIGINALHEIGHT % CROPLEFT % CROPRIGHT % CROPTOP % CROPBOTTOM
+ % DENSITY % WIDTH % HEIGHT % DOWNSAMPLETHRESHOLD % UNSHARP % QUALITY
+ pagelayoutapi makeshadow % FILENAME % STANDARDDEVIATION % OPACITY % COLOR
+ % WIDTH % HEIGHT % FRAMEWIDTH % FRAMEHEIGHT % MARGIN % BORDERRADIUS
+ pagelayoutapi start [% import % [GRAPHICSPATH]] [% turbo % JOBNAME]
+ pagelayoutapi batchoptimize % BATCHLIST
+
+ --help Prints a help message.
+ --version Prints version information.
+HELP_USAGE
+}
+
+version() {
+ echo pagelayoutapi $version
+}
+
+input=$( echo "$@" | sed -e 's/\\//g' | sed -e 's/ %/%/g' | sed -e 's/% /%/g' )
+IFS="%"
+set -- $input
+IFS=" "
+
+case "$1" in
+getwidth)
+ shift
+
+ getwidth "$1"
+ ;;
+optimize)
+ shift
+
+ optimize "$@"
+ ;;
+makeshadow)
+ shift
+
+ makeshadow "$@"
+ ;;
+start)
+ shift
+
+ if [ "$1" = "import" ]; then
+ shift
+
+ import "$1"
+
+ shift
+ fi
+
+ if [ "$1" = "turbo" ]; then
+ shift
+
+ startturbo "$1" &
+ fi
+
+ echo ok
+ ;;
+batchoptimize)
+ shift
+
+ batchoptimize "$@" &
+
+ echo ok
+ ;;
+--version)
+ version
+ ;;
+--help)
+ usage
+esac
diff --git a/macros/latex/contrib/pagelayout/scripts/pagelayoutapi.1 b/macros/latex/contrib/pagelayout/scripts/pagelayoutapi.1
new file mode 100644
index 0000000000..368e411ef7
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/scripts/pagelayoutapi.1
@@ -0,0 +1,125 @@
+.\" generated with Ronn/v0.7.3
+.\" http://github.com/rtomayko/ronn/tree/0.7.3
+.
+.TH "PAGELAYOUTAPI" "1" "January 2023" "" ""
+.
+.SH "NAME"
+\fBpagelayoutapi\fR \- API for the pagelayout LaTeX class
+.
+.SH "SYNOPSIS"
+\fBpagelayoutapi getwidth\fR % FILE
+.
+.P
+\fBpagelayoutapi optimize\fR % FILE % FILENAME % EXTENSION % ORIGINALWIDTH % ORIGINALHEIGHT % CROPLEFT % CROPRIGHT % CROPTOP % CROPBOTTOM % DENSITY % WIDTH % HEIGHT % DOWNSAMPLETHRESHOLD % UNSHARP % QUALITY
+.
+.P
+\fBpagelayoutapi makeshadow\fR % FILENAME % STANDARDDEVIATION % OPACITY % COLOR % WIDTH % HEIGHT % FRAMEWIDTH % FRAMEHEIGHT % MARGIN % BORDERRADIUS
+.
+.P
+\fBpagelayoutapi start\fR [% import % [GRAPHICSPATH]] [% turbo % JOBNAME]
+.
+.P
+\fBpagelayoutapi batchoptimize\fR % BATCHLIST
+.
+.SH "DESCRIPTION"
+This script provides an API for the pagelayout LaTeX class\.
+.
+.TP
+\fBpagelayoutapi getwidth\fR
+Returns the width in pixels for the given image file\.
+.
+.TP
+\fBpagelayoutapi optimize\fR
+Creates a cropped, rezised, sharpend and compressed image and stores it in the cache directory\.
+.
+.TP
+\fBpagelayoutapi makeshadow\fR
+Creates a shadow image and stores it in the cache directory\.
+.
+.TP
+\fBpagelayoutapi start\fR
+The import parameter triggers the image import (see pagelayout\-manual\.pdf chapter "Image Optimization")\. Running the command with the parameter turbo, where the jobname is the filename of the document, processes the document in a special batch mode, that creates a batch list and calls the command \fBpagelayoutapi batchoptimize\fR\.
+.
+.TP
+\fBpagelayoutapi batchoptimize\fR
+Optimizes multiple images in parallel\.
+.
+.SH "OPTIONS"
+.
+.TP
+\fB\-\-help\fR
+Prints a help message\.
+.
+.TP
+\fB\-\-version\fR
+Prints version information\.
+.
+.SH "PARAMETERS"
+.
+.TP
+FILE
+filename with extension (eg\. IMG1234\.JPEG)
+.
+.TP
+FILENAME
+filename without extension (eg\. IMG1234)
+.
+.TP
+EXTENSION
+optimized file extension (\.jpg|\.png)
+.
+.TP
+DENSITY
+density in ppi (eg\. 72)
+.
+.TP
+DOWNSAMPLETHRESHOLD
+downsample threshold (integer >= 100)
+.
+.TP
+UNSHARP
+unsharp filter (eg\. 2x1)
+.
+.TP
+QUALITY
+quality (integer > 0, <= 100)
+.
+.TP
+STANDARDDEVIATION
+standard deviation (decimal > 0\.0)
+.
+.TP
+OPACITY
+opacity (decimal >= 0\.0, <= 1\.0)
+.
+.TP
+COLOR
+color string (eg\. pink)
+.
+.TP
+GRAPHICSPATH
+list of directories (eg\. {images/}{tmp/})
+.
+.TP
+JOBNAME
+LaTeX filename without extension (eg\. my\-document)
+.
+.TP
+BATCHLIST
+a flat list of batch items where each batch item is a flat list of the 15 parameters required by the command `pagelayoutapi optimize`
+.
+.P
+All other parameters are length dimensions\. The command \fBpagelayoutapi optimize\fR expects integer values in the LaTeX unit sp (eg\. 65536)\. The command \fBpagelayoutapi makeshadow\fR expects decimal values in a SVG compatible unit (eg\. 420\.0pt)\.
+.
+.SH "ENVIRONMENT"
+\fBpagelayoutapi\fR requires ImageMagick 7\.0 or later and Inkscape 1\.0 or later\.
+.
+.TP
+\fBPAGELAYOUT_IMPORT_DIRECTORY\fR
+Defines a system wide import directory\.
+.
+.SH "AUTHOR"
+\fBpagelayoutapi\fR was written by Friedemann Bartels\. \fIhttps://github\.com/friedemannbartels\fR
+.
+.SH "LICENSE"
+Copyright (c) 2022-2023 Friedemann Bartels\. Free use of this software is granted under the terms of the LaTeX Project Public License version 1\.3c or later\.
diff --git a/macros/latex/contrib/pagelayout/scripts/pagelayoutapi.1.md b/macros/latex/contrib/pagelayout/scripts/pagelayoutapi.1.md
new file mode 100644
index 0000000000..ab04ddd0b8
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/scripts/pagelayoutapi.1.md
@@ -0,0 +1,87 @@
+pagelayoutapi(1) -- API for the pagelayout LaTeX class
+====
+
+## SYNOPSIS
+
+`pagelayoutapi getwidth` % FILE
+
+`pagelayoutapi optimize` % FILE % FILENAME % EXTENSION % ORIGINALWIDTH % ORIGINALHEIGHT % CROPLEFT % CROPRIGHT % CROPTOP % CROPBOTTOM % DENSITY % WIDTH % HEIGHT % DOWNSAMPLETHRESHOLD % UNSHARP % QUALITY
+
+`pagelayoutapi makeshadow` % FILENAME % STANDARDDEVIATION % OPACITY % COLOR % WIDTH % HEIGHT % FRAMEWIDTH % FRAMEHEIGHT % MARGIN % BORDERRADIUS
+
+`pagelayoutapi start` [% import % [GRAPHICSPATH]] [% turbo % JOBNAME]
+
+`pagelayoutapi batchoptimize` % BATCHLIST
+
+## DESCRIPTION
+
+This script provides an API for the pagelayout LaTeX class.
+
+* `pagelayoutapi getwidth`:
+ Returns the width in pixels for the given image file.
+
+* `pagelayoutapi optimize`:
+ Creates a cropped, rezised, sharpend and compressed image and stores it in the cache directory.
+
+* `pagelayoutapi makeshadow`:
+ Creates a shadow image and stores it in the cache directory.
+
+* `pagelayoutapi start`:
+ The import parameter triggers the image import (see pagelayout-manual.pdf chapter "Image Optimization").
+ Running the command with the parameter turbo, where the jobname is the filename of the document, processes the document in a special batch mode, that creates a batch list and calls the command `pagelayoutapi batchoptimize`.
+
+* `pagelayoutapi batchoptimize`:
+ Optimizes multiple images in parallel.
+
+## OPTIONS
+
+* `--help`:
+ Prints a help message.
+* `--version`:
+ Prints version information.
+
+## PARAMETERS
+
+* FILE:
+ filename with extension (eg. IMG1234.JPEG)
+* FILENAME:
+ filename without extension (eg. IMG1234)
+* EXTENSION:
+ optimized file extension (.jpg|.png)
+* DENSITY:
+ density in ppi (eg. 72)
+* DOWNSAMPLETHRESHOLD:
+ downsample threshold (integer >= 100)
+* UNSHARP:
+ unsharp filter (eg. 2x1)
+* QUALITY:
+ quality (integer > 0, <= 100)
+* STANDARDDEVIATION:
+ standard deviation (decimal > 0.0)
+* OPACITY:
+ opacity (decimal >= 0.0, <= 1.0)
+* COLOR:
+ color string (eg. pink)
+* GRAPHICSPATH:
+ list of directories (eg. {images/}{tmp/})
+* JOBNAME:
+ LaTeX filename without extension (eg. my-document)
+* BATCHLIST:
+ a flat list of batch items where each batch item is a flat list of the 15 parameters required by the command \`pagelayoutapi optimize\`
+
+All other parameters are length dimensions. The command `pagelayoutapi optimize` expects integer values in the LaTeX unit sp (eg. 65536). The command `pagelayoutapi makeshadow` expects decimal values in a SVG compatible unit (eg. 420.0pt).
+
+## ENVIRONMENT
+
+`pagelayoutapi` requires ImageMagick 7.0 or later and Inkscape 1.0 or later.
+
+* `PAGELAYOUT_IMPORT_DIRECTORY`:
+ Defines a system wide import directory.
+
+## AUTHOR
+
+`pagelayoutapi` was written by Friedemann Bartels. <https://github.com/friedemannbartels>
+
+## LICENSE
+
+Copyright (c) 2022-2023 Friedemann Bartels. Free use of this software is granted under the terms of the LaTeX Project Public License version 1.3c or later.
diff --git a/macros/latex/contrib/pagelayout/scripts/textestvis b/macros/latex/contrib/pagelayout/scripts/textestvis
new file mode 100755
index 0000000000..36b3ff6cfb
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/scripts/textestvis
@@ -0,0 +1,506 @@
+#!/bin/sh
+#
+# Copyright (c) 2022-2023 by Friedemann Bartels
+#
+# This file may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either
+# version 1.3c of this license or (at your option) any later
+# version. The latest version of this license is in:
+#
+# http://www.latex-project.org/lppl.txt
+#
+# and version 1.3c or later is part of all distributions of
+# LaTeX version 2008/05/04 or later.
+#
+
+version=1.0.3
+
+OK="$( tput setaf 2 )•$( tput sgr0 )"
+FAILED="$( tput setaf 1 )$( tput bold )x$( tput sgr0 )"
+NEW="$( tput setaf 3 )$( tput bold )+$( tput sgr0 )"
+REMOVED="$( tput setaf 5 )$( tput bold )-$( tput sgr0 )"
+ERROR="$( tput setaf 1 )$( tput bold )!$( tput sgr0 )"
+
+_playok() {
+ if [ -f /System/Library/Sounds/Glass.aiff ]; then
+ afplay /System/Library/Sounds/Glass.aiff >/dev/null 2>&1
+ fi
+}
+
+_playhm() {
+ if [ -f /System/Library/Sounds/Basso.aiff ]; then
+ afplay /System/Library/Sounds/Basso.aiff >/dev/null 2>&1
+ fi
+}
+
+_playerror() {
+ if [ -f /System/Library/Sounds/Sosumi.aiff ]; then
+ afplay /System/Library/Sounds/Sosumi.aiff >/dev/null 2>&1
+ fi
+}
+
+_gettime() {
+ if command -v gdate &> /dev/null; then
+ echo $( gdate +%s%3N )
+ else
+ if command -v date &> /dev/null; then
+ milliseconds=$( date +%3N )
+ if [ $milliseconds = 3N ]; then
+ echo $(( SECONDS * 1000 ))
+ else
+ echo $( date +%s%3N )
+ fi
+ else
+ echo $(( SECONDS * 1000 ))
+ fi
+ fi
+}
+
+_starttimer() {
+ starttime=$( _gettime )
+}
+
+_stoptimer() {
+ endtime=$( _gettime )
+
+ elapsedtime=$(( endtime - starttime ))
+ elapsedseconds=$(( elapsedtime / 1000 ))
+ elapsedmilliseconds=$(( elapsedtime % 1000 ))
+ elapsed=$elapsedseconds.$( printf "%03d" "$elapsedmilliseconds" )
+}
+
+test() {
+ _starttimer
+ tmpdir=$( mktemp -d 2>/dev/null )/textest$( date "+%Y%m%d%H%M%S" )$RANDOM
+ mkdir $tmpdir
+
+ if [ $3 = true ] && [ -d cache ]; then
+ rm -rf cache
+ fi
+
+ okcount=0
+ failedcount=0
+ newcount=0
+ removedcount=0
+ fileokcount=0
+ filefailedcount=0
+ defaultfiller=23
+
+ echo ""
+ for entry in *$5*.tex
+ do
+ if [ $entry != "*$5*.tex" ]; then
+ name=$( echo $entry | sed -e 's/\.tex$//g' )
+ if [ ${name:0:1} != _ ]; then
+ printf "$( tput sgr0 )$name"
+
+ runtwice=0
+ if [ "${name:$(( ${#name} - 2 )):2}" = "@2" ]; then
+ runtwice=1
+ fi
+
+ if [ "$4" != "xelatex" ]; then
+ name="$name.$4"
+ fi
+
+ passed=1
+ rm -f $name.failed.*
+
+ cp $entry $tmpdir/$name.tex
+ shell=""
+ if [ $1 = true ]; then
+ shell="--shell-escape"
+ fi
+ $4 -interaction=batchmode $shell --output-directory $tmpdir $tmpdir/$name.tex > /dev/null
+ if [ $? -eq 1 ]; then
+ passed=0
+ fi
+ if [ $runtwice -eq 1 ]; then
+ $4 -interaction=batchmode $shell --output-directory $tmpdir $tmpdir/$name.tex > /dev/null
+ if [ $? -eq 1 ]; then
+ passed=0
+ fi
+ fi
+
+ magick convert -density $2 -quiet $tmpdir/$name.pdf $tmpdir/$name.png
+ if [ -f "$tmpdir/$name.png" ]; then
+ mv $tmpdir/$name.png $tmpdir/$name-0.png
+ fi
+
+ if [ -f "$name.approved.pdf" ]; then
+ magick convert -density $2 -quiet $name.approved.pdf $tmpdir/$name.approved.png
+ if [ -f "$tmpdir/$name.approved.png" ]; then
+ mv $tmpdir/$name.approved.png $tmpdir/$name.approved-0.png
+ fi
+ fi
+
+ if [ $passed -eq 0 ]; then
+ filler=$(( defaultfiller - ${#name} - 2 ))
+ else
+ filler=$(( defaultfiller - ${#name} ))
+ fi
+ while [ 0 -le $filler ]; do
+ printf " "
+ filler=$(( filler - 1 ))
+ done
+ if [ $passed -eq 0 ]; then
+ printf " $ERROR"
+ fi
+
+ index=0
+ while [ -f "$tmpdir/$name-$index.png" ]; do
+ if [ -f "$tmpdir/$name.approved-$index.png" ]; then
+ changedpixels=$( magick compare -quiet -metric AE $tmpdir/$name-$index.png $tmpdir/$name.approved-$index.png null: 2>&1 )
+ if [ $changedpixels -eq 0 ]; then
+ okcount=$(( okcount + 1 ))
+ printf " $OK"
+ else
+ failedcount=$(( failedcount + 1 ))
+ passed=0
+ printf " $FAILED"
+ magick compare -quiet $tmpdir/$name-$index.png $tmpdir/$name.approved-$index.png $name.failed.$(( index + 1 )).png
+ if [ -f "$tmpdir/$name.pdf" ]; then
+ mv $tmpdir/$name.pdf $name.failed.pdf
+ fi
+ fi
+ else
+ newcount=$(( newcount + 1 ))
+ passed=0
+ printf " $NEW"
+ mv $tmpdir/$name-$index.png $name.failed.$(( index + 1 )).png
+ if [ -f "$tmpdir/$name.pdf" ]; then
+ mv $tmpdir/$name.pdf $name.failed.pdf
+ fi
+ fi
+ index=$(( index + 1 ))
+ if [ `expr $index % 20` -eq 0 ] && [ -f "$tmpdir/$name-$index.png" ]; then
+ echo ""
+ filler=$defaultfiller
+ while [ 0 -le $filler ]; do
+ printf " "
+ filler=$(( filler - 1 ))
+ done
+ fi
+ done
+ while [ -f "$tmpdir/$name.approved-$index.png" ]; do
+ removedcount=$(( removedcount + 1 ))
+ passed=0
+ printf " $REMOVED"
+ mv $tmpdir/$name.approved-$index.png $name.failed.$(( index + 1 )).png
+ if [ -f "$tmpdir/$name.pdf" ]; then
+ mv $tmpdir/$name.pdf $name.failed.pdf
+ fi
+ index=$(( index + 1 ))
+ if [ `expr $index % 20` -eq 0 ] && [ -f "$tmpdir/$name.approved-$index.png" ]; then
+ echo ""
+ filler=$defaultfiller
+ while [ 0 -le $filler ]; do
+ printf " "
+ filler=$(( filler - 1 ))
+ done
+ fi
+ done
+
+ if [ $passed -eq 1 ]; then
+ fileokcount=$(( fileokcount + 1 ))
+ else
+ filefailedcount=$(( filefailedcount + 1 ))
+ fi
+
+ echo ""
+ fi
+ fi
+ done
+
+ rm -rf $tmpdir
+ _stoptimer
+ seconds=$( printf "%.1f" "$elapsed" )
+
+ filecount=$(( fileokcount + filefailedcount ))
+
+ if [ $filecount -gt 0 ]; then
+ echo ""
+ fi
+ if [ $filecount -eq $fileokcount ]; then
+ if [ $filecount -eq 0 ]; then
+ _playhm &
+ echo "$( tput sgr0 )Tested 0 files 🧐."
+ else
+ _playok &
+ echo "$( tput sgr0 )Successfully tested $filecount files in $seconds seconds 🎉."
+ fi
+ echo ""
+ else
+ _playerror &
+ echo "$( tput sgr0 )Tested $filecount files in $seconds seconds."
+ echo ""
+
+ if [ $fileokcount -gt 0 ]; then
+ filler=$(( 6 + ${#filecount} - ${#fileokcount} ))
+ while [ 0 -le $filler ]; do
+ printf " "
+ filler=$(( filler - 1 ))
+ done
+ printf "$( tput setaf 2 )$fileokcount OK$( tput sgr0 )"
+ echo ""
+ fi
+ if [ $filefailedcount -gt 0 ]; then
+ filler=$(( 6 + ${#filecount} - ${#filefailedcount} ))
+ while [ 0 -le $filler ]; do
+ printf " "
+ filler=$(( filler - 1 ))
+ done
+ printf "$( tput setaf 1 )$filefailedcount Failed$( tput sgr0 )"
+ echo ""
+ fi
+ echo ""
+ exit 1
+ fi
+}
+
+approve() {
+ filecount=0
+
+ suffix=""
+ if [ "$1" != "xelatex" ]; then
+ suffix=".$1"
+ fi
+
+ echo ""
+ for entry in *$2*$suffix.failed.pdf
+ do
+ if [ $entry != "*$2*$suffix.failed.pdf" ]; then
+ filecount=$(( filecount + 1 ))
+ name=$( echo $entry | sed -e "s/$suffix.failed.pdf//" )
+ echo $name
+ rm -f $name$suffix.approved.pdf
+ if [ -f "$name.aux" ]; then
+ cp $name$suffix.failed.pdf $name$suffix.approved.pdf
+ else
+ mv $name$suffix.failed.pdf $name$suffix.approved.pdf
+ fi
+
+ rm -f $name$suffix.failed.*
+ fi
+ done
+
+ if [ $filecount -gt 0 ]; then
+ echo ""
+ fi
+ if [ $filecount -eq 1 ]; then
+ echo "Approved 1 file."
+ else
+ echo "Approved $filecount files."
+ fi
+ echo ""
+}
+
+compare() {
+ filea=$2
+ fileb=$3
+ tmpdir=$( mktemp -d 2>/dev/null)/textest$( date "+%Y%m%d%H%M%S" )$RANDOM
+ mkdir $tmpdir
+
+ namea=$( echo $filea | sed -e 's/\.\///g' | sed -e 's/\.pdf$//g' )
+ nameb=$( echo $fileb | sed -e 's/\.\///g' | sed -e 's/\.pdf$//g' )
+ basenamea=$(basename $namea)
+ basenameb=$(basename $nameb)
+
+ rm -f $namea.diff.*.png
+
+ spacer=""
+ if [ -f "$filea" ]; then
+ if [ -f "$fileb" ]; then
+ magick convert -density $1 -quiet $filea $tmpdir/$basenamea.png
+ if [ -f "$tmpdir/$basenamea.png" ]; then
+ mv $tmpdir/$basenamea.png $tmpdir/$basenamea-0.png
+ fi
+ magick convert -density $1 -quiet $fileb $tmpdir/$basenameb.png
+ if [ -f "$tmpdir/$basenameb.png" ]; then
+ mv $tmpdir/$basenameb.png $tmpdir/$basenameb-0.png
+ fi
+
+ index=0
+ while [ -f "$tmpdir/$basenamea-$index.png" ]; do
+ if [ -f "$tmpdir/$basenameb-$index.png" ]; then
+ changedpixels=$( magick compare -quiet -metric AE $tmpdir/$basenamea-$index.png $tmpdir/$basenameb-$index.png null: 2>&1 )
+ if [ $changedpixels -eq 0 ]; then
+ printf "$spacer$OK"
+ spacer=" "
+ else
+ printf "$spacer$FAILED"
+ spacer=" "
+ magick compare -quiet $tmpdir/$basenamea-$index.png $tmpdir/$basenameb-$index.png $namea.diff.$(( index + 1 )).png
+ fi
+ else
+ printf "$spacer$NEW"
+ spacer=" "
+ fi
+ index=$(( index + 1 ))
+ done
+ while [ -f "$tmpdir/$basenameb-$index.png" ]; do
+ printf "$spacer$REMOVED"
+ spacer=" "
+ index=$(( index + 1 ))
+ done
+ echo ""
+ else
+ echo "File $fileb not found."
+ fi
+ else
+ echo "File $filea not found."
+ fi
+
+ rm -rf $tmpdir
+}
+
+perf() {
+ if [ -f $4 ]; then
+ tmpdir=$( mktemp -d 2>/dev/null )/textestperf$( date "+%Y%m%d%H%M%S" )$RANDOM
+ mkdir $tmpdir
+ basename=$(basename $4)
+
+ if [ $1 = true ] && [ -d cache ]; then
+ rm -rf cache
+ fi
+
+ cp $4 $tmpdir
+ shell=""
+ if [ $2 = true ]; then
+ shell="--shell-escape"
+ fi
+ _starttimer
+ $3 -interaction=batchmode $shell --output-directory $tmpdir $tmpdir/$basename > /dev/null
+ _stoptimer
+ echo "$elapsed"
+
+ rm -rf $tmpdir
+ else
+ echo "File $4 not found."
+ fi
+}
+
+usage() {
+ cat <<HELP_USAGE
+usage: textest [-cs] [-e ENGINE] [-d DENSITY] [PATTERN]
+ textest approve [-e ENGINE] [PATTERN]
+ textest compare [-d DENSITY] FILE FILE
+ textest perf [-cs] [-e ENGINE] FILE
+
+ -c Clears cache.
+ -s Enables shell escape.
+ -d DENSITY Sets density in ppi (default 72).
+ -e ENGINE Sets latex engine (default xelatex).
+ --help Prints a help message.
+ --version Prints version information.
+HELP_USAGE
+}
+
+version() {
+ echo textest $version
+}
+
+case "$1" in
+approve)
+ shift
+ engine=xelatex
+
+ while getopts ":e:" arg; do
+ case "${arg}" in
+ e)
+ engine="${OPTARG}"
+ ;;
+ ?)
+ echo "Invalid option: -${OPTARG}."
+ ;;
+ esac
+ done
+
+ shift "$(( OPTIND - 1 ))"
+
+ approve $engine $1
+ ;;
+compare)
+ shift
+
+ density=72
+
+ while getopts ":d:" arg; do
+ case "${arg}" in
+ d)
+ density="${OPTARG}"
+ ;;
+ ?)
+ echo "Invalid option: -${OPTARG}."
+ ;;
+ esac
+ done
+
+ shift "$(( OPTIND - 1 ))"
+
+ compare $density $1 $2
+ ;;
+perf)
+ shift
+
+ shell=false
+ clear=false
+ engine=xelatex
+
+ while getopts ":e:sc" arg; do
+ case "${arg}" in
+ c)
+ clear=true
+ ;;
+ e)
+ engine="${OPTARG}"
+ ;;
+ s)
+ shell=true
+ ;;
+ ?)
+ echo "Invalid option: -${OPTARG}."
+ ;;
+ esac
+ done
+
+ shift "$(( OPTIND - 1 ))"
+
+ perf $clear $shell $engine $1
+ ;;
+--version)
+ version
+ ;;
+--help)
+ usage
+ ;;
+*)
+ density=72
+ shell=false
+ clear=false
+ engine=xelatex
+
+ while getopts ":e:d:sc" arg; do
+ case "${arg}" in
+ c)
+ clear=true
+ ;;
+ d)
+ density="${OPTARG}"
+ ;;
+ e)
+ engine="${OPTARG}"
+ ;;
+ s)
+ shell=true
+ ;;
+ ?)
+ echo "Invalid option: -${OPTARG}."
+ ;;
+ esac
+ done
+
+ shift "$(( OPTIND - 1 ))"
+
+ test $shell $density $clear $engine $1
+esac
diff --git a/macros/latex/contrib/pagelayout/scripts/textestvis.1 b/macros/latex/contrib/pagelayout/scripts/textestvis.1
new file mode 100644
index 0000000000..7f7b7df740
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/scripts/textestvis.1
@@ -0,0 +1,73 @@
+.\" generated with Ronn/v0.7.3
+.\" http://github.com/rtomayko/ronn/tree/0.7.3
+.
+.TH "TEXTESTVIS" "1" "January 2023" "" ""
+.
+.SH "NAME"
+\fBtextestvis\fR \- visual regression tests for LaTeX
+.
+.SH "SYNOPSIS"
+\fBtextestvis\fR [\-cs] [\-e ENGINE] [\-d DENSITY] [PATTERN]
+.
+.P
+\fBtextestvis approve\fR [\-e ENGINE] [PATTERN]
+.
+.P
+\fBtextestvis compare\fR [\-d DENSITY] FILE FILE
+.
+.P
+\fBtextestvis perf\fR [\-cs] [\-e ENGINE] FILE
+.
+.SH "DESCRIPTION"
+Perform visual regression tests for LaTeX documents\.
+.
+.TP
+\fBtextestvis\fR
+Creates PDF files for all tex files matching the pattern and performs a visual regression test\. If no pattern is specified, all files in the current directory are tested except for files whose names begin with an underscore\.
+.
+.TP
+\fBtextestvis approve\fR
+Replaces the reference files with the test files\.
+.
+.TP
+\fBtextestvis compare\fR
+Creates a visual diff for two pdf files\.
+.
+.TP
+\fBtextestvis perf\fR
+Measures the time for creating a pdf file from the given tex file\.
+.
+.SH "OPTIONS"
+.
+.TP
+\fB\-c\fR
+Clears cache\.
+.
+.TP
+\fB\-s\fR
+Enables shell escape\.
+.
+.TP
+\fB\-d\fR \fIDENSITY\fR
+Sets density in ppi (default 72)\.
+.
+.TP
+\fB\-e\fR \fIENGINE\fR
+Sets latex engine (default xelatex)\.
+.
+.TP
+\fB\-\-help\fR
+Prints a help message\.
+.
+.TP
+\fB\-\-version\fR
+Prints version information\.
+.
+.SH "ENVIRONMENT"
+\fBtextestvis\fR requires ImageMagick 7\.0 or later\.
+.
+.SH "AUTHOR"
+\fBtextestvis\fR was written by Friedemann Bartels\. \fIhttps://github\.com/friedemannbartels\fR
+.
+.SH "LICENSE"
+Copyright (c) 2022-2023 Friedemann Bartels\. Free use of this software is granted under the terms of the LaTeX Project Public License version 1\.3c or later\.
diff --git a/macros/latex/contrib/pagelayout/scripts/textestvis.1.md b/macros/latex/contrib/pagelayout/scripts/textestvis.1.md
new file mode 100644
index 0000000000..00b475d935
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/scripts/textestvis.1.md
@@ -0,0 +1,55 @@
+textestvis(1) -- visual regression tests for LaTeX
+====
+
+## SYNOPSIS
+
+`textestvis` [-cs] [-e ENGINE] [-d DENSITY] [PATTERN]
+
+`textestvis approve` [-e ENGINE] [PATTERN]
+
+`textestvis compare` [-d DENSITY] FILE FILE
+
+`textestvis perf` [-cs] [-e ENGINE] FILE
+
+## DESCRIPTION
+
+Perform visual regression tests for LaTeX documents.
+
+* `textestvis`:
+ Creates PDF files for all tex files matching the pattern and performs a visual regression test. If no pattern is specified, all files in the current directory are tested except for files whose names begin with an underscore.
+
+* `textestvis approve`:
+ Replaces the reference files with the test files.
+
+* `textestvis compare`:
+ Creates a visual diff for two pdf files.
+
+* `textestvis perf`:
+ Measures the time for creating a pdf file from the given tex file.
+
+## OPTIONS
+
+* `-c`:
+ Clears cache.
+* `-s`:
+ Enables shell escape.
+* `-d` <DENSITY>:
+ Sets density in ppi (default 72).
+* `-e` <ENGINE>:
+ Sets latex engine (default xelatex).
+* `--help`:
+ Prints a help message.
+* `--version`:
+ Prints version information.
+
+## ENVIRONMENT
+
+`textestvis` requires ImageMagick 7.0 or later.
+
+## AUTHOR
+
+`textestvis` was written by Friedemann Bartels. <https://github.com/friedemannbartels>
+
+## LICENSE
+
+Copyright (c) 2022-2023 Friedemann Bartels. Free use of this software is granted under the terms of the LaTeX Project Public License version 1.3c or later.
diff --git a/macros/latex/contrib/pagelayout/tex/pagelayout.cls b/macros/latex/contrib/pagelayout/tex/pagelayout.cls
new file mode 100644
index 0000000000..2f0257de2a
--- /dev/null
+++ b/macros/latex/contrib/pagelayout/tex/pagelayout.cls
@@ -0,0 +1,3747 @@
+%%
+%% Copyright (c) 2022-2023 by Friedemann Bartels
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008/05/04 or later.
+%%
+
+\NeedsTeXFormat{LaTeX2e}[2020/10/01]
+\ProvidesClass{pagelayout}[2023/01/23 Layout graphic rich documents]
+\def\pagelayoutversion{1.0.3}
+
+% packages
+\RequirePackage{pgfopts}
+\RequirePackage{tikz}
+\RequirePackage{tcolorbox}
+\tcbuselibrary{magazine}
+
+% helper
+\def\pal@emptystring{}
+\def\pal@striplastexclamationmark#1{\pal@striplastexclamationmarka{#1}#1\end !\end\eend}
+\def\pal@striplastexclamationmarka#1#2!\end#3\eend{\ifx\end#3\end#1\else#2\fi}
+\def\pal@instring#1#2{TT\fi\begingroup\edef\pal@x{\endgroup\noexpand\in@{#1}{#2}}\pal@x\ifin@}
+\def\pal@dimentonumber#1{\strip@pt\dimexpr #1*65536/\number\dimexpr 1\unitlength}
+
+% ifs
+\newif\ifpal@leftpage
+\newif\ifpal@rightpage
+
+\newif\ifpal@twoside
+\newif\ifpal@fanfold
+\newif\ifpal@cover
+\newif\ifpal@beginleft
+\newif\ifpal@beginright
+\newif\ifpal@grid
+\newif\ifpal@preflight
+\newif\ifpal@graphpaper
+\newif\ifpal@placeholder
+\newif\ifpal@safezone
+\newif\ifpal@cuttingmarks
+\newif\ifpal@fillpages
+\newif\ifpal@frontcover
+\newif\ifpal@backcover
+
+\newif\ifpal@hascover
+\newif\ifpal@haspages
+\newif\ifpal@isdoublepage
+\newif\ifpal@ispage
+\newif\ifpal@isemptypage
+\newif\ifpal@haslastemptypage
+\newif\ifpal@hasoddnumberofpages
+\newif\ifpal@cuttingmarksvisible
+\newif\ifpal@isfanfoldopen
+\newif\ifpal@isinitgrid
+\newif\ifpal@haspagegraphic
+\newif\ifpal@isperformancemode
+\newif\ifpal@isturbomode
+\newif\ifpal@isbatchmode
+\newif\ifpal@ismaskrequired
+\newif\ifpal@optimize
+\newif\ifpal@import
+\newif\ifpal@isluatex
+
+% dimensions
+\newdimen\pal@null\pal@null=0pt
+\newdimen\pal@undefdim\pal@undefdim=-1sp
+
+\ifdefined\pagewidth\pal@isluatextrue\else\newdimen\pagewidth\newdimen\pageheight\fi
+\newdimen\bleed\newdimen\outerbleed\newdimen\innerbleed\newdimen\topbleed\newdimen\bottombleed
+\newdimen\safetymargin\newdimen\topsafetymargin\newdimen\bottomsafetymargin\newdimen\innersafetymargin\newdimen\outersafetymargin
+\newdimen\innermargin\newdimen\bottommargin\newdimen\outermargin\newdimen\margin
+\newdimen\gutter\newdimen\spinewidth\newdimen\bindingoffset
+\newdimen\coverwidth\newdimen\coverheight
+\newdimen\coverbleed\newdimen\coverouterbleed\newdimen\coverinnerbleed\newdimen\covertopbleed\newdimen\coverbottombleed
+\newdimen\coversafetymargin\newdimen\covertopsafetymargin\newdimen\coverbottomsafetymargin\newdimen\coverinnersafetymargin\newdimen\coveroutersafetymargin
+
+\newdimen\pal@pagewidth\newdimen\pal@pageheight
+\newdimen\pal@outerbleed\newdimen\pal@innerbleed\newdimen\pal@topbleed\newdimen\pal@bottombleed
+\newdimen\pal@topsafetymargin\newdimen\pal@bottomsafetymargin\newdimen\pal@innersafetymargin\newdimen\pal@outersafetymargin
+\newdimen\pal@topmargin\newdimen\pal@topmargintmp\newdimen\pal@innermargin\newdimen\pal@bottommargin\newdimen\pal@outermargin
+\newdimen\pal@gutter
+\newdimen\pal@x\newdimen\pal@y\newdimen\pal@xx\newdimen\pal@yy\newdimen\width\newdimen\height\newdimen\x\newdimen\y
+\newdimen\pal@gridoffsethorizontal\newdimen\pal@gridoffsetvertical\newdimen\pal@gridoffsethorizontaln\newdimen\pal@gridoffsetverticaln
+\newdimen\pal@graphpaperx\newdimen\pal@graphpapery\newdimen\pal@graphpaperoffset\newdimen\pal@graphpapersnap
+
+% interface
+\newcommand\ifleftpage[1]{\ifpal@leftpage#1\fi}
+\newcommand\ifrightpage[1]{\ifpal@rightpage#1\fi}
+\newcommand\ifspine[1]{\ifpal@cover#1\fi}
+\def\twoside{\pal@twosidetrue}
+\def\fanfold{\pal@fanfoldtrue}
+\def\cover{\pal@covertrue}
+\def\beginleft{\pal@beginlefttrue}
+\def\beginright{\pal@beginrighttrue}
+\def\grid{\pal@gridtrue}\def\nogrid{\pal@gridfalse}
+\def\preflight{\pal@preflighttrue}\def\nopreflight{\pal@preflightfalse}
+\def\graphpaper{\pal@graphpapertrue}\def\nographpaper{\pal@graphpaperfalse}
+\def\placeholders{\pal@placeholdertrue}\def\noplaceholders{\pal@placeholderfalse}
+\def\safezone{\pal@safezonetrue}\def\nosafezone{\pal@safezonefalse}
+\def\cuttingmarks{\pal@cuttingmarkstrue}\def\nocuttingmarks{\pal@cuttingmarksfalse}
+\def\fillpages{\pal@fillpagestrue}\def\nofillpages{\pal@fillpagesfalse}
+\newcommand\optimize[1][]{\pal@optimizetrue\pgfkeys{optimize,#1}}
+\def\density#1{\def\pal@density{#1}}
+\def\quality#1{\def\pal@quality{#1}}
+\def\import{\pal@importtrue}
+
+\def\setgraphpaper#1{
+ \def\pal@graphpaperconfig{#1}
+ \foreach \pal@graphpaperconfigitem in \pal@graphpaperconfig {
+ \global\pal@graphpapersnap=\pal@graphpaperconfigitem
+ }
+}
+\setgraphpaper{1mm,5mm}
+
+\def\pal@pagecolormodel{}
+\def\pal@pagecolor{}
+\renewcommand\pagecolor[2][]{
+ \ifpal@ispage
+ \def\pal@pagecolormodel{#1}
+ \def\pal@pagecolor{#2}
+ \else
+ \global\def\pal@pagecolormodel{#1}
+ \global\def\pal@pagecolor{#2}
+ \fi
+}
+\newcommand\setpagecolor[2][]{\pagecolor[#1]{#2}}
+\def\nopagecolor{\pagecolor{}}
+
+\def\pal@current@color{black}
+\let\pal@originalcolor\color
+\def\color#1{\ifpal@ispage\ifx\pal@current@color#1\else\def\pal@current@color{#1}\pal@originalcolor{#1}\fi\else\def\paloptions@color{#1}\fi}
+\def\setcolor#1{\color{#1}}
+
+\let\pal@originalpagenumbering\pagenumbering
+\newif\ifpal@pagenumberinghaschanged
+\renewcommand\pagenumbering[1]{\pal@pagenumberinghaschangedtrue\pal@originalpagenumbering{#1}}
+
+% options
+\def\pal@density{300}
+\def\pal@downsamplethreshold{120}
+\def\pal@quality{}
+\def\pal@unsharp{2x1}
+\pgfkeysdef{/optimize/downsample threshold}{
+ \pgfmathqparse{#1pt*100pt}
+ \pgfmathround{\pgfmathresult}
+ \pgfmathint{\pgfmathresult}
+ \edef\pal@downsamplethreshold{\pgfmathresult}
+}
+\pgfkeys{
+ /optimize/.is family,
+ /optimize,
+ density/.store in=\pal@density,
+ quality/.store in=\pal@quality,
+ unsharp/.store in=\pal@unsharp,
+}
+\pgfkeys{
+ /pal/.cd,
+ % page dimensions
+ pagewidth/.code={\setlength{\pagewidth}{#1}},pagewidth=210mm,
+ pageheight/.code={\setlength{\pageheight}{#1}},pageheight=297mm,
+ bleed/.code={\setlength{\bleed}{#1}},bleed=0pt,
+ outerbleed/.code={\setlength{\outerbleed}{#1}},outerbleed=\pal@undefdim,
+ innerbleed/.code={\setlength{\innerbleed}{#1}},innerbleed=\pal@undefdim,
+ topbleed/.code={\setlength{\topbleed}{#1}},topbleed=\pal@undefdim,
+ bottombleed/.code={\setlength{\bottombleed}{#1}},bottombleed=\pal@undefdim,
+ safetymargin/.code={\setlength{\safetymargin}{#1}},safetymargin=0pt,
+ outersafetymargin/.code={\setlength{\outersafetymargin}{#1}},outersafetymargin=\pal@undefdim,
+ innersafetymargin/.code={\setlength{\innersafetymargin}{#1}},innersafetymargin=\pal@undefdim,
+ topsafetymargin/.code={\setlength{\topsafetymargin}{#1}},topsafetymargin=\pal@undefdim,
+ bottomsafetymargin/.code={\setlength{\bottomsafetymargin}{#1}},bottomsafetymargin=\pal@undefdim,
+ % cover dimensions
+ coverwidth/.code={\setlength{\coverwidth}{#1}},coverwidth=\pal@undefdim,
+ coverheight/.code={\setlength{\coverheight}{#1}},coverheight=\pal@undefdim,
+ coverbleed/.code={\setlength{\coverbleed}{#1}},coverbleed=\pal@undefdim,
+ coverouterbleed/.code={\setlength{\coverouterbleed}{#1}},coverouterbleed=\pal@undefdim,
+ coverinnerbleed/.code={\setlength{\coverinnerbleed}{#1}},coverinnerbleed=\pal@undefdim,
+ covertopbleed/.code={\setlength{\covertopbleed}{#1}},covertopbleed=\pal@undefdim,
+ coverbottombleed/.code={\setlength{\coverbottombleed}{#1}},coverbottombleed=\pal@undefdim,
+ coversafetymargin/.code={\setlength{\coversafetymargin}{#1}},coversafetymargin=\pal@undefdim,
+ coveroutersafetymargin/.code={\setlength{\coveroutersafetymargin}{#1}},coveroutersafetymargin=\pal@undefdim,
+ coverinnersafetymargin/.code={\setlength{\coverinnersafetymargin}{#1}},coverinnersafetymargin=\pal@undefdim,
+ covertopsafetymargin/.code={\setlength{\covertopsafetymargin}{#1}},covertopsafetymargin=\pal@undefdim,
+ coverbottomsafetymargin/.code={\setlength{\coverbottomsafetymargin}{#1}},coverbottomsafetymargin=\pal@undefdim,
+ spinewidth/.code={\setlength{\spinewidth}{#1}},spinewidth=3mm,
+ bindingoffset/.code={\setlength{\bindingoffset}{#1}},bindingoffset=0pt,
+ % grid dimensions
+ margin/.code={\setlength{\margin}{#1}},margin=20mm,
+ outermargin/.code={\setlength{\outermargin}{#1}},outermargin=\pal@undefdim,
+ innermargin/.code={\setlength{\innermargin}{#1}},innermargin=\pal@undefdim,
+ topmargin/.store in=\paloptions@topmargin,topmargin=-1sp,
+ bottommargin/.code={\setlength{\bottommargin}{#1}},bottommargin=\pal@undefdim,
+ gutter/.code={\setlength{\gutter}{#1}},gutter=0pt,
+ pagecolor/.store in=\pal@pagecolor,
+ pagegraphic/.store in=\paloptions@pagegraphic,pagegraphic=,
+ color/.store in=\paloptions@color,color=black,
+ grid/.is if=pal@grid,
+ safezone/.is if=pal@safezone,
+ cuttingmarks/.is if=pal@cuttingmarks,
+ graphpaper/.is if=pal@graphpaper,
+ placeholder/.is if=pal@placeholder,
+ fillpages/.is if=pal@fillpages,
+ draft/.code={\pal@placeholdertrue\pal@fillpagestrue\pal@cuttingmarkstrue\pal@isperformancemodetrue},
+ preflight/.is if=pal@preflight,
+ twoside/.is if=pal@twoside,
+ fanfold/.code={\pal@fanfoldtrue\pal@covertrue\pal@twosidetrue\pal@beginlefttrue},
+ cover/.is if=pal@cover,
+ beginleft/.is if=pal@beginleft,
+ beginright/.is if=pal@beginright,
+ optimize/.code={\pal@optimizetrue\pgfkeys{optimize,#1}},
+ density/.store in=\pal@density,
+ quality/.store in=\pal@quality,
+ turbo/.is if=pal@isturbomode,turbo=\ifpal@isluatex false\else true\fi,
+ import/.is if=pal@import
+}
+\ProcessPgfOptions{/pal}
+
+\pal@originalcolor{\paloptions@color}
+
+\Gin@draftfalse
+
+\LoadClass[multi=picture]{standalone}
+\setlength{\topmargin}{\paloptions@topmargin}
+
+% grid
+\newdimen\pal@gridoffsetx
+\newdimen\pal@gridwidth\newdimen\pal@gridheight\newdimen\pal@maxgridheight\newdimen\pal@maxgridwidth
+\newcount\pal@gridtmp\newcount\pal@gridtmpRowH
+\newcount\pal@rowscount\newcount\pal@flexrowscount\newcount\pal@fixrowscount\newcount\pal@cellscount
+\newcount\rowsH\newcount\rowsF\newcount\rowsFlex
+\newif\ifpal@gridisflexrow
+\def\pal@set#1#2{
+ \ifcsname pal@data#1\endcsname
+ \else
+ \expandafter\newcount\csname pal@data#1\endcsname
+ \fi
+ \csname pal@data#1\endcsname#2\relax
+}
+\def\pal@get#1{
+ \ifcsname pal@data#1\endcsname
+ \csname pal@data#1\endcsname%
+ \else
+ 0
+ \fi
+}
+\def\pal@advance#1#2{
+ \advance\csname pal@data#1\endcsname by \csname pal@data#2\endcsname
+}
+\newif\ifpal@flexmode
+\newif\ifpal@forcerow
+\newif\ifpal@forcecell
+\def\pal@leftsafetymargin{
+ \ifpal@backcover%
+ \pal@outersafetymargin%
+ \else%
+ \ifpal@frontcover%
+ \pal@innersafetymargin%
+ \else%
+ \ifpal@leftpage%
+ \pal@outersafetymargin%
+ \else%
+ \pal@innersafetymargin%
+ \fi%
+ \fi%
+ \fi%
+}
+\def\pal@rightsafetymargin{
+ \ifpal@backcover%
+ \pal@innersafetymargin%
+ \else%
+ \ifpal@frontcover%
+ \pal@outersafetymargin%
+ \else%
+ \ifpal@leftpage%
+ \pal@innersafetymargin%
+ \else%
+ \pal@outersafetymargin%
+ \fi%
+ \fi%
+ \fi%
+}
+\def\pal@leftbleed{
+ \ifpal@backcover%
+ \pal@outerbleed%
+ \else%
+ \ifpal@frontcover%
+ \pal@innerbleed%
+ \else%
+ \ifpal@leftpage%
+ \pal@outerbleed%
+ \else%
+ \pal@innerbleed%
+ \fi%
+ \fi%
+ \fi%
+}
+\def\pal@rightbleed{
+ \ifpal@backcover%
+ \pal@innerbleed%
+ \else%
+ \ifpal@frontcover%
+ \pal@outerbleed%
+ \else%
+ \ifpal@leftpage%
+ \pal@innerbleed%
+ \else%
+ \pal@outerbleed%
+ \fi%
+ \fi%
+ \fi%
+}
+\def\pal@leftmargin{
+ \ifpal@backcover%
+ \pal@outermargin%
+ \else%
+ \ifpal@frontcover%
+ \pal@innermargin%
+ \else%
+ \ifpal@leftpage%
+ \pal@outermargin%
+ \else%
+ \pal@innermargin%
+ \fi%
+ \fi%
+ \fi%
+}
+\newcommand\pal@addrow[1]{
+ \advance\pal@rowscount by 1
+ \pal@cells#1
+}
+\newdimen\pal@gridheightdiff
+\newdimen\pal@gridwidthdiff
+\newdimen\pal@gridstartxdim
+\newdimen\pal@gridstartydim
+\newcount\looprows
+\newcount\loopcells
+\newcommand\pal@processrows{
+ \advance\looprows 1
+ \ifnum\pal@get{if\the\looprows F}=1
+ \pal@set{\the\looprows HR}{\numexpr(\pal@gridheight-\pal@gutter*\pal@rowscount)*\pal@get{\the\looprows H}/\rowsH+\pal@gutter}
+ \else
+ \ifnum\pal@get{if\the\looprows Fix}=0
+ \pal@set{\the\looprows HR}{\numexpr(\pal@maxgridheight-\pal@gridheight)*\pal@get{\the\looprows H}/\rowsFlex+\pal@gutter}
+ \else
+ \pal@set{\the\looprows HR}{\numexpr(\pal@gridwidth-\pal@gutter*\pal@get{\the\looprows C})*\pal@get{\the\looprows H}/\pal@get{\the\looprows W}+\pal@gutter}
+ \fi
+ \fi
+ \loopcells=0
+ \loop
+ \advance\loopcells 1
+ \ifnum\pal@get{if\the\looprows-\the\loopcells F}=1
+ \pal@set{\the\looprows-\the\loopcells WR}{\numexpr(\pal@get{\the\looprows HR}-\pal@gutter)*\pal@get{\the\looprows-\the\loopcells W}/\pal@get{\the\looprows H}+\pal@gutter}
+ \else
+ \pal@set{\the\looprows-\the\loopcells WR}{\numexpr((\pal@gridwidth-\pal@gutter*\pal@get{\the\looprows C})\ifnum\pal@get{\the\looprows H}>0 -(\pal@get{\the\looprows HR}-\pal@gutter)*\pal@get{\the\looprows F}/\pal@get{\the\looprows H}\fi)*\pal@get{\the\looprows-\the\loopcells W}/(\pal@get{\the\looprows W}-\pal@get{\the\looprows F})+\pal@gutter}
+ \fi
+ \ifnum \loopcells<\pal@get{\the\looprows C}
+ \repeat
+
+ \ifnum \looprows<\pal@rowscount
+ \pal@processrows
+ \fi
+}
+\newcommand\pal@closerows{
+ \pal@topmargin=\ifdim\pal@gridtopmargin=\pal@undefdim\pal@gridmargin\else\pal@gridtopmargin\fi
+ \pal@bottommargin=\ifdim\pal@gridbottommargin=\pal@undefdim\pal@gridmargin\else\pal@gridbottommargin\fi
+ \pal@innermargin=\ifdim\pal@gridinnermargin=\pal@undefdim\pal@gridmargin\else\pal@gridinnermargin\fi
+ \pal@outermargin=\ifdim\pal@gridoutermargin=\pal@undefdim\pal@gridmargin\else\pal@gridoutermargin\fi
+
+ \height=\dimexpr\pal@pageheight - \pal@topmargin - \pal@bottommargin\relax
+ \width=\dimexpr\pal@pagewidth - \pal@innermargin - \pal@outermargin\relax
+ \ifdim\dimexpr\pal@gridoptionheight\relax=\pal@undefdim
+ \else
+ \pal@gridheightdiff=\dimexpr0.5\height - 0.5\dimexpr\pal@gridoptionheight\relax\relax
+ \pal@bottommargin=\dimexpr\pal@bottommargin+\pal@gridheightdiff\relax
+ \pal@topmargin=\dimexpr\pal@topmargin+\pal@gridheightdiff\relax
+ \fi
+ \ifdim\dimexpr\pal@gridoptionwidth\relax=\pal@undefdim
+ \else
+ \pal@gridwidthdiff=\dimexpr\pal@calculaterealgridwidth/2 - 0.5\dimexpr\pal@gridoptionwidth\relax\relax
+ \pal@innermargin=\dimexpr\pal@innermargin+\pal@gridwidthdiff\relax
+ \pal@outermargin=\dimexpr\pal@outermargin+\pal@gridwidthdiff\relax
+ \fi
+
+ \pal@gutter=\pal@gridgutter
+
+ \x=\dimexpr\pal@gridstartx{\pal@undefdim}-\pal@leftbleed\relax
+ \y=\dimexpr\pal@gridstarty{\pal@undefdim}-\pal@bottombleed\relax
+
+ \pal@gridstartxdim=\dimexpr\pal@gridstartx{\pal@gridoptionx}\relax
+ \pal@gridstartydim=\dimexpr\pal@gridstarty{\pal@gridoptiony}\relax
+
+ \pal@gridwidth=\dimexpr\pal@calculatefullgridwidth\relax
+ \ifnum\rowsH>0
+ \pal@calculategridheight
+ \else
+ \pal@gridheight=\dimexpr\pal@gutter*\pal@rowscount\relax
+ \fi
+ \pal@gridoffsetvertical=\pal@null
+ \pal@gridoffsethorizontal=\pal@null
+ \pal@gridoffsetverticaln=\pal@null
+ \pal@gridoffsethorizontaln=\pal@null
+
+ \pal@maxgridheight=\dimexpr\pal@calculatefullgridheight\relax
+ \ifdim\pal@gridheight>\pal@maxgridheight
+ \pal@gridheight=\pal@maxgridheight
+ \pal@calculategridwidth
+ \pal@gridoffsethorizontal=\dimexpr\pal@gridoptionhpos\pal@gridwidth-\pal@gridoptionhpos\pal@maxgridwidth\relax
+ \pal@gridoffsethorizontaln=\dimexpr\pal@gridwidth-\pal@maxgridwidth-\pal@gridoffsethorizontal\relax
+ \pal@gridwidth=\pal@maxgridwidth
+ \else
+ \ifpal@flexmode
+ \else
+ \ifdim\pal@gridheight<\pal@maxgridheight
+ \pal@gridoffsetvertical=\dimexpr\pal@gridoptionvpos\pal@maxgridheight-\pal@gridoptionvpos\pal@gridheight\relax
+ \pal@gridoffsetverticaln=\dimexpr\pal@maxgridheight-\pal@gridheight-\pal@gridoffsetvertical\relax
+ \fi
+ \fi
+ \fi
+
+ \looprows=0
+ \pal@processrows
+}
+\newcommand\pal@addcell[1]{
+ \advance\pal@cellscount by 1
+ \if\pal@instring{!}{#1}
+ \pal@gridtmp \pal@striplastexclamationmark{#1}\relax
+ \pal@forcecelltrue
+ \else
+ \pal@gridisflexrowtrue
+ \ifnum\numexpr0#1\relax=0
+ \pal@gridtmp 1\relax
+ \else
+ \pal@gridtmp #1\relax
+ \fi
+ \pal@forcecellfalse
+ \fi
+ \pal@set{\the\pal@rowscount-\the\pal@cellscount W}{\pal@gridtmp}
+ \ifpal@forcecell
+ \pal@set{if\the\pal@rowscount-\the\pal@cellscount F}{1}
+ \pal@advance{\the\pal@rowscount F}{\the\pal@rowscount-\the\pal@cellscount W}
+ \else
+ \pal@set{if\the\pal@rowscount-\the\pal@cellscount F}{0}
+ \fi
+ \pal@advance{\the\pal@rowscount W}{\the\pal@rowscount-\the\pal@cellscount W}
+}
+\newif\ifpal@gridtop
+\newif\ifpal@gridbottom
+\newif\ifpal@gridleft
+\newif\ifpal@gridright
+\newif\ifpal@gridfull
+\pgfkeys{
+ /grid/.is family,
+ /grid,
+ gutter/.store in=\pal@gridgutter,
+ margin/.store in=\pal@gridmargin,
+ top margin/.store in=\pal@gridtopmargin,
+ bottom margin/.store in=\pal@gridbottommargin,
+ inner margin/.store in=\pal@gridinnermargin,
+ outer margin/.store in=\pal@gridoutermargin,
+ width/.store in=\pal@gridoptionwidth,
+ height/.store in=\pal@gridoptionheight,
+ x/.store in=\pal@gridoptionx,
+ y/.store in=\pal@gridoptiony,
+ vpos/.store in=\pal@gridoptionvpos,
+ hpos/.store in=\pal@gridoptionhpos,
+}
+\def\pal@resetautogrid{
+ \global\pal@gridfullfalse
+ \def\pal@framey{0}\def\pal@framex{0}\def\pal@frameyy{1}\def\pal@framexx{1}
+ \def\pal@frameyymax{0}\def\pal@framexxmax{0}
+}
+\newcommand\setgrid[2][]{
+ \ifpal@haspages
+ \else
+ \def\pal@tmpgrid{\setgrid{#2}}
+ \fi
+ \pal@resetautogrid
+ \pgfkeys{
+ /grid,
+ gutter=\gutter,
+ margin=\margin,
+ top margin=\topmargin,
+ bottom margin=\bottommargin,
+ inner margin=\innermargin,
+ outer margin=\outermargin,
+ width=\pal@undefdim,
+ height=\pal@undefdim,
+ x=\pal@undefdim,
+ y=\pal@undefdim,
+ vpos=\pal@verticalpagealign,
+ hpos=\pal@horizontalpagealign,%
+ #1
+ }
+ \rowsH 0\relax
+ \rowsFlex 0\relax
+ \pal@flexrowscount 0\relax
+ \pal@fixrowscount 0\relax
+ \rowsF 0\relax
+ \pal@rowscount 0\relax
+ \pal@flexmodefalse
+ \def\pal@grid@input{#2}
+ \ifx\pal@grid@input\pal@emptystring
+ \pal@gobblenextrow{{1}}
+ \else
+ \pal@gobblenextrow#2
+ \fi
+}
+\newcommand\pal@gobblenextrow[1]{
+ \pal@addrow{#1}
+ \@ifnextchar\bgroup{
+ \pal@gobblenextrow
+ }{
+ \ifpal@isinitgrid
+ \else
+ \pal@closerows
+ \fi
+ }
+}
+\newcommand\pal@cells[2][1]{
+ \if\pal@instring{!}{#1}
+ \pal@gridtmpRowH \pal@striplastexclamationmark{#1}\relax
+ \pal@forcerowtrue
+ \advance\rowsF by \pal@gridtmpRowH
+ \advance\rowsH by \pal@gridtmpRowH
+ \pal@set{\the\pal@rowscount H}{\pal@gridtmpRowH}
+ \advance \pal@fixrowscount by 1
+ \else
+ \pal@forcerowfalse
+ \pal@gridtmpRowH #1\relax
+ \fi
+
+ \pal@cellscount 0\relax
+ \pal@set{\the\pal@rowscount W}{0}
+ \pal@set{\the\pal@rowscount F}{0}
+ \ifpal@forcerow\pal@set{if\the\pal@rowscount F}{1}\else\pal@set{if\the\pal@rowscount F}{0}\fi
+ \pal@gridisflexrowfalse
+
+ \pal@gobblenextcell{#2}
+}
+\newcommand\pal@gobblenextcell[1]{
+ \pal@addcell{#1}
+ \@ifnextchar\bgroup{
+ \pal@gobblenextcell
+ }{
+ \ifpal@forcerow
+ \else
+ \ifpal@gridisflexrow
+ \pal@flexmodetrue
+ \advance \pal@flexrowscount by 1
+ \advance\rowsFlex by \pal@gridtmpRowH
+ \pal@set{\the\pal@rowscount H}{\pal@gridtmpRowH}
+ \pal@set{if\the\pal@rowscount Fix}{0}
+ \else
+ \advance \pal@fixrowscount by 1
+ \advance\rowsH by \pal@gridtmpRowH
+ \pal@set{\the\pal@rowscount H}{\pal@gridtmpRowH}
+ \pal@set{if\the\pal@rowscount Fix}{1}
+ \fi
+ \fi
+ \pal@set{\the\pal@rowscount C}{\pal@cellscount}
+ }
+}
+
+% grid shortcut
+\def\pal@flexkey{f}
+\def\pal@portraitkey{p}
+\def\pal@squarekey{s}
+\def\pal@landscapekey{l}
+\def\pal@goldenkey{g}
+\def\pal@goldenuprightkey{o}
+\def\pal@widekey{w}
+\def\pal@rowbreakkey{-}
+\newcount\pal@rowcountsc
+\newcount\pal@cellcountsc
+\newcommand\pal@breakrow{
+ \edef\pal@result{\pal@result{[30]\pal@rowindex}}
+}
+\newif\ifpal@isgridvalid
+\newcommand\pal@transformgridconfig[1]{
+ \ifx\pal@rowbreakkey#1
+ \pal@breakrow
+ \def\pal@rowindex{}
+ \else
+ \ifx\pal@flexkey#1
+ \edef\pal@rowindex{\pal@rowindex{1}}
+ \else
+ \ifx\pal@portraitkey#1
+ \edef\pal@rowindex{\pal@rowindex{20!}}
+ \else
+ \ifx\pal@squarekey#1
+ \edef\pal@rowindex{\pal@rowindex{30!}}
+ \else
+ \ifx\pal@landscapekey#1
+ \edef\pal@rowindex{\pal@rowindex{45!}}
+ \else
+ \ifx\pal@widekey#1
+ \edef\pal@rowindex{\pal@rowindex{60!}}
+ \else
+ \ifx\pal@goldenkey#1
+ \edef\pal@rowindex{\pal@rowindex{50!}}
+ \else
+ \ifx\pal@goldenuprightkey#1
+ \edef\pal@rowindex{\pal@rowindex{18!}}
+ \else
+ \pal@isgridvalidfalse
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\newcommand\pal@setplaceholder[1]{
+ \ifx\pal@rowbreakkey#1
+ \advance\pal@rowcountsc by 1
+ \pal@cellcountsc 0\relax
+ \else
+ \placeholder{{\pal@rowcountsc} {\pal@cellcountsc} {\numexpr\pal@rowcountsc+1\relax} {\numexpr\pal@cellcountsc+1\relax}}
+ \advance\pal@cellcountsc by 1
+ \fi
+}
+\newcommand\pal@gridsc[1]{
+ \edef\pal@gridsc@input{#1}
+ \def\pal@rowindex{}
+ \def\pal@result{}
+ \pal@isgridvalidtrue
+ \@tfor\next:=#1\do{\pal@transformgridconfig{\next}}%
+ \ifpal@isgridvalid
+ \pal@breakrow
+ \edef\pal@result{{\pal@result}}
+ \expandafter\setgrid\pal@result
+ \pal@rowcountsc 0\relax
+ \pal@cellcountsc 0\relax
+ \@tfor\next:=#1\do{\pal@setplaceholder{\next}}%
+ \else
+ \pal@errmsg@undefined{template}{\pal@gridsc@input}
+ \fi
+}
+
+% grid dimensions
+\newif\ifpal@flexgrid
+\newcommand\pal@calculategridheight{
+ \pal@flexgridtrue
+ \pal@gridheight=\pal@null
+ \looprows=0
+ \loop
+ \advance\looprows 1
+ \ifnum\pal@get{if\the\looprows F}=1
+ \pal@gridheight=\dimexpr\pal@gridheight+\pal@gutter\relax%
+ \else
+ \ifnum\pal@get{if\the\looprows Fix}=0
+ \pal@gridheight=\dimexpr\pal@gridheight+\pal@gutter\relax%
+ \else
+ \pal@flexgridfalse
+ \pal@gridheight=\dimexpr\pal@gridheight+(\pal@gridwidth-\pal@gutter*\pal@get{\the\looprows C})*\pal@get{\the\looprows H}/(\pal@get{\the\looprows W}*(\rowsH-\rowsF))*\rowsH+\pal@gutter\relax
+ \fi
+ \fi
+ \ifnum \looprows<\pal@rowscount
+ \repeat
+ \ifpal@flexgrid
+ \pal@gridheight=\dimexpr\pal@calculatefullgridheight\relax
+ \fi
+}
+\newcommand\pal@calculatefullgridheight{
+ \pal@pageheight - \pal@topmargin - \pal@bottommargin + \pal@gutter
+}
+\newcommand\pal@calculategridwidth{
+ \def\pal@calculategridwidthcalc{(\pal@gridheight*(\rowsH-\rowsF)/\rowsH-\pal@gutter*(\rowsH-\rowsF)*\pal@rowscount/\rowsH}
+ \looprows=0
+ \loop
+ \advance\looprows 1
+ \ifnum\pal@get{if\the\looprows F}=1
+ \else
+ \ifnum\pal@get{if\the\looprows Fix}=0
+ \else
+ \edef\pal@calculategridwidthcalc{\pal@calculategridwidthcalc+\pal@gutter*\pal@get{\the\looprows C}*\pal@get{\the\looprows H}/\pal@get{\the\looprows W}}
+ \fi
+ \fi
+ \ifnum \looprows<\pal@rowscount
+ \repeat
+
+ \edef\pal@calculategridwidthcalc{\pal@calculategridwidthcalc) * 10000 / (\pal@null}
+ \looprows=0
+ \loop
+ \advance\looprows 1
+ \ifnum\pal@get{if\the\looprows F}=1
+ \else
+ \ifnum\pal@get{if\the\looprows Fix}=0
+ \else
+ \edef\pal@calculategridwidthcalc{\pal@calculategridwidthcalc+10000*\pal@get{\the\looprows H}/\pal@get{\the\looprows W}}
+ \fi
+ \fi
+ \ifnum \looprows<\pal@rowscount
+ \repeat
+
+ \edef\pal@calculategridwidthcalc{\pal@calculategridwidthcalc)}
+ \pal@maxgridwidth=\dimexpr\pal@calculategridwidthcalc\relax
+}
+\newcommand\pal@calculatefullgridwidth{
+ \ifpal@isdoublepage
+ \pal@pagewidth * 2 - \pal@outermargin * 2
+ \ifpal@frontcover
+ \else
+ \ifpal@fanfold
+ \else
+ - \bindingoffset * 2
+ \fi
+ \fi
+ \else
+ \pal@pagewidth - \pal@innermargin - \pal@outermargin
+ \fi
+ + \pal@gutter
+}
+\newcommand\pal@calculaterealgridwidth{
+ \ifpal@isdoublepage
+ (\pal@pagewidth * 2 - \pal@outermargin * 2)
+ \else
+ (\pal@pagewidth - \pal@innermargin - \pal@outermargin)
+ \fi
+}
+\newcommand\pal@gridstartx[1]{
+ \ifdim\dimexpr#1\relax=\pal@undefdim
+ \ifpal@isdoublepage
+ (\pal@outermargin + \pal@leftbleed - \pal@gutter / 2
+ \ifpal@frontcover
+ \else
+ \ifpal@fanfold
+ \else
+ \ifpal@rightpage
+ + \bindingoffset * 2
+ \fi
+ \fi
+ \fi
+ )
+ \else
+ (\pal@leftmargin + \pal@leftbleed - \pal@gutter / 2)
+ \fi
+ \else%
+ \ifpal@isdoublepage
+ (#1 + \pal@leftbleed - \pal@gutter / 2
+ \ifpal@frontcover
+ \else
+ \ifpal@fanfold
+ \else
+ \ifpal@rightpage
+ + \bindingoffset * 2
+ \fi
+ \fi
+ \fi
+ )
+ \else
+ (#1 + \pal@leftbleed - \pal@gutter / 2)
+ \fi
+ \fi%
+}
+\newcommand\pal@gridstarty[1]{
+ \ifdim\dimexpr#1\relax=\pal@undefdim
+ (\pal@bottommargin + \pal@bottombleed - \pal@gutter / 2)%
+ \else%
+ (#1 + \pal@bottombleed - \pal@gutter / 2)
+ \fi%
+}
+\newcommand\pal@setdimensions{
+ \global\pal@gridfullfalse
+ \global\def\pal@framey{0}\global\def\pal@framex{0}\global\def\pal@frameyy{1}\global\def\pal@framexx{1}
+ \global\def\pal@frameyymax{0}\global\def\pal@framexxmax{0}
+ \paperheight=\dimexpr(\pal@pageheight + \pal@topbleed + \pal@bottombleed)\relax
+ \pal@gridoffsetx=\pal@null
+
+ \ifpal@isdoublepage
+ % doublepage
+ \ifpal@fanfold
+ \paperwidth=\dimexpr((\pal@pagewidth + \pal@outerbleed) * 2)\relax
+ \else
+ \paperwidth=\dimexpr(\pal@pagewidth + \pal@outerbleed + \pal@innerbleed)\relax
+ \ifpal@rightpage
+ \pal@gridoffsetx=\dimexpr(-\pal@pagewidth)\relax
+ \fi
+ \fi
+ \else
+ \ifpal@frontcover
+ % frontcover
+ \paperwidth=\dimexpr((\pal@pagewidth + \pal@outerbleed) * 2 + \spinewidth)\relax
+ \else
+ % page
+ \ifpal@fanfold
+ \paperwidth=\dimexpr((\pal@pagewidth + \pal@outerbleed) * 2)\relax
+ \ifpal@rightpage
+ \pal@gridoffsetx=\dimexpr(\pal@pagewidth + \pal@outerbleed - \pal@innerbleed)\relax
+ \fi
+ \else
+ \paperwidth=\dimexpr(\pal@pagewidth + \pal@outerbleed + \pal@innerbleed)\relax
+ \fi
+ \fi
+ \fi
+}
+
+% grid coordinates
+\newcommand\pal@coordxrow[3]{\ifdim\dimexpr#2\dimexpr1pt\relax\relax<\dimexpr(#3\dimexpr1pt\relax-#1sp)\relax\the\numexpr#3\relax\else\pal@coordxrow{#1}{#2}{\numexpr#3+1\relax}\fi}
+\newcommand\pal@coordxcell[2]{\ifnum\numexpr(10000*#1)\relax<\numexpr(#2*10000+1)\relax\the\numexpr#2\relax\else\pal@coordxcell{#1}{\numexpr#2+1\relax}\fi}
+\newcommand\pal@coordx[3]{
+ \pal@get{%
+ \pal@coordxrow{#1}{#2}{1}-%
+ \pal@coordxcell{#3}{1}%
+ WR%
+ }
+}
+\newcommand\posxcell[3]{
+ \ifnum#3>0
+ + \pal@coordx{#1}{#2}{#3}sp%
+ \fi%
+ \ifnum#3>1
+ \posxcell{#1}{#2}{\numexpr#3-1\relax}%
+ \fi%
+}
+\newcommand\posxrow[4]{
+ \ifdim#4\dimexpr1pt\relax<\dimexpr#3\dimexpr1pt\relax+1sp\relax
+ \pal@gridstartxdim + #4\dimexpr\pal@coordx{#1}{#2}{#3}sp\relax - \pal@coordx{#1}{#2}{#3}sp * \numexpr#3 - 1\relax\posxcell{#1}{#2}{\numexpr#3-1\relax}%
+ \else%
+ \posxrow{#1}{#2}{\numexpr#3+1\relax}{#4}%
+ \fi%
+}
+\newcommand\posx[4]{
+ \dimexpr(%
+ \posxrow{#1}{#2}{1}{#4}
+ + #3\pal@gutter / 2 + \pal@gridoffsetx + \pal@gridoffsethorizontal%
+ )\relax%
+}
+\newcommand\posycell[1]{
+ \ifnum#1>0
+ - \pal@get{#1HR} sp
+ \fi%
+ \ifnum#1>1
+ \posycell{\the\numexpr#1-1\relax}%
+ \fi%
+}
+\newcommand\posyrow[2]{
+ \ifdim#1\dimexpr1pt\relax<\dimexpr#2\dimexpr1pt\relax+1sp\relax
+ \pal@gridstartydim + \pal@maxgridheight - #1\dimexpr\pal@get{#2HR} sp\relax + \pal@get{#2HR} sp * \numexpr#2 - 1\relax\posycell{\the\numexpr#2-1\relax}%
+ \else
+ \posyrow{#1}{\the\numexpr#2+1\relax}%
+ \fi
+}
+\newcommand\posy[2]{
+ \dimexpr(%
+ \posyrow{#2}{1}
+ - #1\pal@gutter / 2 - \pal@gridoffsetvertical%
+ )\relax%
+}
+\newcommand\pal@gridhalign[1]{
+ \def\pal@horizontalpagealign{#1}
+}
+\newcommand\pal@gridvalign[1]{
+ \def\pal@verticalpagealign{#1}
+}
+\pal@gridhalign{0.5}
+\pal@gridvalign{0.5}
+\pal@isinitgridtrue
+\setgrid{{{1}}}
+
+% graphic
+\newif\ifpal@isvisible
+\newif\ifpal@calculatecrop
+\newdimen\pal@originalgraphicwidth\newdimen\pal@originalgraphicheight
+\newdimen\pal@cropx\newdimen\pal@cropy
+\newdimen\pal@cropleft\newdimen\pal@cropright
+\newdimen\pal@cropbottom\newdimen\pal@croptop
+\newdimen\pal@cropstart\newdimen\pal@cropend
+\newdimen\pal@snapleft\newdimen\pal@snapright
+\newdimen\pal@snapbottom\newdimen\pal@snaptop
+\newdimen\pal@viewportwidth\newdimen\pal@viewportheight
+\newdimen\pal@frameborderwidth
+\newdimen\pal@frameborderradius
+\newdimen\pal@frameshadowradius
+\newdimen\pal@snapcroptmp
+\newdimen\pal@overprint
+\pal@overprint=0pt
+\def\pal@cropleftside{
+ \ifdim\pal@x>\pal@cropstart
+ \ifdim\pal@x<\pal@cropend
+ \pal@snapleft=\dimexpr(\pal@x - \pal@cropstart)\relax
+ \pal@x=\dimexpr(\pal@cropstart)\relax
+ \fi
+ \fi
+}
+\def\pal@croprightside{
+ \ifdim\pal@xx>\pal@cropstart
+ \ifdim\pal@xx<\pal@cropend
+ \pal@snapright=\dimexpr(\pal@cropend - \pal@xx)\relax
+ \pal@xx=\dimexpr(\pal@cropend)\relax
+ \fi
+ \fi
+}
+\def\pal@snapsafezonevertical{
+ \pal@snapbottom=\pal@null
+ \pal@snaptop=\pal@null
+ \pal@cropstart=-\pal@overprint
+ \pal@cropend=\dimexpr(\pal@null + \pal@bottombleed + 1pt)\relax
+ \ifdim\pal@y>\pal@cropstart
+ \ifdim\pal@y<\pal@cropend
+ \pal@snapbottom=\dimexpr(\pal@y - \pal@cropstart)\relax
+ \pal@y=\dimexpr(\pal@cropstart)\relax
+ \fi
+ \fi
+ \pal@cropstart=\dimexpr(\pal@pageheight + \pal@bottombleed - 1pt)\relax
+ \pal@cropend=\dimexpr(\pal@pageheight + \pal@bottombleed + \pal@topbleed + \pal@overprint)\relax
+ \ifdim\pal@yy>\pal@cropstart
+ \ifdim\pal@yy<\pal@cropend
+ \pal@snaptop=\dimexpr(\pal@cropend - \pal@yy)\relax
+ \pal@yy=\dimexpr(\pal@cropend)\relax
+ \fi
+ \fi
+}
+\def\pal@snapsafezonehorizontal{
+ \pal@snapleft=\pal@null
+ \pal@snapright=\pal@null
+ \ifpal@isdoublepage
+ % doublepage
+ \ifpal@fanfold
+ \pal@cropstart=-\pal@overprint
+ \pal@cropend=\dimexpr(\pal@null + \pal@leftbleed + 1pt)\relax
+ \pal@cropleftside
+ \pal@cropstart=\dimexpr(\pal@pagewidth * 2 + \pal@outerbleed - 1pt)\relax
+ \pal@cropend=\dimexpr(\pal@pagewidth * 2 + \pal@outerbleed * 2 + \pal@overprint)\relax
+ \pal@croprightside
+ \else
+ \pal@cropstart=-\pal@overprint
+ \pal@cropend=\dimexpr(\pal@null + \pal@leftbleed + 1pt)\relax
+ \pal@cropleftside
+ \pal@cropstart=\dimexpr(\pal@pagewidth + \pal@outerbleed + \pal@innerbleed - \pal@rightbleed - 1pt)\relax
+ \pal@cropend=\dimexpr(\pal@pagewidth + \pal@outerbleed + \pal@innerbleed + \pal@overprint)\relax
+ \pal@croprightside
+ \ifpal@leftpage
+ \pal@cropstart=\dimexpr(\pal@pagewidth * 2 + \pal@outerbleed - \bindingoffset * 2 - 1pt)\relax
+ \pal@cropend=\dimexpr(\pal@pagewidth * 2 + \pal@outerbleed + \pal@outerbleed - \bindingoffset * 2 + \pal@overprint)\relax
+ \pal@croprightside
+ \else
+ \pal@cropstart=\dimexpr(\pal@innerbleed -\pal@pagewidth - \pal@outerbleed + \bindingoffset * 2 - \pal@overprint)\relax
+ \pal@cropend=\dimexpr(-\pal@pagewidth + \pal@innerbleed + \bindingoffset * 2 + 1pt)\relax
+ \pal@cropleftside
+ \fi
+ \fi
+ \else
+ % frontcover
+ \ifpal@frontcover
+ \ifpal@cover
+ \ifpal@backcover
+ \pal@cropstart=-\pal@overprint
+ \pal@cropend=\dimexpr(\pal@null + \pal@leftbleed + 1pt)\relax
+ \else
+ \pal@cropstart=\dimexpr(\pal@pagewidth + \pal@outerbleed)\relax
+ \pal@cropend=\dimexpr(\pal@pagewidth + \pal@outerbleed + \spinewidth + 1pt)\relax
+ \fi
+ \pal@cropleftside
+ \ifpal@backcover
+ \pal@cropstart=\dimexpr(\pal@pagewidth + \pal@outerbleed - 1pt)\relax
+ \pal@cropend=\dimexpr(\pal@pagewidth + \pal@outerbleed)\relax
+ \else
+ \pal@cropstart=\dimexpr(\pal@pagewidth * 2 + \spinewidth + \pal@outerbleed - 1pt)\relax
+ \pal@cropend=\dimexpr(\pal@pagewidth * 2 + \pal@outerbleed * 2 + \spinewidth + \pal@overprint)\relax
+ \fi
+ \pal@croprightside
+ \else
+ \pal@cropstart=-\pal@overprint
+ \pal@cropend=\dimexpr(\pal@null + \pal@leftbleed + 1pt)\relax
+ \pal@cropleftside
+ \pal@cropstart=\dimexpr(\pal@pagewidth + \pal@outerbleed + \pal@innerbleed - \pal@rightbleed - 1pt)\relax
+ \pal@cropend=\dimexpr(\pal@pagewidth + \pal@outerbleed + \pal@innerbleed + \pal@overprint)\relax
+ \pal@croprightside
+ \fi
+ \else
+ % page
+ \ifpal@fanfold
+ \pal@cropstart=-\pal@overprint
+ \pal@cropend=\dimexpr(\pal@null + \pal@leftbleed + 1pt)\relax
+ \pal@cropleftside
+ \pal@cropstart=\dimexpr(\pal@pagewidth * 2 + \pal@outerbleed - 1pt)\relax
+ \pal@cropend=\dimexpr(\pal@pagewidth * 2 + \pal@outerbleed * 2 + \pal@overprint)\relax
+ \pal@croprightside
+ \else
+ \pal@cropstart=-\pal@overprint
+ \pal@cropend=\dimexpr(\pal@null + \pal@leftbleed + 1pt)\relax
+ \pal@cropleftside
+ \pal@cropstart=\dimexpr(\pal@pagewidth + \pal@outerbleed + \pal@innerbleed - \pal@rightbleed - 1pt)\relax
+ \pal@cropend=\dimexpr(\pal@pagewidth + \pal@outerbleed + \pal@innerbleed + \pal@overprint)\relax
+ \pal@croprightside
+ \fi
+ \fi
+ \fi
+}
+\pgfkeys{
+ /graphic/.is family,
+ /graphic,
+ file/.store in=\pal@graphicoptionfile,
+ scale/.store in=\pal@graphicoptionscale,
+ vpos/.store in=\pal@graphicoptionvpos,
+ hpos/.store in=\pal@graphicoptionhpos,
+ unsharp/.store in=\pal@graphicoptionunsharp,
+ border/.forward to=/defaultborder/name,
+ border radius/.forward to=/defaultborder/radius,
+ border width/.forward to=/defaultborder/width,
+ border color/.forward to=/defaultborder/color,
+ border opacity/.forward to=/defaultborder/opacity,
+ shadow/.forward to=/defaultshadow/name,
+ shadow size/.forward to=/defaultshadow/size,
+ shadow color/.forward to=/defaultshadow/color,
+ shadow opacity/.forward to=/defaultshadow/opacity,
+ shadow xshift/.forward to=/defaultshadow/xshift,
+ shadow yshift/.forward to=/defaultshadow/yshift,
+}
+\def\pal@checkvisibility{
+ \pal@isvisibletrue
+
+ \ifpal@frontcover
+ \else
+ \ifpal@fanfold
+ \else
+ \ifpal@isdoublepage
+ \ifpal@leftpage
+ \pal@cropstart=\dimexpr(\pal@pagewidth + \pal@outerbleed - \bindingoffset - 1pt)\relax
+ \pal@cropend=\dimexpr(\pal@pagewidth + \pal@outerbleed + \pal@innerbleed)\relax
+ \ifdim\pal@x>\pal@cropstart
+ \pal@isvisiblefalse
+ \fi
+ \else
+ \pal@cropstart=\dimexpr(\pal@null)\relax
+ \pal@cropend=\dimexpr(\pal@null + \pal@leftbleed + \bindingoffset + 1pt)\relax
+ \ifdim\pal@xx<\pal@cropend
+ \pal@isvisiblefalse
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\def\pal@snapoptimizedgraphic{
+ \ifdim\pal@snapleft>\pal@null
+ \width=\dimexpr\width+\pal@snapleft\relax
+ \fi
+ \ifdim\pal@snapright>\pal@null
+ \width=\dimexpr\width+\pal@snapright\relax
+ \fi
+ \ifdim\pal@snaptop>\pal@null
+ \height=\dimexpr\height+\pal@snaptop\relax
+ \fi
+ \ifdim\pal@snapbottom>\pal@null
+ \height=\dimexpr\height+\pal@snapbottom\relax
+ \fi
+}
+\def\pal@snapgraphic{
+ \pgfmathqparse{(\pal@originalgraphicheight-\pal@croptop-\pal@cropbottom)/\height}
+ \edef\pal@scale{\pgfmathresult}
+ \pgfmathqparse{\height/(\pal@originalgraphicheight-\pal@croptop-\pal@cropbottom)}
+ \edef\pal@scalerez{\pgfmathresult}
+
+ % snap
+ \ifdim\pal@snapleft>\pal@null
+ \ifdim\pal@cropleft>\pal@null
+ \ifdim\pal@scale\pal@snapleft>\pal@cropleft
+ \pal@snapbleedleft=\pal@cropleft
+ \pal@snapleft=\dimexpr\pal@snapleft-\pal@scalerez\pal@cropleft\relax
+ \width=\dimexpr\width+\pal@scalerez\pal@cropleft\relax
+ \pal@cropleft=\pal@null
+ \else
+ \pal@snapbleedleft=\dimexpr\pal@scale\pal@snapleft\relax
+ \pal@cropleft=\dimexpr\pal@cropleft-\pal@scale\pal@snapleft\relax
+ \width=\dimexpr\width+\pal@snapleft\relax
+ \pal@snapleft=\pal@null
+ \fi
+ \fi
+ \fi
+ \ifdim\pal@snapright>\pal@null
+ \ifdim\pal@cropright>\pal@null
+ \ifdim\pal@scale\pal@snapright>\pal@cropright
+ \pal@snapbleedright=\pal@cropright
+ \pal@snapright=\dimexpr\pal@snapright-\pal@scalerez\pal@cropright\relax
+ \width=\dimexpr\width+\pal@scalerez\pal@cropright\relax
+ \pal@cropright=\pal@null
+ \else
+ \pal@snapbleedright=\dimexpr\pal@scale\pal@snapright\relax
+ \pal@cropright=\dimexpr\pal@cropright-\pal@scale\pal@snapright\relax
+ \width=\dimexpr\width+\pal@snapright\relax
+ \pal@snapright=\pal@null
+ \fi
+ \fi
+ \fi
+ \ifdim\pal@snaptop>\pal@null
+ \ifdim\pal@croptop>\pal@null
+ \ifdim\pal@scale\pal@snaptop>\pal@croptop
+ \pal@snapbleedtop=\pal@croptop
+ \pal@snaptop=\dimexpr\pal@snaptop-\pal@scalerez\pal@croptop\relax
+ \height=\dimexpr\height+\pal@scalerez\pal@croptop\relax
+ \pal@croptop=\pal@null
+ \else
+ \pal@snapbleedtop=\dimexpr\pal@scale\pal@snaptop\relax
+ \pal@croptop=\dimexpr\pal@croptop-\pal@scale\pal@snaptop\relax
+ \height=\dimexpr\height+\pal@snaptop\relax
+ \pal@snaptop=\pal@null
+ \fi
+ \fi
+ \fi
+ \ifdim\pal@snapbottom>\pal@null
+ \ifdim\pal@cropbottom>\pal@null
+ \ifdim\pal@scale\pal@snapbottom>\pal@cropbottom
+ \pal@snapbleedbottom=\pal@cropbottom
+ \pal@snapbottom=\dimexpr\pal@snapbottom-\pal@scalerez\pal@cropbottom\relax
+ \height=\dimexpr\height+\pal@scalerez\pal@cropbottom\relax
+ \pal@cropbottom=\pal@null
+ \else
+ \pal@snapbleedbottom=\dimexpr\pal@scale\pal@snapbottom\relax
+ \pal@cropbottom=\dimexpr\pal@cropbottom-\pal@scale\pal@snapbottom\relax
+ \height=\dimexpr\height+\pal@snapbottom\relax
+ \pal@snapbottom=\pal@null
+ \fi
+ \fi
+ \fi
+
+ % move
+ \ifdim\pal@snapbottom=\pal@null
+ \ifdim\pal@snaptop=\pal@null
+ \ifdim\pal@snapright>\pal@null
+ \ifdim\pal@cropleft>\pal@null
+ \ifdim\pal@scale\pal@snapright>\pal@cropleft
+ \pal@snapright=\dimexpr\pal@snapright-\pal@scalerez\pal@cropleft\relax
+ \width=\dimexpr\width+\pal@scalerez\pal@cropleft\relax
+ \pal@cropleft=\pal@null
+ \else
+ \pal@cropleft=\dimexpr\pal@cropleft-\pal@scale\pal@snapright\relax
+ \width=\dimexpr\width+\pal@snapright\relax
+ \pal@snapright=\pal@null
+ \fi
+ \fi
+ \fi
+ \ifdim\pal@snapleft>\pal@null
+ \ifdim\pal@cropright>\pal@null
+ \ifdim\pal@scale\pal@snapleft>\pal@cropright
+ \pal@snapleft=\dimexpr\pal@snapleft-\pal@scalerez\pal@cropright\relax
+ \width=\dimexpr\width+\pal@scalerez\pal@cropright\relax
+ \pal@cropright=\pal@null
+ \else
+ \pal@cropright=\dimexpr\pal@cropright-\pal@scale\pal@snapleft\relax
+ \width=\dimexpr\width+\pal@snapleft\relax
+ \pal@snapleft=\pal@null
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifdim\pal@snapleft=\pal@null
+ \ifdim\pal@snapright=\pal@null
+ \ifdim\pal@snaptop>\pal@null
+ \ifdim\pal@cropbottom>\pal@null
+ \ifdim\pal@scale\pal@snaptop>\pal@cropbottom
+ \pal@snaptop=\dimexpr\pal@snaptop-\pal@scalerez\pal@cropbottom\relax
+ \height=\dimexpr\height+\pal@scalerez\pal@cropbottom\relax
+ \pal@cropbottom=\pal@null
+ \else
+ \pal@cropbottom=\dimexpr\pal@cropbottom-\pal@scale\pal@snaptop\relax
+ \height=\dimexpr\height+\pal@snaptop\relax
+ \pal@snaptop=\pal@null
+ \fi
+ \fi
+ \fi
+ \ifdim\pal@snapbottom>\pal@null
+ \ifdim\pal@croptop>\pal@null
+ \ifdim\pal@scale\pal@snapbottom>\pal@croptop
+ \pal@snapbottom=\dimexpr\pal@snapbottom-\pal@scalerez\pal@croptop\relax
+ \height=\dimexpr\height+\pal@scalerez\pal@croptop\relax
+ \pal@croptop=\pal@null
+ \else
+ \pal@croptop=\dimexpr\pal@croptop-\pal@scale\pal@snapbottom\relax
+ \height=\dimexpr\height+\pal@snapbottom\relax
+ \pal@snapbottom=\pal@null
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\newdimen\pal@snapcropoffset
+\newdimen\pal@snapbleedleft\newdimen\pal@snapbleedright
+\newdimen\pal@snapbleedtop\newdimen\pal@snapbleedbottom
+\def\pal@hscalegraphic{
+ \pgfmathqparse{\width/(\width+\pal@snapleft+\pal@snapright)}
+ \edef\pal@snapscale{\pgfmathresult}
+ \pal@snapcroptmp=\dimexpr\pal@originalgraphicheight-\pal@cropbottom-\pal@croptop-\pal@snapscale\pal@originalgraphicheight+\pal@snapscale\pal@cropbottom+\pal@snapscale\pal@croptop\relax
+ \pal@snapcropoffset=\dimexpr\pal@snapbleedbottom-\pal@snapscale\pal@snapbleedbottom-\pal@snapbleedtop+\pal@snapscale\pal@snapbleedtop\relax
+ \pal@cropbottom=\dimexpr\pal@cropbottom+0.5\pal@snapcroptmp+0.5\pal@snapcropoffset\relax
+ \pal@croptop=\dimexpr\pal@croptop+0.5\pal@snapcroptmp-0.5\pal@snapcropoffset\relax
+
+ \width=\dimexpr\width+\pal@snapleft+\pal@snapright\relax
+ \pal@snapright=\pal@null
+ \pal@snapleft=\pal@null
+}
+\def\pal@vscalegraphic{
+ \pgfmathqparse{\height/(\height+\pal@snaptop+\pal@snapbottom)}
+ \edef\pal@snapscale{\pgfmathresult}
+ \pal@snapcroptmp=\dimexpr\pal@originalgraphicwidth-\pal@cropleft-\pal@cropright-\pal@snapscale\pal@originalgraphicwidth+\pal@snapscale\pal@cropleft+\pal@snapscale\pal@cropright\relax
+ \pal@snapcropoffset=\dimexpr\pal@snapbleedleft-\pal@snapscale\pal@snapbleedleft-\pal@snapbleedright+\pal@snapscale\pal@snapbleedright\relax
+ \pal@cropleft=\dimexpr\pal@cropleft+0.5\pal@snapcroptmp+0.5\pal@snapcropoffset\relax
+ \pal@cropright=\dimexpr\pal@cropright+0.5\pal@snapcroptmp-0.5\pal@snapcropoffset\relax
+
+ \height=\dimexpr\height+\pal@snaptop+\pal@snapbottom\relax
+ \pal@snaptop=\pal@null
+ \pal@snapbottom=\pal@null
+}
+\def\pal@getbase#1{\edef\Gin@base{\filename@area\filename@base}\edef\Gin@ext{#1}}
+\let\pal@getbaseorginal\Gin@getbase
+\def\pal@disablegraphicsfilecheck{
+ \let\Gin@getbase\pal@getbase
+}
+\def\pal@enablegraphicsfilecheck{
+ \let\Gin@getbase\pal@getbaseorginal
+}
+\let\pal@setfileorginal\Gin@setfile
+\def\pal@setfile#1#2#3{
+ \global\edef\pal@currfilebase{\Gin@base}
+ \global\edef\pal@currfileext{\Gin@ext}
+ \global\@onelevel@sanitize\pal@currfileext
+}
+\edef\pal@extjpeg{.jpeg}\@onelevel@sanitize\pal@extjpeg
+\edef\pal@extJPEG{.JPEG}\@onelevel@sanitize\pal@extJPEG
+\edef\pal@extjpg{.jpg}\@onelevel@sanitize\pal@extjpg
+\edef\pal@extJPG{.JPG}\@onelevel@sanitize\pal@extJPG
+\edef\pal@extpng{.png}\@onelevel@sanitize\pal@extpng
+\edef\pal@extPNG{.PNG}\@onelevel@sanitize\pal@extPNG
+\def\isoptimizable#1#2{
+ \ifx#1\pal@extjpg
+ \def\pal@optimizedext{.jpg}#2
+ \else
+ \ifx#1\pal@extJPG
+ \def\pal@optimizedext{.jpg}#2
+ \else
+ \ifx#1\pal@extjpeg
+ \def\pal@optimizedext{.jpg}#2
+ \else
+ \ifx#1\pal@extJPEG
+ \def\pal@optimizedext{.jpg}#2
+ \else
+ \ifx#1\pal@extpng
+ \def\pal@optimizedext{.png}#2
+ \else
+ \ifx#1\pal@extPNG
+ \def\pal@optimizedext{.png}#2
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\def\newgraphic#1#2{
+ \expandafter\newcommand\csname pal@graphic@#1\endcsname[2][0]{%
+ \ifnum##1=0
+ \pgfkeys{pagegraphic,file={#1},scale=1,vpos=0.5,hpos=0.5,unsharp=\pal@unsharp,#2,##2}
+ \else
+ \ifnum##1=1
+ \pgfkeys{backcoverpagegraphic,file={#1},scale=1,vpos=0.5,hpos=0.5,unsharp=\pal@unsharp,#2}
+ \else
+ \pgfkeys{graphic,file={#1},scale=1,vpos=0.5,hpos=0.5,unsharp=\pal@unsharp,#2,##2}
+ \fi
+ \fi
+ }%
+}
+\newcommand\pal@putgraphic[6][]{
+ \pal@x=\posx{1}{#2}{1}{#3}
+ \pal@yy=\posy{1}{#2}
+ \pal@xx=\posx{-1}{#4}{-1}{#5}
+ \pal@y=\posy{-1}{#4}
+
+ \pal@checkvisibility
+
+ \ifpal@isvisible
+ \pal@cropleft=\pal@null
+ \pal@cropbottom=\pal@null
+ \pal@cropright=\pal@null
+ \pal@croptop=\pal@null
+
+ \width=\dimexpr(\pal@xx - \pal@x)\relax
+ \height=\dimexpr(\pal@yy - \pal@y)\relax
+
+ % safezone horizontal
+ \pal@snapsafezonehorizontal
+
+ % safezone vertical
+ \pal@snapsafezonevertical
+
+ \pal@snapbleedleft=\pal@null
+ \pal@snapbleedright=\pal@null
+ \pal@snapbleedtop=\pal@null
+ \pal@snapbleedbottom=\pal@null
+
+ \begingroup
+ \xdef\pal@filename{#6-\pal@density-\pal@graphicoptionscale-\pal@graphicoptionhpos-\pal@graphicoptionvpos-\the\numexpr\pal@snaptop\relax-\the\numexpr\pal@snapright\relax-\the\numexpr\pal@snapbottom\relax-\the\numexpr\pal@snapleft\relax-\the\numexpr\width\relax-\the\numexpr\height\relax-\pal@downsamplethreshold-\pal@graphicoptionunsharp-\pal@quality}
+ \ifpal@optimize
+ \IfFileExists{./cache/\pal@filename/g.jpg}{
+ \def\pal@nextincludegraphic{\includegraphics[width=\width]{cache/\pal@filename/g.jpg}}
+ }{
+ \IfFileExists{./cache/\pal@filename/g.png}{
+ \def\pal@nextincludegraphic{\includegraphics[width=\width]{cache/\pal@filename/g.png}}
+ }{
+ \pal@calculatecroptrue
+ }
+ }
+
+ \ifpal@preflight
+ \pal@calculatecroptrue
+ \fi
+ \else
+ \pal@calculatecroptrue
+ \fi
+
+ \ifpal@calculatecrop
+ \global\edef\pal@currfilebase{}
+ \global\edef\pal@currfileext{}
+ \let\Gin@setfile\pal@setfile
+ \Ginclude@graphics#6
+ \let\Gin@setfile\pal@setfileorginal
+ \ifx\pal@currfileext\pal@emptystring
+ \pal@calculatecropfalse
+ \def\pal@nextincludegraphic{}
+ \fi
+ \fi
+
+ \pal@disablegraphicsfilecheck
+ \ifpal@calculatecrop
+ % graphic crop
+ \settowidth{\pal@originalgraphicwidth}{\includegraphics{\pal@currfilebase\pal@currfileext}}
+ \settoheight{\pal@originalgraphicheight}{\includegraphics{\pal@currfilebase\pal@currfileext}}
+ \pgfmathqparse{1pt-\pal@graphicoptionvpos pt}
+ \edef\pal@graphicoptionvpos{\pgfmathresult}
+ \pgfmathqparse{\pal@originalgraphicwidth/\pal@originalgraphicheight}
+ \edef\pal@graphicratio{\pgfmathresult}
+ \pgfmathqparse{\width/\height}
+ \edef\pal@vpratio{\pgfmathresult}
+ \pgfmathqparse{\pal@graphicratio pt>\pal@vpratio pt}
+ \ifnum\pgfmathresult=1
+ \pal@cropx=\dimexpr(\numexpr(\pal@originalgraphicwidth - \width * \pal@originalgraphicheight / \height)\relax sp)\relax
+ \pal@cropy=\pal@null
+ \else
+ \pal@cropy=\dimexpr(\numexpr(\pal@originalgraphicheight - \height * \pal@originalgraphicwidth / \width)\relax sp)\relax
+ \pal@cropx=\pal@null
+ \fi
+ \pal@viewportwidth=\dimexpr\pal@originalgraphicwidth-\pal@cropx\relax
+ \pal@viewportheight=\dimexpr\pal@originalgraphicheight-\pal@cropy\relax
+ \pgfmathqparse{1pt/\pal@graphicoptionscale pt}
+ \edef\pal@reciprocalscale{\pgfmathresult}
+ \pal@cropx=\dimexpr\pal@cropx + \pal@viewportwidth - \pal@reciprocalscale\pal@viewportwidth\relax
+ \pal@cropy=\dimexpr\pal@cropy + \pal@viewportheight - \pal@reciprocalscale\pal@viewportheight\relax
+ \ifdim\pal@cropx>\pal@null
+ \pal@cropleft=\dimexpr(\pal@graphicoptionhpos\pal@cropx)\relax
+ \ifdim\pal@cropleft<\pal@null
+ \pal@cropleft=\pal@null
+ \fi
+ \ifdim\pal@cropleft>\pal@cropx
+ \pal@cropleft=\pal@cropx
+ \fi
+ \pal@cropright=\dimexpr(\pal@cropx - \pal@cropleft)\relax
+ \fi
+ \ifdim\pal@cropy>\pal@null
+ \pal@cropbottom=\dimexpr(\pal@graphicoptionvpos\pal@cropy)\relax
+ \ifdim\pal@cropbottom<\pal@null
+ \pal@cropbottom=\pal@null
+ \fi
+ \ifdim\pal@cropbottom>\pal@cropy
+ \pal@cropbottom=\pal@cropy
+ \fi
+ \pal@croptop=\dimexpr(\pal@cropy - \pal@cropbottom)\relax
+ \fi
+
+ \pal@snapgraphic
+ \ifdim\dimexpr\pal@snapleft+\pal@snapright\relax=\pal@null
+ \ifdim\dimexpr\pal@snaptop+\pal@snapbottom\relax>\pal@null
+ \pal@vscalegraphic
+ \fi
+ \else
+ \ifdim\dimexpr\pal@snaptop+\pal@snapbottom\relax=\pal@null
+ \ifdim\dimexpr\pal@snapleft+\pal@snapright\relax>\pal@null
+ \pal@hscalegraphic
+ \fi
+ \else
+ \ifdim\dimexpr\width/(\pal@snapleft + \pal@snapright)\relax<\dimexpr\height/(\pal@snaptop + \pal@snapbottom)\relax
+ \pal@hscalegraphic
+
+ \pal@snapgraphic
+ \else
+ \pal@vscalegraphic
+
+ \pal@snapgraphic
+ \fi
+ \fi
+ \fi
+
+ \ifdim\pal@snapleft>\pal@null
+ \pal@x=\dimexpr\pal@x+\pal@snapleft\relax
+ \fi
+ \ifdim\pal@snapbottom>\pal@null
+ \pal@y=\dimexpr\pal@y+\pal@snapbottom\relax
+ \fi
+ \else
+ \pal@snapoptimizedgraphic
+ \fi
+
+ \ifdefined\pal@nextincludegraphic
+ \else
+ \ifpal@optimize
+ \ifpal@isbatchmode
+ \isoptimizable{\pal@currfileext}{\pal@addtobatchlist{\pal@currfilebase}{\pal@currfileext}}
+ \def\pal@nextincludegraphic{}
+ \else
+ \isoptimizable{\pal@currfileext}{\pal@optimizegraphic{\pal@currfilebase}{\pal@currfileext}}
+ \ifdefined\pal@optimizedext
+ \IfFileExists{./cache/\pal@filename/g\pal@optimizedext}{
+ \def\pal@nextincludegraphic{\includegraphics[width=\width]{cache/\pal@filename/g\pal@optimizedext}}
+ }{
+ \ifx\pal@processresult\pal@ok
+ \ClassError{pagelayout}{Unexpected error. File not optimized}{File `cache/#6/g\pal@optimizedext' not found.\MessageBreak Try to delete the `cache' directory.\MessageBreak\MessageBreak\@ehc}
+ \fi
+ \def\pal@nextincludegraphic{\includegraphics[trim={\pal@cropleft} {\pal@cropbottom} {\pal@cropright} {\pal@croptop},\pal@clip,width=\width]{\pal@currfilebase\pal@currfileext}}
+ }
+ \else
+ \def\pal@nextincludegraphic{\includegraphics[trim={\pal@cropleft} {\pal@cropbottom} {\pal@cropright} {\pal@croptop},\pal@clip,width=\width]{\pal@currfilebase\pal@currfileext}}
+ \fi
+ \fi
+ \else
+ \def\pal@nextincludegraphic{\includegraphics[trim={\pal@cropleft} {\pal@cropbottom} {\pal@cropright} {\pal@croptop},\pal@clip,width=\width]{\pal@currfilebase\pal@currfileext}}
+ \fi
+ \fi
+
+ \ifdim\pal@defaultborderradius>0.5\height
+ \def\pal@defaultborderradius{0.5\height}
+ \fi
+ \ifdim\pal@defaultborderradius>0.5\width
+ \def\pal@defaultborderradius{0.5\width}
+ \fi
+
+ \pal@frameborderwidth=\dimexpr\pal@defaultborderwidth\relax
+ \ifdim\pal@defaultborderradius=0pt
+ \pal@frameborderradius=0pt
+ \pal@frameshadowradius=0pt
+ \else
+ \pal@frameborderradius=\dimexpr\pal@defaultborderradius+0.5\pal@frameborderwidth\relax
+ \pal@frameshadowradius=\dimexpr\pal@defaultborderradius+\pal@frameborderwidth\relax
+ \fi
+
+ % draw shadow
+ \ifpal@isbatchmode
+ \else
+ \def\pal@frameshadowoffsetx{\pal@frameborderwidth}
+ \def\pal@frameshadowoffsety{\pal@frameborderwidth}
+ \def\pal@frameshadowwidth{\dimexpr\width+10cm+2\pal@frameborderwidth\relax}
+ \def\pal@frameshadowheight{\dimexpr\height+10cm+2\pal@frameborderwidth\relax}
+ \def\pal@frameshadowframewidth{\dimexpr\width+2\pal@frameborderwidth\relax}
+ \def\pal@frameshadowframeheight{\dimexpr\height+2\pal@frameborderwidth\relax}
+ \def\pal@frameshadowborder{\dimexpr5cm\relax}
+ \pal@drawshadow
+ \fi
+
+ % draw graphic and border
+ \ifpal@isbatchmode
+ \pal@ismaskrequiredfalse
+ \def\pal@nextincludegraphic{}
+ \else
+ \ifpal@isperformancemode
+ \ifdim\pal@defaultborderwidth>0pt
+ \pal@ismaskrequiredtrue
+ \else
+ \ifdim\pal@defaultborderradius>0pt
+ \pal@ismaskrequiredtrue
+ \else
+ \pal@ismaskrequiredfalse
+ \fi
+ \fi
+ \else
+ \pal@ismaskrequiredtrue
+ \fi
+ \fi
+
+ \ifpal@ismaskrequired
+ \def\pal@clip{}%
+ \else
+ \def\pal@clip{clip}%
+ \fi
+
+ \put(\pal@dimentonumber{\pal@x},\pal@dimentonumber{\pal@y}){%
+ \ifpal@ismaskrequired%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+ \ifdim\pal@defaultborderwidth>0pt
+ \draw[draw=\pal@defaultbordercolor,draw opacity=\pal@defaultborderopacity,line width=\pal@frameborderwidth,rounded corners=\pal@frameborderradius] (-0.5\pal@frameborderwidth,-0.5\pal@frameborderwidth) rectangle ++(\width+\pal@frameborderwidth,\height+\pal@frameborderwidth);%
+ \fi
+
+ \draw[draw opacity=0,rounded corners=\pal@defaultborderradius,path picture={
+ \node at (0.5\width,0.5\height){
+ \pal@nextincludegraphic
+ };
+ }] (0,0) rectangle ++(\width,\height);%
+ \end{tikzpicture}%
+ \else%
+ \pal@nextincludegraphic
+ \fi%
+ }
+
+ \pal@enablegraphicsfilecheck
+
+ % draw ppi
+ \ifpal@preflight
+ \ifx\pal@nextincludegraphic\pal@emptystring
+ \else
+ \isoptimizable{\pal@currfileext}{\pal@getppi{\pal@currfilebase\pal@currfileext}}
+ \ifdefined\pal@graphicdensity
+ \pal@drawppi{#2}{#3}{#4}{#5}{#6}{\pal@graphicdensity}
+ \fi
+ \fi
+ \fi
+ \endgroup
+ \fi
+}
+\newcommand\pal@drawppi[6]{
+ \pal@x=\posx{1}{#1}{1}{#2}
+ \pal@yy=\posy{1}{#1}
+ \pal@xx=\posx{-1}{#3}{-1}{#4}
+ \pal@y=\posy{-1}{#3}
+ \width=\dimexpr(\pal@xx - \pal@x)\relax
+ \height=\dimexpr(\pal@yy - \pal@y)\relax
+ \pal@x=\dimexpr(\pal@x + \width)\relax
+ \pal@y=\dimexpr(\pal@y + \height)\relax
+ \ifdim\pal@x>\dimexpr\pal@pagewidth+\pal@innerbleed+\pal@outerbleed\relax
+ \pal@x=\dimexpr\pal@pagewidth+\pal@innerbleed+\pal@outerbleed\relax
+ \fi
+ \ifdim\pal@y>\dimexpr\pal@pageheight+\pal@topbleed+\pal@bottombleed\relax
+ \pal@y=\dimexpr\pal@pageheight+\pal@topbleed+\pal@bottombleed\relax
+ \fi
+ \def\pal@ppicolor{green!50!black}
+ \def\pal@ppicolortext{white}
+ \ifnum#6<300
+ \def\pal@ppicolor{yellow}
+ \def\pal@ppicolortext{black}
+ \ifnum#6<200
+ \def\pal@ppicolor{red}
+ \def\pal@ppicolortext{white}
+ \pal@errmsg@lowdensity{1}{#5}{#6}
+ \else
+ \pal@errmsg@lowdensity{0}{#5}{#6}
+ \fi
+ \fi
+ \put(\pal@dimentonumber{\pal@x},\pal@dimentonumber{\pal@y}){%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+ \node[fill=\pal@ppicolor,fill opacity=0.9,line width=0pt,anchor=north east] at (0,0){
+ \color{\pal@ppicolortext}\textbf{#6ppi}
+ };
+ \end{tikzpicture}%
+ }
+}
+
+% pagegraphic
+\def\pal@pagegraphic{}
+\pgfkeys{
+ /pagegraphic/.is family,
+ /pagegraphic,
+ file/.store in=\pal@pagegraphic,
+ scale/.store in=\pal@pagegraphicoptionscale,
+ vpos/.store in=\pal@pagegraphicoptionvpos,
+ hpos/.store in=\pal@pagegraphicoptionhpos,
+ unsharp/.store in=\pal@pagegraphicoptionunsharp,
+}
+\pgfkeys{
+ /backcoverpagegraphic/.is family,
+ /backcoverpagegraphic,
+ file/.store in=\pal@backcoveroptionpagegraphicfile,
+ scale/.store in=\pal@backcoveroptionpagegraphicscale,
+ vpos/.store in=\pal@backcoveroptionpagegraphicvpos,
+ hpos/.store in=\pal@backcoveroptionpagegraphichpos,
+ unsharp/.store in=\pal@backcoveroptionpagegraphicunsharp,
+}
+\def\pal@putpagegraphic{
+ \begingroup
+ \margin=\pal@null
+ \topmargin=\pal@null
+ \bottommargin=\pal@null
+ \innermargin=\pal@null
+ \outermargin=\pal@null
+ \setgrid{{{1}}}
+ \pgfkeys{graphic,scale=\pal@pagegraphicoptionscale,hpos=\pal@pagegraphicoptionhpos,vpos=\pal@pagegraphicoptionvpos,unsharp=\pal@pagegraphicoptionunsharp,border width=0pt,border radius=0pt,shadow size=0,shadow xshift=0pt,shadow yshift=0pt}
+ \pal@putgraphic{0}{0}{1}{1}{\pal@pagegraphic}
+ \endgroup
+}
+\newcommand\setpagegraphic[2][]{
+ \ifcsname pal@graphic@#2\endcsname%
+ \csname pal@graphic@#2\endcsname{#1}
+ \else%
+ \pgfkeys{pagegraphic,file={#2},scale=1,vpos=0.5,hpos=0.5,unsharp=\pal@unsharp,#1}
+ \fi
+}
+\def\nopagegraphic{\setpagegraphic{}}
+
+% text
+\newdimen\pal@textboxheight
+\newdimen\pal@textboxwidth
+\newdimen\pal@leftwidth
+\newdimen\pal@rightwidth
+\newcommand\pal@checkside[1]{
+ \ifpal@fanfold
+ \ifpal@isdoublepage
+ \pal@leftwidth=\dimexpr(\pal@pagewidth + \pal@outerbleed - \pal@x)\relax
+ \pal@rightwidth=\dimexpr(\pal@xx - \pal@pagewidth - \pal@outerbleed)\relax
+ \ifdim\pal@rightwidth>\pal@leftwidth
+ \ifnum#1=1
+ \pal@leftpagefalse
+ \pal@rightpagetrue
+ \else
+ \pal@leftpagetrue
+ \pal@rightpagefalse
+ \fi
+ \addtocounter{page}{#1}
+ \fi
+ \fi
+ \fi
+}
+\def\pal@textoptionbottom{bottom}
+\def\pal@textoptioncenter{center}
+\newif\ifpal@text@option@top
+\newif\ifpal@text@option@center
+\newif\ifpal@text@option@bottom
+\newif\ifpal@text@option@parbox
+\newif\ifpal@text@option@breakable
+\let\originaltcbset\tcbset
+\pgfkeys{
+ /inittext/.is family,
+ /inittext,
+ color/.code={\color{#1}},
+ coltext/.forward to=/inittext/color,
+ boxrule/.code={\def\pal@defaultborderwidth{#1}\def\pal@text@option@leftrule{#1}\def\pal@text@option@rightrule{#1}\def\pal@text@option@toprule{#1}\def\pal@text@option@bottomrule{#1}},
+ toprule/.code={\def\pal@text@option@toprule{#1}},
+ rightrule/.code={\def\pal@text@option@rightrule{#1}},
+ bottomrule/.code={\def\pal@text@option@bottomrule{#1}},
+ leftrule/.code={\def\pal@text@option@leftrule{#1}},
+ height/.code={\def\pal@text@option@height{#1}},
+ arc/.code={\ifdim\pal@null=\dimexpr#1\relax\originaltcbset{outer arc=#1}\else\originaltcbset{auto outer arc}\fi\def\pal@defaultborderradius{#1}},
+ colframe/.store in=\pal@defaultbordercolor,
+ opacityframe/.store in=\pal@defaultborderopacity,
+ breakable/.is if=pal@text@option@breakable,
+ .unknown/.code=,
+ library/.unknown/.code=,
+}
+\renewcommand\tcbset[1]{\originaltcbset{#1}\pgfkeys{inittext,#1}}
+\tcbset{
+ boxrule=0pt,
+ boxsep=0pt,left=0pt,right=0pt,top=0pt,bottom=0pt,
+ opacityframe=1,
+ colframe=black,
+ opacityback=0,
+ arc=0pt,
+}
+\pgfkeysdef{/text/border}{
+ \ifcsname pal@border@#1\endcsname
+ \csname pal@border@#1\endcsname[1]{}
+ \else
+ \pgfkeys{textborder,opacity=1,width=0pt,color=black,radius=0pt}
+ \pal@errmsg@undefined{border}{#1}
+ \fi
+}
+\pgfkeys{
+ /text/.is family,
+ /text,
+ name/.store in=\pal@text@option@name,
+ color/.code={\originaltcbset{coltext=#1}\def\pal@text@option@color{#1}},
+ opacity/.code={\originaltcbset{opacitytext=#1}},
+ top/.code={\originaltcbset{valign=top}\pal@text@option@toptrue},
+ center/.code={\originaltcbset{valign=center}\pal@text@option@centertrue},
+ bottom/.code={\originaltcbset{valign=bottom}\pal@text@option@bottomtrue},
+ boxrule/.code={\originaltcbset{boxrule=#1}\def\pal@defaultborderwidth{#1}\def\pal@text@option@leftrule{#1}\def\pal@text@option@rightrule{#1}\def\pal@text@option@toprule{#1}\def\pal@text@option@bottomrule{#1}},
+ toprule/.code={\originaltcbset{toprule=#1}\def\pal@text@option@toprule{#1}},
+ rightrule/.code={\originaltcbset{rightrule=#1}\def\pal@text@option@rightrule{#1}},
+ bottomrule/.code={\originaltcbset{bottomrule=#1}\def\pal@text@option@bottomrule{#1}},
+ leftrule/.code={\originaltcbset{leftrule=#1}\def\pal@text@option@leftrule{#1}},
+ height/.code={\originaltcbset{height=#1}\def\pal@text@option@height{#1}},
+ parbox/.is if=pal@text@option@parbox,
+ breakable/.is if=pal@text@option@breakable,
+ border radius/.code={\originaltcbset{arc=#1}\ifdim\pal@null=\dimexpr#1\relax\originaltcbset{outer arc=#1}\else\originaltcbset{auto outer arc}\fi\def\pal@defaultborderradius{#1}},
+ arc/.forward to=/text/border radius,
+ border width/.forward to=/text/boxrule,
+ border color/.code={\originaltcbset{colframe=#1}\def\pal@defaultbordercolor{#1}},
+ border opacity/.code={\originaltcbset{opacityframe=#1}\def\pal@defaultborderopacity{#1}},
+ shadow/.forward to=/defaultshadow/name,
+ shadow size/.forward to=/defaultshadow/size,
+ shadow color/.forward to=/defaultshadow/color,
+ shadow opacity/.forward to=/defaultshadow/opacity,
+ shadow xshift/.forward to=/defaultshadow/xshift,
+ shadow yshift/.forward to=/defaultshadow/yshift,
+ .unknown/.code={\originaltcbset{\pgfkeyscurrentname=#1}}
+}
+\newdimen\pal@tcbheight
+\newcommand\pal@puttext[5]{
+ \ifpal@isbatchmode
+ \else
+ \pal@x=\posx{1}{#1}{1}{#2}
+ \pal@xx=\posx{-1}{#3}{-1}{#4}
+ \pal@y=\posy{-1}{#3}
+ \pal@yy=\posy{1}{#1}
+
+ \pal@xx=\dimexpr\pal@xx+\pal@text@option@rightrule\relax
+ \pal@x=\dimexpr\pal@x-\pal@text@option@leftrule\relax
+ \pal@yy=\dimexpr\pal@yy+\pal@text@option@toprule\relax
+ \pal@y=\dimexpr\pal@y-\pal@text@option@bottomrule\relax
+
+ \width=\dimexpr(\pal@xx - \pal@x)\relax
+ \height=\dimexpr(\pal@yy - \pal@y)\relax
+ \pal@textboxwidth=\dimexpr(\pal@xx - \pal@x)\relax
+ \pal@textboxheight=\dimexpr(\pal@yy - \pal@y)\relax
+
+ \ifdefined\pal@text@option@height
+ \ifdim\pal@text@option@height=\height
+ \else
+ \pal@tcbheight=\dimexpr\pal@text@option@height\ifdefined\pal@text@option@toprule+\pal@text@option@toprule\else\ifdefined\pal@defaultborderwidth+\pal@defaultborderwidth\fi\fi\ifdefined\pal@text@option@bottomrule+\pal@text@option@bottomrule\else\ifdefined\pal@defaultborderwidth+\pal@defaultborderwidth\fi\fi\relax
+ \originaltcbset{height=\pal@tcbheight}
+ \fi
+ \else
+ \fi
+
+ \pal@checkvisibility
+ \ifpal@isvisible
+ \pal@checkside{1}
+ \ifpal@text@option@parbox
+ \ifdim\pal@textboxheight<\pal@null
+ \pal@yy=\dimexpr\pal@yy-\pal@textboxheight\relax
+ \pal@textboxheight=\dimexpr-1\pal@textboxheight\relax
+ \fi
+ \put(\pal@dimentonumber{\pal@x},\pal@dimentonumber{\pal@yy}){%
+ \parbox[t][\pal@textboxheight][\ifpal@text@option@center c\else\ifpal@text@option@bottom b\else t\fi\fi]{\pal@textboxwidth}{\vskip \pal@null
+ \color{\pal@text@option@color}%
+ #5%
+ }
+ }
+ \else
+ \ifdim\pal@text@option@bottomrule<\pal@text@option@toprule
+ \def\pal@text@minvborderwidth{\pal@text@option@bottomrule}
+ \def\pal@text@maxvborderwidth{\pal@text@option@toprule}
+ \else
+ \def\pal@text@minvborderwidth{\pal@text@option@toprule}
+ \def\pal@text@maxvborderwidth{\pal@text@option@bottomrule}
+ \fi
+ \ifdim\pal@text@option@leftrule<\pal@text@option@rightrule
+ \def\pal@text@minhborderwidth{\pal@text@option@leftrule}
+ \def\pal@text@maxhborderwidth{\pal@text@option@rightrule}
+ \else
+ \def\pal@text@minhborderwidth{\pal@text@option@rightrule}
+ \def\pal@text@maxhborderwidth{\pal@text@option@leftrule}
+ \fi
+ \ifdim\pal@text@minvborderwidth<\pal@text@minhborderwidth
+ \def\pal@text@minborderwidth{\pal@text@minvborderwidth}
+ \def\pal@text@maxborderwidth{\pal@text@maxhborderwidth}
+ \else
+ \def\pal@text@minborderwidth{\pal@text@minhborderwidth}
+ \def\pal@text@maxborderwidth{\pal@text@maxvborderwidth}
+ \fi
+ \ifdim\pal@text@maxborderwidth=\pal@null
+ \originaltcbset{opacityframe=0}
+ \fi
+
+ \ifpal@text@option@breakable
+ \expandafter\xdef\csname pal@textarray@\pal@text@option@name @offsetx\endcsname{\pal@text@option@leftrule}
+ \expandafter\xdef\csname pal@textarray@\pal@text@option@name @offsety\endcsname{\pal@text@option@bottomrule}
+ \else
+ \def\pal@text@option@name{pal@unbreakable}
+ \fi
+ \ifcsname pal@textarray@\pal@text@option@name @index\endcsname
+ \global\expandafter\csname pal@textarray@\pal@text@option@name @index\endcsname 0 \relax%
+ \boxarrayclear[\pal@text@option@name]
+ \else
+ \global\expandafter\newcount\csname pal@textarray@\pal@text@option@name @index\endcsname%
+ \newboxarray{\pal@text@option@name}
+ \fi
+ \put(0,0){
+ \ifpal@text@option@breakable%
+ \begin{tcolorbox}[
+ standard jigsaw,
+ width=\width,
+ enforce breakable,
+ break at=\height,
+ height fixed for=all,
+ reset box array=\pal@text@option@name,
+ store to box array=\pal@text@option@name,
+ ]%
+ #5
+ \end{tcolorbox}%
+ \else%
+ \begin{tcolorbox}[
+ standard jigsaw,
+ width=\width,
+ reset box array=\pal@text@option@name,
+ store to box array=\pal@text@option@name,
+ ]%
+ #5
+ \end{tcolorbox}%
+ \fi%
+ }
+ \global\expandafter\advance\csname pal@textarray@\pal@text@option@name @index\endcsname by 1%
+
+ \boxarraygetheight[\pal@text@option@name]{\pal@text@height}{1}
+ \ifpal@text@option@bottom
+ \pal@yy=\dimexpr\pal@yy-(\pal@textboxheight-\pal@text@height)\relax
+ \else
+ \ifpal@text@option@center
+ \pal@yy=\dimexpr\pal@yy-(\pal@textboxheight-\pal@text@height)/2\relax
+ \fi
+ \fi
+ \pal@textboxheight=\pal@text@height
+ \pal@y=\dimexpr\pal@yy-\pal@textboxheight\relax
+
+ % draw shadow
+ \pal@ifshadow{
+ \ifdefined\pal@defaultborderradius
+ \ifdim\pal@defaultborderradius=0pt
+ \pal@frameshadowradius=0pt
+ \else
+ \pal@frameshadowradius=\dimexpr\pal@defaultborderradius+\pal@text@minborderwidth\relax
+ \fi
+ \else
+ \pal@frameshadowradius=0pt
+ \fi
+
+ \def\pal@frameshadowoffsetx{0pt}
+ \def\pal@frameshadowoffsety{0pt}
+
+ \def\pal@frameshadowwidth{\dimexpr\width+10cm\relax}
+ \def\pal@frameshadowheight{\dimexpr\pal@textboxheight+10cm\relax}
+ \def\pal@frameshadowframewidth{\width}
+ \def\pal@frameshadowframeheight{\pal@textboxheight}
+ \def\pal@frameshadowborder{\dimexpr5cm\relax}
+ \ifpal@text@option@breakable
+ \expandafter\xdef\csname pal@textarray@\pal@text@option@name @shadowsize\endcsname{\pal@defaultshadowsize}
+ \expandafter\xdef\csname pal@textarray@\pal@text@option@name @shadowcolor\endcsname{\pal@defaultshadowcolor}
+ \expandafter\xdef\csname pal@textarray@\pal@text@option@name @shadowopacity\endcsname{\pal@defaultshadowopacity}
+ \expandafter\xdef\csname pal@textarray@\pal@text@option@name @shadowxshift\endcsname{\pal@defaultshadowxshift}
+ \expandafter\xdef\csname pal@textarray@\pal@text@option@name @shadowyshift\endcsname{\pal@defaultshadowyshift}
+ \expandafter\xdef\csname pal@textarray@\pal@text@option@name @frameshadowwidth\endcsname{\the\pal@frameshadowwidth}
+ \expandafter\xdef\csname pal@textarray@\pal@text@option@name @frameshadowheight\endcsname{\the\pal@frameshadowheight}
+ \expandafter\xdef\csname pal@textarray@\pal@text@option@name @frameshadowframewidth\endcsname{\the\pal@frameshadowframewidth}
+ \expandafter\xdef\csname pal@textarray@\pal@text@option@name @frameshadowframeheight\endcsname{\the\pal@frameshadowframeheight}
+ \expandafter\xdef\csname pal@textarray@\pal@text@option@name @frameshadowborder\endcsname{\the\pal@frameshadowborder}
+ \expandafter\xdef\csname pal@textarray@\pal@text@option@name @frameshadowradius\endcsname{\the\pal@frameshadowradius}
+ \fi
+ \pal@drawshadow
+ }
+
+ \put(\pal@dimentonumber{\pal@x},\pal@dimentonumber{\pal@y}){%
+ \consumeboxarray[\pal@text@option@name]{\the\csname pal@textarray@\pal@text@option@name @index\endcsname}%
+ }
+ \fi
+ \pal@checkside{-1}
+ \fi
+ \fi
+}
+\newcommand\pal@putusetext[5][default]{
+ \ifpal@isbatchmode
+ \else
+ \pal@x=\posx{1}{#2}{1}{#3}
+ \pal@xx=\posx{-1}{#4}{-1}{#5}
+ \pal@y=\posy{-1}{#4}
+ \pal@yy=\posy{1}{#2}
+ \width=\dimexpr(\pal@xx - \pal@x)\relax
+ \height=\dimexpr(\pal@yy - \pal@y)\relax
+ \pal@textboxwidth=\dimexpr(\pal@xx - \pal@x)\relax
+ \pal@textboxheight=\dimexpr(\pal@yy - \pal@y)\relax
+
+ \pal@checkvisibility
+ \ifpal@isvisible
+ \ifcsname pal@textarray@#1@index\endcsname
+ \global\expandafter\advance\csname pal@textarray@#1@index\endcsname by 1%
+
+ \pal@y=\dimexpr\pal@yy-\pal@textboxheight\relax
+
+ \ifcsname pal@textarray@#1@shadowsize\endcsname
+ \def\pal@frameshadowoffsetx{\expandafter\csname pal@textarray@#1@offsetx\endcsname}
+ \def\pal@frameshadowoffsety{\expandafter\csname pal@textarray@#1@offsety\endcsname}
+
+ \def\pal@frameshadowwidth{\dimexpr\expandafter\csname pal@textarray@#1@frameshadowwidth\endcsname\relax}
+ \def\pal@frameshadowheight{\dimexpr\expandafter\csname pal@textarray@#1@frameshadowheight\endcsname\relax}
+ \def\pal@frameshadowframewidth{\dimexpr\expandafter\csname pal@textarray@#1@frameshadowframewidth\endcsname\relax}
+ \def\pal@frameshadowframeheight{\dimexpr\expandafter\csname pal@textarray@#1@frameshadowframeheight\endcsname\relax}
+ \def\pal@frameshadowborder{\dimexpr\expandafter\csname pal@textarray@#1@frameshadowborder\endcsname\relax}
+ \def\pal@frameshadowradius{\dimexpr\expandafter\csname pal@textarray@#1@frameshadowradius\endcsname\relax}
+
+ \def\pal@defaultshadowsize{\expandafter\csname pal@textarray@#1@shadowsize\endcsname}
+ \def\pal@defaultshadowcolor{\expandafter\csname pal@textarray@#1@shadowcolor\endcsname}
+ \def\pal@defaultshadowopacity{\expandafter\csname pal@textarray@#1@shadowopacity\endcsname}
+ \def\pal@defaultshadowxshift{\dimexpr\expandafter\csname pal@textarray@#1@shadowxshift\endcsname\relax}
+ \def\pal@defaultshadowyshift{\dimexpr\expandafter\csname pal@textarray@#1@shadowyshift\endcsname\relax}
+
+ \pal@drawshadow
+ \fi
+
+ \pal@checkside{1}
+ \put(\pal@dimentonumber{\pal@x-\expandafter\csname pal@textarray@#1@offsetx\endcsname},\pal@dimentonumber{\pal@y-\expandafter\csname pal@textarray@#1@offsety\endcsname}){%
+ \consumeboxarray[#1]{\the\csname pal@textarray@#1@index\endcsname}%
+ }
+ \pal@checkside{-1}
+ \else
+ \pal@errmsg@undefined{breakable text}{#1}
+ \fi
+ \fi
+ \fi
+}
+
+% xput
+\newcommand\pal@putxput[6][0]{
+ \pal@x=\posx{1}{#2}{1}{#3}
+ \pal@xx=\posx{-1}{#4}{-1}{#5}
+ \pal@y=\posy{-1}{#4}
+ \pal@yy=\posy{1}{#2}
+
+ \pal@checkvisibility
+ \ifpal@isvisible
+ \ifnum#1=1
+ \pal@snapsafezonehorizontal
+ \pal@snapsafezonevertical
+ \fi
+
+ \width=\dimexpr(\pal@xx - \pal@x)\relax
+ \height=\dimexpr(\pal@yy - \pal@y)\relax
+
+ \put(\pal@dimentonumber{\pal@x},\pal@dimentonumber{\pal@y}){%
+ \ifx\pal@pageoptioncolor\pal@emptystring
+ \color{\paloptions@color}%
+ \else
+ \color{\pal@pageoptioncolor}%
+ \fi
+ #6
+ }
+ \fi
+}
+
+% tikzgraphic
+\newcommand\pal@puttikz[6][0]{
+ \ifpal@isbatchmode
+ \else
+ \pal@putxput[#1]{#2}{#3}{#4}{#5}{%
+ \begin{tikzpicture}
+ \pgflowlevelsynccm
+ #6
+ \end{tikzpicture}
+ }
+ \fi
+}
+
+% border
+\def\pal@defaultborderwidth{0pt}
+\def\pal@defaultborderradius{0pt}
+\def\pal@defaultbordercolor{black}
+\def\pal@defaultborderopacity{1}
+\pgfkeysdef{/defaultborder/name}{
+ \ifcsname pal@border@#1\endcsname
+ \csname pal@border@#1\endcsname{}
+ \else
+ \pgfkeys{defaultborder,opacity=1,width=0pt,color=black,radius=0pt}
+ \pal@errmsg@undefined{border}{#1}
+ \fi
+}
+\newcommand\newborder[2]{
+ \expandafter\newcommand\csname pal@border@#1\endcsname[2][0]{%
+ \ifnum##1=1
+ \pgfkeys{textborder,opacity=1,width=0pt,color=black,radius=0pt,#2}
+ \else
+ \pgfkeys{defaultborder,opacity=1,width=0pt,color=black,radius=0pt,#2,##2}
+ \fi
+ }%
+}
+\pgfkeys{
+ /textborder/.is family,
+ /textborder,
+ radius/.forward to=/text/border radius,
+ width/.forward to=/text/border width,
+ color/.forward to=/text/border color,
+ opacity/.forward to=/text/border opacity,
+}
+\pgfkeys{
+ /defaultborder/.is family,
+ /defaultborder,
+ radius/.store in=\pal@defaultborderradius,
+ width/.store in=\pal@defaultborderwidth,
+ color/.store in=\pal@defaultbordercolor,
+ opacity/.store in=\pal@defaultborderopacity,
+}
+\newcommand\setborder[2][]{
+ \ifpal@placeholdermode
+ \ifnum\pal@contentcounter<\pal@placeholdercounter
+ \pal@border{#1}{#2}
+ \fi
+ \else
+ \pal@border{#1}{#2}
+ \fi
+}
+\def\noborder{\setborder{}}
+\newcommand\pal@border[2]{
+ \pgfkeys{defaultborder,width=0pt,color=black,opacity=1,radius=0pt,#1}
+ \ifcsname pal@border@#2\endcsname
+ \csname pal@border@#2\endcsname{#1}
+ \fi
+}
+
+% shadow
+\def\pal@defaultshadowsize{0}
+\def\pal@defaultshadowopacity{0.4}
+\def\pal@defaultshadowcolor{black}
+\def\pal@defaultshadowxshift{0pt}
+\def\pal@defaultshadowyshift{0pt}
+\pgfkeysdef{/defaultshadow/name}{
+ \ifcsname pal@shadow@#1\endcsname
+ \csname pal@shadow@#1\endcsname{}
+ \else
+ \pgfkeys{defaultshadow,size=0,color=black,opacity=0.4,xshift=0pt,yshift=0pt}
+ \pal@errmsg@undefined{shadow}{#1}
+ \fi
+}
+\newcommand\newshadow[2]{
+ \expandafter\newcommand\csname pal@shadow@#1\endcsname[1]{%
+ \pgfkeys{defaultshadow,size=0,color=black,opacity=0.4,xshift=0pt,yshift=0pt,#2,##1}
+ }%
+}
+\pgfkeys{
+ /defaultshadow/.is family,
+ /defaultshadow,
+ size/.store in=\pal@defaultshadowsize,
+ color/.store in=\pal@defaultshadowcolor,
+ opacity/.store in=\pal@defaultshadowopacity,
+ xshift/.store in=\pal@defaultshadowxshift,
+ yshift/.store in=\pal@defaultshadowyshift,
+}
+\newcommand\setshadow[2][]{
+ \ifpal@placeholdermode
+ \ifnum\pal@contentcounter<\pal@placeholdercounter
+ \pal@shadow{#1}{#2}
+ \fi
+ \else
+ \pal@shadow{#1}{#2}
+ \fi
+}
+\def\noshadow{\setshadow{}}
+\newcommand\pal@shadow[2]{
+ \pgfkeys{defaultshadow,size=0,color=black,opacity=0.4,xshift=0pt,yshift=0pt,#1}
+ \ifcsname pal@shadow@#2\endcsname
+ \csname pal@shadow@#2\endcsname{#1}
+ \fi
+}
+\newcommand\pal@ifshadow[1]{
+ \ifdim\dimexpr\pal@defaultshadowsize pt\relax>\pal@null
+ #1
+ \else
+ \ifdim\pal@defaultshadowxshift>\pal@null
+ #1
+ \else
+ \ifdim\pal@defaultshadowyshift>\pal@null
+ #1
+ \fi
+ \fi
+ \fi
+}
+\def\pal@drawshadow{
+ \pal@ifshadow{
+ \xdef\pal@shadowid{shadow-\pal@defaultshadowsize-\pal@defaultshadowcolor-\pal@defaultshadowopacity-\the\numexpr\pal@frameshadowwidth\relax-\the\numexpr\pal@frameshadowheight\relax-\the\numexpr\pal@frameshadowradius\relax-\the\numexpr\pal@frameshadowborder\relax}
+ \IfFileExists{./cache/\pal@shadowid/s.pdf}{
+ \put(\pal@dimentonumber{\dimexpr\pal@x-5cm-\pal@frameshadowoffsetx+\pal@defaultshadowxshift\relax},\pal@dimentonumber{\dimexpr\pal@y-5cm-\pal@frameshadowoffsety-\pal@defaultshadowyshift\relax}){%
+ \includegraphics[width=\pal@frameshadowwidth]{cache/\pal@shadowid/s.pdf}
+ }
+ }{
+ \pal@makeshadow{\pal@shadowid}
+ \IfFileExists{./cache/\pal@shadowid/s.pdf}{
+ \put(\pal@dimentonumber{\dimexpr\pal@x-5cm-\pal@frameshadowoffsetx+\pal@defaultshadowxshift\relax},\pal@dimentonumber{\dimexpr\pal@y-5cm-\pal@frameshadowoffsety-\pal@defaultshadowyshift\relax}){%
+ \includegraphics[width=\pal@frameshadowwidth]{cache/\pal@shadowid/s.pdf}
+ }
+ }{
+ \ifx\pal@processresult\pal@ok
+ \ClassError{pagelayout}{Unexpected error. Shadow not created}{File `cache/\pal@shadowid/s.pdf' not\MessageBreak found.\MessageBreak\MessageBreak\@ehc}
+ \fi
+ }
+ }
+ }
+}
+
+% layout helper
+\def\pal@gridcolor{green!90!black}
+\def\pal@gridopacity{0.8}
+\def\pal@gutteropacity{0.2}
+\newdimen\pal@gridx
+\newdimen\pal@gridxx
+\newdimen\pal@gridy
+\newdimen\pal@gridyy
+\newcommand\pal@putgrid{
+ \ifpal@isemptypage
+ \else
+ \ifpal@grid
+ \pal@gridx=\posx{1}{1}{1}{0}
+ \pal@gridxx=\posx{-1}{1}{-1}{\pal@get{1C}}
+ \pal@gridy=\posy{1}{0}
+ \pal@gridyy=\posy{-1}{\pal@rowscount}
+ \put(0,0){%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+ \foreach \rowI in {1,...,\pal@rowscount} {
+ \ifnum\rowI<\pal@rowscount
+ \ifdim\pal@gutter=\pal@null
+ \draw[line cap=rect,line width=0.2mm,draw=\pal@gridcolor,opacity=\pal@gridopacity] ({\pal@gridx+0.05mm},{\posy{0}{\rowI}}) -- ({\pal@gridxx-0.05mm},{\posy{0}{\rowI}});%
+ \else
+ \draw[line cap=rect,line width=\pal@gutter,draw=\pal@gridcolor,opacity=\pal@gutteropacity] ({\pal@gridx+\pal@gutter/2},{\posy{0}{\rowI}}) -- ({\pal@gridxx-\pal@gutter/2},{\posy{0}{\rowI}});%
+ \fi
+ \fi
+ \ifnum\numexpr\pal@get{\rowI C} - 1\relax>0
+ \foreach \cellI in {1,...,\numexpr\pal@get{\rowI C} - 1\relax} {
+ \ifdim\pal@gutter=\pal@null
+ \draw[line width=0.2mm,draw=\pal@gridcolor,opacity=\pal@gridopacity] ({\posx{-1}{\rowI}{0}{\cellI}},{\posy{1}{\numexpr\rowI - 1\relax}}) -- ({\posx{-1}{\rowI}{0}{\cellI}},{\posy{-1}{\rowI}});%
+ \else
+ \draw[line width=\pal@gutter,draw=\pal@gridcolor,opacity=\pal@gutteropacity] ({\posx{-1}{\rowI}{0}{\cellI}},{\posy{1}{\numexpr\rowI - 1\relax}}) -- ({\posx{-1}{\rowI}{0}{\cellI}},{\posy{-1}{\rowI}});%
+ \fi
+ }
+ \fi
+ }
+ \draw[line width=0.2mm,draw=\pal@gridcolor,opacity=\pal@gridopacity] ({\pal@gridx},{\pal@gridy}) rectangle ({\pal@gridxx},{\pal@gridyy});%
+ \ifdim\pal@gridoffsethorizontal>0.001pt
+ \draw[line width=0.2mm,dash pattern={on 1mm off 1mm},draw=\pal@gridcolor,opacity=\pal@gridopacity] (\pal@gridx,\pal@gridy) -- (\pal@gridx-\pal@gridoffsethorizontal,\pal@gridy) -- (\pal@gridx-\pal@gridoffsethorizontal,\pal@gridyy) -- (\pal@gridx,\pal@gridyy);%
+ \fi
+ \ifdim\pal@gridoffsethorizontaln>0.001pt
+ \draw[line width=0.2mm,dash pattern={on 1mm off 1mm},draw=\pal@gridcolor,opacity=\pal@gridopacity] (\pal@gridxx,\pal@gridy) -- (\pal@gridxx+\pal@gridoffsethorizontaln,\pal@gridy) -- (\pal@gridxx+\pal@gridoffsethorizontaln,\pal@gridyy) -- (\pal@gridxx,\pal@gridyy);%
+ \fi
+ \ifdim\pal@gridoffsetvertical>0.001pt
+ \draw[line width=0.2mm,dash pattern={on 1mm off 1mm},draw=\pal@gridcolor,opacity=\pal@gridopacity] (\pal@gridx,\pal@gridy) -- (\pal@gridx,\pal@gridy+\pal@gridoffsetvertical)-- (\pal@gridxx,\pal@gridy+\pal@gridoffsetvertical) -- (\pal@gridxx,\pal@gridy);%
+ \fi
+ \ifdim\pal@gridoffsetverticaln>0.001pt
+ \draw[line width=0.2mm,dash pattern={on 1mm off 1mm},draw=\pal@gridcolor,opacity=\pal@gridopacity] ({\pal@gridx},{\pal@gridyy}) --({\pal@gridx},{\pal@gridyy-\pal@gridoffsetverticaln}) -- ({\pal@gridxx},{\pal@gridyy-\pal@gridoffsetverticaln}) -- ({\pal@gridxx},{\pal@gridyy});%
+ \fi
+ \end{tikzpicture}%
+ }
+ \fi
+ \fi
+}
+\def\pal@bleedcolor{red}
+\def\pal@bleedopacity{0.5}
+\newif\ifpal@putbleed
+\newcommand\pal@checkbleed{
+ \ifdim\pal@topbleed>\pal@null
+ \pal@putbleedtrue
+ \else
+ \ifdim\pal@bottombleed>\pal@null
+ \pal@putbleedtrue
+ \else
+ \ifdim\pal@innerbleed>\pal@null
+ \pal@putbleedtrue
+ \else
+ \ifdim\pal@outerbleed>\pal@null
+ \pal@putbleedtrue
+ \else
+ \pal@putbleedfalse
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\newcommand\pal@putbleed{
+ \ifpal@isemptypage
+ \else
+ \ifpal@safezone
+ \pal@checkbleed
+ \ifpal@putbleed
+ \put(0,0){%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+
+ \ifpal@frontcover
+ \ifpal@backcover
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (0, \pal@pageheight + \pal@bottombleed) rectangle ++(\pal@pagewidth + \pal@outerbleed,\pal@topbleed);%
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (0, 0) rectangle ++(\pal@pagewidth + \pal@outerbleed,\pal@bottombleed);%
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (0, \pal@bottombleed) rectangle ++(\pal@outerbleed,\pal@pageheight);%
+ \else
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (\pal@pagewidth + \pal@outerbleed, \pal@pageheight + \pal@bottombleed) rectangle ++(\pal@pagewidth + \pal@outerbleed + \spinewidth,\pal@topbleed);%
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (\pal@pagewidth + \pal@outerbleed, 0) rectangle ++(\pal@pagewidth + \pal@outerbleed + \spinewidth,\pal@bottombleed);%
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (\pal@pagewidth * 2 + \pal@outerbleed + \spinewidth, \pal@bottombleed) rectangle ++(\pal@outerbleed,\pal@pageheight);%
+ \fi
+ \else
+ \ifpal@fanfold
+ \ifpal@isdoublepage
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (0, \pal@pageheight + \pal@bottombleed) rectangle ++(\pal@pagewidth * 2 + \pal@outerbleed * 2,\pal@topbleed);%
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (0, 0) rectangle ++(\pal@pagewidth * 2 + \pal@outerbleed * 2,\pal@bottombleed);%
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (0, \pal@bottombleed) rectangle ++(\pal@outerbleed,\pal@pageheight);%
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (\pal@pagewidth * 2 + \pal@outerbleed, \pal@bottombleed) rectangle ++(\pal@outerbleed,\pal@pageheight);%
+ \else
+ \ifpal@leftpage
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (0, \pal@pageheight + \pal@bottombleed) rectangle ++(\pal@pagewidth + \pal@outerbleed,\pal@topbleed);%
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (0, 0) rectangle ++(\pal@pagewidth + \pal@outerbleed,\pal@bottombleed);%
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (0, \pal@bottombleed) rectangle ++(\pal@outerbleed,\pal@pageheight);%
+ \else
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (\pal@pagewidth + \pal@outerbleed, \pal@pageheight + \pal@bottombleed) rectangle ++(\pal@pagewidth + \pal@outerbleed,\pal@topbleed);%
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (\pal@pagewidth + \pal@outerbleed, 0) rectangle ++(\pal@pagewidth + \pal@outerbleed,\pal@bottombleed);%
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (\pal@pagewidth * 2 + \pal@outerbleed, \pal@bottombleed) rectangle ++(\pal@outerbleed,\pal@pageheight);%
+ \fi
+ \fi
+ \else
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (0, \pal@pageheight + \pal@bottombleed) rectangle ++(\pal@pagewidth + \pal@leftbleed + \pal@rightbleed,\pal@topbleed);%
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (0, 0) rectangle ++(\pal@pagewidth + \pal@leftbleed + \pal@rightbleed,\pal@bottombleed);%
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (0, \pal@bottombleed) rectangle ++(\pal@leftbleed,\pal@pageheight);%
+ \fill[\pal@bleedcolor,opacity=\pal@bleedopacity] (\pal@pagewidth + \pal@leftbleed, \pal@bottombleed) rectangle ++(\pal@rightbleed,\pal@pageheight);%
+ \fi
+ \fi
+ \end{tikzpicture}%
+ }
+ \fi
+ \fi
+ \fi
+}
+\newdimen\pal@cuttingmarka
+\newdimen\pal@cuttingmarkb
+\pal@cuttingmarka=-3mm
+\pal@cuttingmarkb=-1mm
+\newcommand\pal@putcuttingmarks{
+ \ifpal@isemptypage
+ \ifpal@fanfold
+ \pal@cuttingmarksvisibletrue
+ \fi
+ \else
+ \pal@cuttingmarksvisibletrue
+ \fi
+ \ifpal@cuttingmarksvisible
+ \ifpal@cuttingmarks
+ \ifpal@safezone
+ \else
+ \pal@checkbleed
+ \ifpal@putbleed
+ \put(0,0){%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+
+ \ifpal@frontcover
+ \ifpal@backcover
+ \draw[\pal@pageoptioncolor,line width=0.15mm](\pal@outerbleed + \pal@cuttingmarka, \pal@bottombleed) -- (\pal@outerbleed + \pal@cuttingmarkb, \pal@bottombleed);%
+ \draw[\pal@pageoptioncolor,line width=0.15mm](\pal@outerbleed, \pal@bottombleed + \pal@cuttingmarka) -- (\pal@outerbleed, \pal@bottombleed + \pal@cuttingmarkb);%
+ \draw[\pal@pageoptioncolor](\pal@outerbleed + \pal@cuttingmarka, \pal@bottombleed+\pal@pageheight) -- (\pal@outerbleed + \pal@cuttingmarkb, \pal@bottombleed + \pal@pageheight);%
+ \draw[\pal@pageoptioncolor](\pal@outerbleed, \pal@bottombleed + \pal@pageheight - \pal@cuttingmarka) -- (\pal@outerbleed, \pal@bottombleed + \pal@pageheight - \pal@cuttingmarkb);%
+ \else
+ \draw[\pal@pageoptioncolor](2\pal@pagewidth + \pal@outerbleed + \spinewidth - \pal@cuttingmarka, \pal@bottombleed) -- (2\pal@pagewidth + \pal@outerbleed + \spinewidth - \pal@cuttingmarkb, \pal@bottombleed);%
+ \draw[\pal@pageoptioncolor](2\pal@pagewidth + \pal@outerbleed + \spinewidth, \pal@bottombleed + \pal@cuttingmarka) -- (2\pal@pagewidth + \pal@outerbleed + \spinewidth, \pal@bottombleed + \pal@cuttingmarkb);%
+ \draw[\pal@pageoptioncolor](2\pal@pagewidth + \pal@outerbleed + \spinewidth - \pal@cuttingmarka, \pal@bottombleed+\pal@pageheight) -- (2\pal@pagewidth + \pal@outerbleed + \spinewidth - \pal@cuttingmarkb, \pal@bottombleed+\pal@pageheight);%
+ \draw[\pal@pageoptioncolor](2\pal@pagewidth + \pal@outerbleed + \spinewidth, \pal@bottombleed+\pal@pageheight - \pal@cuttingmarka) -- (2\pal@pagewidth + \pal@outerbleed + \spinewidth, \pal@bottombleed+\pal@pageheight - \pal@cuttingmarkb);%
+ \fi
+ \else
+ \ifpal@fanfold
+ \ifpal@isdoublepage
+ \draw[\pal@pageoptioncolor](\pal@outerbleed + \pal@cuttingmarka, \pal@bottombleed) -- (\pal@outerbleed + \pal@cuttingmarkb, \pal@bottombleed);%
+ \draw[\pal@pageoptioncolor](\pal@outerbleed, \pal@bottombleed + \pal@cuttingmarka) -- (\pal@outerbleed, \pal@bottombleed + \pal@cuttingmarkb);%
+ \draw[\pal@pageoptioncolor](\pal@outerbleed + \pal@cuttingmarka, \pal@bottombleed+\pal@pageheight) -- (\pal@outerbleed + \pal@cuttingmarkb, \pal@bottombleed+\pal@pageheight);%
+ \draw[\pal@pageoptioncolor](\pal@outerbleed, \pal@bottombleed+\pal@pageheight - \pal@cuttingmarka) -- (\pal@outerbleed, \pal@bottombleed+\pal@pageheight - \pal@cuttingmarkb);%
+
+ \draw[\pal@pageoptioncolor](2\pal@pagewidth + \pal@outerbleed - \pal@cuttingmarka, \pal@bottombleed) -- (2\pal@pagewidth + \pal@outerbleed - \pal@cuttingmarkb, \pal@bottombleed);%
+ \draw[\pal@pageoptioncolor](2\pal@pagewidth + \pal@outerbleed, \pal@bottombleed + \pal@cuttingmarka) -- (2\pal@pagewidth + \pal@outerbleed, \pal@bottombleed + \pal@cuttingmarkb);%
+ \draw[\pal@pageoptioncolor](2\pal@pagewidth + \pal@outerbleed - \pal@cuttingmarka, \pal@bottombleed+\pal@pageheight) -- (2\pal@pagewidth + \pal@outerbleed - \pal@cuttingmarkb, \pal@bottombleed+\pal@pageheight);%
+ \draw[\pal@pageoptioncolor](2\pal@pagewidth + \pal@outerbleed, \pal@bottombleed+\pal@pageheight - \pal@cuttingmarka) -- (2\pal@pagewidth + \pal@outerbleed, \pal@bottombleed+\pal@pageheight - \pal@cuttingmarkb);%
+ \else
+ \ifpal@leftpage
+ \draw[\pal@pageoptioncolor](\pal@outerbleed + \pal@cuttingmarka, \pal@bottombleed) -- (\pal@outerbleed + \pal@cuttingmarkb, \pal@bottombleed);%
+ \draw[\pal@pageoptioncolor](\pal@outerbleed, \pal@bottombleed + \pal@cuttingmarka) -- (\pal@outerbleed, \pal@bottombleed + \pal@cuttingmarkb);%
+ \draw[\pal@pageoptioncolor](\pal@outerbleed + \pal@cuttingmarka, \pal@bottombleed+\pal@pageheight) -- (\pal@outerbleed + \pal@cuttingmarkb, \pal@bottombleed+\pal@pageheight);%
+ \draw[\pal@pageoptioncolor](\pal@outerbleed, \pal@bottombleed+\pal@pageheight - \pal@cuttingmarka) -- (\pal@outerbleed, \pal@bottombleed+\pal@pageheight - \pal@cuttingmarkb);%
+ \else
+ \draw[\pal@pageoptioncolor](2\pal@pagewidth + \pal@outerbleed - \pal@cuttingmarka, \pal@bottombleed) -- (2\pal@pagewidth + \pal@outerbleed - \pal@cuttingmarkb, \pal@bottombleed);%
+ \draw[\pal@pageoptioncolor](2\pal@pagewidth + \pal@outerbleed, \pal@bottombleed + \pal@cuttingmarka) -- (2\pal@pagewidth + \pal@outerbleed, \pal@bottombleed + \pal@cuttingmarkb);%
+ \draw[\pal@pageoptioncolor](2\pal@pagewidth + \pal@outerbleed - \pal@cuttingmarka, \pal@bottombleed+\pal@pageheight) -- (2\pal@pagewidth + \pal@outerbleed - \pal@cuttingmarkb, \pal@bottombleed+\pal@pageheight);%
+ \draw[\pal@pageoptioncolor](2\pal@pagewidth + \pal@outerbleed, \pal@bottombleed+\pal@pageheight - \pal@cuttingmarka) -- (2\pal@pagewidth + \pal@outerbleed, \pal@bottombleed+\pal@pageheight - \pal@cuttingmarkb);%
+ \fi
+ \fi
+ \else
+ \draw[\pal@pageoptioncolor](\pal@outerbleed + \pal@cuttingmarka, \pal@bottombleed) -- (\pal@outerbleed + \pal@cuttingmarkb, \pal@bottombleed);%
+ \draw[\pal@pageoptioncolor](\pal@outerbleed, \pal@bottombleed + \pal@cuttingmarka) -- (\pal@outerbleed, \pal@bottombleed + \pal@cuttingmarkb);%
+ \draw[\pal@pageoptioncolor](\pal@outerbleed + \pal@cuttingmarka, \pal@bottombleed+\pal@pageheight) -- (\pal@outerbleed + \pal@cuttingmarkb, \pal@bottombleed+\pal@pageheight);%
+ \draw[\pal@pageoptioncolor](\pal@outerbleed, \pal@bottombleed+\pal@pageheight - \pal@cuttingmarka) -- (\pal@outerbleed, \pal@bottombleed+\pal@pageheight - \pal@cuttingmarkb);%
+ \draw[\pal@pageoptioncolor](\pal@pagewidth + \pal@outerbleed - \pal@cuttingmarka, \pal@bottombleed) -- (\pal@pagewidth + \pal@outerbleed - \pal@cuttingmarkb, \pal@bottombleed);%
+ \draw[\pal@pageoptioncolor](\pal@pagewidth + \pal@outerbleed, \pal@bottombleed + \pal@cuttingmarka) -- (\pal@pagewidth + \pal@outerbleed, \pal@bottombleed + \pal@cuttingmarkb);%
+ \draw[\pal@pageoptioncolor](\pal@pagewidth + \pal@outerbleed - \pal@cuttingmarka, \pal@bottombleed+\pal@pageheight) -- (\pal@pagewidth + \pal@outerbleed - \pal@cuttingmarkb, \pal@bottombleed+\pal@pageheight);%
+ \draw[\pal@pageoptioncolor](\pal@pagewidth + \pal@outerbleed, \pal@bottombleed+\pal@pageheight - \pal@cuttingmarka) -- (\pal@pagewidth + \pal@outerbleed, \pal@bottombleed+\pal@pageheight - \pal@cuttingmarkb);%
+ \fi
+ \fi
+ \end{tikzpicture}%
+ }
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\def\pal@safetymargincolor{pink}
+\def\pal@safetymarginopacity{0.8}
+\newif\ifpal@putsafezone
+\newcommand\pal@checksafezone{
+ \ifdim\pal@topsafetymargin>\pal@null
+ \pal@putsafezonetrue
+ \else
+ \ifdim\pal@bottomsafetymargin>\pal@null
+ \pal@putsafezonetrue
+ \else
+ \ifdim\pal@innersafetymargin>\pal@null
+ \pal@putsafezonetrue
+ \else
+ \ifdim\pal@outersafetymargin>\pal@null
+ \pal@putsafezonetrue
+ \else
+ \pal@putsafezonefalse
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\newcommand\pal@putsafezone{
+ \ifpal@isemptypage
+ \else
+ \ifpal@safezone
+ \pal@checksafezone
+ \ifpal@putsafezone
+ \put(0,0){%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+
+ \ifpal@frontcover
+ \ifpal@backcover
+ \else
+ \draw[line cap=rect,line width=0.1mm,draw=\pal@safetymargincolor,opacity=\pal@safetymarginopacity] (\pal@pagewidth + \pal@outerbleed,0.05mm) -- (\pal@pagewidth + \pal@outerbleed,\paperheight-0.05mm);%
+ \draw[line width=0.1mm,draw=\pal@safetymargincolor,opacity=\pal@safetymarginopacity] (\pal@outersafetymargin + \pal@outerbleed,\pal@bottomsafetymargin + \pal@bottombleed) rectangle (\pal@pagewidth + \pal@outerbleed - \pal@innersafetymargin,\paperheight - \pal@topsafetymargin - \pal@topbleed);%
+ \draw[line cap=rect,line width=0.1mm,draw=\pal@safetymargincolor,opacity=\pal@safetymarginopacity] (\pal@pagewidth + \pal@outerbleed + \spinewidth,0.05mm) -- (\pal@pagewidth + \pal@outerbleed + \spinewidth,\paperheight-0.05mm);%
+ \draw[line width=0.1mm,draw=\pal@safetymargincolor,opacity=\pal@safetymarginopacity] (\pal@pagewidth + \pal@outerbleed + \spinewidth + \pal@innersafetymargin,\pal@bottomsafetymargin + \pal@bottombleed) rectangle (\paperwidth - \pal@outerbleed - \pal@outersafetymargin,\paperheight - \pal@topsafetymargin - \pal@topbleed);%
+ \fi
+ \else
+ \ifpal@fanfold
+ \ifpal@isdoublepage
+ \draw[line width=0.1mm,draw=\pal@safetymargincolor,opacity=\pal@safetymarginopacity] (\pal@outersafetymargin + \pal@outerbleed,\pal@bottomsafetymargin + \pal@bottombleed) rectangle (\paperwidth / 2 - \pal@innersafetymargin,\paperheight - \pal@topsafetymargin - \pal@topbleed);%
+ \draw[line width=0.1mm,draw=\pal@safetymargincolor,opacity=\pal@safetymarginopacity] (\paperwidth / 2 + \pal@innersafetymargin,\pal@bottomsafetymargin + \pal@bottombleed) rectangle (\paperwidth - \pal@outerbleed - \pal@outersafetymargin,\paperheight - \pal@topsafetymargin - \pal@topbleed);%
+ \else
+ \ifpal@leftpage
+ \draw[line width=0.1mm,draw=\pal@safetymargincolor,opacity=\pal@safetymarginopacity] (\pal@outersafetymargin + \pal@outerbleed,\pal@bottomsafetymargin + \pal@bottombleed) rectangle (\paperwidth / 2 - \pal@innersafetymargin,\paperheight - \pal@topsafetymargin - \pal@topbleed);%
+ \else
+ \draw[line width=0.1mm,draw=\pal@safetymargincolor,opacity=\pal@safetymarginopacity] (\paperwidth / 2 + \pal@innersafetymargin,\pal@bottomsafetymargin + \pal@bottombleed) rectangle (\paperwidth - \pal@outerbleed - \pal@outersafetymargin,\paperheight - \pal@topsafetymargin - \pal@topbleed);%
+ \fi
+ \fi
+ \draw[line cap=rect,line width=0.1mm,draw=\pal@safetymargincolor,opacity=\pal@safetymarginopacity] (\paperwidth / 2,0.05mm) -- (\paperwidth / 2,\paperheight-0.05mm);%
+ \else
+ \draw[line width=0.1mm,draw=\pal@safetymargincolor,opacity=\pal@safetymarginopacity] (\pal@leftsafetymargin + \pal@leftbleed,\pal@bottomsafetymargin + \pal@bottombleed) rectangle (\paperwidth - \pal@rightsafetymargin - \pal@rightbleed,\paperheight - \pal@topsafetymargin - \pal@topbleed);%
+ \fi
+ \fi
+ \end{tikzpicture}%
+ }
+ \else
+ \ifpal@frontcover
+ \ifpal@backcover
+ \else
+ \put(0,0){%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+ \draw[line cap=rect,line width=0.1mm,draw=\pal@safetymargincolor,opacity=\pal@safetymarginopacity] (\pal@pagewidth + \pal@outerbleed,0.05mm) -- (\pal@pagewidth + \pal@outerbleed,\paperheight-0.05mm);%
+ \draw[line cap=rect,line width=0.1mm,draw=\pal@safetymargincolor,opacity=\pal@safetymarginopacity] (\pal@pagewidth + \pal@outerbleed + \spinewidth,0.05mm) -- (\pal@pagewidth + \pal@outerbleed + \spinewidth,\paperheight-0.05mm);%
+ \end{tikzpicture}%
+ }
+ \fi
+ \else
+ \ifpal@fanfold
+ \put(0,0){%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+ \draw[line cap=rect,line width=0.1mm,draw=\pal@safetymargincolor,opacity=\pal@safetymarginopacity] (\paperwidth / 2,0.05mm) -- (\paperwidth / 2,\paperheight-0.05mm);%
+ \end{tikzpicture}%
+ }
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\def\pal@graphpapercolor{gray!70}
+\def\pal@graphpaperopacity{0.2}
+\newcommand\pal@calcgraphpaperx{
+ \ifdim\pal@graphpaperx>\pal@null
+ \pal@graphpaperx=\dimexpr\pal@graphpaperx-\pal@graphpapersnap\relax
+ \pal@calcgraphpaperx
+ \fi
+}
+\newcommand\pal@calcgraphpapery{
+ \ifdim\pal@graphpapery>\pal@null
+ \pal@graphpapery=\dimexpr\pal@graphpapery-\pal@graphpapersnap\relax
+ \pal@calcgraphpapery
+ \fi
+}
+\newcommand\pal@calcgraphpaperoffset{
+ \pal@graphpaperoffset=\pal@null
+
+ \pal@graphpaperoffsetsnap \numexpr\number\pal@pagewidth/\pal@graphpapersnap\relax
+ \pal@graphpaperoffset=\dimexpr\pal@pagewidth-\pal@graphpapersnap*\pal@graphpaperoffsetsnap\relax
+ \ifdim\pal@graphpaperoffset<\pal@null
+ \pal@graphpaperoffset=\dimexpr\pal@graphpaperoffset+\pal@graphpapersnap\relax
+ \fi
+ \pal@graphpaperx=\dimexpr\pal@graphpaperx-\pal@graphpaperoffset\relax
+}
+\newcount\pal@graphpaperoffsetsnap
+\newcommand\pal@putgraphpaper{
+ \ifpal@graphpaper
+ \pal@graphpapery=\pal@bottombleed
+ \pal@calcgraphpapery
+ \pal@graphpaperx=\pal@leftbleed
+ \pal@calcgraphpaperx
+
+ \ifpal@frontcover
+ \ifpal@backcover
+ \put(\pal@dimentonumber{\pal@graphpaperx},\pal@dimentonumber{\pal@graphpapery}){%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+
+ \foreach \pal@graphpaperconfigitem in \pal@graphpaperconfig {
+ \draw[line cap=rect,line width=0.05mm,step=\pal@graphpaperconfigitem,\pal@graphpapercolor,opacity=\pal@graphpaperopacity] (0pt,0pt) grid ++(\pal@pagewidth-\pal@graphpaperx+\pal@outerbleed,\paperheight-\pal@graphpapery);%
+ }
+ \end{tikzpicture}%
+ }
+ \else
+ \pal@graphpaperx=\dimexpr\pal@pagewidth+\pal@outerbleed\relax
+ \put(\pal@dimentonumber{\pal@graphpaperx},\pal@dimentonumber{\pal@graphpapery}){%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+
+ \foreach \pal@graphpaperconfigitem in \pal@graphpaperconfig {
+ \draw[line cap=rect,line width=0.05mm,step=\pal@graphpaperconfigitem,\pal@graphpapercolor,opacity=\pal@graphpaperopacity] (0pt,0pt) grid ++(\spinewidth,\paperheight-\pal@graphpapery);%
+ }
+ \end{tikzpicture}%
+ }
+ \pal@graphpaperx=\dimexpr\pal@pagewidth+\pal@outerbleed+\spinewidth\relax
+ \put(\pal@dimentonumber{\pal@graphpaperx},\pal@dimentonumber{\pal@graphpapery}){%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+
+ \foreach \pal@graphpaperconfigitem in \pal@graphpaperconfig {
+ \draw[line cap=rect,line width=0.05mm,step=\pal@graphpaperconfigitem,\pal@graphpapercolor,opacity=\pal@graphpaperopacity] (0pt,0pt) grid ++(\pal@pagewidth+\pal@outerbleed,\paperheight-\pal@graphpapery);%
+ }
+ \end{tikzpicture}%
+ }
+ \fi
+ \else
+ \ifpal@fanfold
+ \ifpal@isdoublepage
+ \put(\pal@dimentonumber{\pal@graphpaperx},\pal@dimentonumber{\pal@graphpapery}){%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+
+ \foreach \pal@graphpaperconfigitem in \pal@graphpaperconfig {
+ \draw[line cap=rect,line width=0.05mm,step=\pal@graphpaperconfigitem,\pal@graphpapercolor,opacity=\pal@graphpaperopacity] (0pt,0pt) grid ++(\paperwidth-\pal@graphpaperx,\paperheight-\pal@graphpapery);%
+ }
+ \end{tikzpicture}%
+ }
+ \else
+ \ifpal@leftpage
+ \put(\pal@dimentonumber{\pal@graphpaperx},\pal@dimentonumber{\pal@graphpapery}){%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+
+ \foreach \pal@graphpaperconfigitem in \pal@graphpaperconfig {
+ \draw[line cap=rect,line width=0.05mm,step=\pal@graphpaperconfigitem,\pal@graphpapercolor,opacity=\pal@graphpaperopacity] (0pt,0pt) grid ++(\pal@pagewidth-\pal@graphpaperx+\pal@outerbleed,\paperheight-\pal@graphpapery);%
+ }
+ \end{tikzpicture}%
+ }
+ \else
+ \pal@graphpaperx=\dimexpr\pal@pagewidth+\pal@outerbleed\relax
+ \put(\pal@dimentonumber{\pal@graphpaperx},\pal@dimentonumber{\pal@graphpapery}){%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+
+ \foreach \pal@graphpaperconfigitem in \pal@graphpaperconfig {
+ \draw[line cap=rect,line width=0.05mm,step=\pal@graphpaperconfigitem,\pal@graphpapercolor,opacity=\pal@graphpaperopacity] (0pt,0pt) grid ++(\pal@pagewidth+\pal@outerbleed,\paperheight-\pal@graphpapery);%
+ }
+ \end{tikzpicture}%
+ }
+ \fi
+ \fi
+ \else
+ \ifpal@isdoublepage
+ \ifpal@rightpage
+ \pal@calcgraphpaperoffset
+ \fi
+ \fi
+
+ \put(\pal@dimentonumber{\pal@graphpaperx},\pal@dimentonumber{\pal@graphpapery}){%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+
+ \foreach \pal@graphpaperconfigitem in \pal@graphpaperconfig {
+ \draw[line cap=rect,line width=0.05mm,step=\pal@graphpaperconfigitem,\pal@graphpapercolor,opacity=\pal@graphpaperopacity] (0pt,0pt) grid ++(\paperwidth-\pal@graphpaperx,\paperheight-\pal@graphpapery);%
+ }
+ \end{tikzpicture}%
+ }
+ \fi
+ \fi
+ \fi
+}
+
+% pages
+\newif\ifpal@isbeforepage
+\def\pal@currentbeforepage{}
+\newcommand\setbeforepage[1]{
+ \ifpal@ispage
+ \def\pal@currentbeforepage{#1}
+ \else
+ \global\def\pal@currentbeforepage{#1}
+ \fi
+}
+\def\nobeforepage{\setbeforepage{}}
+\newcommand\newbeforepage[2]{
+ \expandafter\newcommand\csname pal@before@#1\endcsname{%
+ \begingroup%
+ #2
+ \endgroup%
+ }%
+}
+\newcommand\pal@putbeforepage{
+ \ifx\pal@pagegraphic\pal@emptystring
+ \else
+ \pal@putpagegraphic
+ \fi
+ \ifx\pal@currentbeforepage\pal@emptystring
+ \else
+ \ifcsname pal@before@\pal@currentbeforepage\endcsname%
+ \pal@isbeforepagetrue
+ \csname pal@before@\pal@currentbeforepage\endcsname
+ \pal@isbeforepagefalse
+ \else
+ \pal@errmsg@undefined{before page}{\pal@currentbeforepage}
+ \fi
+ \fi
+ \pal@resetautogrid
+}
+\newcommand\pal@beforepage{
+ \pal@closerows
+ \ifx\pal@pagecolor\pal@emptystring
+ \else
+ \begingroup
+ \margin=\pal@null
+ \topmargin=\pal@null
+ \bottommargin=\pal@null
+ \innermargin=\pal@null
+ \outermargin=\pal@null
+ \setgrid{{{1}}}
+ \ifx\pal@pagecolormodel\pal@emptystring
+ \else
+ \definecolor{tmpcolor}{\pal@pagecolormodel}{\pal@pagecolor}
+ \setpagecolor{tmpcolor}
+ \fi
+ \pal@putxput[1]{0}{0}{1}{1}{%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+ \fill[\pal@pagecolor] (0,0) rectangle ++(\width,\height);
+ \end{tikzpicture}%
+ }
+ \endgroup
+ \fi
+
+ \ifpal@isemptypage
+ \else
+ \pal@putgraphpaper
+ \fi
+}
+\newcommand\pal@setuppage{
+ \global\gutter=\gutter
+ \global\margin=\margin
+ \global\innermargin=\innermargin
+ \global\outermargin=\outermargin
+ \global\bottommargin=\bottommargin
+ \global\topmargin=\topmargin
+ \ifpal@grid\global\pal@gridtrue\else\global\pal@gridfalse\fi
+ \ifpal@graphpaper\global\pal@graphpapertrue\else\global\pal@graphpaperfalse\fi
+ \ifpal@safezone\global\pal@safezonetrue\else\global\pal@safezonefalse\fi
+ \ifpal@placeholder\global\pal@placeholdertrue\else\global\pal@placeholderfalse\fi
+ \global\let\pal@defaultborderwidth\pal@defaultborderwidth
+ \global\let\pal@defaultborderradius\pal@defaultborderradius
+ \global\let\pal@defaultborderopacity\pal@defaultborderopacity
+ \global\let\pal@defaultbordercolor\pal@defaultbordercolor
+ \global\let\pal@defaultshadowsize\pal@defaultshadowsize
+ \global\let\pal@defaultshadowopacity\pal@defaultshadowopacity
+ \global\let\pal@defaultshadowcolor\pal@defaultshadowcolor
+ \global\let\pal@defaultshadowxshift\pal@defaultshadowxshift
+ \global\let\pal@defaultshadowyshift\pal@defaultshadowyshift
+ \global\let\pal@pagegraphicoptionscale\pal@pagegraphicoptionscale
+ \global\let\pal@pagegraphicoptionvpos\pal@pagegraphicoptionvpos
+ \global\let\pal@pagegraphicoptionhpos\pal@pagegraphicoptionhpos
+ \global\let\pal@pagegraphicoptionunsharp\pal@pagegraphicoptionunsharp
+
+ \pal@pagewidth=\pagewidth
+ \pal@pageheight=\pageheight
+ \pal@outerbleed=\ifdim\outerbleed=\pal@undefdim\bleed\else\outerbleed\fi
+ \pal@innerbleed=\ifdim\innerbleed=\pal@undefdim\bleed\else\innerbleed\fi
+ \pal@topbleed=\ifdim\topbleed=\pal@undefdim\bleed\else\topbleed\fi
+ \pal@bottombleed=\ifdim\bottombleed=\pal@undefdim\bleed\else\bottombleed\fi
+ \pal@outersafetymargin=\ifdim\outersafetymargin=\pal@undefdim\safetymargin\else\outersafetymargin\fi
+ \pal@innersafetymargin=\ifdim\innersafetymargin=\pal@undefdim\safetymargin\else\innersafetymargin\fi
+ \pal@topsafetymargin=\ifdim\topsafetymargin=\pal@undefdim\safetymargin\else\topsafetymargin\fi
+ \pal@bottomsafetymargin=\ifdim\bottomsafetymargin=\pal@undefdim\safetymargin\else\bottomsafetymargin\fi
+
+ \ifpal@haspages
+ \ifpal@twoside
+ \ifpal@leftpage
+ \global\pal@rightpagetrue
+ \global\pal@leftpagefalse
+ \else
+ \global\pal@rightpagefalse
+ \global\pal@leftpagetrue
+ \fi
+ \fi
+ \else
+ \pal@isinitgridfalse
+ \ifpal@beginleft
+ \global\pal@leftpagetrue
+ \fi
+ \ifpal@beginright
+ \global\pal@beginleftfalse
+ \global\pal@beginrightfalse
+ \global\pal@leftpagefalse
+ \fi
+ \ifpal@leftpage
+ \pal@haspagestrue
+ \global\pal@leftpagetrue
+ \global\pal@rightpagefalse
+ \else
+ \ifpal@fanfold
+ \global\pal@rightpagefalse
+ \global\pal@leftpagetrue
+ \setcounter{page}{0}
+ \pal@emptypage
+ \global\pal@rightpagetrue
+ \global\pal@leftpagefalse
+ \global\pal@haslastemptypagetrue
+ \else
+ \ifpal@hascover
+ \ifpal@fillpages
+ \ifpal@twoside
+ \global\pal@rightpagefalse
+ \global\pal@leftpagetrue
+ \setcounter{page}{0}
+ \pal@emptypage
+ \global\pal@rightpagetrue
+ \global\pal@leftpagefalse
+ \global\pal@haslastemptypagetrue
+ \else
+ \pal@haspagestrue
+ \global\pal@rightpagetrue
+ \fi
+ \else
+ \pal@haspagestrue
+ \global\pal@rightpagetrue
+ \fi
+ \else
+ \pal@haspagestrue
+ \global\pal@rightpagetrue
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\newcommand\pal@setupcover{
+ \pal@isinitgridfalse
+ \pal@pagewidth=\ifdim\coverwidth=\pal@undefdim\pagewidth\else\coverwidth\fi
+ \pal@pageheight=\ifdim\coverheight=\pal@undefdim\pageheight\else\coverheight\fi
+ \pal@outerbleed=\ifdim\coverouterbleed=\pal@undefdim\ifdim\coverbleed=\pal@undefdim\ifdim\outerbleed=\pal@undefdim\bleed\else\outerbleed\fi\else\coverbleed\fi\else\coverouterbleed\fi
+ \pal@innerbleed=\ifdim\coverinnerbleed=\pal@undefdim\ifdim\coverbleed=\pal@undefdim\ifdim\innerbleed=\pal@undefdim\bleed\else\innerbleed\fi\else\coverbleed\fi\else\coverinnerbleed\fi
+ \pal@topbleed=\ifdim\covertopbleed=\pal@undefdim\ifdim\coverbleed=\pal@undefdim\ifdim\topbleed=\pal@undefdim\bleed\else\topbleed\fi\else\coverbleed\fi\else\covertopbleed\fi
+ \pal@bottombleed=\ifdim\coverbottombleed=\pal@undefdim\ifdim\coverbleed=\pal@undefdim\ifdim\bottombleed=\pal@undefdim\bleed\else\bottombleed\fi\else\coverbleed\fi\else\coverbottombleed\fi
+ \pal@outersafetymargin=\ifdim\coveroutersafetymargin=\pal@undefdim\ifdim\coversafetymargin=\pal@undefdim\ifdim\outersafetymargin=\pal@undefdim\safetymargin\else\outersafetymargin\fi\else\coversafetymargin\fi\else\coveroutersafetymargin\fi
+ \pal@innersafetymargin=\ifdim\coverinnersafetymargin=\pal@undefdim\ifdim\coversafetymargin=\pal@undefdim\ifdim\innersafetymargin=\pal@undefdim\safetymargin\else\innersafetymargin\fi\else\coversafetymargin\fi\else\coverinnersafetymargin\fi
+ \pal@topsafetymargin=\ifdim\covertopsafetymargin=\pal@undefdim\ifdim\coversafetymargin=\pal@undefdim\ifdim\topsafetymargin=\pal@undefdim\safetymargin\else\topsafetymargin\fi\else\coversafetymargin\fi\else\covertopsafetymargin\fi
+ \pal@bottomsafetymargin=\ifdim\coverbottomsafetymargin=\pal@undefdim\ifdim\coversafetymargin=\pal@undefdim\ifdim\bottomsafetymargin=\pal@undefdim\safetymargin\else\bottomsafetymargin\fi\else\coversafetymargin\fi\else\coverbottomsafetymargin\fi
+}
+\newif\ifpal@pageoptiondouble
+\newif\ifpal@pageoptionfrontcover
+\newif\ifpal@pageoptionbackcover
+\newdimen\pal@backcovergutter
+\newdimen\pal@backcovermargin
+\newdimen\pal@backcovertopmargin
+\newdimen\pal@backcoverbottommargin
+\newdimen\pal@backcoverinnermargin
+\newdimen\pal@backcoveroutermargin
+\pgfkeys{
+ /pagetype/.is family,
+ /pagetype,
+ double/.is if=pal@pageoptiondouble,
+ front cover/.is if=pal@pageoptionfrontcover,
+ back cover/.is if=pal@pageoptionbackcover,
+ .unknown/.code=
+}
+\pgfkeys{
+ /page/.is family,
+ /page,
+ gutter/.store in=\pal@pageoptiongutter,
+ gutter=\gutter,
+ margin/.store in=\pal@pageoptionmargin,
+ margin=\margin,
+ top margin/.store in=\pal@pageoptiontopmargin,
+ top margin=\topmargin,
+ bottom margin/.store in=\pal@pageoptionbottommargin,
+ bottom margin=\bottommargin,
+ inner margin/.store in=\pal@pageoptioninnermargin,
+ inner margin=\innermargin,
+ outer margin/.store in=\pal@pageoptionoutermargin,
+ outer margin=\outermargin,
+ vpos/.code={\pal@gridvalign{#1}},
+ hpos/.code={\pal@gridhalign{#1}},
+ color/.store in=\pal@pageoptioncolor,
+ color=,
+ page color/.code={\setpagecolor{#1}},
+ page graphic/.code={\setpagegraphic{#1}},
+ before page/.code={\setbeforepage{#1}},
+ double/.code={},
+ front cover/.code={},
+ back cover/.code={},
+}
+\pgfkeys{
+ /backcover/.is family,
+ /backcover,
+ gutter/.store in=\pal@backcoveroptiongutter,
+ gutter=\gutter,
+ margin/.store in=\pal@backcoveroptionmargin,
+ margin=\margin,
+ top margin/.store in=\pal@backcoveroptiontopmargin,
+ top margin=\topmargin,
+ bottom margin/.store in=\pal@backcoveroptionbottommargin,
+ bottom margin=\bottommargin,
+ inner margin/.store in=\pal@backcoveroptioninnermargin,
+ inner margin=\innermargin,
+ outer margin/.store in=\pal@backcoveroptionoutermargin,
+ outer margin=\outermargin,
+ vpos/.store in=\pal@backcoveroptionvpos,
+ vpos=0.5,
+ hpos/.store in=\pal@backcoveroptionhpos,
+ hpos=0.5,
+ color/.store in=\pal@backcoveroptioncolor,
+ color=,
+ page color/.store in=\pal@backcoveroptionpagecolor,
+ page color=,
+ page graphic/.store in=\pal@backcoveroptionpagegraphic,
+ page graphic=,
+ before page/.code={},
+ double/.code={},
+ front cover/.code={},
+ back cover/.code={},
+}
+\newcommand\pal@applypageoptions[1]{
+ \pgfkeys{/page,#1}
+ \gutter=\pal@pageoptiongutter
+ \margin=\pal@pageoptionmargin
+ \topmargin=\pal@pageoptiontopmargin
+ \bottommargin=\pal@pageoptionbottommargin
+ \innermargin=\pal@pageoptioninnermargin
+ \outermargin=\pal@pageoptionoutermargin
+
+ \pal@beforepage
+}
+\newcommand\pal@applybackcoveroptions{
+ \pal@gridvalign{\pal@backcoveroptionvpos}
+ \pal@gridhalign{\pal@backcoveroptionhpos}
+
+ \ifx\pal@backcoveroptionpagecolor\pal@emptystring
+ \def\pal@pagecolor{}
+ \else
+ \setpagecolor{\pal@backcoveroptionpagecolor}
+ \fi
+ \ifx\pal@backcoveroptionpagegraphic\pal@emptystring
+ \def\pal@pagegraphic{}
+ \else
+ \def\pal@pagegraphic{\pal@backcoveroptionpagegraphicfile}
+ \def\pal@pagegraphicoptionscale{\pal@backcoveroptionpagegraphicscale}
+ \def\pal@pagegraphicoptionvpos{\pal@backcoveroptionpagegraphicvpos}
+ \def\pal@pagegraphicoptionhpos{\pal@backcoveroptionpagegraphichpos}
+ \def\pal@pagegraphicoptionunsharp{\pal@backcoveroptionpagegraphicunsharp}
+ \fi
+ \ifx\pal@backcoveroptioncolor\pal@emptystring
+ \def\pal@pageoptioncolor{\pal@backcovercolor}
+ \else
+ \def\pal@pageoptioncolor{\pal@backcoveroptioncolor}
+ \fi
+ \setborder[radius=\pal@backcoveroptionborderradius,width=\pal@backcoveroptionborderwidth,opacity=\pal@backcoveroptionborderopacity,color=\pal@backcoveroptionbordercolor]{}
+ \setshadow[size=\pal@backcoveroptionshadowsize,opacity=\pal@backcoveroptionshadowopacity,color=\pal@backcoveroptionshadowcolor,xshift=\pal@backcoveroptionshadowxshift,yshift=\pal@backcoveroptionshadowyshift]{}
+ \gutter=\pal@backcovergutter
+ \margin=\pal@backcovermargin
+ \topmargin=\pal@backcovertopmargin
+ \bottommargin=\pal@backcoverbottommargin
+ \innermargin=\pal@backcoverinnermargin
+ \outermargin=\pal@backcoveroutermargin
+
+ \ifdefined\pal@backcovergrid
+ \pal@backcovergrid
+ \fi
+
+ \pal@beforepage
+}
+\newcommand\page[2][]{
+ \pal@pageoptiondoublefalse
+ \pal@pageoptionfrontcoverfalse
+ \pal@pageoptionbackcoverfalse
+ \pgfkeys{/pagetype,#1}
+ \ifpal@pageoptiondouble
+ \pal@doublepage[#1]{#2}
+ \else
+ \ifpal@pageoptionfrontcover
+ \pal@frontcover[#1]{#2}
+ \else
+ \ifpal@pageoptionbackcover
+ \pal@backcover[#1]{#2}
+ \else
+ \pal@standardpage[#1]{#2}
+ \fi
+ \fi
+ \fi
+}
+\newcommand\pal@standardpage[2][]{
+ \global\pal@placeholdercounter=0\relax
+ \ifpal@backcover
+ \pal@setupcover
+ \else
+ \pal@setuppage
+ \fi
+ \pal@ispagetrue
+ \global\pal@topmargintmp=\topmargin\global\topmargin=\pal@undefdim
+ \pal@setdimensions
+ \ifpal@fanfold
+ \ifpal@leftpage
+ \global\pal@isfanfoldopentrue
+ \begin{picture}(\pal@dimentonumber\paperwidth,\pal@dimentonumber\paperheight)
+ \fi
+ \else
+ \begin{picture}(\pal@dimentonumber\paperwidth,\pal@dimentonumber\paperheight)
+ \fi
+ \topmargin=\pal@topmargintmp
+ \begingroup
+ \ifpal@fanfold
+ \ifpal@pagenumberinghaschanged
+ \global\pal@pagenumberinghaschangedfalse
+ \else
+ \ifpal@rightpage
+ \global\addtocounter{page}{1}
+ \fi
+ \fi
+ \fi
+ \ifpal@backcover
+ \pal@applybackcoveroptions
+ \else
+ \pal@applypageoptions{#1}
+ \fi
+ \pal@putbeforepage
+ #2
+ \pal@putbleed
+ \pal@putgrid
+ \pal@putcuttingmarks
+ \pal@putsafezone
+ \endgroup
+ \ifpal@fanfold
+ \ifpal@rightpage
+ \ifnum\pal@tocfixpageoffset=-1
+ \addtocounter{page}{-1}
+ \fi
+ \global\pal@isfanfoldopenfalse
+ \end{picture}
+ \ifnum\pal@tocfixpageoffset=-1
+ \addtocounter{page}{1}
+ \global\def\pal@tocfixpageoffset{0}
+ \fi
+ \fi
+ \else
+ \end{picture}
+ \fi
+ \global\topmargin=\pal@topmargintmp
+ \pal@ispagefalse
+}
+\newcommand\pal@doublepage[2][]{
+ \global\pal@placeholdercounter=0\relax
+ \ifpal@twoside
+ \ifpal@haspages
+ \ifpal@leftpage\page{}\fi
+ \else
+ \ifpal@beginleft
+ \ifpal@beginright
+ \page{}
+ \fi
+ \else
+ \page{}
+ \fi
+ \fi
+ \pal@ispagetrue
+ \global\pal@isdoublepagetrue
+ \pal@setuppage
+ \global\pal@topmargintmp=\topmargin\global\topmargin=\pal@undefdim
+ \pal@setdimensions
+ \begin{picture}(\pal@dimentonumber\paperwidth,\pal@dimentonumber\paperheight)
+ \topmargin=\pal@topmargintmp
+ \pal@applypageoptions{#1}
+ \pal@putbeforepage
+ #2
+ \pal@putbleed
+ \pal@putgrid
+ \pal@putcuttingmarks
+ \pal@putsafezone
+ \ifnum\pal@tocfixpageoffset=1
+ \addtocounter{page}{1}
+ \fi
+ \end{picture}
+
+ \pal@setuppage
+ \ifpal@fanfold
+ \ifnum\pal@tocfixpageoffset=1
+ \global\def\pal@tocfixpageoffset{0}
+ \else
+ \addtocounter{page}{1}
+ \fi
+ \else
+ \pal@setdimensions
+ \begin{picture}(\pal@dimentonumber\paperwidth,\pal@dimentonumber\paperheight)
+ \topmargin=\pal@topmargintmp
+ \pal@applypageoptions{#1}
+ \global\pal@placeholdercounter=0\relax
+ \pal@putbeforepage
+ #2
+ \pal@putbleed
+ \pal@putgrid
+ \pal@putcuttingmarks
+ \pal@putsafezone
+ \end{picture}
+ \fi
+ \global\pal@isdoublepagefalse
+ \global\topmargin=\pal@topmargintmp
+ \pal@ispagefalse
+ \else
+ \pal@standardpage[#1]{#2}
+ \fi
+}
+\newcommand\pal@backcover[2][]{
+ \ifpal@hascover
+ \pal@errmsg@backcoverdefinedafterfrontcover
+ \else
+ \ifdefined\pal@tmpgrid
+ \let\pal@backcovergrid\pal@tmpgrid
+ \fi
+ \edef\pal@backcovercolor{\paloptions@color}
+ \pgfkeys{/backcover,#1}
+ \pal@backcovergutter=\pal@backcoveroptiongutter
+ \pal@backcovermargin=\pal@backcoveroptionmargin
+ \pal@backcovertopmargin=\pal@backcoveroptiontopmargin
+ \pal@backcoverbottommargin=\pal@backcoveroptionbottommargin
+ \pal@backcoverinnermargin=\pal@backcoveroptioninnermargin
+ \pal@backcoveroutermargin=\pal@backcoveroptionoutermargin
+ \ifx\pal@backcoveroptionpagecolor\pal@emptystring
+ \let\pal@backcoveroptionpagecolor\pal@pagecolor
+ \fi
+ \ifx\pal@backcoveroptionpagegraphic\pal@emptystring
+ \let\pal@backcoveroptionpagegraphic\pal@pagegraphic
+ \let\pal@backcoveroptionpagegraphicfile\pal@pagegraphic
+ \ifdefined\pal@pagegraphicoptionscale
+ \let\pal@backcoveroptionpagegraphicscale\pal@pagegraphicoptionscale
+ \fi
+ \ifdefined\pal@pagegraphicoptionhpos
+ \let\pal@backcoveroptionpagegraphichpos\pal@pagegraphicoptionhpos
+ \fi
+ \ifdefined\pal@pagegraphicoptionvpos
+ \let\pal@backcoveroptionpagegraphicvpos\pal@pagegraphicoptionvpos
+ \fi
+ \ifdefined\pal@pagegraphicoptionunsharp
+ \let\pal@backcoveroptionpagegraphicunsharp\pal@pagegraphicoptionunsharp
+ \fi
+ \else
+ \ifcsname pal@graphic@\pal@backcoveroptionpagegraphic\endcsname
+ \csname pal@graphic@\pal@backcoveroptionpagegraphic\endcsname[1]{}
+ \else
+ \def\pal@backcoveroptionpagegraphicfile{\pal@backcoveroptionpagegraphic}
+ \def\pal@backcoveroptionpagegraphicscale{1}
+ \def\pal@backcoveroptionpagegraphichpos{0.5}
+ \def\pal@backcoveroptionpagegraphicvpos{0.5}
+ \def\pal@backcoveroptionpagegraphicunsharp{\pal@unsharp}
+ \fi
+ \fi
+ \let\pal@backcoveroptionborderradius\pal@defaultborderradius
+ \let\pal@backcoveroptionborderopacity\pal@defaultborderopacity
+ \let\pal@backcoveroptionborderwidth\pal@defaultborderwidth
+ \let\pal@backcoveroptionbordercolor\pal@defaultbordercolor
+ \let\pal@backcoveroptionshadowopacity\pal@defaultshadowopacity
+ \let\pal@backcoveroptionshadowsize\pal@defaultshadowsize
+ \let\pal@backcoveroptionshadowcolor\pal@defaultshadowcolor
+ \let\pal@backcoveroptionshadowxshift\pal@defaultshadowxshift
+ \let\pal@backcoveroptionshadowyshift\pal@defaultshadowyshift
+
+ \ifdefined\pal@currentcontents
+ \let\pal@backcovercontent\pal@currentcontents
+ \def\pal@backcovertemplate{#2}
+ \else
+ \def\pal@backcovercontent{#2}
+ \fi
+ \fi
+}
+\newcommand\pal@frontcover[2][]{
+ \pal@ispagetrue
+ \pal@hascovertrue
+ \pal@setupcover
+ \setcounter{page}{0}
+ \global\pal@topmargintmp=\topmargin\global\topmargin=\pal@undefdim
+ \ifpal@cover
+ \global\pal@frontcovertrue
+ \pal@setdimensions
+ \begin{picture}(\pal@dimentonumber\paperwidth,\pal@dimentonumber\paperheight)
+ \topmargin=\pal@topmargintmp
+ \global\pal@backcovertrue
+ \def\pal@currentbeforepage{}
+ \begingroup
+ \ifdefined\pal@backcovercontent
+ \pal@applybackcoveroptions
+ \pal@putbeforepage
+ \ifdefined\pal@backcovertemplate
+ \pal@placeholdercounter 0\relax%
+ \let\pal@currentcontents\pal@backcovercontent%
+ \pal@backcovertemplate%
+ \else
+ \pal@backcovercontent
+ \fi
+ \fi
+ \pal@putbleed
+ \pal@putgrid
+ \pal@putcuttingmarks
+ \pal@putsafezone
+ \endgroup
+ \global\pal@backcoverfalse
+ \pal@resetautogrid
+ \pal@gridoffsetx=\dimexpr(\pal@pagewidth + \pal@outerbleed - \pal@innerbleed + \spinewidth)\relax
+ \pal@applypageoptions{#1}
+ \global\pal@placeholdercounter=0\relax
+ \pal@putbeforepage
+ #2
+ \pal@putbleed
+ \pal@putgrid
+ \pal@putcuttingmarks
+ \pal@putsafezone
+ \end{picture}
+ \global\pal@frontcoverfalse
+ \let\pal@backcovercontent\undefined
+ \else
+ \pal@setdimensions
+ \begin{picture}(\pal@dimentonumber\paperwidth,\pal@dimentonumber\paperheight)
+ \topmargin=\pal@topmargintmp
+ \pal@applypageoptions{#1}
+ \def\pal@currentbeforepage{}
+ \pal@putbeforepage
+ #2
+ \pal@putbleed
+ \pal@putgrid
+ \pal@putcuttingmarks
+ \pal@putsafezone
+ \end{picture}
+ \fi
+ \global\topmargin=\pal@topmargintmp
+ \pal@ispagefalse
+}
+\newcommand\leftpage[1]{
+ \ifpal@leftpage
+ \pal@renderleftpage{#1}
+ \else
+ \ifpal@fanfold
+ \ifpal@isdoublepage
+ \pal@renderleftpage{#1}
+ \fi
+ \else
+ \ifpal@isdoublepage
+ \pal@renderleftpage[1]{#1}
+ \fi
+ \fi
+ \fi
+}
+\newcommand\rightpage[1]{
+ \ifpal@rightpage
+ \pal@renderrightpage{#1}
+ \else
+ \ifpal@fanfold
+ \ifpal@isdoublepage
+ \pal@renderrightpage{#1}
+ \fi
+ \else
+ \ifpal@isdoublepage
+ \pal@renderrightpage[1]{#1}
+ \fi
+ \fi
+ \fi
+}
+\newcommand\pal@renderleftpage[2][0]{
+ \begingroup
+ \pal@isdoublepagefalse
+ \pal@setdimensions
+ \pal@closerows
+ \ifnum#1=1
+ \pal@drymodetrue
+ \fi
+ #2
+ \ifnum#1=1
+ \pal@drymodefalse
+ \else
+ \ifpal@isbeforepage
+ \else
+ \pal@putgrid
+ \fi
+ \fi
+ \endgroup
+}
+\newif\ifpal@wasdoublepage
+\newif\ifpal@renderrightpage
+\newcommand\pal@renderrightpage[2][0]{
+ \pal@renderrightpagetrue
+ \begingroup
+ \ifpal@fanfold
+ \ifpal@isdoublepage
+ \pal@wasdoublepagetrue
+ \addtocounter{page}{1}
+ \fi
+ \fi
+ \pal@isdoublepagefalse
+ \pal@rightpagetrue
+ \pal@leftpagefalse
+ \pal@setdimensions
+ \pal@closerows
+ \ifnum#1=1
+ \pal@drymodetrue
+ \fi
+ #2
+ \ifnum#1=1
+ \pal@drymodefalse
+ \else
+ \ifpal@isbeforepage
+ \else
+ \pal@putgrid
+ \fi
+ \fi
+ \ifpal@fanfold
+ \ifpal@wasdoublepage
+ \pal@wasdoublepagefalse
+ \addtocounter{page}{-1}
+ \fi
+ \fi
+ \endgroup
+ \pal@renderrightpagefalse
+}
+
+% templates
+\newif\ifpal@drymode
+\newif\ifpal@placeholderoptions
+\newif\ifpal@placeholdermode
+\newif\ifpal@isplace
+\pal@placeholderoptionstrue
+\newcount\pal@placeholdercounter
+\newcount\pal@contentcounter
+\newdimen\pal@placeholderfontsize
+\def\pal@frameyymax{0}
+\def\pal@framexxmax{0}
+\def\pal@setgridframe#1 #2 #3 #4 \\{
+ \def\pal@framey{#1}
+ \def\pal@framex{#2}
+ \def\pal@frameyy{#3}
+ \def\pal@framexx{#4}
+}
+\def\pal@setdefaultgridframe#1 #2 #3 #4 \\{
+ \def\pal@defaultframey{#1}
+ \def\pal@defaultframex{#2}
+ \def\pal@defaultframeyy{#3}
+ \def\pal@defaultframexx{#4}
+ \pal@setgridframe #1 #2 #3 #4 \\
+}
+\def\pal@resetgridframe{
+ \global\pal@isplacefalse
+ \pgfmathceil{\pal@frameyy}
+ \pgfmathint{\pgfmathresult}
+ \global\edef\pal@currentrow{\pgfmathresult}
+ \ifnum\pal@currentrow>\pal@frameyymax
+ \global\edef\pal@frameyymax{\pal@currentrow}
+ \global\def\pal@framexxmax{0}
+ \fi
+ \pgfmathceil{\pal@framexx}
+ \pgfmathint{\pgfmathresult}
+ \global\edef\pal@currentcell{\pgfmathresult}
+ \ifnum\pal@currentcell>\pal@framexxmax
+ \global\edef\pal@framexxmax{\pal@currentcell}
+ \fi
+
+ \pgfmathqparse{\pal@get{\pal@frameyymax C}pt>\pal@framexxmax pt}
+ \ifnum\pgfmathresult=1
+ \global\edef\pal@framey{\the\numexpr\pal@frameyymax-1\relax}
+ \global\edef\pal@framex{\pal@framexxmax}
+ \global\edef\pal@frameyy{\pal@frameyymax}
+ \global\edef\pal@framexx{\the\numexpr\pal@framexxmax+1\relax}
+ \else
+ \ifnum\pal@frameyymax=\pal@rowscount
+ \global\pal@gridfulltrue
+ \else
+ \global\edef\pal@framey{\pal@frameyymax}
+ \global\edef\pal@framex{0}
+ \global\edef\pal@frameyy{\the\numexpr\pal@frameyymax+1\relax}
+ \global\edef\pal@framexx{1}
+ \fi
+ \fi
+}
+\newcommand\placeholder[2][0]{
+ \begingroup
+ \ifx#2\pal@emptystring
+ \else
+ \global\pal@isplacetrue
+ \fi
+ \def\pal@currentplaceholder{}
+ \ifnum#1=0
+ \global\advance \pal@placeholdercounter by 1
+ \else
+ \global\pal@placeholdercounter=#1
+ \fi
+ \pal@contentcounter 0\relax
+ \def\pal@tmp{\pal@currentcontents}
+ \pal@placeholdermode{1}
+ \pal@tmp
+ \pal@placeholdermode{0}
+ \pal@putcontent{
+ \ifx\pal@emptystring\pal@currentplaceholder
+ \ifpal@placeholder
+ \ifx#2\pal@emptystring
+ \else
+ \pal@setgridframe #2 \\
+ \fi
+ \pal@textboxheight=\dimexpr(\posy{1}{\pal@framey} - \posy{-1}{\pal@frameyy})\relax
+ \pal@textboxwidth=\dimexpr(\posx{-1}{\pal@frameyy}{-1}{\pal@framexx} - \posx{1}{\pal@framey}{1}{\pal@framex})\relax
+ \ifdim\pal@textboxwidth>\pal@textboxheight
+ \pal@placeholderfontsize=0.5\pal@textboxheight
+ \else
+ \pal@placeholderfontsize=0.5\pal@textboxwidth
+ \fi
+ \ifdim\pal@placeholderfontsize>1000pt
+ \pal@placeholderfontsize=1000pt
+ \fi
+ \pal@putxput{\pal@framey}{\pal@framex}{\pal@frameyy}{\pal@framexx}{%
+ \begin{tikzpicture}%
+ \pgflowlevelsynccm%
+ \filldraw[line width=0.1mm,draw=cyan!60,fill=cyan!30,opacity=0.3] (0,0) rectangle ++(\width,\height);
+ \ifdim\pal@placeholderfontsize>5mm
+ \node[opacity=0.3] at (0.5\width,0.5\height){
+ \fontsize{\pal@placeholderfontsize}{0pt}\selectfont\textcolor{cyan!60}{\textbf{\the\pal@placeholdercounter}}
+ };
+ \fi
+ \end{tikzpicture}%
+ }
+ \pal@resetgridframe
+ \else
+ \ifx\pal@currentplaceholdertype\pal@placeholdertypeusetext
+ \ifx#2\pal@emptystring
+ \else
+ \pal@setgridframe #2 \\
+ \fi
+ \ifx\pal@currentplaceholderoptions\pal@emptystring
+ \pal@placeholderoptionsfalse
+ \csname \pal@currentplaceholdertype\endcsname
+ \pal@placeholderoptionstrue
+ \else
+ \csname \pal@currentplaceholdertype\endcsname[\pal@currentplaceholderoptions]
+ \fi
+ \fi
+ \fi
+ \else
+ \ifx#2\pal@emptystring
+ \else
+ \pal@setgridframe #2 \\
+ \fi
+ \ifx\pal@currentplaceholderoptions\pal@emptystring
+ \pal@placeholderoptionsfalse
+ \csname \pal@currentplaceholdertype\endcsname{\pal@currentplaceholder}
+ \pal@placeholderoptionstrue
+ \else
+ \csname \pal@currentplaceholdertype\endcsname[\pal@currentplaceholderoptions]{\pal@currentplaceholder}
+ \fi
+ \fi
+ }
+ \endgroup
+}
+\newcommand\pal@graphic[2][]{
+ \advance \pal@contentcounter by 1
+ \ifnum\pal@contentcounter=\pal@placeholdercounter
+ \def\pal@currentplaceholdertype{graphic}
+ \def\pal@currentplaceholderoptions{}
+ \pgfkeys{graphic,file={#2},scale=1,vpos=0.5,hpos=0.5,unsharp=\pal@unsharp,#1}
+ \ifcsname pal@graphic@#2\endcsname%
+ \csname pal@graphic@#2\endcsname[2]{#1}%
+ \fi
+
+ \edef\pal@currentplaceholder{\pal@graphicoptionfile}
+ \fi
+}
+\newcommand\pal@xput[1]{
+ \advance \pal@contentcounter by 1
+ \ifnum\pal@contentcounter=\pal@placeholdercounter
+ \def\pal@currentplaceholdertype{xput}
+ \def\pal@currentplaceholderoptions{}
+ \def\pal@currentplaceholder{#1}
+ \fi
+}
+\newcommand\pal@tikz[1]{
+ \advance \pal@contentcounter by 1
+ \ifnum\pal@contentcounter=\pal@placeholdercounter
+ \def\pal@currentplaceholdertype{tikzgraphic}
+ \def\pal@currentplaceholderoptions{}
+ \def\pal@currentplaceholder{#1}
+ \fi
+}
+\newcommand\pal@text[2][]{
+ \advance \pal@contentcounter by 1
+ \ifnum\pal@contentcounter=\pal@placeholdercounter
+ \def\pal@currentplaceholdertype{text}
+ \def\pal@currentplaceholderoptions{}
+ \edef\pal@currentborderradius{\pal@defaultborderradius}
+ \edef\pal@currentborderwidth{\pal@defaultborderwidth}
+ \edef\pal@currentbordercolor{\pal@defaultbordercolor}
+ \edef\pal@currentborderopacity{\pal@defaultborderopacity}
+ \pgfkeys{text,name=default,color=\ifx\pal@pageoptioncolor\pal@emptystring\paloptions@color\else\pal@pageoptioncolor\fi,border radius=\pal@currentborderradius,border width=\pal@currentborderwidth,border color=\pal@currentbordercolor,border opacity=\pal@currentborderopacity,#1}
+ \def\pal@currentplaceholder{#2}
+ \fi
+}
+\def\pal@placeholdertypeusetext{usetext}
+\newcommand\pal@usetext[1][default]{
+ \advance \pal@contentcounter by 1
+ \ifnum\pal@contentcounter=\pal@placeholdercounter
+ \edef\pal@currentplaceholdertype{\pal@placeholdertypeusetext}
+ \def\pal@currentplaceholderoptions{#1}
+ \def\pal@currentplaceholder{}
+ \fi
+}
+\newcommand\pal@rendertemplate[3]{
+ \pal@placeholdercounter 0\relax%
+ \global\def\pal@currentcontents{#2}%
+ \page[#1]{%
+ #3
+ }%
+}
+\newcommand{\newtemplate}[3][]{
+ \expandafter\newcommand\csname pal@template@#2\endcsname[2][]{%
+ \pal@rendertemplate{#1,##1}{##2}{#3}
+ }%
+}
+\newcommand\template[3][]{
+ \ifcsname pal@template@#2\endcsname%
+ \else%
+ \newtemplate[]{#2}{
+ \pal@gridsc{#2}
+ }
+ \fi
+ \csname pal@template@#2\endcsname[#1]{
+ #3
+ }
+}
+\newcommand\graphic{}
+\newcommand\xput{}
+\newcommand\tikzgraphic{}
+\newcommand\usetext{}
+\newcommand\text{}
+\newcommand\pal@putcontent[1]{
+ \ifpal@drymode
+ \else
+ \begingroup
+ \ifpal@gridfull
+ \ifpal@isplace#1\fi
+ \else
+ #1
+ \fi
+ \endgroup
+ \fi
+}
+\newcommand\pal@placeholdermode[1]{
+ \pal@placeholdermodefalse
+ \ifnum#1=0%
+ \renewcommand\graphic[2][]{%
+ \pal@putcontent{%
+ \def\pal@graphicoptionfile{##2}
+ \ifpal@placeholderoptions
+ \ifcsname pal@graphic@##2\endcsname%
+ \csname pal@graphic@##2\endcsname[2]{##1}
+ \else
+ \pgfkeys{graphic,file={##2},scale=1,vpos=0.5,hpos=0.5,unsharp=\pal@unsharp,##1}
+ \fi
+ \fi
+ \pal@putgraphic{\pal@framey}{\pal@framex}{\pal@frameyy}{\pal@framexx}{\pal@graphicoptionfile}%
+ \pal@resetgridframe
+ }
+ }%
+ \renewcommand\xput[1]{%
+ \pal@putcontent{%
+ \pal@putxput{\pal@framey}{\pal@framex}{\pal@frameyy}{\pal@framexx}{##1}%
+ \pal@resetgridframe
+ }
+ }%
+ \renewcommand\tikzgraphic[1]{%
+ \pal@putcontent{%
+ \pal@puttikz{\pal@framey}{\pal@framex}{\pal@frameyy}{\pal@framexx}{##1}%
+ \pal@resetgridframe
+ }
+ }%
+ \renewcommand\usetext[1][default]{%
+ \pal@putcontent{%
+ \pal@putusetext[##1]{\pal@framey}{\pal@framex}{\pal@frameyy}{\pal@framexx}%
+ \pal@resetgridframe
+ }
+ }%
+ \renewcommand\text[2][]{%
+ \pal@putcontent{%
+ \edef\pal@currentborderradius{\pal@defaultborderradius}
+ \edef\pal@currentborderwidth{\pal@defaultborderwidth}
+ \edef\pal@currentbordercolor{\pal@defaultbordercolor}
+ \edef\pal@currentborderopacity{\pal@defaultborderopacity}
+ \pgfkeys{text,name=default,color=\ifx\pal@pageoptioncolor\pal@emptystring\paloptions@color\else\pal@pageoptioncolor\fi,border radius=\pal@currentborderradius,border width=\pal@currentborderwidth,border color=\pal@currentbordercolor,border opacity=\pal@currentborderopacity,##1}
+ \pal@puttext{\pal@framey}{\pal@framex}{\pal@frameyy}{\pal@framexx}{##2}%
+ \pal@resetgridframe
+ }
+ }%
+ \else%
+ \pal@placeholdermodetrue
+ \renewcommand\graphic[2][]{%
+ \pal@graphic[##1]{##2}%
+ }%
+ \renewcommand\xput[1]{%
+ \pal@xput{##1}%
+ }%
+ \renewcommand\tikzgraphic[1]{%
+ \pal@tikz{##1}%
+ }%
+ \renewcommand\usetext[1][default]{%
+ \pal@usetext[##1]%
+ }
+ \renewcommand\text[2][]{%
+ \pal@text[##1]{##2}%
+ }
+ \fi%
+}
+\pal@placeholdermode{0}
+\newcommand\place[1]{
+ \pal@isplacetrue
+ \pal@setgridframe #1 \\
+}
+\pal@setdefaultgridframe 0 0 1 1 \\
+
+\newcommand\pal@emptypage{
+ \global\pal@isemptypagetrue
+ \page[before page=,page graphic=,page color=]{}
+ \global\pal@isemptypagefalse
+}
+
+\def\pal@tocfixpageoffset{0}
+\def\sectioncalled{
+ \ifpal@fanfold
+ \ifpal@isdoublepage
+ \ifpal@rightpage
+ \global\def\pal@tocfixpageoffset{1}
+ \fi
+ \else
+ \ifpal@renderrightpage
+ \global\def\pal@tocfixpageoffset{1}
+ \else
+ \ifpal@leftpage
+ \global\def\pal@tocfixpageoffset{-1}
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\def\pal@turbojobname{pagelayoutturbobatchoptimizexyz}
+\edef\pal@turbojobname{\meaning\pal@turbojobname}
+\edef\pal@jobname{\jobname}
+\edef\pal@jobname{\meaning\pal@jobname}
+\AtBeginDocument{
+ % fanfold toc partial fix
+ \let\pal@originalsection\section
+ \def\pal@nextsection#1{
+ \sectioncalled
+ \@ifnextchar\bgroup{\pal@originalsection*}{\pal@originalsection{#1}}}
+ \let\section\pal@nextsection
+ \let\pal@originalsubsection\subsection
+ \def\pal@nextsubsection#1{
+ \sectioncalled
+ \@ifnextchar\bgroup{\pal@originalsubsection*}{\pal@originalsubsection{#1}}}
+ \let\subsection\pal@nextsubsection
+
+ \ifpal@optimize
+ \else
+ \pal@isturbomodefalse
+ \fi
+
+ \ifpal@isturbomode
+ \ifx\pal@jobname\pal@turbojobname
+ \pal@placeholderfalse
+ \pal@gridfalse
+ \pal@safezonefalse
+ \pal@cuttingmarksfalse
+ \pal@fillpagesfalse
+ \pal@graphpaperfalse
+ \pal@preflightfalse
+
+ \pal@isbatchmodetrue
+ \else
+ \pal@start
+ \fi
+ \else
+ \ifpal@import
+ \pal@start
+ \fi
+ \fi
+
+ \ifx\pal@pagegraphic\pal@emptystring
+ \ifx\paloptions@pagegraphic\pal@emptystring
+ \else
+ \setpagegraphic{\paloptions@pagegraphic}
+ \fi
+ \fi
+
+ \ifpal@fanfold
+ \pal@covertrue
+ \fi
+}
+\AtEndDocument{
+ \ifpal@beginleft
+ \ifpal@leftpage
+ \pal@hasoddnumberofpagestrue
+ \fi
+ \else
+ \ifpal@rightpage
+ \pal@hasoddnumberofpagestrue
+ \fi
+ \fi
+ \ifdefined\pal@backcovercontent
+ \pal@haspagestrue
+ \ifpal@haslastemptypage
+ \ifpal@hasoddnumberofpages
+ \pal@standardpage[before page=]{}
+ \pal@emptypage
+ \else
+ \pal@emptypage
+ \fi
+ \else
+ \ifpal@twoside
+ \ifpal@hasoddnumberofpages\page[before page=]{}\fi
+ \fi
+ \fi
+ \pal@leftpagetrue
+ \pal@rightpagefalse
+ \pal@backcovertrue
+ \ifdefined\pal@backcovertemplate
+ \pal@placeholdercounter 0\relax%
+ \let\pal@currentcontents\pal@backcovercontent%
+ \def\pal@currentbeforepage{}
+ \pal@standardpage{%
+ \pal@backcovertemplate%
+ }%
+ \else
+ \def\pal@currentbeforepage{}
+ \pal@standardpage{
+ \pal@backcovercontent
+ }
+ \fi
+ \else
+ \ifpal@haspages
+ \ifpal@fanfold
+ \ifpal@isfanfoldopen
+ \ifpal@beginleft
+ \pal@standardpage[before page=]{}
+ \else
+ \pal@emptypage
+ \fi
+ \else
+ \ifpal@beginleft
+ \else
+ \pal@standardpage[before page=]{}
+ \pal@emptypage
+ \fi
+ \fi
+ \else
+ \ifpal@haslastemptypage
+ \ifpal@hasoddnumberofpages
+ \pal@standardpage[before page=]{}
+ \pal@emptypage
+ \else
+ \pal@emptypage
+ \fi
+ \else
+ \ifpal@twoside
+ \ifpal@hasoddnumberofpages\pal@standardpage[before page=]{}\fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifpal@isbatchmode
+ \pal@batchoptimize
+ \fi
+}
+
+% scripts
+\newread\pal@scriptresult
+\def\pal@batchlist{}
+\def\pal@ok{ok}
+\def\pal@err@shellaccessforbidden{errorshellaccessforbidden}
+\def\pal@err@importdirnotfound{errorimportdirnotfound}
+\def\pal@err@noimportdir{errornoimportdir}
+\def\pal@err@magicknotinstalled{errormagicknotinstalled}
+\def\pal@err@inkscapenotinstalled{errorinkscapenotinstalled}
+\newcommand\pal@getppi[1]{
+ \immediate\openin\pal@scriptresult={|pagelayoutapi getwidth\% "#1"}
+ \ifeof\pal@scriptresult
+ \pal@errmsg@shellaccessforbidden{Ppi not calculated}
+ \else
+ \endlinechar=-1
+ \read\pal@scriptresult to \pal@graphicwidth
+ \endlinechar=13
+ \ifx\pal@graphicwidth\pal@emptystring
+ \pal@errmsg@shellaccessfailed{Ppi not calculated}
+ \else
+ \ifx\pal@graphicwidth\pal@err@magicknotinstalled
+ \pal@errmsg@magicknotinstalled{Ppi not calculated}
+ \else
+ \pgfmathqparse{(\pal@originalgraphicwidth - \pal@cropleft - \pal@cropright) / \pal@originalgraphicwidth * \pal@graphicwidth pt / \the\width * 72.27pt}
+
+ \pgfmathint{\pgfmathresult}
+ \edef\pal@graphicdensity{\pgfmathresult}
+ \fi
+ \fi
+ \fi
+ \immediate\closein\pal@scriptresult
+}
+\newcommand\pal@optimizegraphic[2]{
+ \immediate\openin\pal@scriptresult={|pagelayoutapi optimize\% "#1#2" \% "\pal@filename" \%\pal@optimizedext\%\the\numexpr\pal@originalgraphicwidth\%\the\numexpr\pal@originalgraphicheight\%\the\numexpr\pal@cropleft\%\the\numexpr\pal@cropright\%\the\numexpr\pal@croptop\%\the\numexpr\pal@cropbottom\%\the\numexpr\pal@density\%\the\numexpr\width\%\the\numexpr\height\%\pal@downsamplethreshold\%\pal@graphicoptionunsharp\%\pal@quality}
+ \ifeof\pal@scriptresult
+ \pal@errmsg@shellaccessforbidden{File not optimized}
+ \else
+ \endlinechar=-1
+ \read\pal@scriptresult to \pal@processresult
+ \endlinechar=13
+ \ifx\pal@processresult\pal@emptystring
+ \pal@errmsg@shellaccessfailed{File not optimized}
+ \else
+ \ifx\pal@processresult\pal@err@magicknotinstalled
+ \pal@errmsg@magicknotinstalled{File not optimized}
+ \fi
+ \fi
+ \fi
+ \immediate\closein\pal@scriptresult
+}
+\newcommand\pal@makeshadow[1]{
+ \immediate\openin\pal@scriptresult={|pagelayoutapi makeshadow\%#1\%\pal@defaultshadowsize\%\pal@defaultshadowopacity\%\pal@defaultshadowcolor\%\the\pal@frameshadowwidth\%\the\pal@frameshadowheight\%\the\pal@frameshadowframewidth\%\the\pal@frameshadowframeheight\%\the\pal@frameshadowborder\%\the\pal@frameshadowradius}
+ \ifeof\pal@scriptresult
+ \edef\pal@processresult{\pal@err@shellaccessforbidden}
+ \pal@errmsg@shellaccessforbidden{Shadow not created}
+ \else
+ \endlinechar=-1
+ \read\pal@scriptresult to \pal@processresult
+ \endlinechar=13
+ \ifx\pal@processresult\pal@emptystring
+ \pal@errmsg@shellaccessfailed{Shadow not created}
+ \else
+ \ifx\pal@processresult\pal@err@inkscapenotinstalled
+ \pal@errmsg@inkscapenotinstalled{Shadow not created}
+ \else
+ \fi
+ \fi
+ \fi
+ \immediate\closein\pal@scriptresult
+}
+\def\pal@start{
+ \immediate\openin\pal@scriptresult={|pagelayoutapi start\ifpal@import\%import\% "\ifdefined\Ginput@path\Ginput@path\fi" \fi\ifpal@isturbomode\%turbo\% "\jobname" \fi}
+ \ifeof\pal@scriptresult
+ \ifpal@import
+ \pal@errmsg@shellaccessforbidden{Import not working}
+ \fi
+ \else
+ \endlinechar=-1
+ \read\pal@scriptresult to \pal@processresult
+ \endlinechar=13
+ \ifx\pal@processresult\pal@emptystring
+ \ifpal@import
+ \pal@errmsg@shellaccessfailed{Import not working}
+ \fi
+ \else
+ \ifx\pal@processresult\pal@ok
+ \else
+ \ifx\pal@processresult\pal@err@noimportdir
+ \pal@errmsg@noimportdir
+ \else
+ \pal@errmsg@importdirnotfound{\pal@processresult}
+ \fi
+ \fi
+ \fi
+ \fi
+ \immediate\closein\pal@scriptresult
+}
+\newcommand\pal@addtobatchlist[2]{
+ \global\edef\pal@batchlist{\pal@batchlist\% "#1#2" \% "\pal@filename" \%\pal@optimizedext\%\the\numexpr\pal@originalgraphicwidth\%\the\numexpr\pal@originalgraphicheight\%\the\numexpr\pal@cropleft\%\the\numexpr\pal@cropright\%\the\numexpr\pal@croptop\%\the\numexpr\pal@cropbottom\%\the\numexpr\pal@density\%\the\numexpr\width\%\the\numexpr\height\%\pal@downsamplethreshold\%\pal@graphicoptionunsharp\%\pal@quality}
+}
+\newcommand\pal@batchoptimize{
+ \immediate\openin\pal@scriptresult={|pagelayoutapi batchoptimize\pal@batchlist}
+ \ifeof\pal@scriptresult
+ \else
+ \endlinechar=-1
+ \read\pal@scriptresult to \pal@processresult
+ \endlinechar=13
+ \fi
+ \immediate\closein\pal@scriptresult
+}
+
+% errors
+\def\pal@errmsg@undefined#1#2{
+ \ifx#2\pal@emptystring
+ \else
+ \ClassError{pagelayout}{Undefined #1 `#2'}{Check the name `#2'.\MessageBreak\MessageBreak\@ehc}
+ \fi
+}
+\def\pal@errmsg@backcoverdefinedafterfrontcover{
+ \ClassError{pagelayout}{Back cover needs to be defined before front cover}{Define the back cover before the front cover.\MessageBreak\MessageBreak\@ehc}
+}
+\def\pal@errmsg@shellaccessforbidden#1{
+ \ClassError{pagelayout}{Shell access forbidden. #1}{Make sure `pagelayoutapi' is added to the list of shell escape commands\MessageBreak(shell_escape_commands = pagelayoutapi) in your `texmf.cnf'.\MessageBreak\MessageBreak\@ehc}
+}
+\def\pal@errmsg@shellaccessfailed#1{
+ \ifdefined\XeTeXversion
+ \ClassError{pagelayout}{Shell access failed. #1}{Make sure the `scripts' folder is added to your path.\MessageBreak\MessageBreak\@ehc}
+ \else
+ \ClassError{pagelayout}{Shell access failed. #1}{Make sure the `scripts' folder is added to your path.\MessageBreak Shell access does not work in unrestricted mode (--shell-escape).\MessageBreak Make sure `pagelayoutapi' is added to the list of shell escape commands\MessageBreak(shell_escape_commands = pagelayoutapi) in your `texmf.cnf'.\MessageBreak\MessageBreak\@ehc}
+ \fi
+}
+\def\pal@errmsg@inkscapenotinstalled#1{
+ \ClassError{pagelayout}{Inkscape not installed. #1}{Make sure Inkscape is installed.\MessageBreak\MessageBreak\@ehc}
+}
+\def\pal@errmsg@magicknotinstalled#1{
+ \ClassError{pagelayout}{ImageMagick not installed. #1}{Make sure ImageMagick is installed.\MessageBreak\MessageBreak\@ehc}
+}
+\def\pal@errmsg@importdirnotfound#1{
+ \ClassError{pagelayout}{Import directory `#1' not found}{Create the directory `#1'.\MessageBreak\MessageBreak\@ehc}
+}
+\def\pal@errmsg@noimportdir{
+ \ClassError{pagelayout}{Import directory not found}{Create the directory `import' in your working directory\MessageBreak or define the shell variable `PAGELAYOUT_IMPORT_DIRECTORY'.\MessageBreak\MessageBreak\@ehc}
+}
+\def\pal@errmsg@lowdensity#1#2#3{
+ \ifnum#1=0
+ \ClassWarning{pagelayout}{The file `#2' has a low pixel density of #3 ppi}
+ \else
+ \ClassError{pagelayout}{The file `#2' has a very low a pixel density of #3 ppi}{Replace the image with one of higher resolution or reduce the display size.\MessageBreak\MessageBreak\@ehc}
+ \fi
+}
diff --git a/macros/latex/contrib/semantex/semantex.pdf b/macros/latex/contrib/semantex/semantex.pdf
index 62ad68d435..d4b7509376 100644
--- a/macros/latex/contrib/semantex/semantex.pdf
+++ b/macros/latex/contrib/semantex/semantex.pdf
Binary files differ
diff --git a/macros/latex/contrib/semantex/semantex.sty b/macros/latex/contrib/semantex/semantex.sty
index 0543e3c030..6f5cbd6817 100644
--- a/macros/latex/contrib/semantex/semantex.sty
+++ b/macros/latex/contrib/semantex/semantex.sty
@@ -1,5 +1,5 @@
\RequirePackage{xparse,l3keys2e,leftindex,semtex}
-\ProvidesExplPackage{semantex}{2022/12/03}{0.523}{}
+\ProvidesExplPackage{semantex}{2023/01/23}{0.525}{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
@@ -10,7 +10,7 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\tl_set:Nn\SemantexVersion{0.523}
+\tl_set:Nn\SemantexVersion{0.525}
\cs_set_eq:NN \semantex_keyval_parse:NNn \keyval_parse:NNn
\cs_set:Npn \semantex_singlekey_parse:Nn#1#2 { \clist_map_function:nN { #2 } #1 }
@@ -322,7 +322,7 @@
}
}
{
- \semantex_new_object:NNnn #1 ##1 {
+ \semantex_new_object_and_do:NNnn #1 ##1 {
\semantex_object_set_keys:Nn ##1 { ##3 }
}
{
@@ -347,7 +347,7 @@
}
}
{
- \semantex_declare_object:NNnn #1 ##1 {
+ \semantex_declare_object_and_do:NNnn #1 ##1 {
\semantex_object_set_keys:Nn ##1 { ##3 }
}
{
@@ -8817,6 +8817,13 @@
\semantex_data_bool_set_true:nn { ##1 } { next~arg~with~sep }
}
},
+ {no~sep}{
+ execute={
+ \semantex_data_tl_put_right:nnn { ##1 } { arg } { #1 }
+ \semantex_data_int_incr:nn { ##1 } { number~of~arguments }
+ \semantex_data_bool_set_true:nn { ##1 } { next~arg~with~sep }
+ }
+ },
{comma}{
execute={
\semantex_data_bool_get:nnTF { ##1 } { next~arg~with~sep }
diff --git a/macros/latex/contrib/semantex/semantex.tex b/macros/latex/contrib/semantex/semantex.tex
index 5868300ec0..2658b2f3fa 100644
--- a/macros/latex/contrib/semantex/semantex.tex
+++ b/macros/latex/contrib/semantex/semantex.tex
@@ -5447,7 +5447,13 @@ These are the predefined keys that work inside the argument.
Adds the \<value\> to the argument,
separated from any previous argument
by the default separator.
-
+
+ \item
+ \mylst!no sep={$\<value\>$}!
+
+ Adds the \<value\> to the argument,
+ with no separator from any previous argument.
+
\item
\mylst!comma={$\<value\>$}!
diff --git a/macros/latex/contrib/semantex/stripsemantex.lua b/macros/latex/contrib/semantex/stripsemantex.lua
index 30d4c58be6..d0eb5d1963 100644
--- a/macros/latex/contrib/semantex/stripsemantex.lua
+++ b/macros/latex/contrib/semantex/stripsemantex.lua
@@ -1,311 +1,311 @@
--- aliases for protected environments
-local assert, io_open
- = assert, io.open
-
--- load the ltn12 module
-local ltn12 = require("ltn12")
-
--- No more global accesses after this point
-if _VERSION == "Lua 5.2" then _ENV = nil end
-
--- copy a file
-copy_file = function(path_src, path_dst)
- ltn12.pump.all(
- ltn12.source.file(assert(io_open(path_src, "rb"))),
- ltn12.sink.file(assert(io_open(path_dst, "wb")))
- )
-end
-
-openFile = function(file)
- f = io.open(file, "r")
- filecontent = f:read("*all")
- local beginDocPosition = filecontent:find('\\begin{document}')
- if not beginDocPosition then
- tex.sprint( [[\begingroup\ExplSyntaxOn
- \msg_fatal:nnn { stripsemantex } { begin_document_not_found } { ]] .. file .. [[ }
- \endgroup]] )
- return
- end
- precontent = filecontent:sub(1,beginDocPosition-1)
- content = filecontent:sub(beginDocPosition,-1)
- f:close()
-end
-
-closeFile = function(file)
- f = io.open(file, "w")
- f:write(precontent .. content)
- f:close()
-end
-
-removeStricttexFormatting = function(str)
- -- We do this in case the package "stricttex" was used
- str = str:gsub('numberZERO','0')
- str = str:gsub('numberONE','1')
- str = str:gsub('numberTWO','2')
- str = str:gsub('numberTHREE','3')
- str = str:gsub('numberFOUR','4')
- str = str:gsub('numberFIVE','5')
- str = str:gsub('numberSIX','6')
- str = str:gsub('numberSEVEN','7')
- str = str:gsub('numberEIGHT','8')
- str = str:gsub('numberNINE','9')
- str = str:gsub('symbolPRIME','\'')
- return str
-end
-
-addIDsToRegisters = function(str)
- str = removeStricttexFormatting(str)
- content = content:gsub('\\' .. str .. '([^%a])' ,'\\SemantexID{}\\' .. str .. '%1')
- -- '%f[^%a]' does not work here, as it will not react if the last character of str is a number,
- -- which stricttex allows.
- -- Because of this choice, there will be an issue if you use stricttex and let
- -- \<command> by a SemanTeX command and \<command>' be a non-SemanTeX command.
- -- So simply *don't do that*.
-end
-
-removeSuperfluousIDs = function()
- local p = content:find('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)')
- while p do
- content = content:gsub('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)','%1%2')
- p = content:find('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)')
- end
- content = content:gsub('parent(%s*)=(%s*)\\SemantexID{}','parent%1=%2')
- content = content:gsub('class(%s*)=(%s*)\\SemantexID{}','class%1=%2')
- content = content:gsub('clone(%s*)=(%s*)\\SemantexID{}','clone%1=%2')
- content = content:gsub('copy(%s*)=(%s*)\\SemantexID{}','copy%1=%2')
- content = content:gsub('\\New(%w+)Class(%s*{?)\\SemantexID{}','\\New%1Class%2')
- content = content:gsub('\\NewObject(%s*{?%s*)\\SemantexID{}(\\%w+%s*}?%s*{?%s*)\\SemantexID{}', '\\NewObject%1%2')
- content = content:gsub('\\SetupClass(%s*{?%s*)\\SemantexID{}', '\\SetupClass%1')
- content = content:gsub('\\SetupObject(%s*{?%s*)\\SemantexID{}', '\\SetupObject%1')
-end
-
-addNumbersToIDs = function()
- local n = 0
- local p,q = string.find(content,'\\SemantexID{}')
- while q do
- n = n + 1
- content = content:sub(1,q-1) .. n .. content:sub(q,-1)
- p, q = string.find(content,'\\SemantexID{}')
- end
-end
-
-semantexIDluacommand = function(id, source, output)
- local p, q = string.find(content, '\\SemantexID{' .. id .. '}')
-
- while p do
- content = content:sub(1,p-1) .. content:sub(q+1,-1)
-
- source = source:gsub('%s+', '')
-
- -- We do this in case the package "stricttex" was used
- source = removeStricttexFormatting(source)
-
- -- This is because #1's in the code becomes ##1
- -- in the .semtex file.
- source = source:gsub('#(%d)', '%1')
-
- local length = source:len()
-
- local i = 1
-
- local s
-
- while i <= length do
- s = content:sub(p,p)
- if s == source:sub(i,i) then
- content = content:sub(1 , p-1) .. content:sub(p+1, -1)
- i = i + 1
- elseif s:match('%s') then
- content = content:sub(1, p-1) .. content:sub(p+1, -1)
- elseif s == '%' then
- content = content:sub(1 , p-1) .. content:sub(p,-1):gsub('%%.-\n','',1)
- elseif s == '{' then
- -- In this case, we remove the corresponding right brace,
- -- once we find it
- local netto = 1 -- The current brace group level
- local q = 0 -- The position we have moved forward so far
- while netto > 0 do
- q = q + 1
- local e = content:sub(p+q,p+q)
- if e == '}' then
- netto = netto - 1
- elseif e == '{' then
- netto = netto + 1
- elseif e == '\\' then
- q = q + 1
- elseif e == '%' then
- content = content:sub(1, p+q-1) .. content:sub(p+q,-1):gsub('%%.-\n','',1)
- q = q - 1
- end
- end
- content = content:sub(1,p-1) .. content:sub(p+1,p+q-1) .. content:sub(p+q+1,-1)
- elseif s == '<' and content:sub(p+1,p+2) == '[>' then
- content = content:sub(1,p-1) .. content:sub(p+3,-1)
- i = i + 1
- elseif s == '<' and content:sub(p+1,p+2) == ']>' then
- content = content:sub(1,p-1) .. content:sub(p+3,-1)
- i = i + 1
- elseif source:sub(i,i) == '{' then
- -- In this case, we remove the corresponding right brace,
- -- once we find it
- local netto = 1 -- The current brace group level
- local q = 0 -- The position we have moved forward so far
- while netto > 0 do
- q = q + 1
- local e = source:sub(i+q,i+q)
- if e == '}' then
- netto = netto - 1
- elseif e == '{' then
- netto = netto + 1
- elseif e == '\\' then
- q = q + 1
- -- there is no chance that the source contains an unescaped %, so we do not
- -- check for this
- end
- end
- source = source:sub(1,i-1) .. source:sub(i+1,i+q-1) .. source:sub(i+q+1,-1)
- length = source:len()
- else
- tex.sprint( [[\begingroup\ExplSyntaxOn
- \msg_fatal:nnnn { stripsemantex } { source_not_expected } { ]] .. source:sub(i,i) .. [[ } { ]] .. s .. [[ }
- \endgroup]] )
- break
- end
- end
-
-
- output = output:gsub('%s*\\sp {', '^{')
- output = output:gsub('%s*\\sb {', '_{')
- output = output:gsub('\\mathopen \\big ', '\\bigl')
- output = output:gsub('\\mathclose \\big ', '\\bigr')
- output = output:gsub('\\mathopen \\Big ', '\\Bigl')
- output = output:gsub('\\mathclose \\Big ', '\\Bigr')
- output = output:gsub('\\mathopen \\bigg ', '\\biggl')
- output = output:gsub('\\mathclose \\bigg ', '\\biggr')
- output = output:gsub('\\mathopen \\Bigg ', '\\Biggl')
- output = output:gsub('\\mathclose \\Bigg ', '\\Biggr')
- output = output:gsub('\\mathopen %(', '(')
- output = output:gsub('\\mathclose %)', ')')
- output = output:gsub('\\mathopen %[', '[')
- output = output:gsub('\\mathclose %]', ']')
- output = output:gsub('\\mathopen \\{', '\\{')
- output = output:gsub('\\mathclose \\}', '\\}')
- output = output:gsub('\\mathopen \\lbrace', '\\lbrace')
- output = output:gsub('\\mathclose \\rbrace', '\\rbrace')
- output = output:gsub('\\mathopen \\lbrack', '\\lbrack')
- output = output:gsub('\\mathclose \\rbrack', '\\rbrack')
- output = output:gsub('\\mathopen \\langle', '\\langle')
- output = output:gsub('\\mathclose \\rangle', '\\rangle')
- output = output:gsub('\\mathopen \\lvert', '\\lvert')
- output = output:gsub('\\mathclose \\rvert', '\\rvert')
- output = output:gsub('\\mathopen \\vert', '\\lvert')
- output = output:gsub('\\mathclose \\vert', '\\rvert')
- output = output:gsub('\\mathopen \\lVert', '\\lVert')
- output = output:gsub('\\mathclose \\rVert', '\\rVert')
- output = output:gsub('\\mathopen \\Vert', '\\lVert')
- output = output:gsub('\\mathclose \\Vert', '\\rVert')
- output = output:gsub('%^{\\prime }', '\'')
- output = output:gsub('%^{\\prime \\prime }', '\'\'')
- output = output:gsub('%^{\\prime \\prime \\prime }', '\'\'\'')
- output = output:gsub('%^{\\prime \\prime \\prime \\prime }', '\'\'\'\'')
- output = output:gsub('%^{\\prime \\prime \\prime \\prime \\prime }', '\'\'\'\'\'')
-
- output = output:gsub('%s+%f[{}%[%]%(%)%$,]','')
- output = output:gsub('([}%]%)])%f[\\%w%+%-%(%[=]', '%1 ')
- output = output:gsub(',',', ')
- output = output:gsub('%s+$', '')
-
-
- -- We now check whether the string we add will follow right
- -- after a control sequence, causing it to be interpreted
- -- as part of that control sequence.
- -- Because we want to allow the user to use stricttex, we
- -- check for alphanumerical control sequences rather than
- -- just alphabetic ones. This could add spaces that
- -- the user might not have intended, but it's a minor issue.
- if output:sub(1,1):match('%w') and content:sub(1, p-1):match('\\%w+$') then
- content = content:sub(1,p-1) .. ' ' .. output .. content:sub(p,-1)
- else
- content = content:sub(1,p-1) .. output .. content:sub(p,-1)
- end
- p, q = string.find(content, '\\SemantexID{' .. id .. '}')
- end
-end
-
-stripRemainingSemantexIDs = function()
- content = content:gsub('\\SemantexID{%d+}', '')
-end
-
-removeParenthesisCommands = function()
- content = content:gsub('\\SemantexMathOpen \\bigg%s?', '\\biggl')
- content = content:gsub('\\SemantexMathClose \\bigg%s?', '\\biggr')
- content = content:gsub('\\SemantexMathOpen \\Bigg%s?', '\\Biggl')
- content = content:gsub('\\SemantexMathClose \\Bigg%s?', '\\Biggr')
- content = content:gsub('\\SemantexMathOpen \\big%s?', '\\bigl')
- content = content:gsub('\\SemantexMathClose \\big%s?', '\\bigr')
- content = content:gsub('\\SemantexMathOpen \\Big%s?', '\\Bigl')
- content = content:gsub('\\SemantexMathClose \\Big%s?', '\\Bigr')
- content = content:gsub('\\SemantexMathOpen{} %(', '(')
- content = content:gsub('%s*\\SemantexMathClose{}%)', ')')
- content = content:gsub('\\SemantexMathOpen{} %[', '[')
- content = content:gsub('%s*\\SemantexMathClose{}%]', ']')
- content = content:gsub('\\SemantexMathOpen{} \\{', '\\{')
- content = content:gsub('%s*\\SemantexMathClose{} \\}', '\\}')
- content = content:gsub('\\SemantexMathOpen{} \\lbrace', '\\lbrace')
- content = content:gsub('\\SemantexMathClose{} \\rbrace', '\\rbrace')
- content = content:gsub('\\SemantexMathOpen{} \\lbrack', '\\rbrack')
- content = content:gsub('\\SemantexMathClose{} \\rbrack', '\\rbrack')
- content = content:gsub('\\SemantexMathOpen{} \\langle', '\\langle')
- content = content:gsub('\\SemantexMathClose{} \\rangle', '\\rangle')
- content = content:gsub('\\SemantexMathOpen{} \\lvert', '\\lvert')
- content = content:gsub('\\SemantexMathClose{} \\rvert', '\\rvert')
- content = content:gsub('\\SemantexMathOpen{} \\vert', '\\lvert')
- content = content:gsub('\\SemantexMathClose{} \\vert', '\\rvert')
- content = content:gsub('\\SemantexMathOpen{} \\lVert', '\\lVert')
- content = content:gsub('\\SemantexMathClose{} \\rVert', '\\rVert')
- content = content:gsub('\\SemantexMathOpen{} \\Vert', '\\lVert')
- content = content:gsub('\\SemantexMathClose{} \\Vert', '\\rVert')
- content = content:gsub('\\SemantexMathOpen{} .%s?', '')
- content = content:gsub('\\SemantexMathClose{} .%s?', '')
- content = content:gsub('\\SemantexMathOpen{}', '\\mathopen ')
- content = content:gsub('\\SemantexMathClose{}', '\\mathclose ')
- content = content:gsub('\\SemantexMathOpenAuto%s?', '\\SemantexLeft')
- content = content:gsub('\\SemantexMathCloseAuto%s?', '\\SemantexRight')
- content = content:gsub('\\SemantexMathOpenNoPar%s?', '')
- content = content:gsub('\\SemantexMathCloseNoPar%s?', '')
- content = content:gsub('\\SemantexMathOpen%s?', '\\mathopen')
- content = content:gsub('\\SemantexMathClose%s?', '\\mathclose')
-end
-
-stripComments = function()
- content = content:gsub('\\%%', '\\StripSemantexEscapedPercent')
- content = content:gsub('(\\%w+)%%.-\n%s*', '%1 ')
- content = content:gsub('%%.-\n%s*', '')
- content = content:gsub('\\StripSemantexEscapedPercent', '\\%%')
-end
-
-addSemtexPackageToFile = function()
- content = [[% The following was added by "stripsemantex":
-
-\usepackage{semtex,leftindex,graphicx}
-
-\providecommand\SemantexLeft{%
- \mathopen{}\mathclose\bgroup\left
-}
-
-\providecommand\SemantexRight{%
- \aftergroup\egroup\right
-}
-
-\makeatletter
-\DeclareRobustCommand\SemantexBullet{%
- \mathord{\mathpalette\SemantexBullet@{0.5}}%
-}
-\newcommand\SemantexBullet@[2]{%
- \vcenter{\hbox{\scalebox{#2}{$\m@th#1\bullet$}}}%
-}
-\DeclareRobustCommand\SemantexDoubleBullet{\SemantexBullet \SemantexBullet}
-\makeatother
-
-]] .. content
+-- aliases for protected environments
+local assert, io_open
+ = assert, io.open
+
+-- load the ltn12 module
+local ltn12 = require("ltn12")
+
+-- No more global accesses after this point
+if _VERSION == "Lua 5.2" then _ENV = nil end
+
+-- copy a file
+copy_file = function(path_src, path_dst)
+ ltn12.pump.all(
+ ltn12.source.file(assert(io_open(path_src, "rb"))),
+ ltn12.sink.file(assert(io_open(path_dst, "wb")))
+ )
+end
+
+openFile = function(file)
+ f = io.open(file, "r")
+ filecontent = f:read("*all")
+ local beginDocPosition = filecontent:find('\\begin{document}')
+ if not beginDocPosition then
+ tex.sprint( [[\begingroup\ExplSyntaxOn
+ \msg_fatal:nnn { stripsemantex } { begin_document_not_found } { ]] .. file .. [[ }
+ \endgroup]] )
+ return
+ end
+ precontent = filecontent:sub(1,beginDocPosition-1)
+ content = filecontent:sub(beginDocPosition,-1)
+ f:close()
+end
+
+closeFile = function(file)
+ f = io.open(file, "w")
+ f:write(precontent .. content)
+ f:close()
+end
+
+removeStricttexFormatting = function(str)
+ -- We do this in case the package "stricttex" was used
+ str = str:gsub('numberZERO','0')
+ str = str:gsub('numberONE','1')
+ str = str:gsub('numberTWO','2')
+ str = str:gsub('numberTHREE','3')
+ str = str:gsub('numberFOUR','4')
+ str = str:gsub('numberFIVE','5')
+ str = str:gsub('numberSIX','6')
+ str = str:gsub('numberSEVEN','7')
+ str = str:gsub('numberEIGHT','8')
+ str = str:gsub('numberNINE','9')
+ str = str:gsub('symbolPRIME','\'')
+ return str
+end
+
+addIDsToRegisters = function(str)
+ str = removeStricttexFormatting(str)
+ content = content:gsub('\\' .. str .. '([^%a])' ,'\\SemantexID{}\\' .. str .. '%1')
+ -- '%f[^%a]' does not work here, as it will not react if the last character of str is a number,
+ -- which stricttex allows.
+ -- Because of this choice, there will be an issue if you use stricttex and let
+ -- \<command> by a SemanTeX command and \<command>' be a non-SemanTeX command.
+ -- So simply *don't do that*.
+end
+
+removeSuperfluousIDs = function()
+ local p = content:find('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)')
+ while p do
+ content = content:gsub('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)','%1%2')
+ p = content:find('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)')
+ end
+ content = content:gsub('parent(%s*)=(%s*)\\SemantexID{}','parent%1=%2')
+ content = content:gsub('class(%s*)=(%s*)\\SemantexID{}','class%1=%2')
+ content = content:gsub('clone(%s*)=(%s*)\\SemantexID{}','clone%1=%2')
+ content = content:gsub('copy(%s*)=(%s*)\\SemantexID{}','copy%1=%2')
+ content = content:gsub('\\New(%w+)Class(%s*{?)\\SemantexID{}','\\New%1Class%2')
+ content = content:gsub('\\NewObject(%s*{?%s*)\\SemantexID{}(\\%w+%s*}?%s*{?%s*)\\SemantexID{}', '\\NewObject%1%2')
+ content = content:gsub('\\SetupClass(%s*{?%s*)\\SemantexID{}', '\\SetupClass%1')
+ content = content:gsub('\\SetupObject(%s*{?%s*)\\SemantexID{}', '\\SetupObject%1')
+end
+
+addNumbersToIDs = function()
+ local n = 0
+ local p,q = string.find(content,'\\SemantexID{}')
+ while q do
+ n = n + 1
+ content = content:sub(1,q-1) .. n .. content:sub(q,-1)
+ p, q = string.find(content,'\\SemantexID{}')
+ end
+end
+
+semantexIDluacommand = function(id, source, output)
+ local p, q = string.find(content, '\\SemantexID{' .. id .. '}')
+
+ while p do
+ content = content:sub(1,p-1) .. content:sub(q+1,-1)
+
+ source = source:gsub('%s+', '')
+
+ -- We do this in case the package "stricttex" was used
+ source = removeStricttexFormatting(source)
+
+ -- This is because #1's in the code becomes ##1
+ -- in the .semtex file.
+ source = source:gsub('#(%d)', '%1')
+
+ local length = source:len()
+
+ local i = 1
+
+ local s
+
+ while i <= length do
+ s = content:sub(p,p)
+ if s == source:sub(i,i) then
+ content = content:sub(1 , p-1) .. content:sub(p+1, -1)
+ i = i + 1
+ elseif s:match('%s') then
+ content = content:sub(1, p-1) .. content:sub(p+1, -1)
+ elseif s == '%' then
+ content = content:sub(1 , p-1) .. content:sub(p,-1):gsub('%%.-\n','',1)
+ elseif s == '{' then
+ -- In this case, we remove the corresponding right brace,
+ -- once we find it
+ local netto = 1 -- The current brace group level
+ local q = 0 -- The position we have moved forward so far
+ while netto > 0 do
+ q = q + 1
+ local e = content:sub(p+q,p+q)
+ if e == '}' then
+ netto = netto - 1
+ elseif e == '{' then
+ netto = netto + 1
+ elseif e == '\\' then
+ q = q + 1
+ elseif e == '%' then
+ content = content:sub(1, p+q-1) .. content:sub(p+q,-1):gsub('%%.-\n','',1)
+ q = q - 1
+ end
+ end
+ content = content:sub(1,p-1) .. content:sub(p+1,p+q-1) .. content:sub(p+q+1,-1)
+ elseif s == '<' and content:sub(p+1,p+2) == '[>' then
+ content = content:sub(1,p-1) .. content:sub(p+3,-1)
+ i = i + 1
+ elseif s == '<' and content:sub(p+1,p+2) == ']>' then
+ content = content:sub(1,p-1) .. content:sub(p+3,-1)
+ i = i + 1
+ elseif source:sub(i,i) == '{' then
+ -- In this case, we remove the corresponding right brace,
+ -- once we find it
+ local netto = 1 -- The current brace group level
+ local q = 0 -- The position we have moved forward so far
+ while netto > 0 do
+ q = q + 1
+ local e = source:sub(i+q,i+q)
+ if e == '}' then
+ netto = netto - 1
+ elseif e == '{' then
+ netto = netto + 1
+ elseif e == '\\' then
+ q = q + 1
+ -- there is no chance that the source contains an unescaped %, so we do not
+ -- check for this
+ end
+ end
+ source = source:sub(1,i-1) .. source:sub(i+1,i+q-1) .. source:sub(i+q+1,-1)
+ length = source:len()
+ else
+ tex.sprint( [[\begingroup\ExplSyntaxOn
+ \msg_fatal:nnnn { stripsemantex } { source_not_expected } { ]] .. source:sub(i,i) .. [[ } { ]] .. s .. [[ }
+ \endgroup]] )
+ break
+ end
+ end
+
+
+ output = output:gsub('%s*\\sp {', '^{')
+ output = output:gsub('%s*\\sb {', '_{')
+ output = output:gsub('\\mathopen \\big ', '\\bigl')
+ output = output:gsub('\\mathclose \\big ', '\\bigr')
+ output = output:gsub('\\mathopen \\Big ', '\\Bigl')
+ output = output:gsub('\\mathclose \\Big ', '\\Bigr')
+ output = output:gsub('\\mathopen \\bigg ', '\\biggl')
+ output = output:gsub('\\mathclose \\bigg ', '\\biggr')
+ output = output:gsub('\\mathopen \\Bigg ', '\\Biggl')
+ output = output:gsub('\\mathclose \\Bigg ', '\\Biggr')
+ output = output:gsub('\\mathopen %(', '(')
+ output = output:gsub('\\mathclose %)', ')')
+ output = output:gsub('\\mathopen %[', '[')
+ output = output:gsub('\\mathclose %]', ']')
+ output = output:gsub('\\mathopen \\{', '\\{')
+ output = output:gsub('\\mathclose \\}', '\\}')
+ output = output:gsub('\\mathopen \\lbrace', '\\lbrace')
+ output = output:gsub('\\mathclose \\rbrace', '\\rbrace')
+ output = output:gsub('\\mathopen \\lbrack', '\\lbrack')
+ output = output:gsub('\\mathclose \\rbrack', '\\rbrack')
+ output = output:gsub('\\mathopen \\langle', '\\langle')
+ output = output:gsub('\\mathclose \\rangle', '\\rangle')
+ output = output:gsub('\\mathopen \\lvert', '\\lvert')
+ output = output:gsub('\\mathclose \\rvert', '\\rvert')
+ output = output:gsub('\\mathopen \\vert', '\\lvert')
+ output = output:gsub('\\mathclose \\vert', '\\rvert')
+ output = output:gsub('\\mathopen \\lVert', '\\lVert')
+ output = output:gsub('\\mathclose \\rVert', '\\rVert')
+ output = output:gsub('\\mathopen \\Vert', '\\lVert')
+ output = output:gsub('\\mathclose \\Vert', '\\rVert')
+ output = output:gsub('%^{\\prime }', '\'')
+ output = output:gsub('%^{\\prime \\prime }', '\'\'')
+ output = output:gsub('%^{\\prime \\prime \\prime }', '\'\'\'')
+ output = output:gsub('%^{\\prime \\prime \\prime \\prime }', '\'\'\'\'')
+ output = output:gsub('%^{\\prime \\prime \\prime \\prime \\prime }', '\'\'\'\'\'')
+
+ output = output:gsub('%s+%f[{}%[%]%(%)%$,]','')
+ output = output:gsub('([}%]%)])%f[\\%w%+%-%(%[=]', '%1 ')
+ output = output:gsub(',',', ')
+ output = output:gsub('%s+$', '')
+
+
+ -- We now check whether the string we add will follow right
+ -- after a control sequence, causing it to be interpreted
+ -- as part of that control sequence.
+ -- Because we want to allow the user to use stricttex, we
+ -- check for alphanumerical control sequences rather than
+ -- just alphabetic ones. This could add spaces that
+ -- the user might not have intended, but it's a minor issue.
+ if output:sub(1,1):match('%w') and content:sub(1, p-1):match('\\%w+$') then
+ content = content:sub(1,p-1) .. ' ' .. output .. content:sub(p,-1)
+ else
+ content = content:sub(1,p-1) .. output .. content:sub(p,-1)
+ end
+ p, q = string.find(content, '\\SemantexID{' .. id .. '}')
+ end
+end
+
+stripRemainingSemantexIDs = function()
+ content = content:gsub('\\SemantexID{%d+}', '')
+end
+
+removeParenthesisCommands = function()
+ content = content:gsub('\\SemantexMathOpen \\bigg%s?', '\\biggl')
+ content = content:gsub('\\SemantexMathClose \\bigg%s?', '\\biggr')
+ content = content:gsub('\\SemantexMathOpen \\Bigg%s?', '\\Biggl')
+ content = content:gsub('\\SemantexMathClose \\Bigg%s?', '\\Biggr')
+ content = content:gsub('\\SemantexMathOpen \\big%s?', '\\bigl')
+ content = content:gsub('\\SemantexMathClose \\big%s?', '\\bigr')
+ content = content:gsub('\\SemantexMathOpen \\Big%s?', '\\Bigl')
+ content = content:gsub('\\SemantexMathClose \\Big%s?', '\\Bigr')
+ content = content:gsub('\\SemantexMathOpen{} %(', '(')
+ content = content:gsub('%s*\\SemantexMathClose{}%)', ')')
+ content = content:gsub('\\SemantexMathOpen{} %[', '[')
+ content = content:gsub('%s*\\SemantexMathClose{}%]', ']')
+ content = content:gsub('\\SemantexMathOpen{} \\{', '\\{')
+ content = content:gsub('%s*\\SemantexMathClose{} \\}', '\\}')
+ content = content:gsub('\\SemantexMathOpen{} \\lbrace', '\\lbrace')
+ content = content:gsub('\\SemantexMathClose{} \\rbrace', '\\rbrace')
+ content = content:gsub('\\SemantexMathOpen{} \\lbrack', '\\rbrack')
+ content = content:gsub('\\SemantexMathClose{} \\rbrack', '\\rbrack')
+ content = content:gsub('\\SemantexMathOpen{} \\langle', '\\langle')
+ content = content:gsub('\\SemantexMathClose{} \\rangle', '\\rangle')
+ content = content:gsub('\\SemantexMathOpen{} \\lvert', '\\lvert')
+ content = content:gsub('\\SemantexMathClose{} \\rvert', '\\rvert')
+ content = content:gsub('\\SemantexMathOpen{} \\vert', '\\lvert')
+ content = content:gsub('\\SemantexMathClose{} \\vert', '\\rvert')
+ content = content:gsub('\\SemantexMathOpen{} \\lVert', '\\lVert')
+ content = content:gsub('\\SemantexMathClose{} \\rVert', '\\rVert')
+ content = content:gsub('\\SemantexMathOpen{} \\Vert', '\\lVert')
+ content = content:gsub('\\SemantexMathClose{} \\Vert', '\\rVert')
+ content = content:gsub('\\SemantexMathOpen{} .%s?', '')
+ content = content:gsub('\\SemantexMathClose{} .%s?', '')
+ content = content:gsub('\\SemantexMathOpen{}', '\\mathopen ')
+ content = content:gsub('\\SemantexMathClose{}', '\\mathclose ')
+ content = content:gsub('\\SemantexMathOpenAuto%s?', '\\SemantexLeft')
+ content = content:gsub('\\SemantexMathCloseAuto%s?', '\\SemantexRight')
+ content = content:gsub('\\SemantexMathOpenNoPar%s?', '')
+ content = content:gsub('\\SemantexMathCloseNoPar%s?', '')
+ content = content:gsub('\\SemantexMathOpen%s?', '\\mathopen')
+ content = content:gsub('\\SemantexMathClose%s?', '\\mathclose')
+end
+
+stripComments = function()
+ content = content:gsub('\\%%', '\\StripSemantexEscapedPercent')
+ content = content:gsub('(\\%w+)%%.-\n%s*', '%1 ')
+ content = content:gsub('%%.-\n%s*', '')
+ content = content:gsub('\\StripSemantexEscapedPercent', '\\%%')
+end
+
+addSemtexPackageToFile = function()
+ content = [[% The following was added by "stripsemantex":
+
+\usepackage{semtex,leftindex,graphicx}
+
+\providecommand\SemantexLeft{%
+ \mathopen{}\mathclose\bgroup\left
+}
+
+\providecommand\SemantexRight{%
+ \aftergroup\egroup\right
+}
+
+\makeatletter
+\DeclareRobustCommand\SemantexBullet{%
+ \mathord{\mathpalette\SemantexBullet@{0.5}}%
+}
+\newcommand\SemantexBullet@[2]{%
+ \vcenter{\hbox{\scalebox{#2}{$\m@th#1\bullet$}}}%
+}
+\DeclareRobustCommand\SemantexDoubleBullet{\SemantexBullet \SemantexBullet}
+\makeatother
+
+]] .. content
end \ No newline at end of file
diff --git a/macros/latex/contrib/semantex/stripsemantex.sty b/macros/latex/contrib/semantex/stripsemantex.sty
index 1778ac29ec..171faa8f74 100644
--- a/macros/latex/contrib/semantex/stripsemantex.sty
+++ b/macros/latex/contrib/semantex/stripsemantex.sty
@@ -1,5 +1,5 @@
\RequirePackage{xparse}
-\ProvidesExplPackage{stripsemantex}{2022/12/03}{0.523}{}
+\ProvidesExplPackage{stripsemantex}{2023/01/23}{0.525}{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
diff --git a/macros/latex/contrib/tkz/tkz-euclide/README.md b/macros/latex/contrib/tkz/tkz-euclide/README.md
index 770c67d356..c476d7a07f 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/README.md
+++ b/macros/latex/contrib/tkz/tkz-euclide/README.md
@@ -1,6 +1,6 @@
# tkz-euclide — for euclidean geometry
-Release 4.25c 2022/09/23
+Release 5.00c 2023/01/23
## Description
@@ -41,16 +41,12 @@ To use the package `tkz-euclide`, place the following lines in the preamble of
your LaTeX document:
```
-\usepackage{tkz-euclide}
+\usepackage{tkz-euclide} or \usepackage[lua]{tkz-euclide}
\begin{document}
\begin{tikzpicture}
your code
\end{tikzpicture}
```
-
-The line `\usetkzobj{all}` is no longer required with `tkz-euclide` but you can use it with
-other packages.
-
If you use the `xcolor` package, load that package before `tkz-euclide` to avoid
package conflicts.
@@ -67,6 +63,8 @@ Other examples, in French, are on my site.
## History
+- 5.00c Added the "lua" option to the package, allowing to perform most of the calculations with "lua". This saves time and precision;
+
- 4.25c. Remove \input{tkz-obj-eu-draw-triangles.tex} from the list of files to load.
- 4.24c. Correction of a bug in the macro `\tkzMarkAngle`;
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex
index 8aee9b7021..97e137007e 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex
@@ -25,7 +25,7 @@
\item Do not mix the syntax of \tkzNamePack{pgfmath} and \tkzNamePack{xfp}. I've often chosen \tkzNamePack{xfp} but if you prefer pgfmath then do your calculations before passing parameters.
- \item Error "dimension too large" : In some cases, this error occurs. One way to avoid it is to use the "\tkzname{xfp}" option. When this option is used in an scope, the "veclen" function is replaced by a function dependent on "xfp". Do not use intersection macros in this scope. For example, an error occurs if you use the macro \tkzcname{tkzDrawArc}
+ \item Error "dimension too large" : In some cases, this error occurs. One way to avoid it is to use the "\tkzname{veclen}" option. When this option is used in an scope, the "veclen" function is replaced by a function dependent on "xfp". Do not use intersection macros in this scope. For example, an error occurs if you use the macro \tkzcname{tkzDrawArc}
with too small an angle. The error is produced by the \NameLib{decoration} library when you want to place a mark on an arc. Even if the mark is absent, the error is still present.
\end{itemize}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex
index d077256d8a..3ab43bd43e 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex
@@ -20,7 +20,7 @@ Let us agree that an angle measured counterclockwise is positive.
\tkzname{Angles} are involved in several macros like \tkzcname{tkzDefPoint},\tkzcname{tkzDefPointBy[rotation = \dots]}, \tkzcname{tkzDrawArc}
and the next one \tkzcname{tkzGetAngle}. With the exception of the last one, all these macros accept negative angles.
- \begin{figure}[!h]
+ \begin{figure}[!ht]
\centering
\begin{tabular}{|c|c|}
\hline
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex
index 45a9be0f98..e436c406fe 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex
@@ -94,24 +94,24 @@ The figure below shows a semicircle, with diameter $AB$. A tangent line is drawn
\end{tikzpicture}%
\begin{tkzexample}[vbox,small]
-\begin{tikzpicture}[scale=.75]
- \tkzDefPoint(0,0){D} \tkzDefPoint(8,0){A}
- \tkzDefSquare(D,A) \tkzGetPoints{B}{C}
- \tkzDefMidPoint(D,A) \tkzGetPoint{E}
- \tkzInterLC(D,A)(E,B)\tkzGetSecondPoint{F}
- \tkzInterLC(A,B)(A,F)\tkzGetSecondPoint{G}
- \tkzDefSquare(A,F)\tkzGetFirstPoint{H}
- \tkzInterLL(C,D)(H,G)\tkzGetPoint{I}
- \tkzFillPolygon[teal!10](I,G,B,C)
- \tkzFillPolygon[teal!10](A,F,H,G)
- \tkzDrawArc[angles](E,B)(0,120)
- \tkzDrawSemiCircle(A,F)
- \tkzDrawSegments(A,F E,B H,I F,H)
- \tkzDrawPolygons(A,B,C,D)
- \tkzDrawPoints(A,...,I)
- \tkzLabelPoints[below right](A,E,D,F,I)
- \tkzLabelPoints[above right](C,B,G,H)
-\end{tikzpicture}
+ \begin{tikzpicture}[scale=.75]
+ \tkzDefPoint(0,0){D} \tkzDefPoint(8,0){A}
+ \tkzDefSquare(D,A) \tkzGetPoints{B}{C}
+ \tkzDefMidPoint(D,A) \tkzGetPoint{E}
+ \tkzInterLC(D,A)(E,B)\tkzGetSecondPoint{F}
+ \tkzInterLC[near](B,A)(A,F)\tkzGetFirstPoint{G}
+ \tkzDefSquare(A,F)\tkzGetFirstPoint{H}
+ \tkzInterLL(C,D)(H,G)\tkzGetPoint{I}
+ \tkzFillPolygon[teal!10](I,G,B,C)
+ \tkzFillPolygon[teal!10](A,F,H,G)
+ \tkzDrawArc[angles](E,B)(0,120)
+ \tkzDrawSemiCircle(A,F)
+ \tkzDrawSegments(A,F E,B H,I F,H)
+ \tkzDrawPolygons(A,B,C,D)
+ \tkzDrawPoints(A,...,I)
+ \tkzLabelPoints[below right](A,E,D,F,I)
+ \tkzLabelPoints[above right](C,B,G,H)
+ \end{tikzpicture}
\end{tkzexample}
\newpage
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex
index 4fbe35123c..f3c8a0b3da 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex
@@ -93,7 +93,7 @@ Here the points are positioned relative to the center of gravity of $A,B,C \text
\tkzDrawCircle(O,A)
\tkzDrawPoints(O,A,B,C)
\tkzDrawSegments(C,B B,A A,O O,C)
- \tkzDefCentroid(A,B,C,O)
+ \tkzDefTriangleCenter[centroid](A,B,C) \tkzGetPoint{O}
\tkzDrawPoint(tkzPointResult)
\tkzLabelPoints(O,A,C,B)
\end{tikzpicture}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex
new file mode 100644
index 0000000000..e5e9f999dd
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex
@@ -0,0 +1,22 @@
+\newpage
+\section{Working with lua : option \tkzname{lua}} \label{calc_with_lua}
+
+You can now use the "lua" option with \tkzname{\tkznameofpack} version 5.
+You just have to write in your preamble
+
+ |usepackage[lua]{tkz-euclide}|.
+ Évidemment vous devrez compiler avec LuaLaTeX. Nothing changes for the syntax.
+
+Without the option you can use \tkzname{\tkznameofpack} with the proposed code of version 4.25.
+
+This version is not yet finalized although the documentation you are currently reading has been compiled with this option.
+
+Some information about the method used and the results obtained. Concerning the method, I considered two possibilities. The first one was simply to replace everywhere I could the calculations made by "xfp" or sometimes by "lua". This is how I went from "fp" to "xfp" and now to "lua". The second and more ambitious possibility would have been to associate to each point a complex number and to make the calculations on the complexes with "lua". Unfortunately for that I have to use libraries for which I don't know the license.
+
+Otherwise the results are good. This documentation with "LualaTeX" and "xfp" compiles in 47s while with "lua" it takes only 30s for 236 pages.
+
+Another document of 61 pages is compiled 16s with "pdflaTeX" and "xfp" and 13s with "LualaTeX" and "xfp".
+
+This documentation compiles with |\usepackage{tkz-base}| and |\usepackage[lua]{tkz-euclide}| but I didn't test all the interactions thoroughly.
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex
index 9203b9e562..1f4e33dd60 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex
@@ -1,6 +1,6 @@
% !TEX TS-program = lualatex
% encoding : utf8
-% Documentation of tkz-euclide v4
+% Documentation of tkz-euclide v5
% Copyright 2022 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -22,10 +22,10 @@
]{tkz-doc}
%\usepackage{etoc}
\gdef\tkznameofpack{tkz-euclide}
-\gdef\tkzversionofpack{4.25c}
+\gdef\tkzversionofpack{5.00c}
\gdef\tkzdateofpack{\today}
\gdef\tkznameofdoc{doc-tkz-euclide}
-\gdef\tkzversionofdoc{4.25c}
+\gdef\tkzversionofdoc{5.00c}
\gdef\tkzdateofdoc{\today}
\gdef\tkzauthorofpack{Alain Matthes}
\gdef\tkzadressofauthor{}
@@ -37,7 +37,9 @@
% -- Packages ---------------------------------------------------
\usepackage[dvipsnames,svgnames]{xcolor}
\usepackage{calc}
-\usepackage{tkz-base,tkz-euclide,pgfornament}
+\usepackage{tkz-base}
+\usepackage[lua]{tkz-euclide}
+\usepackage{pgfornament}
\usetikzlibrary{backgrounds}
\usepackage[colorlinks,pdfencoding=auto, psdextra]{hyperref}
\hypersetup{
@@ -113,11 +115,11 @@
\begin{document}
\parindent=0pt
-\tkzTitleFrame{tkz-euclide\\Euclidean Geometry}
+\tkzTitleFrame{tkz-euclide v5\\Euclidean Geometry}
\clearpage
\defoffile{\lefthand\
-From version 4.00, \tkzname{\tkznameofpack} became independent from \tkzname{tkz-base} . This has implied some changes : the next major step will be the version 5 which will see the introduction of Lua. To prepare for this change, I removed the last macros that allowed to plot and define at the same time. Indeed Lua will be there to make all the calculations and define all the necessary nodes. As for \TIKZ\ , it will remain to carry out the tracings, the markings and the labels.\\
+\tkzname{\tkznameofpack} passes in version 5 with the possibility of carrying out part of the calculations using \tkzname{lua}. See the "news" and "lua" sections for more information.\\
\tkzname{\tkznameofpack} is a set of convenient macros for drawing in a plane (fundamental two-dimensional object) with a Cartesian coordinate system. It handles the most classic situations in Euclidean Geometry. \tkzname{\tkznameofpack} is built on top of PGF and its associated front-end \TIKZ\ and is a (La)TeX-friendly drawing package. The aim is to provide a high-level user interface to build graphics relatively simply. The idea is to allow you to follow step by step a construction that would be done by hand as naturally as possible.\\
English is not my native language so there might be some errors.
}
@@ -128,7 +130,7 @@ English is not my native language so there might be some errors.
\lefthand\ Firstly, I would like to thank \textbf{Till Tantau} for the beautiful \LaTeX{} package, namely \href{http://sourceforge.net/projects/pgf/}{\TIKZ}.
\vspace*{12pt}
-\lefthand\ Acknowledgements : I received much valuable advice, remarks, corrections and examples from \tkzimp{Jean-Côme Charpentier}, \tkzimp{Josselin Noirel}, \tkzimp{Manuel Pégourié-Gonnard}, \tkzimp{Franck Pastor}, \tkzimp{David Arnold}, \tkzimp{Ulrike Fischer}, \tkzimp{Stefan Kottwitz}, \tkzimp{Christian Tellechea}, \tkzimp{Nicolas Kisselhoff}, \tkzimp{David Arnold}, \tkzimp{Wolfgang Büchel}, \tkzimp{John Kitzmiller}, \tkzimp{Dimitri Kapetas}, \tkzimp{Gaétan Marris}, \tkzimp{Mark Wibrow}, \tkzimp{Yves Combe} for his work on a protractor, \tkzimp{Paul Gaborit}, \tkzimp{Laurent Van Deik} for all his corrections, remarks and questions and \tkzimp{Muzimuzhi Z} for the code about the option "dim".
+\lefthand\ Acknowledgements : I received much valuable advice, remarks, corrections and examples from \tkzimp{Jean-Côme Charpentier}, \tkzimp{Josselin Noirel}, \tkzimp{Manuel Pégourié-Gonnard}, \tkzimp{Franck Pastor}, \tkzimp{David Arnold}, \tkzimp{Ulrike Fischer}, \tkzimp{Stefan Kottwitz}, \tkzimp{Christian Tellechea}, \tkzimp{Nicolas Kisselhoff}, \tkzimp{David Arnold}, \tkzimp{Wolfgang Büchel}, \tkzimp{John Kitzmiller}, \tkzimp{Dimitri Kapetas}, \tkzimp{Gaétan Marris}, \tkzimp{Mark Wibrow}, \tkzimp{Yves Combe} for his work on a protractor, \tkzimp{Paul Gaborit}, \tkzimp{Laurent Van Deik} for all his corrections, remarks and questions and \tkzimp{Muzimuzhi Z} for the code about the option "dim". A big thank you to \tkzimp{Chetan Shirore} and \tkzimp{Dr. Ajit Kumar} because their work on complex numbers in their package \tkzimp{luamaths} helped me a lot.
\vspace*{12pt}
\lefthand\ I would also like to thank Eric Weisstein, creator of MathWorld:
@@ -152,6 +154,7 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch
\part{General survey : a brief but comprehensive review}
\input{TKZdoc-euclide-news.tex}
+\input{TKZdoc-euclide-lua.tex}
\input{TKZdoc-euclide-installation.tex}
\input{TKZdoc-euclide-presentation.tex}
\input{TKZdoc-euclide-elements.tex}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-marking.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-marking.tex
index c23d56a460..97bf596219 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-marking.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-marking.tex
@@ -126,118 +126,6 @@ More delicate operation because there are many options. The symbols used for mar
|, ||,|||, z, s, x, o, oo
\end{tkzltxexample}
-% Their definitions are as follows
-%
-% \begin{tkzltxexample}[]
-% \pgfdeclareplotmark{||}
-% %double bar
-% {%
-% \pgfpathmoveto{\pgfqpoint{2\pgflinewidth}{\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{2\pgflinewidth}{-\pgfplotmarksize}}
-% \pgfpathmoveto{\pgfqpoint{-2\pgflinewidth}{\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{-2\pgflinewidth}{-\pgfplotmarksize}}
-% \pgfusepathqstroke
-% }
-% \end{tkzltxexample}
-%
-% \begin{tkzltxexample}[]
-% %triple bar
-% \pgfdeclareplotmark{|||}
-% {%
-% \pgfpathmoveto{\pgfqpoint{0 pt}{\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{0 pt}{-\pgfplotmarksize}}
-% \pgfpathmoveto{\pgfqpoint{-3\pgflinewidth}{\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{-3\pgflinewidth}{-\pgfplotmarksize}}
-% \pgfpathmoveto{\pgfqpoint{3\pgflinewidth}{\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{3\pgflinewidth}{-\pgfplotmarksize}}
-% \pgfusepathqstroke
-% }
-% \end{tkzltxexample}
-%
-% \begin{tkzltxexample}[]
-% % An bar slant
-% \pgfdeclareplotmark{s|}
-% {%
-% \pgfpathmoveto{\pgfqpoint{-.70710678\pgfplotmarksize}%
-% {-.70710678\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{.70710678\pgfplotmarksize}%
-% {.70710678\pgfplotmarksize}}
-% \pgfusepathqstroke
-% }
-% \end{tkzltxexample}
-%
-%
-% \begin{tkzltxexample}[]
-% % An double bar slant
-% \pgfdeclareplotmark{s||}
-% {%
-% \pgfpathmoveto{\pgfqpoint{-0.75\pgfplotmarksize}{-\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{0.25\pgfplotmarksize}{\pgfplotmarksize}}
-% \pgfpathmoveto{\pgfqpoint{0\pgfplotmarksize}{-\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{1\pgfplotmarksize}{\pgfplotmarksize}}
-% \pgfusepathqstroke
-% }
-% \end{tkzltxexample}
-%
-%
-% \begin{tkzltxexample}[]
-% % z
-% \pgfdeclareplotmark{z}
-% {%
-% \pgfpathmoveto{\pgfqpoint{0.75\pgfplotmarksize}{-\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{-0.75\pgfplotmarksize}{-\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{0.75\pgfplotmarksize}{\pgfplotmarksize}}
-% \pgfpathlineto{\pgfqpoint{-0.75\pgfplotmarksize}{\pgfplotmarksize}}
-% \pgfusepathqstroke
-% }
-% \end{tkzltxexample}
-%
-% \begin{tkzltxexample}[]
-% % s
-% \pgfdeclareplotmark{s}
-% {%
-% \pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
-% \pgfpathcurveto
-% {\pgfpoint{0pt}{0pt}}
-% {\pgfpoint{-\pgfplotmarksize}{\pgfplotmarksize}}
-% {\pgfpoint{\pgfplotmarksize}{\pgfplotmarksize}}
-% \pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
-% \pgfpathcurveto
-% {\pgfpoint{0pt}{0pt}}
-% {\pgfpoint{\pgfplotmarksize}{-\pgfplotmarksize}}
-% {\pgfpoint{-\pgfplotmarksize}{-\pgfplotmarksize}}
-% \pgfusepathqstroke
-% }
-% \end{tkzltxexample}
-%
-% \begin{tkzltxexample}[]
-% % infinity
-% \pgfdeclareplotmark{oo}
-% {%
-% \pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
-% \pgfpathcurveto
-% {\pgfpoint{0pt}{0pt}}
-% {\pgfpoint{.5\pgfplotmarksize}{1\pgfplotmarksize}}
-% {\pgfpoint{\pgfplotmarksize}{0pt}}
-% \pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
-% \pgfpathcurveto
-% {\pgfpoint{0pt}{0pt}}
-% {\pgfpoint{-.5\pgfplotmarksize}{1\pgfplotmarksize}}
-% {\pgfpoint{-\pgfplotmarksize}{0pt}}
-% \pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
-% \pgfpathcurveto
-% {\pgfpoint{0pt}{0pt}}
-% {\pgfpoint{.5\pgfplotmarksize}{-1\pgfplotmarksize}}
-% {\pgfpoint{\pgfplotmarksize}{0pt}}
-% \pgfpathmoveto{\pgfqpoint{0pt}{0pt}}
-% \pgfpathcurveto
-% {\pgfpoint{0pt}{0pt}}
-% {\pgfpoint{-.5\pgfplotmarksize}{-1\pgfplotmarksize}}
-% {\pgfpoint{-\pgfplotmarksize}{0pt}}
-% \pgfusepathqstroke
-% }
-% \end{tkzltxexample}
-%
% \tkzMarkAngle(B, A, C)
@@ -300,6 +188,34 @@ options & default & definition \\
With common options, there is a macro for multiple angles.
\end{NewMacroBox}
+\subsection{Problem to mark a small angle: {\tkzname{Option veclen}}}\label{opt-veclen}
+ The problem comes from the "decorate" action and from the value used in size in
+ \tkzcname{tkzMarkAngle}. The solution is to enclose the macro \tkzcname{tkzMarkAngle}.
+ In the next example without the "scope" the result is : Latex Error: Dimension too large.
+
+ \begin{tkzexample}[latex=6cm,small]
+ \begin{tikzpicture}[scale=1]
+ \tkzDefPoint(0,0){O}
+ \tkzDefPoint(2.5,0){N}
+ \tkzDefPoint(-4.2,0.5){M}
+ \tkzDefPointBy[rotation=center O angle 30](N)
+ \tkzGetPoint{B}
+ \tkzDefPointBy[rotation=center O angle -50](N)
+ \tkzGetPoint{A}
+ \tkzInterLC[common=B](M,B)(O,B) \tkzGetFirstPoint{C}
+ \tkzInterLC[common=A](M,A)(O,A) \tkzGetFirstPoint{A'}
+ \tkzDrawSegments(A,C M,A M,B A,B)
+ \tkzDrawCircle(O,N)
+ \begin{scope}[veclen]
+ \tkzMarkAngle[mkpos=.2, size=1.2](C,A,M)
+ \end{scope}
+ \tkzDrawPoints(O, A, B, M, B, C, A')
+ \tkzLabelPoints[right](O,A,B)
+ \tkzLabelPoints[above left](M,C)
+ \tkzLabelPoint[below left](A'){$A'$}
+ \end{tikzpicture}
+ \end{tkzexample}
+
\subsection{Marking a right angle: {\tkzcname{tkzMarkRightAngle}}}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex
index a36ade459b..d4efae7995 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex
@@ -1,5 +1,15 @@
\section*{News and compatibility}
+\subsection{With 5.0 version} % (fold)
+
+\begin{itemize}
+
+ \item Finally, I added the "lua" option for the package \tkzname{\tkznameofpack}. This allows to do the calculations for the main functions using lua; (see \ref{calc_with_lua}). The syntax is unchanged. Nothing changes for the user.
+
+ \item The "xfp" option has become "veclen" see \ref{opt-veclen};
+
+\end{itemize}
+
\subsection{With 4.2 version} % (fold)
\label{sub:with_4_2_version}
@@ -43,7 +53,7 @@ If you want to draw a circle, you can't do so |\tkzDrawCircle[R](A,1)|. First yo
\item |\tkzDefLine[euler](A,B,C)| is a macro that allows you to obtain the line of \tkzname{Euler} when possible. |\tkzDefLine[altitude](A,B,C)| is possible again, as well as |\tkzDefLine[tangent at=A](O)| and |\tkzDefLine[tangent from=P](O,A)| which did not works;
-\item | \tkzDefTangent| is replaced by |\tkzDelLine[tangent from = ...]| or |\tkzDelLine[tangent at = ...]|;
+\item | \tkzDefTangent| is replaced by |\tkzDefLine[tangent from = ...]| or |\tkzDefLine[tangent at = ...]|;
\item I added the macro |\tkzPicAngle[tikz options](A,B,C)| for those who prefer to use \TIKZ ;
@@ -117,6 +127,7 @@ As a reminder, the following changes have been made previously:
you can use |\iftkzLinear| (idem for |\tkzIsOrtho|);
\item A style for vectors has been added that you can of course modify
+
|tikzset{vector style/.style={>=Latex,->}}|;
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-others.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-others.tex
index 0548bbaf6a..0df63975d8 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-others.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-others.tex
@@ -69,10 +69,9 @@ Another possiblity is to use \tkzcname{tkzFillAngle}.
\tkzDrawCircle(O,N)
\tkzLabelCircle[above left](O,N)(120){%
$\mathcal{C}$}
- \begin{scope}[xfp]
- \tkzMarkAngle[mkpos=.2, size=1.2](C,A,M)
+ \begin{scope}[veclen]
+ \tkzMarkAngle[mkpos=.2, size=1.2](C,A,M)
\end{scope}
-
\tkzDrawPoints(O, A, B, M, B, C)
\tkzLabelPoints[right](O,A,B)
\tkzLabelPoints[above left](M,C)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex
index e9fc2c6388..6228a9b8a8 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex
@@ -240,8 +240,8 @@ We draw the circle $\mathcal{K}$ with center $D$ and passing through $G$. It int
\tkzDefPoint(0.75,0.25){B}
\tkzDefPoint(1,1.5){C}
\tkzDefTriangle[equilateral](A,B) \tkzGetPoint{D}
-\tkzInterLC[near](D,B)(B,C) \tkzGetSecondPoint{G}
-\tkzInterLC[near](D,A)(D,G) \tkzGetFirstPoint{L}
+\tkzInterLC[near](D,B)(B,C) \tkzGetSecondPoint{G}
+\tkzInterLC[near](A,D)(D,G) \tkzGetFirstPoint{L}
\tkzDrawCircles(B,C D,G)
\tkzDrawLines[add=0 and 2](D,A D,B)
\tkzDrawSegment(A,B)
@@ -259,10 +259,14 @@ We draw the circle $\mathcal{K}$ with center $D$ and passing through $G$. It int
\end{tikzpicture}
\end{tkzexample}
-\subsection{\tkzname{\tkznameofpack 4} vs \tkzname{\tkznameofpack 3}}
+\subsection{\tkzname{\tkznameofpack\ 4} vs \tkzname{\tkznameofpack\ 3}}
Now I am no longer a Mathematics teacher, and I only spend a few hours studying geometry. I wanted to avoid multiple complications by trying to make \tkzname{tkz-euclide} independent of \tkzname{tkz-base}. Thus was born \tkzname{\tkznameofpack} 4. The latter is a simplified version of its predecessor. The macros of \tkzname{tkz-euclide 3} have been retained. The unit is now \tkzname{cm}. If you need some macros from \tkzname{tkz-base}, you may need to use the \tkzcname{tkzInit}.
+\subsection{\tkzname{\tkznameofpack\ 5} vs \tkzname{\tkznameofpack\ 4}}
+
+Rien ne change pour l'utilisateur. La compilation doit être effectuée avec le moteur LuaLaTeX et les résultats sont plus précis et obtenus plus rapidement. Il suffit de charger \tkzname{\tkznameofpack} 5 comme ceci |\usepackage[lua{tkz-euclide}]|.
+
\subsection{How to use the \tkzname{\tkznameofpack} package ?}
\subsubsection{Let's look at a classic example}
In order to show the right way, we will see how to build an equilateral triangle. Several possibilities are open to us, we are going to follow the steps of Euclid.
@@ -274,7 +278,7 @@ In order to show the right way, we will see how to build an equilateral triangle
\end{verbatim}
\item Then load the \tkzname{\tkznameofpack} package:
\begin{verbatim}
-\usepackage{tkz-euclide}
+\usepackage{tkz-euclide} or \usepackage[lua]{tkz-euclide}
\end{verbatim}
You don't need to load \TIKZ\ because the \tkzname{\tkznameofpack} package works on top of TikZ and loads it.
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex
index 979801aa33..1123d86a2f 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex
@@ -294,12 +294,11 @@ arguments & example & explanation \\
\tkzDrawPoints(A,H) \tkzLabelPoints(A,B,H)
\tkzLabelPoints[above](C)
\tkzDotProduct(A,B,C) \tkzGetResult{pabc}
- \pgfmathparse{round(10*\pabc)/10}
+ % \pgfmathparse{round(10*\pabc)/10}
\let\pabc\pgfmathresult
- \node at (1,-3) {%
- $\overrightarrow{PA}\cdot \overrightarrow{PB}=\pabc$};
+ \node at (1,-3) {$\overrightarrow{PA}\cdot \overrightarrow{PB}=\pabc$};
\tkzDotProduct(A,H,B) \tkzGetResult{phab}
- \pgfmathparse{round(10*\phab)/10}
+ % \pgfmathparse{round(10*\phab)/10}
\let\phab\pgfmathresult
\node at (1,-4) {$PA \times PH = \phab $};
\end{tikzpicture}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf b/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf
index 540a04d5a5..c24f592ca7 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex
index 5b8f9747ba..3676422441 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-angles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex
@@ -1,5 +1,5 @@
% tkz-tool-eu-angles.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tool-eu-angles.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tool-eu-angles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzSetUpArc
@@ -93,10 +93,10 @@
\def\tkzDrawArcTowards{\pgfutil@ifnextchar[{\tkz@DrawArcN}{\tkz@DrawArcN[]}}
\def\tkz@DrawArcN[#1](#2,#3)(#4){%
\begingroup
- \tkz@@CalcLength(#2,#3){tkz@radius}
+ \tkz@@CalcLengthcm(#2,#3){tkz@radius}
\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
\tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
- \tkz@DrawArcRAngles[#1](#2,\tkz@radius pt)(\tkz@FirstAngle,\tkz@SecondAngle)
+ \tkz@DrawArcRAngles[#1](#2,\tkz@radius)(\tkz@FirstAngle,\tkz@SecondAngle)
\endgroup
}
%<--------------------------------------------------------------------------–>
@@ -300,35 +300,38 @@
\def\tkz@mymark{\pgfsetplotmarksize{\tkz@mksize}\pgfuseplotmark{\tkz@markang}}
% draw the arcs
-\begin{scope}[decoration= {markings,
- mark=at position \tkz@mkpos with {\tkz@mymark}}]
- \ifx\tkz@arc\tkz@arcsimple
- \tkzDrawArcRAN[#1,fill=none]%
- (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)%
- \tkzPathArcRAN[\tkz@mkcolor,postaction={decorate}]%
- (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)
- \else
- \ifx\tkz@arc\tkz@arcdouble
- \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm-2.5\pgflinewidth)%
- (\tkz@FirstAngle,\tkz@SecondAngle)
- \tkzPathArcRAN[\tkz@mkcolor,postaction={decorate}]%
- (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)%
- \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm+2.5\pgflinewidth)%
- (\tkz@FirstAngle,\tkz@SecondAngle)%
- \else
- \ifx\tkz@arc\tkz@arctriple
- \tkzDrawArcRAN[#1,fill=none]%
- (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)%
- \tkzPathArcRAN[\tkz@mkcolor,postaction={decorate}]%
- (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)%
- \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm-2.5\pgflinewidth)%
- (\tkz@FirstAngle,\tkz@SecondAngle)%
- \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm+2.5\pgflinewidth)%
- (\tkz@FirstAngle,\tkz@SecondAngle)%
+\begin{scope}[veclen]
+ \begin{scope}[decoration= {markings,
+ mark=at position \tkz@mkpos with {\tkz@mymark}}]
+ \ifx\tkz@arc\tkz@arcsimple
+ \tkzDrawArcRAN[#1,fill=none]%
+ (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)%
+ \tkzPathArcRAN[\tkz@mkcolor,postaction={decorate}]%
+ (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)
+ \else
+ \ifx\tkz@arc\tkz@arcdouble
+ \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm-2.5\pgflinewidth)%
+ (\tkz@FirstAngle,\tkz@SecondAngle)
+ \tkzPathArcRAN[\tkz@mkcolor,postaction={decorate}]%
+ (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)%
+ \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm+2.5\pgflinewidth)%
+ (\tkz@FirstAngle,\tkz@SecondAngle)%
+ \else
+ \ifx\tkz@arc\tkz@arctriple
+ \tkzDrawArcRAN[#1,fill=none]%
+ (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)%
+ \tkzPathArcRAN[\tkz@mkcolor,postaction={decorate}]%
+ (#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)%
+ \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm-2.5\pgflinewidth)%
+ (\tkz@FirstAngle,\tkz@SecondAngle)%
+ \tkzDrawArcRAN[#1,fill=none](#3,\tkz@size cm+2.5\pgflinewidth)%
+ (\tkz@FirstAngle,\tkz@SecondAngle)%
+ \fi
\fi
- \fi
- \fi
+ \fi
+ \end{scope}
\end{scope}
+
\endgroup
}
%<--------------------------------------------------------------------------->
@@ -465,31 +468,31 @@
dotsize = 3 pt,
/tkzrightangle/.search also={/tikz},
}
-\newcommand*{\tkzMarkRightAngle}[1][]{\tkz@RightAngle[#1]}
-\def\tkz@RightAngle[#1](#2,#3,#4){%
+\newcommand*{\tkzMarkRightAngle}[1][]{\tkz@MarkRightAngle[#1]}
+\def\tkz@MarkRightAngle[#1](#2,#3,#4){%
\begingroup
\normtkzcode@executetrue
\pgfqkeys{/tkzrightangle}{#1}
\tkzpointnormalised{\pgfpointdiff{\pgfpointanchor{#3}{center}}{%
- \pgfpointanchor{#2}{center}}}
+ \pgfpointanchor{#2}{center}}}
\tkz@ax=\pgf@x\relax%
- \tkz@ay=\pgf@y\relax%
+ \tkz@ay=\pgf@y\relax%
\tkzpointnormalised{\pgfpointdiff{\pgfpointanchor{#3}{center}}{%
- \pgfpointanchor{#4}{center}}}
+ \pgfpointanchor{#4}{center}}}
\tkz@bx=\pgf@x\relax%
\tkz@by=\pgf@y\relax%
\ifnormtkzcode@execute%
- \draw[/tkzrightangle/.cd,#1]
- (#3) --++( 28.45274*\tkz@ra@size\tkz@ax , 28.45274*\tkz@ra@size\tkz@ay)
+ \draw[/tkzrightangle/.cd,#1]
+ (#3) --++( 28.45274*\tkz@ra@size\tkz@ax , 28.45274*\tkz@ra@size\tkz@ay)
--++( 28.45274*\tkz@ra@size\tkz@bx , 28.45274*\tkz@ra@size\tkz@by)
--++(-28.45274*\tkz@ra@size\tkz@ax ,-28.45274*\tkz@ra@size\tkz@ay)
- -- (#3);
+ -- (#3);
\else%
% find angles
\tkzFindSlopeAngle(#3,#2)\tkzGetAngle{tkz@dirOne}
\tkzFindSlopeAngle(#3,#4)\tkzGetAngle{tkz@dirTwo}
\tkzNormalizeAngle(\tkz@dirOne,\tkz@dirTwo)
- \edef\tkzCircleAngle{\fpeval{(\tkz@SecondAngle+\tkz@FirstAngle)/2}}
+ \edef\tkzCircleAngle{\fpeval{(\tkz@SecondAngle+\tkz@FirstAngle)/2}}
\tkzDrawArcRAN[/tkzrightangle/.cd,#1](#3,\tkz@ra@size)%
(\tkz@FirstAngle,\tkz@SecondAngle)
\path (#3) --+ (\tkzCircleAngle:\tkz@ra@size/2)
@@ -531,4 +534,5 @@
\endgroup
}
\makeatother
+
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex
index e168ae6004..8a9764d763 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-circles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-draw-circles.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-draw-circles.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-draw-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzSetUpCircle
@@ -49,6 +49,9 @@
\def\tkz@DrawCircle[#1](#2,#3){%
\begingroup
\node [draw,circle through=(#3), circle style,#1] at (#2) {};
+%perhaps I need to use the last method
+ % \tkzCalcLength(#2,#3) \tkzGetLength{tkz@ncradius}
+ % \draw[circle style,#1](#2) circle (\tkz@ncradius);
\endgroup
}
%<--------------------------------------------------------------------------–>
@@ -81,8 +84,8 @@
{\pgfpointanchor{#3}{center}}%
\tkz@ax=\pgf@x%
\tkz@ay=\pgf@y%
- \path(#2)--++(-\tkz@ax,-\tkz@ay)coordinate (tkz@pt);
- \tkzDrawArc[#1,delta=0](#2,#3)(tkz@pt)
+ \path(#2)--++(-\tkz@ax,-\tkz@ay) coordinate (tkz@pt);
+ \tkzDrawArc[#1,delta=0](#2,#3)(tkz@pt)
\endgroup
}%
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-compass.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex
index 9798e98f4f..76f3a888be 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-compass.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-compass.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-compass.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-compass.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Author Alain Matthes
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-lines.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex
index 8c0d448ac8..216bc15fcb 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-lines.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-draw-lines.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-draw-lines.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-draw-lines.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex
index 4a80f44f17..eeffaecff2 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-points.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-points.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-points.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-points.tex}
\makeatletter
%<--------------------------------------------------------------------------->
% tkzSetUpPoint définit la forme d'un point
@@ -168,5 +168,4 @@
\endgroup
}
\let\tkzShowPointCoord\tkzPointShowCoord
-\makeatother
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-polygons.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex
index 6b3d2246e9..a0f59a0a65 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-draw-polygons.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-polygons.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-polygons.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-polygons.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Polygon
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-protractor.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex
index 6aa6624611..fb995eead7 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-protractor.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-protractor.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-protractor.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-protractor.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% !!! idea from Y. Combe !!!
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-sectors.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex
index a934e87122..685ee59242 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-sectors.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-sectors.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-sectors.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-sectors.tex}
\makeatletter
%<----------------------- Sectors ------------------------------–>
\gdef\tkz@nums{0}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-show.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex
index 3b3a00e745..2f5d97bc98 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-show.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex
@@ -1,5 +1,5 @@
%tkz-obj-eu-show.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-show.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-show.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% finding specific points in a triangle
@@ -121,6 +121,7 @@
\tkzCompass[compass style,#1](#3,MED@2)
\endgroup
}
+
\def\tkzShowLLLine{\pgfutil@ifnextchar[{\tkz@ShowLLLine}{\tkz@ShowLLLine[]}}
\def\tkz@ShowLLLine[#1](#2,#3)(#4){%
\begingroup
@@ -328,18 +329,18 @@ translation/.code args={from #1 to #2}{%
\pgfnodealias{tkz@pointtsf}{tkzPointResult}
\tkz@VecKCoLinear[1](#2,#3,tkz@pointtsf)
\pgfnodealias{SO@tmp1}{tkzPointResult}
- \tkz@VecKCoLinear[-1](#2,#3,tkz@pointtsf)
+ \tkz@VecKCoLinear[-1](#2,#3,tkz@pointtsf)
\pgfnodealias{SO@tmp2}{tkzPointResult}
- \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp1)
+ \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp1)
\pgfnodealias{SO@1}{tkzPointResult}
- \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp2)
+ \tkz@VecKNorm[\tkz@show@size](tkz@pointtsf,SO@tmp2)
\pgfnodealias{SO@2}{tkzPointResult}
- \tkz@VecKNorm[-\tkz@show@gap](tkz@pointtsf,#4)
+ \tkz@VecKNorm[-\tkz@show@gap](tkz@pointtsf,#4)
\pgfnodealias{SO@3}{tkzPointResult}
\tkzCompass[compass style,#1](#4,SO@1)
\tkzCompass[compass style,#1](#4,SO@2)
\tkzCompass[compass style,#1](SO@1,SO@3)
- \tkzCompass[compass style,#1,length=\tkz@show@ratio*\tkz@show@length](SO@2,SO@3)
+ \tkzCompass[compass style,#1,length=\tkz@show@ratio*\tkz@show@length](SO@2,SO@3)
\endgroup
}
\makeatother
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-marks.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex
index 999b28734e..3e536edc33 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-marks.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex
@@ -1,5 +1,5 @@
% tkz-eu-lib-marks.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-lib-eu-marks.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-lib-eu-marks.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Création des symboles
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-shape.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex
index 12965c9e51..522e205162 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-lib-eu-shape.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex
@@ -1,5 +1,5 @@
% tkz-lib-eu-shape.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,10 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-lib-eu-shape.tex}
-\makeatletter
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-lib-eu-shape.tex}
%<--------------------------------------------------------------------------–>
% Création des symboles
%<--------------------------------------------------------------------------–>
@@ -47,5 +46,4 @@
\pgfpathlineto{\pgfqpoint{\pgf@xb}{0 pt}}
}
}
-\makeatother
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles.tex
new file mode 100644
index 0000000000..9be8dd8be7
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-circles.tex
@@ -0,0 +1,223 @@
+% tkz-obj-lua-circles.tex
+% Copyright 2023 Alain Matthes
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% This work has the LPPL maintenance status “maintained”.
+% The Current Maintainer of this work is Alain Matthes.
+
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-lua-circles.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+% tkzCircle center and one point
+%<--------------------------------------------------------------------------–>
+% attention radius circle is defined by center and a point on the circle
+% R defined by center and the value of the radius
+% no need to define a circle with R tikz uses this method.
+% through instead of radius
+\def\tkz@numc{0}
+\pgfkeys{/tkzcircle/.cd,
+ R/.code = \def\tkz@numc{0},
+ diameter/.code = \def\tkz@numc{1},
+ circum/.code = \def\tkz@numc{2},
+ in/.code = \def\tkz@numc{3},
+ ex/.code = \def\tkz@numc{4},
+ euler/.code = \def\tkz@numc{5},
+ nine/.code = \def\tkz@numc{5},
+ apollonius/.code = \def\tkz@numc{6},
+ spieker/.code = \def\tkz@numc{7},
+ orthogonal from/.code args = {#1}{\gdef\tkz@numc{8}
+ \def\tkz@ptfrom{#1}},
+ orthogonal through/.code args = {#1 and #2}{\gdef\tkz@numc{9}
+ \def\tkz@ptone{#1}
+ \def\tkz@pttwo{#2}},
+ K/.code = \def\tkz@koeff{#1},
+ K = 1,
+ circum
+ }
+\def\tkzDefCircle{\pgfutil@ifnextchar[{\tkz@DefCircle}{\tkz@DefCircle[]}}
+\def\tkz@DefCircle[#1](#2){%
+\begingroup
+\pgfqkeys{/tkzcircle}{#1}
+\ifcase\tkz@numc%
+ \tkzDefCircleR(#2)
+ \or% 1
+ \tkzDefCircleD(#2)
+ \or% 2
+ \tkzDefCircumCircle(#2)
+ \or% 3
+ \tkzDefInCircle(#2)
+ \or% 4
+ \tkzDefExCircle(#2)
+ \or% 5
+ \tkzDefEulerCircle(#2)
+ \or% 6
+ \tkzDefApolloniusCircle(#2)
+ \or% 7
+ \tkzDefSpiekerCircle(#2)
+ \or% 8
+ \tkzDefOrthogonalCircle(#2,\tkz@ptfrom)
+ \or% 9
+ \tkzDefOrthoThroughCircle(#2,\tkz@ptone,\tkz@pttwo)
+ \fi
+\endgroup
+}
+%for compatibility
+%<--------------------------------------------------------------------------–>
+% R
+%<--------------------------------------------------------------------------–>
+\def\tkzDefCircleR(#1,#2){%
+\begingroup
+ \edef\tkzLengthResult{\fpeval{round(#2,5)}}
+ \global\let\tkzLengthResult\tkzLengthResult
+ \path (#1)--++(\tkzLengthResult,0) coordinate (tkzSecondPointResult);
+ \tkzRenamePoint(tkzSecondPointResult){tkzPointResult}
+\endgroup
+}
+
+%<--------------------------------------------------------------------------–>
+% Diameter Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefCircleD(#1,#2){%
+\begingroup
+ \tkzDefMidPoint(#1,#2)
+ \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
+ \pgfnodealias{tkzSecondPointResult}{#2}
+ \tkz@@CalcLengthcm(#1,tkzPointResult){tkzLengthResult}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Circum Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefCircumCircle(#1,#2,#3){%
+\begingroup
+ \tkzCircumCenter(#1,#2,#3)
+ \tkzRenamePoint(tkzPointResult){tkzFirstPointResult}
+ \tkzRenamePoint(#1){tkzSecondPointResult}
+ \tkz@@CalcLengthcm(#1,tkzPointResult){tkzLengthResult}%3.06 add [cm]
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% In(scribe) Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefInCircle(#1,#2,#3){%
+\begingroup
+ \tkzInCenter(#1,#2,#3)
+ \pgfnodealias{tkz@incenter}{tkzPointResult}
+ \tkzUProjection(#1,#3)(tkz@incenter)
+ \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
+ \tkz@@CalcLengthcm(tkzPointResult,tkz@incenter){tkzLengthResult}
+ \pgfnodealias{tkzPointResult}{tkz@incenter}
+ \pgfnodealias{tkzFirstPointResult}{tkz@incenter}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Ex(scribe) Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefExCircle(#1,#2,#3){%
+\begingroup
+ \tkzExCenter(#1,#2,#3)
+ \pgfnodealias{tkz@excenter}{tkzPointResult}
+ \tkzUProjection(#1,#3)(tkz@excenter)
+ \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
+ \tkz@@CalcLengthcm(tkzPointResult,tkz@excenter){tkzLengthResult}% for tkzGetLength
+ \pgfnodealias{tkzPointResult}{tkz@excenter}
+ \pgfnodealias{tkzFirstPointResult}{tkz@excenter}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Radius Ex Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefExRadius(#1,#2,#3){%
+\begingroup
+ \tkzExCenter(#1,#2,#3)
+ \tkzUProjection(#1,#3)(tkzPointResult)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% The nine-point circle, also called Euler's circle or the Feuerbach circle
+% best way Ma,Mb,Mc circum center 2020
+%<--------------------------------------------------------------------------–>
+\def\tkzDefEulerCircle(#1,#2,#3){%
+\begingroup
+ \tkzDefMidPoint(#1,#2) \pgfnodealias{tkz@e1}{tkzPointResult}
+ \tkzDefMidPoint(#2,#3) \pgfnodealias{tkz@e2}{tkzPointResult}
+ \tkzDefMidPoint(#1,#3) \pgfnodealias{tkz@e3}{tkzPointResult}
+ \tkzCircumCenter(tkz@e1,tkz@e2,tkz@e3)
+ \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
+ \tkzRenamePoint(tkz@e1){tkzSecondPointResult}
+ \tkz@@CalcLengthcm(tkzPointResult,tkz@e1){tkzLengthResult}
+\endgroup
+}
+\let\tkzDefNinePointsCircle\tkzEulerCircle%
+\let\tkzFeuerBachCircle\tkzEulerCircle%
+
+\def\tkzDefEulerRadius(#1,#2,#3){%
+\begingroup
+ \tkzEulerCenter(#1,#2,#3)
+ \pgfnodealias{eur@pta}{tkzPointResult}
+ \tkzDefMidPoint(#1,#2)
+ \tkz@@CalcLengthcm(eur@pta,tkzPointResult){tkzLengthResult}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Apollonius circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefApolloniusCircle(#1,#2){%
+\begingroup
+ \tkzDefBarycentricPointTwo(#1,1,#2,\tkz@koeff)
+ \pgfnodealias{apo@pta}{tkzPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
+ \tkzDefBarycentricPointTwo(#1,1,#2,-\tkz@koeff)
+ \pgfnodealias{apo@ptb}{tkzPointResult}
+ \tkzDefMidPoint(apo@pta,apo@ptb)
+ \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
+ \tkz@@CalcLengthcm(tkzFirstPointResult,apo@pta){tkzLengthResult}
+ \pgfnodealias{tkzThirdPointResult}{apo@ptb}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzDefOrthogonalCircle(#1,#2,#3){%
+\begingroup
+ \tkzTgtFromP(#1,#2)(#3)
+ \tkz@@CalcLengthcm(#1,tkzFirstPointResult){tkzLengthResult}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzDefOrthoThroughCircle(#1,#2,#3,#4){%
+\begingroup
+ \tkz@@CalcLengthcm(#1,#3){tkz@lnb}%
+ \edef\tkz@lnc{\fpeval{1/\tkz@lnb}}
+ \tkzVecKNorm[\tkz@lnc](#1,#3)
+ \pgfnodealias{tkz@PointResult}{tkzPointResult}
+ \tkzCircumCenter(tkz@PointResult,#3,#4)
+ \tkz@@CalcLengthcm(tkzPointResult,#3){tkzLengthResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
+ \pgfnodealias{tkzSecondPointResult}{#3}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Spieker Circle
+%<--------------------------------------------------------------------------–>
+\def\tkzDefSpiekerCircle(#1,#2,#3){%
+\begingroup
+ \tkzSpiekerCenter(#1,#2,#3)
+ \pgfnodealias{tkzFirstPointResult}{tkzPointResult}
+ \tkzUProjection(tkz@m1,tkz@m2)(tkzPointResult)
+ \pgfnodealias{tkzSecondPointResult}{tkzPointResult}
+ \tkz@@CalcLength(tkzSecondPointResult,tkzFirstPointResult){tkzLengthResult}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+
+%<--------------------------------------------------------------------------–>
+% End Def Circle
+%<--------------------------------------------------------------------------–>
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-by.tex
new file mode 100644
index 0000000000..1db32f48bf
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-by.tex
@@ -0,0 +1,522 @@
+% tkz-tools-lua-points-by.tex
+% Copyright 2023 Alain Matthes
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% This work has the LPPL maintenance status “maintained”.
+% The Current Maintainer of this work is Alain Matthes.
+
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-lua-points-by.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+% Transformations Géométriques
+%<--------------------------------------------------------------------------–>
+\def\tkz@numtrsf{0}
+\pgfkeys{/tkzDefPointBy/.cd,
+ translation/.code args={from #1 to #2}{ \def\tkzfrom{#1}%
+ \def\tkzto{#2}%
+ \def\tkz@numtrsf{0}},
+ homothety/.code args={center #1 ratio #2}{ \def\tkzcenter{#1}%
+ \def\tkzratio{#2}%
+ \def\tkz@numtrsf{1}},
+ reflection/.code args={over #1--#2}{ \def\tkzdeb{#1}%
+ \def\tkzfin{#2}%
+ \def\tkz@numtrsf{2}},
+ symmetry/.code args={center #1}{ \def\tkzcenter{#1}%
+ \def\tkz@numtrsf{3}},
+ projection/.code args={onto #1--#2}{ \def\tkzdeb{#1}%
+ \def\tkzfin{#2}%
+ \def\tkz@numtrsf{4}},
+ rotation/.code args={center #1 angle #2}{ \def\tkzcenter{#1}%
+ \def\tkzangle{#2}%
+ \def\tkz@numtrsf{5}},
+ rotation in rad/.code args={center #1 angle #2}{ \def\tkzcenter{#1}%
+ \def\tkzangle{#2}%
+ \def\tkz@numtrsf{6}},
+ inversion/.code args={center #1 through #2}{ \def\tkzcenter{#1}%
+ \def\tkzpoint{#2}%
+ \def\tkz@numtrsf{7}},
+ inversion negative/.code args={center #1 through #2}{ \def\tkzcenter{#1}%
+ \def\tkzpoint{#2}%
+ \def\tkz@numtrsf{8}},
+ rotation with nodes/.code args={center #1 from #2 to #3}{ \def\tkzcenter{#1}%
+ \def\tkzfrom{#2}%
+ \def\tkzto{#3}%
+ \def\tkz@numtrsf{9}}
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzDefPointBy{\pgfutil@ifnextchar[{\tkz@DefPointBy}{\tkz@DefPointBy[]}}
+\def\tkz@DefPointBy[#1](#2){%
+\begingroup
+\pgfqkeys{/tkzDefPointBy}{#1}
+ \ifcase\tkz@numtrsf%
+% % first case 0
+ \tkzUTranslation(\tkzfrom,\tkzto)(#2)
+\or% 1
+ \tkzUHomo(\tkzcenter,\tkzratio)(#2)
+\or% 2
+ \tkzUSymOrth(\tkzdeb,\tkzfin)(#2)
+\or% 3
+ \tkzUCSym(\tkzcenter)(#2)
+\or% 4
+ \tkzUProjection(\tkzdeb,\tkzfin)(#2)
+\or% 5
+ \tkzURotateAngle(\tkzcenter,\tkzangle)(#2)
+\or% 6
+ \tkzURotateInRad(\tkzcenter,\tkzangle)(#2)
+\or% 7
+ \tkzUInversePoint(\tkzcenter,\tkzpoint)(#2)
+\or% 8
+ \tkzUInverseNegativePoint(\tkzcenter,\tkzpoint)(#2)
+\or% 9
+ \tkzURotateWithNodes(\tkzcenter,\tkzfrom,\tkzto)(#2)
+\fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzDefPointsBy{\pgfutil@ifnextchar[{\tkz@DefPointsBy}{\tkz@DefPointsBy[]}}
+\def\tkz@DefPointsBy[#1](#2)#3{%
+\begingroup
+\pgfqkeys{/tkzDefPointBy}{#1}
+\ifcase\tkz@numtrsf%
+ % first case 0
+ \tkzTranslation(\tkzfrom,\tkzto)(#2){#3}
+ \or% 1
+ \tkzHomo(\tkzcenter,\tkzratio)(#2){#3}
+ \or% 2
+ \tkzSymOrth(\tkzdeb,\tkzfin)(#2){#3}
+ \or% 3
+ \tkzCSym(\tkzcenter)(#2){#3}
+ \or% 4
+ \tkzProjection(\tkzdeb,\tkzfin)(#2){#3}
+ \or% 5
+ \tkzRotateAngle(\tkzcenter,\tkzangle)(#2){#3}
+ \or% 6
+ \tkzRotateInRad(\tkzcenter,\tkzangle)(#2){#3}
+ \or% 7
+ \tkzInversePoint(\tkzcenter,\tkzpoint)(#2){#3}
+ \or% 8
+ \tkzInverseNegativePoint(\tkzcenter,\tkzpoint)(#2){#3}
+ \or% 9
+ \tkzRotateWithNodes(\tkzcenter,\tkzfrom,\tkzto)(#2){#3}
+\fi
+\endgroup
+}
+
+%<--------------------------------------------------------------------------–>
+
+\def\ExtractPoint#1,#2\@nil{%
+\xdef\tkz@LastList{#2}
+\xdef\tkz@FirstPoint{#1}
+}
+\def\FirstPointInList#1{%
+\edef\tkz@templist{#1,}
+\expandafter\ExtractPoint\tkz@templist\@nil
+}
+%<--------------------------------------------------------------------------–>
+% Translation par rapport à un point
+%<--------------------------------------------------------------------------–>
+\def\tkzTranslation(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+\foreach\PT in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \def\tkz@pointtsf{\PT '}
+ \else
+ \def\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkz@VecCoLinear(#1,#2,\PT)
+ \pgfnodealias{\tkz@pointtsf}{tkzPointResult}
+ }
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUTranslation(#1,#2)(#3){%
+\begingroup
+ \tkz@VecCoLinear(#1,#2,#3)%
+\endgroup
+}
+
+%<--------------------------------------------------------------------------–>
+% Symétrie par rapport à un point Homo with (-1)
+% #2 le centre #3 l'antécédent
+%<--------------------------------------------------------------------------–>
+\def\tkzCSym(#1)(#2)#3{%
+\begingroup
+\gdef\tkz@LastList{#3}
+ \foreach\PointCS in {#2}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \xdef\tkz@pointtsf{\PointCS '}
+ \else
+ \xdef\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{\PointCS}{center}}%
+ \tkz@ax=\pgf@x%
+ \tkz@ay=\pgf@y%
+ \pgfinterruptboundingbox
+ \path(#1)--++(-\tkz@ax,-\tkz@ay)coordinate (\tkz@pointtsf);
+ \endpgfinterruptboundingbox
+}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUCSym(#1)(#2){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \tkz@ax=\pgf@x%
+ \tkz@ay=\pgf@y%
+ \path(#1)--++(-\tkz@ax,-\tkz@ay)coordinate (tkzPointResult);
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Symétrie orthogonale par rapport à une droite
+%<--------------------------------------------------------------------------–>
+\def\tkzSymOrth(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointSO in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \def\tkz@pointtsf{\PointSO '}
+ \else
+ \def\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkzUSymOrth(#1,#2)(\PointSO)
+ \pgfnodealias{\tkz@pointtsf}{tkzPointResult}
+ }
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUSymOrth(#1,#2)(#3){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \tkz@ax =\pgf@y%
+ \tkz@ay =\pgf@x%
+ \pgfinterruptboundingbox
+ \path[coordinate] (#3)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point);
+ \endpgfinterruptboundingbox
+ \tkzInterLL(#1,#2)(#3,tkz@point)
+ \pgfnodealias{tkzPointofSym}{tkzPointResult}
+ \tkz@VecK[2](#3,tkzPointofSym)
+\endgroup
+}
+
+%<--------------------------------------------------------------------------–>
+% Projection orthogonale sur une droite
+%<--------------------------------------------------------------------------–>
+\def\tkzProjection(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointPJ in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \def\tkz@pointtsf{\PointPJ '}
+ \else
+ \def\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkzUProjection(#1,#2)(\PointPJ)
+ \pgfnodealias{\tkz@pointtsf}{tkzPointResult}
+ }
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUProjection(#1,#2)(#3){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \tkz@ax =\pgf@y%
+ \tkz@ay =\pgf@x%
+ \pgfinterruptboundingbox
+ \path[coordinate](#3)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point);
+ \tkzInterLL(#1,#2)(#3,tkz@point)% définit tkzPointResult
+ \endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkz@Projection(#1,#2)(#3)#4{%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \tkz@ax =\pgf@y%
+ \tkz@ay =\pgf@x%
+ \pgfinterruptboundingbox
+ \path[coordinate](#3)--++(-\tkz@ax,\tkz@ay) coordinate (tkz@point);
+ \endpgfinterruptboundingbox
+ \tkz@InterLL(#1,#2)(#3,tkz@point){#4}% définit tkzPointResult
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Homothétie par rapport à un point
+%<--------------------------------------------------------------------------–>
+\def\tkzHomo(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+\foreach\PointHO in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \xdef\tkz@pointtsf{\PointHO '}
+ \else
+ \xdef\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{\PointHO}{center}}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgfmathparse{#2}
+ \edef\tkz@coeff{\pgfmathresult}%
+ \pgfinterruptboundingbox
+ \path[coordinate](#1)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya)%
+ coordinate(\tkz@pointtsf);
+ \endpgfinterruptboundingbox
+ }
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUHomo(#1,#2)(#3){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#3}{center}}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgfmathparse{#2}
+ \edef\tkz@coeff{\pgfmathresult}%
+ \pgfinterruptboundingbox
+ \path[coordinate](#1)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya)%
+ coordinate(tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% rotation en degré
+%<--------------------------------------------------------------------------–>
+\def\tkzRotateAngle(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+\foreach\PointRot in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \def\tkz@pointtsf{\PointRot '}
+ \else
+ \def\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkz@@extractxy{\PointRot}
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \tkz@@extractxy{#1}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {#2}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfinterruptboundingbox
+ \path[coordinate](\tkz@bx,\tkz@by)coordinate(\tkz@pointtsf);%
+ \endpgfinterruptboundingbox
+}
+ \endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzURotateAngle(#1,#2)(#3){%
+\begingroup
+ \pgf@process{\pgfpointanchor{#3}{center}}%
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \pgf@process{\pgfpointanchor{#1}{center}}%
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {#2}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfinterruptboundingbox
+ \path (\tkz@bx,\tkz@by) coordinate (tkzPointResult);%
+ \endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% % rotation en radian
+% %<--------------------------------------------------------------------------–>
+\def\tkzRotateInRad(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointRot in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \xdef\tkz@pointtsf{\PointRot '}
+ \else
+ \xdef\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \pgfmathparse{#2 r}
+ \let\tkz@Angle\pgfmathresult
+ \tkz@@extractxy{\PointRot}
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \tkz@@extractxy{#1}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {\tkz@Angle}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfinterruptboundingbox
+ \path[coordinate](\tkz@bx,\tkz@by)coordinate(\tkz@pointtsf);
+ \endpgfinterruptboundingbox
+}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzURotateInRad(#1,#2)(#3){%
+\begingroup
+ \pgfmathparse{#2 r}
+ \let\tkz@Angle\pgfmathresult
+ \tkz@@extractxy{#3}
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \tkz@@extractxy{#1}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {\tkz@Angle}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfinterruptboundingbox
+ \path[coordinate](\tkz@bx,\tkz@by)coordinate(tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Inverse of a point
+%<--------------------------------------------------------------------------–>
+\def\tkzInversePoint(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointIP in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \xdef\tkz@pointtsf{\PointIP '}
+ \else
+ \xdef\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkz@@CalcLengthcm(#1,#2){tkz@lna}
+ \tkz@@CalcLengthcm(#1,\PointIP){tkz@lnb}
+ \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}}
+ \tkzVecKNorm[\tkz@lnc](#1,\PointIP)
+ \pgfnodealias{\tkz@pointtsf}{tkzPointResult}
+ }
+\endgroup
+}
+\def\tkzUInversePoint(#1,#2)(#3){%
+\begingroup
+ \tkz@@CalcLengthcm(#1,#2){tkz@lna}%
+ \tkz@@CalcLengthcm(#1,#3){tkz@lnb}%
+ \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}}
+ \tkzVecKNorm[\tkz@lnc](#1,#3)
+\endgroup
+}
+% possible
+% \tkzDefLine[tangent from =#3](#1,#2)
+% \tkzTgtFromP(#1,#2)(#3)
+% \tkzInterLL(tkzFirstPointResult,tkzSecondPointResult)(#1,#2)
+%<--------------------------------------------------------------------------–>
+% Inverse negative of a point
+%<--------------------------------------------------------------------------–>
+\def\tkzInverseNegativePoint(#1,#2)(#3)#4{%
+\begingroup
+\gdef\tkz@LastList{#4}
+ \foreach\PointIP in {#3}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \xdef\tkz@pointtsf{\PointIP '}
+ \else
+ \xdef\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkz@@CalcLengthcm(#1,#2){tkz@lna}
+ \tkz@@CalcLengthcm(#1,\PointIP){tkz@lnb}
+ \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}}
+ \tkzVecKNorm[\tkz@lnc](#1,\PointIP)
+ \tkzUCSym(#1)(tkzPointResult)
+ \pgfnodealias{\tkz@pointtsf}{tkzPointResult}
+ }
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzUInverseNegativePoint(#1,#2)(#3){%
+\begingroup
+ \tkz@@CalcLengthcm(#1,#2){tkz@lna}%
+ \tkz@@CalcLengthcm(#1,#3){tkz@lnb}%
+ \edef\tkz@lnc{\fpeval{\tkz@lna/\tkz@lnb*\tkz@lna}}
+ \tkzVecKNorm[\tkz@lnc](#1,#3)
+ \tkzUCSym(#1)(tkzPointResult)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+%<--------------- rotate with nodes ------------------------–>
+%<--------------------------------------------------------------------------–>
+\def\tkzRotateWithNodes(#1,#2,#3)(#4)#5{%
+\begingroup
+\gdef\tkz@LastList{#5}
+ \foreach\PointRotWN in {#4}{%
+ \FirstPointInList\tkz@LastList
+ \ifx\tkz@FirstPoint\tkzutil@empty
+ \def\tkz@pointtsf{\PointRotWN '}
+ \else
+ \def\tkz@pointtsf{\tkz@FirstPoint}
+ \fi
+ \tkzFindAngle(#2,#1,#3)
+ \tkz@@extractxy{\PointRotWN}
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \tkz@@extractxy{#1}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {\tkzAngleResult}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfinterruptboundingbox
+ \path[coordinate](\tkz@bx,\tkz@by) coordinate (\tkz@pointtsf);%
+ \endpgfinterruptboundingbox
+}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzURotateWithNodes(#1,#2,#3)(#4){%
+\begingroup
+ \tkzFindAngle(#2,#1,#3)
+ \pgf@process{\pgfpointanchor{#4}{center}}%
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \pgf@process{\pgfpointanchor{#1}{center}}%
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \tkzmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {\tkzAngleResult}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfinterruptboundingbox
+ \path (\tkz@bx,\tkz@by) coordinate (tkzPointResult);%
+ \endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Fin des transformations
+%<--------------------------------------------------------------------------–>
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-spc.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-spc.tex
index 0ce48fcda5..9ed94b26e0 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-spc.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-spc.tex
@@ -1,5 +1,5 @@
-% tkz-obj-eu-points.tex
-% Copyright 2022 Alain Matthes
+% tkz-obj-lua-points.tex
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-points.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-lua-points.tex}
\makeatletter
%add ExCenter
%<--------------------------------------------------------------------------–>
@@ -27,21 +27,41 @@
}
\let\tkzDefBCPoint\tkzDefBarycentricPoint
-\def\tkzDefCentroid(#1){%
+\def\tkzDefBarycentricPointTwo(#1,#2,#3,#4){%
\begingroup
- \xdef\tkz@arg{}
- \foreach \X in {#1}
- {%
- \ifx\tkzutil@empty\tkz@arg%
- \xdef\tkz@arg{\X=1}
- \else
- \xdef\tkz@arg{\tkz@arg,\X=1}
- \fi
- }
- \path[coordinate] (barycentric cs:\tkz@arg) coordinate (tkzPointResult);
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}
+\tkz@ax\pgf@x %
+\tkz@ay\pgf@y %
+\edef\tkzcax{\strip@pt\tkz@ax}%
+\edef\tkzcay{\strip@pt\tkz@ay}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}}
+\tkz@bx\pgf@x %
+\tkz@by\pgf@y %
+\edef\tkzcbx{\strip@pt\tkz@bx}%
+\edef\tkzcby{\strip@pt\tkz@by}%
+\edef\tkztpmx{\tkz@Dec{(\tkzcax*(#2) + \tkzcbx*(#4))/(#2 + #4 )}}
+\edef\tkztpmy{\tkz@Dec{(\tkzcay*(#2) + \tkzcby*(#2))/(#2 + #4 )}}
+\pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}}
\endgroup
}
+% \def\tkzDefCentroid(#1){%
+% \begingroup
+% \xdef\tkz@arg{}
+% \foreach \X in {#1}
+% {%
+% \ifx\tkzutil@empty\tkz@arg%
+% \xdef\tkz@arg{\X=1}
+% \else
+% \xdef\tkz@arg{\tkz@arg,\X=1}
+% \fi
+% }
+% \path[coordinate] (barycentric cs:\tkz@arg) coordinate (tkzPointResult);
+% \endgroup
+% }
+
%<--------------------------------------------------------------------------–>
% milieu de deux points
%<--------------------------------------------------------------------------–>
@@ -127,28 +147,57 @@
\def\tkz@rf{#5}%
\fi
\pgfinterruptboundingbox
- \path[coordinate](barycentric cs:#2=\tkz@rf,#4=\tkz@rt)coordinate (tkzPointResult);
- \endpgfinterruptboundingbox
+\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}
+\tkz@ax\pgf@x %
+\tkz@ay\pgf@y %
+\edef\tkzcax{\strip@pt\tkz@ax}%
+\edef\tkzcay{\strip@pt\tkz@ay}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}}
+\tkz@bx\pgf@x %
+\tkz@by\pgf@y %
+\edef\tkzcbx{\strip@pt\tkz@bx}%
+\edef\tkzcby{\strip@pt\tkz@by}%
+\edef\tkztpmx{\tkz@Dec{(\tkzcax*\tkz@rf + \tkzcbx*\tkz@rt)/(\tkz@rf + \tkz@rt )}}
+\edef\tkztpmy{\tkz@Dec{(\tkzcay*\tkz@rf + \tkzcby*\tkz@rt)/(\tkz@rf + \tkz@rt )}}
+ \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}}
+\endpgfinterruptboundingbox
\endgroup
}
\let\tkzDefIntHomotheticCenter\tkzDefIntSimilitudeCenter
%<--------------------------------------------------------------------------–>
% External Similitude center
%<--------------------------------------------------------------------------–>
-\def\tkzDefExtSimilitudeCenter{\pgfutil@ifnextchar[{\tkz@DefExtSimilitudeCenter}{\tkz@DefExtSimilitudeCenter[]}}
+\def\tkzDefExtSimilitudeCenter{\pgfutil@ifnextchar[{\tkz@DefExtSimilitudeCenter}{%
+\tkz@DefExtSimilitudeCenter[]}}
\def\tkz@DefExtSimilitudeCenter[#1](#2,#3)(#4,#5){%
\begingroup
\pgfqkeys{/tkzSimilitudeCenter}{#1}
\ifcase\tkz@numhomo%
- \tkz@@CalcLengthcm(#2,#3){tkz@rt}%
- \tkz@@CalcLengthcm(#4,#5){tkz@rf}%
- \or% 1
- \def\tkz@rt{#3}%
- \def\tkz@rf{#5}%
+ \tkz@@CalcLengthcm(#2,#3){tkz@rt}%
+ \tkz@@CalcLengthcm(#4,#5){tkz@rf}%
+ \or% 1
+ \def\tkz@rt{#3}%
+ \def\tkz@rf{#5}%
\fi
- \pgfinterruptboundingbox
- \path[coordinate](barycentric cs:#2=-\tkz@rf,#4=\tkz@rt) coordinate(tkzPointResult);
+\pgfinterruptboundingbox
+\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}
+\tkz@ax\pgf@x %
+\tkz@ay\pgf@y %
+\edef\tkzcax{\strip@pt\tkz@ax}%
+\edef\tkzcay{\strip@pt\tkz@ay}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}}
+\tkz@bx\pgf@x %
+\tkz@by\pgf@y %
+\edef\tkzcbx{\strip@pt\tkz@bx}%
+\edef\tkzcby{\strip@pt\tkz@by}%
+\edef\tkztpmx{\tkz@Dec{(\tkzcax*(-\tkz@rf) + \tkzcbx*\tkz@rt)/(\tkz@rt - (\tkz@rf))}}
+\edef\tkztpmy{\tkz@Dec{(\tkzcay*(-\tkz@rf) + \tkzcby*\tkz@rt)/(\tkz@rt - (\tkz@rf))}}
+ \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}}
\endpgfinterruptboundingbox
\endgroup
}
@@ -306,14 +355,16 @@
\pgf@process{\pgfpointanchor{#3}{center}}%
\tkz@cx\pgf@x%
\tkz@cy\pgf@y%
- \advance\tkz@cx by\tkz@ax\relax%
- \advance\tkz@cy by\tkz@ay\relax%
- \advance\tkz@cx by\tkz@bx\relax%
- \advance\tkz@cy by\tkz@by\relax%
- \divide\tkz@cx by3\relax%
- \divide\tkz@cy by3\relax
+ \edef\tkzcax{\strip@pt\tkz@ax}%
+ \edef\tkzcay{\strip@pt\tkz@ay}%
+ \edef\tkzcbx{\strip@pt\tkz@bx}%
+ \edef\tkzcby{\strip@pt\tkz@by}%
+ \edef\tkzccx{\strip@pt\tkz@cx}%
+ \edef\tkzccy{\strip@pt\tkz@cy}%
+ \edef\tkztpmx{\tkz@Dec{(\tkzcax + \tkzcbx + \tkzccx)/3}}
+ \edef\tkztpmy{\tkz@Dec{(\tkzcay + \tkzcby + \tkzccy)/3}}
\pgfinterruptboundingbox
- \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkz@cx}{\tkz@cy}}
+ \pgfcoordinate{tkzPointResult}{\pgfqpoint{\tkztpmx pt}{\tkztpmy pt}}
\endpgfinterruptboundingbox
\endgroup
}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-with.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-with.tex
new file mode 100644
index 0000000000..73a3d9799f
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points-with.tex
@@ -0,0 +1,269 @@
+% tkz-obj-lua-points-with.tex
+% Copyright 2023 Alain Matthes
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% This work has the LPPL maintenance status “maintained”.
+% The Current Maintainer of this work is Alain Matthes.
+
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-lua-points-with.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+% Vectors
+%<--------------------------------------------------------------------------–>
+% Objet : outils mathématiques pour la géométrie euclideienne avec pgf/tikz
+% utilisable de préférence avec un repère orthonormé et le cm comme unité
+% utile pour la compatibilité avec pgf 2
+%<--------------------------------------------------------------------------–>
+% Duplicate Length à revoir pas de pt pas de global
+% ||v(CN)||= ||v(AB)|| et v(CN) colineaire à v(CD)
+% A-->#1 B-->#2 C-->#3 D-->#4 N-->#5 ?????
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+% Outils pour les vecteurs
+%<--------------------------------------------------------------------------–>
+% ce sont des outils élémentaires qui à partir de deux points en définissent
+% un troisième
+% #1 si c'est une option alors c'est un nombre réel
+% #2 et #3 sont deux points
+% #4 est le nom du point qui résulte de la transformation
+% exemple : \tkzVecKNorm (A,B){C} définit un point C tel que AC = 1 et C est % % un point de la droite (AC). #1 peut être négatif
+
+\def\tkzDuplicateSegment(#1,#2)(#3,#4){%
+\begingroup
+ \tkz@@CalcLength(#1,#2){tkz@firstlen}%
+ \tkz@@CalcLength(#3,#4){tkz@secondlen}%
+ \edef\tkz@ratio{\tkz@Dec{\tkz@firstlen/\tkz@secondlen}}
+ \tkz@VecKCoLinear[\tkz@ratio](#3,#4,#3)%
+\endgroup
+}
+\let\tkzDuplicateLength\tkzDuplicateSegment
+%<--------------------------------------------------------------------------–>
+% Coordonnées d'un vecteur (couple de points)
+% Deux points A et B donc un vecteur on récupère les coordonnées de v(AB)
+% en cm
+% tkzGetVecCoord en cm ou en pt ???
+%<--------------------------------------------------------------------------–>
+%result in #3x et #3y #1 et #2 sont les points
+% passage en cm avec fp ?
+% 28.45274 =1 cm
+\def\tkzGetVectxy(#1,#2)#3{%
+\begingroup
+\pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+\pgfmathparse{\pgf@sys@tonumber{\pgf@x}/1cm}%
+\let\tkzresultx\pgfmathresult
+\pgfmathparse{\pgf@sys@tonumber{\pgf@y}/1cm}%
+\let\tkzresulty\pgfmathresult
+\global\expandafter\edef\csname #3x\endcsname{\tkzresultx}%
+\global\expandafter\edef\csname #3y\endcsname{\tkzresulty}%
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% options #1 two points #2,#3 result in #4
+%
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+% tkzDefPointWith
+%<--------------------------------------------------------------------------–>
+\def\tkz@numv{0}
+\pgfkeys{/@pointwith/.cd,
+ colinear/.code args = {at #1}{\def\tkz@numv{0}\def\tkz@frompoint{#1}},
+ orthogonal/.code = {\def\tkz@numv{1}},
+ linear/.code = {\def\tkz@numv{2}},
+ orthogonal normed/.code = {\def\tkz@numv{3}},
+ linear normed/.code = {\def\tkz@numv{4}},
+ colinear normed/.code args = {at #1}{\def\tkz@numv{5}\def\tkz@frompoint{#1}},
+ K/.code = {\edef\tkz@coeff{\fpeval{#1}}},
+ K = 1,
+ normed/.is if = tkz@line@normed,
+ normed/.default = true,
+ normed = false,
+ orthogonal
+}
+\def\tkzDefPointWith{\pgfutil@ifnextchar[{\tkz@DefPointWith}{\tkz@DefPointWith[]}}
+
+\def\tkz@DefPointWith[#1](#2,#3){%
+\begingroup
+\pgfkeys{/@pointwith/.cd,K=1}
+\pgfqkeys{/@pointwith}{#1}
+\ifcase\tkz@numv%
+ % first case 0
+ \tkz@DefVectorColinearat[\tkz@coeff](#2,#3)
+ \or% 1
+ \tkz@VecKOrth[\tkz@coeff](#2,#3)
+ \or% 2
+ \tkz@VecK[\tkz@coeff](#2,#3)
+ \or% 3
+ \tkz@VecKOrthNorm[\tkz@coeff](#2,#3)
+ \or% 4
+ \tkz@VecKNorm[\tkz@coeff](#2,#3)
+ \or% 5
+ \tkz@VecKColinearNorm[\tkz@coeff](#2,#3)
+ \fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% tkzDefVectorfrom
+%<--------------------------------------------------------------------------–>
+% tkz@numv 0
+\def\tkz@DefVectorColinearat[#1](#2,#3){%
+\iftkz@line@normed
+ \tkz@VecKColinearNorm[#1](#2,#3)
+\else
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#2}{center}}{\pgfpointanchor{#3}{center}}%
+ \pgf@xa=\pgf@x\relax%
+ \pgf@ya=\pgf@y\relax%
+ \pgfinterruptboundingbox
+ \path (\tkz@frompoint)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+\fi
+}
+%<--------------------------------------------------------------------------–>
+% tkzVector K Orth coeff dans #1
+% v(AN) perp v(AB) (v(AB) , v(AN) ) sens direct cercle trigo
+% ||v(AN)||=||v(AB)||
+%<--------------------------------------------------------------------------–>
+% tkz@numv 1
+\def\tkzVecKOrth{\pgfutil@ifnextchar[{\tkz@VecKOrth}{\tkz@VecKOrth[1]}}
+\def\tkz@VecKOrth[#1](#2,#3){%
+\iftkz@line@normed
+ \tkz@VecKOrthNorm[#1](#2,#3)
+\else
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#2}{center}}{\pgfpointanchor{#3}{center}}%
+ \pgf@xa=-\pgf@y%
+ \pgf@ya=\pgf@x%
+ \pgfinterruptboundingbox
+ \path (#2)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+\fi
+}%
+
+%<--------------------------------------------------------------------------–>
+% v(AN)=#1 x v(AB)
+% #1 le coeff; #2--> A #3--> B #4-->N tq #4-#2 = #1*(#3-#2)
+%<--------------------------------------------------------------------------–>
+% tkz@numv 2
+\def\tkzVecK{\pgfutil@ifnextchar[{\tkz@VecK}{\tkz@VecK[1]}}
+\def\tkz@VecK[#1](#2,#3){%
+\iftkz@line@normed
+ \tkz@VecKNorm[#1](#2,#3)
+\else
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#2}{center}}%
+ {\pgfpointanchor{#3}{center}}%
+ \pgf@xa=\pgf@x\relax%
+ \pgf@ya=\pgf@y\relax%
+ \pgfmathparse{#1}
+ \let\tkz@coeff\pgfmathresult
+ \pgfinterruptboundingbox
+ \path (#2)--++(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+\fi
+}%
+%<--------------------------------------------------------------------------–>
+% tkzVecKOrthNorm coeff dans #1
+% v(AN) perp v(AB) v(AB) v(AN) sens direct cercle trigo
+% ||v(AN||=1 si #1 est vide ou =1 sinon ||v(AN||=K
+%<--------------------------------------------------------------------------–>
+% tkz@numv 3
+\def\tkzVecKOrthNorm{\pgfutil@ifnextchar[{\tkz@VecKOrthNorm}%
+ {\tkz@VecKOrthNorm[1]}}
+\def\tkz@VecKOrthNorm[#1](#2,#3){%
+\begingroup
+ \tkzpointnormalised{\pgfpointdiff{\pgfpointanchor{#2}{center}}%
+ {\pgfpointanchor{#3}{center}}}
+ \pgf@xa=-\pgf@y\relax%
+ \pgf@ya=\pgf@x\relax%
+ \pgfmathparse{#1}
+ \let\tkz@tmp\pgfmathresult
+ \edef\tkz@x{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@xa}}
+ \edef\tkz@y{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@ya}}
+ \pgfinterruptboundingbox
+ \path (#2)--++(\tkz@x pt,\tkz@y pt) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+}%
+%<--------------------------------------------------------------------------–>
+% VectorNormalised ou K*VectorNormalised
+% A-->#2 B-->#3 N-->#4 v(AB) devient v(AN) tq ||v(AN)||=1 si #1=1
+% sinon ||v(AN)||=#1
+%<--------------------------------------------------------------------------–>
+% tkz@numv 4
+\def\tkzVecKNorm{\pgfutil@ifnextchar[{\tkz@VecKNorm}{\tkz@VecKNorm[1]}}
+\def\tkz@VecKNorm[#1](#2,#3){%
+\begingroup
+ \tkzpointnormalised{%
+ \pgfpointdiff{\pgfpointanchor{#2}{center}}
+ {\pgfpointanchor{#3}{center}}}
+ \pgf@xa=\pgf@x\relax%
+ \pgf@ya=\pgf@y\relax%
+ \pgfmathparse{#1}
+ \let\tkz@tmp\pgfmathresult
+ \edef\tkz@x{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@xa}}
+ \edef\tkz@y{\tkz@Dec{28.45274*\tkz@tmp*\strip@pt\pgf@ya}}
+ \pgfinterruptboundingbox
+ \path (#2)--++(\tkz@x pt,\tkz@y pt) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+}%
+%<--------------------------------------------------------------------------–>
+% \tkz@VecKColinearNorm
+%<--------------------------------------------------------------------------–>
+%% tkz@numv 5
+\def\tkz@VecKColinearNorm[#1](#2,#3){%
+\begingroup
+ \tkzpointnormalised{%
+ \pgfpointdiff{\pgfpointanchor{#2}{center}}
+ {\pgfpointanchor{#3}{center}}}
+ \pgf@xa=\pgf@x\relax%
+ \pgf@ya=\pgf@y\relax%
+ \edef\tkz@x{\tkz@Dec{28.45274*(\tkz@coeff)*\strip@pt\pgf@xa}}
+ \edef\tkz@y{\tkz@Dec{28.45274*(\tkz@coeff)*\strip@pt\pgf@ya}}
+ \pgfinterruptboundingbox
+ \path (\tkz@frompoint)--++(\tkz@x pt,\tkz@y pt) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+}%
+%<--------------------------------------------------------------------------–>
+% VecKCoLinear CN = K x AB #1 pt #2 pt #3 pt #4 nb #5 pt result
+% il faut modifier cette macro : on supprime #3 pour la colinéarité
+% Il suffit d'utiliser Replicate ou Duplicate coeff dans #1
+% v(CD)=#1 x v(AB) #1 le coeff; #2-->A #3-->B #4-->C
+%<--------------------------------------------------------------------------–>
+\def\tkz@VecKCoLinear[#1](#2,#3,#4){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#2}{center}}%
+ {\pgfpointanchor{#3}{center}}%
+ \pgf@xa=\pgf@x\relax%
+ \pgf@ya=\pgf@y\relax%
+ \edef\tkz@coeff{\fpeval{#1}}
+ \pgfinterruptboundingbox
+ \path (#4)--+(\tkz@coeff\pgf@xa,\tkz@coeff\pgf@ya) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+}%
+\def\tkz@VecCoLinear(#1,#2,#3){%
+\begingroup
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \pgf@xa=\pgf@x\relax%
+ \pgf@ya=\pgf@y\relax%
+ \pgfinterruptboundingbox
+ \path (#3)--+(\pgf@xa,\pgf@ya) coordinate (tkzPointResult);
+ \endpgfinterruptboundingbox
+\endgroup
+}%
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points.tex
new file mode 100644
index 0000000000..4a81392c5d
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-lua-points.tex
@@ -0,0 +1,169 @@
+ % tkz-obj-lua-points.tex
+% Copyright 2023 Alain Matthes
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% This work has the LPPL maintenance status “maintained”.
+% The Current Maintainer of this work is Alain Matthes.
+
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-lua-points.tex}
+\makeatletter
+%<--------------------------------------------------------------------------->
+% init def point
+%<--------------------------------------------------------------------------->
+% tkzDefPoint
+%<--------------------------------------------------------------------------->
+% macros complémentaires pour def point
+%<--------------------------------------------------------------------------->
+\def\tkz@parsecoordinate#1{%
+\tkz@getseparator#1,\@nil
+\iftkz@polar
+ \tkz@getfrompolar#1\@nil
+\else
+ \tkz@getfromcart#1\@nil
+\fi
+}
+\def\tkz@getseparator#1,#2\@nil{%
+\ifx\tkzempty#2\tkzempty%
+ \tkz@polartrue
+\else
+ \tkz@polarfalse
+\fi
+}
+\def\tkz@getfrompolar#1:#2\@nil{%
+\edef\tkz@a{\fpeval{#1}}
+\edef\tkz@r{\fpeval{#2}}
+\xdef\tkz@polarrad{\tkz@r}
+\xdef\tkz@polarangle{\tkz@a}
+}
+\def\tkz@getfromcart#1,#2\@nil{%
+\edef\tkz@x{\fpeval{#1}}
+\edef\tkz@y{\fpeval{#2}}
+\xdef\tkz@absc{\tkz@x}
+\xdef\tkz@ord{\tkz@y}
+}
+%<--------------------------------------------------------------------------->
+% options pour point definition
+%<--------------------------------------------------------------------------->
+\pgfkeys{/tkzPt/.cd,
+ polar/.is if = tkz@pt@polar,
+ polar/.default = true,
+ polar = false
+}
+%<--------------------------------------------------------------------------->
+% tkz@ptStar
+%<--------------------------------------------------------------------------->
+\def\tkz@ptStar[#1](#2,#3)#{%
+\pgfkeys{/tkzPt/.cd, polar = false}
+\pgfqkeys{/tkzPt}{#1}
+\iftkz@pt@polar%
+ \edef\tkz@x{\fpeval{#3*cosd(#2)}}
+ \edef\tkz@y{\fpeval{#3*sind(#2)}}
+\else
+ \edef\tkz@x{\fpeval{#2}}
+ \edef\tkz@y{\fpeval{#3}}
+\fi
+\edef\tkzpt@xa{\tkz@Dec{(\tkz@x-(\tkz@init@xorigine))/\tkz@init@xstep}}
+\edef\tkzpt@ya{\tkz@Dec{(\tkz@y-(\tkz@init@yorigine))/\tkz@init@ystep}}
+\tkz@node
+}
+%<--------------------------------------------------------------------------->
+% la macro defpoint les coordonnées cartésiennes ou polaires sont traitées
+% afin de pouvoir être adaptées avec les unités choisies
+%<--------------------------------------------------------------------------->
+\def\tkzDefPoint{\pgfutil@ifnextchar[{\tkz@DefPoint}{\tkz@DefPoint[]}}
+
+\def\tkz@DefPoint[#1](#2)#{%
+\tkz@parsecoordinate{#2}
+\iftkz@polar
+ \tkz@ptStar[polar](\tkz@polarangle,\tkz@polarrad){tkz@coord@temp}
+\else
+ \tkz@ptStar[](#2){tkz@coord@temp}
+\fi
+\tkz@DefPointEnd[#1]
+}%
+\def\tkz@DefPointEnd[#1]#2{\coordinate[#1] (#2) at (tkz@coord@temp);}
+%<--------------------------------------------------------------------------->
+% tkzDefPoints
+%<--------------------------------------------------------------------------->
+\def\tkzDefPoints{\pgfutil@ifnextchar[{\tkz@DefPoints}{\tkz@DefPoints[]}}
+\def\tkz@DefPoints[#1]#2{%
+ \begingroup
+ \def\tkz@parenthesis@for@err{(}%
+ \def\tkz@maybe@parenthesis{#2}%
+ \ifx\tkz@maybe@parenthesis\tkz@parenthesis@for@err
+ \PackageError{tkz-base}{Syntax error use {} instead of ()}{You need to use {} instead of ()}%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {\tkz@absorb@bad@arg}%
+ {\foreach \ptx/\pty/\name in {#2}{\tkzDefPoint[#1](\ptx,\pty){\name}}%
+ \endgroup}%
+}
+\def\tkz@absorb@bad@arg#1){\endgroup}
+%<--------------------------------------------------------------------------->
+\def\tkz@node#1{ \pgfinterruptboundingbox
+\path[coordinate](\tkzpt@xa,\tkzpt@ya) coordinate(#1);
+ \endpgfinterruptboundingbox}
+%<--------------------------------------------------------------------------->
+\def\tkzRenamePoint(#1)#2{\coordinate (#2) at (#1);}
+\def\tkz@RenamePointEnd[#1]#2{\coordinate[#1] (#2) at (\tkz@ax,\tkz@ay);}
+\def\tkzGetPoint#1{\coordinate (#1) at (tkzPointResult);}
+\def\tkzGetPoints#1#2{\coordinate (#1) at (tkzFirstPointResult);
+ \coordinate (#2) at (tkzSecondPointResult);}
+\def\tkzGetFirstPoint#1{\coordinate (#1) at (tkzFirstPointResult);}
+\def\tkzGetSecondPoint#1{\coordinate (#1) at (tkzSecondPointResult);}
+\def\tkzGetThirdPoint#1{\coordinate (#1) at (tkzThirdPointResult);}
+\def\tkzDefShiftPointCoord[#1](#2)#3{%
+ \begin{scope}[shift={(#1)}]
+ \coordinate (#3) at (#2);
+ \end{scope}
+ }%
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+
+%<--------------------------------------------------------------------------->
+% tkzDefShiftPoint
+%<--------------------------------------------------------------------------->
+\def\tkzDefShiftPoint[#1](#2)#3{%
+ \tkz@@extractxy{#1}
+ \tkz@ax\pgf@x %
+ \tkz@ay\pgf@y %
+\begin{scope}[shift={(\tkz@ax,\tkz@ay)}]
+ \coordinate (#3) at (#2);
+\end{scope}
+}
+%<--------------------------------------------------------------------------->
+% Coordonnées d'un point
+% result in #2x et #2y #1 est le point et on récupère ses coordonnées
+% usage soit A un point \tkzGetPointCoord(A){V} alors \Vx = xA et \Vy = yA
+% en cm
+% tkzGetPointCoord avec [#1] cm ou bien pt ?? todo
+%<--------------------------------------------------------------------------->
+\def\tkzGetPointCoord(#1)#2{%
+\begingroup
+ \pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}
+ \pgfmathparse{\pgf@sys@tonumber{\pgf@x}/28.45274}
+ \global\let\tkzresultx\pgfmathresult
+ \global\expandafter\edef\csname #2x\endcsname{\tkzresultx}%
+ \pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}
+ \pgfmathparse{\pgf@sys@tonumber{\pgf@y}/28.45274}
+ \global\let\tkzresulty\pgfmathresult
+ \global\expandafter\edef\csname #2y\endcsname{\tkzresulty}
+\endgroup
+}
+\def\tkz@@extractxy#1{%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}
+}
+\let\tkzGetPointxy\tkzGetPointCoord
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-axesmin.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex
index ab81c6d3ec..3d2fedacc2 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-axesmin.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-axesmin.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-axesmin}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-axesmin}
\makeatletter
\def\removedot#1.{#1}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex
index 03f81e35f8..b4f7f8ebaf 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles-by.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-circles.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-circles.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzCircle center and one point
@@ -118,10 +118,9 @@
\tkz@@CalcLengthcm(#1,#2){tkz@lna}%
\tkz@@CalcLengthcm(#1,#3){tkz@lnb}%
\gdef\tkzMathResult{\fpeval{round(abs(\tkz@lnb - \tkz@lna),6)}}
- \ifdim\tkzMathResult pt < 1 pt\relax%
+ \ifdim\tkzMathResult pt < 1 pt\relax%
\tkzURotateAngle(#1,-90)(#2)
\pgfnodealias{tkz@a}{tkzPointResult}
-
\tkzUInversePoint(#3,#4)(tkz@a)
\pgfnodealias{tkzFirstPointResult}{tkzPointResult}
\tkzUInversePoint(#3,#4)(#2)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex
index 487ef547cd..4428f407f5 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-circles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-circles.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-circles.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzCircle center and one point
@@ -80,16 +80,6 @@
\tkzRenamePoint(tkzSecondPointResult){tkzPointResult}
\endgroup
}
-%<--------------------------------------------------------------------------–>
-% Through Circle center and point
-%<--------------------------------------------------------------------------–>
-\def\tkzDefCircleThrough(#1,#2){%
-\begingroup
- \tkz@@CalcLengthcm(#1,#2){tkzLengthResult}
- \node [draw,circle through=(#2)] at (#1) {};
- \tkzRenamePoint(#1){tkzPointResult}
-\endgroup
-}
%<--------------------------------------------------------------------------–>
% Diameter Circle
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-grids.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex
index 14d476fede..c6c1be300d 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-grids.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-grids.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-grids.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-grids.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Setup Grid
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-lines.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex
index 3a2875c829..5d5e2934fe 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-lines.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-lines.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-lines.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-lines.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% les lignes
@@ -162,7 +162,7 @@
%<--------------------------------------------------------------------------–>
\def\tkzDefBisectorOutLine(#1,#2,#3){%
\begingroup
- \pgfinterruptboundingbox
+\pgfinterruptboundingbox
\tkzDuplicateLength(#2,#1)(#2,#3)
\pgfnodealias{out@tmp}{tkzPointResult}
\tkzDefMidPoint(#1,out@tmp)
@@ -175,7 +175,7 @@
\iftkz@line@normed
\tkzVecKNorm[\tkz@koeff](#2,tkzPointResult)
\fi
- \endpgfinterruptboundingbox
+\endpgfinterruptboundingbox
\endgroup
}
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex
index fc8b53160c..2af038e957 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-by.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex
@@ -1,5 +1,5 @@
% tkz-tools-eu-points-by.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-points-by.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-points-by.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Transformations Géométriques
@@ -130,7 +130,7 @@
\ifx\tkz@FirstPoint\tkzutil@empty
\def\tkz@pointtsf{\PT '}
\else
- \def\tkz@pointtsf{\tkz@FirstPoint}
+ \def\tkz@pointtsf{\tkz@FirstPoint}
\fi
\tkz@VecCoLinear(#1,#2,\PT)
\pgfnodealias{\tkz@pointtsf}{tkzPointResult}
@@ -328,21 +328,21 @@
%<--------------------------------------------------------------------------–>
\def\tkzURotateAngle(#1,#2)(#3){%
\begingroup
- \pgf@process{\pgfpointanchor{#3}{center}}%
- \tkz@ax\pgf@x%
- \tkz@ay\pgf@y%
- \pgf@process{\pgfpointanchor{#1}{center}}%
- \tkz@bx\pgf@x%
- \tkz@by\pgf@y%
- \pgfmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
- {\pgfpoint{\tkz@bx}{\tkz@by}}%
- {#2}
- \tkz@bx\pgf@x%
- \tkz@by\pgf@y%
- \pgfinterruptboundingbox
- \path (\tkz@bx,\tkz@by) coordinate (tkzPointResult);%
- \endpgfinterruptboundingbox
- \endgroup
+ \pgf@process{\pgfpointanchor{#3}{center}}%
+ \tkz@ax\pgf@x%
+ \tkz@ay\pgf@y%
+ \pgf@process{\pgfpointanchor{#1}{center}}%
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfmathrotatepointaround{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {#2}
+ \tkz@bx\pgf@x%
+ \tkz@by\pgf@y%
+ \pgfinterruptboundingbox
+ \path (\tkz@bx,\tkz@by) coordinate (tkzPointResult);%
+ \endpgfinterruptboundingbox
+\endgroup
}
%<--------------------------------------------------------------------------–>
% % rotation en radian
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-rnd.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex
index 8d604321ed..a5aa32776a 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-rnd.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-points-rnd.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-points-rnd.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-points-rnd.tex}
%<--------------------------------------------------------------------------–>
\makeatletter
%<-------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-with.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex
index e530dd5dfd..b650e32727 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points-with.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex
@@ -1,5 +1,5 @@
% tkz-obj-el-points-with.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-points-with.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-points-with.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Vectors
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex
index e3dbc6e7cf..5a247848dd 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-points.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-points.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-points.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-points.tex}
\makeatletter
%<--------------------------------------------------------------------------->
% init def point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-polygons.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex
index 79fd6e561a..4c79826734 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-polygons.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-polygons.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-polygons.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-polygons.tex}
% bug in regular polygon side 2020/03/09
\makeatletter
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-triangles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex
index 9879bd6768..738221b1b6 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-triangles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex
@@ -1,5 +1,5 @@
% tkz-obj-eu-triangles.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-triangles.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-triangles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Triangle Equilateral
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg
index 4d7415232e..a67e46e31a 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg
@@ -1,5 +1,5 @@
% tkz-euclide.cfg
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -16,9 +16,9 @@
% and save the file in a directory part of your TEXINPUTS environment
% variable.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-euclide.cfg}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-euclide.cfg}
%<------ colors ---------------------------------------–>
\def\tkz@backgroundcolor{white}
\def\tkz@textcolor{black}
@@ -134,7 +134,7 @@ arc style/.style={%
\def\tkz@mk@fill{\tkz@otherlinecolor}
%<--------------------------------------------------------------------------–>
%<------------------------------ styles ---------------------------------–>
-\def\tkzSetUpStyle[#1]#2{\tikzset{#2/.style={#1}}}% add 2022
+\def\tkzSetUpStyle[#1]#2{\tikzset{#2/.style={#1}}}% add 2023
\tikzset{xlabel style/.style = {below = 3 pt,
inner sep = 1pt,
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty
index d0eb08def5..3b2c9f4365 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty
@@ -1,5 +1,5 @@
% tkz-euclide.sty
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,11 +10,16 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
%-------------------------------------------------------------------------------
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-euclide.sty}
+\def\fileversion{5.00c}
+\def\filedate{2023/11/03}
+\typeout{2023/11/03 5.00c tkz-euclide.sty}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{tkz-euclide}[ 2022/09/23 4.25c for pure Euclidean Geometry ]
+\ProvidesPackage{tkz-euclide}[ 2023/11/03 5.00c for pure Euclidean Geometry ]
+\newif\if@tkzlua
+\@tkzluafalse
+\DeclareOption{lua}{\@tkzluatrue}
+\ProcessOptions\relax
+
\@ifpackageloaded{tkz-base}{
\newdimen\tkzRadius
\newdimen\tkzLength
@@ -148,45 +153,66 @@
\def\tkz@tmp@ya{-5}
\def\tkz@tmp@yb{+5}
%-------------------------------------------------------------------------------
-\DeclareOption*{}
-\ProcessOptions
+% \DeclareOption*{}
+% \ProcessOptions
%<---------------------------------------------------------->
% Initialisation
%<---------------------------------------------------------->
+\if@tkzlua
+\RequirePackage{luacode}
+\fi
+
+
\@ifpackageloaded{tkz-base}{}{%
-% from base
+% from base
+\input{tkz-lib-eu-marks.tex}
+\input{tkz-lib-eu-shape.tex}
\input{tkz-tools-eu-base.tex}
\input{tkz-tools-eu-utilities.tex}
\input{tkz-tools-eu-BB.tex}
-\input{tkz-obj-eu-grids.tex}
-\input{tkz-lib-eu-marks.tex}
+\input{tkz-tools-eu-colors.tex}
\input{tkz-tools-eu-text.tex}
-\input{tkz-lib-eu-shape.tex}
+\input{tkz-obj-eu-grids.tex}
\input{tkz-obj-eu-axesmin.tex}
-\input{tkz-tools-eu-colors.tex}
\input{tkz-obj-eu-points.tex}
-\input{tkz-obj-eu-draw-points.tex}
+\input{tkz-draw-eu-points.tex}
}
-% next from euclide
-\input{tkz-tools-eu-angles}
-\input{tkz-tools-eu-intersections}
+% % next from euclide
+\makeatletter
+\if@tkzlua
+\input{tkz-tools-lua-base.tex}
+\input{tkz-obj-lua-points.tex}
+\input{tkz-tools-lua-math.tex}
+\input{tkz-tools-lua-intersections.tex}
+\input{tkz-obj-lua-points-by.tex}
+\input{tkz-obj-lua-points-with.tex}
+\input{tkz-obj-lua-points-spc.tex}
+\input{tkz-tools-lua-angles.tex}
+\else
+\input{tkz-obj-eu-points.tex}
+\input{tkz-obj-eu-points-by.tex}
\input{tkz-tools-eu-math.tex}
-\input{tkz-obj-eu-compass.tex}
+\input{tkz-tools-eu-intersections.tex}
+\input{tkz-obj-eu-points-with.tex}
+\input{tkz-obj-eu-points-spc.tex}
+\input{tkz-tools-eu-angles.tex}
+ \fi
+
+\input{tkz-obj-eu-points-rnd.tex}
\input{tkz-obj-eu-circles.tex}
\input{tkz-obj-eu-circles-by.tex}
-\input{tkz-obj-eu-draw-angles.tex}
-\input{tkz-obj-eu-draw-circles.tex}
-\input{tkz-obj-eu-draw-lines.tex}
-\input{tkz-obj-eu-draw-polygons.tex}
\input{tkz-obj-eu-lines.tex}
-\input{tkz-obj-eu-points-by.tex}
-\input{tkz-obj-eu-points-rnd.tex}
-\input{tkz-obj-eu-points-spc.tex}
-\input{tkz-obj-eu-points-with.tex}
\input{tkz-obj-eu-polygons.tex}
-\input{tkz-obj-eu-protractor.tex}
-\input{tkz-obj-eu-sectors.tex}
-\input{tkz-obj-eu-show.tex}
\input{tkz-obj-eu-triangles}
+% drawings
+\input{tkz-draw-eu-lines.tex}
+\input{tkz-draw-eu-circles.tex}
+\input{tkz-draw-eu-polygons.tex}
+\input{tkz-draw-eu-angles.tex}
+\input{tkz-draw-eu-sectors.tex}
+\input{tkz-draw-eu-compass.tex}
+\input{tkz-draw-eu-show.tex}
+\input{tkz-draw-eu-protractor.tex}
+
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-angles.tex
new file mode 100644
index 0000000000..69fd1110ab
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-angles.tex
@@ -0,0 +1,102 @@
+% tkz-tools-lua-angles.tex
+% Copyright 2023 Alain Matthes
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% This work has the LPPL maintenance status “maintained”.
+% The Current Maintainer of this work is Alain Matthes.
+
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-lua-angles.tex}
+\makeatletter
+\def\tkzmathrotatepointaround#1#2#3{%
+ \pgf@process{%
+ \pgf@process{#1}%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgf@process{#2}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \pgf@xb\pgf@x%
+ \pgf@yb\pgf@y%
+ \pgf@x=\pgf@xc%
+ \pgf@y=\pgf@yc%
+ \advance\pgf@x-\pgf@xa%
+ \advance\pgf@y-\pgf@ya%
+ \pgfmathsetmacro\angle{#3}%
+ \edef\sineangle{\tkz@Dec{\tkz@Sin{\tkz@Rad{\angle}}}}%
+ \edef\cosineangle{\tkz@Dec{\tkz@Cos{\tkz@Rad{\angle}}}}%
+ \pgf@xa\cosineangle\pgf@x%
+ \advance\pgf@xa-\sineangle\pgf@y%
+ \pgf@ya\sineangle\pgf@x%
+ \advance\pgf@ya\cosineangle\pgf@y%
+ \pgf@x\pgf@xb%
+ \pgf@y\pgf@yb%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+}
+
+%<-------------------------------------------------------------------------->
+% Angles
+%<-------------------------------------------------------------------------->
+\def\tkzmathanglebetweenpoints#1#2{
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}%
+\edef\tkzax{\strip@pt\pgf@x}%
+\edef\tkzay{\strip@pt\pgf@y}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}%
+\edef\tkzbx{\strip@pt\pgf@x}%
+\edef\tkzby{\strip@pt\pgf@y}%
+\edef\tkz@tmp{\tkz@Angle{\tkzax}{\tkzay}{\tkzbx}{\tkzby}}
+\edef\pgfmathresult{\tkz@Dec{\tkz@Round{\tkz@tmp}{2}}}
+}
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+% thanks karu : http://tex.stackexchange.com/questions/151667/tkzgetangle-strange-behavior/196224#196224
+% \tkzGetAngle strange behavior
+% defines \tkz@FirstAngle and \tkz@SecondAngle sens trigo
+%<--------------------------------------------------------------------------–>
+
+\def\tkzNormalizeAngle(#1,#2){%
+\directlua{angleA, angleB = normalize(#1,#2)
+token.set_macro("tkz@FirstAngle", angleA)
+token.set_macro("tkz@SecondAngle", angleB)
+}}
+%<--------------------------------------------------------------------------–>
+% Angle
+% Recherche l'angle formé par #1 et #2 par rapport à l'horizontale
+%<--------------------------------------------------------------------------–>
+\def\tkzFindSlopeAngle(#1,#2){%
+\begingroup
+ \tkzmathanglebetweenpoints{#1}{#2}
+ \global\let\tkzAngleResult\pgfmathresult
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Angle avec trois nodes
+%<--------------------------------------------------------------------------–>
+\def\tkzFindAngle(#1,#2,#3){% new code 2016
+\begingroup
+ \tkzFindSlopeAngle(#2,#1)\tkzGetAngle{tkz@FirstAngle}
+ \tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@SecondAngle}
+ \tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
+ \edef\tkz@Angle{\fpeval{\tkz@SecondAngle-\tkz@FirstAngle}}
+ \global\let\tkzAngleResult\tkz@Angle
+\endgroup
+}
+
+%<--------------------------------------------------------------------------–>
+% Find angle
+%<--------------------------------------------------------------------------–>
+\def\tkzGetAngle#1{%
+ \global\expandafter\edef\csname #1\endcsname{\tkzAngleResult}
+}
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-base.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-base.tex
new file mode 100644
index 0000000000..c31c925187
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-base.tex
@@ -0,0 +1,89 @@
+% tkz-tools-lua-base.tex
+% Copyright 2023 Alain Matthes
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% This work has the LPPL maintenance status “maintained”.
+% The Current Maintainer of this work is Alain Matthes.
+
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-lua-base.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+\global\let\tkz@tmp@xa\tkz@init@xmin% modif 2016
+\global\let\tkz@tmp@xb\tkz@init@xmax% modif 2016
+\global\let\tkz@tmp@ya\tkz@init@ymin% modif 2016
+\global\let\tkz@tmp@yb\tkz@init@ymax% modif 2016
+%<--------------------------------------------------------------------------–>
+\pgfkeys{
+ /tkzInit/.cd,
+ xmin/.store in = \tkz@init@xmin,
+ xmax/.store in = \tkz@init@xmax,
+ xstep/.store in = \tkz@init@xstep,
+ ymin/.store in = \tkz@init@ymin,
+ ymax/.store in = \tkz@init@ymax,
+ ystep/.store in = \tkz@init@ystep,
+ NO/.is if = tkz@init@NO,
+ NO/.default = true,
+ xmin = 0,
+ xmax = 10,
+ xstep = 1,
+ ymin = 0,
+ ymax = 10,
+ ystep = 1,
+ NO = false
+ }
+
+\def\tkzInit{\pgfutil@ifnextchar[{\tkz@Init}{\tkz@Init[]}}
+\def\tkz@Init[#1]{%
+ \pgfqkeys{/tkzInit}{#1}
+ \ifx\tkzfctloaded\undefined
+ \else
+ \tkz@tkzf@fct=0 % only if tkz-fct loaded
+ \fi
+ \xdef\tkz@init@xorigine{0}
+ \xdef\tkz@init@yorigine{0}
+ \edef\@xsgmin{\fpeval{sign(\tkz@init@xmin)}}
+ \edef\@xsgmax{\fpeval{sign(\tkz@init@xmax)}}
+ \edef\@ysgmin{\fpeval{sign(\tkz@init@ymin)}}
+ \edef\@ysgmax{\fpeval{sign(\tkz@init@ymax)}}
+ \let\tkz@tmp@xa\tkz@init@xmin %modif 2016
+ \let\tkz@tmp@xb\tkz@init@xmax %modif 2016
+ \let\tkz@tmp@ya\tkz@init@ymin %modif 2016
+ \let\tkz@tmp@yb\tkz@init@ymax %modif 2016
+ \tkz@init@NOfalse
+ \ifx\@xsgmin\@xsgmax \tkz@init@NOtrue \fi
+ \ifx\@ysgmin\@ysgmax \tkz@init@NOtrue \fi
+ \iftkz@init@NO%
+ \ifx\@xsgmin\@xsgmax
+ \edef\tkz@init@xmax{\tkz@Dec{\tkz@init@xmax-(\tkz@init@xmin)}}
+ \edef\tkz@init@xorigine{\tkz@init@xmin}
+ \edef\tkz@init@xmin{0}
+ \fi
+ \ifx\@ysgmin\@ysgmax
+ \edef\tkz@init@ymax{\tkz@Dec{\tkz@init@ymax-(\tkz@init@ymin)}}
+ \edef\tkz@init@yorigine{\tkz@init@ymin}
+ \edef\tkz@init@ymin{0}
+ \fi
+ \fi
+ \edef\tkz@xa{\tkz@Dec{\tkz@init@xmin/\tkz@init@xstep}}
+ \edef\tkz@xb{\tkz@Dec{\tkz@init@xmax/\tkz@init@xstep}}
+ \edef\tkz@ya{\tkz@Dec{\tkz@init@ymin/\tkz@init@ystep}}
+ \edef\tkz@yb{\tkz@Dec{\tkz@init@ymax/\tkz@init@ystep}}
+ \tkz@getdecimal{\tkz@init@xstep} % amélioration nb dec et integer
+ \xdef\tkz@init@xdec{\number\c@pgfmath@countb}
+ \tkz@getdecimal{\tkz@init@ystep}
+ \xdef\tkz@init@ydec{\number\c@pgfmath@countb}
+}%
+\def\tkzAddName{\pgfutil@ifnextchar[{\tkz@AddName}{\tkz@AddName[]}}
+\def\tkz@AddName[#1]#2{%
+\node[above left,#1] at (\pgf@path@lastx,\pgf@path@lasty){#2};
+}%
+%<--------------------------------------------------------------------------–>
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-intersections.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-intersections.tex
new file mode 100644
index 0000000000..050697a1bb
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-intersections.tex
@@ -0,0 +1,525 @@
+% tkz-tools-lua-intersections.tex
+% Copyright 2023 Alain Matthes
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status “maintained”.
+%
+% The Current Maintainer of this work is Alain Matthes.
+% utf8 encoding
+
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-lua-intersections.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+% intersection de deux lignes
+%<--------------------------------------------------------------------------–>
+\def\tkzInterLL(#1,#2)(#3,#4){% méthode avec xfp
+\tkz@InterLL(#1,#2)(#3,#4){tkzPointResult}
+}
+
+\def\tkz@InterLL(#1,#2)(#3,#4)#5{%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}%
+\tkz@ax\pgf@x%
+\tkz@ay\pgf@y%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}
+\tkz@bx\pgf@x%
+\tkz@by\pgf@y%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}%
+\tkz@cx\pgf@x%
+\tkz@cy\pgf@y%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}}%
+\tkz@dx\pgf@x%
+\tkz@dy\pgf@y%
+\edef\tkzax{\strip@pt\tkz@ax}%
+\edef\tkzay{\strip@pt\tkz@ay}%
+\edef\tkzbx{\strip@pt\tkz@bx}%
+\edef\tkzby{\strip@pt\tkz@by}%
+\edef\tkzcx{\strip@pt\tkz@cx}%
+\edef\tkzcy{\strip@pt\tkz@cy}%
+\edef\tkzdx{\strip@pt\tkz@dx}%
+\edef\tkzdy{\strip@pt\tkz@dy}%
+\edef\tkz@deltax{\tkz@Dec{(\tkzax-(\tkzbx))/(28.45274)}}
+\edef\tkz@deltaxx{\tkz@Dec{(\tkzcx-(\tkzdx))/(28.45274)}}
+\edef\tkz@deltay{\tkz@Dec{(\tkzay-(\tkzby))/(28.45274)}}
+\edef\tkz@deltayy{\tkz@Dec{(\tkzcy-(\tkzdy))/(28.45274)}}
+\edef\tkz@deltaxy{\tkz@Dec{((\tkzax*\tkzby)-(\tkzay*\tkzbx))/(809.55841)}}
+\edef\tkz@deltaxxyy{\tkz@Dec{((\tkzcx*\tkzdy)-(\tkzcy*\tkzdx))/(809.55841)}}
+\edef\tkz@div{\tkz@Dec{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}}
+\edef\tkz@numx{\tkz@Dec{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}}
+\edef\tkz@numy{\tkz@Dec{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}}
+\edef\tkz@xs{\tkz@Dec{\tkz@numx/\tkz@div}}
+\edef\tkz@ys{\tkz@Dec{\tkz@numy/\tkz@div}}
+\edef\tkz@xs{\tkz@Round{\tkz@xs}{5}}
+\edef\tkz@ys{\tkz@Round{\tkz@ys}{5}}
+\path[coordinate](\tkz@xs,\tkz@ys) coordinate (#5);
+}
+
+
+% méthode with coordinates
+\def\tkzInterLLxy(#1,#2,#3,#4)(#5,#6,#7,#8){%
+%\path (intersection of #1--#2 and #3--#4) coordinate(#5);%
+\tkz@ax#1%
+\tkz@ay#2%
+\tkz@bx#3%
+\tkz@by#4%
+\tkz@cx#5%
+\tkz@cy#6%
+\tkz@dx#7%
+\tkz@dy#8%
+\edef\tkzax{\strip@pt\tkz@ax}%
+\edef\tkzay{\strip@pt\tkz@ay}%
+\edef\tkzbx{\strip@pt\tkz@bx}%
+\edef\tkzby{\strip@pt\tkz@by}%
+\edef\tkzcx{\strip@pt\tkz@cx}%
+\edef\tkzcy{\strip@pt\tkz@cy}%
+\edef\tkzdx{\strip@pt\tkz@dx}%
+\edef\tkzdy{\strip@pt\tkz@dy}%
+\edef\tkz@deltax{\tkz@Dec{(\tkzax-(\tkzbx))/(28.45274)}}
+\edef\tkz@deltaxx{\tkz@Dec{(\tkzcx-(\tkzdx))/(28.45274)}}
+\edef\tkz@deltay{\tkz@Dec{(\tkzay-(\tkzby))/(28.45274)}}
+\edef\tkz@deltayy{\tkz@Dec{(\tkzcy-(\tkzdy))/(28.45274)}}
+\edef\tkz@deltaxy{\tkz@Dec{((\tkzax*\tkzby)-(\tkzay*\tkzbx))/(809.55841)}}
+\edef\tkz@deltaxxyy{\tkz@Dec{((\tkzcx*\tkzdy)-(\tkzcy*\tkzdx))/(809.55841)}}
+\edef\tkz@div{\tkz@Dec{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}}
+\edef\tkz@numx{\tkz@Dec{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}}
+\edef\tkz@numy{\tkz@Dec{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}}
+\edef\tkz@xs{\tkz@Dec{\tkz@numx/\tkz@div}}
+\edef\tkz@ys{\tkz@Dec{\tkz@numy/\tkz@div}}
+\edef\tkz@xs{\tkz@Round{\tkz@xs}{5}}
+\edef\tkz@ys{\tkz@Round{\tkz@ys}{5}}
+\path[coordinate](\tkz@xs,\tkz@ys) coordinate (tkzPointResult);
+}
+
+%<--------------------------------------------------------------------------–>
+% intersection de Ligne Cercle rayon connu
+%<--------------------------------------------------------------------------–>
+% /*
+% Calculate the intersection of a ray and a sphere
+% The line segment is defined from p1 to p2
+% The sphere is of radius r and centered at sc
+% There are potentially two points of intersection given by
+% p = p1 + mu1 (p2 - p1)
+% p = p1 + mu2 (p2 - p1)
+% Return FALSE if the ray doesn't intersect the sphere.
+% */
+% int RaySphere(XYZ p1,XYZ p2,XYZ sc,double r,double *mu1,double *mu2)
+% {
+% double a,b,c;
+% double bb4ac;
+% XYZ dp;
+%
+% dp.x = p2.x - p1.x;
+% dp.y = p2.y - p1.y;
+% dp.z = p2.z - p1.z;
+% a = dp.x * dp.x + dp.y * dp.y + dp.z * dp.z;
+% b = 2 * (dp.x * (p1.x - sc.x) + dp.y * (p1.y - sc.y) + dp.z * (p1.z - sc.z));
+% c = sc.x * sc.x + sc.y * sc.y + sc.z * sc.z;
+% c += p1.x * p1.x + p1.y * p1.y + p1.z * p1.z;
+% c -= 2 * (sc.x * p1.x + sc.y * p1.y + sc.z * p1.z);
+% c -= r * r;
+% bb4ac = b * b - 4 * a * c;
+% if (ABS(a) < EPS || bb4ac < 0) {
+% *mu1 = 0;
+% *mu2 = 0;
+% return(FALSE);
+% }
+%
+% *mu1 = (-b + sqrt(bb4ac)) / (2 * a);
+% *mu2 = (-b - sqrt(bb4ac)) / (2 * a);
+%
+% return(TRUE);
+% }
+%<---------- test ------------------------------------------------------–>
+\def\tkzTestInterLC(#1,#2)(#3,#4){%
+\begingroup
+\tkz@Projection(#1,#2)(#3){tkz@pth}% distance centre à la ligne
+\tkz@@CalcLength(#3,tkz@pth){tkz@mathLen}%
+\tkz@@CalcLength(#3,#4){tkzLengthResult}%calcul du rayon
+\ifdim\tkz@mathLen pt>\tkzLengthResult pt\relax%
+\global\tkzFlagLCfalse
+\else
+\global\tkzFlagLCtrue
+\fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\def\tkz@numlc{0}
+\pgfkeys{/linecircle/.cd,
+ node/.code = \def\tkz@numlc{0},
+ R/.code = \def\tkz@numlc{1},
+ with nodes/.code = \def\tkz@numlc{2},
+ common/.store in = \tkz@common,
+ common = {},
+ near/.is if = tkz@near,
+ near/.default = true,
+ near = false,
+ next to/.store in = \tkz@nextto,
+ next to/.initial = {},
+ next/.default = {},
+ next to = {},
+ next to/.value required,
+ node
+ }
+%<--------------------------------------------------------------------------–>
+\def\tkzInterLC{\pgfutil@ifnextchar[{\tkz@InterLC}{\tkz@InterLC[]}}
+\def\tkz@InterLC[#1](#2,#3)(#4,#5){%
+\begingroup
+\pgfqkeys{/linecircle}{#1}
+ \pgfinterruptboundingbox
+\ifcase\tkz@numlc%
+ % first case 0
+ \tkz@@CalcLength(#4,#5){tkzLengthResult}
+ \tkzInterLCR(#2,#3)(#4,\tkzLengthResult pt){tkzFirstPointResult}%
+ {tkzSecondPointResult}
+\or% 1
+ \tkzInterLCR(#2,#3)(#4,#5 cm){tkzFirstPointResult}
+ {tkzSecondPointResult}%
+\or% 2
+ \tkzInterLCWithNodes(#2,#3)(#4,#5){tkzFirstPointResult}%
+ {tkzSecondPointResult}%
+\fi
+\iftkz@near
+ \tkz@@CalcLength(#2,tkzFirstPointResult){tkzLengthFirst}
+ \tkz@@CalcLength(#2,tkzSecondPointResult){tkzLengthSecond}
+ \ifdim \tkzLengthFirst pt < \tkzLengthSecond pt\relax%
+ \else
+ \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+ \fi
+\else
+ \ifx\tkz@common\tkzutil@empty
+ \ifx\tkz@nextto\tkzutil@empty
+ \tkzFindAngle(tkzSecondPointResult,tkzFirstPointResult,#4)
+ \tkzGetAngle{tkz@an}
+ \ifdim\tkz@an pt<180 pt\relax%
+ \else
+ \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+ \fi
+ \else
+ \tkz@@CalcLength(\tkz@nextto,tkzFirstPointResult){tkzLengthFirst}
+ \tkz@@CalcLength(\tkz@nextto,tkzSecondPointResult){tkzLengthSecond}
+ \ifdim \tkzLengthFirst pt < \tkzLengthSecond pt\relax%
+ \else
+ \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+ \fi
+ \fi
+ \else
+ \tkz@@CalcLength(\tkz@common,tkzSecondPointResult){tkz@mathLen}
+ \ifdim\tkz@mathLen pt<1pt\relax%
+ \else
+ \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+ \fi
+ \fi
+\fi%near
+\endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+\def\tkzInterLCR(#1,#2)(#3,#4)#5#6{%
+\begingroup
+\tkz@radi=#4%
+\tkz@@extractxy{#3}
+\tkz@bx =\pgf@x\relax%
+\tkz@by =\pgf@y\relax%
+\tkz@Projection(#1,#2)(#3){tkz@pth}
+\tkz@@CalcLength(#3,tkz@pth){tkz@mathLen}
+ \ifdim\tkz@mathLen pt<0.05pt\relax%
+ \pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+ \tkz@ax=\pgf@x%
+ \tkz@ay=\pgf@y%
+ \pgfpointborderellipse{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@radi}{\tkz@radi}}
+ \tkz@ax=\pgf@x\relax%
+ \tkz@ay=\pgf@y\relax%
+ \advance\tkz@bx by\tkz@ax\relax%
+ \advance\tkz@by by\tkz@ay\relax%
+ \pgfcoordinate{#6}{\pgfqpoint{\tkz@bx}{\tkz@by}}
+ \tkzCSym(#3)(#6){#5}
+ \else
+ \edef\pgfmathresult{\fpeval{\tkz@mathLen/\tkz@radi}}
+ % \edef\tkz@angle{\fpeval{acosd(\pgfmathresult)}}
+ \pgfmathacos@{\pgfmathresult}%
+ \let\tkz@angle\pgfmathresult%
+ \pgfpointdiff{\pgfpointanchor{#3}{center}}%
+ {\pgfpointanchor{tkz@pth}{center}}%
+ \tkz@ax=\pgf@x%
+ \tkz@ay=\pgf@y%
+ \pgfpointborderellipse{\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\pgfpoint{\tkz@radi}{\tkz@radi}}
+ \tkz@ax =\pgf@x\relax%
+ \tkz@ay =\pgf@y\relax%
+ \advance\tkz@bx by\tkz@ax\relax%
+ \advance\tkz@by by\tkz@ay\relax%
+ \tkz@@extractxy{#3}
+ \tkz@ax =\pgf@x\relax%
+ \tkz@ay =\pgf@y\relax%
+ \tkz@@extractxy{tkz@pth}
+ \pgfmathrotatepointaround{\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {\tkz@angle}
+ \pgfcoordinate{#5}{\pgfqpoint{\pgf@x}{\pgf@y}}
+ \pgfmathrotatepointaround{\pgfpoint{\tkz@bx}{\tkz@by}}%
+ {\pgfpoint{\tkz@ax}{\tkz@ay}}%
+ {-\tkz@angle}
+ \pgfcoordinate{#6}{\pgfqpoint{\pgf@x}{\pgf@y}}
+
+\fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% intersection de Ligne Cercle
+% #4 center #5 point sur le cercle
+%<--------------------------------------------------------------------------–>
+% \def\tkzInterLC(#1,#2)(#3,#4)#5#6{%
+% \begingroup
+% \tkz@@CalcLength(#3,#4){tkz@rad}
+% \tkzInterLCR(#1,#2)(#3,\tkz@rad pt){#5}{#6}
+% \endgroup
+% }
+%<--------------------------------------------------------------------------–>
+% intersection de Ligne Cercle rayon inconnu
+%<--------------------------------------------------------------------------–>
+\def\tkzInterLCWithNodes(#1,#2)(#3,#4,#5)#6#7{%
+\begingroup
+ \tkz@@CalcLength(#4,#5){tkz@radius}
+ \tkzInterLCR(#1,#2)(#3,\tkz@radius pt){#6}{#7}
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Intersection of 2 circles
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+% méthode
+% /* circle_circle_intersection() *
+% * Determine the points where 2 circles in a common plane intersect.
+% *
+% * int circle_circle_intersection(
+% * // center and radius of 1st circle
+% * double x0, double y0, double r0,
+% * // center and radius of 2nd circle
+% * double x1, double y1, double r1,
+% * // 1st intersection point
+% * // 2nd intersection point
+% *
+% * This is a public domain work. 3/26/2005 Tim Voght
+% *
+% int circle_circle_intersection(double x0, double y0, double r0,
+% double x1, double y1, double r1,
+% double *xi, double *yi,
+% double *xi_prime, double *yi_prime)
+% {
+% double a, dx, dy, d, h, rx, ry;
+% double x2, y2;
+%
+% /* dx and dy are the vertical and horizontal distances between
+% * the circle centers.
+% */
+% dx = x1 - x0;
+% dy = y1 - y0;
+%
+% /* Determine the straight-line distance between the centers. */
+% //d = sqrt((dy*dy) + (dx*dx));
+% d = hypot(dx,dy); // Suggested by Keith Briggs
+%
+% /* Check for solvability. */
+% if (d > (r0 + r1))
+% {
+% /* no solution. circles do not intersect. */
+% return 0;
+% }
+% if (d < fabs(r0 - r1))
+% {
+% /* no solution. one circle is contained in the other */
+% return 0;
+% }
+%
+% /* 'point 2' is the point where the line through the circle
+% * intersection points crosses the line between the circle
+% * centers.
+% */
+%
+% /* Determine the distance from point 0 to point 2. */
+% a = ((r0*r0) - (r1*r1) + (d*d)) / (2.0 * d) ;
+%
+% /* Determine the coordinates of point 2. */
+% x2 = x0 + (dx * a/d);
+% y2 = y0 + (dy * a/d);
+%
+% /* Determine the distance from point 2 to either of the
+% * intersection points.
+% */
+% h = sqrt((r0*r0) - (a*a));
+%
+% /* Now determine the offsets of the intersection points from
+% * point 2.
+% */
+% rx = -dy * (h/d);
+% ry = dx * (h/d);
+%
+% /* Determine the absolute intersection points. */
+% *xi = x2 + rx;
+% *xi_prime = x2 - rx;
+% *yi = y2 + ry;
+% *yi_prime = y2 - ry;
+%
+% return 1;
+% }
+%<--------------------------------------------------------------------------–>
+% Intersection de deux cercles
+%<--------------------------------------------------------------------------–>
+%<---------- test ------------------------------------------------------–>
+% test avec des nodes R-r <= d <= R+r
+\def\tkzTestInterCC(#1,#2)(#3,#4){%
+\begingroup
+\tkz@@CalcLength(#1,#3){tkz@mathLen}% distance entre les centres
+\tkz@@CalcLength(#2,#1){tkz@rA}%calcul du rayon
+\tkz@@CalcLength(#4,#3){tkz@rB}%calcul du rayon
+% test if d <= rA + rB ?
+\edef\tkz@rS{\fpeval{\tkz@rA+\tkz@rB}}
+\ifdim\tkz@mathLen pt > \tkz@rS pt\relax%
+\global\tkzFlagCCfalse
+\else
+% now test if d>= rA - rB or rB-rA
+ \ifdim \tkz@rA pt > \tkz@rB pt\relax%
+ \edef\tkz@rD{\fpeval{\tkz@rA-\tkz@rB}}
+ \else
+ \edef\tkz@rD{\fpeval{\tkz@rB-\tkz@rA}}
+ \fi
+\ifdim \tkz@rD pt > \tkz@mathLen pt\relax%
+ \global\tkzFlagCCfalse
+\else
+\global\tkzFlagCCtrue
+\fi
+\fi
+\endgroup
+}
+
+\def\tkz@numcc{0}
+\pgfkeys{
+/circlecircle/.cd,
+ node/.code = \def\tkz@numcc{0},
+ R/.code = \def\tkz@numcc{1},
+ with nodes/.code = \def\tkz@numcc{2},
+ common/.store in = \tkz@common,
+ common = {},
+ node
+}
+%<--------------------------------------------------------------------------–>
+\def\tkzInterCC{\pgfutil@ifnextchar[{\tkz@InterCC}{\tkz@InterCC[]}}
+\def\tkz@InterCC[#1](#2,#3)(#4,#5){%
+\begingroup
+\pgfqkeys{/circlecircle}{#1}
+\ifcase\tkz@numcc%
+ % first case 0
+ \tkz@save@length
+ \tkz@@CalcLengthcm(#2,#3){tkz@rayA}
+ \tkz@@CalcLengthcm(#4,#5){tkz@rayB}
+ \tkz@restore@length
+\tkzInterCCR(#2,\tkz@rayA)(#4,\tkz@rayB){tkzFirstPointResult}{tkzSecondPointResult}
+ \or% 1
+ \tkzInterCCR(#2,#3)(#4,#5){tkzFirstPointResult}{tkzSecondPointResult}%
+ \or%2
+ \tkzInterCCWithNodes(#2,#3)(#4,#5){tkzFirstPointResult}{tkzSecondPointResult}
+\fi
+ \ifx\tkz@common\tkzutil@empty
+ \tkzFindAngle(#2,tkzFirstPointResult,#4) \tkzGetAngle{tkz@an}
+ \ifdim\tkz@an pt<180 pt\relax%
+ \else
+ \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+ \fi
+ \else
+\tkz@@CalcLength(\tkz@common,tkzSecondPointResult){tkz@mathLen}
+ \ifdim\tkz@mathLen pt<0.05pt\relax%
+ \else
+ \pgfnodealias{tkzPointTmp}{tkzSecondPointResult}
+ \pgfnodealias{tkzSecondPointResult}{tkzFirstPointResult}
+ \pgfnodealias{tkzFirstPointResult}{tkzPointTmp}
+ \fi
+ \fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+
+\def\tkzInterCCR(#1,#2)(#3,#4)#5#6{%
+\begingroup
+\pgfinterruptboundingbox
+\tkz@save@length
+\tkz@@CalcLength(#1,#3){tkz@dd}
+\tkz@restore@length
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}
+\tkz@ax\pgf@x %
+\tkz@ay\pgf@y %
+\edef\tkzcax{\strip@pt\tkz@ax}%
+\edef\tkzcay{\strip@pt\tkz@ay}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}
+\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}
+\tkz@bx\pgf@x %
+\tkz@by\pgf@y %
+\edef\tkzcbx{\strip@pt\tkz@bx}%
+\edef\tkzcby{\strip@pt\tkz@by}%
+\tkz@cx#2cm %
+\tkz@cy#4cm %
+\edef\tkzccx{\strip@pt\tkz@cx}%
+\edef\tkzccy{\strip@pt\tkz@cy}%
+\edef\tkz@aa{\tkz@Dec{((\tkzccx+\tkzccy)/(2*\tkz@dd))*(\tkzccx-(\tkzccy))+\tkz@dd/2}}
+\edef\tkz@xx{\tkz@Dec{\tkzcax+\tkz@aa/\tkz@dd*(\tkzcbx - (\tkzcax))}}
+\edef\tkz@yy{\tkz@Dec{\tkzcay+\tkz@aa/\tkz@dd*(\tkzcby - (\tkzcay))}}
+\path[coordinate](\tkz@xx pt,\tkz@yy pt) coordinate (tkzRadialCenter);
+\edef\tkz@hh{\tkz@Abs{(\tkzccx+\tkz@aa)*(\tkzccx-(\tkz@aa))}}
+\edef\tkz@hh{\tkz@Dec{\tkz@Sqrt{\tkz@hh}}}
+ \edef\tkz@rx{\tkz@Dec{\tkz@hh / \tkz@dd * (\tkzcay - (\tkzcby))}}
+\edef\tkz@ry{\tkz@Dec{\tkz@hh / \tkz@dd * (\tkzcbx - (\tkzcax))}}
+\edef\tkz@xs{\tkz@Dec{\tkz@xx + \tkz@rx}}
+\edef\tkz@ys{\tkz@Dec{\tkz@yy + \tkz@ry}}
+\path[coordinate](\tkz@xs pt,\tkz@ys pt) coordinate (#5);
+\edef\tkz@xss{\tkz@Dec{\tkz@xx - \tkz@rx}}
+\edef\tkz@yss{\tkz@Dec{\tkz@yy - \tkz@ry}}
+\path[coordinate](\tkz@xss pt,\tkz@yss pt) coordinate (#6);
+\endpgfinterruptboundingbox
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% #2 node #3 node #4 node #5 node
+% \def\tkzInterCC(#1,#2)(#3,#4)#5#6{%
+% \begingroup
+% \tkz@@CalcLength(#1,#2){tkz@rayA}
+% \tkz@@CalcLength(#3,#4){tkz@rayB}
+% \tkzInterCCR(#1,\tkz@rayA pt)(#3,\tkz@rayB pt){#5}{#6}
+% \endgroup
+% }
+%<--------------------------------------------------------------------------–>
+% Intersection de deux cercles Avec deux points
+%<--------------------------------------------------------------------------–>
+% la première variante devrait être #2 #3 avec #4 #5
+\def\tkzInterCCWithNodes(#1,#2,#3)(#4,#5,#6)#7#8{%
+\begingroup
+ \tkz@@CalcLengthcm(#2,#3){tkz@rayA}
+ \tkz@@CalcLengthcm(#5,#6){tkz@rayB}
+ \tkzInterCCR(#1,\tkz@rayA)(#4,\tkz@rayB){#7}{#8}
+\endgroup
+}
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-math.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-math.tex
new file mode 100644
index 0000000000..1a0491d599
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-lua-math.tex
@@ -0,0 +1,417 @@
+% tkz-tools-lua-math.tex
+% Copyright 2023 Alain Matthes
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% This work has the LPPL maintenance status “maintained”.
+% The Current Maintainer of this work is Alain Matthes.
+
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-lua-math.tex}
+\makeatletter
+%<-------------------------------------------------------------------------->
+%<-------------------------------------------------------------------------->
+% Lengths
+%<-------------------------------------------------------------------------->
+%<-------------------------------------------------------------------------->
+\begin{luacode*}
+complex = {} -- global complex numbers registry
+M = {} -- the module
+local mt = {} --metatable for complex numbers
+setmetatable(_ENV, {__index = complex})
+ function new (r, i)
+ local cp = {}
+ cp = {r=r, i=i}
+ return setmetatable(cp,mt)
+ end
+ M.new = new -- add 'new' to the module
+ -- create constant 'i'
+ M.i = new(0, 1)
+
+ function M.add (c1, c2)
+ return new(c1.r + c2.r, c1.i + c2.i)
+ end
+
+ function M.sub (c1, c2)
+ return new(c1.r - c2.r, c1.i - c2.i)
+ end
+
+ function M.mul (c1, c2)
+ return new(c1.r*c2.r - c1.i*c2.i, c1.r*c2.i + c1.i*c2.r)
+ end
+
+ function M.inv (c)
+ local n = c.r^2 + c.i^2
+ return new(c.r/n, -c.i/n)
+ end
+
+ function M.div (c1, c2)
+ return M.mul(c1, M.inv(c2))
+ end
+
+ function M.re (c)
+ return new(c.r,0)
+ end
+
+ function M.im (c)
+ return new(c.i,0)
+ end
+
+ function M.mod (c)
+ local n = c.r^2 + c.i^2
+ return new(n,0)
+ end
+
+ function M.prinarg(c)
+ local arg
+ if c.r > 0 then
+ arg = math.atan(c.i/c.r)
+ elseif c.r < 0 and c.i >= 0 then
+ arg = math.atan(c.i/c.r) + math.pi
+ elseif c.r < 0 and c.i < 0 then
+ arg = math.atan(c.i/c.r) - math.pi
+ elseif c.r == 0 and c.i > 0 then
+ arg = math.pi / 2
+ elseif c.r == 0 and c.i < 0 then
+ arg = - math.pi / 2
+ else
+ error("Principal argument not defined.")
+ end
+ return arg
+ end
+
+ function M.op (...)
+ return ...
+ end
+
+ function M.tostring (c)
+ if c.i ==0 then
+ return string.format("%g", c.r)
+ elseif c.i> 0 and c.i==1 then
+ return string.format("%g+i", c.r)
+ elseif c.i> 0 and c.i~=1 then
+ return string.format("%g+%gi", c.r, c.i)
+ else
+ return string.format("%g%gi", c.r, c.i) --to avoid +-
+ end
+ end
+
+ --Setting Metatable operations.
+ mt.__add = M.add
+ mt.__mul = M.mul
+ mt.__sub = M.sub
+ mt.__tostring = M.tostring
+\end{luacode*}
+
+
+
+\begin{luacode*}
+ function normalize(angleA,angleB)
+ if angleA > 0 then
+ if angleA > angleB then
+ angleA = angleA - 360
+ end
+ else
+ if angleA > angleB then
+ angleB = angleB + 360
+ end
+ end
+ return angleA, angleB
+ end
+
+ function math.angle(x1, y1, x2, y2)
+ local a = math.deg(math.atan(y2 - y1, x2 - x1))
+ if a < 0 then
+ return a + 360
+ else
+ return a
+ end
+ end
+
+ function tkzop(...)
+ inf = math.huge
+ return ...
+end
+
+function tkzround(nb, ND)
+ local p = 10^(ND or 0)
+ return math.floor(nb * p + 0.5) / p
+end
+\end{luacode*}
+
+\newcommand\cpxNew[2]{%
+\directlua{complex[\luastringN{#1}] = M.new(#2)}}
+\newcommand\cpxPrint[1]{%
+\directlua{tex.sprint(tostring(complex[\luastringN{#1}]))}}
+\newcommand\cpxAdd[3]{%
+\directlua{complex[\luastringN{#1}]%
+ =M.add(complex[\luastringN{#2}],complex[\luastringN{#3}])}}
+
+
+\def\tkz@Dec#1{%
+ \directlua{tex.print(string.format('\@percentchar.6f',#1))}
+ }
+\def\tkz@Op#1{\directlua{tex.sprint(tostring(tkzop(#1)))}}
+\def\tkz@Log#1{\directlua{tex.sprint(math.log(#1))}}
+\def\tkz@Exp#1{\directlua{tex.sprint(math.exp(#1))}}
+\def\tkz@Sqrt#1{\directlua{tex.sprint(math.sqrt(#1))}}
+\def\tkz@Abs#1{\directlua{tex.sprint(math.abs(#1))}}
+\def\tkz@Pi{\directlua{tex.sprint(math.pi)}}
+\def\tkz@Cos#1{\directlua{tex.sprint(math.cos(#1))}}
+\def\tkz@Sin#1{\directlua{tex.sprint(tostring(math.sin(#1)))}}
+\def\tkz@Tan#1{\directlua{tex.sprint(math.tan(#1))}}
+\def\tkz@Rad#1{\directlua{tex.sprint(math.rad(#1))}}
+\def\tkz@Acos#1{\directlua{tex.sprint(math.acos(#1))}}
+\def\tkz@Asin#1{\directlua{tex.sprint(math.asin(#1))}}
+\def\tkz@Atan#1{\directlua{tex.sprint(math.atan(#1))}}
+\def\tkz@Round#1#2{\directlua{tex.sprint(tostring(tkzround(#1,#2)))}}
+\def\tkz@Angle#1#2#3#4{\directlua{tex.sprint(math.angle(#1,#2,#3,#4))}}
+\def\tkz@Ceil#1{\directlua{tex.sprint(math.ceil(#1))}}
+\def\tkz@Floor#1{\directlua{tex.sprint(math.floor(#1))}}
+\def\tkz@Huge{\directlua{tex.sprint(math.huge)}}
+\def\tkz@Max#1{\directlua{tex.sprint(math.max(#1))}}
+\def\tkz@Min#1{\directlua{tex.sprint(math.min(#1))}}
+\def\tkz@Random#1{\directlua{tex.sprint(math.random(#1))}}
+\def\tkz@veclen#1#2{%
+ \directlua{%
+ tex.print(string.format('\@percentchar.6f',math.sqrt((#1)^2+(#2)^2)))%
+ }%
+}
+\let\tkzSqrt\tkz@Sqrt
+\let\tkzPi\tkz@Pi
+\let\tkzExp\tkz@Exp
+\let\tkzLog\tkz@Log
+\let\tkzSin\tkz@Sin
+\let\tkzCos\tkz@Cos
+% \tkzpointnormalised#
+% tkzCalcLength
+% \tkzGetLength
+% \tkzpttocm
+% \tkzcmtopt
+% \tkzFindSlope
+% option xfp
+
+% \tkzpointnormalised normalise un point A-->A' tq ||v(OA')=1||
+% équivalent de \pgfpointnormalised avec fp
+% example
+% \tkzpointnormalised{%
+% \pgfpointdiff{\pgfpointanchor{A}{center}}
+% {\pgfpointanchor{B}{center}}}
+
+% or
+% \pgf@x=1 cm
+% \pgf@y=12 cm
+% \tkzpointnormalised{}
+%<--------------------------------------------------------------------------
+\def\tkzpointnormalised#1{%
+\pgf@process{#1}%
+\pgf@xa=\pgf@x%
+\pgf@ya=\pgf@y%
+\edef\tkz@temp@xa{\strip@pt\pgf@xa}%
+\edef\tkz@temp@ya{\strip@pt\pgf@ya}%
+\edef\tkz@den{\tkz@veclen{\tkz@temp@xa}{\tkz@temp@ya}}
+\edef\tkz@coordx{\tkz@Op{\tkz@temp@xa/\tkz@den}}
+\edef\tkz@coordx{\tkz@Dec{\tkz@Round{\tkz@coordx}{5}}}
+\edef\tkz@coordy{\tkz@Op{\tkz@temp@ya/\tkz@den}}
+\edef\tkz@coordy{\tkz@Dec{\tkz@Round{\tkz@coordy}{5}}}
+\pgf@x = \tkz@coordx pt
+\pgf@y = \tkz@coordy pt
+}
+%\def\tkz@Dec#1{\directlua{tex.print(string.format('\@percentchar.12f',#1))}}
+%<-------------------------------------------------------------------------->
+% restaure and save length
+\def\tkz@save@length{\global\let\tkz@temp@length\tkzLengthResult}%
+\def\tkz@restore@length{\global\let\tkzLengthResult\tkz@temp@length }%
+%<-------------------------------------------------------------------------->
+% \tkzCalcLength Distance entre deux points en pt ou en cm avec xfp
+% \veclen mais avec fp
+% option cm le résultat est en cm sinon en pt with cm=false
+%<-------------------------------------------------------------------------->
+\pgfkeys{tkzcalclen/.cd,
+ cm/.is if = tkzLengthIncm,
+ cm/.default = true,
+ cm = true}
+
+\def\tkzCalcLength{\pgfutil@ifnextchar[{\tkz@CalcLength}{\tkz@CalcLength[]}}
+\def\tkz@CalcLength[#1](#2,#3){%
+\pgfqkeys{/tkzcalclen}{#1}%
+\begingroup
+\tkz@@CalcLength(#2,#3){tkzLengthResult}
+\iftkzLengthIncm
+ \edef\tkz@xfpMathLen{\tkz@Dec{\tkz@Round{\tkzLengthResult/28.45274}{6}}}
+ \global\let\tkzLengthResult\tkz@xfpMathLen
+\fi
+\endgroup
+}%
+
+\def\tkz@@CalcLength(#1,#2)#3{%
+\pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+\edef\tkz@xa{\strip@pt\pgf@x}%
+\edef\tkz@ya{\strip@pt\pgf@y}%
+\edef\tkz@xfpMathLen{\tkz@veclen{\tkz@xa}{\tkz@ya}}
+\global\expandafter\edef\csname #3\endcsname{\tkz@xfpMathLen}
+}
+
+\def\tkz@@CalcLengthcm(#1,#2)#3{%
+\pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+\edef\tkz@xa{\strip@pt\pgf@x}%
+\edef\tkz@ya{\strip@pt\pgf@y}%
+\edef\tkz@xfpMathLen{\tkz@veclen{\tkz@xa}{\tkz@ya}}
+\edef\tkz@xfpMathLen{\tkz@Dec{\tkz@Round{\tkz@xfpMathLen/28.45274}{6}}}
+\global\expandafter\edef\csname #3\endcsname{\tkz@xfpMathLen}
+}
+\def\tkz@@CalcLengthb(#1,#2)#3{%
+\pgfpointdiff{\pgfpointanchor{#1}{center}}%
+ {\pgfpointanchor{#2}{center}}%
+\edef\tkz@xfpMathLen{\fpeval{sqrt((\pgf@x)^2+(\pgf@y)^2)}}
+\edef\tkz@xfpMathLen{\fpeval{round(\tkz@xfpMathLen,6)}}
+\global\expandafter\edef\csname #3\endcsname{\tkz@xfpMathLen}
+}
+%<-------------------------------------------------------------------------->
+\def\tkzGetLength#1{%
+\global\expandafter\edef\csname #1\endcsname{\tkzLengthResult}}
+%<-------------------------------------------------------------------------->
+% \tkzpttocm passage de pt   cm div par 28.45274
+%<-------------------------------------------------------------------------->
+\def\tkzpttocm(#1)#2{%
+\begingroup
+ \edef\tkz@mathresult{\tkz@Round{#1/28.45274}{6}}
+ \global\expandafter\edef\csname #2\endcsname{\tkz@mathresult}%
+\endgroup
+}%
+%<-------------------------------------------------------------------------->
+% \tkzcmtopt passage de cm   pt mul par 28.45274
+%<--------------------------------------------------------------------------
+\def\tkzcmtopt(#1)#2{%
+\begingroup
+ \edef\tkz@mathresult{\tkz@Round{#1*28.45274}{6}}
+ \global\expandafter\edef\csname #2\endcsname{\tkz@mathresult}%
+\endgroup
+}%
+%<---------------------------------------------------------–>
+ \def\tkzGetResult#1{%
+ \global\expandafter\edef\csname #1\endcsname{\tkzMathResult}}
+%<---------------------------------------------------------–>
+% Schrodinger's cat idea 03/01/20
+\tikzset{veclen/.code={%
+\pgfmathdeclarefunction*{veclen}{2}{%
+\begingroup%
+ \pgfmath@x##1pt\relax%
+ \pgfmath@y##2pt\relax%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \edef\tkz@temp@xa{\strip@pt\pgf@xa}%
+ \edef\tkz@temp@ya{\strip@pt\pgf@ya}%
+ \edef\tkz@xfpMathLen{\tkz@veclen{\tkz@temp@xa}{\tkz@temp@ya}}%
+ \pgfmath@returnone\tkz@xfpMathLen pt%
+\endgroup%
+}}}%
+%<---------------------------------------------------------–>
+\def\tkzSwapPoints(#1,#2){
+ \pgfnodealias{tkzPointTmp}{#2}
+ \pgfnodealias{#2}{#1}
+ \pgfnodealias{#1}{tkzPointTmp}}
+%<---------------------------------------------------------–>
+\def\tkzPermute(#1,#2,#3){
+ \tkzURotateWithNodes(#1,#3,#2)(#3) \tkzGetPoint{tkzpt}
+ \tkzURotateWithNodes(#1,#2,#3)(#2) \tkzGetPoint{#2}
+ \tkzSwapPoints(tkzpt,#3)
+}
+%<---------------------------------------------------------–>
+\def\tkzDotProduct(#1,#2,#3){%
+\begingroup
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}%
+\edef\tkzax{\strip@pt\pgf@x}%
+\edef\tkzay{\strip@pt\pgf@y}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}%
+\edef\tkzbx{\strip@pt\pgf@x}%
+\edef\tkzby{\strip@pt\pgf@y}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}%
+\edef\tkzcx{\strip@pt\pgf@x}%
+\edef\tkzcy{\strip@pt\pgf@y}%
+\edef\tkz@tmp{\tkz@Dec{\tkz@Round{((\tkzbx-(\tkzax))*(\tkzcx-(\tkzax))+(\tkzby-(\tkzay))*(\tkzcy-(\tkzay)))/809.55841}{6}}}
+\global\let\tkzMathResult\tkz@tmp
+\endgroup
+}
+
+% #1,#2 and #3 aligned
+\def\tkzIsLinear(#1,#2,#3){%
+\begingroup
+\tkz@@CalcLengthcm(#1,#2){tkz@la}
+\tkz@@CalcLengthcm(#1,#3){tkz@lb}
+\tkzDotProduct(#1,#2,#3)
+\edef\tkzResult{\tkz@Dec{\tkz@Abs{\tkzMathResult}-(\tkz@la)*(\tkz@lb)}}
+\ifdim \tkzResult pt < 0.01 pt\relax%
+\global\tkzLineartrue
+\else
+\global\tkzLinearfalse
+\fi
+\endgroup
+}
+%<---------------------------------------------------------–>
+% syntax : vec(#2,#1) ortho vec(#3,#1)
+\def\tkzIsOrtho(#1,#2,#3){%
+\begingroup
+\tkzDotProduct(#1,#2,#3)
+\edef\tkzResult{\tkz@Dec{\tkz@Abs{\tkzMathResult}}}
+\ifdim \tkzResult pt < 1 pt\relax%
+\global\tkzOrthotrue
+\else
+\global\tkzOrthofalse
+\fi
+\endgroup
+}
+%<---------------------------------------------------------–>
+% \tkzPowerCircle(M)(O,A) --> OM^2-OA^2
+\def\tkzPowerCircle(#1)(#2,#3){%
+\begingroup
+\tkz@@CalcLengthcm(#2,#3){tkz@ra}
+\tkz@@CalcLengthcm(#1,#2){tkz@om}
+\gdef\tkzMathResult{\tkz@Dec{(\tkz@om)^2-(\tkz@ra)^2}}
+\endgroup
+}
+%<---------------------------------------------------------–>
+\def\tkzDefRadicalAxis(#1,#2)(#3,#4){%
+\begingroup
+\tkz@@CalcLengthcm(#1,#3){tkz@d}
+\tkz@@CalcLengthcm(#1,#2){tkz@ra}
+\tkz@@CalcLengthcm(#3,#4){tkz@rb}
+\edef\tkzMathResult{\tkz@Dec{\tkz@d-(\tkz@ra+\tkz@rb)}}
+\edef\tkzMathResultb{\tkz@Dec{\tkz@Abs{(\tkz@d-(\tkz@ra+\tkz@rb))}}}
+\edef\tkzMathResultc{\tkz@Dec{\tkz@Abs{\tkz@d-\tkz@Abs{(\tkz@ra-(\tkz@rb))}}}}
+\ifdim \tkzMathResultc pt < 0.1 pt\relax%
+ \tkzURotateAngle(#2,90)(#3) \tkzGetPoint{tkzFirstPointResult}
+ \tkzURotateAngle(#2,-90)(#3) \tkzGetPoint{tkzSecondPointResult}
+\else
+\ifdim \tkzMathResultb pt < 0.1 pt\relax%
+ \tkzURotateAngle(#2,90)(#3) \tkzGetPoint{tkzFirstPointResult}
+ \tkzURotateAngle(#2,-90)(#3) \tkzGetPoint{tkzSecondPointResult}
+ \else
+\ifdim \tkzMathResult pt > 1 pt\relax%
+ \tkzURotateAngle(#1,60)(#3) \tkzGetPoint{tkz@aux}
+ \tkzInterCC(#1,#2)(tkz@aux,#1) \tkzGetPoints{tkz@pta}{tkz@ptb}
+ \tkzInterCC(#3,#4)(tkz@aux,#1) \tkzGetPoints{tkz@ptc}{tkz@ptd}
+ \tkzInterLL(tkz@pta,tkz@ptb)(tkz@ptc,tkz@ptd) \tkzGetPoint{tkz@pta}
+ \tkzUProjection(#1,#3)(tkz@pta) \tkzGetPoint{tkz@ptb}
+ \pgfnodealias{tkzSecondPointResult}{tkz@ptb}
+ \pgfnodealias{tkzFirstPointResult}{tkz@pta}
+\else
+\tkzInterCCR(#1,\tkz@ra)(#3,\tkz@rb){tkzFirstPointResult}{tkzSecondPointResult}
+\fi
+\fi
+\fi
+\endgroup
+}
+
+\makeatother
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-BB.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex
index 4ac1e79ba9..2276dead1a 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-BB.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex
@@ -1,5 +1,5 @@
% tkz-tools-eu-BB.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-obj-eu-BB.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-obj-eu-BB.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
\def\tkzShowBB{\pgfutil@ifnextchar[{\tkz@ShowBB}{\tkz@ShowBB[]}}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex
index ddf83dc0fa..f8ec42d3e0 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-angles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex
@@ -1,5 +1,5 @@
% tkz-tools-angles.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-angles.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-angles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
%<--------------------------------------------------------------------------–>
@@ -20,24 +20,24 @@
% \tkzGetAngle strange behavior
% defines \tkz@FirstAngle and \tkz@SecondAngle sens trigo
%<--------------------------------------------------------------------------–>
- \def\tkzNormalizeAngle(#1,#2){%
- \begingroup
- \pgfmathparse{#1}\xdef\tkz@FirstAngle{\pgfmathresult}%
- \pgfmathparse{#2}\xdef\tkz@SecondAngle{\pgfmathresult}%
- \pgfmathgreaterthan{\tkz@FirstAngle}{0}
- \ifdim\pgfmathresult pt=1 pt\relax%
- \pgfmathgreaterthan{\tkz@FirstAngle}{\tkz@SecondAngle}
- \ifdim\pgfmathresult pt=1 pt\relax%
- \pgfmathsubtract{\tkz@FirstAngle}{360}
- \xdef\tkz@FirstAngle{\pgfmathresult}%
- \fi
- \else
- \pgfmathgreaterthan{\tkz@FirstAngle}{\tkz@SecondAngle}
- \ifdim\pgfmathresult pt=1 pt\relax%
- \pgfmathadd{\tkz@SecondAngle}{360}
- \xdef\tkz@SecondAngle{\pgfmathresult}%
- \fi
- \fi
+\def\tkzNormalizeAngle(#1,#2){%
+\begingroup
+\pgfmathparse{#1}\xdef\tkz@FirstAngle{\pgfmathresult}%
+\pgfmathparse{#2}\xdef\tkz@SecondAngle{\pgfmathresult}%
+\pgfmathgreaterthan{\tkz@FirstAngle}{0}
+\ifdim\pgfmathresult pt=1 pt\relax%
+ \pgfmathgreaterthan{\tkz@FirstAngle}{\tkz@SecondAngle}
+ \ifdim\pgfmathresult pt=1 pt\relax%
+ \pgfmathsubtract{\tkz@FirstAngle}{360}
+ \xdef\tkz@FirstAngle{\pgfmathresult}%
+ \fi
+\else
+ \pgfmathgreaterthan{\tkz@FirstAngle}{\tkz@SecondAngle}
+ \ifdim\pgfmathresult pt=1 pt\relax%
+ \pgfmathadd{\tkz@SecondAngle}{360}
+ \xdef\tkz@SecondAngle{\pgfmathresult}%
+ \fi
+\fi
\endgroup
}
%<--------------------------------------------------------------------------–>
@@ -47,7 +47,7 @@
\def\tkzFindSlopeAngle(#1,#2){%
\begingroup
\pgfmathanglebetweenpoints{\pgfpointanchor{#1}{center}}{%
- \pgfpointanchor{#2}{center}}
+ \pgfpointanchor{#2}{center}}
\global\let\tkzAngleResult\pgfmathresult
\endgroup
}
@@ -59,10 +59,11 @@
\tkzFindSlopeAngle(#2,#1)\tkzGetAngle{tkz@FirstAngle}
\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@SecondAngle}
\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
- \edef\tkz@Angle{\fpeval{\tkz@SecondAngle-\tkz@FirstAngle}}
+ \edef\tkz@Angle{\fpeval{\tkz@SecondAngle-\tkz@FirstAngle}}
\global\let\tkzAngleResult\tkz@Angle
\endgroup
}
+
%<--------------------------------------------------------------------------–>
% Find angle
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-base.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex
index 4bc2e5d072..2311703363 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-base.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex
@@ -1,5 +1,5 @@
% tkz-tools-eu-base.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-base.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-base.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
\global\let\tkz@tmp@xa\tkz@init@xmin% modif 2016
@@ -48,7 +48,7 @@
\fi
\xdef\tkz@init@xorigine{0}
\xdef\tkz@init@yorigine{0}
- \edef\@xsgmin{\fpeval{sign(\tkz@init@xmin)}}
+ \edef\@xsgmin{\fpeval{sign(\tkz@init@xmin)}} % -> -1 or 1
\edef\@xsgmax{\fpeval{sign(\tkz@init@xmax)}}
\edef\@ysgmin{\fpeval{sign(\tkz@init@ymin)}}
\edef\@ysgmax{\fpeval{sign(\tkz@init@ymax)}}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-colors.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex
index d0a921c993..94995906f9 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-colors.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex
@@ -1,5 +1,5 @@
% tkz-tools-eu-colors
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-colors}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-colors}
\makeatletter
%<------ Initialisation of the colors with tkzSetUpColors ----------------->
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-intersections.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex
index 4c05e5a3dc..bb741fc59e 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-intersections.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex
@@ -1,5 +1,5 @@
% tkz-tools-intersections.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -13,9 +13,9 @@
% The Current Maintainer of this work is Alain Matthes.
% utf8 encoding
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-intersections.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-intersections.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% intersection de deux lignes
@@ -25,37 +25,34 @@
}
\def\tkz@InterLL(#1,#2)(#3,#4)#5{%
-\path (intersection of #1--#2 and #3--#4) coordinate(#5);
-% méthode with tikz
-% \pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}%
-% \pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}%
-% \tkz@ax\pgf@x%
-% \tkz@ay\pgf@y%
-% \pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}%
-% \pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}
-% \tkz@bx\pgf@x%
-% \tkz@by\pgf@y%
-% \pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}%
-% \pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}%
-% \tkz@cx\pgf@x%
-% \tkz@cy\pgf@y%
-% \pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}}%
-% \pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}}%
-% \tkz@dx\pgf@x%
-% \tkz@dy\pgf@y%
-%
-% \edef\tkz@deltax{\fpeval{(\tkz@ax-\tkz@bx)/(28.45274)}}
-% \edef\tkz@deltaxx{\fpeval{(\tkz@cx-\tkz@dx)/(28.45274)}}
-% \edef\tkz@deltay{\fpeval{(\tkz@ay-\tkz@by)/(28.45274)}}
-% \edef\tkz@deltayy{\fpeval{(\tkz@cy-\tkz@dy)/(28.45274)}}
-% \edef\tkz@deltaxy{\fpeval{((\tkz@ax*\tkz@by)-(\tkz@ay*\tkz@bx))/(809.55841)}}
-% \edef\tkz@deltaxxyy{\fpeval{((\tkz@cx*\tkz@dy)-(\tkz@cy*\tkz@dx))/(809.55841)}}
-% \edef\tkz@div{\fpeval{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}}
-% \edef\tkz@numx{\fpeval{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}}
-% \edef\tkz@numy{\fpeval{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}}
-% \edef\tkz@xs{\fpeval{round(\tkz@numx/\tkz@div,5)}}
-% \edef\tkz@ys{\fpeval{round(\tkz@numy/\tkz@div,5)}}
-% \path[coordinate](\tkz@xs,\tkz@ys) coordinate (#5);
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}%
+\tkz@ax\pgf@x%
+\tkz@ay\pgf@y%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}
+\tkz@bx\pgf@x%
+\tkz@by\pgf@y%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}%
+\tkz@cx\pgf@x%
+\tkz@cy\pgf@y%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#4}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#4}{center}}%
+\tkz@dx\pgf@x%
+\tkz@dy\pgf@y%
+\edef\tkz@deltax{\fpeval{(\tkz@ax-\tkz@bx)/(28.45274)}}
+\edef\tkz@deltaxx{\fpeval{(\tkz@cx-\tkz@dx)/(28.45274)}}
+\edef\tkz@deltay{\fpeval{(\tkz@ay-\tkz@by)/(28.45274)}}
+\edef\tkz@deltayy{\fpeval{(\tkz@cy-\tkz@dy)/(28.45274)}}
+\edef\tkz@deltaxy{\fpeval{((\tkz@ax*\tkz@by)-(\tkz@ay*\tkz@bx))/(809.55841)}}
+\edef\tkz@deltaxxyy{\fpeval{((\tkz@cx*\tkz@dy)-(\tkz@cy*\tkz@dx))/(809.55841)}}
+\edef\tkz@div{\fpeval{(\tkz@deltax*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxx)}}
+\edef\tkz@numx{\fpeval{(\tkz@deltaxy*\tkz@deltaxx)-(\tkz@deltax*\tkz@deltaxxyy)}}
+\edef\tkz@numy{\fpeval{(\tkz@deltaxy*\tkz@deltayy)-(\tkz@deltay*\tkz@deltaxxyy)}}
+\edef\tkz@xs{\fpeval{round(\tkz@numx/\tkz@div,5)}}
+\edef\tkz@ys{\fpeval{round(\tkz@numy/\tkz@div,5)}}
+\path[coordinate](\tkz@xs,\tkz@ys) coordinate (#5);
}
@@ -418,8 +415,7 @@
\tkz@@CalcLengthcm(#2,#3){tkz@rayA}
\tkz@@CalcLengthcm(#4,#5){tkz@rayB}
\tkz@restore@length
- \tkzInterCCR(#2,\tkz@rayA)(#4,\tkz@rayB){tkzFirstPointResult}{%
- tkzSecondPointResult}
+ \tkzInterCCR(#2,\tkz@rayA)(#4,\tkz@rayB){tkzFirstPointResult}{tkzSecondPointResult}
\or% 1
\tkzInterCCR(#2,#3)(#4,#5){tkzFirstPointResult}{tkzSecondPointResult}%
\or%2
@@ -463,10 +459,10 @@
\tkz@cx#2cm %
\tkz@cy#4cm %
\edef\tkz@aa{\fpeval{((\tkz@cx+\tkz@cy)/(2*\tkz@dd))*(\tkz@cx-\tkz@cy)+\tkz@dd/2}}
-\edef\tkz@xx{\fpeval{\tkz@ax+\tkz@aa/\tkz@dd*(\tkz@bx - \tkz@ax)}}
+ \edef\tkz@xx{\fpeval{\tkz@ax+\tkz@aa/\tkz@dd*(\tkz@bx - \tkz@ax)}}
\edef\tkz@yy{\fpeval{\tkz@ay+\tkz@aa/\tkz@dd*(\tkz@by - \tkz@ay)}}
\path[coordinate](\tkz@xx pt,\tkz@yy pt) coordinate (tkzRadialCenter);
-\edef\tkz@hh{\fpeval{sqrt(abs((\tkz@cx+\tkz@aa)*(\tkz@cx-\tkz@aa)))}}% abs !2022
+\edef\tkz@hh{\fpeval{sqrt(abs((\tkz@cx+\tkz@aa)*(\tkz@cx-\tkz@aa)))}}% abs !2023
\edef\tkz@rx{\fpeval{\tkz@hh / \tkz@dd * (\tkz@ay - \tkz@by)}}
\edef\tkz@ry{\fpeval{\tkz@hh / \tkz@dd * (\tkz@bx - \tkz@ax)}}
\edef\tkz@xs{\fpeval{\tkz@xx + \tkz@rx}}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-math.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex
index 7c11e8be03..9ec079f092 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-math.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex
@@ -1,5 +1,5 @@
% tkz-tools-eu-math.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-math.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-math.tex}
\makeatletter
%<-------------------------------------------------------------------------->
% \tkzpointnormalised#
@@ -113,7 +113,7 @@
}%
% Schrodinger's cat idea 03/01/20
-\tikzset{xfp/.code={%
+\tikzset{veclen/.code={%
\pgfmathdeclarefunction*{veclen}{2}{%
\begingroup%
\pgfmath@x##1pt\relax%
@@ -147,7 +147,7 @@
\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}%
\tkz@cx\pgf@x%
\tkz@cy\pgf@y%
-\edef\tkz@@dotprod{\fpeval{round(abs((\tkz@bx-\tkz@ax)*(\tkz@cx-\tkz@ax)+(\tkz@by-\tkz@ay)*(\tkz@cy-\tkz@ay))/(28.45274*28.45274),5)}}
+\edef\tkz@@dotprod{\fpeval{round(((\tkz@bx-\tkz@ax)*(\tkz@cx-\tkz@ax)+(\tkz@by-\tkz@ay)*(\tkz@cy-\tkz@ay))/(809.55841),5)}}
\global\let\tkzMathResult\tkz@@dotprod
\endgroup}
%<---------------------------------------------------------–>
@@ -160,7 +160,7 @@
\tkz@@CalcLengthcm(#1,#2){tkz@la}
\tkz@@CalcLengthcm(#1,#3){tkz@lb}
\tkzDotProduct(#1,#2,#3)
-\edef\tkzResult{\fpeval{abs((\tkzMathResult)-(\tkz@la)*(\tkz@lb))}}
+\edef\tkzResult{\fpeval{abs(\tkzMathResult)-(\tkz@la)*(\tkz@lb)}}
\ifdim \tkzResult pt < 0.01 pt\relax%
\global\tkzLineartrue
\else
@@ -223,5 +223,34 @@
\fi
\endgroup
}
+\def\tkzmathrotatepointaround#1#2#3{%
+ \pgf@process{%
+ \pgf@process{#1}%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgf@process{#2}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \pgf@xb\pgf@x%
+ \pgf@yb\pgf@y%
+ \pgf@x=\pgf@xc%
+ \pgf@y=\pgf@yc%
+ \advance\pgf@x-\pgf@xa%
+ \advance\pgf@y-\pgf@ya%
+ \pgfmathsetmacro\angle{#3}%
+ \mathSin{\mathRad{\angle}}%
+ \let\sineangle\pgfmathresult%
+ \mathCos{\mathRad{\angle}}%
+ \let\cosineangle\pgfmathresult%
+ \pgf@xa\cosineangle\pgf@x%
+ \advance\pgf@xa-\sineangle\pgf@y%
+ \pgf@ya\sineangle\pgf@x%
+ \advance\pgf@ya\cosineangle\pgf@y%
+ \pgf@x\pgf@xb%
+ \pgf@y\pgf@yb%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+}
\makeatother
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-modules.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex
index 86c9f6947d..eb0dae14e6 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-modules.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex
@@ -1,5 +1,5 @@
% tkz-tools-modules
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-utilities.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-utilities.tex}
\makeatletter
%<------------- % chargement des modules ---------------------------------->
\def\tkz@obj@all{angles,arcs,compass,defcircles,deflines,defpoints,defpointsby,defpointsrnd,defpointswith,polygons,protractor,sectors,show,triangles}%
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-text.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex
index 8afaae338e..3f52c84c28 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-text.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex
@@ -1,5 +1,5 @@
% tkz-tools-eu-text.tex
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-text.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-text.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzText
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-utilities.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex
index 05649512dc..eb9c52317f 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-tools-eu-utilities.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex
@@ -1,5 +1,5 @@
% tkz-tools-eu-utilities
-% Copyright 2022 Alain Matthes
+% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{4.25c}
-\def\filedate{2022/09/23}
-\typeout{2022/09/23 4.25c tkz-tools-eu-utilities.tex}
+\def\fileversion{5.00c}
+\def\filedate{2023/01/23}
+\typeout{2023/01/23 5.00c tkz-tools-eu-utilities.tex}
\makeatletter
\pgfkeys{/tkzClip/.cd,
space/.store in = {\tkz@CLI@space},
@@ -37,7 +37,6 @@ space = {}}
\def\extractxy#1{%
\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}
\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}
-\typeout{#1 \the\pgf@x,\the\pgf@y}
}
%<-------------- some tools ------------------------------------------------->
\def\tkzutil@empty{}
@@ -168,64 +167,7 @@ space = {}}
}
\def\EnabledNumprint{\let\numprint\tkz@numprint}
%<---------------------------------------------------------–>
-\def\tkzSwapPoints(#1,#2){
- \pgfnodealias{tkzPointTmp}{#2}
- \pgfnodealias{#2}{#1}
- \pgfnodealias{#1}{tkzPointTmp}}
-%<---------------------------------------------------------–>
-\def\tkzPermute(#1,#2,#3){
-\tkzURotateWithNodes(#1,#3,#2)(#3) \tkzGetPoint{tkzpt}
-\tkzURotateWithNodes(#1,#2,#3)(#2) \tkzGetPoint{#2}
-\tkzSwapPoints(tkzpt,#3)}
-%<---------------------------------------------------------–>
-\def\tkzDotProduct(#1,#2,#3){%
-\begingroup
-\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}%
-\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}%
-\tkz@ax\pgf@x%
-\tkz@ay\pgf@y%
-\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}%
-\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}
-\tkz@bx\pgf@x%
-\tkz@by\pgf@y%
-\pgfextractx{\pgf@x}{\pgfpointanchor{#3}{center}}%
-\pgfextracty{\pgf@y}{\pgfpointanchor{#3}{center}}%
-\tkz@cx\pgf@x%
-\tkz@cy\pgf@y%
-\edef\tkz@dotprod{\fpeval{round(((\tkz@bx-\tkz@ax)*(\tkz@cx-\tkz@ax)+(\tkz@by-\tkz@ay)*(\tkz@cy-\tkz@ay))/(809.55841),5)}}
-\global\let\tkzMathResult\tkz@dotprod
-\endgroup}
-%<---------------------------------------------------------–>
- \def\tkzGetResult#1{%
- \global\expandafter\edef\csname #1\endcsname{\tkzMathResult}}
-%<---------------------------------------------------------–>
-% #1,#2 and #3 aligned
-\def\tkzIsLinear(#1,#2,#3){%
-\begingroup
-\tkz@@CalcLengthcm(#1,#2){tkz@la}
-\tkz@@CalcLengthcm(#1,#3){tkz@lb}
-\tkzDotProduct(#1,#2,#3)
-\edef\tkzMathResult{\fpeval{abs(abs(\tkzMathResult)-(\tkz@la)*(\tkz@lb))}}
-\ifdim \tkzMathResult pt < 0.0001 pt\relax%
-\global\tkzLineartrue
-\else
-\global\tkzLinearfalse
-\fi
-\endgroup
-}
-%<---------------------------------------------------------–>
-% syntax : vec(#2,#1) ortho vec(#3,#1)
-\def\tkzIsOrtho(#1,#2,#3){%
-\begingroup
-\tkzDotProduct(#1,#2,#3)
-\edef\tkzMathResult{\fpeval{abs(\tkzMathResult)}}
-\ifdim \tkzMathResult pt < 0.0001 pt\relax%
-\global\tkzOrthotrue
-\else
-\global\tkzOrthofalse
-\fi
-\endgroup
-}
+
%<---------------------------------------------------------–>
\def\tkzHelpGrid{%
\draw[help lines] (current bounding box.south west) grid