media:cpp dist - v1
@ -0,0 +1,805 @@
|
||||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
|
||||
%%Creator: Chromium
|
||||
%%LanguageLevel: 3
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%BoundingBox: 0 0 2372 634
|
||||
%%HiResBoundingBox: 0 0 2371.9199 633.12
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
%%BeginResource: procset xpdf 3.00 0
|
||||
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
|
||||
/xpdf 75 dict def xpdf begin
|
||||
% PDF special state
|
||||
/pdfDictSize 15 def
|
||||
/pdfSetup {
|
||||
/setpagedevice where {
|
||||
pop 2 dict begin
|
||||
/Policies 1 dict dup begin /PageSize 6 def end def
|
||||
{ /Duplex true def } if
|
||||
currentdict end setpagedevice
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfSetupPaper {
|
||||
% Change paper size, but only if different from previous paper size otherwise
|
||||
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
|
||||
% so we use the same when checking if the size changes.
|
||||
/setpagedevice where {
|
||||
pop currentpagedevice
|
||||
/PageSize known {
|
||||
2 copy
|
||||
currentpagedevice /PageSize get aload pop
|
||||
exch 4 1 roll
|
||||
sub abs 5 gt
|
||||
3 1 roll
|
||||
sub abs 5 gt
|
||||
or
|
||||
} {
|
||||
true
|
||||
} ifelse
|
||||
{
|
||||
2 array astore
|
||||
2 dict begin
|
||||
/PageSize exch def
|
||||
/ImagingBBox null def
|
||||
currentdict end
|
||||
setpagedevice
|
||||
} {
|
||||
pop pop
|
||||
} ifelse
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfStartPage {
|
||||
pdfDictSize dict begin
|
||||
/pdfFillCS [] def
|
||||
/pdfFillXform {} def
|
||||
/pdfStrokeCS [] def
|
||||
/pdfStrokeXform {} def
|
||||
/pdfFill [0] def
|
||||
/pdfStroke [0] def
|
||||
/pdfFillOP false def
|
||||
/pdfStrokeOP false def
|
||||
/pdfOPM false def
|
||||
/pdfLastFill false def
|
||||
/pdfLastStroke false def
|
||||
/pdfTextMat [1 0 0 1 0 0] def
|
||||
/pdfFontSize 0 def
|
||||
/pdfCharSpacing 0 def
|
||||
/pdfTextRender 0 def
|
||||
/pdfPatternCS false def
|
||||
/pdfTextRise 0 def
|
||||
/pdfWordSpacing 0 def
|
||||
/pdfHorizScaling 1 def
|
||||
/pdfTextClipPath [] def
|
||||
} def
|
||||
/pdfEndPage { end } def
|
||||
% PDF color state
|
||||
/opm { dup /pdfOPM exch def
|
||||
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
|
||||
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
|
||||
setcolorspace } def
|
||||
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
|
||||
setcolorspace } def
|
||||
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
|
||||
dup /pdfFill exch def aload pop pdfFillXform setcolor
|
||||
/pdfLastFill true def /pdfLastStroke false def } def
|
||||
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
|
||||
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
|
||||
/pdfLastStroke true def /pdfLastFill false def } def
|
||||
/op { /pdfFillOP exch def
|
||||
pdfLastFill { pdfFillOP setoverprint } if } def
|
||||
/OP { /pdfStrokeOP exch def
|
||||
pdfLastStroke { pdfStrokeOP setoverprint } if } def
|
||||
/fCol {
|
||||
pdfLastFill not {
|
||||
pdfFillCS setcolorspace
|
||||
pdfFill aload pop pdfFillXform setcolor
|
||||
pdfFillOP setoverprint
|
||||
/pdfLastFill true def /pdfLastStroke false def
|
||||
} if
|
||||
} def
|
||||
/sCol {
|
||||
pdfLastStroke not {
|
||||
pdfStrokeCS setcolorspace
|
||||
pdfStroke aload pop pdfStrokeXform setcolor
|
||||
pdfStrokeOP setoverprint
|
||||
/pdfLastStroke true def /pdfLastFill false def
|
||||
} if
|
||||
} def
|
||||
% build a font
|
||||
/pdfMakeFont {
|
||||
4 3 roll findfont
|
||||
4 2 roll matrix scale makefont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/Encoding exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16 {
|
||||
exch findfont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/WMode exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16L3 {
|
||||
1 index /CIDFont resourcestatus {
|
||||
pop pop 1 index /CIDFont findresource /CIDFontType known
|
||||
} {
|
||||
false
|
||||
} ifelse
|
||||
{
|
||||
0 eq { /Identity-H } { /Identity-V } ifelse
|
||||
exch 1 array astore composefont pop
|
||||
} {
|
||||
pdfMakeFont16
|
||||
} ifelse
|
||||
} def
|
||||
% graphics state operators
|
||||
/q { gsave pdfDictSize dict begin } def
|
||||
/Q {
|
||||
end grestore
|
||||
/pdfLastFill where {
|
||||
pop
|
||||
pdfLastFill {
|
||||
pdfFillOP setoverprint
|
||||
} {
|
||||
pdfStrokeOP setoverprint
|
||||
} ifelse
|
||||
} if
|
||||
/pdfOPM where {
|
||||
pop
|
||||
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
|
||||
} if
|
||||
} def
|
||||
/cm { concat } def
|
||||
/d { setdash } def
|
||||
/i { setflat } def
|
||||
/j { setlinejoin } def
|
||||
/J { setlinecap } def
|
||||
/M { setmiterlimit } def
|
||||
/w { setlinewidth } def
|
||||
% path segment operators
|
||||
/m { moveto } def
|
||||
/l { lineto } def
|
||||
/c { curveto } def
|
||||
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
|
||||
neg 0 rlineto closepath } def
|
||||
/h { closepath } def
|
||||
% path painting operators
|
||||
/S { sCol stroke } def
|
||||
/Sf { fCol stroke } def
|
||||
/f { fCol fill } def
|
||||
/f* { fCol eofill } def
|
||||
% clipping operators
|
||||
/W { clip newpath } def
|
||||
/W* { eoclip newpath } def
|
||||
/Ws { strokepath clip newpath } def
|
||||
% text state operators
|
||||
/Tc { /pdfCharSpacing exch def } def
|
||||
/Tf { dup /pdfFontSize exch def
|
||||
dup pdfHorizScaling mul exch matrix scale
|
||||
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
|
||||
exch findfont exch makefont setfont } def
|
||||
/Tr { /pdfTextRender exch def } def
|
||||
/Tp { /pdfPatternCS exch def } def
|
||||
/Ts { /pdfTextRise exch def } def
|
||||
/Tw { /pdfWordSpacing exch def } def
|
||||
/Tz { /pdfHorizScaling exch def } def
|
||||
% text positioning operators
|
||||
/Td { pdfTextMat transform moveto } def
|
||||
/Tm { /pdfTextMat exch def } def
|
||||
% text string operators
|
||||
/xyshow where {
|
||||
pop
|
||||
/xyshow2 {
|
||||
dup length array
|
||||
0 2 2 index length 1 sub {
|
||||
2 index 1 index 2 copy get 3 1 roll 1 add get
|
||||
pdfTextMat dtransform
|
||||
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
|
||||
} for
|
||||
exch pop
|
||||
xyshow
|
||||
} def
|
||||
}{
|
||||
/xyshow2 {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval show moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval show moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/cshow where {
|
||||
pop
|
||||
/xycp {
|
||||
0 3 2 roll
|
||||
{
|
||||
pop pop currentpoint 3 2 roll
|
||||
1 string dup 0 4 3 roll put false charpath moveto
|
||||
2 copy get 2 index 2 index 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
2 add
|
||||
} exch cshow
|
||||
pop pop
|
||||
} def
|
||||
}{
|
||||
/xycp {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval false charpath moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval false charpath moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/Tj {
|
||||
fCol
|
||||
0 pdfTextRise pdfTextMat dtransform rmoveto
|
||||
currentpoint 4 2 roll
|
||||
pdfTextRender 1 and 0 eq {
|
||||
2 copy xyshow2
|
||||
} if
|
||||
pdfTextRender 3 and dup 1 eq exch 2 eq or {
|
||||
3 index 3 index moveto
|
||||
2 copy
|
||||
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
|
||||
xycp currentpoint stroke moveto
|
||||
} if
|
||||
pdfTextRender 4 and 0 ne {
|
||||
4 2 roll moveto xycp
|
||||
/pdfTextClipPath [ pdfTextClipPath aload pop
|
||||
{/moveto cvx}
|
||||
{/lineto cvx}
|
||||
{/curveto cvx}
|
||||
{/closepath cvx}
|
||||
pathforall ] def
|
||||
currentpoint newpath moveto
|
||||
} {
|
||||
pop pop pop pop
|
||||
} ifelse
|
||||
0 pdfTextRise neg pdfTextMat dtransform rmoveto
|
||||
} def
|
||||
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/Tclip { pdfTextClipPath cvx exec clip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
% Level 2/3 image operators
|
||||
/pdfImBuf 100 string def
|
||||
/pdfImStr {
|
||||
2 copy exch length lt {
|
||||
2 copy get exch 1 add exch
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/skipEOD {
|
||||
{ currentfile pdfImBuf readline
|
||||
not { pop exit } if
|
||||
(%-EOD-) eq { exit } if } loop
|
||||
} def
|
||||
/pdfIm { image skipEOD } def
|
||||
/pdfMask {
|
||||
/ReusableStreamDecode filter
|
||||
skipEOD
|
||||
/maskStream exch def
|
||||
} def
|
||||
/pdfMaskEnd { maskStream closefile } def
|
||||
/pdfMaskInit {
|
||||
/maskArray exch def
|
||||
/maskIdx 0 def
|
||||
} def
|
||||
/pdfMaskSrc {
|
||||
maskIdx maskArray length lt {
|
||||
maskArray maskIdx get
|
||||
/maskIdx maskIdx 1 add def
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/pdfImM { fCol imagemask skipEOD } def
|
||||
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
|
||||
/pdfImClip {
|
||||
gsave
|
||||
0 2 4 index length 1 sub {
|
||||
dup 4 index exch 2 copy
|
||||
get 5 index div put
|
||||
1 add 3 index exch 2 copy
|
||||
get 3 index div put
|
||||
} for
|
||||
pop pop rectclip
|
||||
} def
|
||||
/pdfImClipEnd { grestore } def
|
||||
% shading operators
|
||||
/colordelta {
|
||||
false 0 1 3 index length 1 sub {
|
||||
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
|
||||
pop true
|
||||
} if
|
||||
} for
|
||||
exch pop exch pop
|
||||
} def
|
||||
/funcCol { func n array astore } def
|
||||
/funcSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 6 eq {
|
||||
false
|
||||
} {
|
||||
4 index 4 index funcCol dup
|
||||
6 index 4 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
5 index 5 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
6 index 8 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
colordelta or or or
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add
|
||||
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
|
||||
6 index 6 index 4 index 4 index 4 index funcSH
|
||||
2 index 6 index 6 index 4 index 4 index funcSH
|
||||
6 index 2 index 4 index 6 index 4 index funcSH
|
||||
5 3 roll 3 2 roll funcSH pop pop
|
||||
} {
|
||||
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
|
||||
funcCol sc
|
||||
dup 4 index exch mat transform m
|
||||
3 index 3 index mat transform l
|
||||
1 index 3 index mat transform l
|
||||
mat transform l pop pop h f*
|
||||
} ifelse
|
||||
} def
|
||||
/axialCol {
|
||||
dup 0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup 1 gt {
|
||||
pop t1
|
||||
} {
|
||||
dt mul t0 add
|
||||
} ifelse
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/axialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index axialCol 2 index axialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index axialSH
|
||||
exch 3 2 roll axialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul
|
||||
axialCol sc
|
||||
exch dup dx mul x0 add exch dy mul y0 add
|
||||
3 2 roll dup dx mul x0 add exch dy mul y0 add
|
||||
dx abs dy abs ge {
|
||||
2 copy yMin sub dy mul dx div add yMin m
|
||||
yMax sub dy mul dx div add yMax l
|
||||
2 copy yMax sub dy mul dx div add yMax l
|
||||
yMin sub dy mul dx div add yMin l
|
||||
h f*
|
||||
} {
|
||||
exch 2 copy xMin sub dx mul dy div add xMin exch m
|
||||
xMax sub dx mul dy div add xMax exch l
|
||||
exch 2 copy xMax sub dx mul dy div add xMax exch l
|
||||
xMin sub dx mul dy div add xMin exch l
|
||||
h f*
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
/radialCol {
|
||||
dup t0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup t1 gt {
|
||||
pop t1
|
||||
} if
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/radialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index dt mul t0 add radialCol
|
||||
2 index dt mul t0 add radialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index radialSH
|
||||
exch 3 2 roll radialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul dt mul t0 add
|
||||
radialCol sc
|
||||
encl {
|
||||
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
0 360 arc h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
360 0 arcn h f
|
||||
} {
|
||||
2 copy
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arcn
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arcn h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arc
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arc h f
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
end
|
||||
%%EndResource
|
||||
/CIDInit /ProcSet findresource begin
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-H def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-V def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
/WMode 1 def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
end
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
xpdf begin
|
||||
%%EndSetup
|
||||
pdfStartPage
|
||||
%%EndPageSetup
|
||||
[] 0 d
|
||||
1 i
|
||||
0 j
|
||||
0 J
|
||||
10 M
|
||||
1 w
|
||||
/DeviceGray {} cs
|
||||
[0] sc
|
||||
/DeviceGray {} CS
|
||||
[0] SC
|
||||
false op
|
||||
false OP
|
||||
{} settransfer
|
||||
0 0 2371.9199 633.12 re
|
||||
W
|
||||
q
|
||||
[0.24 0 0 -0.24 0 633.12] cm
|
||||
q
|
||||
0 0 9883.333 2634.9304 re
|
||||
W*
|
||||
q
|
||||
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
|
||||
/DeviceRGB {} CS
|
||||
[0.9725 0.7098 0] SC
|
||||
/DeviceRGB {} cs
|
||||
[0.9725 0.7098 0] sc
|
||||
1313.30005 1890.9 m
|
||||
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
|
||||
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
|
||||
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
|
||||
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
|
||||
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
|
||||
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
|
||||
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
|
||||
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
|
||||
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
|
||||
1201.19995 1579.30005 l
|
||||
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
|
||||
h
|
||||
f
|
||||
1472.19995 1127.30005 m
|
||||
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
|
||||
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
|
||||
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
|
||||
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
|
||||
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
|
||||
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
|
||||
h
|
||||
1241.59998 1248.90002 m
|
||||
1275.09998 1251.70007 l
|
||||
1279 1252.00012 l
|
||||
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
|
||||
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
|
||||
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
|
||||
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
|
||||
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
|
||||
h
|
||||
f
|
||||
Q
|
||||
q
|
||||
[76.117943 0 0 76.100548 2395.657 642.07141] cm
|
||||
6.9 5.84 m
|
||||
8.2733 5.84 9.3566 6.18 10.15 6.86 c
|
||||
10.943399 7.54 11.34 8.520001 11.34 9.8 c
|
||||
11.34 11.04 10.94666 12.01 10.16 12.71 c
|
||||
9.37334 13.41 8.286699 13.76 6.9 13.76 c
|
||||
3.74 13.76 l
|
||||
3.74 20 l
|
||||
1.819999 20 l
|
||||
1.819999 5.84 l
|
||||
6.9 5.84 l
|
||||
6.9 5.84 l
|
||||
h
|
||||
6.34 12.08 m
|
||||
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
|
||||
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
|
||||
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
|
||||
3.739999 7.51998 l
|
||||
3.739999 12.079981 l
|
||||
6.339999 12.079981 l
|
||||
6.34 12.08 l
|
||||
h
|
||||
15.16 4.88 m
|
||||
15.16 20 l
|
||||
13.36 20 l
|
||||
13.36 4.88 l
|
||||
15.16 4.88 l
|
||||
h
|
||||
21.82 10.28 m
|
||||
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
|
||||
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
|
||||
25.780001 18.459938 l
|
||||
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
|
||||
24.26 19.999939 l
|
||||
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
|
||||
24.16 18.559938 l
|
||||
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
|
||||
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
|
||||
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
|
||||
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
|
||||
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
|
||||
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
|
||||
24.100002 14.119937 l
|
||||
24.100002 13.779937 l
|
||||
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
|
||||
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
|
||||
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
|
||||
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
|
||||
18.060003 11.679956 l
|
||||
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
|
||||
21.82 10.28 l
|
||||
h
|
||||
19.360001 17.26 m
|
||||
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
|
||||
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
|
||||
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
|
||||
24.100002 15.440001 l
|
||||
23.080002 15.440001 l
|
||||
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
|
||||
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
|
||||
19.360001 17.26 l
|
||||
h
|
||||
31.6 10.28 m
|
||||
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
|
||||
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
|
||||
33.439999 12.90004 l
|
||||
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
|
||||
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
|
||||
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
|
||||
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
|
||||
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
|
||||
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
|
||||
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
|
||||
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
|
||||
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
|
||||
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
|
||||
28.960001 17.440037 l
|
||||
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
|
||||
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
|
||||
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
|
||||
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
|
||||
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
|
||||
28.23 14.483337 28 13.906717 28 13.200018 c
|
||||
28 12.320018 28.34 11.616718 29.02 11.090018 c
|
||||
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
|
||||
31.6 10.28 l
|
||||
h
|
||||
39.779999 7.86 m
|
||||
39.77998 10.520001 l
|
||||
42.359978 10.520001 l
|
||||
42.359978 12.08 l
|
||||
39.779976 12.08 l
|
||||
39.779976 16.639999 l
|
||||
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
|
||||
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
|
||||
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
|
||||
42.419971 19.919998 l
|
||||
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
|
||||
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
|
||||
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
|
||||
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
|
||||
37.979969 12.079979 l
|
||||
35.899971 12.079979 l
|
||||
35.899971 10.51998 l
|
||||
37.979973 10.51998 l
|
||||
37.979973 7.85998 l
|
||||
39.779972 7.85998 l
|
||||
39.779999 7.86 l
|
||||
h
|
||||
45.740002 5.8 m
|
||||
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
|
||||
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
|
||||
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
|
||||
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
|
||||
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
|
||||
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
|
||||
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
|
||||
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
|
||||
45.740002 5.8 l
|
||||
h
|
||||
46.639999 10.520001 m
|
||||
46.639999 20 l
|
||||
44.84 20 l
|
||||
44.84 10.520001 l
|
||||
46.639999 10.520001 l
|
||||
h
|
||||
54 10.3 m
|
||||
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
|
||||
56.279999 13.04 l
|
||||
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
|
||||
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
|
||||
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
|
||||
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
|
||||
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
|
||||
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
|
||||
57.599998 18.780001 l
|
||||
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
|
||||
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
|
||||
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
|
||||
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
|
||||
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
|
||||
54 10.3 l
|
||||
h
|
||||
61.52 5.84 m
|
||||
61.52 11.72 l
|
||||
68.860001 11.72 l
|
||||
68.860001 5.84 l
|
||||
70.779999 5.84 l
|
||||
70.779999 20 l
|
||||
68.860001 20 l
|
||||
68.860001 13.520001 l
|
||||
61.52 13.520001 l
|
||||
61.52 20 l
|
||||
59.599998 20 l
|
||||
59.599998 5.84 l
|
||||
61.519997 5.84 l
|
||||
61.52 5.84 l
|
||||
h
|
||||
75.760002 10.520001 m
|
||||
75.760002 16.200001 l
|
||||
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
|
||||
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
|
||||
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
|
||||
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
|
||||
80.559998 10.520001 l
|
||||
82.360001 10.520001 l
|
||||
82.360001 20 l
|
||||
80.559998 20 l
|
||||
80.559998 18.540001 l
|
||||
80.519997 18.540001 l
|
||||
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
|
||||
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
|
||||
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
|
||||
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
|
||||
73.959999 10.520002 l
|
||||
75.760002 10.520002 l
|
||||
75.760002 10.520001 l
|
||||
h
|
||||
86.879997 4.88 m
|
||||
86.88002 11.88 l
|
||||
86.920021 11.88 l
|
||||
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
|
||||
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
|
||||
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
|
||||
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
|
||||
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
|
||||
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
|
||||
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
|
||||
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
|
||||
86.880028 18.639999 l
|
||||
86.880028 20 l
|
||||
85.080025 20 l
|
||||
85.080025 4.88 l
|
||||
86.880028 4.88 l
|
||||
86.879997 4.88 l
|
||||
h
|
||||
86.879997 15.26 m
|
||||
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
|
||||
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
|
||||
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
|
||||
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
|
||||
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
|
||||
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
|
||||
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
|
||||
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
|
||||
86.879997 15.26 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
Q
|
||||
Q
|
||||
showpage
|
||||
%%PageTrailer
|
||||
pdfEndPage
|
||||
%%Trailer
|
||||
end
|
||||
%%DocumentSuppliedResources:
|
||||
%%EOF
|
||||
@ -0,0 +1,809 @@
|
||||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
|
||||
%%Creator: Chromium
|
||||
%%LanguageLevel: 3
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%BoundingBox: 0 0 2372 634
|
||||
%%HiResBoundingBox: 0 0 2371.9199 633.12
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
%%BeginResource: procset xpdf 3.00 0
|
||||
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
|
||||
/xpdf 75 dict def xpdf begin
|
||||
% PDF special state
|
||||
/pdfDictSize 15 def
|
||||
/pdfSetup {
|
||||
/setpagedevice where {
|
||||
pop 2 dict begin
|
||||
/Policies 1 dict dup begin /PageSize 6 def end def
|
||||
{ /Duplex true def } if
|
||||
currentdict end setpagedevice
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfSetupPaper {
|
||||
% Change paper size, but only if different from previous paper size otherwise
|
||||
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
|
||||
% so we use the same when checking if the size changes.
|
||||
/setpagedevice where {
|
||||
pop currentpagedevice
|
||||
/PageSize known {
|
||||
2 copy
|
||||
currentpagedevice /PageSize get aload pop
|
||||
exch 4 1 roll
|
||||
sub abs 5 gt
|
||||
3 1 roll
|
||||
sub abs 5 gt
|
||||
or
|
||||
} {
|
||||
true
|
||||
} ifelse
|
||||
{
|
||||
2 array astore
|
||||
2 dict begin
|
||||
/PageSize exch def
|
||||
/ImagingBBox null def
|
||||
currentdict end
|
||||
setpagedevice
|
||||
} {
|
||||
pop pop
|
||||
} ifelse
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfStartPage {
|
||||
pdfDictSize dict begin
|
||||
/pdfFillCS [] def
|
||||
/pdfFillXform {} def
|
||||
/pdfStrokeCS [] def
|
||||
/pdfStrokeXform {} def
|
||||
/pdfFill [0] def
|
||||
/pdfStroke [0] def
|
||||
/pdfFillOP false def
|
||||
/pdfStrokeOP false def
|
||||
/pdfOPM false def
|
||||
/pdfLastFill false def
|
||||
/pdfLastStroke false def
|
||||
/pdfTextMat [1 0 0 1 0 0] def
|
||||
/pdfFontSize 0 def
|
||||
/pdfCharSpacing 0 def
|
||||
/pdfTextRender 0 def
|
||||
/pdfPatternCS false def
|
||||
/pdfTextRise 0 def
|
||||
/pdfWordSpacing 0 def
|
||||
/pdfHorizScaling 1 def
|
||||
/pdfTextClipPath [] def
|
||||
} def
|
||||
/pdfEndPage { end } def
|
||||
% PDF color state
|
||||
/opm { dup /pdfOPM exch def
|
||||
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
|
||||
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
|
||||
setcolorspace } def
|
||||
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
|
||||
setcolorspace } def
|
||||
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
|
||||
dup /pdfFill exch def aload pop pdfFillXform setcolor
|
||||
/pdfLastFill true def /pdfLastStroke false def } def
|
||||
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
|
||||
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
|
||||
/pdfLastStroke true def /pdfLastFill false def } def
|
||||
/op { /pdfFillOP exch def
|
||||
pdfLastFill { pdfFillOP setoverprint } if } def
|
||||
/OP { /pdfStrokeOP exch def
|
||||
pdfLastStroke { pdfStrokeOP setoverprint } if } def
|
||||
/fCol {
|
||||
pdfLastFill not {
|
||||
pdfFillCS setcolorspace
|
||||
pdfFill aload pop pdfFillXform setcolor
|
||||
pdfFillOP setoverprint
|
||||
/pdfLastFill true def /pdfLastStroke false def
|
||||
} if
|
||||
} def
|
||||
/sCol {
|
||||
pdfLastStroke not {
|
||||
pdfStrokeCS setcolorspace
|
||||
pdfStroke aload pop pdfStrokeXform setcolor
|
||||
pdfStrokeOP setoverprint
|
||||
/pdfLastStroke true def /pdfLastFill false def
|
||||
} if
|
||||
} def
|
||||
% build a font
|
||||
/pdfMakeFont {
|
||||
4 3 roll findfont
|
||||
4 2 roll matrix scale makefont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/Encoding exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16 {
|
||||
exch findfont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/WMode exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16L3 {
|
||||
1 index /CIDFont resourcestatus {
|
||||
pop pop 1 index /CIDFont findresource /CIDFontType known
|
||||
} {
|
||||
false
|
||||
} ifelse
|
||||
{
|
||||
0 eq { /Identity-H } { /Identity-V } ifelse
|
||||
exch 1 array astore composefont pop
|
||||
} {
|
||||
pdfMakeFont16
|
||||
} ifelse
|
||||
} def
|
||||
% graphics state operators
|
||||
/q { gsave pdfDictSize dict begin } def
|
||||
/Q {
|
||||
end grestore
|
||||
/pdfLastFill where {
|
||||
pop
|
||||
pdfLastFill {
|
||||
pdfFillOP setoverprint
|
||||
} {
|
||||
pdfStrokeOP setoverprint
|
||||
} ifelse
|
||||
} if
|
||||
/pdfOPM where {
|
||||
pop
|
||||
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
|
||||
} if
|
||||
} def
|
||||
/cm { concat } def
|
||||
/d { setdash } def
|
||||
/i { setflat } def
|
||||
/j { setlinejoin } def
|
||||
/J { setlinecap } def
|
||||
/M { setmiterlimit } def
|
||||
/w { setlinewidth } def
|
||||
% path segment operators
|
||||
/m { moveto } def
|
||||
/l { lineto } def
|
||||
/c { curveto } def
|
||||
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
|
||||
neg 0 rlineto closepath } def
|
||||
/h { closepath } def
|
||||
% path painting operators
|
||||
/S { sCol stroke } def
|
||||
/Sf { fCol stroke } def
|
||||
/f { fCol fill } def
|
||||
/f* { fCol eofill } def
|
||||
% clipping operators
|
||||
/W { clip newpath } def
|
||||
/W* { eoclip newpath } def
|
||||
/Ws { strokepath clip newpath } def
|
||||
% text state operators
|
||||
/Tc { /pdfCharSpacing exch def } def
|
||||
/Tf { dup /pdfFontSize exch def
|
||||
dup pdfHorizScaling mul exch matrix scale
|
||||
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
|
||||
exch findfont exch makefont setfont } def
|
||||
/Tr { /pdfTextRender exch def } def
|
||||
/Tp { /pdfPatternCS exch def } def
|
||||
/Ts { /pdfTextRise exch def } def
|
||||
/Tw { /pdfWordSpacing exch def } def
|
||||
/Tz { /pdfHorizScaling exch def } def
|
||||
% text positioning operators
|
||||
/Td { pdfTextMat transform moveto } def
|
||||
/Tm { /pdfTextMat exch def } def
|
||||
% text string operators
|
||||
/xyshow where {
|
||||
pop
|
||||
/xyshow2 {
|
||||
dup length array
|
||||
0 2 2 index length 1 sub {
|
||||
2 index 1 index 2 copy get 3 1 roll 1 add get
|
||||
pdfTextMat dtransform
|
||||
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
|
||||
} for
|
||||
exch pop
|
||||
xyshow
|
||||
} def
|
||||
}{
|
||||
/xyshow2 {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval show moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval show moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/cshow where {
|
||||
pop
|
||||
/xycp {
|
||||
0 3 2 roll
|
||||
{
|
||||
pop pop currentpoint 3 2 roll
|
||||
1 string dup 0 4 3 roll put false charpath moveto
|
||||
2 copy get 2 index 2 index 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
2 add
|
||||
} exch cshow
|
||||
pop pop
|
||||
} def
|
||||
}{
|
||||
/xycp {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval false charpath moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval false charpath moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/Tj {
|
||||
fCol
|
||||
0 pdfTextRise pdfTextMat dtransform rmoveto
|
||||
currentpoint 4 2 roll
|
||||
pdfTextRender 1 and 0 eq {
|
||||
2 copy xyshow2
|
||||
} if
|
||||
pdfTextRender 3 and dup 1 eq exch 2 eq or {
|
||||
3 index 3 index moveto
|
||||
2 copy
|
||||
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
|
||||
xycp currentpoint stroke moveto
|
||||
} if
|
||||
pdfTextRender 4 and 0 ne {
|
||||
4 2 roll moveto xycp
|
||||
/pdfTextClipPath [ pdfTextClipPath aload pop
|
||||
{/moveto cvx}
|
||||
{/lineto cvx}
|
||||
{/curveto cvx}
|
||||
{/closepath cvx}
|
||||
pathforall ] def
|
||||
currentpoint newpath moveto
|
||||
} {
|
||||
pop pop pop pop
|
||||
} ifelse
|
||||
0 pdfTextRise neg pdfTextMat dtransform rmoveto
|
||||
} def
|
||||
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/Tclip { pdfTextClipPath cvx exec clip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
% Level 2/3 image operators
|
||||
/pdfImBuf 100 string def
|
||||
/pdfImStr {
|
||||
2 copy exch length lt {
|
||||
2 copy get exch 1 add exch
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/skipEOD {
|
||||
{ currentfile pdfImBuf readline
|
||||
not { pop exit } if
|
||||
(%-EOD-) eq { exit } if } loop
|
||||
} def
|
||||
/pdfIm { image skipEOD } def
|
||||
/pdfMask {
|
||||
/ReusableStreamDecode filter
|
||||
skipEOD
|
||||
/maskStream exch def
|
||||
} def
|
||||
/pdfMaskEnd { maskStream closefile } def
|
||||
/pdfMaskInit {
|
||||
/maskArray exch def
|
||||
/maskIdx 0 def
|
||||
} def
|
||||
/pdfMaskSrc {
|
||||
maskIdx maskArray length lt {
|
||||
maskArray maskIdx get
|
||||
/maskIdx maskIdx 1 add def
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/pdfImM { fCol imagemask skipEOD } def
|
||||
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
|
||||
/pdfImClip {
|
||||
gsave
|
||||
0 2 4 index length 1 sub {
|
||||
dup 4 index exch 2 copy
|
||||
get 5 index div put
|
||||
1 add 3 index exch 2 copy
|
||||
get 3 index div put
|
||||
} for
|
||||
pop pop rectclip
|
||||
} def
|
||||
/pdfImClipEnd { grestore } def
|
||||
% shading operators
|
||||
/colordelta {
|
||||
false 0 1 3 index length 1 sub {
|
||||
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
|
||||
pop true
|
||||
} if
|
||||
} for
|
||||
exch pop exch pop
|
||||
} def
|
||||
/funcCol { func n array astore } def
|
||||
/funcSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 6 eq {
|
||||
false
|
||||
} {
|
||||
4 index 4 index funcCol dup
|
||||
6 index 4 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
5 index 5 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
6 index 8 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
colordelta or or or
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add
|
||||
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
|
||||
6 index 6 index 4 index 4 index 4 index funcSH
|
||||
2 index 6 index 6 index 4 index 4 index funcSH
|
||||
6 index 2 index 4 index 6 index 4 index funcSH
|
||||
5 3 roll 3 2 roll funcSH pop pop
|
||||
} {
|
||||
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
|
||||
funcCol sc
|
||||
dup 4 index exch mat transform m
|
||||
3 index 3 index mat transform l
|
||||
1 index 3 index mat transform l
|
||||
mat transform l pop pop h f*
|
||||
} ifelse
|
||||
} def
|
||||
/axialCol {
|
||||
dup 0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup 1 gt {
|
||||
pop t1
|
||||
} {
|
||||
dt mul t0 add
|
||||
} ifelse
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/axialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index axialCol 2 index axialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index axialSH
|
||||
exch 3 2 roll axialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul
|
||||
axialCol sc
|
||||
exch dup dx mul x0 add exch dy mul y0 add
|
||||
3 2 roll dup dx mul x0 add exch dy mul y0 add
|
||||
dx abs dy abs ge {
|
||||
2 copy yMin sub dy mul dx div add yMin m
|
||||
yMax sub dy mul dx div add yMax l
|
||||
2 copy yMax sub dy mul dx div add yMax l
|
||||
yMin sub dy mul dx div add yMin l
|
||||
h f*
|
||||
} {
|
||||
exch 2 copy xMin sub dx mul dy div add xMin exch m
|
||||
xMax sub dx mul dy div add xMax exch l
|
||||
exch 2 copy xMax sub dx mul dy div add xMax exch l
|
||||
xMin sub dx mul dy div add xMin exch l
|
||||
h f*
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
/radialCol {
|
||||
dup t0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup t1 gt {
|
||||
pop t1
|
||||
} if
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/radialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index dt mul t0 add radialCol
|
||||
2 index dt mul t0 add radialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index radialSH
|
||||
exch 3 2 roll radialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul dt mul t0 add
|
||||
radialCol sc
|
||||
encl {
|
||||
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
0 360 arc h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
360 0 arcn h f
|
||||
} {
|
||||
2 copy
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arcn
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arcn h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arc
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arc h f
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
end
|
||||
%%EndResource
|
||||
/CIDInit /ProcSet findresource begin
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-H def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-V def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
/WMode 1 def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
end
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
xpdf begin
|
||||
%%EndSetup
|
||||
pdfStartPage
|
||||
%%EndPageSetup
|
||||
[] 0 d
|
||||
1 i
|
||||
0 j
|
||||
0 J
|
||||
10 M
|
||||
1 w
|
||||
/DeviceGray {} cs
|
||||
[0] sc
|
||||
/DeviceGray {} CS
|
||||
[0] SC
|
||||
false op
|
||||
false OP
|
||||
{} settransfer
|
||||
0 0 2371.9199 633.12 re
|
||||
W
|
||||
q
|
||||
[0.24 0 0 -0.24 0 633.12] cm
|
||||
q
|
||||
0 0 9883.333 2634.9304 re
|
||||
W*
|
||||
q
|
||||
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
|
||||
/DeviceRGB {} CS
|
||||
[0.9725 0.7098 0] SC
|
||||
/DeviceRGB {} cs
|
||||
[0.9725 0.7098 0] sc
|
||||
1313.30005 1890.9 m
|
||||
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
|
||||
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
|
||||
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
|
||||
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
|
||||
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
|
||||
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
|
||||
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
|
||||
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
|
||||
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
|
||||
1201.19995 1579.30005 l
|
||||
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
|
||||
h
|
||||
f
|
||||
1472.19995 1127.30005 m
|
||||
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
|
||||
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
|
||||
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
|
||||
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
|
||||
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
|
||||
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
|
||||
h
|
||||
1241.59998 1248.90002 m
|
||||
1275.09998 1251.70007 l
|
||||
1279 1252.00012 l
|
||||
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
|
||||
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
|
||||
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
|
||||
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
|
||||
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
|
||||
h
|
||||
f
|
||||
Q
|
||||
q
|
||||
[76.117943 0 0 76.100548 2395.657 642.07141] cm
|
||||
/DeviceRGB {} CS
|
||||
[0.2235 0.2431 0.2745] SC
|
||||
/DeviceRGB {} cs
|
||||
[0.2235 0.2431 0.2745] sc
|
||||
6.9 5.84 m
|
||||
8.2733 5.84 9.3566 6.18 10.15 6.86 c
|
||||
10.943399 7.54 11.34 8.520001 11.34 9.8 c
|
||||
11.34 11.04 10.94666 12.01 10.16 12.71 c
|
||||
9.37334 13.41 8.286699 13.76 6.9 13.76 c
|
||||
3.74 13.76 l
|
||||
3.74 20 l
|
||||
1.819999 20 l
|
||||
1.819999 5.84 l
|
||||
6.9 5.84 l
|
||||
6.9 5.84 l
|
||||
h
|
||||
6.34 12.08 m
|
||||
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
|
||||
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
|
||||
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
|
||||
3.739999 7.51998 l
|
||||
3.739999 12.079981 l
|
||||
6.339999 12.079981 l
|
||||
6.34 12.08 l
|
||||
h
|
||||
15.16 4.88 m
|
||||
15.16 20 l
|
||||
13.36 20 l
|
||||
13.36 4.88 l
|
||||
15.16 4.88 l
|
||||
h
|
||||
21.82 10.28 m
|
||||
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
|
||||
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
|
||||
25.780001 18.459938 l
|
||||
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
|
||||
24.26 19.999939 l
|
||||
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
|
||||
24.16 18.559938 l
|
||||
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
|
||||
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
|
||||
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
|
||||
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
|
||||
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
|
||||
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
|
||||
24.100002 14.119937 l
|
||||
24.100002 13.779937 l
|
||||
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
|
||||
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
|
||||
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
|
||||
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
|
||||
18.060003 11.679956 l
|
||||
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
|
||||
21.82 10.28 l
|
||||
h
|
||||
19.360001 17.26 m
|
||||
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
|
||||
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
|
||||
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
|
||||
24.100002 15.440001 l
|
||||
23.080002 15.440001 l
|
||||
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
|
||||
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
|
||||
19.360001 17.26 l
|
||||
h
|
||||
31.6 10.28 m
|
||||
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
|
||||
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
|
||||
33.439999 12.90004 l
|
||||
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
|
||||
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
|
||||
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
|
||||
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
|
||||
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
|
||||
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
|
||||
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
|
||||
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
|
||||
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
|
||||
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
|
||||
28.960001 17.440037 l
|
||||
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
|
||||
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
|
||||
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
|
||||
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
|
||||
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
|
||||
28.23 14.483337 28 13.906717 28 13.200018 c
|
||||
28 12.320018 28.34 11.616718 29.02 11.090018 c
|
||||
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
|
||||
31.6 10.28 l
|
||||
h
|
||||
39.779999 7.86 m
|
||||
39.77998 10.520001 l
|
||||
42.359978 10.520001 l
|
||||
42.359978 12.08 l
|
||||
39.779976 12.08 l
|
||||
39.779976 16.639999 l
|
||||
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
|
||||
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
|
||||
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
|
||||
42.419971 19.919998 l
|
||||
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
|
||||
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
|
||||
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
|
||||
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
|
||||
37.979969 12.079979 l
|
||||
35.899971 12.079979 l
|
||||
35.899971 10.51998 l
|
||||
37.979973 10.51998 l
|
||||
37.979973 7.85998 l
|
||||
39.779972 7.85998 l
|
||||
39.779999 7.86 l
|
||||
h
|
||||
45.740002 5.8 m
|
||||
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
|
||||
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
|
||||
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
|
||||
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
|
||||
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
|
||||
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
|
||||
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
|
||||
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
|
||||
45.740002 5.8 l
|
||||
h
|
||||
46.639999 10.520001 m
|
||||
46.639999 20 l
|
||||
44.84 20 l
|
||||
44.84 10.520001 l
|
||||
46.639999 10.520001 l
|
||||
h
|
||||
54 10.3 m
|
||||
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
|
||||
56.279999 13.04 l
|
||||
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
|
||||
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
|
||||
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
|
||||
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
|
||||
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
|
||||
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
|
||||
57.599998 18.780001 l
|
||||
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
|
||||
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
|
||||
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
|
||||
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
|
||||
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
|
||||
54 10.3 l
|
||||
h
|
||||
61.52 5.84 m
|
||||
61.52 11.72 l
|
||||
68.860001 11.72 l
|
||||
68.860001 5.84 l
|
||||
70.779999 5.84 l
|
||||
70.779999 20 l
|
||||
68.860001 20 l
|
||||
68.860001 13.520001 l
|
||||
61.52 13.520001 l
|
||||
61.52 20 l
|
||||
59.599998 20 l
|
||||
59.599998 5.84 l
|
||||
61.519997 5.84 l
|
||||
61.52 5.84 l
|
||||
h
|
||||
75.760002 10.520001 m
|
||||
75.760002 16.200001 l
|
||||
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
|
||||
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
|
||||
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
|
||||
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
|
||||
80.559998 10.520001 l
|
||||
82.360001 10.520001 l
|
||||
82.360001 20 l
|
||||
80.559998 20 l
|
||||
80.559998 18.540001 l
|
||||
80.519997 18.540001 l
|
||||
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
|
||||
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
|
||||
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
|
||||
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
|
||||
73.959999 10.520002 l
|
||||
75.760002 10.520002 l
|
||||
75.760002 10.520001 l
|
||||
h
|
||||
86.879997 4.88 m
|
||||
86.88002 11.88 l
|
||||
86.920021 11.88 l
|
||||
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
|
||||
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
|
||||
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
|
||||
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
|
||||
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
|
||||
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
|
||||
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
|
||||
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
|
||||
86.880028 18.639999 l
|
||||
86.880028 20 l
|
||||
85.080025 20 l
|
||||
85.080025 4.88 l
|
||||
86.880028 4.88 l
|
||||
86.879997 4.88 l
|
||||
h
|
||||
86.879997 15.26 m
|
||||
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
|
||||
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
|
||||
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
|
||||
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
|
||||
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
|
||||
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
|
||||
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
|
||||
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
|
||||
86.879997 15.26 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
Q
|
||||
Q
|
||||
showpage
|
||||
%%PageTrailer
|
||||
pdfEndPage
|
||||
%%Trailer
|
||||
end
|
||||
%%DocumentSuppliedResources:
|
||||
%%EOF
|
||||
@ -0,0 +1,818 @@
|
||||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
|
||||
%%Creator: Chromium
|
||||
%%LanguageLevel: 3
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%BoundingBox: 0 0 2372 634
|
||||
%%HiResBoundingBox: 0 0 2371.9199 633.12
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
%%BeginResource: procset xpdf 3.00 0
|
||||
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
|
||||
/xpdf 75 dict def xpdf begin
|
||||
% PDF special state
|
||||
/pdfDictSize 15 def
|
||||
/pdfSetup {
|
||||
/setpagedevice where {
|
||||
pop 2 dict begin
|
||||
/Policies 1 dict dup begin /PageSize 6 def end def
|
||||
{ /Duplex true def } if
|
||||
currentdict end setpagedevice
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfSetupPaper {
|
||||
% Change paper size, but only if different from previous paper size otherwise
|
||||
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
|
||||
% so we use the same when checking if the size changes.
|
||||
/setpagedevice where {
|
||||
pop currentpagedevice
|
||||
/PageSize known {
|
||||
2 copy
|
||||
currentpagedevice /PageSize get aload pop
|
||||
exch 4 1 roll
|
||||
sub abs 5 gt
|
||||
3 1 roll
|
||||
sub abs 5 gt
|
||||
or
|
||||
} {
|
||||
true
|
||||
} ifelse
|
||||
{
|
||||
2 array astore
|
||||
2 dict begin
|
||||
/PageSize exch def
|
||||
/ImagingBBox null def
|
||||
currentdict end
|
||||
setpagedevice
|
||||
} {
|
||||
pop pop
|
||||
} ifelse
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfStartPage {
|
||||
pdfDictSize dict begin
|
||||
/pdfFillCS [] def
|
||||
/pdfFillXform {} def
|
||||
/pdfStrokeCS [] def
|
||||
/pdfStrokeXform {} def
|
||||
/pdfFill [0] def
|
||||
/pdfStroke [0] def
|
||||
/pdfFillOP false def
|
||||
/pdfStrokeOP false def
|
||||
/pdfOPM false def
|
||||
/pdfLastFill false def
|
||||
/pdfLastStroke false def
|
||||
/pdfTextMat [1 0 0 1 0 0] def
|
||||
/pdfFontSize 0 def
|
||||
/pdfCharSpacing 0 def
|
||||
/pdfTextRender 0 def
|
||||
/pdfPatternCS false def
|
||||
/pdfTextRise 0 def
|
||||
/pdfWordSpacing 0 def
|
||||
/pdfHorizScaling 1 def
|
||||
/pdfTextClipPath [] def
|
||||
} def
|
||||
/pdfEndPage { end } def
|
||||
% PDF color state
|
||||
/opm { dup /pdfOPM exch def
|
||||
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
|
||||
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
|
||||
setcolorspace } def
|
||||
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
|
||||
setcolorspace } def
|
||||
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
|
||||
dup /pdfFill exch def aload pop pdfFillXform setcolor
|
||||
/pdfLastFill true def /pdfLastStroke false def } def
|
||||
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
|
||||
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
|
||||
/pdfLastStroke true def /pdfLastFill false def } def
|
||||
/op { /pdfFillOP exch def
|
||||
pdfLastFill { pdfFillOP setoverprint } if } def
|
||||
/OP { /pdfStrokeOP exch def
|
||||
pdfLastStroke { pdfStrokeOP setoverprint } if } def
|
||||
/fCol {
|
||||
pdfLastFill not {
|
||||
pdfFillCS setcolorspace
|
||||
pdfFill aload pop pdfFillXform setcolor
|
||||
pdfFillOP setoverprint
|
||||
/pdfLastFill true def /pdfLastStroke false def
|
||||
} if
|
||||
} def
|
||||
/sCol {
|
||||
pdfLastStroke not {
|
||||
pdfStrokeCS setcolorspace
|
||||
pdfStroke aload pop pdfStrokeXform setcolor
|
||||
pdfStrokeOP setoverprint
|
||||
/pdfLastStroke true def /pdfLastFill false def
|
||||
} if
|
||||
} def
|
||||
% build a font
|
||||
/pdfMakeFont {
|
||||
4 3 roll findfont
|
||||
4 2 roll matrix scale makefont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/Encoding exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16 {
|
||||
exch findfont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/WMode exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16L3 {
|
||||
1 index /CIDFont resourcestatus {
|
||||
pop pop 1 index /CIDFont findresource /CIDFontType known
|
||||
} {
|
||||
false
|
||||
} ifelse
|
||||
{
|
||||
0 eq { /Identity-H } { /Identity-V } ifelse
|
||||
exch 1 array astore composefont pop
|
||||
} {
|
||||
pdfMakeFont16
|
||||
} ifelse
|
||||
} def
|
||||
% graphics state operators
|
||||
/q { gsave pdfDictSize dict begin } def
|
||||
/Q {
|
||||
end grestore
|
||||
/pdfLastFill where {
|
||||
pop
|
||||
pdfLastFill {
|
||||
pdfFillOP setoverprint
|
||||
} {
|
||||
pdfStrokeOP setoverprint
|
||||
} ifelse
|
||||
} if
|
||||
/pdfOPM where {
|
||||
pop
|
||||
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
|
||||
} if
|
||||
} def
|
||||
/cm { concat } def
|
||||
/d { setdash } def
|
||||
/i { setflat } def
|
||||
/j { setlinejoin } def
|
||||
/J { setlinecap } def
|
||||
/M { setmiterlimit } def
|
||||
/w { setlinewidth } def
|
||||
% path segment operators
|
||||
/m { moveto } def
|
||||
/l { lineto } def
|
||||
/c { curveto } def
|
||||
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
|
||||
neg 0 rlineto closepath } def
|
||||
/h { closepath } def
|
||||
% path painting operators
|
||||
/S { sCol stroke } def
|
||||
/Sf { fCol stroke } def
|
||||
/f { fCol fill } def
|
||||
/f* { fCol eofill } def
|
||||
% clipping operators
|
||||
/W { clip newpath } def
|
||||
/W* { eoclip newpath } def
|
||||
/Ws { strokepath clip newpath } def
|
||||
% text state operators
|
||||
/Tc { /pdfCharSpacing exch def } def
|
||||
/Tf { dup /pdfFontSize exch def
|
||||
dup pdfHorizScaling mul exch matrix scale
|
||||
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
|
||||
exch findfont exch makefont setfont } def
|
||||
/Tr { /pdfTextRender exch def } def
|
||||
/Tp { /pdfPatternCS exch def } def
|
||||
/Ts { /pdfTextRise exch def } def
|
||||
/Tw { /pdfWordSpacing exch def } def
|
||||
/Tz { /pdfHorizScaling exch def } def
|
||||
% text positioning operators
|
||||
/Td { pdfTextMat transform moveto } def
|
||||
/Tm { /pdfTextMat exch def } def
|
||||
% text string operators
|
||||
/xyshow where {
|
||||
pop
|
||||
/xyshow2 {
|
||||
dup length array
|
||||
0 2 2 index length 1 sub {
|
||||
2 index 1 index 2 copy get 3 1 roll 1 add get
|
||||
pdfTextMat dtransform
|
||||
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
|
||||
} for
|
||||
exch pop
|
||||
xyshow
|
||||
} def
|
||||
}{
|
||||
/xyshow2 {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval show moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval show moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/cshow where {
|
||||
pop
|
||||
/xycp {
|
||||
0 3 2 roll
|
||||
{
|
||||
pop pop currentpoint 3 2 roll
|
||||
1 string dup 0 4 3 roll put false charpath moveto
|
||||
2 copy get 2 index 2 index 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
2 add
|
||||
} exch cshow
|
||||
pop pop
|
||||
} def
|
||||
}{
|
||||
/xycp {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval false charpath moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval false charpath moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/Tj {
|
||||
fCol
|
||||
0 pdfTextRise pdfTextMat dtransform rmoveto
|
||||
currentpoint 4 2 roll
|
||||
pdfTextRender 1 and 0 eq {
|
||||
2 copy xyshow2
|
||||
} if
|
||||
pdfTextRender 3 and dup 1 eq exch 2 eq or {
|
||||
3 index 3 index moveto
|
||||
2 copy
|
||||
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
|
||||
xycp currentpoint stroke moveto
|
||||
} if
|
||||
pdfTextRender 4 and 0 ne {
|
||||
4 2 roll moveto xycp
|
||||
/pdfTextClipPath [ pdfTextClipPath aload pop
|
||||
{/moveto cvx}
|
||||
{/lineto cvx}
|
||||
{/curveto cvx}
|
||||
{/closepath cvx}
|
||||
pathforall ] def
|
||||
currentpoint newpath moveto
|
||||
} {
|
||||
pop pop pop pop
|
||||
} ifelse
|
||||
0 pdfTextRise neg pdfTextMat dtransform rmoveto
|
||||
} def
|
||||
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/Tclip { pdfTextClipPath cvx exec clip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
% Level 2/3 image operators
|
||||
/pdfImBuf 100 string def
|
||||
/pdfImStr {
|
||||
2 copy exch length lt {
|
||||
2 copy get exch 1 add exch
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/skipEOD {
|
||||
{ currentfile pdfImBuf readline
|
||||
not { pop exit } if
|
||||
(%-EOD-) eq { exit } if } loop
|
||||
} def
|
||||
/pdfIm { image skipEOD } def
|
||||
/pdfMask {
|
||||
/ReusableStreamDecode filter
|
||||
skipEOD
|
||||
/maskStream exch def
|
||||
} def
|
||||
/pdfMaskEnd { maskStream closefile } def
|
||||
/pdfMaskInit {
|
||||
/maskArray exch def
|
||||
/maskIdx 0 def
|
||||
} def
|
||||
/pdfMaskSrc {
|
||||
maskIdx maskArray length lt {
|
||||
maskArray maskIdx get
|
||||
/maskIdx maskIdx 1 add def
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/pdfImM { fCol imagemask skipEOD } def
|
||||
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
|
||||
/pdfImClip {
|
||||
gsave
|
||||
0 2 4 index length 1 sub {
|
||||
dup 4 index exch 2 copy
|
||||
get 5 index div put
|
||||
1 add 3 index exch 2 copy
|
||||
get 3 index div put
|
||||
} for
|
||||
pop pop rectclip
|
||||
} def
|
||||
/pdfImClipEnd { grestore } def
|
||||
% shading operators
|
||||
/colordelta {
|
||||
false 0 1 3 index length 1 sub {
|
||||
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
|
||||
pop true
|
||||
} if
|
||||
} for
|
||||
exch pop exch pop
|
||||
} def
|
||||
/funcCol { func n array astore } def
|
||||
/funcSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 6 eq {
|
||||
false
|
||||
} {
|
||||
4 index 4 index funcCol dup
|
||||
6 index 4 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
5 index 5 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
6 index 8 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
colordelta or or or
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add
|
||||
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
|
||||
6 index 6 index 4 index 4 index 4 index funcSH
|
||||
2 index 6 index 6 index 4 index 4 index funcSH
|
||||
6 index 2 index 4 index 6 index 4 index funcSH
|
||||
5 3 roll 3 2 roll funcSH pop pop
|
||||
} {
|
||||
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
|
||||
funcCol sc
|
||||
dup 4 index exch mat transform m
|
||||
3 index 3 index mat transform l
|
||||
1 index 3 index mat transform l
|
||||
mat transform l pop pop h f*
|
||||
} ifelse
|
||||
} def
|
||||
/axialCol {
|
||||
dup 0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup 1 gt {
|
||||
pop t1
|
||||
} {
|
||||
dt mul t0 add
|
||||
} ifelse
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/axialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index axialCol 2 index axialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index axialSH
|
||||
exch 3 2 roll axialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul
|
||||
axialCol sc
|
||||
exch dup dx mul x0 add exch dy mul y0 add
|
||||
3 2 roll dup dx mul x0 add exch dy mul y0 add
|
||||
dx abs dy abs ge {
|
||||
2 copy yMin sub dy mul dx div add yMin m
|
||||
yMax sub dy mul dx div add yMax l
|
||||
2 copy yMax sub dy mul dx div add yMax l
|
||||
yMin sub dy mul dx div add yMin l
|
||||
h f*
|
||||
} {
|
||||
exch 2 copy xMin sub dx mul dy div add xMin exch m
|
||||
xMax sub dx mul dy div add xMax exch l
|
||||
exch 2 copy xMax sub dx mul dy div add xMax exch l
|
||||
xMin sub dx mul dy div add xMin exch l
|
||||
h f*
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
/radialCol {
|
||||
dup t0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup t1 gt {
|
||||
pop t1
|
||||
} if
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/radialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index dt mul t0 add radialCol
|
||||
2 index dt mul t0 add radialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index radialSH
|
||||
exch 3 2 roll radialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul dt mul t0 add
|
||||
radialCol sc
|
||||
encl {
|
||||
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
0 360 arc h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
360 0 arcn h f
|
||||
} {
|
||||
2 copy
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arcn
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arcn h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arc
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arc h f
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
end
|
||||
%%EndResource
|
||||
/CIDInit /ProcSet findresource begin
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-H def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-V def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
/WMode 1 def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
end
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
xpdf begin
|
||||
%%EndSetup
|
||||
pdfStartPage
|
||||
%%EndPageSetup
|
||||
[] 0 d
|
||||
1 i
|
||||
0 j
|
||||
0 J
|
||||
10 M
|
||||
1 w
|
||||
/DeviceGray {} cs
|
||||
[0] sc
|
||||
/DeviceGray {} CS
|
||||
[0] SC
|
||||
false op
|
||||
false OP
|
||||
{} settransfer
|
||||
0 0 2371.9199 633.12 re
|
||||
W
|
||||
q
|
||||
[0.24 0 0 -0.24 0 633.12] cm
|
||||
q
|
||||
0 0 9883.333 2634.9304 re
|
||||
W*
|
||||
q
|
||||
[3.125494 0 0 3.12478 0.0072969 0] cm
|
||||
/DeviceRGB {} CS
|
||||
[1 1 1] SC
|
||||
/DeviceRGB {} cs
|
||||
[1 1 1] sc
|
||||
0 0 3162.1621 843.23718 re
|
||||
f
|
||||
Q
|
||||
q
|
||||
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
|
||||
/DeviceRGB {} CS
|
||||
[0.9725 0.7098 0] SC
|
||||
/DeviceRGB {} cs
|
||||
[0.9725 0.7098 0] sc
|
||||
1313.30005 1890.9 m
|
||||
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
|
||||
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
|
||||
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
|
||||
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
|
||||
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
|
||||
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
|
||||
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
|
||||
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
|
||||
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
|
||||
1201.19995 1579.30005 l
|
||||
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
|
||||
h
|
||||
f
|
||||
1472.19995 1127.30005 m
|
||||
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
|
||||
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
|
||||
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
|
||||
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
|
||||
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
|
||||
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
|
||||
h
|
||||
1241.59998 1248.90002 m
|
||||
1275.09998 1251.70007 l
|
||||
1279 1252.00012 l
|
||||
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
|
||||
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
|
||||
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
|
||||
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
|
||||
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
|
||||
h
|
||||
f
|
||||
Q
|
||||
q
|
||||
[76.117943 0 0 76.100548 2395.657 642.07141] cm
|
||||
/DeviceRGB {} CS
|
||||
[0.2235 0.2431 0.2745] SC
|
||||
/DeviceRGB {} cs
|
||||
[0.2235 0.2431 0.2745] sc
|
||||
6.9 5.84 m
|
||||
8.2733 5.84 9.3566 6.18 10.15 6.86 c
|
||||
10.943399 7.54 11.34 8.520001 11.34 9.8 c
|
||||
11.34 11.04 10.94666 12.01 10.16 12.71 c
|
||||
9.37334 13.41 8.286699 13.76 6.9 13.76 c
|
||||
3.74 13.76 l
|
||||
3.74 20 l
|
||||
1.819999 20 l
|
||||
1.819999 5.84 l
|
||||
6.9 5.84 l
|
||||
6.9 5.84 l
|
||||
h
|
||||
6.34 12.08 m
|
||||
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
|
||||
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
|
||||
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
|
||||
3.739999 7.51998 l
|
||||
3.739999 12.079981 l
|
||||
6.339999 12.079981 l
|
||||
6.34 12.08 l
|
||||
h
|
||||
15.16 4.88 m
|
||||
15.16 20 l
|
||||
13.36 20 l
|
||||
13.36 4.88 l
|
||||
15.16 4.88 l
|
||||
h
|
||||
21.82 10.28 m
|
||||
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
|
||||
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
|
||||
25.780001 18.459938 l
|
||||
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
|
||||
24.26 19.999939 l
|
||||
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
|
||||
24.16 18.559938 l
|
||||
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
|
||||
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
|
||||
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
|
||||
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
|
||||
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
|
||||
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
|
||||
24.100002 14.119937 l
|
||||
24.100002 13.779937 l
|
||||
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
|
||||
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
|
||||
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
|
||||
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
|
||||
18.060003 11.679956 l
|
||||
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
|
||||
21.82 10.28 l
|
||||
h
|
||||
19.360001 17.26 m
|
||||
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
|
||||
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
|
||||
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
|
||||
24.100002 15.440001 l
|
||||
23.080002 15.440001 l
|
||||
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
|
||||
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
|
||||
19.360001 17.26 l
|
||||
h
|
||||
31.6 10.28 m
|
||||
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
|
||||
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
|
||||
33.439999 12.90004 l
|
||||
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
|
||||
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
|
||||
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
|
||||
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
|
||||
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
|
||||
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
|
||||
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
|
||||
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
|
||||
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
|
||||
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
|
||||
28.960001 17.440037 l
|
||||
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
|
||||
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
|
||||
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
|
||||
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
|
||||
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
|
||||
28.23 14.483337 28 13.906717 28 13.200018 c
|
||||
28 12.320018 28.34 11.616718 29.02 11.090018 c
|
||||
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
|
||||
31.6 10.28 l
|
||||
h
|
||||
39.779999 7.86 m
|
||||
39.77998 10.520001 l
|
||||
42.359978 10.520001 l
|
||||
42.359978 12.08 l
|
||||
39.779976 12.08 l
|
||||
39.779976 16.639999 l
|
||||
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
|
||||
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
|
||||
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
|
||||
42.419971 19.919998 l
|
||||
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
|
||||
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
|
||||
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
|
||||
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
|
||||
37.979969 12.079979 l
|
||||
35.899971 12.079979 l
|
||||
35.899971 10.51998 l
|
||||
37.979973 10.51998 l
|
||||
37.979973 7.85998 l
|
||||
39.779972 7.85998 l
|
||||
39.779999 7.86 l
|
||||
h
|
||||
45.740002 5.8 m
|
||||
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
|
||||
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
|
||||
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
|
||||
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
|
||||
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
|
||||
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
|
||||
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
|
||||
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
|
||||
45.740002 5.8 l
|
||||
h
|
||||
46.639999 10.520001 m
|
||||
46.639999 20 l
|
||||
44.84 20 l
|
||||
44.84 10.520001 l
|
||||
46.639999 10.520001 l
|
||||
h
|
||||
54 10.3 m
|
||||
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
|
||||
56.279999 13.04 l
|
||||
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
|
||||
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
|
||||
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
|
||||
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
|
||||
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
|
||||
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
|
||||
57.599998 18.780001 l
|
||||
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
|
||||
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
|
||||
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
|
||||
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
|
||||
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
|
||||
54 10.3 l
|
||||
h
|
||||
61.52 5.84 m
|
||||
61.52 11.72 l
|
||||
68.860001 11.72 l
|
||||
68.860001 5.84 l
|
||||
70.779999 5.84 l
|
||||
70.779999 20 l
|
||||
68.860001 20 l
|
||||
68.860001 13.520001 l
|
||||
61.52 13.520001 l
|
||||
61.52 20 l
|
||||
59.599998 20 l
|
||||
59.599998 5.84 l
|
||||
61.519997 5.84 l
|
||||
61.52 5.84 l
|
||||
h
|
||||
75.760002 10.520001 m
|
||||
75.760002 16.200001 l
|
||||
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
|
||||
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
|
||||
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
|
||||
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
|
||||
80.559998 10.520001 l
|
||||
82.360001 10.520001 l
|
||||
82.360001 20 l
|
||||
80.559998 20 l
|
||||
80.559998 18.540001 l
|
||||
80.519997 18.540001 l
|
||||
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
|
||||
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
|
||||
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
|
||||
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
|
||||
73.959999 10.520002 l
|
||||
75.760002 10.520002 l
|
||||
75.760002 10.520001 l
|
||||
h
|
||||
86.879997 4.88 m
|
||||
86.88002 11.88 l
|
||||
86.920021 11.88 l
|
||||
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
|
||||
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
|
||||
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
|
||||
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
|
||||
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
|
||||
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
|
||||
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
|
||||
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
|
||||
86.880028 18.639999 l
|
||||
86.880028 20 l
|
||||
85.080025 20 l
|
||||
85.080025 4.88 l
|
||||
86.880028 4.88 l
|
||||
86.879997 4.88 l
|
||||
h
|
||||
86.879997 15.26 m
|
||||
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
|
||||
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
|
||||
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
|
||||
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
|
||||
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
|
||||
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
|
||||
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
|
||||
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
|
||||
86.879997 15.26 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
Q
|
||||
Q
|
||||
showpage
|
||||
%%PageTrailer
|
||||
pdfEndPage
|
||||
%%Trailer
|
||||
end
|
||||
%%DocumentSuppliedResources:
|
||||
%%EOF
|
||||
@ -0,0 +1,809 @@
|
||||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
|
||||
%%Creator: Chromium
|
||||
%%LanguageLevel: 3
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%BoundingBox: 0 0 2372 634
|
||||
%%HiResBoundingBox: 0 0 2371.9199 633.12
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
%%BeginResource: procset xpdf 3.00 0
|
||||
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
|
||||
/xpdf 75 dict def xpdf begin
|
||||
% PDF special state
|
||||
/pdfDictSize 15 def
|
||||
/pdfSetup {
|
||||
/setpagedevice where {
|
||||
pop 2 dict begin
|
||||
/Policies 1 dict dup begin /PageSize 6 def end def
|
||||
{ /Duplex true def } if
|
||||
currentdict end setpagedevice
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfSetupPaper {
|
||||
% Change paper size, but only if different from previous paper size otherwise
|
||||
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
|
||||
% so we use the same when checking if the size changes.
|
||||
/setpagedevice where {
|
||||
pop currentpagedevice
|
||||
/PageSize known {
|
||||
2 copy
|
||||
currentpagedevice /PageSize get aload pop
|
||||
exch 4 1 roll
|
||||
sub abs 5 gt
|
||||
3 1 roll
|
||||
sub abs 5 gt
|
||||
or
|
||||
} {
|
||||
true
|
||||
} ifelse
|
||||
{
|
||||
2 array astore
|
||||
2 dict begin
|
||||
/PageSize exch def
|
||||
/ImagingBBox null def
|
||||
currentdict end
|
||||
setpagedevice
|
||||
} {
|
||||
pop pop
|
||||
} ifelse
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfStartPage {
|
||||
pdfDictSize dict begin
|
||||
/pdfFillCS [] def
|
||||
/pdfFillXform {} def
|
||||
/pdfStrokeCS [] def
|
||||
/pdfStrokeXform {} def
|
||||
/pdfFill [0] def
|
||||
/pdfStroke [0] def
|
||||
/pdfFillOP false def
|
||||
/pdfStrokeOP false def
|
||||
/pdfOPM false def
|
||||
/pdfLastFill false def
|
||||
/pdfLastStroke false def
|
||||
/pdfTextMat [1 0 0 1 0 0] def
|
||||
/pdfFontSize 0 def
|
||||
/pdfCharSpacing 0 def
|
||||
/pdfTextRender 0 def
|
||||
/pdfPatternCS false def
|
||||
/pdfTextRise 0 def
|
||||
/pdfWordSpacing 0 def
|
||||
/pdfHorizScaling 1 def
|
||||
/pdfTextClipPath [] def
|
||||
} def
|
||||
/pdfEndPage { end } def
|
||||
% PDF color state
|
||||
/opm { dup /pdfOPM exch def
|
||||
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
|
||||
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
|
||||
setcolorspace } def
|
||||
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
|
||||
setcolorspace } def
|
||||
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
|
||||
dup /pdfFill exch def aload pop pdfFillXform setcolor
|
||||
/pdfLastFill true def /pdfLastStroke false def } def
|
||||
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
|
||||
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
|
||||
/pdfLastStroke true def /pdfLastFill false def } def
|
||||
/op { /pdfFillOP exch def
|
||||
pdfLastFill { pdfFillOP setoverprint } if } def
|
||||
/OP { /pdfStrokeOP exch def
|
||||
pdfLastStroke { pdfStrokeOP setoverprint } if } def
|
||||
/fCol {
|
||||
pdfLastFill not {
|
||||
pdfFillCS setcolorspace
|
||||
pdfFill aload pop pdfFillXform setcolor
|
||||
pdfFillOP setoverprint
|
||||
/pdfLastFill true def /pdfLastStroke false def
|
||||
} if
|
||||
} def
|
||||
/sCol {
|
||||
pdfLastStroke not {
|
||||
pdfStrokeCS setcolorspace
|
||||
pdfStroke aload pop pdfStrokeXform setcolor
|
||||
pdfStrokeOP setoverprint
|
||||
/pdfLastStroke true def /pdfLastFill false def
|
||||
} if
|
||||
} def
|
||||
% build a font
|
||||
/pdfMakeFont {
|
||||
4 3 roll findfont
|
||||
4 2 roll matrix scale makefont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/Encoding exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16 {
|
||||
exch findfont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/WMode exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16L3 {
|
||||
1 index /CIDFont resourcestatus {
|
||||
pop pop 1 index /CIDFont findresource /CIDFontType known
|
||||
} {
|
||||
false
|
||||
} ifelse
|
||||
{
|
||||
0 eq { /Identity-H } { /Identity-V } ifelse
|
||||
exch 1 array astore composefont pop
|
||||
} {
|
||||
pdfMakeFont16
|
||||
} ifelse
|
||||
} def
|
||||
% graphics state operators
|
||||
/q { gsave pdfDictSize dict begin } def
|
||||
/Q {
|
||||
end grestore
|
||||
/pdfLastFill where {
|
||||
pop
|
||||
pdfLastFill {
|
||||
pdfFillOP setoverprint
|
||||
} {
|
||||
pdfStrokeOP setoverprint
|
||||
} ifelse
|
||||
} if
|
||||
/pdfOPM where {
|
||||
pop
|
||||
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
|
||||
} if
|
||||
} def
|
||||
/cm { concat } def
|
||||
/d { setdash } def
|
||||
/i { setflat } def
|
||||
/j { setlinejoin } def
|
||||
/J { setlinecap } def
|
||||
/M { setmiterlimit } def
|
||||
/w { setlinewidth } def
|
||||
% path segment operators
|
||||
/m { moveto } def
|
||||
/l { lineto } def
|
||||
/c { curveto } def
|
||||
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
|
||||
neg 0 rlineto closepath } def
|
||||
/h { closepath } def
|
||||
% path painting operators
|
||||
/S { sCol stroke } def
|
||||
/Sf { fCol stroke } def
|
||||
/f { fCol fill } def
|
||||
/f* { fCol eofill } def
|
||||
% clipping operators
|
||||
/W { clip newpath } def
|
||||
/W* { eoclip newpath } def
|
||||
/Ws { strokepath clip newpath } def
|
||||
% text state operators
|
||||
/Tc { /pdfCharSpacing exch def } def
|
||||
/Tf { dup /pdfFontSize exch def
|
||||
dup pdfHorizScaling mul exch matrix scale
|
||||
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
|
||||
exch findfont exch makefont setfont } def
|
||||
/Tr { /pdfTextRender exch def } def
|
||||
/Tp { /pdfPatternCS exch def } def
|
||||
/Ts { /pdfTextRise exch def } def
|
||||
/Tw { /pdfWordSpacing exch def } def
|
||||
/Tz { /pdfHorizScaling exch def } def
|
||||
% text positioning operators
|
||||
/Td { pdfTextMat transform moveto } def
|
||||
/Tm { /pdfTextMat exch def } def
|
||||
% text string operators
|
||||
/xyshow where {
|
||||
pop
|
||||
/xyshow2 {
|
||||
dup length array
|
||||
0 2 2 index length 1 sub {
|
||||
2 index 1 index 2 copy get 3 1 roll 1 add get
|
||||
pdfTextMat dtransform
|
||||
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
|
||||
} for
|
||||
exch pop
|
||||
xyshow
|
||||
} def
|
||||
}{
|
||||
/xyshow2 {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval show moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval show moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/cshow where {
|
||||
pop
|
||||
/xycp {
|
||||
0 3 2 roll
|
||||
{
|
||||
pop pop currentpoint 3 2 roll
|
||||
1 string dup 0 4 3 roll put false charpath moveto
|
||||
2 copy get 2 index 2 index 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
2 add
|
||||
} exch cshow
|
||||
pop pop
|
||||
} def
|
||||
}{
|
||||
/xycp {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval false charpath moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval false charpath moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/Tj {
|
||||
fCol
|
||||
0 pdfTextRise pdfTextMat dtransform rmoveto
|
||||
currentpoint 4 2 roll
|
||||
pdfTextRender 1 and 0 eq {
|
||||
2 copy xyshow2
|
||||
} if
|
||||
pdfTextRender 3 and dup 1 eq exch 2 eq or {
|
||||
3 index 3 index moveto
|
||||
2 copy
|
||||
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
|
||||
xycp currentpoint stroke moveto
|
||||
} if
|
||||
pdfTextRender 4 and 0 ne {
|
||||
4 2 roll moveto xycp
|
||||
/pdfTextClipPath [ pdfTextClipPath aload pop
|
||||
{/moveto cvx}
|
||||
{/lineto cvx}
|
||||
{/curveto cvx}
|
||||
{/closepath cvx}
|
||||
pathforall ] def
|
||||
currentpoint newpath moveto
|
||||
} {
|
||||
pop pop pop pop
|
||||
} ifelse
|
||||
0 pdfTextRise neg pdfTextMat dtransform rmoveto
|
||||
} def
|
||||
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/Tclip { pdfTextClipPath cvx exec clip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
% Level 2/3 image operators
|
||||
/pdfImBuf 100 string def
|
||||
/pdfImStr {
|
||||
2 copy exch length lt {
|
||||
2 copy get exch 1 add exch
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/skipEOD {
|
||||
{ currentfile pdfImBuf readline
|
||||
not { pop exit } if
|
||||
(%-EOD-) eq { exit } if } loop
|
||||
} def
|
||||
/pdfIm { image skipEOD } def
|
||||
/pdfMask {
|
||||
/ReusableStreamDecode filter
|
||||
skipEOD
|
||||
/maskStream exch def
|
||||
} def
|
||||
/pdfMaskEnd { maskStream closefile } def
|
||||
/pdfMaskInit {
|
||||
/maskArray exch def
|
||||
/maskIdx 0 def
|
||||
} def
|
||||
/pdfMaskSrc {
|
||||
maskIdx maskArray length lt {
|
||||
maskArray maskIdx get
|
||||
/maskIdx maskIdx 1 add def
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/pdfImM { fCol imagemask skipEOD } def
|
||||
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
|
||||
/pdfImClip {
|
||||
gsave
|
||||
0 2 4 index length 1 sub {
|
||||
dup 4 index exch 2 copy
|
||||
get 5 index div put
|
||||
1 add 3 index exch 2 copy
|
||||
get 3 index div put
|
||||
} for
|
||||
pop pop rectclip
|
||||
} def
|
||||
/pdfImClipEnd { grestore } def
|
||||
% shading operators
|
||||
/colordelta {
|
||||
false 0 1 3 index length 1 sub {
|
||||
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
|
||||
pop true
|
||||
} if
|
||||
} for
|
||||
exch pop exch pop
|
||||
} def
|
||||
/funcCol { func n array astore } def
|
||||
/funcSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 6 eq {
|
||||
false
|
||||
} {
|
||||
4 index 4 index funcCol dup
|
||||
6 index 4 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
5 index 5 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
6 index 8 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
colordelta or or or
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add
|
||||
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
|
||||
6 index 6 index 4 index 4 index 4 index funcSH
|
||||
2 index 6 index 6 index 4 index 4 index funcSH
|
||||
6 index 2 index 4 index 6 index 4 index funcSH
|
||||
5 3 roll 3 2 roll funcSH pop pop
|
||||
} {
|
||||
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
|
||||
funcCol sc
|
||||
dup 4 index exch mat transform m
|
||||
3 index 3 index mat transform l
|
||||
1 index 3 index mat transform l
|
||||
mat transform l pop pop h f*
|
||||
} ifelse
|
||||
} def
|
||||
/axialCol {
|
||||
dup 0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup 1 gt {
|
||||
pop t1
|
||||
} {
|
||||
dt mul t0 add
|
||||
} ifelse
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/axialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index axialCol 2 index axialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index axialSH
|
||||
exch 3 2 roll axialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul
|
||||
axialCol sc
|
||||
exch dup dx mul x0 add exch dy mul y0 add
|
||||
3 2 roll dup dx mul x0 add exch dy mul y0 add
|
||||
dx abs dy abs ge {
|
||||
2 copy yMin sub dy mul dx div add yMin m
|
||||
yMax sub dy mul dx div add yMax l
|
||||
2 copy yMax sub dy mul dx div add yMax l
|
||||
yMin sub dy mul dx div add yMin l
|
||||
h f*
|
||||
} {
|
||||
exch 2 copy xMin sub dx mul dy div add xMin exch m
|
||||
xMax sub dx mul dy div add xMax exch l
|
||||
exch 2 copy xMax sub dx mul dy div add xMax exch l
|
||||
xMin sub dx mul dy div add xMin exch l
|
||||
h f*
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
/radialCol {
|
||||
dup t0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup t1 gt {
|
||||
pop t1
|
||||
} if
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/radialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index dt mul t0 add radialCol
|
||||
2 index dt mul t0 add radialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index radialSH
|
||||
exch 3 2 roll radialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul dt mul t0 add
|
||||
radialCol sc
|
||||
encl {
|
||||
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
0 360 arc h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
360 0 arcn h f
|
||||
} {
|
||||
2 copy
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arcn
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arcn h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arc
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arc h f
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
end
|
||||
%%EndResource
|
||||
/CIDInit /ProcSet findresource begin
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-H def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-V def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
/WMode 1 def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
end
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
xpdf begin
|
||||
%%EndSetup
|
||||
pdfStartPage
|
||||
%%EndPageSetup
|
||||
[] 0 d
|
||||
1 i
|
||||
0 j
|
||||
0 J
|
||||
10 M
|
||||
1 w
|
||||
/DeviceGray {} cs
|
||||
[0] sc
|
||||
/DeviceGray {} CS
|
||||
[0] SC
|
||||
false op
|
||||
false OP
|
||||
{} settransfer
|
||||
0 0 2371.9199 633.12 re
|
||||
W
|
||||
q
|
||||
[0.24 0 0 -0.24 0 633.12] cm
|
||||
q
|
||||
0 0 9883.333 2634.9304 re
|
||||
W*
|
||||
q
|
||||
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
|
||||
/DeviceRGB {} CS
|
||||
[0.9725 0.7098 0] SC
|
||||
/DeviceRGB {} cs
|
||||
[0.9725 0.7098 0] sc
|
||||
1313.30005 1890.9 m
|
||||
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
|
||||
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
|
||||
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
|
||||
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
|
||||
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
|
||||
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
|
||||
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
|
||||
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
|
||||
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
|
||||
1201.19995 1579.30005 l
|
||||
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
|
||||
h
|
||||
f
|
||||
1472.19995 1127.30005 m
|
||||
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
|
||||
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
|
||||
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
|
||||
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
|
||||
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
|
||||
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
|
||||
h
|
||||
1241.59998 1248.90002 m
|
||||
1275.09998 1251.70007 l
|
||||
1279 1252.00012 l
|
||||
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
|
||||
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
|
||||
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
|
||||
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
|
||||
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
|
||||
h
|
||||
f
|
||||
Q
|
||||
q
|
||||
[76.117943 0 0 76.100548 2395.657 642.07141] cm
|
||||
/DeviceRGB {} CS
|
||||
[1 1 1] SC
|
||||
/DeviceRGB {} cs
|
||||
[1 1 1] sc
|
||||
6.9 5.84 m
|
||||
8.2733 5.84 9.3566 6.18 10.15 6.86 c
|
||||
10.943399 7.54 11.34 8.520001 11.34 9.8 c
|
||||
11.34 11.04 10.94666 12.01 10.16 12.71 c
|
||||
9.37334 13.41 8.286699 13.76 6.9 13.76 c
|
||||
3.74 13.76 l
|
||||
3.74 20 l
|
||||
1.819999 20 l
|
||||
1.819999 5.84 l
|
||||
6.9 5.84 l
|
||||
6.9 5.84 l
|
||||
h
|
||||
6.34 12.08 m
|
||||
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
|
||||
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
|
||||
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
|
||||
3.739999 7.51998 l
|
||||
3.739999 12.079981 l
|
||||
6.339999 12.079981 l
|
||||
6.34 12.08 l
|
||||
h
|
||||
15.16 4.88 m
|
||||
15.16 20 l
|
||||
13.36 20 l
|
||||
13.36 4.88 l
|
||||
15.16 4.88 l
|
||||
h
|
||||
21.82 10.28 m
|
||||
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
|
||||
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
|
||||
25.780001 18.459938 l
|
||||
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
|
||||
24.26 19.999939 l
|
||||
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
|
||||
24.16 18.559938 l
|
||||
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
|
||||
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
|
||||
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
|
||||
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
|
||||
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
|
||||
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
|
||||
24.100002 14.119937 l
|
||||
24.100002 13.779937 l
|
||||
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
|
||||
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
|
||||
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
|
||||
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
|
||||
18.060003 11.679956 l
|
||||
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
|
||||
21.82 10.28 l
|
||||
h
|
||||
19.360001 17.26 m
|
||||
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
|
||||
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
|
||||
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
|
||||
24.100002 15.440001 l
|
||||
23.080002 15.440001 l
|
||||
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
|
||||
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
|
||||
19.360001 17.26 l
|
||||
h
|
||||
31.6 10.28 m
|
||||
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
|
||||
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
|
||||
33.439999 12.90004 l
|
||||
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
|
||||
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
|
||||
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
|
||||
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
|
||||
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
|
||||
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
|
||||
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
|
||||
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
|
||||
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
|
||||
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
|
||||
28.960001 17.440037 l
|
||||
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
|
||||
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
|
||||
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
|
||||
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
|
||||
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
|
||||
28.23 14.483337 28 13.906717 28 13.200018 c
|
||||
28 12.320018 28.34 11.616718 29.02 11.090018 c
|
||||
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
|
||||
31.6 10.28 l
|
||||
h
|
||||
39.779999 7.86 m
|
||||
39.77998 10.520001 l
|
||||
42.359978 10.520001 l
|
||||
42.359978 12.08 l
|
||||
39.779976 12.08 l
|
||||
39.779976 16.639999 l
|
||||
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
|
||||
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
|
||||
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
|
||||
42.419971 19.919998 l
|
||||
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
|
||||
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
|
||||
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
|
||||
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
|
||||
37.979969 12.079979 l
|
||||
35.899971 12.079979 l
|
||||
35.899971 10.51998 l
|
||||
37.979973 10.51998 l
|
||||
37.979973 7.85998 l
|
||||
39.779972 7.85998 l
|
||||
39.779999 7.86 l
|
||||
h
|
||||
45.740002 5.8 m
|
||||
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
|
||||
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
|
||||
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
|
||||
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
|
||||
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
|
||||
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
|
||||
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
|
||||
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
|
||||
45.740002 5.8 l
|
||||
h
|
||||
46.639999 10.520001 m
|
||||
46.639999 20 l
|
||||
44.84 20 l
|
||||
44.84 10.520001 l
|
||||
46.639999 10.520001 l
|
||||
h
|
||||
54 10.3 m
|
||||
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
|
||||
56.279999 13.04 l
|
||||
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
|
||||
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
|
||||
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
|
||||
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
|
||||
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
|
||||
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
|
||||
57.599998 18.780001 l
|
||||
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
|
||||
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
|
||||
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
|
||||
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
|
||||
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
|
||||
54 10.3 l
|
||||
h
|
||||
61.52 5.84 m
|
||||
61.52 11.72 l
|
||||
68.860001 11.72 l
|
||||
68.860001 5.84 l
|
||||
70.779999 5.84 l
|
||||
70.779999 20 l
|
||||
68.860001 20 l
|
||||
68.860001 13.520001 l
|
||||
61.52 13.520001 l
|
||||
61.52 20 l
|
||||
59.599998 20 l
|
||||
59.599998 5.84 l
|
||||
61.519997 5.84 l
|
||||
61.52 5.84 l
|
||||
h
|
||||
75.760002 10.520001 m
|
||||
75.760002 16.200001 l
|
||||
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
|
||||
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
|
||||
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
|
||||
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
|
||||
80.559998 10.520001 l
|
||||
82.360001 10.520001 l
|
||||
82.360001 20 l
|
||||
80.559998 20 l
|
||||
80.559998 18.540001 l
|
||||
80.519997 18.540001 l
|
||||
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
|
||||
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
|
||||
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
|
||||
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
|
||||
73.959999 10.520002 l
|
||||
75.760002 10.520002 l
|
||||
75.760002 10.520001 l
|
||||
h
|
||||
86.879997 4.88 m
|
||||
86.88002 11.88 l
|
||||
86.920021 11.88 l
|
||||
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
|
||||
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
|
||||
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
|
||||
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
|
||||
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
|
||||
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
|
||||
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
|
||||
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
|
||||
86.880028 18.639999 l
|
||||
86.880028 20 l
|
||||
85.080025 20 l
|
||||
85.080025 4.88 l
|
||||
86.880028 4.88 l
|
||||
86.879997 4.88 l
|
||||
h
|
||||
86.879997 15.26 m
|
||||
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
|
||||
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
|
||||
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
|
||||
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
|
||||
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
|
||||
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
|
||||
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
|
||||
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
|
||||
86.879997 15.26 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
Q
|
||||
Q
|
||||
showpage
|
||||
%%PageTrailer
|
||||
pdfEndPage
|
||||
%%Trailer
|
||||
end
|
||||
%%DocumentSuppliedResources:
|
||||
%%EOF
|
||||
BIN
packages/kbot/cpp/branding/logo/web/Favicons/Android.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
packages/kbot/cpp/branding/logo/web/Favicons/browser.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
packages/kbot/cpp/branding/logo/web/Favicons/iPhone.png
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
BIN
packages/kbot/cpp/branding/logo/web/Favicons/iphone_512.png
Normal file
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
@ -17,6 +17,9 @@
|
||||
},
|
||||
{
|
||||
"path": "../media"
|
||||
},
|
||||
{
|
||||
"path": "../acl"
|
||||
}
|
||||
],
|
||||
"settings": {}
|
||||
|
||||
@ -1,229 +1,229 @@
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
|
||||
project(media-image-service
|
||||
VERSION 0.1.0
|
||||
DESCRIPTION "Polymech image resize service (CLI, REST, IPC) — libvips"
|
||||
LANGUAGES CXX
|
||||
)
|
||||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/dist")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/dist")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/dist")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_SOURCE_DIR}/dist")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_SOURCE_DIR}/dist")
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
# MSVC: UTF-8 source/execution charset so wide string literals (L"...") match UTF-8 in .cpp files.
|
||||
if(MSVC)
|
||||
add_compile_options(/utf-8)
|
||||
endif()
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||
|
||||
# Windows: official libvips dev tree (see scripts/fetch-vips-windows.ps1) — vips-dev-* under third_party/
|
||||
if(WIN32)
|
||||
file(GLOB _MEDIA_VIPS_SDK "${CMAKE_CURRENT_SOURCE_DIR}/third_party/vips-dev-*")
|
||||
if(_MEDIA_VIPS_SDK)
|
||||
list(APPEND CMAKE_PREFIX_PATH ${_MEDIA_VIPS_SDK})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include(FetchContent)
|
||||
|
||||
set(JSON_BuildTests OFF CACHE BOOL "" FORCE)
|
||||
|
||||
FetchContent_Declare(
|
||||
cli11
|
||||
GIT_REPOSITORY https://github.com/CLIUtils/CLI11.git
|
||||
GIT_TAG v2.4.2
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
|
||||
FetchContent_Declare(
|
||||
asio
|
||||
GIT_REPOSITORY https://github.com/chriskohlhoff/asio.git
|
||||
GIT_TAG asio-1-28-0
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
|
||||
FetchContent_Declare(
|
||||
nlohmann_json
|
||||
GIT_REPOSITORY https://github.com/nlohmann/json.git
|
||||
GIT_TAG v3.11.3
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
|
||||
FetchContent_Declare(
|
||||
cpp_httplib
|
||||
GIT_REPOSITORY https://github.com/yhirose/cpp-httplib.git
|
||||
GIT_TAG v0.16.3
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
|
||||
FetchContent_MakeAvailable(cli11 asio nlohmann_json cpp_httplib)
|
||||
|
||||
# libcurl — HTTP(S) URL inputs (minimal static build; SChannel on Windows, OpenSSL on Linux).
|
||||
set(CMAKE_POLICY_VERSION_MINIMUM 3.5 CACHE STRING "" FORCE)
|
||||
FetchContent_Declare(
|
||||
CURL
|
||||
URL https://github.com/curl/curl/releases/download/curl-8_12_1/curl-8.12.1.tar.xz
|
||||
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
|
||||
)
|
||||
set(BUILD_CURL_EXE OFF CACHE BOOL "" FORCE)
|
||||
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
|
||||
set(BUILD_TESTING OFF CACHE BOOL "" FORCE)
|
||||
if(WIN32)
|
||||
set(CURL_USE_OPENSSL OFF CACHE BOOL "" FORCE)
|
||||
set(CURL_USE_SCHANNEL ON CACHE BOOL "" FORCE)
|
||||
else()
|
||||
set(CURL_USE_SCHANNEL OFF CACHE BOOL "" FORCE)
|
||||
set(CURL_USE_OPENSSL ON CACHE BOOL "" FORCE)
|
||||
endif()
|
||||
set(CURL_ZLIB OFF CACHE BOOL "" FORCE)
|
||||
set(CURL_BROTLI OFF CACHE BOOL "" FORCE)
|
||||
set(CURL_ZSTD OFF CACHE BOOL "" FORCE)
|
||||
set(USE_NGHTTP2 OFF CACHE BOOL "" FORCE)
|
||||
set(CURL_USE_LIBSSH2 OFF CACHE BOOL "" FORCE)
|
||||
set(CURL_USE_LIBPSL OFF CACHE BOOL "" FORCE)
|
||||
set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
|
||||
set(CURL_DISABLE_LDAPS ON CACHE BOOL "" FORCE)
|
||||
FetchContent_MakeAvailable(CURL)
|
||||
|
||||
# PicoSHA2 — header-only SHA256 for cache keys.
|
||||
FetchContent_Declare(
|
||||
picosha2
|
||||
GIT_REPOSITORY https://github.com/okdshin/PicoSHA2.git
|
||||
GIT_TAG master
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_GetProperties(picosha2)
|
||||
if(NOT picosha2_POPULATED)
|
||||
FetchContent_Populate(picosha2)
|
||||
endif()
|
||||
|
||||
# p-ranav/glob — same as packages/kbot/cpp (glob / rglob for **).
|
||||
FetchContent_Declare(
|
||||
pranav_glob
|
||||
GIT_REPOSITORY https://github.com/p-ranav/glob.git
|
||||
GIT_TAG master
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_GetProperties(pranav_glob)
|
||||
if(NOT pranav_glob_POPULATED)
|
||||
FetchContent_Populate(pranav_glob)
|
||||
endif()
|
||||
add_library(pranav_glob STATIC ${pranav_glob_SOURCE_DIR}/source/glob.cpp)
|
||||
target_include_directories(pranav_glob PUBLIC ${pranav_glob_SOURCE_DIR}/include)
|
||||
target_compile_features(pranav_glob PUBLIC cxx_std_17)
|
||||
if(MSVC)
|
||||
target_compile_options(pranav_glob PRIVATE /permissive-)
|
||||
endif()
|
||||
|
||||
# laserpants/dotenv-cpp — load .env (same pattern as packages/kbot/cpp).
|
||||
FetchContent_Declare(
|
||||
laserpants_dotenv
|
||||
GIT_REPOSITORY https://github.com/laserpants/dotenv-cpp.git
|
||||
GIT_TAG master
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_GetProperties(laserpants_dotenv)
|
||||
if(NOT laserpants_dotenv_POPULATED)
|
||||
FetchContent_Populate(laserpants_dotenv)
|
||||
endif()
|
||||
add_library(laserpants_dotenv INTERFACE)
|
||||
target_include_directories(laserpants_dotenv INTERFACE ${laserpants_dotenv_SOURCE_DIR}/include)
|
||||
add_library(laserpants::dotenv ALIAS laserpants_dotenv)
|
||||
|
||||
find_package(Vips REQUIRED)
|
||||
|
||||
add_executable(media-img
|
||||
src/main.cpp
|
||||
src/core/cache.cpp
|
||||
src/core/glob_paths.cpp
|
||||
src/core/output_path.cpp
|
||||
src/core/resize.cpp
|
||||
src/core/url_fetch.cpp
|
||||
src/http/serve.cpp
|
||||
src/ipc/ipc_serve.cpp
|
||||
)
|
||||
if(WIN32)
|
||||
target_sources(media-img PRIVATE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/register_explorer.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/resize_ui.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/resize_progress_ui.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/ui_singleton.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/media-img-win.manifest"
|
||||
)
|
||||
endif()
|
||||
|
||||
target_include_directories(media-img PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||||
${asio_SOURCE_DIR}/asio/include
|
||||
${picosha2_SOURCE_DIR}
|
||||
)
|
||||
|
||||
target_compile_definitions(media-img PRIVATE
|
||||
ASIO_STANDALONE
|
||||
ASIO_NO_DEPRECATED
|
||||
CPPHTTPLIB_NO_EXCEPTIONS=0
|
||||
)
|
||||
|
||||
if(WIN32)
|
||||
target_compile_definitions(media-img PRIVATE
|
||||
_WIN32_WINNT=0x0A00
|
||||
NOMINMAX
|
||||
)
|
||||
endif()
|
||||
|
||||
target_link_libraries(media-img PRIVATE
|
||||
CLI11::CLI11
|
||||
nlohmann_json::nlohmann_json
|
||||
httplib::httplib
|
||||
laserpants::dotenv
|
||||
pranav_glob
|
||||
CURL::libcurl
|
||||
Vips::vips
|
||||
)
|
||||
|
||||
# GObject (g_object_ref / g_object_unref) — not re-exported through libvips import lib on MSVC.
|
||||
if(WIN32)
|
||||
file(GLOB _MEDIA_VIPS_SDK_LIST "${CMAKE_CURRENT_SOURCE_DIR}/third_party/vips-dev-*")
|
||||
if(_MEDIA_VIPS_SDK_LIST)
|
||||
list(GET _MEDIA_VIPS_SDK_LIST 0 _MEDIA_VIPS_SDK)
|
||||
if(EXISTS "${_MEDIA_VIPS_SDK}/lib/libgobject-2.0.lib")
|
||||
target_link_libraries(media-img PRIVATE
|
||||
"${_MEDIA_VIPS_SDK}/lib/libgobject-2.0.lib"
|
||||
"${_MEDIA_VIPS_SDK}/lib/libglib-2.0.lib"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
target_link_libraries(media-img PRIVATE pthread)
|
||||
endif()
|
||||
|
||||
target_compile_definitions(media-img PRIVATE
|
||||
"MEDIA_IMG_VERSION=\"${PROJECT_VERSION}\""
|
||||
)
|
||||
|
||||
# Runtime: libvips and deps are DLLs next to media-img.exe (Windows dev bundle bin/).
|
||||
if(WIN32)
|
||||
file(GLOB _MEDIA_VIPS_SDK_LIST "${CMAKE_CURRENT_SOURCE_DIR}/third_party/vips-dev-*")
|
||||
if(_MEDIA_VIPS_SDK_LIST)
|
||||
list(GET _MEDIA_VIPS_SDK_LIST 0 _MEDIA_VIPS_SDK)
|
||||
if(EXISTS "${_MEDIA_VIPS_SDK}/bin")
|
||||
add_custom_command(
|
||||
TARGET media-img
|
||||
POST_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_directory
|
||||
"${_MEDIA_VIPS_SDK}/bin"
|
||||
"${CMAKE_SOURCE_DIR}/dist"
|
||||
COMMENT "Copy libvips DLLs to dist/"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
|
||||
project(media-image-service
|
||||
VERSION 0.1.0
|
||||
DESCRIPTION "Polymech image resize service (CLI, REST, IPC) — libvips"
|
||||
LANGUAGES CXX
|
||||
)
|
||||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/dist")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/dist")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/dist")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_SOURCE_DIR}/dist")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_SOURCE_DIR}/dist")
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
# MSVC: UTF-8 source/execution charset so wide string literals (L"...") match UTF-8 in .cpp files.
|
||||
if(MSVC)
|
||||
add_compile_options(/utf-8)
|
||||
endif()
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||
|
||||
# Windows: official libvips dev tree (see scripts/fetch-vips-windows.ps1) — vips-dev-* under third_party/
|
||||
if(WIN32)
|
||||
file(GLOB _MEDIA_VIPS_SDK "${CMAKE_CURRENT_SOURCE_DIR}/third_party/vips-dev-*")
|
||||
if(_MEDIA_VIPS_SDK)
|
||||
list(APPEND CMAKE_PREFIX_PATH ${_MEDIA_VIPS_SDK})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include(FetchContent)
|
||||
|
||||
set(JSON_BuildTests OFF CACHE BOOL "" FORCE)
|
||||
|
||||
FetchContent_Declare(
|
||||
cli11
|
||||
GIT_REPOSITORY https://github.com/CLIUtils/CLI11.git
|
||||
GIT_TAG v2.4.2
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
|
||||
FetchContent_Declare(
|
||||
asio
|
||||
GIT_REPOSITORY https://github.com/chriskohlhoff/asio.git
|
||||
GIT_TAG asio-1-28-0
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
|
||||
FetchContent_Declare(
|
||||
nlohmann_json
|
||||
GIT_REPOSITORY https://github.com/nlohmann/json.git
|
||||
GIT_TAG v3.11.3
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
|
||||
FetchContent_Declare(
|
||||
cpp_httplib
|
||||
GIT_REPOSITORY https://github.com/yhirose/cpp-httplib.git
|
||||
GIT_TAG v0.16.3
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
|
||||
FetchContent_MakeAvailable(cli11 asio nlohmann_json cpp_httplib)
|
||||
|
||||
# libcurl — HTTP(S) URL inputs (minimal static build; SChannel on Windows, OpenSSL on Linux).
|
||||
set(CMAKE_POLICY_VERSION_MINIMUM 3.5 CACHE STRING "" FORCE)
|
||||
FetchContent_Declare(
|
||||
CURL
|
||||
URL https://github.com/curl/curl/releases/download/curl-8_12_1/curl-8.12.1.tar.xz
|
||||
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
|
||||
)
|
||||
set(BUILD_CURL_EXE OFF CACHE BOOL "" FORCE)
|
||||
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
|
||||
set(BUILD_TESTING OFF CACHE BOOL "" FORCE)
|
||||
if(WIN32)
|
||||
set(CURL_USE_OPENSSL OFF CACHE BOOL "" FORCE)
|
||||
set(CURL_USE_SCHANNEL ON CACHE BOOL "" FORCE)
|
||||
else()
|
||||
set(CURL_USE_SCHANNEL OFF CACHE BOOL "" FORCE)
|
||||
set(CURL_USE_OPENSSL ON CACHE BOOL "" FORCE)
|
||||
endif()
|
||||
set(CURL_ZLIB OFF CACHE BOOL "" FORCE)
|
||||
set(CURL_BROTLI OFF CACHE BOOL "" FORCE)
|
||||
set(CURL_ZSTD OFF CACHE BOOL "" FORCE)
|
||||
set(USE_NGHTTP2 OFF CACHE BOOL "" FORCE)
|
||||
set(CURL_USE_LIBSSH2 OFF CACHE BOOL "" FORCE)
|
||||
set(CURL_USE_LIBPSL OFF CACHE BOOL "" FORCE)
|
||||
set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
|
||||
set(CURL_DISABLE_LDAPS ON CACHE BOOL "" FORCE)
|
||||
FetchContent_MakeAvailable(CURL)
|
||||
|
||||
# PicoSHA2 — header-only SHA256 for cache keys.
|
||||
FetchContent_Declare(
|
||||
picosha2
|
||||
GIT_REPOSITORY https://github.com/okdshin/PicoSHA2.git
|
||||
GIT_TAG master
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_GetProperties(picosha2)
|
||||
if(NOT picosha2_POPULATED)
|
||||
FetchContent_Populate(picosha2)
|
||||
endif()
|
||||
|
||||
# p-ranav/glob — same as packages/kbot/cpp (glob / rglob for **).
|
||||
FetchContent_Declare(
|
||||
pranav_glob
|
||||
GIT_REPOSITORY https://github.com/p-ranav/glob.git
|
||||
GIT_TAG master
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_GetProperties(pranav_glob)
|
||||
if(NOT pranav_glob_POPULATED)
|
||||
FetchContent_Populate(pranav_glob)
|
||||
endif()
|
||||
add_library(pranav_glob STATIC ${pranav_glob_SOURCE_DIR}/source/glob.cpp)
|
||||
target_include_directories(pranav_glob PUBLIC ${pranav_glob_SOURCE_DIR}/include)
|
||||
target_compile_features(pranav_glob PUBLIC cxx_std_17)
|
||||
if(MSVC)
|
||||
target_compile_options(pranav_glob PRIVATE /permissive-)
|
||||
endif()
|
||||
|
||||
# laserpants/dotenv-cpp — load .env (same pattern as packages/kbot/cpp).
|
||||
FetchContent_Declare(
|
||||
laserpants_dotenv
|
||||
GIT_REPOSITORY https://github.com/laserpants/dotenv-cpp.git
|
||||
GIT_TAG master
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_GetProperties(laserpants_dotenv)
|
||||
if(NOT laserpants_dotenv_POPULATED)
|
||||
FetchContent_Populate(laserpants_dotenv)
|
||||
endif()
|
||||
add_library(laserpants_dotenv INTERFACE)
|
||||
target_include_directories(laserpants_dotenv INTERFACE ${laserpants_dotenv_SOURCE_DIR}/include)
|
||||
add_library(laserpants::dotenv ALIAS laserpants_dotenv)
|
||||
|
||||
find_package(Vips REQUIRED)
|
||||
|
||||
add_executable(pm-image
|
||||
src/main.cpp
|
||||
src/core/cache.cpp
|
||||
src/core/glob_paths.cpp
|
||||
src/core/output_path.cpp
|
||||
src/core/resize.cpp
|
||||
src/core/url_fetch.cpp
|
||||
src/http/serve.cpp
|
||||
src/ipc/ipc_serve.cpp
|
||||
)
|
||||
if(WIN32)
|
||||
target_sources(pm-image PRIVATE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/register_explorer.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/resize_ui.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/resize_progress_ui.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/ui_singleton.cpp"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/win/media-img-win.manifest"
|
||||
)
|
||||
endif()
|
||||
|
||||
target_include_directories(pm-image PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||||
${asio_SOURCE_DIR}/asio/include
|
||||
${picosha2_SOURCE_DIR}
|
||||
)
|
||||
|
||||
target_compile_definitions(pm-image PRIVATE
|
||||
ASIO_STANDALONE
|
||||
ASIO_NO_DEPRECATED
|
||||
CPPHTTPLIB_NO_EXCEPTIONS=0
|
||||
)
|
||||
|
||||
if(WIN32)
|
||||
target_compile_definitions(pm-image PRIVATE
|
||||
_WIN32_WINNT=0x0A00
|
||||
NOMINMAX
|
||||
)
|
||||
endif()
|
||||
|
||||
target_link_libraries(pm-image PRIVATE
|
||||
CLI11::CLI11
|
||||
nlohmann_json::nlohmann_json
|
||||
httplib::httplib
|
||||
laserpants::dotenv
|
||||
pranav_glob
|
||||
CURL::libcurl
|
||||
Vips::vips
|
||||
)
|
||||
|
||||
# GObject (g_object_ref / g_object_unref) — not re-exported through libvips import lib on MSVC.
|
||||
if(WIN32)
|
||||
file(GLOB _MEDIA_VIPS_SDK_LIST "${CMAKE_CURRENT_SOURCE_DIR}/third_party/vips-dev-*")
|
||||
if(_MEDIA_VIPS_SDK_LIST)
|
||||
list(GET _MEDIA_VIPS_SDK_LIST 0 _MEDIA_VIPS_SDK)
|
||||
if(EXISTS "${_MEDIA_VIPS_SDK}/lib/libgobject-2.0.lib")
|
||||
target_link_libraries(pm-image PRIVATE
|
||||
"${_MEDIA_VIPS_SDK}/lib/libgobject-2.0.lib"
|
||||
"${_MEDIA_VIPS_SDK}/lib/libglib-2.0.lib"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
target_link_libraries(pm-image PRIVATE pthread)
|
||||
endif()
|
||||
|
||||
target_compile_definitions(pm-image PRIVATE
|
||||
"MEDIA_IMG_VERSION=\"${PROJECT_VERSION}\""
|
||||
)
|
||||
|
||||
# Runtime: libvips and deps are DLLs next to pm-image.exe (Windows dev bundle bin/).
|
||||
if(WIN32)
|
||||
file(GLOB _MEDIA_VIPS_SDK_LIST "${CMAKE_CURRENT_SOURCE_DIR}/third_party/vips-dev-*")
|
||||
if(_MEDIA_VIPS_SDK_LIST)
|
||||
list(GET _MEDIA_VIPS_SDK_LIST 0 _MEDIA_VIPS_SDK)
|
||||
if(EXISTS "${_MEDIA_VIPS_SDK}/bin")
|
||||
add_custom_command(
|
||||
TARGET pm-image
|
||||
POST_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_directory
|
||||
"${_MEDIA_VIPS_SDK}/bin"
|
||||
"${CMAKE_SOURCE_DIR}/dist"
|
||||
COMMENT "Copy libvips DLLs to dist/"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
# media-img (C++)
|
||||
# pm-image (C++)
|
||||
|
||||
CMake-based **`media-img`** binary: **CLI**, **HTTP REST** (`serve`), and **line-delimited JSON IPC** (`ipc`). Image processing uses **libvips** — the same engine as **[Sharp](https://sharp.pixelplumbing.com/)** (Node.js), exposed with a similar option model. Optional **`.env`** is loaded from the working directory ([laserpants/dotenv-cpp](https://github.com/laserpants/dotenv-cpp)).
|
||||
CMake-based **`pm-image`** binary: **CLI**, **HTTP REST** (`serve`), and **line-delimited JSON IPC** (`ipc`). Image processing uses **libvips** — the same engine as **[Sharp](https://sharp.pixelplumbing.com/)** (Node.js), exposed with a similar option model. Optional **`.env`** is loaded from the working directory ([laserpants/dotenv-cpp](https://github.com/laserpants/dotenv-cpp)).
|
||||
|
||||
- **API reference (underlying library):** [libvips `VipsImage`](https://www.libvips.org/API/current/class.Image.html)
|
||||
|
||||
@ -48,7 +48,7 @@ cmake --preset release
|
||||
cmake --build --preset release
|
||||
```
|
||||
|
||||
Binary: **`dist/media-img`** (`.exe` on Windows).
|
||||
Binary: **`dist/pm-image`** (`.exe` on Windows).
|
||||
|
||||
### Windows installer (NSIS)
|
||||
|
||||
@ -58,16 +58,16 @@ From `packages/media/cpp`, after a release build:
|
||||
npm run build:installer
|
||||
```
|
||||
|
||||
Produces **`dist/media-img-Setup.exe`**, installs `media-img.exe`, libvips DLLs, `vips-modules-8.18`, and `scripts/explorer-resize.ps1`, and prepends the install directory to the **user** `PATH`. Uninstaller is registered under Add/Remove Programs.
|
||||
Produces **`dist/pm-image-Setup.exe`**, installs `pm-image.exe`, libvips DLLs, `vips-modules-8.18`, and `scripts/explorer-resize.ps1`, and prepends the install directory to the **user** `PATH`. Uninstaller is registered under Add/Remove Programs.
|
||||
|
||||
### Explorer context menu (`media-img register-explorer`)
|
||||
### Explorer context menu (`pm-image register-explorer`)
|
||||
|
||||
Implemented in **C++** (Windows registry). The NSIS installer runs `media-img.exe register-explorer` after copying files; uninstall runs `register-explorer --unregister --no-refresh-shell`.
|
||||
Implemented in **C++** (Windows registry). The NSIS installer runs `pm-image.exe register-explorer` after copying files; uninstall runs `register-explorer --unregister --no-refresh-shell`.
|
||||
|
||||
```bash
|
||||
media-img register-explorer
|
||||
media-img register-explorer --dry
|
||||
media-img register-explorer --unregister
|
||||
pm-image register-explorer
|
||||
pm-image register-explorer --dry
|
||||
pm-image register-explorer --unregister
|
||||
```
|
||||
|
||||
Registers a **PM-Media** cascading menu on image extensions (including **`.avif`**, **`.arw`**, **`.webp`**, TIFF, etc.), on **folders**, and on the **folder background** (empty area). **Resize** presets (default widths **1980, 1200, 800, 400**): **in place** or **copy** as `${SRC_NAME}_${width}${SRC_EXT}`. **Convert to JPG** writes `${SRC_NAME}_converted.jpg` via `explorer-convert.ps1`. Override widths with `--widths 1920,800`.
|
||||
@ -76,9 +76,9 @@ Under `SystemFileAssociations`, each extension is registered as **`.ext`**, **`.
|
||||
|
||||
Defaults: **`--media-bin`** = this executable; **`--explorer-script`** / **`--explorer-convert-script`** = `<exe_dir>\\scripts\\explorer-*.ps1`, or `packages/media/scripts\\…` from a dev `cpp\\dist` build.
|
||||
|
||||
`pm-media register-explorer` forwards argv to `media-img.exe` for convenience.
|
||||
`pm-media register-explorer` forwards argv to `pm-image.exe` for convenience.
|
||||
|
||||
Context menus run `powershell.exe -WindowStyle Hidden`; re-run `media-img register-explorer` after updates so registry command lines refresh.
|
||||
Context menus run `powershell.exe -WindowStyle Hidden`; re-run `pm-image register-explorer` after updates so registry command lines refresh.
|
||||
|
||||
## Formats — same idea as Sharp / libvips
|
||||
|
||||
@ -95,7 +95,7 @@ Sharp wraps libvips: **decode → process → encode**. We do the same with `vip
|
||||
|
||||
## Sharp-like options (`resize` / JSON)
|
||||
|
||||
| Sharp concept | `media-img` / JSON field | Notes |
|
||||
| Sharp concept | `pm-image` / JSON field | Notes |
|
||||
|---------------|---------------------------|--------|
|
||||
| `resize.fit` | `fit` | `inside`, `cover`, `contain`, `fill`, `outside` |
|
||||
| `resize.position` | `position` | `centre`, `attention`, `entropy`, … → libvips *interesting* |
|
||||
@ -109,7 +109,7 @@ Sharp wraps libvips: **decode → process → encode**. We do the same with `vip
|
||||
| `flip` / `flop` | `flip` / `flop` | |
|
||||
| Letterbox | `background` | `#rrggbb` for `contain` |
|
||||
|
||||
**Windows:** `media-img resize --ui` opens a **native Win32** dialog to choose input/output paths, max dimensions, fit mode, quality, and enlargement / autorotate / strip options. Other CLI flags seed the dialog; **`--src` / `--dst` are not allowed** with `--ui`. If you cancel, the command exits without processing.
|
||||
**Windows:** `pm-image resize --ui` opens a **native Win32** dialog to choose input/output paths, max dimensions, fit mode, quality, and enlargement / autorotate / strip options. Other CLI flags seed the dialog; **`--src` / `--dst` are not allowed** with `--ui`. If you cancel, the command exits without processing.
|
||||
|
||||
**REST** `POST /v1/resize` and **IPC** use the same JSON keys as the table, plus the fields in the **“Batch paths & cache”** section below.
|
||||
|
||||
@ -141,10 +141,10 @@ Use this when **one** `resize` invocation (CLI, or a single REST/IPC request) sh
|
||||
**CLI:** use positional `input`/`output` or `--src` / `--dst` together. You can omit `output` only when `input` is a single path or URL (not a multi-match glob).
|
||||
|
||||
```bash
|
||||
./dist/media-img resize './photos/**/*.jpg' ./out/
|
||||
./dist/media-img resize --src './shots/*.png' --dst ./thumbs/
|
||||
pm-image resize './photos/**/*.jpg' ./out/
|
||||
pm-image resize --src './shots/*.png' --dst ./thumbs/
|
||||
# URL → ./200.jpg under cwd (picsum path segment "200", default extension .jpg)
|
||||
./dist/media-img resize 'https://picsum.photos/200' --max-width 400 --url-timeout 30
|
||||
pm-image resize 'https://picsum.photos/200' --max-width 400 --url-timeout 30
|
||||
```
|
||||
|
||||
**JSON:** same strings in `"input"` and `"output"`. When `expand_glob` is true (default), glob expansion runs when the pattern contains `*`, `?`, or `**`.
|
||||
@ -162,8 +162,8 @@ Placeholders are expanded **after** inputs are resolved (glob or single file). E
|
||||
Use cases: write beside each source (`${SRC_DIR}/out/${SRC_NAME}.webp`), suffix stems (`${SRC_NAME}_thumb.jpg`), or change extension via `format` / path.
|
||||
|
||||
```bash
|
||||
./dist/media-img resize --src ./photo.jpg --dst '${SRC_DIR}/${SRC_NAME}_medium.jpg' --max-width 800
|
||||
./dist/media-img resize --src './shots/*.jpg' --dst '${SRC_DIR}/${SRC_NAME}.webp' --max-width 1920
|
||||
pm-image resize --src ./photo.jpg --dst '${SRC_DIR}/${SRC_NAME}_medium.jpg' --max-width 800
|
||||
pm-image resize --src './shots/*.jpg' --dst '${SRC_DIR}/${SRC_NAME}.webp' --max-width 1920
|
||||
```
|
||||
|
||||
**REST / IPC** — same strings in JSON (escape quotes in shell as needed):
|
||||
@ -209,13 +209,13 @@ All **resize** options (`max_width`, `fit`, …) participate in the same JSON bo
|
||||
### `serve` example with cache and glob
|
||||
|
||||
```bash
|
||||
./dist/media-img serve --host 127.0.0.1 -p 8080 --cache-dir /var/cache/media-img
|
||||
pm-image serve --host 127.0.0.1 -p 8080 --cache-dir /var/cache/pm-image
|
||||
```
|
||||
|
||||
```bash
|
||||
curl -s -X POST http://127.0.0.1:8080/v1/resize \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"input":"/data/in/*.jpg","output":"/data/out/","max_width":400,"cache":true,"cache_dir":"/var/cache/media-img"}'
|
||||
-d '{"input":"/data/in/*.jpg","output":"/data/out/","max_width":400,"cache":true,"cache_dir":"/var/cache/pm-image"}'
|
||||
```
|
||||
|
||||
## Concurrency
|
||||
@ -225,33 +225,33 @@ curl -s -X POST http://127.0.0.1:8080/v1/resize \
|
||||
|
||||
## CLI examples
|
||||
|
||||
Paths below use Unix style; on Windows run `dist\media-img.exe` and use `.\` or full paths as needed.
|
||||
Paths below use Unix style; on Windows run `pm-image.exe` and use `.\` or full paths as needed.
|
||||
|
||||
### Help and version
|
||||
|
||||
```bash
|
||||
./dist/media-img --help
|
||||
./dist/media-img resize --help
|
||||
./dist/media-img -v
|
||||
pm-image --help
|
||||
pm-image resize --help
|
||||
pm-image -v
|
||||
```
|
||||
|
||||
### `resize` — fit inside a box (default), write WebP / AVIF by extension
|
||||
|
||||
```bash
|
||||
# Max 800×600, stay inside the box, Lanczos3 (default), write JPEG quality 85 (default)
|
||||
./dist/media-img resize photo.jpg out.jpg --max-width 800 --max-height 600
|
||||
pm-image resize photo.jpg out.jpg --max-width 800 --max-height 600
|
||||
|
||||
# Same, explicit quality
|
||||
./dist/media-img resize photo.jpg out.jpg --max-width 800 --max-height 600 -q 90
|
||||
pm-image resize photo.jpg out.jpg --max-width 800 --max-height 600 -q 90
|
||||
|
||||
# WebP output (quality applies)
|
||||
./dist/media-img resize photo.jpg thumb.webp --max-width 400 --max-height 400 -q 82
|
||||
pm-image resize photo.jpg thumb.webp --max-width 400 --max-height 400 -q 82
|
||||
|
||||
# AVIF output (quality applies; needs HEIF/AVIF support in your libvips build)
|
||||
./dist/media-img resize photo.png out.avif --max-width 1200 --max-height 1200 -q 50
|
||||
pm-image resize photo.png out.avif --max-width 1200 --max-height 1200 -q 50
|
||||
|
||||
# Force output format when the path has no extension you trust
|
||||
./dist/media-img resize in.tif /tmp/out --format webp --max-width 512
|
||||
pm-image resize in.tif /tmp/out --format webp --max-width 512
|
||||
```
|
||||
|
||||
### `resize` — square images (1:1)
|
||||
@ -266,16 +266,16 @@ Use the **same** `--max-width` and `--max-height` (that value is the square side
|
||||
|
||||
```bash
|
||||
# 512×512 crop-to-square (avatars, thumbnails)
|
||||
./dist/media-img resize portrait.jpg avatar.jpg --fit cover --max-width 512 --max-height 512
|
||||
pm-image resize portrait.jpg avatar.jpg --fit cover --max-width 512 --max-height 512
|
||||
|
||||
# 1080×1080 WebP, smart crop on subject
|
||||
./dist/media-img resize product.png grid.webp --fit cover --max-width 1080 --max-height 1080 --position attention -q 85
|
||||
pm-image resize product.png grid.webp --fit cover --max-width 1080 --max-height 1080 --position attention -q 85
|
||||
|
||||
# Square canvas, no crop — padded bands with a colour
|
||||
./dist/media-img resize panoramic.jpg square.jpg --fit contain --max-width 800 --max-height 800 --background '#111111'
|
||||
pm-image resize panoramic.jpg square.jpg --fit contain --max-width 800 --max-height 800 --background '#111111'
|
||||
|
||||
# Exact square by stretching (rare)
|
||||
./dist/media-img resize any.jpg out.jpg --fit fill --max-width 256 --max-height 256
|
||||
pm-image resize any.jpg out.jpg --fit fill --max-width 256 --max-height 256
|
||||
```
|
||||
|
||||
**REST / IPC JSON:** e.g. `"max_width": 512, "max_height": 512, "fit": "cover", "position": "attention"`.
|
||||
@ -284,20 +284,20 @@ Use the **same** `--max-width` and `--max-height` (that value is the square side
|
||||
|
||||
```bash
|
||||
# Cover: fill 1200×630, crop centre (use --position attention for smart crop)
|
||||
./dist/media-img resize wide.jpg social.jpg --fit cover --max-width 1200 --max-height 630
|
||||
pm-image resize wide.jpg social.jpg --fit cover --max-width 1200 --max-height 630
|
||||
|
||||
# Contain: fit inside 800×600 canvas, letterbox with a background
|
||||
./dist/media-img resize logo.png padded.png --fit contain --max-width 800 --max-height 600 --background '#1a1a1a'
|
||||
pm-image resize logo.png padded.png --fit contain --max-width 800 --max-height 600 --background '#1a1a1a'
|
||||
|
||||
# EXIF autorotate (default), then rotate 90° CCW, vertical flip
|
||||
./dist/media-img resize img.jpg rotated.jpg --max-width 1024 --rotate 90 --flip
|
||||
pm-image resize img.jpg rotated.jpg --max-width 1024 --rotate 90 --flip
|
||||
```
|
||||
|
||||
### `serve` — HTTP REST
|
||||
|
||||
```bash
|
||||
# Default: http://127.0.0.1:8080 — GET /health, POST /v1/resize with JSON body
|
||||
./dist/media-img serve --host 127.0.0.1 -p 8080
|
||||
pm-image serve --host 127.0.0.1 -p 8080
|
||||
```
|
||||
|
||||
Example resize request (paths must be readable/writable by the server process):
|
||||
@ -314,7 +314,7 @@ Optional: `"cache":false`, `"expand_glob":false`, `"cache_dir":"..."` — see **
|
||||
### `ipc` — one JSON line per connection (TCP; Unix socket on Linux/macOS)
|
||||
|
||||
```bash
|
||||
./dist/media-img ipc --host 127.0.0.1 -p 9333 --cache-dir ./cache/images
|
||||
pm-image ipc --host 127.0.0.1 -p 9333 --cache-dir ./cache/images
|
||||
# elsewhere: send a single line, read one line back, e.g.
|
||||
# {"input":"/tmp/a.jpg","output":"/tmp/b.webp","max_width":320,"format":"webp","cache":true}
|
||||
```
|
||||
@ -327,7 +327,7 @@ Requires **`KBOT_EXE`** pointing at the kbot executable; remaining args are pass
|
||||
|
||||
```bash
|
||||
export KBOT_EXE=/path/to/kbot # Windows: set KBOT_EXE=C:\path\to\kbot.exe
|
||||
./dist/media-img kbot ai --prompt "hello"
|
||||
pm-image kbot ai --prompt "hello"
|
||||
```
|
||||
|
||||
## Tests
|
||||
@ -336,7 +336,7 @@ export KBOT_EXE=/path/to/kbot # Windows: set KBOT_EXE=C:\path\to\kbot.exe
|
||||
npm run test:media
|
||||
```
|
||||
|
||||
Requires a built `dist/media-img` **linked against libvips** and fixture PNGs (`npm run generate:assets` if missing).
|
||||
Requires a built `dist/pm-image` **linked against libvips** and fixture PNGs (`npm run generate:assets` if missing).
|
||||
|
||||
The suite covers **REST**, **IPC (TCP)**, optional **Unix socket** on non-Windows, **destination templates** (`npm run test:media:templates`), and **recursive glob + `${SRC_DIR}` / `${SRC_NAME}`** (`npm run test:media:glob` — outputs under `tests/assets/glob-in/**/out/`, gitignored, for manual inspection).
|
||||
|
||||
|
||||
290
packages/media/cpp/branding/app-config.json
Normal file
@ -0,0 +1,290 @@
|
||||
{
|
||||
"app": {
|
||||
"name": "Polymech Image Resizer",
|
||||
"context_menu": "PM-Media",
|
||||
"description": "Command line tool to resize images",
|
||||
"url": "https://service.polymech.info/user/cgo/pages/polymech-media-tools",
|
||||
"trailing_slash": false,
|
||||
"favicon": "/branding/logo/web/Favicons/iphone_512.png"
|
||||
},
|
||||
"site": {
|
||||
"title": "Polymech",
|
||||
"base_url": "https://service.polymech.info/",
|
||||
"canonical_url": "https://service.polymech.info/",
|
||||
"description": "Polymech Media Platform",
|
||||
"base_path": "/",
|
||||
"trailing_slash": false,
|
||||
"favicon": "/images/favicon.png",
|
||||
"logo": "/branding/logo/web/Favicons/iphone_512.png",
|
||||
"logo_darkmode": "/images/logo-darkmode.png",
|
||||
"logo_width": "150",
|
||||
"logo_height": "33",
|
||||
"logo_text": "Astrofront",
|
||||
"image": {
|
||||
"default": "/images/default-image.png",
|
||||
"error": "/images/error-image.png",
|
||||
"alt": "Astrofront"
|
||||
}
|
||||
},
|
||||
"i18n": {
|
||||
"store": "${OSR_ROOT}/i18n-store/store-${LANG}.json",
|
||||
"cache": true,
|
||||
"source_language": "en",
|
||||
"asset_path": "${SRC_DIR}/${SRC_NAME}-${DST_LANG}${SRC_EXT}"
|
||||
},
|
||||
"core": {
|
||||
"logging_namespace": "polymech-site",
|
||||
"translate_content": true,
|
||||
"languages": [
|
||||
"en",
|
||||
"de",
|
||||
"es",
|
||||
"it",
|
||||
"fr"
|
||||
],
|
||||
"languages_prod": [
|
||||
"en",
|
||||
"es",
|
||||
"fr",
|
||||
"it",
|
||||
"de"
|
||||
],
|
||||
"rtl_languages": [
|
||||
"ar"
|
||||
],
|
||||
"osr_root": "${OSR_ROOT}"
|
||||
},
|
||||
"footer_left": [
|
||||
{
|
||||
"href": "/user/cgo/pages/about-contact",
|
||||
"text": "Contact"
|
||||
},
|
||||
{
|
||||
"href": "https://forum.polymech.info/",
|
||||
"text": "Forum"
|
||||
},
|
||||
{
|
||||
"href": "https://service.polymech.info/app/filebrowser/machines?mode=thumb",
|
||||
"text": "Files"
|
||||
},
|
||||
{
|
||||
"href": "https://git.polymech.info/explore/repos",
|
||||
"text": "Github"
|
||||
},
|
||||
{
|
||||
"href": "https://discord.gg/A68ChG9hnN",
|
||||
"text": "Discord"
|
||||
},
|
||||
{
|
||||
"href": "https://service.polymech.info/support-chat",
|
||||
"text": "Support Chat (Instant Quotes)"
|
||||
}
|
||||
],
|
||||
"footer_email": [
|
||||
{
|
||||
"href": "https://service.polymech.info/user/3bb4cfbf-318b-44d3-a9d3-35680e738421/pages/about-contact",
|
||||
"text": "Contact"
|
||||
},
|
||||
{
|
||||
"href": "https://forum.polymech.info/",
|
||||
"text": "Forum"
|
||||
},
|
||||
{
|
||||
"href": "https://service.polymech.info/app/filebrowser/machines?mode=thumb",
|
||||
"text": "Files"
|
||||
},
|
||||
{
|
||||
"href": "https://git.polymech.info/explore/repos",
|
||||
"text": "Github"
|
||||
},
|
||||
{
|
||||
"href": "https://discord.gg/A68ChG9hnN",
|
||||
"text": "Discord"
|
||||
},
|
||||
{
|
||||
"href": "https://service.polymech.info/support-chat",
|
||||
"text": "Support Chat (Instant Quotes)"
|
||||
}
|
||||
],
|
||||
"email": {
|
||||
"languages": [
|
||||
"en",
|
||||
"de",
|
||||
"es",
|
||||
"it",
|
||||
"fr"
|
||||
]
|
||||
},
|
||||
"footer_right": [],
|
||||
"settings": {
|
||||
"search": true,
|
||||
"account": true,
|
||||
"sticky_header": true,
|
||||
"theme_switcher": true,
|
||||
"default_theme": "system"
|
||||
},
|
||||
"params": {
|
||||
"contact_form_action": "#",
|
||||
"copyright": "Designed And Developed by [Themefisher](https://themefisher.com/)"
|
||||
},
|
||||
"navigation": {
|
||||
"top": [
|
||||
{
|
||||
"href": "/${LANG}",
|
||||
"text": "Home"
|
||||
},
|
||||
{
|
||||
"href": "https://service.polymech.info/",
|
||||
"text": "Media"
|
||||
},
|
||||
{
|
||||
"href": "https://forum.polymech.info/",
|
||||
"text": "Forum"
|
||||
},
|
||||
{
|
||||
"href": "https://polymech.info/${LANG}/resources",
|
||||
"text": "Resources"
|
||||
}
|
||||
]
|
||||
},
|
||||
"navigation_button": {
|
||||
"enable": true,
|
||||
"label": "Get Started",
|
||||
"link": "https://github.com/themefisher/astrofront"
|
||||
},
|
||||
"ecommerce": {
|
||||
"brand": "Polymech",
|
||||
"currencySymbol": "E",
|
||||
"currencyCode": "EUR"
|
||||
},
|
||||
"impressum": {
|
||||
"company": "Polymech S.L.",
|
||||
"representative": "Guenter Volkmar Baumgart",
|
||||
"address": "Poligono Can Clapers, Carrer Can Peric 11, 1B, 08181 Sentmenat, Barcelona, Spain",
|
||||
"email": "info@polymech.info",
|
||||
"phone": "+34 691 952 287",
|
||||
"vat_id": "ES-Y0100830N",
|
||||
"register": "Registro Mercantil de Barcelona",
|
||||
"responsible_content": "Guenter Volkmar Baumgart (§ 18 Abs. 2 MStV)"
|
||||
},
|
||||
"metadata": {
|
||||
"country": "Spain",
|
||||
"city": "Barcelona",
|
||||
"author": "Polymech",
|
||||
"author_bio": "I am in, if its true",
|
||||
"author_url": "https://service.polymech.info/",
|
||||
"image": "/branding/logo/web/Favicons/iphone_512.png",
|
||||
"description": "Polymech is a plastic prototyping company that offers product design services.",
|
||||
"keywords": "Plastic, Prototyping, Product Design, Opensource"
|
||||
},
|
||||
"shopify": {
|
||||
"currencySymbol": "",
|
||||
"currencyCode": "EU",
|
||||
"collections": {
|
||||
"hero_slider": "hidden-homepage-carousel",
|
||||
"featured_products": "featured-products"
|
||||
}
|
||||
},
|
||||
"pages": {
|
||||
"home": {
|
||||
"hero": "https://assets.polymech.info/machines//assets/newsletter/common/products/extruders/overview-3.jpg",
|
||||
"_blog": {
|
||||
"store": "resources"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dev": {
|
||||
"file_server": "localhost:5000"
|
||||
},
|
||||
"features": {
|
||||
"show_description": false,
|
||||
"show_license": true,
|
||||
"show_renderings": true,
|
||||
"show_tabs": false,
|
||||
"show_gallery": true,
|
||||
"show_files": true,
|
||||
"show_specs": true,
|
||||
"show_checkout": true,
|
||||
"show_contact": true,
|
||||
"show_3d_preview": true,
|
||||
"show_resources": true,
|
||||
"show_debug": false,
|
||||
"show_samples": true,
|
||||
"show_readme": false,
|
||||
"show_related": true,
|
||||
"show_showcase": true,
|
||||
"show_screenshots": true
|
||||
},
|
||||
"retail": {
|
||||
"products": "site-prod",
|
||||
"library_branch": "site-prod",
|
||||
"projects_branch": "projects",
|
||||
"compile_cache": false,
|
||||
"media_cache": true,
|
||||
"log_level_i18n_product_assets": "info",
|
||||
"convert_product_media": true,
|
||||
"translate_product_assets": false,
|
||||
"populate_product_defaults": true
|
||||
},
|
||||
"osrl": {
|
||||
"env": "astro-release",
|
||||
"env_dev": "astro-debug",
|
||||
"module_name": "polymech.io",
|
||||
"lang_flavor": "osr",
|
||||
"product_profile": "./src/app/profile.json"
|
||||
},
|
||||
"products": {
|
||||
"root": "${OSR_ROOT}/products",
|
||||
"howto_migration": "./data/last.json",
|
||||
"glob": "**/config.json",
|
||||
"enabled": "${OSR_ROOT}/products/config/machines.json"
|
||||
},
|
||||
"defaults": {
|
||||
"image_url": "https://picsum.photos/640/640",
|
||||
"license": "CERN Open Source Hardware License",
|
||||
"contact": "sales@plastic-hub.com"
|
||||
},
|
||||
"assets": {
|
||||
"local": false,
|
||||
"glob": "*.+(JPG|jpg|jpeg|png|PNG|gif)",
|
||||
"cad_url": "${OSR_MACHINES_ASSETS_URL}/${file}",
|
||||
"url": "${OSR_MACHINES_ASSETS_URL}/products/${product_rel_min}/${file}",
|
||||
"item_url_r": "${OSR_MACHINES_ASSETS_URL}/${ITEM_REL}/${assetPath}/${filePath}",
|
||||
"item_url": "http://${FILE_SERVER_DEV}/${ITEM_REL}/${assetPath}/${filePath}"
|
||||
},
|
||||
"optimization": {
|
||||
"image_settings": {
|
||||
"gallery": {
|
||||
"show_title": true,
|
||||
"show_description": false,
|
||||
"sizes_thumb": "(min-width: 120px) 120px, 120vw",
|
||||
"sizes_large": "(min-width: 1024px) 1024px, 1024vw",
|
||||
"sizes_regular": "(min-width: 400px) 400px, 400vw"
|
||||
},
|
||||
"lightbox": {
|
||||
"show_title": true,
|
||||
"show_description": true,
|
||||
"sizes_thumb": "(min-width: 120px) 120px, 120vw",
|
||||
"sizes_large": "(min-width: 1024px) 1024px, 1024vw",
|
||||
"sizes_regular": "(min-width: 400px) 400px, 400vw"
|
||||
}
|
||||
},
|
||||
"presets": {
|
||||
"slow": {
|
||||
"sizes_medium": "(min-width: 100px) 100px, 100vw",
|
||||
"sizes_thumbs": "(min-width: 80px) 80px, 80vw",
|
||||
"sizes_large": "(min-width: 320px) 320px, 320vw"
|
||||
},
|
||||
"medium": {
|
||||
"sizes_medium": "(min-width: 400px) 400px, 400vw",
|
||||
"sizes_thumbs": "(min-width: 120px) 120px, 120vw",
|
||||
"sizes_large": "(min-width: 1024px) 1024px, 1024vw"
|
||||
},
|
||||
"fast": {
|
||||
"sizes_medium": "(min-width: 1024px) 1024px, 1024vw",
|
||||
"sizes_thumbs": "(min-width: 180px) 180px, 180vw",
|
||||
"sizes_large": "(min-width: 1200px) 1200px, 1200vw"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,805 @@
|
||||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
|
||||
%%Creator: Chromium
|
||||
%%LanguageLevel: 3
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%BoundingBox: 0 0 2372 634
|
||||
%%HiResBoundingBox: 0 0 2371.9199 633.12
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
%%BeginResource: procset xpdf 3.00 0
|
||||
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
|
||||
/xpdf 75 dict def xpdf begin
|
||||
% PDF special state
|
||||
/pdfDictSize 15 def
|
||||
/pdfSetup {
|
||||
/setpagedevice where {
|
||||
pop 2 dict begin
|
||||
/Policies 1 dict dup begin /PageSize 6 def end def
|
||||
{ /Duplex true def } if
|
||||
currentdict end setpagedevice
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfSetupPaper {
|
||||
% Change paper size, but only if different from previous paper size otherwise
|
||||
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
|
||||
% so we use the same when checking if the size changes.
|
||||
/setpagedevice where {
|
||||
pop currentpagedevice
|
||||
/PageSize known {
|
||||
2 copy
|
||||
currentpagedevice /PageSize get aload pop
|
||||
exch 4 1 roll
|
||||
sub abs 5 gt
|
||||
3 1 roll
|
||||
sub abs 5 gt
|
||||
or
|
||||
} {
|
||||
true
|
||||
} ifelse
|
||||
{
|
||||
2 array astore
|
||||
2 dict begin
|
||||
/PageSize exch def
|
||||
/ImagingBBox null def
|
||||
currentdict end
|
||||
setpagedevice
|
||||
} {
|
||||
pop pop
|
||||
} ifelse
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfStartPage {
|
||||
pdfDictSize dict begin
|
||||
/pdfFillCS [] def
|
||||
/pdfFillXform {} def
|
||||
/pdfStrokeCS [] def
|
||||
/pdfStrokeXform {} def
|
||||
/pdfFill [0] def
|
||||
/pdfStroke [0] def
|
||||
/pdfFillOP false def
|
||||
/pdfStrokeOP false def
|
||||
/pdfOPM false def
|
||||
/pdfLastFill false def
|
||||
/pdfLastStroke false def
|
||||
/pdfTextMat [1 0 0 1 0 0] def
|
||||
/pdfFontSize 0 def
|
||||
/pdfCharSpacing 0 def
|
||||
/pdfTextRender 0 def
|
||||
/pdfPatternCS false def
|
||||
/pdfTextRise 0 def
|
||||
/pdfWordSpacing 0 def
|
||||
/pdfHorizScaling 1 def
|
||||
/pdfTextClipPath [] def
|
||||
} def
|
||||
/pdfEndPage { end } def
|
||||
% PDF color state
|
||||
/opm { dup /pdfOPM exch def
|
||||
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
|
||||
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
|
||||
setcolorspace } def
|
||||
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
|
||||
setcolorspace } def
|
||||
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
|
||||
dup /pdfFill exch def aload pop pdfFillXform setcolor
|
||||
/pdfLastFill true def /pdfLastStroke false def } def
|
||||
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
|
||||
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
|
||||
/pdfLastStroke true def /pdfLastFill false def } def
|
||||
/op { /pdfFillOP exch def
|
||||
pdfLastFill { pdfFillOP setoverprint } if } def
|
||||
/OP { /pdfStrokeOP exch def
|
||||
pdfLastStroke { pdfStrokeOP setoverprint } if } def
|
||||
/fCol {
|
||||
pdfLastFill not {
|
||||
pdfFillCS setcolorspace
|
||||
pdfFill aload pop pdfFillXform setcolor
|
||||
pdfFillOP setoverprint
|
||||
/pdfLastFill true def /pdfLastStroke false def
|
||||
} if
|
||||
} def
|
||||
/sCol {
|
||||
pdfLastStroke not {
|
||||
pdfStrokeCS setcolorspace
|
||||
pdfStroke aload pop pdfStrokeXform setcolor
|
||||
pdfStrokeOP setoverprint
|
||||
/pdfLastStroke true def /pdfLastFill false def
|
||||
} if
|
||||
} def
|
||||
% build a font
|
||||
/pdfMakeFont {
|
||||
4 3 roll findfont
|
||||
4 2 roll matrix scale makefont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/Encoding exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16 {
|
||||
exch findfont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/WMode exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16L3 {
|
||||
1 index /CIDFont resourcestatus {
|
||||
pop pop 1 index /CIDFont findresource /CIDFontType known
|
||||
} {
|
||||
false
|
||||
} ifelse
|
||||
{
|
||||
0 eq { /Identity-H } { /Identity-V } ifelse
|
||||
exch 1 array astore composefont pop
|
||||
} {
|
||||
pdfMakeFont16
|
||||
} ifelse
|
||||
} def
|
||||
% graphics state operators
|
||||
/q { gsave pdfDictSize dict begin } def
|
||||
/Q {
|
||||
end grestore
|
||||
/pdfLastFill where {
|
||||
pop
|
||||
pdfLastFill {
|
||||
pdfFillOP setoverprint
|
||||
} {
|
||||
pdfStrokeOP setoverprint
|
||||
} ifelse
|
||||
} if
|
||||
/pdfOPM where {
|
||||
pop
|
||||
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
|
||||
} if
|
||||
} def
|
||||
/cm { concat } def
|
||||
/d { setdash } def
|
||||
/i { setflat } def
|
||||
/j { setlinejoin } def
|
||||
/J { setlinecap } def
|
||||
/M { setmiterlimit } def
|
||||
/w { setlinewidth } def
|
||||
% path segment operators
|
||||
/m { moveto } def
|
||||
/l { lineto } def
|
||||
/c { curveto } def
|
||||
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
|
||||
neg 0 rlineto closepath } def
|
||||
/h { closepath } def
|
||||
% path painting operators
|
||||
/S { sCol stroke } def
|
||||
/Sf { fCol stroke } def
|
||||
/f { fCol fill } def
|
||||
/f* { fCol eofill } def
|
||||
% clipping operators
|
||||
/W { clip newpath } def
|
||||
/W* { eoclip newpath } def
|
||||
/Ws { strokepath clip newpath } def
|
||||
% text state operators
|
||||
/Tc { /pdfCharSpacing exch def } def
|
||||
/Tf { dup /pdfFontSize exch def
|
||||
dup pdfHorizScaling mul exch matrix scale
|
||||
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
|
||||
exch findfont exch makefont setfont } def
|
||||
/Tr { /pdfTextRender exch def } def
|
||||
/Tp { /pdfPatternCS exch def } def
|
||||
/Ts { /pdfTextRise exch def } def
|
||||
/Tw { /pdfWordSpacing exch def } def
|
||||
/Tz { /pdfHorizScaling exch def } def
|
||||
% text positioning operators
|
||||
/Td { pdfTextMat transform moveto } def
|
||||
/Tm { /pdfTextMat exch def } def
|
||||
% text string operators
|
||||
/xyshow where {
|
||||
pop
|
||||
/xyshow2 {
|
||||
dup length array
|
||||
0 2 2 index length 1 sub {
|
||||
2 index 1 index 2 copy get 3 1 roll 1 add get
|
||||
pdfTextMat dtransform
|
||||
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
|
||||
} for
|
||||
exch pop
|
||||
xyshow
|
||||
} def
|
||||
}{
|
||||
/xyshow2 {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval show moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval show moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/cshow where {
|
||||
pop
|
||||
/xycp {
|
||||
0 3 2 roll
|
||||
{
|
||||
pop pop currentpoint 3 2 roll
|
||||
1 string dup 0 4 3 roll put false charpath moveto
|
||||
2 copy get 2 index 2 index 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
2 add
|
||||
} exch cshow
|
||||
pop pop
|
||||
} def
|
||||
}{
|
||||
/xycp {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval false charpath moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval false charpath moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/Tj {
|
||||
fCol
|
||||
0 pdfTextRise pdfTextMat dtransform rmoveto
|
||||
currentpoint 4 2 roll
|
||||
pdfTextRender 1 and 0 eq {
|
||||
2 copy xyshow2
|
||||
} if
|
||||
pdfTextRender 3 and dup 1 eq exch 2 eq or {
|
||||
3 index 3 index moveto
|
||||
2 copy
|
||||
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
|
||||
xycp currentpoint stroke moveto
|
||||
} if
|
||||
pdfTextRender 4 and 0 ne {
|
||||
4 2 roll moveto xycp
|
||||
/pdfTextClipPath [ pdfTextClipPath aload pop
|
||||
{/moveto cvx}
|
||||
{/lineto cvx}
|
||||
{/curveto cvx}
|
||||
{/closepath cvx}
|
||||
pathforall ] def
|
||||
currentpoint newpath moveto
|
||||
} {
|
||||
pop pop pop pop
|
||||
} ifelse
|
||||
0 pdfTextRise neg pdfTextMat dtransform rmoveto
|
||||
} def
|
||||
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/Tclip { pdfTextClipPath cvx exec clip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
% Level 2/3 image operators
|
||||
/pdfImBuf 100 string def
|
||||
/pdfImStr {
|
||||
2 copy exch length lt {
|
||||
2 copy get exch 1 add exch
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/skipEOD {
|
||||
{ currentfile pdfImBuf readline
|
||||
not { pop exit } if
|
||||
(%-EOD-) eq { exit } if } loop
|
||||
} def
|
||||
/pdfIm { image skipEOD } def
|
||||
/pdfMask {
|
||||
/ReusableStreamDecode filter
|
||||
skipEOD
|
||||
/maskStream exch def
|
||||
} def
|
||||
/pdfMaskEnd { maskStream closefile } def
|
||||
/pdfMaskInit {
|
||||
/maskArray exch def
|
||||
/maskIdx 0 def
|
||||
} def
|
||||
/pdfMaskSrc {
|
||||
maskIdx maskArray length lt {
|
||||
maskArray maskIdx get
|
||||
/maskIdx maskIdx 1 add def
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/pdfImM { fCol imagemask skipEOD } def
|
||||
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
|
||||
/pdfImClip {
|
||||
gsave
|
||||
0 2 4 index length 1 sub {
|
||||
dup 4 index exch 2 copy
|
||||
get 5 index div put
|
||||
1 add 3 index exch 2 copy
|
||||
get 3 index div put
|
||||
} for
|
||||
pop pop rectclip
|
||||
} def
|
||||
/pdfImClipEnd { grestore } def
|
||||
% shading operators
|
||||
/colordelta {
|
||||
false 0 1 3 index length 1 sub {
|
||||
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
|
||||
pop true
|
||||
} if
|
||||
} for
|
||||
exch pop exch pop
|
||||
} def
|
||||
/funcCol { func n array astore } def
|
||||
/funcSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 6 eq {
|
||||
false
|
||||
} {
|
||||
4 index 4 index funcCol dup
|
||||
6 index 4 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
5 index 5 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
6 index 8 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
colordelta or or or
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add
|
||||
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
|
||||
6 index 6 index 4 index 4 index 4 index funcSH
|
||||
2 index 6 index 6 index 4 index 4 index funcSH
|
||||
6 index 2 index 4 index 6 index 4 index funcSH
|
||||
5 3 roll 3 2 roll funcSH pop pop
|
||||
} {
|
||||
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
|
||||
funcCol sc
|
||||
dup 4 index exch mat transform m
|
||||
3 index 3 index mat transform l
|
||||
1 index 3 index mat transform l
|
||||
mat transform l pop pop h f*
|
||||
} ifelse
|
||||
} def
|
||||
/axialCol {
|
||||
dup 0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup 1 gt {
|
||||
pop t1
|
||||
} {
|
||||
dt mul t0 add
|
||||
} ifelse
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/axialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index axialCol 2 index axialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index axialSH
|
||||
exch 3 2 roll axialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul
|
||||
axialCol sc
|
||||
exch dup dx mul x0 add exch dy mul y0 add
|
||||
3 2 roll dup dx mul x0 add exch dy mul y0 add
|
||||
dx abs dy abs ge {
|
||||
2 copy yMin sub dy mul dx div add yMin m
|
||||
yMax sub dy mul dx div add yMax l
|
||||
2 copy yMax sub dy mul dx div add yMax l
|
||||
yMin sub dy mul dx div add yMin l
|
||||
h f*
|
||||
} {
|
||||
exch 2 copy xMin sub dx mul dy div add xMin exch m
|
||||
xMax sub dx mul dy div add xMax exch l
|
||||
exch 2 copy xMax sub dx mul dy div add xMax exch l
|
||||
xMin sub dx mul dy div add xMin exch l
|
||||
h f*
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
/radialCol {
|
||||
dup t0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup t1 gt {
|
||||
pop t1
|
||||
} if
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/radialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index dt mul t0 add radialCol
|
||||
2 index dt mul t0 add radialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index radialSH
|
||||
exch 3 2 roll radialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul dt mul t0 add
|
||||
radialCol sc
|
||||
encl {
|
||||
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
0 360 arc h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
360 0 arcn h f
|
||||
} {
|
||||
2 copy
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arcn
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arcn h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arc
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arc h f
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
end
|
||||
%%EndResource
|
||||
/CIDInit /ProcSet findresource begin
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-H def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-V def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
/WMode 1 def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
end
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
xpdf begin
|
||||
%%EndSetup
|
||||
pdfStartPage
|
||||
%%EndPageSetup
|
||||
[] 0 d
|
||||
1 i
|
||||
0 j
|
||||
0 J
|
||||
10 M
|
||||
1 w
|
||||
/DeviceGray {} cs
|
||||
[0] sc
|
||||
/DeviceGray {} CS
|
||||
[0] SC
|
||||
false op
|
||||
false OP
|
||||
{} settransfer
|
||||
0 0 2371.9199 633.12 re
|
||||
W
|
||||
q
|
||||
[0.24 0 0 -0.24 0 633.12] cm
|
||||
q
|
||||
0 0 9883.333 2634.9304 re
|
||||
W*
|
||||
q
|
||||
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
|
||||
/DeviceRGB {} CS
|
||||
[0.9725 0.7098 0] SC
|
||||
/DeviceRGB {} cs
|
||||
[0.9725 0.7098 0] sc
|
||||
1313.30005 1890.9 m
|
||||
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
|
||||
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
|
||||
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
|
||||
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
|
||||
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
|
||||
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
|
||||
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
|
||||
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
|
||||
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
|
||||
1201.19995 1579.30005 l
|
||||
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
|
||||
h
|
||||
f
|
||||
1472.19995 1127.30005 m
|
||||
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
|
||||
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
|
||||
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
|
||||
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
|
||||
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
|
||||
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
|
||||
h
|
||||
1241.59998 1248.90002 m
|
||||
1275.09998 1251.70007 l
|
||||
1279 1252.00012 l
|
||||
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
|
||||
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
|
||||
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
|
||||
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
|
||||
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
|
||||
h
|
||||
f
|
||||
Q
|
||||
q
|
||||
[76.117943 0 0 76.100548 2395.657 642.07141] cm
|
||||
6.9 5.84 m
|
||||
8.2733 5.84 9.3566 6.18 10.15 6.86 c
|
||||
10.943399 7.54 11.34 8.520001 11.34 9.8 c
|
||||
11.34 11.04 10.94666 12.01 10.16 12.71 c
|
||||
9.37334 13.41 8.286699 13.76 6.9 13.76 c
|
||||
3.74 13.76 l
|
||||
3.74 20 l
|
||||
1.819999 20 l
|
||||
1.819999 5.84 l
|
||||
6.9 5.84 l
|
||||
6.9 5.84 l
|
||||
h
|
||||
6.34 12.08 m
|
||||
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
|
||||
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
|
||||
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
|
||||
3.739999 7.51998 l
|
||||
3.739999 12.079981 l
|
||||
6.339999 12.079981 l
|
||||
6.34 12.08 l
|
||||
h
|
||||
15.16 4.88 m
|
||||
15.16 20 l
|
||||
13.36 20 l
|
||||
13.36 4.88 l
|
||||
15.16 4.88 l
|
||||
h
|
||||
21.82 10.28 m
|
||||
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
|
||||
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
|
||||
25.780001 18.459938 l
|
||||
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
|
||||
24.26 19.999939 l
|
||||
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
|
||||
24.16 18.559938 l
|
||||
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
|
||||
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
|
||||
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
|
||||
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
|
||||
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
|
||||
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
|
||||
24.100002 14.119937 l
|
||||
24.100002 13.779937 l
|
||||
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
|
||||
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
|
||||
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
|
||||
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
|
||||
18.060003 11.679956 l
|
||||
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
|
||||
21.82 10.28 l
|
||||
h
|
||||
19.360001 17.26 m
|
||||
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
|
||||
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
|
||||
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
|
||||
24.100002 15.440001 l
|
||||
23.080002 15.440001 l
|
||||
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
|
||||
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
|
||||
19.360001 17.26 l
|
||||
h
|
||||
31.6 10.28 m
|
||||
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
|
||||
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
|
||||
33.439999 12.90004 l
|
||||
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
|
||||
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
|
||||
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
|
||||
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
|
||||
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
|
||||
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
|
||||
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
|
||||
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
|
||||
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
|
||||
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
|
||||
28.960001 17.440037 l
|
||||
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
|
||||
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
|
||||
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
|
||||
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
|
||||
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
|
||||
28.23 14.483337 28 13.906717 28 13.200018 c
|
||||
28 12.320018 28.34 11.616718 29.02 11.090018 c
|
||||
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
|
||||
31.6 10.28 l
|
||||
h
|
||||
39.779999 7.86 m
|
||||
39.77998 10.520001 l
|
||||
42.359978 10.520001 l
|
||||
42.359978 12.08 l
|
||||
39.779976 12.08 l
|
||||
39.779976 16.639999 l
|
||||
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
|
||||
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
|
||||
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
|
||||
42.419971 19.919998 l
|
||||
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
|
||||
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
|
||||
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
|
||||
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
|
||||
37.979969 12.079979 l
|
||||
35.899971 12.079979 l
|
||||
35.899971 10.51998 l
|
||||
37.979973 10.51998 l
|
||||
37.979973 7.85998 l
|
||||
39.779972 7.85998 l
|
||||
39.779999 7.86 l
|
||||
h
|
||||
45.740002 5.8 m
|
||||
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
|
||||
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
|
||||
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
|
||||
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
|
||||
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
|
||||
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
|
||||
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
|
||||
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
|
||||
45.740002 5.8 l
|
||||
h
|
||||
46.639999 10.520001 m
|
||||
46.639999 20 l
|
||||
44.84 20 l
|
||||
44.84 10.520001 l
|
||||
46.639999 10.520001 l
|
||||
h
|
||||
54 10.3 m
|
||||
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
|
||||
56.279999 13.04 l
|
||||
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
|
||||
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
|
||||
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
|
||||
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
|
||||
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
|
||||
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
|
||||
57.599998 18.780001 l
|
||||
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
|
||||
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
|
||||
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
|
||||
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
|
||||
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
|
||||
54 10.3 l
|
||||
h
|
||||
61.52 5.84 m
|
||||
61.52 11.72 l
|
||||
68.860001 11.72 l
|
||||
68.860001 5.84 l
|
||||
70.779999 5.84 l
|
||||
70.779999 20 l
|
||||
68.860001 20 l
|
||||
68.860001 13.520001 l
|
||||
61.52 13.520001 l
|
||||
61.52 20 l
|
||||
59.599998 20 l
|
||||
59.599998 5.84 l
|
||||
61.519997 5.84 l
|
||||
61.52 5.84 l
|
||||
h
|
||||
75.760002 10.520001 m
|
||||
75.760002 16.200001 l
|
||||
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
|
||||
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
|
||||
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
|
||||
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
|
||||
80.559998 10.520001 l
|
||||
82.360001 10.520001 l
|
||||
82.360001 20 l
|
||||
80.559998 20 l
|
||||
80.559998 18.540001 l
|
||||
80.519997 18.540001 l
|
||||
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
|
||||
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
|
||||
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
|
||||
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
|
||||
73.959999 10.520002 l
|
||||
75.760002 10.520002 l
|
||||
75.760002 10.520001 l
|
||||
h
|
||||
86.879997 4.88 m
|
||||
86.88002 11.88 l
|
||||
86.920021 11.88 l
|
||||
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
|
||||
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
|
||||
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
|
||||
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
|
||||
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
|
||||
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
|
||||
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
|
||||
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
|
||||
86.880028 18.639999 l
|
||||
86.880028 20 l
|
||||
85.080025 20 l
|
||||
85.080025 4.88 l
|
||||
86.880028 4.88 l
|
||||
86.879997 4.88 l
|
||||
h
|
||||
86.879997 15.26 m
|
||||
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
|
||||
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
|
||||
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
|
||||
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
|
||||
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
|
||||
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
|
||||
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
|
||||
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
|
||||
86.879997 15.26 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
Q
|
||||
Q
|
||||
showpage
|
||||
%%PageTrailer
|
||||
pdfEndPage
|
||||
%%Trailer
|
||||
end
|
||||
%%DocumentSuppliedResources:
|
||||
%%EOF
|
||||
@ -0,0 +1,809 @@
|
||||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
|
||||
%%Creator: Chromium
|
||||
%%LanguageLevel: 3
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%BoundingBox: 0 0 2372 634
|
||||
%%HiResBoundingBox: 0 0 2371.9199 633.12
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
%%BeginResource: procset xpdf 3.00 0
|
||||
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
|
||||
/xpdf 75 dict def xpdf begin
|
||||
% PDF special state
|
||||
/pdfDictSize 15 def
|
||||
/pdfSetup {
|
||||
/setpagedevice where {
|
||||
pop 2 dict begin
|
||||
/Policies 1 dict dup begin /PageSize 6 def end def
|
||||
{ /Duplex true def } if
|
||||
currentdict end setpagedevice
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfSetupPaper {
|
||||
% Change paper size, but only if different from previous paper size otherwise
|
||||
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
|
||||
% so we use the same when checking if the size changes.
|
||||
/setpagedevice where {
|
||||
pop currentpagedevice
|
||||
/PageSize known {
|
||||
2 copy
|
||||
currentpagedevice /PageSize get aload pop
|
||||
exch 4 1 roll
|
||||
sub abs 5 gt
|
||||
3 1 roll
|
||||
sub abs 5 gt
|
||||
or
|
||||
} {
|
||||
true
|
||||
} ifelse
|
||||
{
|
||||
2 array astore
|
||||
2 dict begin
|
||||
/PageSize exch def
|
||||
/ImagingBBox null def
|
||||
currentdict end
|
||||
setpagedevice
|
||||
} {
|
||||
pop pop
|
||||
} ifelse
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfStartPage {
|
||||
pdfDictSize dict begin
|
||||
/pdfFillCS [] def
|
||||
/pdfFillXform {} def
|
||||
/pdfStrokeCS [] def
|
||||
/pdfStrokeXform {} def
|
||||
/pdfFill [0] def
|
||||
/pdfStroke [0] def
|
||||
/pdfFillOP false def
|
||||
/pdfStrokeOP false def
|
||||
/pdfOPM false def
|
||||
/pdfLastFill false def
|
||||
/pdfLastStroke false def
|
||||
/pdfTextMat [1 0 0 1 0 0] def
|
||||
/pdfFontSize 0 def
|
||||
/pdfCharSpacing 0 def
|
||||
/pdfTextRender 0 def
|
||||
/pdfPatternCS false def
|
||||
/pdfTextRise 0 def
|
||||
/pdfWordSpacing 0 def
|
||||
/pdfHorizScaling 1 def
|
||||
/pdfTextClipPath [] def
|
||||
} def
|
||||
/pdfEndPage { end } def
|
||||
% PDF color state
|
||||
/opm { dup /pdfOPM exch def
|
||||
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
|
||||
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
|
||||
setcolorspace } def
|
||||
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
|
||||
setcolorspace } def
|
||||
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
|
||||
dup /pdfFill exch def aload pop pdfFillXform setcolor
|
||||
/pdfLastFill true def /pdfLastStroke false def } def
|
||||
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
|
||||
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
|
||||
/pdfLastStroke true def /pdfLastFill false def } def
|
||||
/op { /pdfFillOP exch def
|
||||
pdfLastFill { pdfFillOP setoverprint } if } def
|
||||
/OP { /pdfStrokeOP exch def
|
||||
pdfLastStroke { pdfStrokeOP setoverprint } if } def
|
||||
/fCol {
|
||||
pdfLastFill not {
|
||||
pdfFillCS setcolorspace
|
||||
pdfFill aload pop pdfFillXform setcolor
|
||||
pdfFillOP setoverprint
|
||||
/pdfLastFill true def /pdfLastStroke false def
|
||||
} if
|
||||
} def
|
||||
/sCol {
|
||||
pdfLastStroke not {
|
||||
pdfStrokeCS setcolorspace
|
||||
pdfStroke aload pop pdfStrokeXform setcolor
|
||||
pdfStrokeOP setoverprint
|
||||
/pdfLastStroke true def /pdfLastFill false def
|
||||
} if
|
||||
} def
|
||||
% build a font
|
||||
/pdfMakeFont {
|
||||
4 3 roll findfont
|
||||
4 2 roll matrix scale makefont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/Encoding exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16 {
|
||||
exch findfont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/WMode exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16L3 {
|
||||
1 index /CIDFont resourcestatus {
|
||||
pop pop 1 index /CIDFont findresource /CIDFontType known
|
||||
} {
|
||||
false
|
||||
} ifelse
|
||||
{
|
||||
0 eq { /Identity-H } { /Identity-V } ifelse
|
||||
exch 1 array astore composefont pop
|
||||
} {
|
||||
pdfMakeFont16
|
||||
} ifelse
|
||||
} def
|
||||
% graphics state operators
|
||||
/q { gsave pdfDictSize dict begin } def
|
||||
/Q {
|
||||
end grestore
|
||||
/pdfLastFill where {
|
||||
pop
|
||||
pdfLastFill {
|
||||
pdfFillOP setoverprint
|
||||
} {
|
||||
pdfStrokeOP setoverprint
|
||||
} ifelse
|
||||
} if
|
||||
/pdfOPM where {
|
||||
pop
|
||||
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
|
||||
} if
|
||||
} def
|
||||
/cm { concat } def
|
||||
/d { setdash } def
|
||||
/i { setflat } def
|
||||
/j { setlinejoin } def
|
||||
/J { setlinecap } def
|
||||
/M { setmiterlimit } def
|
||||
/w { setlinewidth } def
|
||||
% path segment operators
|
||||
/m { moveto } def
|
||||
/l { lineto } def
|
||||
/c { curveto } def
|
||||
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
|
||||
neg 0 rlineto closepath } def
|
||||
/h { closepath } def
|
||||
% path painting operators
|
||||
/S { sCol stroke } def
|
||||
/Sf { fCol stroke } def
|
||||
/f { fCol fill } def
|
||||
/f* { fCol eofill } def
|
||||
% clipping operators
|
||||
/W { clip newpath } def
|
||||
/W* { eoclip newpath } def
|
||||
/Ws { strokepath clip newpath } def
|
||||
% text state operators
|
||||
/Tc { /pdfCharSpacing exch def } def
|
||||
/Tf { dup /pdfFontSize exch def
|
||||
dup pdfHorizScaling mul exch matrix scale
|
||||
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
|
||||
exch findfont exch makefont setfont } def
|
||||
/Tr { /pdfTextRender exch def } def
|
||||
/Tp { /pdfPatternCS exch def } def
|
||||
/Ts { /pdfTextRise exch def } def
|
||||
/Tw { /pdfWordSpacing exch def } def
|
||||
/Tz { /pdfHorizScaling exch def } def
|
||||
% text positioning operators
|
||||
/Td { pdfTextMat transform moveto } def
|
||||
/Tm { /pdfTextMat exch def } def
|
||||
% text string operators
|
||||
/xyshow where {
|
||||
pop
|
||||
/xyshow2 {
|
||||
dup length array
|
||||
0 2 2 index length 1 sub {
|
||||
2 index 1 index 2 copy get 3 1 roll 1 add get
|
||||
pdfTextMat dtransform
|
||||
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
|
||||
} for
|
||||
exch pop
|
||||
xyshow
|
||||
} def
|
||||
}{
|
||||
/xyshow2 {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval show moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval show moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/cshow where {
|
||||
pop
|
||||
/xycp {
|
||||
0 3 2 roll
|
||||
{
|
||||
pop pop currentpoint 3 2 roll
|
||||
1 string dup 0 4 3 roll put false charpath moveto
|
||||
2 copy get 2 index 2 index 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
2 add
|
||||
} exch cshow
|
||||
pop pop
|
||||
} def
|
||||
}{
|
||||
/xycp {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval false charpath moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval false charpath moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/Tj {
|
||||
fCol
|
||||
0 pdfTextRise pdfTextMat dtransform rmoveto
|
||||
currentpoint 4 2 roll
|
||||
pdfTextRender 1 and 0 eq {
|
||||
2 copy xyshow2
|
||||
} if
|
||||
pdfTextRender 3 and dup 1 eq exch 2 eq or {
|
||||
3 index 3 index moveto
|
||||
2 copy
|
||||
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
|
||||
xycp currentpoint stroke moveto
|
||||
} if
|
||||
pdfTextRender 4 and 0 ne {
|
||||
4 2 roll moveto xycp
|
||||
/pdfTextClipPath [ pdfTextClipPath aload pop
|
||||
{/moveto cvx}
|
||||
{/lineto cvx}
|
||||
{/curveto cvx}
|
||||
{/closepath cvx}
|
||||
pathforall ] def
|
||||
currentpoint newpath moveto
|
||||
} {
|
||||
pop pop pop pop
|
||||
} ifelse
|
||||
0 pdfTextRise neg pdfTextMat dtransform rmoveto
|
||||
} def
|
||||
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/Tclip { pdfTextClipPath cvx exec clip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
% Level 2/3 image operators
|
||||
/pdfImBuf 100 string def
|
||||
/pdfImStr {
|
||||
2 copy exch length lt {
|
||||
2 copy get exch 1 add exch
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/skipEOD {
|
||||
{ currentfile pdfImBuf readline
|
||||
not { pop exit } if
|
||||
(%-EOD-) eq { exit } if } loop
|
||||
} def
|
||||
/pdfIm { image skipEOD } def
|
||||
/pdfMask {
|
||||
/ReusableStreamDecode filter
|
||||
skipEOD
|
||||
/maskStream exch def
|
||||
} def
|
||||
/pdfMaskEnd { maskStream closefile } def
|
||||
/pdfMaskInit {
|
||||
/maskArray exch def
|
||||
/maskIdx 0 def
|
||||
} def
|
||||
/pdfMaskSrc {
|
||||
maskIdx maskArray length lt {
|
||||
maskArray maskIdx get
|
||||
/maskIdx maskIdx 1 add def
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/pdfImM { fCol imagemask skipEOD } def
|
||||
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
|
||||
/pdfImClip {
|
||||
gsave
|
||||
0 2 4 index length 1 sub {
|
||||
dup 4 index exch 2 copy
|
||||
get 5 index div put
|
||||
1 add 3 index exch 2 copy
|
||||
get 3 index div put
|
||||
} for
|
||||
pop pop rectclip
|
||||
} def
|
||||
/pdfImClipEnd { grestore } def
|
||||
% shading operators
|
||||
/colordelta {
|
||||
false 0 1 3 index length 1 sub {
|
||||
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
|
||||
pop true
|
||||
} if
|
||||
} for
|
||||
exch pop exch pop
|
||||
} def
|
||||
/funcCol { func n array astore } def
|
||||
/funcSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 6 eq {
|
||||
false
|
||||
} {
|
||||
4 index 4 index funcCol dup
|
||||
6 index 4 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
5 index 5 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
6 index 8 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
colordelta or or or
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add
|
||||
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
|
||||
6 index 6 index 4 index 4 index 4 index funcSH
|
||||
2 index 6 index 6 index 4 index 4 index funcSH
|
||||
6 index 2 index 4 index 6 index 4 index funcSH
|
||||
5 3 roll 3 2 roll funcSH pop pop
|
||||
} {
|
||||
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
|
||||
funcCol sc
|
||||
dup 4 index exch mat transform m
|
||||
3 index 3 index mat transform l
|
||||
1 index 3 index mat transform l
|
||||
mat transform l pop pop h f*
|
||||
} ifelse
|
||||
} def
|
||||
/axialCol {
|
||||
dup 0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup 1 gt {
|
||||
pop t1
|
||||
} {
|
||||
dt mul t0 add
|
||||
} ifelse
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/axialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index axialCol 2 index axialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index axialSH
|
||||
exch 3 2 roll axialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul
|
||||
axialCol sc
|
||||
exch dup dx mul x0 add exch dy mul y0 add
|
||||
3 2 roll dup dx mul x0 add exch dy mul y0 add
|
||||
dx abs dy abs ge {
|
||||
2 copy yMin sub dy mul dx div add yMin m
|
||||
yMax sub dy mul dx div add yMax l
|
||||
2 copy yMax sub dy mul dx div add yMax l
|
||||
yMin sub dy mul dx div add yMin l
|
||||
h f*
|
||||
} {
|
||||
exch 2 copy xMin sub dx mul dy div add xMin exch m
|
||||
xMax sub dx mul dy div add xMax exch l
|
||||
exch 2 copy xMax sub dx mul dy div add xMax exch l
|
||||
xMin sub dx mul dy div add xMin exch l
|
||||
h f*
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
/radialCol {
|
||||
dup t0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup t1 gt {
|
||||
pop t1
|
||||
} if
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/radialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index dt mul t0 add radialCol
|
||||
2 index dt mul t0 add radialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index radialSH
|
||||
exch 3 2 roll radialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul dt mul t0 add
|
||||
radialCol sc
|
||||
encl {
|
||||
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
0 360 arc h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
360 0 arcn h f
|
||||
} {
|
||||
2 copy
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arcn
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arcn h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arc
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arc h f
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
end
|
||||
%%EndResource
|
||||
/CIDInit /ProcSet findresource begin
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-H def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-V def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
/WMode 1 def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
end
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
xpdf begin
|
||||
%%EndSetup
|
||||
pdfStartPage
|
||||
%%EndPageSetup
|
||||
[] 0 d
|
||||
1 i
|
||||
0 j
|
||||
0 J
|
||||
10 M
|
||||
1 w
|
||||
/DeviceGray {} cs
|
||||
[0] sc
|
||||
/DeviceGray {} CS
|
||||
[0] SC
|
||||
false op
|
||||
false OP
|
||||
{} settransfer
|
||||
0 0 2371.9199 633.12 re
|
||||
W
|
||||
q
|
||||
[0.24 0 0 -0.24 0 633.12] cm
|
||||
q
|
||||
0 0 9883.333 2634.9304 re
|
||||
W*
|
||||
q
|
||||
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
|
||||
/DeviceRGB {} CS
|
||||
[0.9725 0.7098 0] SC
|
||||
/DeviceRGB {} cs
|
||||
[0.9725 0.7098 0] sc
|
||||
1313.30005 1890.9 m
|
||||
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
|
||||
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
|
||||
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
|
||||
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
|
||||
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
|
||||
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
|
||||
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
|
||||
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
|
||||
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
|
||||
1201.19995 1579.30005 l
|
||||
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
|
||||
h
|
||||
f
|
||||
1472.19995 1127.30005 m
|
||||
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
|
||||
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
|
||||
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
|
||||
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
|
||||
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
|
||||
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
|
||||
h
|
||||
1241.59998 1248.90002 m
|
||||
1275.09998 1251.70007 l
|
||||
1279 1252.00012 l
|
||||
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
|
||||
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
|
||||
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
|
||||
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
|
||||
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
|
||||
h
|
||||
f
|
||||
Q
|
||||
q
|
||||
[76.117943 0 0 76.100548 2395.657 642.07141] cm
|
||||
/DeviceRGB {} CS
|
||||
[0.2235 0.2431 0.2745] SC
|
||||
/DeviceRGB {} cs
|
||||
[0.2235 0.2431 0.2745] sc
|
||||
6.9 5.84 m
|
||||
8.2733 5.84 9.3566 6.18 10.15 6.86 c
|
||||
10.943399 7.54 11.34 8.520001 11.34 9.8 c
|
||||
11.34 11.04 10.94666 12.01 10.16 12.71 c
|
||||
9.37334 13.41 8.286699 13.76 6.9 13.76 c
|
||||
3.74 13.76 l
|
||||
3.74 20 l
|
||||
1.819999 20 l
|
||||
1.819999 5.84 l
|
||||
6.9 5.84 l
|
||||
6.9 5.84 l
|
||||
h
|
||||
6.34 12.08 m
|
||||
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
|
||||
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
|
||||
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
|
||||
3.739999 7.51998 l
|
||||
3.739999 12.079981 l
|
||||
6.339999 12.079981 l
|
||||
6.34 12.08 l
|
||||
h
|
||||
15.16 4.88 m
|
||||
15.16 20 l
|
||||
13.36 20 l
|
||||
13.36 4.88 l
|
||||
15.16 4.88 l
|
||||
h
|
||||
21.82 10.28 m
|
||||
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
|
||||
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
|
||||
25.780001 18.459938 l
|
||||
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
|
||||
24.26 19.999939 l
|
||||
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
|
||||
24.16 18.559938 l
|
||||
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
|
||||
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
|
||||
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
|
||||
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
|
||||
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
|
||||
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
|
||||
24.100002 14.119937 l
|
||||
24.100002 13.779937 l
|
||||
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
|
||||
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
|
||||
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
|
||||
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
|
||||
18.060003 11.679956 l
|
||||
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
|
||||
21.82 10.28 l
|
||||
h
|
||||
19.360001 17.26 m
|
||||
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
|
||||
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
|
||||
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
|
||||
24.100002 15.440001 l
|
||||
23.080002 15.440001 l
|
||||
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
|
||||
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
|
||||
19.360001 17.26 l
|
||||
h
|
||||
31.6 10.28 m
|
||||
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
|
||||
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
|
||||
33.439999 12.90004 l
|
||||
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
|
||||
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
|
||||
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
|
||||
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
|
||||
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
|
||||
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
|
||||
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
|
||||
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
|
||||
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
|
||||
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
|
||||
28.960001 17.440037 l
|
||||
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
|
||||
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
|
||||
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
|
||||
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
|
||||
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
|
||||
28.23 14.483337 28 13.906717 28 13.200018 c
|
||||
28 12.320018 28.34 11.616718 29.02 11.090018 c
|
||||
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
|
||||
31.6 10.28 l
|
||||
h
|
||||
39.779999 7.86 m
|
||||
39.77998 10.520001 l
|
||||
42.359978 10.520001 l
|
||||
42.359978 12.08 l
|
||||
39.779976 12.08 l
|
||||
39.779976 16.639999 l
|
||||
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
|
||||
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
|
||||
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
|
||||
42.419971 19.919998 l
|
||||
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
|
||||
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
|
||||
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
|
||||
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
|
||||
37.979969 12.079979 l
|
||||
35.899971 12.079979 l
|
||||
35.899971 10.51998 l
|
||||
37.979973 10.51998 l
|
||||
37.979973 7.85998 l
|
||||
39.779972 7.85998 l
|
||||
39.779999 7.86 l
|
||||
h
|
||||
45.740002 5.8 m
|
||||
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
|
||||
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
|
||||
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
|
||||
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
|
||||
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
|
||||
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
|
||||
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
|
||||
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
|
||||
45.740002 5.8 l
|
||||
h
|
||||
46.639999 10.520001 m
|
||||
46.639999 20 l
|
||||
44.84 20 l
|
||||
44.84 10.520001 l
|
||||
46.639999 10.520001 l
|
||||
h
|
||||
54 10.3 m
|
||||
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
|
||||
56.279999 13.04 l
|
||||
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
|
||||
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
|
||||
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
|
||||
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
|
||||
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
|
||||
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
|
||||
57.599998 18.780001 l
|
||||
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
|
||||
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
|
||||
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
|
||||
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
|
||||
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
|
||||
54 10.3 l
|
||||
h
|
||||
61.52 5.84 m
|
||||
61.52 11.72 l
|
||||
68.860001 11.72 l
|
||||
68.860001 5.84 l
|
||||
70.779999 5.84 l
|
||||
70.779999 20 l
|
||||
68.860001 20 l
|
||||
68.860001 13.520001 l
|
||||
61.52 13.520001 l
|
||||
61.52 20 l
|
||||
59.599998 20 l
|
||||
59.599998 5.84 l
|
||||
61.519997 5.84 l
|
||||
61.52 5.84 l
|
||||
h
|
||||
75.760002 10.520001 m
|
||||
75.760002 16.200001 l
|
||||
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
|
||||
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
|
||||
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
|
||||
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
|
||||
80.559998 10.520001 l
|
||||
82.360001 10.520001 l
|
||||
82.360001 20 l
|
||||
80.559998 20 l
|
||||
80.559998 18.540001 l
|
||||
80.519997 18.540001 l
|
||||
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
|
||||
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
|
||||
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
|
||||
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
|
||||
73.959999 10.520002 l
|
||||
75.760002 10.520002 l
|
||||
75.760002 10.520001 l
|
||||
h
|
||||
86.879997 4.88 m
|
||||
86.88002 11.88 l
|
||||
86.920021 11.88 l
|
||||
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
|
||||
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
|
||||
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
|
||||
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
|
||||
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
|
||||
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
|
||||
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
|
||||
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
|
||||
86.880028 18.639999 l
|
||||
86.880028 20 l
|
||||
85.080025 20 l
|
||||
85.080025 4.88 l
|
||||
86.880028 4.88 l
|
||||
86.879997 4.88 l
|
||||
h
|
||||
86.879997 15.26 m
|
||||
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
|
||||
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
|
||||
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
|
||||
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
|
||||
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
|
||||
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
|
||||
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
|
||||
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
|
||||
86.879997 15.26 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
Q
|
||||
Q
|
||||
showpage
|
||||
%%PageTrailer
|
||||
pdfEndPage
|
||||
%%Trailer
|
||||
end
|
||||
%%DocumentSuppliedResources:
|
||||
%%EOF
|
||||
@ -0,0 +1,818 @@
|
||||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
|
||||
%%Creator: Chromium
|
||||
%%LanguageLevel: 3
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%BoundingBox: 0 0 2372 634
|
||||
%%HiResBoundingBox: 0 0 2371.9199 633.12
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
%%BeginResource: procset xpdf 3.00 0
|
||||
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
|
||||
/xpdf 75 dict def xpdf begin
|
||||
% PDF special state
|
||||
/pdfDictSize 15 def
|
||||
/pdfSetup {
|
||||
/setpagedevice where {
|
||||
pop 2 dict begin
|
||||
/Policies 1 dict dup begin /PageSize 6 def end def
|
||||
{ /Duplex true def } if
|
||||
currentdict end setpagedevice
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfSetupPaper {
|
||||
% Change paper size, but only if different from previous paper size otherwise
|
||||
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
|
||||
% so we use the same when checking if the size changes.
|
||||
/setpagedevice where {
|
||||
pop currentpagedevice
|
||||
/PageSize known {
|
||||
2 copy
|
||||
currentpagedevice /PageSize get aload pop
|
||||
exch 4 1 roll
|
||||
sub abs 5 gt
|
||||
3 1 roll
|
||||
sub abs 5 gt
|
||||
or
|
||||
} {
|
||||
true
|
||||
} ifelse
|
||||
{
|
||||
2 array astore
|
||||
2 dict begin
|
||||
/PageSize exch def
|
||||
/ImagingBBox null def
|
||||
currentdict end
|
||||
setpagedevice
|
||||
} {
|
||||
pop pop
|
||||
} ifelse
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfStartPage {
|
||||
pdfDictSize dict begin
|
||||
/pdfFillCS [] def
|
||||
/pdfFillXform {} def
|
||||
/pdfStrokeCS [] def
|
||||
/pdfStrokeXform {} def
|
||||
/pdfFill [0] def
|
||||
/pdfStroke [0] def
|
||||
/pdfFillOP false def
|
||||
/pdfStrokeOP false def
|
||||
/pdfOPM false def
|
||||
/pdfLastFill false def
|
||||
/pdfLastStroke false def
|
||||
/pdfTextMat [1 0 0 1 0 0] def
|
||||
/pdfFontSize 0 def
|
||||
/pdfCharSpacing 0 def
|
||||
/pdfTextRender 0 def
|
||||
/pdfPatternCS false def
|
||||
/pdfTextRise 0 def
|
||||
/pdfWordSpacing 0 def
|
||||
/pdfHorizScaling 1 def
|
||||
/pdfTextClipPath [] def
|
||||
} def
|
||||
/pdfEndPage { end } def
|
||||
% PDF color state
|
||||
/opm { dup /pdfOPM exch def
|
||||
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
|
||||
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
|
||||
setcolorspace } def
|
||||
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
|
||||
setcolorspace } def
|
||||
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
|
||||
dup /pdfFill exch def aload pop pdfFillXform setcolor
|
||||
/pdfLastFill true def /pdfLastStroke false def } def
|
||||
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
|
||||
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
|
||||
/pdfLastStroke true def /pdfLastFill false def } def
|
||||
/op { /pdfFillOP exch def
|
||||
pdfLastFill { pdfFillOP setoverprint } if } def
|
||||
/OP { /pdfStrokeOP exch def
|
||||
pdfLastStroke { pdfStrokeOP setoverprint } if } def
|
||||
/fCol {
|
||||
pdfLastFill not {
|
||||
pdfFillCS setcolorspace
|
||||
pdfFill aload pop pdfFillXform setcolor
|
||||
pdfFillOP setoverprint
|
||||
/pdfLastFill true def /pdfLastStroke false def
|
||||
} if
|
||||
} def
|
||||
/sCol {
|
||||
pdfLastStroke not {
|
||||
pdfStrokeCS setcolorspace
|
||||
pdfStroke aload pop pdfStrokeXform setcolor
|
||||
pdfStrokeOP setoverprint
|
||||
/pdfLastStroke true def /pdfLastFill false def
|
||||
} if
|
||||
} def
|
||||
% build a font
|
||||
/pdfMakeFont {
|
||||
4 3 roll findfont
|
||||
4 2 roll matrix scale makefont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/Encoding exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16 {
|
||||
exch findfont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/WMode exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16L3 {
|
||||
1 index /CIDFont resourcestatus {
|
||||
pop pop 1 index /CIDFont findresource /CIDFontType known
|
||||
} {
|
||||
false
|
||||
} ifelse
|
||||
{
|
||||
0 eq { /Identity-H } { /Identity-V } ifelse
|
||||
exch 1 array astore composefont pop
|
||||
} {
|
||||
pdfMakeFont16
|
||||
} ifelse
|
||||
} def
|
||||
% graphics state operators
|
||||
/q { gsave pdfDictSize dict begin } def
|
||||
/Q {
|
||||
end grestore
|
||||
/pdfLastFill where {
|
||||
pop
|
||||
pdfLastFill {
|
||||
pdfFillOP setoverprint
|
||||
} {
|
||||
pdfStrokeOP setoverprint
|
||||
} ifelse
|
||||
} if
|
||||
/pdfOPM where {
|
||||
pop
|
||||
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
|
||||
} if
|
||||
} def
|
||||
/cm { concat } def
|
||||
/d { setdash } def
|
||||
/i { setflat } def
|
||||
/j { setlinejoin } def
|
||||
/J { setlinecap } def
|
||||
/M { setmiterlimit } def
|
||||
/w { setlinewidth } def
|
||||
% path segment operators
|
||||
/m { moveto } def
|
||||
/l { lineto } def
|
||||
/c { curveto } def
|
||||
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
|
||||
neg 0 rlineto closepath } def
|
||||
/h { closepath } def
|
||||
% path painting operators
|
||||
/S { sCol stroke } def
|
||||
/Sf { fCol stroke } def
|
||||
/f { fCol fill } def
|
||||
/f* { fCol eofill } def
|
||||
% clipping operators
|
||||
/W { clip newpath } def
|
||||
/W* { eoclip newpath } def
|
||||
/Ws { strokepath clip newpath } def
|
||||
% text state operators
|
||||
/Tc { /pdfCharSpacing exch def } def
|
||||
/Tf { dup /pdfFontSize exch def
|
||||
dup pdfHorizScaling mul exch matrix scale
|
||||
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
|
||||
exch findfont exch makefont setfont } def
|
||||
/Tr { /pdfTextRender exch def } def
|
||||
/Tp { /pdfPatternCS exch def } def
|
||||
/Ts { /pdfTextRise exch def } def
|
||||
/Tw { /pdfWordSpacing exch def } def
|
||||
/Tz { /pdfHorizScaling exch def } def
|
||||
% text positioning operators
|
||||
/Td { pdfTextMat transform moveto } def
|
||||
/Tm { /pdfTextMat exch def } def
|
||||
% text string operators
|
||||
/xyshow where {
|
||||
pop
|
||||
/xyshow2 {
|
||||
dup length array
|
||||
0 2 2 index length 1 sub {
|
||||
2 index 1 index 2 copy get 3 1 roll 1 add get
|
||||
pdfTextMat dtransform
|
||||
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
|
||||
} for
|
||||
exch pop
|
||||
xyshow
|
||||
} def
|
||||
}{
|
||||
/xyshow2 {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval show moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval show moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/cshow where {
|
||||
pop
|
||||
/xycp {
|
||||
0 3 2 roll
|
||||
{
|
||||
pop pop currentpoint 3 2 roll
|
||||
1 string dup 0 4 3 roll put false charpath moveto
|
||||
2 copy get 2 index 2 index 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
2 add
|
||||
} exch cshow
|
||||
pop pop
|
||||
} def
|
||||
}{
|
||||
/xycp {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval false charpath moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval false charpath moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/Tj {
|
||||
fCol
|
||||
0 pdfTextRise pdfTextMat dtransform rmoveto
|
||||
currentpoint 4 2 roll
|
||||
pdfTextRender 1 and 0 eq {
|
||||
2 copy xyshow2
|
||||
} if
|
||||
pdfTextRender 3 and dup 1 eq exch 2 eq or {
|
||||
3 index 3 index moveto
|
||||
2 copy
|
||||
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
|
||||
xycp currentpoint stroke moveto
|
||||
} if
|
||||
pdfTextRender 4 and 0 ne {
|
||||
4 2 roll moveto xycp
|
||||
/pdfTextClipPath [ pdfTextClipPath aload pop
|
||||
{/moveto cvx}
|
||||
{/lineto cvx}
|
||||
{/curveto cvx}
|
||||
{/closepath cvx}
|
||||
pathforall ] def
|
||||
currentpoint newpath moveto
|
||||
} {
|
||||
pop pop pop pop
|
||||
} ifelse
|
||||
0 pdfTextRise neg pdfTextMat dtransform rmoveto
|
||||
} def
|
||||
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/Tclip { pdfTextClipPath cvx exec clip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
% Level 2/3 image operators
|
||||
/pdfImBuf 100 string def
|
||||
/pdfImStr {
|
||||
2 copy exch length lt {
|
||||
2 copy get exch 1 add exch
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/skipEOD {
|
||||
{ currentfile pdfImBuf readline
|
||||
not { pop exit } if
|
||||
(%-EOD-) eq { exit } if } loop
|
||||
} def
|
||||
/pdfIm { image skipEOD } def
|
||||
/pdfMask {
|
||||
/ReusableStreamDecode filter
|
||||
skipEOD
|
||||
/maskStream exch def
|
||||
} def
|
||||
/pdfMaskEnd { maskStream closefile } def
|
||||
/pdfMaskInit {
|
||||
/maskArray exch def
|
||||
/maskIdx 0 def
|
||||
} def
|
||||
/pdfMaskSrc {
|
||||
maskIdx maskArray length lt {
|
||||
maskArray maskIdx get
|
||||
/maskIdx maskIdx 1 add def
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/pdfImM { fCol imagemask skipEOD } def
|
||||
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
|
||||
/pdfImClip {
|
||||
gsave
|
||||
0 2 4 index length 1 sub {
|
||||
dup 4 index exch 2 copy
|
||||
get 5 index div put
|
||||
1 add 3 index exch 2 copy
|
||||
get 3 index div put
|
||||
} for
|
||||
pop pop rectclip
|
||||
} def
|
||||
/pdfImClipEnd { grestore } def
|
||||
% shading operators
|
||||
/colordelta {
|
||||
false 0 1 3 index length 1 sub {
|
||||
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
|
||||
pop true
|
||||
} if
|
||||
} for
|
||||
exch pop exch pop
|
||||
} def
|
||||
/funcCol { func n array astore } def
|
||||
/funcSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 6 eq {
|
||||
false
|
||||
} {
|
||||
4 index 4 index funcCol dup
|
||||
6 index 4 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
5 index 5 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
6 index 8 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
colordelta or or or
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add
|
||||
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
|
||||
6 index 6 index 4 index 4 index 4 index funcSH
|
||||
2 index 6 index 6 index 4 index 4 index funcSH
|
||||
6 index 2 index 4 index 6 index 4 index funcSH
|
||||
5 3 roll 3 2 roll funcSH pop pop
|
||||
} {
|
||||
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
|
||||
funcCol sc
|
||||
dup 4 index exch mat transform m
|
||||
3 index 3 index mat transform l
|
||||
1 index 3 index mat transform l
|
||||
mat transform l pop pop h f*
|
||||
} ifelse
|
||||
} def
|
||||
/axialCol {
|
||||
dup 0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup 1 gt {
|
||||
pop t1
|
||||
} {
|
||||
dt mul t0 add
|
||||
} ifelse
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/axialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index axialCol 2 index axialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index axialSH
|
||||
exch 3 2 roll axialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul
|
||||
axialCol sc
|
||||
exch dup dx mul x0 add exch dy mul y0 add
|
||||
3 2 roll dup dx mul x0 add exch dy mul y0 add
|
||||
dx abs dy abs ge {
|
||||
2 copy yMin sub dy mul dx div add yMin m
|
||||
yMax sub dy mul dx div add yMax l
|
||||
2 copy yMax sub dy mul dx div add yMax l
|
||||
yMin sub dy mul dx div add yMin l
|
||||
h f*
|
||||
} {
|
||||
exch 2 copy xMin sub dx mul dy div add xMin exch m
|
||||
xMax sub dx mul dy div add xMax exch l
|
||||
exch 2 copy xMax sub dx mul dy div add xMax exch l
|
||||
xMin sub dx mul dy div add xMin exch l
|
||||
h f*
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
/radialCol {
|
||||
dup t0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup t1 gt {
|
||||
pop t1
|
||||
} if
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/radialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index dt mul t0 add radialCol
|
||||
2 index dt mul t0 add radialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index radialSH
|
||||
exch 3 2 roll radialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul dt mul t0 add
|
||||
radialCol sc
|
||||
encl {
|
||||
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
0 360 arc h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
360 0 arcn h f
|
||||
} {
|
||||
2 copy
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arcn
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arcn h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arc
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arc h f
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
end
|
||||
%%EndResource
|
||||
/CIDInit /ProcSet findresource begin
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-H def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-V def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
/WMode 1 def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
end
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
xpdf begin
|
||||
%%EndSetup
|
||||
pdfStartPage
|
||||
%%EndPageSetup
|
||||
[] 0 d
|
||||
1 i
|
||||
0 j
|
||||
0 J
|
||||
10 M
|
||||
1 w
|
||||
/DeviceGray {} cs
|
||||
[0] sc
|
||||
/DeviceGray {} CS
|
||||
[0] SC
|
||||
false op
|
||||
false OP
|
||||
{} settransfer
|
||||
0 0 2371.9199 633.12 re
|
||||
W
|
||||
q
|
||||
[0.24 0 0 -0.24 0 633.12] cm
|
||||
q
|
||||
0 0 9883.333 2634.9304 re
|
||||
W*
|
||||
q
|
||||
[3.125494 0 0 3.12478 0.0072969 0] cm
|
||||
/DeviceRGB {} CS
|
||||
[1 1 1] SC
|
||||
/DeviceRGB {} cs
|
||||
[1 1 1] sc
|
||||
0 0 3162.1621 843.23718 re
|
||||
f
|
||||
Q
|
||||
q
|
||||
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
|
||||
/DeviceRGB {} CS
|
||||
[0.9725 0.7098 0] SC
|
||||
/DeviceRGB {} cs
|
||||
[0.9725 0.7098 0] sc
|
||||
1313.30005 1890.9 m
|
||||
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
|
||||
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
|
||||
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
|
||||
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
|
||||
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
|
||||
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
|
||||
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
|
||||
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
|
||||
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
|
||||
1201.19995 1579.30005 l
|
||||
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
|
||||
h
|
||||
f
|
||||
1472.19995 1127.30005 m
|
||||
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
|
||||
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
|
||||
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
|
||||
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
|
||||
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
|
||||
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
|
||||
h
|
||||
1241.59998 1248.90002 m
|
||||
1275.09998 1251.70007 l
|
||||
1279 1252.00012 l
|
||||
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
|
||||
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
|
||||
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
|
||||
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
|
||||
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
|
||||
h
|
||||
f
|
||||
Q
|
||||
q
|
||||
[76.117943 0 0 76.100548 2395.657 642.07141] cm
|
||||
/DeviceRGB {} CS
|
||||
[0.2235 0.2431 0.2745] SC
|
||||
/DeviceRGB {} cs
|
||||
[0.2235 0.2431 0.2745] sc
|
||||
6.9 5.84 m
|
||||
8.2733 5.84 9.3566 6.18 10.15 6.86 c
|
||||
10.943399 7.54 11.34 8.520001 11.34 9.8 c
|
||||
11.34 11.04 10.94666 12.01 10.16 12.71 c
|
||||
9.37334 13.41 8.286699 13.76 6.9 13.76 c
|
||||
3.74 13.76 l
|
||||
3.74 20 l
|
||||
1.819999 20 l
|
||||
1.819999 5.84 l
|
||||
6.9 5.84 l
|
||||
6.9 5.84 l
|
||||
h
|
||||
6.34 12.08 m
|
||||
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
|
||||
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
|
||||
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
|
||||
3.739999 7.51998 l
|
||||
3.739999 12.079981 l
|
||||
6.339999 12.079981 l
|
||||
6.34 12.08 l
|
||||
h
|
||||
15.16 4.88 m
|
||||
15.16 20 l
|
||||
13.36 20 l
|
||||
13.36 4.88 l
|
||||
15.16 4.88 l
|
||||
h
|
||||
21.82 10.28 m
|
||||
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
|
||||
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
|
||||
25.780001 18.459938 l
|
||||
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
|
||||
24.26 19.999939 l
|
||||
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
|
||||
24.16 18.559938 l
|
||||
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
|
||||
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
|
||||
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
|
||||
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
|
||||
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
|
||||
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
|
||||
24.100002 14.119937 l
|
||||
24.100002 13.779937 l
|
||||
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
|
||||
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
|
||||
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
|
||||
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
|
||||
18.060003 11.679956 l
|
||||
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
|
||||
21.82 10.28 l
|
||||
h
|
||||
19.360001 17.26 m
|
||||
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
|
||||
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
|
||||
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
|
||||
24.100002 15.440001 l
|
||||
23.080002 15.440001 l
|
||||
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
|
||||
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
|
||||
19.360001 17.26 l
|
||||
h
|
||||
31.6 10.28 m
|
||||
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
|
||||
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
|
||||
33.439999 12.90004 l
|
||||
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
|
||||
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
|
||||
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
|
||||
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
|
||||
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
|
||||
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
|
||||
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
|
||||
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
|
||||
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
|
||||
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
|
||||
28.960001 17.440037 l
|
||||
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
|
||||
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
|
||||
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
|
||||
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
|
||||
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
|
||||
28.23 14.483337 28 13.906717 28 13.200018 c
|
||||
28 12.320018 28.34 11.616718 29.02 11.090018 c
|
||||
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
|
||||
31.6 10.28 l
|
||||
h
|
||||
39.779999 7.86 m
|
||||
39.77998 10.520001 l
|
||||
42.359978 10.520001 l
|
||||
42.359978 12.08 l
|
||||
39.779976 12.08 l
|
||||
39.779976 16.639999 l
|
||||
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
|
||||
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
|
||||
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
|
||||
42.419971 19.919998 l
|
||||
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
|
||||
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
|
||||
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
|
||||
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
|
||||
37.979969 12.079979 l
|
||||
35.899971 12.079979 l
|
||||
35.899971 10.51998 l
|
||||
37.979973 10.51998 l
|
||||
37.979973 7.85998 l
|
||||
39.779972 7.85998 l
|
||||
39.779999 7.86 l
|
||||
h
|
||||
45.740002 5.8 m
|
||||
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
|
||||
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
|
||||
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
|
||||
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
|
||||
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
|
||||
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
|
||||
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
|
||||
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
|
||||
45.740002 5.8 l
|
||||
h
|
||||
46.639999 10.520001 m
|
||||
46.639999 20 l
|
||||
44.84 20 l
|
||||
44.84 10.520001 l
|
||||
46.639999 10.520001 l
|
||||
h
|
||||
54 10.3 m
|
||||
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
|
||||
56.279999 13.04 l
|
||||
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
|
||||
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
|
||||
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
|
||||
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
|
||||
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
|
||||
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
|
||||
57.599998 18.780001 l
|
||||
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
|
||||
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
|
||||
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
|
||||
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
|
||||
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
|
||||
54 10.3 l
|
||||
h
|
||||
61.52 5.84 m
|
||||
61.52 11.72 l
|
||||
68.860001 11.72 l
|
||||
68.860001 5.84 l
|
||||
70.779999 5.84 l
|
||||
70.779999 20 l
|
||||
68.860001 20 l
|
||||
68.860001 13.520001 l
|
||||
61.52 13.520001 l
|
||||
61.52 20 l
|
||||
59.599998 20 l
|
||||
59.599998 5.84 l
|
||||
61.519997 5.84 l
|
||||
61.52 5.84 l
|
||||
h
|
||||
75.760002 10.520001 m
|
||||
75.760002 16.200001 l
|
||||
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
|
||||
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
|
||||
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
|
||||
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
|
||||
80.559998 10.520001 l
|
||||
82.360001 10.520001 l
|
||||
82.360001 20 l
|
||||
80.559998 20 l
|
||||
80.559998 18.540001 l
|
||||
80.519997 18.540001 l
|
||||
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
|
||||
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
|
||||
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
|
||||
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
|
||||
73.959999 10.520002 l
|
||||
75.760002 10.520002 l
|
||||
75.760002 10.520001 l
|
||||
h
|
||||
86.879997 4.88 m
|
||||
86.88002 11.88 l
|
||||
86.920021 11.88 l
|
||||
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
|
||||
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
|
||||
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
|
||||
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
|
||||
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
|
||||
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
|
||||
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
|
||||
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
|
||||
86.880028 18.639999 l
|
||||
86.880028 20 l
|
||||
85.080025 20 l
|
||||
85.080025 4.88 l
|
||||
86.880028 4.88 l
|
||||
86.879997 4.88 l
|
||||
h
|
||||
86.879997 15.26 m
|
||||
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
|
||||
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
|
||||
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
|
||||
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
|
||||
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
|
||||
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
|
||||
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
|
||||
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
|
||||
86.879997 15.26 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
Q
|
||||
Q
|
||||
showpage
|
||||
%%PageTrailer
|
||||
pdfEndPage
|
||||
%%Trailer
|
||||
end
|
||||
%%DocumentSuppliedResources:
|
||||
%%EOF
|
||||
@ -0,0 +1,809 @@
|
||||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%Produced by poppler pdftops version: 22.05.0 (http://poppler.freedesktop.org)
|
||||
%%Creator: Chromium
|
||||
%%LanguageLevel: 3
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%BoundingBox: 0 0 2372 634
|
||||
%%HiResBoundingBox: 0 0 2371.9199 633.12
|
||||
%%DocumentSuppliedResources: (atend)
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
%%BeginResource: procset xpdf 3.00 0
|
||||
%%Copyright: Copyright 1996-2011, 2022 Glyph & Cog, LLC
|
||||
/xpdf 75 dict def xpdf begin
|
||||
% PDF special state
|
||||
/pdfDictSize 15 def
|
||||
/pdfSetup {
|
||||
/setpagedevice where {
|
||||
pop 2 dict begin
|
||||
/Policies 1 dict dup begin /PageSize 6 def end def
|
||||
{ /Duplex true def } if
|
||||
currentdict end setpagedevice
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfSetupPaper {
|
||||
% Change paper size, but only if different from previous paper size otherwise
|
||||
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
|
||||
% so we use the same when checking if the size changes.
|
||||
/setpagedevice where {
|
||||
pop currentpagedevice
|
||||
/PageSize known {
|
||||
2 copy
|
||||
currentpagedevice /PageSize get aload pop
|
||||
exch 4 1 roll
|
||||
sub abs 5 gt
|
||||
3 1 roll
|
||||
sub abs 5 gt
|
||||
or
|
||||
} {
|
||||
true
|
||||
} ifelse
|
||||
{
|
||||
2 array astore
|
||||
2 dict begin
|
||||
/PageSize exch def
|
||||
/ImagingBBox null def
|
||||
currentdict end
|
||||
setpagedevice
|
||||
} {
|
||||
pop pop
|
||||
} ifelse
|
||||
} {
|
||||
pop
|
||||
} ifelse
|
||||
} def
|
||||
/pdfStartPage {
|
||||
pdfDictSize dict begin
|
||||
/pdfFillCS [] def
|
||||
/pdfFillXform {} def
|
||||
/pdfStrokeCS [] def
|
||||
/pdfStrokeXform {} def
|
||||
/pdfFill [0] def
|
||||
/pdfStroke [0] def
|
||||
/pdfFillOP false def
|
||||
/pdfStrokeOP false def
|
||||
/pdfOPM false def
|
||||
/pdfLastFill false def
|
||||
/pdfLastStroke false def
|
||||
/pdfTextMat [1 0 0 1 0 0] def
|
||||
/pdfFontSize 0 def
|
||||
/pdfCharSpacing 0 def
|
||||
/pdfTextRender 0 def
|
||||
/pdfPatternCS false def
|
||||
/pdfTextRise 0 def
|
||||
/pdfWordSpacing 0 def
|
||||
/pdfHorizScaling 1 def
|
||||
/pdfTextClipPath [] def
|
||||
} def
|
||||
/pdfEndPage { end } def
|
||||
% PDF color state
|
||||
/opm { dup /pdfOPM exch def
|
||||
/setoverprintmode where{pop setoverprintmode}{pop}ifelse } def
|
||||
/cs { /pdfFillXform exch def dup /pdfFillCS exch def
|
||||
setcolorspace } def
|
||||
/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def
|
||||
setcolorspace } def
|
||||
/sc { pdfLastFill not { pdfFillCS setcolorspace } if
|
||||
dup /pdfFill exch def aload pop pdfFillXform setcolor
|
||||
/pdfLastFill true def /pdfLastStroke false def } def
|
||||
/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if
|
||||
dup /pdfStroke exch def aload pop pdfStrokeXform setcolor
|
||||
/pdfLastStroke true def /pdfLastFill false def } def
|
||||
/op { /pdfFillOP exch def
|
||||
pdfLastFill { pdfFillOP setoverprint } if } def
|
||||
/OP { /pdfStrokeOP exch def
|
||||
pdfLastStroke { pdfStrokeOP setoverprint } if } def
|
||||
/fCol {
|
||||
pdfLastFill not {
|
||||
pdfFillCS setcolorspace
|
||||
pdfFill aload pop pdfFillXform setcolor
|
||||
pdfFillOP setoverprint
|
||||
/pdfLastFill true def /pdfLastStroke false def
|
||||
} if
|
||||
} def
|
||||
/sCol {
|
||||
pdfLastStroke not {
|
||||
pdfStrokeCS setcolorspace
|
||||
pdfStroke aload pop pdfStrokeXform setcolor
|
||||
pdfStrokeOP setoverprint
|
||||
/pdfLastStroke true def /pdfLastFill false def
|
||||
} if
|
||||
} def
|
||||
% build a font
|
||||
/pdfMakeFont {
|
||||
4 3 roll findfont
|
||||
4 2 roll matrix scale makefont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/Encoding exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16 {
|
||||
exch findfont
|
||||
dup length dict begin
|
||||
{ 1 index /FID ne { def } { pop pop } ifelse } forall
|
||||
/WMode exch def
|
||||
currentdict
|
||||
end
|
||||
definefont pop
|
||||
} def
|
||||
/pdfMakeFont16L3 {
|
||||
1 index /CIDFont resourcestatus {
|
||||
pop pop 1 index /CIDFont findresource /CIDFontType known
|
||||
} {
|
||||
false
|
||||
} ifelse
|
||||
{
|
||||
0 eq { /Identity-H } { /Identity-V } ifelse
|
||||
exch 1 array astore composefont pop
|
||||
} {
|
||||
pdfMakeFont16
|
||||
} ifelse
|
||||
} def
|
||||
% graphics state operators
|
||||
/q { gsave pdfDictSize dict begin } def
|
||||
/Q {
|
||||
end grestore
|
||||
/pdfLastFill where {
|
||||
pop
|
||||
pdfLastFill {
|
||||
pdfFillOP setoverprint
|
||||
} {
|
||||
pdfStrokeOP setoverprint
|
||||
} ifelse
|
||||
} if
|
||||
/pdfOPM where {
|
||||
pop
|
||||
pdfOPM /setoverprintmode where{pop setoverprintmode}{pop}ifelse
|
||||
} if
|
||||
} def
|
||||
/cm { concat } def
|
||||
/d { setdash } def
|
||||
/i { setflat } def
|
||||
/j { setlinejoin } def
|
||||
/J { setlinecap } def
|
||||
/M { setmiterlimit } def
|
||||
/w { setlinewidth } def
|
||||
% path segment operators
|
||||
/m { moveto } def
|
||||
/l { lineto } def
|
||||
/c { curveto } def
|
||||
/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
|
||||
neg 0 rlineto closepath } def
|
||||
/h { closepath } def
|
||||
% path painting operators
|
||||
/S { sCol stroke } def
|
||||
/Sf { fCol stroke } def
|
||||
/f { fCol fill } def
|
||||
/f* { fCol eofill } def
|
||||
% clipping operators
|
||||
/W { clip newpath } def
|
||||
/W* { eoclip newpath } def
|
||||
/Ws { strokepath clip newpath } def
|
||||
% text state operators
|
||||
/Tc { /pdfCharSpacing exch def } def
|
||||
/Tf { dup /pdfFontSize exch def
|
||||
dup pdfHorizScaling mul exch matrix scale
|
||||
pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put
|
||||
exch findfont exch makefont setfont } def
|
||||
/Tr { /pdfTextRender exch def } def
|
||||
/Tp { /pdfPatternCS exch def } def
|
||||
/Ts { /pdfTextRise exch def } def
|
||||
/Tw { /pdfWordSpacing exch def } def
|
||||
/Tz { /pdfHorizScaling exch def } def
|
||||
% text positioning operators
|
||||
/Td { pdfTextMat transform moveto } def
|
||||
/Tm { /pdfTextMat exch def } def
|
||||
% text string operators
|
||||
/xyshow where {
|
||||
pop
|
||||
/xyshow2 {
|
||||
dup length array
|
||||
0 2 2 index length 1 sub {
|
||||
2 index 1 index 2 copy get 3 1 roll 1 add get
|
||||
pdfTextMat dtransform
|
||||
4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put
|
||||
} for
|
||||
exch pop
|
||||
xyshow
|
||||
} def
|
||||
}{
|
||||
/xyshow2 {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval show moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval show moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/cshow where {
|
||||
pop
|
||||
/xycp {
|
||||
0 3 2 roll
|
||||
{
|
||||
pop pop currentpoint 3 2 roll
|
||||
1 string dup 0 4 3 roll put false charpath moveto
|
||||
2 copy get 2 index 2 index 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
2 add
|
||||
} exch cshow
|
||||
pop pop
|
||||
} def
|
||||
}{
|
||||
/xycp {
|
||||
currentfont /FontType get 0 eq {
|
||||
0 2 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 2 getinterval false charpath moveto
|
||||
2 copy get 2 index 3 2 roll 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} {
|
||||
0 1 3 index length 1 sub {
|
||||
currentpoint 4 index 3 index 1 getinterval false charpath moveto
|
||||
2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get
|
||||
pdfTextMat dtransform rmoveto
|
||||
} for
|
||||
} ifelse
|
||||
pop pop
|
||||
} def
|
||||
} ifelse
|
||||
/Tj {
|
||||
fCol
|
||||
0 pdfTextRise pdfTextMat dtransform rmoveto
|
||||
currentpoint 4 2 roll
|
||||
pdfTextRender 1 and 0 eq {
|
||||
2 copy xyshow2
|
||||
} if
|
||||
pdfTextRender 3 and dup 1 eq exch 2 eq or {
|
||||
3 index 3 index moveto
|
||||
2 copy
|
||||
currentfont /FontType get 3 eq { fCol } { sCol } ifelse
|
||||
xycp currentpoint stroke moveto
|
||||
} if
|
||||
pdfTextRender 4 and 0 ne {
|
||||
4 2 roll moveto xycp
|
||||
/pdfTextClipPath [ pdfTextClipPath aload pop
|
||||
{/moveto cvx}
|
||||
{/lineto cvx}
|
||||
{/curveto cvx}
|
||||
{/closepath cvx}
|
||||
pathforall ] def
|
||||
currentpoint newpath moveto
|
||||
} {
|
||||
pop pop pop pop
|
||||
} ifelse
|
||||
0 pdfTextRise neg pdfTextMat dtransform rmoveto
|
||||
} def
|
||||
/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/TJmV { 0.001 mul pdfFontSize mul neg 0 exch
|
||||
pdfTextMat dtransform rmoveto } def
|
||||
/Tclip { pdfTextClipPath cvx exec clip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
/Tclip* { pdfTextClipPath cvx exec eoclip newpath
|
||||
/pdfTextClipPath [] def } def
|
||||
% Level 2/3 image operators
|
||||
/pdfImBuf 100 string def
|
||||
/pdfImStr {
|
||||
2 copy exch length lt {
|
||||
2 copy get exch 1 add exch
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/skipEOD {
|
||||
{ currentfile pdfImBuf readline
|
||||
not { pop exit } if
|
||||
(%-EOD-) eq { exit } if } loop
|
||||
} def
|
||||
/pdfIm { image skipEOD } def
|
||||
/pdfMask {
|
||||
/ReusableStreamDecode filter
|
||||
skipEOD
|
||||
/maskStream exch def
|
||||
} def
|
||||
/pdfMaskEnd { maskStream closefile } def
|
||||
/pdfMaskInit {
|
||||
/maskArray exch def
|
||||
/maskIdx 0 def
|
||||
} def
|
||||
/pdfMaskSrc {
|
||||
maskIdx maskArray length lt {
|
||||
maskArray maskIdx get
|
||||
/maskIdx maskIdx 1 add def
|
||||
} {
|
||||
()
|
||||
} ifelse
|
||||
} def
|
||||
/pdfImM { fCol imagemask skipEOD } def
|
||||
/pr { 2 index 2 index 3 2 roll putinterval 4 add } def
|
||||
/pdfImClip {
|
||||
gsave
|
||||
0 2 4 index length 1 sub {
|
||||
dup 4 index exch 2 copy
|
||||
get 5 index div put
|
||||
1 add 3 index exch 2 copy
|
||||
get 3 index div put
|
||||
} for
|
||||
pop pop rectclip
|
||||
} def
|
||||
/pdfImClipEnd { grestore } def
|
||||
% shading operators
|
||||
/colordelta {
|
||||
false 0 1 3 index length 1 sub {
|
||||
dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt {
|
||||
pop true
|
||||
} if
|
||||
} for
|
||||
exch pop exch pop
|
||||
} def
|
||||
/funcCol { func n array astore } def
|
||||
/funcSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 6 eq {
|
||||
false
|
||||
} {
|
||||
4 index 4 index funcCol dup
|
||||
6 index 4 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
5 index 5 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
6 index 8 index funcCol dup
|
||||
3 1 roll colordelta 3 1 roll
|
||||
colordelta or or or
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add
|
||||
4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch
|
||||
6 index 6 index 4 index 4 index 4 index funcSH
|
||||
2 index 6 index 6 index 4 index 4 index funcSH
|
||||
6 index 2 index 4 index 6 index 4 index funcSH
|
||||
5 3 roll 3 2 roll funcSH pop pop
|
||||
} {
|
||||
pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul
|
||||
funcCol sc
|
||||
dup 4 index exch mat transform m
|
||||
3 index 3 index mat transform l
|
||||
1 index 3 index mat transform l
|
||||
mat transform l pop pop h f*
|
||||
} ifelse
|
||||
} def
|
||||
/axialCol {
|
||||
dup 0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup 1 gt {
|
||||
pop t1
|
||||
} {
|
||||
dt mul t0 add
|
||||
} ifelse
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/axialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index axialCol 2 index axialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index axialSH
|
||||
exch 3 2 roll axialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul
|
||||
axialCol sc
|
||||
exch dup dx mul x0 add exch dy mul y0 add
|
||||
3 2 roll dup dx mul x0 add exch dy mul y0 add
|
||||
dx abs dy abs ge {
|
||||
2 copy yMin sub dy mul dx div add yMin m
|
||||
yMax sub dy mul dx div add yMax l
|
||||
2 copy yMax sub dy mul dx div add yMax l
|
||||
yMin sub dy mul dx div add yMin l
|
||||
h f*
|
||||
} {
|
||||
exch 2 copy xMin sub dx mul dy div add xMin exch m
|
||||
xMax sub dx mul dy div add xMax exch l
|
||||
exch 2 copy xMax sub dx mul dy div add xMax exch l
|
||||
xMin sub dx mul dy div add xMin exch l
|
||||
h f*
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
/radialCol {
|
||||
dup t0 lt {
|
||||
pop t0
|
||||
} {
|
||||
dup t1 gt {
|
||||
pop t1
|
||||
} if
|
||||
} ifelse
|
||||
func n array astore
|
||||
} def
|
||||
/radialSH {
|
||||
dup 0 eq {
|
||||
true
|
||||
} {
|
||||
dup 8 eq {
|
||||
false
|
||||
} {
|
||||
2 index dt mul t0 add radialCol
|
||||
2 index dt mul t0 add radialCol colordelta
|
||||
} ifelse
|
||||
} ifelse
|
||||
{
|
||||
1 add 3 1 roll 2 copy add 0.5 mul
|
||||
dup 4 3 roll exch 4 index radialSH
|
||||
exch 3 2 roll radialSH
|
||||
} {
|
||||
pop 2 copy add 0.5 mul dt mul t0 add
|
||||
radialCol sc
|
||||
encl {
|
||||
exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
0 360 arc h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
360 0 arcn h f
|
||||
} {
|
||||
2 copy
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arcn
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arcn h
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a1 a2 arc
|
||||
dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add
|
||||
a2 a1 arc h f
|
||||
} ifelse
|
||||
} ifelse
|
||||
} def
|
||||
end
|
||||
%%EndResource
|
||||
/CIDInit /ProcSet findresource begin
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-H def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
10 dict begin
|
||||
begincmap
|
||||
/CMapType 1 def
|
||||
/CMapName /Identity-V def
|
||||
/CIDSystemInfo 3 dict dup begin
|
||||
/Registry (Adobe) def
|
||||
/Ordering (Identity) def
|
||||
/Supplement 0 def
|
||||
end def
|
||||
/WMode 1 def
|
||||
1 begincodespacerange
|
||||
<0000> <ffff>
|
||||
endcodespacerange
|
||||
0 usefont
|
||||
1 begincidrange
|
||||
<0000> <ffff> 0
|
||||
endcidrange
|
||||
endcmap
|
||||
currentdict CMapName exch /CMap defineresource pop
|
||||
end
|
||||
end
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
xpdf begin
|
||||
%%EndSetup
|
||||
pdfStartPage
|
||||
%%EndPageSetup
|
||||
[] 0 d
|
||||
1 i
|
||||
0 j
|
||||
0 J
|
||||
10 M
|
||||
1 w
|
||||
/DeviceGray {} cs
|
||||
[0] sc
|
||||
/DeviceGray {} CS
|
||||
[0] SC
|
||||
false op
|
||||
false OP
|
||||
{} settransfer
|
||||
0 0 2371.9199 633.12 re
|
||||
W
|
||||
q
|
||||
[0.24 0 0 -0.24 0 633.12] cm
|
||||
q
|
||||
0 0 9883.333 2634.9304 re
|
||||
W*
|
||||
q
|
||||
[2.223526 0 0 2.223018 -1981.0341 -1821.9349] cm
|
||||
/DeviceRGB {} CS
|
||||
[0.9725 0.7098 0] SC
|
||||
/DeviceRGB {} cs
|
||||
[0.9725 0.7098 0] sc
|
||||
1313.30005 1890.9 m
|
||||
1169.90002 1831.7001 1073.30005 1691.4 1073.30005 1526.30005 c
|
||||
1073.30005 1451.5 1092 1379.80005 1129.40002 1320.6001 c
|
||||
1163.70007 1311.20007 1201.09998 1308.1001 1238.5 1308.1001 c
|
||||
1378.69995 1308.1001 1503.40002 1364.20007 1593.80005 1454.6001 c
|
||||
1678 1538.80005 1730.9 1647.80005 1740.3 1772.5001 c
|
||||
1715.4 1688.3002 1671.70007 1616.70007 1612.5 1557.50012 c
|
||||
1522.09998 1467.1001 1397.5 1411.00012 1257.19995 1411.00012 c
|
||||
1247.79993 1411.00012 1238.5 1411.00012 1229.19995 1411.00012 c
|
||||
1210.5 1464.00012 1201.19995 1520.1001 1201.19995 1576.20007 c
|
||||
1201.19995 1579.30005 l
|
||||
1201.09998 1697.7 1244.69995 1806.7 1313.30005 1890.9 c
|
||||
h
|
||||
f
|
||||
1472.19995 1127.30005 m
|
||||
1690.3999 1127.30005 1871.1 1304.90002 1871.1 1526.20007 c
|
||||
1871.1 1632.20007 1827.5 1728.8 1762 1800.4001 c
|
||||
1758.9 1660.2002 1699.7 1535.50012 1609.30005 1442.00012 c
|
||||
1512.70007 1348.50012 1381.80005 1289.30017 1238.40002 1289.30017 c
|
||||
1207.20007 1289.30017 1173 1292.40015 1144.90002 1298.7002 c
|
||||
1216.59998 1195.90002 1335.09998 1127.30005 1472.19995 1127.30005 c
|
||||
h
|
||||
1241.59998 1248.90002 m
|
||||
1275.09998 1251.70007 l
|
||||
1279 1252.00012 l
|
||||
1413 1261.40015 1540.80005 1317.40015 1637.40002 1414.1001 c
|
||||
1715.3 1492.00012 1765.2001 1588.6001 1790.1 1694.6001 c
|
||||
1815 1641.6001 1830.6 1585.50012 1830.6 1526.30005 c
|
||||
1830.6 1326.80005 1668.5 1167.90002 1472.19995 1167.90002 c
|
||||
1388.09998 1167.80005 1307 1195.90002 1241.59998 1248.90002 c
|
||||
h
|
||||
f
|
||||
Q
|
||||
q
|
||||
[76.117943 0 0 76.100548 2395.657 642.07141] cm
|
||||
/DeviceRGB {} CS
|
||||
[1 1 1] SC
|
||||
/DeviceRGB {} cs
|
||||
[1 1 1] sc
|
||||
6.9 5.84 m
|
||||
8.2733 5.84 9.3566 6.18 10.15 6.86 c
|
||||
10.943399 7.54 11.34 8.520001 11.34 9.8 c
|
||||
11.34 11.04 10.94666 12.01 10.16 12.71 c
|
||||
9.37334 13.41 8.286699 13.76 6.9 13.76 c
|
||||
3.74 13.76 l
|
||||
3.74 20 l
|
||||
1.819999 20 l
|
||||
1.819999 5.84 l
|
||||
6.9 5.84 l
|
||||
6.9 5.84 l
|
||||
h
|
||||
6.34 12.08 m
|
||||
7.34 12.08 8.0833 11.89664 8.57 11.52998 c
|
||||
9.0567 11.16332 9.299999 10.586659 9.299999 9.79998 c
|
||||
9.299999 8.27998 8.313339 7.51998 6.339999 7.51998 c
|
||||
3.739999 7.51998 l
|
||||
3.739999 12.079981 l
|
||||
6.339999 12.079981 l
|
||||
6.34 12.08 l
|
||||
h
|
||||
15.16 4.88 m
|
||||
15.16 20 l
|
||||
13.36 20 l
|
||||
13.36 4.88 l
|
||||
15.16 4.88 l
|
||||
h
|
||||
21.82 10.28 m
|
||||
23.02 10.28 23.969999 10.55328 24.67 11.099939 c
|
||||
25.370001 11.646599 25.74 12.406639 25.780001 13.379939 c
|
||||
25.780001 18.459938 l
|
||||
25.780001 18.939938 25.806662 19.453278 25.860001 19.999939 c
|
||||
24.26 19.999939 l
|
||||
24.219999 19.573278 24.200001 19.093279 24.200001 18.559938 c
|
||||
24.16 18.559938 l
|
||||
23.74666 19.173279 23.27 19.606638 22.73 19.859938 c
|
||||
22.189999 20.113237 21.559999 20.239937 20.84 20.239937 c
|
||||
19.866661 20.239937 19.0767 19.979937 18.470001 19.459936 c
|
||||
17.863302 18.939936 17.560001 18.253237 17.560001 17.399937 c
|
||||
17.560001 16.319937 18.013342 15.503237 18.920002 14.949937 c
|
||||
19.826662 14.396637 21.106602 14.119937 22.760002 14.119937 c
|
||||
24.100002 14.119937 l
|
||||
24.100002 13.779937 l
|
||||
24.100002 13.139936 23.890003 12.636637 23.470003 12.269937 c
|
||||
23.050003 11.903236 22.500004 11.719936 21.820004 11.719936 c
|
||||
21.313343 11.719936 20.870003 11.796597 20.490004 11.949936 c
|
||||
20.110004 12.103275 19.660004 12.386616 19.140003 12.799956 c
|
||||
18.060003 11.679956 l
|
||||
19.086704 10.773296 20.340004 10.306657 21.820004 10.279957 c
|
||||
21.82 10.28 l
|
||||
h
|
||||
19.360001 17.26 m
|
||||
19.360001 18.286701 20.04002 18.799999 21.400002 18.799999 c
|
||||
22.213341 18.799999 22.863302 18.55666 23.350002 18.07 c
|
||||
23.836702 17.58334 24.086662 16.879999 24.100002 15.96 c
|
||||
24.100002 15.440001 l
|
||||
23.080002 15.440001 l
|
||||
21.906702 15.440001 20.993402 15.59 20.340002 15.89 c
|
||||
19.686602 16.190001 19.360003 16.64666 19.360003 17.26 c
|
||||
19.360001 17.26 l
|
||||
h
|
||||
31.6 10.28 m
|
||||
32.32 10.28 32.963299 10.41338 33.529999 10.680039 c
|
||||
34.096699 10.946699 34.533298 11.33336 34.84 11.840039 c
|
||||
33.439999 12.90004 l
|
||||
32.906658 12.273379 32.259998 11.960039 31.499998 11.960039 c
|
||||
31.046658 11.960039 30.669998 12.06004 30.369999 12.260039 c
|
||||
30.07 12.460039 29.919998 12.713379 29.919998 13.02004 c
|
||||
29.919998 13.6867 30.539999 14.140039 31.779999 14.380039 c
|
||||
32.993298 14.606699 33.849998 14.94004 34.349998 15.380039 c
|
||||
34.849998 15.820039 35.099998 16.446739 35.099998 17.260038 c
|
||||
35.099998 18.180038 34.75 18.903339 34.049999 19.430038 c
|
||||
33.349998 19.956738 32.4133 20.226698 31.24 20.240038 c
|
||||
30.360001 20.240038 29.6367 20.103378 29.07 19.830038 c
|
||||
28.5033 19.556698 28.0133 19.133358 27.6 18.560038 c
|
||||
28.960001 17.440037 l
|
||||
29.68 18.186697 30.446701 18.560038 31.26 18.560038 c
|
||||
31.793341 18.560038 32.246681 18.453377 32.619999 18.240038 c
|
||||
32.993317 18.026699 33.18 17.733358 33.18 17.360018 c
|
||||
33.18 16.706678 32.580002 16.253319 31.380001 16.000017 c
|
||||
30.046701 15.733357 29.150002 15.376698 28.690001 14.930018 c
|
||||
28.23 14.483337 28 13.906717 28 13.200018 c
|
||||
28 12.320018 28.34 11.616718 29.02 11.090018 c
|
||||
29.700001 10.563318 30.560001 10.293358 31.6 10.280018 c
|
||||
31.6 10.28 l
|
||||
h
|
||||
39.779999 7.86 m
|
||||
39.77998 10.520001 l
|
||||
42.359978 10.520001 l
|
||||
42.359978 12.08 l
|
||||
39.779976 12.08 l
|
||||
39.779976 16.639999 l
|
||||
39.779976 17.25334 39.866634 17.7267 40.039974 18.059999 c
|
||||
40.213314 18.393299 40.579975 18.559999 41.139973 18.559999 c
|
||||
41.673313 18.559999 42.099972 18.46666 42.419971 18.279999 c
|
||||
42.419971 19.919998 l
|
||||
42.073311 20.106659 41.526653 20.213318 40.779972 20.239979 c
|
||||
40.059971 20.239979 39.503273 20.129978 39.10997 19.909979 c
|
||||
38.716667 19.68998 38.42997 19.38332 38.249969 18.989979 c
|
||||
38.069969 18.596638 37.979969 17.979979 37.979969 17.139978 c
|
||||
37.979969 12.079979 l
|
||||
35.899971 12.079979 l
|
||||
35.899971 10.51998 l
|
||||
37.979973 10.51998 l
|
||||
37.979973 7.85998 l
|
||||
39.779972 7.85998 l
|
||||
39.779999 7.86 l
|
||||
h
|
||||
45.740002 5.8 m
|
||||
46.100002 5.8 46.410023 5.93002 46.670021 6.19002 c
|
||||
46.930019 6.45002 47.06002 6.76002 47.06002 7.12002 c
|
||||
47.06002 7.49336 46.926682 7.8067 46.660019 8.06004 c
|
||||
46.393356 8.313379 46.0867 8.44004 45.74004 8.44004 c
|
||||
45.366699 8.44004 45.05336 8.313379 44.800018 8.06004 c
|
||||
44.546677 7.8067 44.420017 7.49336 44.420017 7.120019 c
|
||||
44.420017 6.746679 44.553356 6.43334 44.820019 6.179999 c
|
||||
45.086681 5.926659 45.393337 5.799999 45.739998 5.799999 c
|
||||
45.740002 5.8 l
|
||||
h
|
||||
46.639999 10.520001 m
|
||||
46.639999 20 l
|
||||
44.84 20 l
|
||||
44.84 10.520001 l
|
||||
46.639999 10.520001 l
|
||||
h
|
||||
54 10.3 m
|
||||
55.506699 10.3 56.720001 10.8 57.639999 11.8 c
|
||||
56.279999 13.04 l
|
||||
55.626659 12.33334 54.84 11.98 53.919998 11.98 c
|
||||
53.039997 11.98 52.326698 12.29334 51.779999 12.92 c
|
||||
51.233299 13.54666 50.959999 14.3533 50.959999 15.34 c
|
||||
50.959999 16.27334 51.246658 17.040001 51.82 17.639999 c
|
||||
52.393341 18.239998 53.126701 18.546659 54.02 18.559999 c
|
||||
54.96666 18.559999 55.733299 18.206659 56.32 17.5 c
|
||||
57.599998 18.780001 l
|
||||
56.746658 19.753342 55.5466 20.240002 54 20.240002 c
|
||||
52.5467 20.240002 51.3634 19.786661 50.450001 18.880001 c
|
||||
49.536602 17.973341 49.0667 16.780001 49.040001 15.300001 c
|
||||
49.053341 13.793301 49.523342 12.586601 50.450001 11.680001 c
|
||||
51.376659 10.773401 52.560001 10.313301 54 10.300001 c
|
||||
54 10.3 l
|
||||
h
|
||||
61.52 5.84 m
|
||||
61.52 11.72 l
|
||||
68.860001 11.72 l
|
||||
68.860001 5.84 l
|
||||
70.779999 5.84 l
|
||||
70.779999 20 l
|
||||
68.860001 20 l
|
||||
68.860001 13.520001 l
|
||||
61.52 13.520001 l
|
||||
61.52 20 l
|
||||
59.599998 20 l
|
||||
59.599998 5.84 l
|
||||
61.519997 5.84 l
|
||||
61.52 5.84 l
|
||||
h
|
||||
75.760002 10.520001 m
|
||||
75.760002 16.200001 l
|
||||
75.760002 16.946661 75.956665 17.526701 76.349998 17.940001 c
|
||||
76.743332 18.3533 77.266678 18.560001 77.919998 18.560001 c
|
||||
78.759995 18.560001 79.409996 18.28334 79.869995 17.730001 c
|
||||
80.329994 17.176662 80.559998 16.426701 80.559998 15.480001 c
|
||||
80.559998 10.520001 l
|
||||
82.360001 10.520001 l
|
||||
82.360001 20 l
|
||||
80.559998 20 l
|
||||
80.559998 18.540001 l
|
||||
80.519997 18.540001 l
|
||||
80.266655 19.073341 79.853317 19.490002 79.279999 19.790001 c
|
||||
78.70668 20.09 78.080002 20.240002 77.400002 20.240002 c
|
||||
76.346703 20.240002 75.510002 19.913342 74.889999 19.260002 c
|
||||
74.269997 18.606663 73.959999 17.753302 73.959999 16.700003 c
|
||||
73.959999 10.520002 l
|
||||
75.760002 10.520002 l
|
||||
75.760002 10.520001 l
|
||||
h
|
||||
86.879997 4.88 m
|
||||
86.88002 11.88 l
|
||||
86.920021 11.88 l
|
||||
87.240021 11.386661 87.703362 10.99666 88.31002 10.71 c
|
||||
88.916679 10.42334 89.553322 10.28 90.220024 10.28 c
|
||||
91.646721 10.28 92.806625 10.75 93.700027 11.69 c
|
||||
94.59343 12.629999 95.040024 13.82 95.040024 15.259999 c
|
||||
95.040024 16.686699 94.603363 17.8666 93.730026 18.799999 c
|
||||
92.856689 19.733398 91.693428 20.213299 90.240028 20.24 c
|
||||
89.586685 20.24 88.956726 20.1 88.350029 19.82 c
|
||||
87.743332 19.539999 87.266731 19.14666 86.920029 18.639999 c
|
||||
86.880028 18.639999 l
|
||||
86.880028 20 l
|
||||
85.080025 20 l
|
||||
85.080025 4.88 l
|
||||
86.880028 4.88 l
|
||||
86.879997 4.88 l
|
||||
h
|
||||
86.879997 15.26 m
|
||||
86.879997 16.24666 87.163376 17.036701 87.730034 17.630001 c
|
||||
88.296692 18.223301 89.053337 18.53334 90.000031 18.560001 c
|
||||
90.946693 18.560001 91.703331 18.253342 92.270027 17.640001 c
|
||||
92.836723 17.026661 93.120026 16.233301 93.120026 15.260001 c
|
||||
93.120026 14.286701 92.840027 13.496701 92.280029 12.890001 c
|
||||
91.720032 12.283301 90.953331 11.973341 89.980026 11.960001 c
|
||||
89.033363 11.960001 88.280029 12.270001 87.720024 12.890001 c
|
||||
87.160019 13.510001 86.880028 14.300001 86.880028 15.260001 c
|
||||
86.879997 15.26 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
Q
|
||||
Q
|
||||
showpage
|
||||
%%PageTrailer
|
||||
pdfEndPage
|
||||
%%Trailer
|
||||
end
|
||||
%%DocumentSuppliedResources:
|
||||
%%EOF
|
||||
BIN
packages/media/cpp/branding/logo/web/Favicons/Android.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
packages/media/cpp/branding/logo/web/Favicons/browser.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
packages/media/cpp/branding/logo/web/Favicons/iPhone.png
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
BIN
packages/media/cpp/branding/logo/web/Favicons/iphone_512.png
Normal file
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
BIN
packages/media/cpp/dist/media-img
vendored
BIN
packages/media/cpp/dist/media-img.exe
vendored
BIN
packages/media/cpp/dist/pm-image.exe
vendored
Normal file
BIN
packages/media/cpp/dist/pm-image.pdb
vendored
Normal file
BIN
packages/media/cpp/dist/url-redirect.png
vendored
|
Before Width: | Height: | Size: 2.6 KiB |
BIN
packages/media/cpp/dist/url-test.png
vendored
|
Before Width: | Height: | Size: 2.6 KiB |
BIN
packages/media/cpp/dist/url-test_400.png
vendored
|
Before Width: | Height: | Size: 2.6 KiB |
@ -98,17 +98,17 @@ If you bind beyond `127.0.0.1`, open the port in `firewalld` / `ufw` as usual.
|
||||
|
||||
## Windows: running as a service
|
||||
|
||||
`media-img.exe` does **not** register with the Windows Service Control Manager by itself. Use a **service wrapper** that runs your command line as a service.
|
||||
`pm-image.exe` does **not** register with the Windows Service Control Manager by itself. Use a **service wrapper** that runs your command line as a service.
|
||||
|
||||
### Option A — NSSM (Non-Sucking Service Manager)
|
||||
|
||||
1. Install [NSSM](https://nssm.cc/).
|
||||
2. Either run **`media-img.exe` directly** or use **[`scripts/run-media-img.ps1`](../scripts/run-media-img.ps1)** with `MEDIA_IMG_*` env vars (see [Wrapper scripts](#wrapper-scripts-ports-via-environment)).
|
||||
2. Either run **`pm-image.exe` directly** or use **[`scripts/run-media-img.ps1`](../scripts/run-media-img.ps1)** with `MEDIA_IMG_*` env vars (see [Wrapper scripts](#wrapper-scripts-ports-via-environment)).
|
||||
|
||||
**Direct executable:**
|
||||
|
||||
```powershell
|
||||
nssm install MediaImgServe "C:\Apps\media\media-img.exe"
|
||||
nssm install MediaImgServe "C:\Apps\media\pm-image.exe"
|
||||
nssm set MediaImgServe AppDirectory "C:\Apps\media"
|
||||
nssm set MediaImgServe AppParameters "serve --host 127.0.0.1 --port 8080 --cache-dir C:\Apps\media\cache\images"
|
||||
nssm set MediaImgServe AppStdout "C:\Apps\media\logs\serve.log"
|
||||
@ -121,11 +121,11 @@ nssm start MediaImgServe
|
||||
|
||||
### Option B — WinSW
|
||||
|
||||
Use [WinSW](https://github.com/winsw/winsw) with an XML that points `executable` to `media-img.exe` and passes `serve` arguments in `arguments`.
|
||||
Use [WinSW](https://github.com/winsw/winsw) with an XML that points `executable` to `pm-image.exe` and passes `serve` arguments in `arguments`.
|
||||
|
||||
### Option C — Task Scheduler
|
||||
|
||||
Not a true service, but often enough: run `media-img.exe serve ...` at logon or startup with “Run whether user is logged on or not”. No SCM integration; fewer recovery options than NSSM.
|
||||
Not a true service, but often enough: run `pm-image.exe serve ...` at logon or startup with “Run whether user is logged on or not”. No SCM integration; fewer recovery options than NSSM.
|
||||
|
||||
### Firewall
|
||||
|
||||
@ -147,7 +147,7 @@ The repo includes small wrappers so you can set **bind address, port, and cache
|
||||
| Variable | Meaning |
|
||||
|----------|---------|
|
||||
| `MEDIA_IMG_CMD` | `serve` (default) or `ipc` |
|
||||
| `MEDIA_IMG_BIN` | Path to `media-img` / `media-img.exe` (optional; scripts default to `PATH` or `dist/` next to the script) |
|
||||
| `MEDIA_IMG_BIN` | Path to `media-img` / `pm-image.exe` (optional; scripts default to `PATH` or `dist/` next to the script) |
|
||||
| `MEDIA_IMG_HOST` | Bind address (default `127.0.0.1`) |
|
||||
| `MEDIA_IMG_PORT` | TCP port — default **8080** for `serve`, **9333** for `ipc` |
|
||||
| `MEDIA_IMG_CACHE_DIR` | Passed as `--cache-dir` if set |
|
||||
|
||||
237
packages/media/cpp/docs/product.md
Normal file
@ -0,0 +1,237 @@
|
||||
# pm-image: Fast image resizing for CLI, servers, and Windows Explorer
|
||||
|
||||
**pm-image** is a native **C++** image toolkit built on **libvips** — the same high-performance engine behind tools like **Sharp** (Node.js). One binary gives you a **command-line interface**, an **HTTP REST** server, and **line-delimited JSON IPC** for automation. On Windows, optional **Explorer** integration adds right-click **resize** and **convert** workflows without opening another app.
|
||||
|
||||
Whether you batch photos for the web, power a local resize API, or shrink folders of RAW and HEIC files from the desktop, pm-image keeps pipelines predictable: **decode → process → encode**, with **Sharp-like** options (fit modes, quality, metadata stripping, smart crop) and optional **disk caching** so repeat jobs stay instant.
|
||||
|
||||
---
|
||||
|
||||
|
||||
[Download - Windows - AMD 64](https://service.polymech.info/api/vfs/get/software/pm-image-resize/v1.zip?t=1776153671416&download=1) | [Source Code](https://git.polymech.info/polymech/mono/src/branch/master/packages/media)
|
||||
|
||||
|
||||
## Who is this for?
|
||||
|
||||
- **Developers** who want a **single native binary** (no Node runtime) for resize jobs in scripts, CI, or sidecar services.
|
||||
- **Windows power users** who want **context-menu** resize presets and JPG conversion from File Explorer.
|
||||
- **Integrators** who need **REST** (`POST /v1/resize`) or **IPC** (one JSON line per request) with the same JSON schema as the CLI.
|
||||
|
||||
---
|
||||
|
||||
## How to resize images (quick start)
|
||||
|
||||
### 1. Command line — one file
|
||||
|
||||
Install or build **pm-image**, then run `resize` with input and output paths. By default, the image **fits inside** your max width and height **without enlarging** (unless you allow enlargement).
|
||||
|
||||
```bash
|
||||
pm-image resize photo.jpg out.jpg --max-width 1920 --max-height 1080
|
||||
```
|
||||
|
||||
- **Quality** (JPEG, WebP, AVIF): use `-q` / `quality` (for example `-q 85`).
|
||||
- **Output format**: use the **destination extension** (`.webp`, `.avif`, `.jpg`) or `--format` when the path is ambiguous.
|
||||
|
||||
### 2. Fit modes — not every resize is “shrink to fit”
|
||||
|
||||
| Goal | What to use |
|
||||
|------|-------------|
|
||||
| **Fit inside a box** (keep aspect ratio, no crop) | Default behavior with `--max-width` / `--max-height`; optional `--fit inside` style semantics via `fit` in JSON. |
|
||||
| **Square avatar or thumbnail (crop)** | Same `--max-width` and `--max-height` (e.g. 512), `--fit cover`, optional `--position attention` or `entropy` for smarter crops. |
|
||||
| **Square with padding (no crop)** | `--fit contain` plus `--background '#rrggbb'` for letterboxing. |
|
||||
| **Exact dimensions by stretching** | `--fit fill` (distorts if aspect ratios differ). |
|
||||
|
||||
Examples (see the package README for full flag lists):
|
||||
|
||||
```bash
|
||||
# Thumbnail: 400×400 cover crop
|
||||
pm-image resize in.jpg thumb.jpg --fit cover --max-width 400 --max-height 400
|
||||
|
||||
# Padded square on a dark canvas
|
||||
pm-image resize wide.jpg square.jpg --fit contain --max-width 800 --max-height 800 --background '#111111'
|
||||
```
|
||||
|
||||
### 3. Batch paths and folders
|
||||
|
||||
- Use **globs** (`*`, `?`, `**`) in the input to process many files in one invocation.
|
||||
- Point output to a **directory** (often with a trailing `/` or `\`) or use **templates** like `${SRC_DIR}`, `${SRC_NAME}`, `${SRC_FILE_EXT}` to mirror or rename outputs per file.
|
||||
|
||||
```bash
|
||||
pm-image resize './photos/**/*.jpg' ./out/
|
||||
pm-image resize --src './shots/*.jpg' --dst '${SRC_DIR}/${SRC_NAME}_medium.jpg' --max-width 800
|
||||
```
|
||||
|
||||
### 4. HTTP API
|
||||
|
||||
Start the server (`serve`), then `POST` JSON to `/v1/resize` with `input`, `output`, and the same resize fields as the CLI (`max_width`, `max_height`, `fit`, `quality`, etc.). Paths must be readable and writable by the server process.
|
||||
|
||||
### 5. Windows — resize from Explorer
|
||||
|
||||
After **`pm-image register-explorer`** (or the NSIS installer), use the **PM-Media** menu on images or folders for preset widths, **in place** or **copy**, plus **convert to JPG**. Override preset widths with `--widths` when registering.
|
||||
|
||||
### 6. Optional: Windows GUI
|
||||
|
||||
On Windows, `pm-image resize --ui` opens a **native** dialog to pick files and options (no `--src` / `--dst` with `--ui`).
|
||||
|
||||
---
|
||||
|
||||
## Features at a glance
|
||||
|
||||
- **libvips-backed** resizing, rotation, flip/flop, EXIF **autorotate**, metadata **strip** (defaults match common web workflows).
|
||||
- **Formats**: JPEG, PNG, WebP, TIFF; **AVIF / HEIC** when your libvips build includes HEIF; other formats depend on libvips loaders/savers.
|
||||
- **HTTP(S) URLs** as `input` (fetched via libcurl) for download-and-resize pipelines.
|
||||
- **Output cache**: SHA-256 keyed by path, size, mtime, and options — cache hits skip re-encoding.
|
||||
|
||||
For prerequisites, build steps, installer, and the full option tables, see the **[C++ README](../README.md)**.
|
||||
|
||||
---
|
||||
|
||||
## FAQ (questions and answers)
|
||||
|
||||
### What is pm-image?
|
||||
|
||||
**pm-image** is a CMake-built executable that exposes image resizing and related operations through **CLI**, **`serve` (REST)**, and **`ipc` (JSON lines)**. Processing uses **libvips**, aligned with a **Sharp-like** option model for familiarity.
|
||||
|
||||
### Is pm-image the same as Sharp?
|
||||
|
||||
No — **Sharp** is a **Node.js** library; **pm-image** is a **standalone native** program. Both lean on **libvips**, so concepts like `fit`, `position`, `kernel`, and quality map closely. See the README’s “Sharp-like options” table for field names (`without_enlargement`, `strip_metadata`, etc.).
|
||||
|
||||
### How do I resize an image to an exact width?
|
||||
|
||||
Use **`--max-width`** (and optionally **`--max-height`**). The image scales **down** (or up if you allow enlargement) to respect those bounds and the chosen **`fit`** mode. For a fixed **width-only** workflow, set a large `max_height` or use JSON/`resize` options that match your desired behavior.
|
||||
|
||||
### How do I resize without losing quality?
|
||||
|
||||
**Resizing always re-encodes** for raster formats; “lossless” depends on format:
|
||||
|
||||
- For **JPEG**, use a high **`-q`** (e.g. 90–95) and avoid repeated saves.
|
||||
- For **PNG**, resizing may still recompress; use **PNG compression** settings as needed.
|
||||
- Prefer **WebP** or **AVIF** with tuned **quality** for smaller files at a given visual fidelity.
|
||||
|
||||
**without enlargement** defaults to **true**, so small images are not upscaled unless you opt in.
|
||||
|
||||
### How do I batch resize images in a folder?
|
||||
|
||||
Use a **glob** for `input` and a **directory** or **template** for `output`. Multiple matches are processed in one command; see **Batch paths & cache** in the README for rules on trailing slashes and `${SRC_*}` variables.
|
||||
|
||||
### Can I resize images from URLs?
|
||||
|
||||
Yes. Pass an **`http://` or `https://`** URL as `input`. Redirects are followed; timeouts and redirect limits are configurable (`--url-timeout`, `--url-max-redirects`).
|
||||
|
||||
### Does pm-image work on Windows?
|
||||
|
||||
Yes. Use the **vips dev bundle** (`npm run setup:vips` from the package), build **pm-image**, and optionally install **NSIS** output for **`pm-image-setup.exe`**, PATH, DLLs, and Explorer scripts. **register-explorer** adds context menus for resize and convert.
|
||||
|
||||
### How does caching work?
|
||||
|
||||
When enabled, outputs are stored under a **cache directory** (default under the process working directory), keyed by a **SHA-256** hash of input identity, file metadata, and **all** resize options. Identical jobs reuse cached bytes without running libvips again.
|
||||
|
||||
### What is IPC for?
|
||||
|
||||
**ipc** accepts **one JSON object per line** over TCP (or a Unix socket on non-Windows), ideal for **local daemons** or tools that want a simple request/response channel without HTTP overhead.
|
||||
|
||||
### Where is the full API reference?
|
||||
|
||||
- **CLI**: `pm-image --help`, `pm-image resize --help`.
|
||||
- **Library-level image API** (underlying engine): [libvips `VipsImage`](https://www.libvips.org/API/current/class.Image.html).
|
||||
---
|
||||
|
||||
## Related documentation
|
||||
|
||||
## CLI examples
|
||||
|
||||
Paths below use Unix style; on Windows run `pm-image.exe` and use `.\` or full paths as needed.
|
||||
|
||||
### Help and version
|
||||
|
||||
```bash
|
||||
pm-image --help
|
||||
pm-image resize --help
|
||||
pm-image -v
|
||||
```
|
||||
|
||||
### `resize` — fit inside a box (default), write WebP / AVIF by extension
|
||||
|
||||
```bash
|
||||
# Max 800×600, stay inside the box, Lanczos3 (default), write JPEG quality 85 (default)
|
||||
pm-image resize photo.jpg out.jpg --max-width 800 --max-height 600
|
||||
|
||||
# Same, explicit quality
|
||||
pm-image resize photo.jpg out.jpg --max-width 800 --max-height 600 -q 90
|
||||
|
||||
# WebP output (quality applies)
|
||||
pm-image resize photo.jpg thumb.webp --max-width 400 --max-height 400 -q 82
|
||||
|
||||
# AVIF output (quality applies; needs HEIF/AVIF support in your libvips build)
|
||||
pm-image resize photo.png out.avif --max-width 1200 --max-height 1200 -q 50
|
||||
|
||||
# Force output format when the path has no extension you trust
|
||||
pm-image resize in.tif /tmp/out --format webp --max-width 512
|
||||
```
|
||||
|
||||
### `resize` — square images (1:1)
|
||||
|
||||
Use the **same** `--max-width` and `--max-height` (that value is the square side in pixels). Pick **`--fit`**:
|
||||
|
||||
| `fit` | Result |
|
||||
|-------|--------|
|
||||
| **`cover`** | Fills the square; crops overflow (default crop: `--position centre`, or `attention` / `entropy` for smart crop). |
|
||||
| **`contain`** | Full image inside the square; **letterboxing** on two sides if needed (`--background`). |
|
||||
| **`fill`** | Stretches to the square (ignores aspect ratio). |
|
||||
|
||||
```bash
|
||||
# 512×512 crop-to-square (avatars, thumbnails)
|
||||
pm-image resize portrait.jpg avatar.jpg --fit cover --max-width 512 --max-height 512
|
||||
|
||||
# 1080×1080 WebP, smart crop on subject
|
||||
pm-image resize product.png grid.webp --fit cover --max-width 1080 --max-height 1080 --position attention -q 85
|
||||
|
||||
# Square canvas, no crop — padded bands with a colour
|
||||
pm-image resize panoramic.jpg square.jpg --fit contain --max-width 800 --max-height 800 --background '#111111'
|
||||
|
||||
# Exact square by stretching (rare)
|
||||
pm-image resize any.jpg out.jpg --fit fill --max-width 256 --max-height 256
|
||||
```
|
||||
|
||||
**REST / IPC JSON:** e.g. `"max_width": 512, "max_height": 512, "fit": "cover", "position": "attention"`.
|
||||
|
||||
### `resize` — cover (crop), contain (letterbox), rotate / flip
|
||||
|
||||
```bash
|
||||
# Cover: fill 1200×630, crop centre (use --position attention for smart crop)
|
||||
pm-image resize wide.jpg social.jpg --fit cover --max-width 1200 --max-height 630
|
||||
|
||||
# Contain: fit inside 800×600 canvas, letterbox with a background
|
||||
pm-image resize logo.png padded.png --fit contain --max-width 800 --max-height 600 --background '#1a1a1a'
|
||||
|
||||
# EXIF autorotate (default), then rotate 90° CCW, vertical flip
|
||||
pm-image resize img.jpg rotated.jpg --max-width 1024 --rotate 90 --flip
|
||||
```
|
||||
|
||||
### `serve` — HTTP REST
|
||||
|
||||
```bash
|
||||
# Default: http://127.0.0.1:8080 — GET /health, POST /v1/resize with JSON body
|
||||
pm-image serve --host 127.0.0.1 -p 8080
|
||||
```
|
||||
|
||||
Example resize request (paths must be readable/writable by the server process):
|
||||
|
||||
```bash
|
||||
curl -s http://127.0.0.1:8080/health
|
||||
curl -s -X POST http://127.0.0.1:8080/v1/resize \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"input":"/path/in.png","output":"/path/out.webp","max_width":400,"quality":80}'
|
||||
```
|
||||
|
||||
Optional: `"cache":false`, `"expand_glob":false`, `"cache_dir":"..."` — see **Batch paths & cache** above.
|
||||
|
||||
### `ipc` — one JSON line per connection (TCP; Unix socket on Linux/macOS)
|
||||
|
||||
```bash
|
||||
pm-image ipc --host 127.0.0.1 -p 9333 --cache-dir ./cache/images
|
||||
# elsewhere: send a single line, read one line back, e.g.
|
||||
# {"input":"/tmp/a.jpg","output":"/tmp/b.webp","max_width":320,"format":"webp","cache":true}
|
||||
```
|
||||
|
||||
Same JSON fields as REST (`input`, `output`, globs, `expand_glob`, `cache`, `cache_dir`, resize options).
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
; From packages/media/cpp:
|
||||
; npm run build:installer
|
||||
; Output: dist\media-img-Setup.exe
|
||||
; Requires: NSIS 3+, CMake release build (dist\media-img.exe + vips DLLs)
|
||||
; Requires: NSIS 3+, CMake release build (dist\pm-image.exe + vips DLLs)
|
||||
; ============================================================================
|
||||
|
||||
!include "MUI2.nsh"
|
||||
@ -121,16 +121,16 @@
|
||||
; ---------------------------------------------------------------------------
|
||||
; Metadata
|
||||
; ---------------------------------------------------------------------------
|
||||
!define PRODUCT_NAME "PolyMech media-img"
|
||||
!define PRODUCT_NAME "PolyMech Image Resizer"
|
||||
!define PRODUCT_VERSION "0.1.0"
|
||||
!define PRODUCT_PUBLISHER "PolyMech"
|
||||
!define PRODUCT_WEB_SITE "https://git.polymech.info/mono"
|
||||
!define PRODUCT_EXE "media-img.exe"
|
||||
!define PRODUCT_WEB_SITE "https://service.polymech.info/user/cgo/pages/polymech-media-tools"
|
||||
!define PRODUCT_EXE "pm-image.exe"
|
||||
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
|
||||
!define ENV_KEY "Environment"
|
||||
|
||||
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
|
||||
OutFile "dist\media-img-Setup.exe"
|
||||
OutFile "dist\pm-images-setup.exe"
|
||||
InstallDir ""
|
||||
RequestExecutionLevel user
|
||||
|
||||
@ -214,7 +214,7 @@ Section "Install"
|
||||
WriteRegStr HKCU "${PRODUCT_UNINST_KEY}" "InstallMode" "CurrentUser"
|
||||
reg_done:
|
||||
|
||||
Call AddToPath
|
||||
;Call AddToPath
|
||||
|
||||
DetailPrint "Registering Explorer context menu (media-img register-explorer)..."
|
||||
ExecWait '"$INSTDIR\${PRODUCT_EXE}" register-explorer' $0
|
||||
|
||||
@ -12,7 +12,7 @@ export const platform = {
|
||||
|
||||
/** Path to media-img binary next to orchestrator/ → ../dist/ */
|
||||
export function mediaExePath(orchestratorDir = __dirname) {
|
||||
const name = platform.isWin ? 'media-img.exe' : 'media-img';
|
||||
const name = platform.isWin ? 'pm-image.exe' : 'media-img';
|
||||
return resolve(orchestratorDir, '..', 'dist', name);
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* Cross-platform launcher: runs dist/media-img or dist/media-img.exe from package root.
|
||||
* Cross-platform launcher: runs dist/media-img or dist/pm-image.exe from package root.
|
||||
* Used by package.json convenience scripts on Linux, macOS, and Windows.
|
||||
*/
|
||||
import { spawnSync } from 'node:child_process';
|
||||
@ -8,7 +8,7 @@ import { resolve, dirname } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
||||
const exe = process.platform === 'win32' ? 'media-img.exe' : 'media-img';
|
||||
const exe = process.platform === 'win32' ? 'pm-image.exe' : 'media-img';
|
||||
const bin = resolve(root, 'dist', exe);
|
||||
const args = process.argv.slice(2);
|
||||
const r = spawnSync(bin, args, { stdio: 'inherit' });
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
# Wrapper for NSSM, WinSW, Task Scheduler, or manual runs. Configure via environment variables.
|
||||
#
|
||||
# $env:MEDIA_IMG_CMD = serve | ipc (default: serve)
|
||||
# $env:MEDIA_IMG_BIN = path to media-img.exe (optional)
|
||||
# $env:MEDIA_IMG_BIN = path to pm-image.exe (optional)
|
||||
# $env:MEDIA_IMG_HOST = bind address (default: 127.0.0.1)
|
||||
# $env:MEDIA_IMG_PORT = TCP port — default 8080 for serve, 9333 for ipc
|
||||
# $env:MEDIA_IMG_CACHE_DIR = optional — passed as --cache-dir
|
||||
# $env:MEDIA_IMG_NO_CACHE = "1" to add --no-cache
|
||||
# $env:MEDIA_IMG_IPC_UNIX = not used on Windows (IPC TCP only here)
|
||||
#
|
||||
# If MEDIA_IMG_BIN is unset, uses ..\dist\media-img.exe next to this script when present,
|
||||
# otherwise "media-img.exe" on PATH.
|
||||
# If MEDIA_IMG_BIN is unset, uses ..\dist\pm-image.exe next to this script when present,
|
||||
# otherwise "pm-image.exe" on PATH.
|
||||
#
|
||||
# Example:
|
||||
# $env:MEDIA_IMG_CMD = "serve"; $env:MEDIA_IMG_PORT = "8080"
|
||||
@ -23,7 +23,7 @@ param(
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
$candidate = Join-Path $here "..\dist\media-img.exe"
|
||||
$candidate = Join-Path $here "..\dist\pm-image.exe"
|
||||
|
||||
if ($env:MEDIA_IMG_BIN) {
|
||||
$bin = $env:MEDIA_IMG_BIN
|
||||
@ -32,7 +32,7 @@ elseif (Test-Path -LiteralPath $candidate) {
|
||||
$bin = (Resolve-Path $candidate).Path
|
||||
}
|
||||
else {
|
||||
$bin = "media-img.exe"
|
||||
$bin = "pm-image.exe"
|
||||
}
|
||||
|
||||
$cmd = if ($env:MEDIA_IMG_CMD) { $env:MEDIA_IMG_CMD } else { "serve" }
|
||||
|
||||
@ -184,7 +184,7 @@ int main(int argc, char **argv) {
|
||||
reg_cmd->add_flag("--unregister", reg_unregister);
|
||||
reg_cmd->add_flag("--dry", reg_dry);
|
||||
reg_cmd->add_flag("--no-refresh-shell", reg_no_refresh);
|
||||
reg_cmd->add_option("--media-bin", reg_media_bin, "Path to media-img.exe (default: this executable)");
|
||||
reg_cmd->add_option("--media-bin", reg_media_bin, "Path to pm-image.exe (default: this executable)");
|
||||
reg_cmd->add_option("--explorer-script", reg_explorer_script,
|
||||
"Path to explorer-resize.ps1 (default: <exe_dir>\\scripts\\explorer-resize.ps1)");
|
||||
reg_cmd->add_option("--explorer-convert-script", reg_explorer_convert_script,
|
||||
|
||||
@ -52,7 +52,7 @@ std::wstring default_media_bin() {
|
||||
wchar_t buf[MAX_PATH]{};
|
||||
DWORD n = GetModuleFileNameW(nullptr, buf, MAX_PATH);
|
||||
if (n == 0 || n >= MAX_PATH)
|
||||
return L"media-img.exe";
|
||||
return L"pm-image.exe";
|
||||
return std::wstring(buf, n);
|
||||
}
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@ struct RegisterExplorerOptions {
|
||||
bool unregister{false};
|
||||
bool dry{false};
|
||||
bool refresh_shell{true};
|
||||
/** Empty = use path of running media-img.exe */
|
||||
/** Empty = use path of running pm-image.exe */
|
||||
std::string media_bin;
|
||||
/** Empty = <exe_dir>\\scripts\\explorer-resize.ps1 */
|
||||
std::string explorer_script;
|
||||
|
||||
@ -1,156 +1,156 @@
|
||||
#include "win/ui_singleton.hpp"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#pragma comment(lib, "User32.lib")
|
||||
|
||||
namespace media::win {
|
||||
namespace {
|
||||
|
||||
HWND g_merge_input_edit{};
|
||||
HWND g_bridge_hwnd{};
|
||||
HANDLE g_mutex{};
|
||||
|
||||
static const wchar_t kBridgeClass[] = L"MediaImgUiBridge";
|
||||
static const wchar_t kBridgeTitle[] = L"media-img";
|
||||
|
||||
std::wstring utf8_to_wide(const std::string &s) {
|
||||
if (s.empty())
|
||||
return L"";
|
||||
int n = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), static_cast<int>(s.size()), nullptr, 0);
|
||||
if (n <= 0)
|
||||
return L"";
|
||||
std::wstring w(static_cast<size_t>(n), L'\0');
|
||||
MultiByteToWideChar(CP_UTF8, 0, s.c_str(), static_cast<int>(s.size()), w.data(), n);
|
||||
return w;
|
||||
}
|
||||
|
||||
LRESULT CALLBACK bridge_wnd_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
|
||||
(void)wp;
|
||||
if (msg == WM_COPYDATA) {
|
||||
auto *cds = reinterpret_cast<COPYDATASTRUCT *>(lp);
|
||||
if (!cds || cds->dwData != 1 || !cds->lpData || cds->cbData == 0)
|
||||
return FALSE;
|
||||
const char *bytes = static_cast<const char *>(cds->lpData);
|
||||
size_t len = cds->cbData;
|
||||
while (len > 0 && bytes[len - 1] == '\0')
|
||||
--len;
|
||||
if (len == 0)
|
||||
return TRUE;
|
||||
std::string payload(bytes, bytes + len);
|
||||
|
||||
if (g_merge_input_edit && IsWindow(g_merge_input_edit)) {
|
||||
const int n = GetWindowTextLengthW(g_merge_input_edit);
|
||||
std::wstring cur;
|
||||
if (n > 0) {
|
||||
cur.assign(static_cast<size_t>(n) + 1, L'\0');
|
||||
GetWindowTextW(g_merge_input_edit, cur.data(), n + 1);
|
||||
cur.resize(static_cast<size_t>(n));
|
||||
}
|
||||
std::wstring add = utf8_to_wide(payload);
|
||||
if (!cur.empty() && !add.empty())
|
||||
cur += L';';
|
||||
cur += add;
|
||||
SetWindowTextW(g_merge_input_edit, cur.c_str());
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
return DefWindowProcW(hwnd, msg, wp, lp);
|
||||
}
|
||||
|
||||
bool register_bridge_class_once() {
|
||||
static bool tried = false;
|
||||
if (tried)
|
||||
return true;
|
||||
tried = true;
|
||||
WNDCLASSEXW wc{};
|
||||
wc.cbSize = sizeof(wc);
|
||||
wc.lpfnWndProc = bridge_wnd_proc;
|
||||
wc.hInstance = GetModuleHandleW(nullptr);
|
||||
wc.lpszClassName = kBridgeClass;
|
||||
if (!RegisterClassExW(&wc)) {
|
||||
if (GetLastError() != ERROR_CLASS_ALREADY_EXISTS)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
bool try_acquire_ui_singleton_mutex() {
|
||||
g_mutex = CreateMutexW(nullptr, TRUE, L"Local\\MediaImgResizeUi_v1");
|
||||
if (!g_mutex)
|
||||
return false;
|
||||
if (GetLastError() == ERROR_ALREADY_EXISTS) {
|
||||
CloseHandle(g_mutex);
|
||||
g_mutex = nullptr;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void release_ui_singleton_mutex() {
|
||||
if (!g_mutex)
|
||||
return;
|
||||
ReleaseMutex(g_mutex);
|
||||
CloseHandle(g_mutex);
|
||||
g_mutex = nullptr;
|
||||
}
|
||||
|
||||
bool create_ui_singleton_bridge() {
|
||||
if (g_bridge_hwnd)
|
||||
return true;
|
||||
if (!register_bridge_class_once())
|
||||
return false;
|
||||
#ifndef HWND_MESSAGE
|
||||
#define HWND_MESSAGE ((HWND)(-3))
|
||||
#endif
|
||||
g_bridge_hwnd =
|
||||
CreateWindowExW(0, kBridgeClass, kBridgeTitle, 0, 0, 0, 0, 0, HWND_MESSAGE, nullptr, GetModuleHandleW(nullptr),
|
||||
nullptr);
|
||||
return g_bridge_hwnd != nullptr;
|
||||
}
|
||||
|
||||
void destroy_ui_singleton_bridge() {
|
||||
if (g_bridge_hwnd) {
|
||||
DestroyWindow(g_bridge_hwnd);
|
||||
g_bridge_hwnd = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void set_ui_merge_input_edit(HWND h) {
|
||||
g_merge_input_edit = h;
|
||||
}
|
||||
|
||||
void clear_ui_merge_input_edit() {
|
||||
g_merge_input_edit = nullptr;
|
||||
}
|
||||
|
||||
bool forward_resize_ui_paths_to_primary(const std::string &utf8_paths) {
|
||||
HWND bridge = nullptr;
|
||||
for (int i = 0; i < 80 && !bridge; ++i) {
|
||||
bridge = FindWindowW(kBridgeClass, kBridgeTitle);
|
||||
if (!bridge)
|
||||
Sleep(25);
|
||||
}
|
||||
if (!bridge)
|
||||
return false;
|
||||
|
||||
std::vector<char> buf;
|
||||
buf.reserve(utf8_paths.size() + 1);
|
||||
buf.assign(utf8_paths.begin(), utf8_paths.end());
|
||||
buf.push_back('\0');
|
||||
|
||||
COPYDATASTRUCT cds{};
|
||||
cds.dwData = 1;
|
||||
cds.cbData = static_cast<DWORD>(buf.size());
|
||||
cds.lpData = buf.data();
|
||||
|
||||
DWORD_PTR result = 0;
|
||||
const LRESULT r =
|
||||
SendMessageTimeoutW(bridge, WM_COPYDATA, 0, reinterpret_cast<LPARAM>(&cds), SMTO_ABORTIFHUNG, 15000, &result);
|
||||
return r != 0;
|
||||
}
|
||||
|
||||
} // namespace media::win
|
||||
#include "win/ui_singleton.hpp"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#pragma comment(lib, "User32.lib")
|
||||
|
||||
namespace media::win {
|
||||
namespace {
|
||||
|
||||
HWND g_merge_input_edit{};
|
||||
HWND g_bridge_hwnd{};
|
||||
HANDLE g_mutex{};
|
||||
|
||||
static const wchar_t kBridgeClass[] = L"MediaImgUiBridge";
|
||||
static const wchar_t kBridgeTitle[] = L"media-img";
|
||||
|
||||
std::wstring utf8_to_wide(const std::string &s) {
|
||||
if (s.empty())
|
||||
return L"";
|
||||
int n = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), static_cast<int>(s.size()), nullptr, 0);
|
||||
if (n <= 0)
|
||||
return L"";
|
||||
std::wstring w(static_cast<size_t>(n), L'\0');
|
||||
MultiByteToWideChar(CP_UTF8, 0, s.c_str(), static_cast<int>(s.size()), w.data(), n);
|
||||
return w;
|
||||
}
|
||||
|
||||
LRESULT CALLBACK bridge_wnd_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
|
||||
(void)wp;
|
||||
if (msg == WM_COPYDATA) {
|
||||
auto *cds = reinterpret_cast<COPYDATASTRUCT *>(lp);
|
||||
if (!cds || cds->dwData != 1 || !cds->lpData || cds->cbData == 0)
|
||||
return FALSE;
|
||||
const char *bytes = static_cast<const char *>(cds->lpData);
|
||||
size_t len = cds->cbData;
|
||||
while (len > 0 && bytes[len - 1] == '\0')
|
||||
--len;
|
||||
if (len == 0)
|
||||
return TRUE;
|
||||
std::string payload(bytes, bytes + len);
|
||||
|
||||
if (g_merge_input_edit && IsWindow(g_merge_input_edit)) {
|
||||
const int n = GetWindowTextLengthW(g_merge_input_edit);
|
||||
std::wstring cur;
|
||||
if (n > 0) {
|
||||
cur.assign(static_cast<size_t>(n) + 1, L'\0');
|
||||
GetWindowTextW(g_merge_input_edit, cur.data(), n + 1);
|
||||
cur.resize(static_cast<size_t>(n));
|
||||
}
|
||||
std::wstring add = utf8_to_wide(payload);
|
||||
if (!cur.empty() && !add.empty())
|
||||
cur += L';';
|
||||
cur += add;
|
||||
SetWindowTextW(g_merge_input_edit, cur.c_str());
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
return DefWindowProcW(hwnd, msg, wp, lp);
|
||||
}
|
||||
|
||||
bool register_bridge_class_once() {
|
||||
static bool tried = false;
|
||||
if (tried)
|
||||
return true;
|
||||
tried = true;
|
||||
WNDCLASSEXW wc{};
|
||||
wc.cbSize = sizeof(wc);
|
||||
wc.lpfnWndProc = bridge_wnd_proc;
|
||||
wc.hInstance = GetModuleHandleW(nullptr);
|
||||
wc.lpszClassName = kBridgeClass;
|
||||
if (!RegisterClassExW(&wc)) {
|
||||
if (GetLastError() != ERROR_CLASS_ALREADY_EXISTS)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
bool try_acquire_ui_singleton_mutex() {
|
||||
g_mutex = CreateMutexW(nullptr, TRUE, L"Local\\MediaImgResizeUi_v1");
|
||||
if (!g_mutex)
|
||||
return false;
|
||||
if (GetLastError() == ERROR_ALREADY_EXISTS) {
|
||||
CloseHandle(g_mutex);
|
||||
g_mutex = nullptr;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void release_ui_singleton_mutex() {
|
||||
if (!g_mutex)
|
||||
return;
|
||||
ReleaseMutex(g_mutex);
|
||||
CloseHandle(g_mutex);
|
||||
g_mutex = nullptr;
|
||||
}
|
||||
|
||||
bool create_ui_singleton_bridge() {
|
||||
if (g_bridge_hwnd)
|
||||
return true;
|
||||
if (!register_bridge_class_once())
|
||||
return false;
|
||||
#ifndef HWND_MESSAGE
|
||||
#define HWND_MESSAGE ((HWND)(-3))
|
||||
#endif
|
||||
g_bridge_hwnd =
|
||||
CreateWindowExW(0, kBridgeClass, kBridgeTitle, 0, 0, 0, 0, 0, HWND_MESSAGE, nullptr, GetModuleHandleW(nullptr),
|
||||
nullptr);
|
||||
return g_bridge_hwnd != nullptr;
|
||||
}
|
||||
|
||||
void destroy_ui_singleton_bridge() {
|
||||
if (g_bridge_hwnd) {
|
||||
DestroyWindow(g_bridge_hwnd);
|
||||
g_bridge_hwnd = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void set_ui_merge_input_edit(HWND h) {
|
||||
g_merge_input_edit = h;
|
||||
}
|
||||
|
||||
void clear_ui_merge_input_edit() {
|
||||
g_merge_input_edit = nullptr;
|
||||
}
|
||||
|
||||
bool forward_resize_ui_paths_to_primary(const std::string &utf8_paths) {
|
||||
HWND bridge = nullptr;
|
||||
for (int i = 0; i < 80 && !bridge; ++i) {
|
||||
bridge = FindWindowW(kBridgeClass, kBridgeTitle);
|
||||
if (!bridge)
|
||||
Sleep(25);
|
||||
}
|
||||
if (!bridge)
|
||||
return false;
|
||||
|
||||
std::vector<char> buf;
|
||||
buf.reserve(utf8_paths.size() + 1);
|
||||
buf.assign(utf8_paths.begin(), utf8_paths.end());
|
||||
buf.push_back('\0');
|
||||
|
||||
COPYDATASTRUCT cds{};
|
||||
cds.dwData = 1;
|
||||
cds.cbData = static_cast<DWORD>(buf.size());
|
||||
cds.lpData = buf.data();
|
||||
|
||||
DWORD_PTR result = 0;
|
||||
const LRESULT r =
|
||||
SendMessageTimeoutW(bridge, WM_COPYDATA, 0, reinterpret_cast<LPARAM>(&cds), SMTO_ABORTIFHUNG, 15000, &result);
|
||||
return r != 0;
|
||||
}
|
||||
|
||||
} // namespace media::win
|
||||
|
||||
@ -1,32 +1,32 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
#include <windows.h>
|
||||
|
||||
namespace media::win {
|
||||
|
||||
/** Create named mutex; returns true if this process is the primary UI instance. */
|
||||
bool try_acquire_ui_singleton_mutex();
|
||||
|
||||
/** Release mutex from try_acquire_ui_singleton_mutex (primary only). */
|
||||
void release_ui_singleton_mutex();
|
||||
|
||||
/** Message-only window that receives WM_COPYDATA from secondary instances. */
|
||||
bool create_ui_singleton_bridge();
|
||||
void destroy_ui_singleton_bridge();
|
||||
|
||||
/** Target edit control for merging forwarded paths (resize dialog input row). */
|
||||
void set_ui_merge_input_edit(HWND h);
|
||||
void clear_ui_merge_input_edit();
|
||||
|
||||
/**
|
||||
* Find the bridge window and send UTF-8 paths (semicolon-separated) to the primary instance.
|
||||
* Retries briefly to avoid races right after mutex creation.
|
||||
*/
|
||||
bool forward_resize_ui_paths_to_primary(const std::string &utf8_paths);
|
||||
|
||||
} // namespace media::win
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
#include <windows.h>
|
||||
|
||||
namespace media::win {
|
||||
|
||||
/** Create named mutex; returns true if this process is the primary UI instance. */
|
||||
bool try_acquire_ui_singleton_mutex();
|
||||
|
||||
/** Release mutex from try_acquire_ui_singleton_mutex (primary only). */
|
||||
void release_ui_singleton_mutex();
|
||||
|
||||
/** Message-only window that receives WM_COPYDATA from secondary instances. */
|
||||
bool create_ui_singleton_bridge();
|
||||
void destroy_ui_singleton_bridge();
|
||||
|
||||
/** Target edit control for merging forwarded paths (resize dialog input row). */
|
||||
void set_ui_merge_input_edit(HWND h);
|
||||
void clear_ui_merge_input_edit();
|
||||
|
||||
/**
|
||||
* Find the bridge window and send UTF-8 paths (semicolon-separated) to the primary instance.
|
||||
* Retries briefly to avoid races right after mutex creation.
|
||||
*/
|
||||
bool forward_resize_ui_paths_to_primary(const std::string &utf8_paths);
|
||||
|
||||
} // namespace media::win
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
import * as CLI from 'yargs';
|
||||
export declare const defaultOptions: (yargs: CLI.Argv) => any;
|
||||
export declare const command = "register-explorer";
|
||||
export declare const desc = "Register pm-media commands in Windows Explorer context menu for image files";
|
||||
export declare const desc = "Forward to media-img.exe register-explorer (Windows; implementation is in C++)";
|
||||
export declare const builder: (yargs: CLI.Argv) => any;
|
||||
export declare function handler(argv: CLI.Arguments): Promise<void>;
|
||||
export declare function handler(): Promise<void>;
|
||||
|
||||
83
packages/media/scripts/explorer-convert.ps1
Normal file
@ -0,0 +1,83 @@
|
||||
# Explorer context menu: convert images to JPEG (re-encode; no resize) via media-img resize --format jpg
|
||||
# Multi-select: one invocation with all paths (Player + %*).
|
||||
# Keep extensions in sync with register_explorer.cpp (canonical list; matching is case-insensitive).
|
||||
param(
|
||||
[Parameter(Mandatory)][string]$MediaImg,
|
||||
[Parameter(Mandatory, ValueFromRemainingArguments = $true)][string[]]$InputPaths
|
||||
)
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$InputPaths = @($InputPaths | Where-Object { $_ -and $_.Trim() -ne '' })
|
||||
if ($InputPaths.Length -eq 0) {
|
||||
exit 1
|
||||
}
|
||||
|
||||
$imageExtLower = @(
|
||||
'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp', '.tiff', '.tif', '.jpe', '.jfif',
|
||||
'.avif', '.arw'
|
||||
)
|
||||
|
||||
function Test-ImageExt([string]$ext) {
|
||||
$e = $ext.ToLowerInvariant()
|
||||
return $script:imageExtLower -contains $e
|
||||
}
|
||||
|
||||
function Invoke-MediaImg([string[]]$ArgList) {
|
||||
$outF = [System.IO.Path]::GetTempFileName()
|
||||
$errF = [System.IO.Path]::GetTempFileName()
|
||||
try {
|
||||
$p = Start-Process -FilePath $MediaImg -ArgumentList $ArgList -Wait -PassThru `
|
||||
-WindowStyle Hidden -RedirectStandardOutput $outF -RedirectStandardError $errF
|
||||
if ($p.ExitCode -ne 0) {
|
||||
$e = if (Test-Path -LiteralPath $errF) { Get-Content -Raw -LiteralPath $errF } else { '' }
|
||||
throw "media-img failed (exit $($p.ExitCode)): $e"
|
||||
}
|
||||
}
|
||||
finally {
|
||||
Remove-Item -LiteralPath $outF, $errF -ErrorAction SilentlyContinue
|
||||
}
|
||||
}
|
||||
|
||||
function Convert-OneFile([string]$File) {
|
||||
$dst = '${SRC_DIR}/${SRC_NAME}_converted.jpg'
|
||||
Invoke-MediaImg @(
|
||||
'resize', '--src', $File, '--dst', $dst,
|
||||
'--format', 'jpg', '-q', '88',
|
||||
'--fit', 'inside', '--no-cache'
|
||||
)
|
||||
}
|
||||
|
||||
function Process-OnePath([string]$Path) {
|
||||
if (-not (Test-Path -LiteralPath $Path)) {
|
||||
exit 1
|
||||
}
|
||||
$item = Get-Item -LiteralPath $Path
|
||||
if ($item.PSIsContainer) {
|
||||
$files = Get-ChildItem -LiteralPath $Path -Recurse -File -ErrorAction Stop |
|
||||
Where-Object { Test-ImageExt $_.Extension }
|
||||
if (-not $files) {
|
||||
exit 0
|
||||
}
|
||||
foreach ($f in $files) {
|
||||
Convert-OneFile $f.FullName
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (-not (Test-ImageExt $item.Extension)) {
|
||||
exit 0
|
||||
}
|
||||
Convert-OneFile $item.FullName
|
||||
}
|
||||
}
|
||||
|
||||
if ($InputPaths.Length -gt 1) {
|
||||
foreach ($p in $InputPaths) {
|
||||
Process-OnePath $p
|
||||
}
|
||||
exit 0
|
||||
}
|
||||
|
||||
Process-OnePath $InputPaths[0]
|
||||
exit 0
|
||||
98
packages/media/scripts/explorer-resize.ps1
Normal file
@ -0,0 +1,98 @@
|
||||
# Explorer context-menu helper: resize images (single file, multiple files, or folder tree) via media-img.exe
|
||||
# Multi-select: Explorer uses MultiSelectModel Player + %* — this script receives all paths in one invocation.
|
||||
# Uses Start-Process -WindowStyle Hidden so no console window (VIPS stderr is redirected to a temp file).
|
||||
param(
|
||||
[Parameter(Mandatory)][string]$MediaImg,
|
||||
[Parameter(Mandatory)][int]$MaxWidth,
|
||||
[Parameter(Mandatory)][ValidateSet('InPlace', 'Copy')][string]$Mode,
|
||||
[Parameter(Mandatory, ValueFromRemainingArguments = $true)][string[]]$InputPaths
|
||||
)
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$InputPaths = @($InputPaths | Where-Object { $_ -and $_.Trim() -ne '' })
|
||||
if ($InputPaths.Length -eq 0) {
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Canonical list — keep in sync with register_explorer.cpp (k_canonical_ext + case-insensitive match)
|
||||
$imageExt = @(
|
||||
'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp', '.tiff', '.tif', '.jpe', '.jfif',
|
||||
'.avif', '.arw'
|
||||
)
|
||||
|
||||
function Test-ImageExt([string]$ext) {
|
||||
$e = $ext.ToLowerInvariant()
|
||||
return $script:imageExt -contains $e
|
||||
}
|
||||
|
||||
function Invoke-MediaImgResize([string[]]$ArgList) {
|
||||
$outF = [System.IO.Path]::GetTempFileName()
|
||||
$errF = [System.IO.Path]::GetTempFileName()
|
||||
try {
|
||||
$p = Start-Process -FilePath $MediaImg -ArgumentList $ArgList -Wait -PassThru `
|
||||
-WindowStyle Hidden -RedirectStandardOutput $outF -RedirectStandardError $errF
|
||||
if ($p.ExitCode -ne 0) {
|
||||
$e = if (Test-Path -LiteralPath $errF) { Get-Content -Raw -LiteralPath $errF } else { '' }
|
||||
throw "media-img failed (exit $($p.ExitCode)): $e"
|
||||
}
|
||||
}
|
||||
finally {
|
||||
Remove-Item -LiteralPath $outF, $errF -ErrorAction SilentlyContinue
|
||||
}
|
||||
}
|
||||
|
||||
function Resize-SingleFile([string]$File) {
|
||||
$w = $MaxWidth
|
||||
if ($Mode -eq 'Copy') {
|
||||
$dst = '${SRC_DIR}/${SRC_NAME}_' + $w + '${SRC_FILE_EXT}'
|
||||
Invoke-MediaImgResize @('resize', '--src', $File, '--dst', $dst, '--max-width', "$w", '--fit', 'inside', '--no-cache')
|
||||
}
|
||||
else {
|
||||
$ext = [System.IO.Path]::GetExtension($File)
|
||||
$tmp = Join-Path $env:TEMP ('media-img-' + [Guid]::NewGuid().ToString('n') + $ext)
|
||||
try {
|
||||
Invoke-MediaImgResize @('resize', '--src', $File, '--dst', $tmp, '--max-width', "$w", '--fit', 'inside', '--no-cache')
|
||||
Move-Item -LiteralPath $tmp -Destination $File -Force
|
||||
}
|
||||
finally {
|
||||
if (Test-Path -LiteralPath $tmp) {
|
||||
Remove-Item -LiteralPath $tmp -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Process-OnePath([string]$Path) {
|
||||
if (-not (Test-Path -LiteralPath $Path)) {
|
||||
exit 1
|
||||
}
|
||||
$item = Get-Item -LiteralPath $Path
|
||||
if ($item.PSIsContainer) {
|
||||
$files = Get-ChildItem -LiteralPath $Path -Recurse -File -ErrorAction Stop |
|
||||
Where-Object { Test-ImageExt $_.Extension }
|
||||
if (-not $files) {
|
||||
exit 0
|
||||
}
|
||||
foreach ($f in $files) {
|
||||
Resize-SingleFile $f.FullName
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (-not (Test-ImageExt $item.Extension)) {
|
||||
exit 0
|
||||
}
|
||||
Resize-SingleFile $item.FullName
|
||||
}
|
||||
}
|
||||
|
||||
if ($InputPaths.Length -gt 1) {
|
||||
foreach ($p in $InputPaths) {
|
||||
Process-OnePath $p
|
||||
}
|
||||
exit 0
|
||||
}
|
||||
|
||||
Process-OnePath $InputPaths[0]
|
||||
exit 0
|
||||
31
packages/media/scripts/explorer-ui.ps1
Normal file
@ -0,0 +1,31 @@
|
||||
# Launch media-img resize --ui once for Explorer multi-select (Player model + %*).
|
||||
# Semicolon-joins paths ( ';' is invalid in Windows filenames ). Uses CreateNoWindow — no console flash.
|
||||
param(
|
||||
[Parameter(Mandatory)][string]$MediaImg,
|
||||
[Parameter(ValueFromRemainingArguments = $true)][string[]]$Paths
|
||||
)
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
if ($null -eq $Paths -or $Paths.Length -eq 0) {
|
||||
exit 1
|
||||
}
|
||||
|
||||
$clean = @($Paths | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' })
|
||||
if ($clean.Length -eq 0) {
|
||||
exit 1
|
||||
}
|
||||
|
||||
$joined = $clean -join ';'
|
||||
|
||||
$p = New-Object System.Diagnostics.Process
|
||||
$p.StartInfo.FileName = $MediaImg
|
||||
$p.StartInfo.Arguments = "resize --ui --src `"$joined`""
|
||||
$p.StartInfo.UseShellExecute = $false
|
||||
$p.StartInfo.CreateNoWindow = $true
|
||||
$p.StartInfo.RedirectStandardOutput = $false
|
||||
$p.StartInfo.RedirectStandardError = $false
|
||||
[void]$p.Start()
|
||||
$p.WaitForExit()
|
||||
exit $p.ExitCode
|
||||
@ -1,327 +1,35 @@
|
||||
import * as CLI from 'yargs'
|
||||
import { logger } from '../index.js'
|
||||
import { spawnSync } from 'child_process'
|
||||
import { existsSync } from 'fs'
|
||||
import { dirname, join } from 'path'
|
||||
import { fileURLToPath } from 'url'
|
||||
import { cli } from '../cli.js'
|
||||
import { defaults } from '../_cli.js'
|
||||
import regedit, { RegistryItemPutCollection, REG_SZ_Value } from 'regedit'
|
||||
import { exec } from 'child_process'
|
||||
import { promisify } from 'util'
|
||||
|
||||
const execAsync = promisify(exec)
|
||||
|
||||
export const defaultOptions = (yargs: CLI.Argv) => {
|
||||
return yargs.option('group', {
|
||||
describe: 'Group name for the context menu items',
|
||||
type: 'string',
|
||||
default: 'PM-Media'
|
||||
}).option('unregister', {
|
||||
default: false,
|
||||
describe: 'Remove the shell extensions from Explorer',
|
||||
type: 'boolean'
|
||||
}).option('dry', {
|
||||
default: false,
|
||||
describe: 'Show what would be registered without actually doing it',
|
||||
type: 'boolean'
|
||||
}).option('refresh-shell', {
|
||||
default: true,
|
||||
describe: 'Refresh Windows Shell to apply changes immediately',
|
||||
type: 'boolean'
|
||||
}).option('logLevel', {
|
||||
describe: 'Log level : warn, info, debug, error',
|
||||
type: 'string',
|
||||
default: 'info'
|
||||
})
|
||||
function findMediaImg(): string {
|
||||
if (process.env.MEDIA_IMG && process.env.MEDIA_IMG.length > 0)
|
||||
return process.env.MEDIA_IMG
|
||||
const pkg = join(dirname(fileURLToPath(import.meta.url)), '..', '..')
|
||||
const p = join(pkg, 'cpp', 'dist', 'media-img.exe')
|
||||
if (existsSync(p))
|
||||
return p
|
||||
return 'media-img.exe'
|
||||
}
|
||||
|
||||
export const command = 'register-explorer'
|
||||
export const desc = 'Register pm-media commands in Windows Explorer context menu for image files'
|
||||
export const builder = defaultOptions
|
||||
export const desc = 'Forward to media-img.exe register-explorer (Windows; implementation is in C++)'
|
||||
export const builder = (yargs: CLI.Argv) => yargs.strict(false)
|
||||
|
||||
// Image file extensions to register with
|
||||
//const IMAGE_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp', '.svg']
|
||||
const IMAGE_EXTENSIONS = ['.jpg']
|
||||
|
||||
type RegType = 'REG_SZ' | 'REG_DWORD' | 'REG_DEFAULT'
|
||||
|
||||
interface ExplorerRegistryEntry {
|
||||
keyPath: string
|
||||
valueName: string
|
||||
value: string
|
||||
type: RegType
|
||||
}
|
||||
|
||||
// Command mappings for Explorer context menu
|
||||
const EXPLORER_COMMANDS = [
|
||||
{
|
||||
name: 'Convert to JPG',
|
||||
command: 'pm-media',
|
||||
args: 'convert --logLevel=info --src="%1" --dst="%~dpn1_converted.jpg"'
|
||||
},
|
||||
{
|
||||
name: 'Resize Image',
|
||||
command: 'pm-media',
|
||||
args: 'resize --logLevel=info --src="%1" --dst="%~dpn1_resized%~x1"'
|
||||
},
|
||||
{
|
||||
name: 'Add Watermark',
|
||||
command: 'pm-media',
|
||||
args: 'watermark --logLevel=info --src="%1" --watermark="${POLYMECH-ROOT}/nordin-ex/branding/logos/polymech-saw-ex.svg" --dst="${SRC_DIR}/${SRC_NAME}_watermarked.${SRC_EXT}"'
|
||||
},
|
||||
{
|
||||
name: 'Remove Background',
|
||||
command: 'pm-media',
|
||||
args: 'background:remove --logLevel=info --src="%1" --dst="%~dpn1_bg_removed%~x1"'
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
/**
|
||||
* Generate registry entries for Windows Explorer shell extensions
|
||||
*/
|
||||
function generateExplorerRegistryEntries(groupName: string): ExplorerRegistryEntry[] {
|
||||
const entries: ExplorerRegistryEntry[] = []
|
||||
|
||||
for (const ext of IMAGE_EXTENSIONS) {
|
||||
const extKey = `HKCU\\Software\\Classes\\SystemFileAssociations\\${ext}`
|
||||
|
||||
// Create the main group entry with MUIVerb and subCommands
|
||||
entries.push({
|
||||
keyPath: `${extKey}\\shell\\${groupName}`,
|
||||
valueName: 'MUIVerb',
|
||||
value: groupName,
|
||||
type: 'REG_SZ'
|
||||
})
|
||||
|
||||
entries.push({
|
||||
keyPath: `${extKey}\\shell\\${groupName}`,
|
||||
valueName: 'subCommands',
|
||||
value: '',
|
||||
type: 'REG_SZ'
|
||||
})
|
||||
|
||||
// For each command, create the shell extension entries
|
||||
for (let i = 0; i < EXPLORER_COMMANDS.length; i++) {
|
||||
const cmd = EXPLORER_COMMANDS[i]
|
||||
const cmdId = cmd.name.replace(/\s+/g, '').toLowerCase()
|
||||
const cmdKey = `${extKey}\\shell\\${groupName}\\shell\\${cmdId}`
|
||||
|
||||
// Command display name using MUIVerb
|
||||
entries.push({
|
||||
keyPath: cmdKey,
|
||||
valueName: 'MUIVerb',
|
||||
value: cmd.name,
|
||||
type: 'REG_SZ'
|
||||
})
|
||||
|
||||
// Direct command execution - pm-media is a global npm command
|
||||
const commandLine = `${cmd.command} ${cmd.args}`
|
||||
entries.push({
|
||||
keyPath: `${cmdKey}\\command`,
|
||||
valueName: '',
|
||||
value: commandLine,
|
||||
type: 'REG_DEFAULT'
|
||||
})
|
||||
|
||||
logger.debug(`Will create command entry: ${cmdKey}\\command = ${commandLine}`)
|
||||
logger.debug(` Command parts: cmd="${cmd.command}", args="${cmd.args}"`)
|
||||
}
|
||||
}
|
||||
|
||||
return entries
|
||||
}
|
||||
|
||||
/**
|
||||
* Write registry entries for Explorer shell extensions
|
||||
*/
|
||||
async function writeExplorerRegistryEntries(entries: ExplorerRegistryEntry[]): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
// Try a different approach - batch all values for each key together
|
||||
const keyGroups: { [keyPath: string]: ExplorerRegistryEntry[] } = {}
|
||||
|
||||
// Group entries by keyPath
|
||||
for (const entry of entries) {
|
||||
if (!keyGroups[entry.keyPath]) {
|
||||
keyGroups[entry.keyPath] = []
|
||||
}
|
||||
keyGroups[entry.keyPath].push(entry)
|
||||
}
|
||||
|
||||
const allKeys = Object.keys(keyGroups)
|
||||
|
||||
// Create all keys first
|
||||
regedit.createKey(allKeys, (err) => {
|
||||
if (err) {
|
||||
logger.error('Failed to create registry keys:', err)
|
||||
reject(err)
|
||||
return
|
||||
}
|
||||
|
||||
logger.debug(`✓ Created ${allKeys.length} registry keys`)
|
||||
|
||||
// Wait for keys to be created
|
||||
setTimeout(() => {
|
||||
let completed = 0
|
||||
let hasError = false
|
||||
|
||||
// Process each key group
|
||||
for (const [keyPath, keyEntries] of Object.entries(keyGroups)) {
|
||||
const valuesToWrite: RegistryItemPutCollection = {
|
||||
[keyPath]: {}
|
||||
}
|
||||
|
||||
// Add all values for this key
|
||||
for (const entry of keyEntries) {
|
||||
const isDefault = entry.type === 'REG_DEFAULT'
|
||||
const valueName = isDefault ? '___default___' : entry.valueName || '' // name is ignored for REG_DEFAULT
|
||||
|
||||
valuesToWrite[keyPath][valueName] = {
|
||||
value: entry.value,
|
||||
// IMPORTANT: use REG_DEFAULT for unnamed default
|
||||
type: (isDefault ? 'REG_DEFAULT' : entry.type) as any
|
||||
}
|
||||
}
|
||||
|
||||
// Write all values for this key at once
|
||||
regedit.putValue(valuesToWrite, (err) => {
|
||||
completed++
|
||||
|
||||
if (err) {
|
||||
hasError = true
|
||||
logger.error(`Failed to set values for ${keyPath}:`, err)
|
||||
} else {
|
||||
logger.debug(`✓ Set ${keyEntries.length} values for key: ${keyPath}`)
|
||||
for (const entry of keyEntries) {
|
||||
const displayName = entry.type === 'REG_DEFAULT' ? '(Default)' : entry.valueName
|
||||
logger.debug(` - ${displayName} = ${entry.value}`)
|
||||
}
|
||||
}
|
||||
|
||||
if (completed === allKeys.length) {
|
||||
if (hasError) {
|
||||
reject(new Error('Some registry values failed to set'))
|
||||
} else {
|
||||
resolve()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}, 500)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove registry entries for Explorer shell extensions
|
||||
*/
|
||||
async function removeExplorerRegistryEntries(groupName: string): Promise<void> {
|
||||
const promisified = regedit.promisified
|
||||
|
||||
for (const ext of IMAGE_EXTENSIONS) {
|
||||
const extKey = `HKCU\\Software\\Classes\\SystemFileAssociations\\${ext}`
|
||||
const groupKey = `${extKey}\\shell\\${groupName}`
|
||||
|
||||
try {
|
||||
// Check if the key exists
|
||||
const result = await promisified.list([groupKey])
|
||||
if (result[groupKey].exists) {
|
||||
await promisified.deleteKey([groupKey])
|
||||
logger.info(`✓ Removed shell extension for ${ext}`)
|
||||
}
|
||||
} catch (error) {
|
||||
logger.debug(`Could not remove key ${groupKey}:`, error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Refresh Windows Shell to apply registry changes without restarting Explorer
|
||||
*/
|
||||
async function refreshShell(): Promise<void> {
|
||||
try {
|
||||
logger.info('Refreshing Windows Shell to apply changes...')
|
||||
|
||||
// Use SHChangeNotify to refresh the shell
|
||||
// This is much safer than killing explorer.exe
|
||||
await execAsync('powershell -Command "Add-Type -TypeDefinition \'using System; using System.Runtime.InteropServices; public class Shell32 { [DllImport(\\\"shell32.dll\\\")] public static extern void SHChangeNotify(int wEventId, int uFlags, IntPtr dwItem1, IntPtr dwItem2); }\'; [Shell32]::SHChangeNotify(0x8000000, 0, [IntPtr]::Zero, [IntPtr]::Zero)"')
|
||||
|
||||
logger.info('✓ Windows Shell refreshed successfully')
|
||||
logger.info('Context menu changes should now be visible')
|
||||
} catch (error) {
|
||||
logger.warn('Failed to refresh shell automatically:', error)
|
||||
logger.warn('You may need to log out and log back in, or restart Windows to see the context menu changes')
|
||||
}
|
||||
}
|
||||
|
||||
export async function handler(argv: CLI.Arguments) {
|
||||
export async function handler() {
|
||||
defaults()
|
||||
logger.settings.minLevel = argv.logLevel as any
|
||||
|
||||
const options = {
|
||||
group: argv.group as string,
|
||||
unregister: argv.unregister as boolean,
|
||||
dry: argv.dry as boolean,
|
||||
refreshShell: argv['refresh-shell'] as boolean
|
||||
}
|
||||
|
||||
if (process.platform !== 'win32') {
|
||||
logger.error('Windows Explorer shell extensions are only supported on Windows')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
try {
|
||||
if (options.unregister) {
|
||||
logger.info(`Removing Explorer shell extensions for group: ${options.group}`)
|
||||
|
||||
if (options.dry) {
|
||||
logger.info('\n=== DRY RUN - Extensions that would be removed ===')
|
||||
for (const ext of IMAGE_EXTENSIONS) {
|
||||
logger.info(` ${ext} files: Remove "${options.group}" context menu`)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
await removeExplorerRegistryEntries(options.group)
|
||||
logger.info(`✓ Successfully removed Explorer shell extensions for: ${options.group}`)
|
||||
|
||||
if (options.refreshShell) {
|
||||
await refreshShell()
|
||||
}
|
||||
|
||||
} else {
|
||||
logger.info(`Registering Explorer shell extensions for group: ${options.group}`)
|
||||
logger.info(`Target file types: ${IMAGE_EXTENSIONS.join(', ')}`)
|
||||
|
||||
const entries = generateExplorerRegistryEntries(options.group)
|
||||
|
||||
if (options.dry) {
|
||||
logger.info('\n=== DRY RUN - Extensions that would be registered ===')
|
||||
for (const ext of IMAGE_EXTENSIONS) {
|
||||
logger.info(`\n${ext} files:`)
|
||||
for (const cmd of EXPLORER_COMMANDS) {
|
||||
logger.info(` → ${cmd.name}: ${cmd.command} ${cmd.args}`)
|
||||
}
|
||||
}
|
||||
logger.info(`\nTotal registry entries: ${entries.length}`)
|
||||
return
|
||||
}
|
||||
|
||||
await writeExplorerRegistryEntries(entries)
|
||||
|
||||
logger.info(`\n=== Registration Complete ===`)
|
||||
logger.info(`Registered ${EXPLORER_COMMANDS.length} commands for ${IMAGE_EXTENSIONS.length} file types`)
|
||||
logger.info(`Total registry entries created: ${entries.length}`)
|
||||
logger.info('\nExplorer context menu entries have been registered.')
|
||||
|
||||
if (options.refreshShell) {
|
||||
await refreshShell()
|
||||
} else {
|
||||
logger.info('You may need to log out and log back in to see the changes.')
|
||||
}
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
logger.error('Failed to register/unregister Explorer shell extensions:', error)
|
||||
console.error('register-explorer is only supported on Windows.')
|
||||
process.exit(1)
|
||||
}
|
||||
const exe = findMediaImg()
|
||||
const args = process.argv.slice(2)
|
||||
const r = spawnSync(exe, args, { stdio: 'inherit', shell: false, windowsHide: true })
|
||||
process.exit(r.status === null ? 1 : r.status)
|
||||
}
|
||||
|
||||
cli.command(command, desc, builder, handler)
|
||||
|
||||